@eagami/ui 5.70.0 → 5.71.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eagami/ui",
3
- "version": "5.70.0",
3
+ "version": "5.71.1",
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",
@@ -31,8 +31,10 @@
31
31
 
32
32
  // Native fields use dir="auto" so typed LTR text stays LTR, but that resolves
33
33
  // an empty field to LTR and parks its placeholder on the left. Pin them to the
34
- // inline-end edge so every RTL field reads from the right like the others.
34
+ // inline-end edge so every RTL field reads from the right like the others. The
35
+ // typed placeholder drawn over an empty field follows its placeholder.
35
36
  [dir='rtl'] input[dir='auto'],
36
- [dir='rtl'] textarea[dir='auto'] {
37
+ [dir='rtl'] textarea[dir='auto'],
38
+ [dir='rtl'] ea-typed-placeholder[dir='auto'] {
37
39
  text-align: right;
38
40
  }
@@ -1,6 +1,27 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import { AfterContentChecked, ElementRef, EnvironmentProviders, InjectionToken, Injector, OnDestroy, OnInit, Signal, TemplateRef, Type } from "@angular/core";
3
3
  import { AbstractControl, ControlValueAccessor } from "@angular/forms";
4
+ /**
5
+ * When a form component shows its validation error.
6
+ *
7
+ * - `'change'`: once the user changes the field and leaves it, or submits the
8
+ * form. A field the user tabs past stays quiet, and a new error waits until
9
+ * focus leaves the field.
10
+ * - `'touch'`: as soon as the user leaves the field, even unchanged, and live
11
+ * while they edit it after that.
12
+ */
13
+ type EaShowErrorsOn = 'change' | 'touch';
14
+ /**
15
+ * App-wide defaults for form components, set through
16
+ * `provideEagamiUi({ forms })`. A form component's own `showErrorsOn` input
17
+ * wins over these for that one field.
18
+ */
19
+ interface EagamiFormsConfig {
20
+ /** When form components show their validation errors; `'change'` by default. */
21
+ showErrorsOn?: EaShowErrorsOn;
22
+ }
23
+ /** DI token carrying the consumer-supplied form defaults. */
24
+ declare const EAGAMI_FORMS_CONFIG: InjectionToken<EagamiFormsConfig>;
4
25
  /**
5
26
  * BCP 47 locale tags supported out of the box. Consumers select one of these
6
27
  * via `provideEagamiUi({ locale })` or `EagamiI18nService.setLocale()`.
@@ -391,8 +412,8 @@ export interface ModePalette {
391
412
  }
392
413
  /**
393
414
  * Full provider configuration for `provideEagamiUi()`. Extends the i18n config
394
- * with an optional brand palette; omit `palette` to keep the un-themed SCSS
395
- * defaults.
415
+ * with an optional brand palette and form error timing; omit `palette` to keep
416
+ * the un-themed SCSS defaults.
396
417
  */
397
418
  export interface EagamiUiConfig extends EagamiI18nConfig {
398
419
  /**
@@ -401,6 +422,11 @@ export interface EagamiUiConfig extends EagamiI18nConfig {
401
422
  * pairing. A contrast violation throws at bootstrap.
402
423
  */
403
424
  palette?: EagamiPaletteConfig;
425
+ /**
426
+ * App-wide defaults for form components, such as `showErrorsOn` for when
427
+ * they show their validation errors. Omit it to keep the `'change'` default.
428
+ */
429
+ forms?: EagamiFormsConfig;
404
430
  }
405
431
  /**
406
432
  * Configures Eagami UI for the application.
@@ -924,6 +950,8 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
924
950
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
925
951
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
926
952
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
953
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
954
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
927
955
  readonly minLength: import("@angular/core").InputSignal<number>;
928
956
  /** Maximum number of characters the input accepts (native `maxlength`). */
929
957
  readonly maxLength: import("@angular/core").InputSignal<number | undefined>;
@@ -1061,6 +1089,11 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
1061
1089
  "required": false;
1062
1090
  "isSignal": true;
1063
1091
  };
1092
+ "showErrorsOn": {
1093
+ "alias": "showErrorsOn";
1094
+ "required": false;
1095
+ "isSignal": true;
1096
+ };
1064
1097
  "minLength": {
1065
1098
  "alias": "minLength";
1066
1099
  "required": false;
@@ -1930,14 +1963,22 @@ export declare class ButtonComponent {
1930
1963
  readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
1931
1964
  /** Space-separated ids of the elements that describe the button, e.g. a hint. */
1932
1965
  readonly ariaDescribedby: import("@angular/core").InputSignal<string | undefined>;
1966
+ /** Whether the content this button shows and hides is open, for a disclosure toggle. */
1967
+ readonly ariaExpanded: import("@angular/core").InputSignal<boolean | undefined>;
1968
+ /** Id of the element this button shows, hides or otherwise controls. */
1969
+ readonly ariaControls: import("@angular/core").InputSignal<string | undefined>;
1970
+ private readonly renderer;
1933
1971
  private readonly buttonEl;
1972
+ private readonly ownedAria;
1934
1973
  /** Fires when the button is activated; suppressed while disabled or loading. */
1935
1974
  readonly clicked: import("@angular/core").OutputEmitterRef<MouseEvent>;
1936
1975
  readonly isDisabled: import("@angular/core").Signal<boolean>;
1937
1976
  readonly hostClasses: import("@angular/core").Signal<Record<string, boolean>>;
1977
+ constructor();
1938
1978
  handleClick(event: MouseEvent): void;
1939
1979
  /** Moves keyboard focus to the underlying native button. */
1940
1980
  focus(): void;
1981
+ private reflectAria;
1941
1982
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
1942
1983
  static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "ea-button", never, {
1943
1984
  "variant": {
@@ -2005,6 +2046,16 @@ export declare class ButtonComponent {
2005
2046
  "required": false;
2006
2047
  "isSignal": true;
2007
2048
  };
2049
+ "ariaExpanded": {
2050
+ "alias": "aria-expanded";
2051
+ "required": false;
2052
+ "isSignal": true;
2053
+ };
2054
+ "ariaControls": {
2055
+ "alias": "aria-controls";
2056
+ "required": false;
2057
+ "isSignal": true;
2058
+ };
2008
2059
  }, {
2009
2060
  "clicked": "clicked";
2010
2061
  }, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
@@ -2149,6 +2200,8 @@ export declare class CheckboxComponent implements ControlValueAccessor {
2149
2200
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
2150
2201
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
2151
2202
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
2203
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
2204
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
2152
2205
  readonly size: import("@angular/core").InputSignal<EaSize>;
2153
2206
  /**
2154
2207
  * Ellipsize a label too long for the space the checkbox is given, revealing
@@ -2216,6 +2269,11 @@ export declare class CheckboxComponent implements ControlValueAccessor {
2216
2269
  "required": false;
2217
2270
  "isSignal": true;
2218
2271
  };
2272
+ "showErrorsOn": {
2273
+ "alias": "showErrorsOn";
2274
+ "required": false;
2275
+ "isSignal": true;
2276
+ };
2219
2277
  "size": {
2220
2278
  "alias": "size";
2221
2279
  "required": false;
@@ -2532,6 +2590,8 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
2532
2590
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
2533
2591
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
2534
2592
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
2593
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
2594
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
2535
2595
  /** Whether to show the alpha slider. When `false` the emitted value always has alpha = 1. */
2536
2596
  readonly showAlpha: import("@angular/core").InputSignal<boolean>;
2537
2597
  /** Whether to show the clear button when a value is set. */
@@ -2746,6 +2806,11 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
2746
2806
  "required": false;
2747
2807
  "isSignal": true;
2748
2808
  };
2809
+ "showErrorsOn": {
2810
+ "alias": "showErrorsOn";
2811
+ "required": false;
2812
+ "isSignal": true;
2813
+ };
2749
2814
  "showAlpha": {
2750
2815
  "alias": "showAlpha";
2751
2816
  "required": false;
@@ -3553,6 +3618,8 @@ export declare class CodeInputComponent implements ControlValueAccessor {
3553
3618
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
3554
3619
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
3555
3620
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
3621
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
3622
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
3556
3623
  readonly disabled: import("@angular/core").InputSignal<boolean>;
3557
3624
  readonly readonly: import("@angular/core").InputSignal<boolean>;
3558
3625
  readonly required: import("@angular/core").InputSignal<boolean>;
@@ -3645,6 +3712,11 @@ export declare class CodeInputComponent implements ControlValueAccessor {
3645
3712
  "required": false;
3646
3713
  "isSignal": true;
3647
3714
  };
3715
+ "showErrorsOn": {
3716
+ "alias": "showErrorsOn";
3717
+ "required": false;
3718
+ "isSignal": true;
3719
+ };
3648
3720
  "disabled": {
3649
3721
  "alias": "disabled";
3650
3722
  "required": false;
@@ -3735,6 +3807,8 @@ export declare class DatePickerComponent implements ControlValueAccessor {
3735
3807
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
3736
3808
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
3737
3809
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
3810
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
3811
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
3738
3812
  readonly minDate: import("@angular/core").InputSignal<Date | null>;
3739
3813
  readonly maxDate: import("@angular/core").InputSignal<Date | null>;
3740
3814
  /** Weekdays that cannot be picked, numbered as `Date.getDay()` does: 0 for Sunday through 6 for Saturday. */
@@ -3907,6 +3981,11 @@ export declare class DatePickerComponent implements ControlValueAccessor {
3907
3981
  "required": false;
3908
3982
  "isSignal": true;
3909
3983
  };
3984
+ "showErrorsOn": {
3985
+ "alias": "showErrorsOn";
3986
+ "required": false;
3987
+ "isSignal": true;
3988
+ };
3910
3989
  "minDate": {
3911
3990
  "alias": "minDate";
3912
3991
  "required": false;
@@ -4400,6 +4479,8 @@ export declare class DropdownComponent implements ControlValueAccessor {
4400
4479
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
4401
4480
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
4402
4481
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
4482
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
4483
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
4403
4484
  readonly id: import("@angular/core").InputSignal<string>;
4404
4485
  readonly value: import("@angular/core").ModelSignal<string>;
4405
4486
  /** Fires with the new value when the user selects an option or clears the selection. */
@@ -4555,6 +4636,11 @@ export declare class DropdownComponent implements ControlValueAccessor {
4555
4636
  "required": false;
4556
4637
  "isSignal": true;
4557
4638
  };
4639
+ "showErrorsOn": {
4640
+ "alias": "showErrorsOn";
4641
+ "required": false;
4642
+ "isSignal": true;
4643
+ };
4558
4644
  "id": {
4559
4645
  "alias": "id";
4560
4646
  "required": false;
@@ -4800,6 +4886,8 @@ export declare class FormFieldComponent {
4800
4886
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
4801
4887
  /** Per-validator-key message overrides for the projected form control (e.g. `{ required: '...' }`). */
4802
4888
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
4889
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
4890
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
4803
4891
  /** Marks the field as required. */
4804
4892
  readonly required: import("@angular/core").InputSignal<boolean>;
4805
4893
  /** Visual size of the field; the label, control text, spacing, and messages scale with it. */
@@ -4854,6 +4942,11 @@ export declare class FormFieldComponent {
4854
4942
  "required": false;
4855
4943
  "isSignal": true;
4856
4944
  };
4945
+ "showErrorsOn": {
4946
+ "alias": "showErrorsOn";
4947
+ "required": false;
4948
+ "isSignal": true;
4949
+ };
4857
4950
  "required": {
4858
4951
  "alias": "required";
4859
4952
  "required": false;
@@ -4886,6 +4979,8 @@ interface ControlErrorStateConfig {
4886
4979
  errorMsg: Signal<string | null | undefined>;
4887
4980
  /** Per-error-key overrides for auto-derived validation messages. */
4888
4981
  errorMessages: Signal<EaErrorMessages | undefined>;
4982
+ /** Field-level `showErrorsOn`; `undefined` falls back to the app-wide `forms` config. */
4983
+ showErrorsOn?: Signal<EaShowErrorsOn | undefined>;
4889
4984
  }
4890
4985
  interface ControlErrorState {
4891
4986
  /** Error text to display, or `null` when the field is valid or untouched. */
@@ -4899,14 +4994,15 @@ interface ControlErrorState {
4899
4994
  * default for the active `ValidationErrors` key.
4900
4995
  *
4901
4996
  * Auto-derived messages surface only once the bound control is `invalid &&
4902
- * touched`, and a new one waits while focus is still inside the field, until
4903
- * the user leaves it or submits the form, so nothing is flagged mid-edit. A
4904
- * field the user only passed through, leaving it without changing it, stays
4905
- * quiet until they change it or the form is submitted, so tabbing past an
4906
- * empty required field never flags it. A
4907
- * message already showing follows the value as it is typed and clears the
4908
- * moment it is fixed. A message revealed by a pointer press moving focus away
4909
- * waits until that press has landed its click. The control arrives as a signal
4997
+ * touched`. Under the default `showErrorsOn: 'change'`, a new one waits while
4998
+ * focus is still inside the field, until the user leaves it or submits the
4999
+ * form, so nothing is flagged mid-edit, and a field the user only passed
5000
+ * through, leaving it without changing it, stays quiet until they change it or
5001
+ * the form is submitted, so tabbing past an empty required field never flags
5002
+ * it. `'touch'` drops both holds. A message already showing follows the value
5003
+ * as it is typed and clears the moment it is fixed. A message revealed by a
5004
+ * pointer press moving focus away waits until that press has landed its click,
5005
+ * in either mode. The control arrives as a signal
4910
5006
  * so callers decide how it is resolved: from the host's own `NgControl` (CVA
4911
5007
  * components) or from projected content (`<ea-form-field>`).
4912
5008
  */
@@ -4982,6 +5078,8 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
4982
5078
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
4983
5079
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
4984
5080
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
5081
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
5082
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
4985
5083
  readonly size: import("@angular/core").InputSignal<EaSize>;
4986
5084
  /**
4987
5085
  * `dropzone` renders the drag-and-drop area; `button` renders a compact
@@ -5131,6 +5229,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
5131
5229
  "required": false;
5132
5230
  "isSignal": true;
5133
5231
  };
5232
+ "showErrorsOn": {
5233
+ "alias": "showErrorsOn";
5234
+ "required": false;
5235
+ "isSignal": true;
5236
+ };
5134
5237
  "size": {
5135
5238
  "alias": "size";
5136
5239
  "required": false;
@@ -5218,6 +5321,26 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
5218
5321
  "dragOverChanged": "dragOverChanged";
5219
5322
  }, never, ["[icon]"], true, never>;
5220
5323
  }
5324
+ /** Live state of a field's typewriter placeholder. */
5325
+ interface TypedPlaceholder {
5326
+ /** Whether the typed layer stands in for the native placeholder. */
5327
+ readonly animating: Signal<boolean>;
5328
+ /** The whole hint in play, for the native `placeholder` attribute. */
5329
+ readonly hint: Signal<string>;
5330
+ /** The part of the hint typed so far. */
5331
+ readonly text: Signal<string>;
5332
+ /** Whether characters are still arriving; the cursor blinks only once they stop. */
5333
+ readonly typing: Signal<boolean>;
5334
+ }
5335
+ /**
5336
+ * Types `hints` into a field's placeholder one character at a time, holds each
5337
+ * whole hint, then clears it and types the next, looping. Under
5338
+ * `prefers-reduced-motion: reduce` it swaps whole hints instead and never
5339
+ * animates. It starts in the browser after the first render, restarts when the
5340
+ * hints change, and clears its timer on destroy. The timers run outside the
5341
+ * zone so the endless loop never holds the app unstable.
5342
+ */
5343
+ declare function injectTypedPlaceholder(hints: Signal<readonly string[]>): TypedPlaceholder;
5221
5344
  /** Visual size of the input. */
5222
5345
  export type InputSize = EaSize;
5223
5346
  /** HTML `type` attribute applied to the underlying `<input>`. */
@@ -5256,6 +5379,14 @@ export declare class InputComponent implements ControlValueAccessor {
5256
5379
  readonly type: import("@angular/core").InputSignal<InputType>;
5257
5380
  /** Placeholder shown while the field is empty. */
5258
5381
  readonly placeholder: import("@angular/core").InputSignal<string>;
5382
+ /**
5383
+ * Hints typed into the empty field one character at a time, trailed by a
5384
+ * blinking cursor, each held and then replaced by the next, in a loop. The
5385
+ * native placeholder carries the whole current hint for assistive
5386
+ * technology, and under `prefers-reduced-motion` the hints swap whole without
5387
+ * a cursor. Takes the place of `placeholder` while it holds any hints.
5388
+ */
5389
+ readonly typedPlaceholder: import("@angular/core").InputSignal<readonly string[]>;
5259
5390
  /** Leading icon component rendered before the text, e.g. a search or filter glyph. */
5260
5391
  readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
5261
5392
  /** Keeps the leading icon while the field has a value; when false it shows only alongside the placeholder. */
@@ -5268,6 +5399,8 @@ export declare class InputComponent implements ControlValueAccessor {
5268
5399
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
5269
5400
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
5270
5401
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
5402
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
5403
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
5271
5404
  /** Disables the field. */
5272
5405
  readonly disabled: import("@angular/core").InputSignal<boolean>;
5273
5406
  /** Renders the field read-only. */
@@ -5310,6 +5443,9 @@ export declare class InputComponent implements ControlValueAccessor {
5310
5443
  private onChange;
5311
5444
  private onTouched;
5312
5445
  readonly isDisabled: import("@angular/core").Signal<boolean>;
5446
+ protected readonly typed: TypedPlaceholder;
5447
+ protected readonly typedPlaceholderShown: import("@angular/core").Signal<boolean>;
5448
+ protected readonly nativePlaceholder: import("@angular/core").Signal<string>;
5313
5449
  readonly effectiveType: import("@angular/core").Signal<InputType>;
5314
5450
  private readonly errorState;
5315
5451
  readonly errorText: import("@angular/core").Signal<string | null>;
@@ -5409,6 +5545,11 @@ export declare class InputComponent implements ControlValueAccessor {
5409
5545
  "required": false;
5410
5546
  "isSignal": true;
5411
5547
  };
5548
+ "typedPlaceholder": {
5549
+ "alias": "typedPlaceholder";
5550
+ "required": false;
5551
+ "isSignal": true;
5552
+ };
5412
5553
  "icon": {
5413
5554
  "alias": "icon";
5414
5555
  "required": false;
@@ -5439,6 +5580,11 @@ export declare class InputComponent implements ControlValueAccessor {
5439
5580
  "required": false;
5440
5581
  "isSignal": true;
5441
5582
  };
5583
+ "showErrorsOn": {
5584
+ "alias": "showErrorsOn";
5585
+ "required": false;
5586
+ "isSignal": true;
5587
+ };
5442
5588
  "disabled": {
5443
5589
  "alias": "disabled";
5444
5590
  "required": false;
@@ -6003,6 +6149,8 @@ export declare class MultiSelectComponent implements ControlValueAccessor {
6003
6149
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6004
6150
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
6005
6151
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
6152
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
6153
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
6006
6154
  /** Toggle the search input at the top of the popover. */
6007
6155
  readonly searchable: import("@angular/core").InputSignal<boolean>;
6008
6156
  /** Toggle the "Select all" row at the top of the option list. */
@@ -6247,6 +6395,11 @@ export declare class MultiSelectComponent implements ControlValueAccessor {
6247
6395
  "required": false;
6248
6396
  "isSignal": true;
6249
6397
  };
6398
+ "showErrorsOn": {
6399
+ "alias": "showErrorsOn";
6400
+ "required": false;
6401
+ "isSignal": true;
6402
+ };
6250
6403
  "searchable": {
6251
6404
  "alias": "searchable";
6252
6405
  "required": false;
@@ -6327,6 +6480,8 @@ export declare class NumberInputComponent implements ControlValueAccessor {
6327
6480
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6328
6481
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
6329
6482
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
6483
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
6484
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
6330
6485
  /** Disables the field. */
6331
6486
  readonly disabled: import("@angular/core").InputSignal<boolean>;
6332
6487
  /** Renders the field read-only. */
@@ -6440,6 +6595,11 @@ export declare class NumberInputComponent implements ControlValueAccessor {
6440
6595
  "required": false;
6441
6596
  "isSignal": true;
6442
6597
  };
6598
+ "showErrorsOn": {
6599
+ "alias": "showErrorsOn";
6600
+ "required": false;
6601
+ "isSignal": true;
6602
+ };
6443
6603
  "disabled": {
6444
6604
  "alias": "disabled";
6445
6605
  "required": false;
@@ -6931,6 +7091,8 @@ export declare class RadioGroupComponent implements ControlValueAccessor {
6931
7091
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6932
7092
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
6933
7093
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
7094
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
7095
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
6934
7096
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
6935
7097
  /** Space-separated ids of the elements whose text names the group, such as a label outside the component. */
6936
7098
  readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
@@ -7019,6 +7181,11 @@ export declare class RadioGroupComponent implements ControlValueAccessor {
7019
7181
  "required": false;
7020
7182
  "isSignal": true;
7021
7183
  };
7184
+ "showErrorsOn": {
7185
+ "alias": "showErrorsOn";
7186
+ "required": false;
7187
+ "isSignal": true;
7188
+ };
7022
7189
  "ariaLabel": {
7023
7190
  "alias": "aria-label";
7024
7191
  "required": false;
@@ -7116,6 +7283,8 @@ export declare class RangeSliderComponent implements ControlValueAccessor {
7116
7283
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
7117
7284
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
7118
7285
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
7286
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
7287
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
7119
7288
  readonly min: import("@angular/core").InputSignal<number>;
7120
7289
  readonly max: import("@angular/core").InputSignal<number>;
7121
7290
  readonly step: import("@angular/core").InputSignal<number>;
@@ -7214,6 +7383,11 @@ export declare class RangeSliderComponent implements ControlValueAccessor {
7214
7383
  "required": false;
7215
7384
  "isSignal": true;
7216
7385
  };
7386
+ "showErrorsOn": {
7387
+ "alias": "showErrorsOn";
7388
+ "required": false;
7389
+ "isSignal": true;
7390
+ };
7217
7391
  "min": {
7218
7392
  "alias": "min";
7219
7393
  "required": false;
@@ -7330,6 +7504,8 @@ export declare class RatingComponent implements ControlValueAccessor {
7330
7504
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
7331
7505
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
7332
7506
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
7507
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
7508
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
7333
7509
  readonly size: import("@angular/core").InputSignal<EaSize>;
7334
7510
  readonly min: import("@angular/core").InputSignal<number>;
7335
7511
  readonly max: import("@angular/core").InputSignal<number>;
@@ -7436,6 +7612,11 @@ export declare class RatingComponent implements ControlValueAccessor {
7436
7612
  "required": false;
7437
7613
  "isSignal": true;
7438
7614
  };
7615
+ "showErrorsOn": {
7616
+ "alias": "showErrorsOn";
7617
+ "required": false;
7618
+ "isSignal": true;
7619
+ };
7439
7620
  "size": {
7440
7621
  "alias": "size";
7441
7622
  "required": false;
@@ -7523,6 +7704,8 @@ export declare class SegmentedComponent implements ControlValueAccessor {
7523
7704
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
7524
7705
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
7525
7706
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
7707
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
7708
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
7526
7709
  readonly size: import("@angular/core").InputSignal<EaSize>;
7527
7710
  readonly disabled: import("@angular/core").InputSignal<boolean>;
7528
7711
  readonly required: import("@angular/core").InputSignal<boolean>;
@@ -7603,6 +7786,11 @@ export declare class SegmentedComponent implements ControlValueAccessor {
7603
7786
  "required": false;
7604
7787
  "isSignal": true;
7605
7788
  };
7789
+ "showErrorsOn": {
7790
+ "alias": "showErrorsOn";
7791
+ "required": false;
7792
+ "isSignal": true;
7793
+ };
7606
7794
  "size": {
7607
7795
  "alias": "size";
7608
7796
  "required": false;
@@ -7705,6 +7893,8 @@ export declare class SliderComponent implements ControlValueAccessor {
7705
7893
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
7706
7894
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
7707
7895
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
7896
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
7897
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
7708
7898
  /** Force the error-state styling without binding `errorMsg`. Lets consumers
7709
7899
  * render the error text themselves (e.g. above the slider in a form layout)
7710
7900
  * while still getting the built-in recolour of the fill and thumb. */
@@ -7805,6 +7995,11 @@ export declare class SliderComponent implements ControlValueAccessor {
7805
7995
  "required": false;
7806
7996
  "isSignal": true;
7807
7997
  };
7998
+ "showErrorsOn": {
7999
+ "alias": "showErrorsOn";
8000
+ "required": false;
8001
+ "isSignal": true;
8002
+ };
7808
8003
  "hasError": {
7809
8004
  "alias": "hasError";
7810
8005
  "required": false;
@@ -8238,6 +8433,8 @@ export declare class SwitchComponent implements ControlValueAccessor {
8238
8433
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
8239
8434
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
8240
8435
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
8436
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
8437
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
8241
8438
  readonly size: import("@angular/core").InputSignal<EaSize>;
8242
8439
  /**
8243
8440
  * Status tone for the track: a tinted wash with a toned border while off and
@@ -8298,6 +8495,11 @@ export declare class SwitchComponent implements ControlValueAccessor {
8298
8495
  "required": false;
8299
8496
  "isSignal": true;
8300
8497
  };
8498
+ "showErrorsOn": {
8499
+ "alias": "showErrorsOn";
8500
+ "required": false;
8501
+ "isSignal": true;
8502
+ };
8301
8503
  "size": {
8302
8504
  "alias": "size";
8303
8505
  "required": false;
@@ -8783,11 +8985,21 @@ export declare class TextareaComponent implements ControlValueAccessor {
8783
8985
  /** Accessible name for the control when no visible `label` is set. */
8784
8986
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
8785
8987
  readonly placeholder: import("@angular/core").InputSignal<string>;
8988
+ /**
8989
+ * Hints typed into the empty field one character at a time, trailed by a
8990
+ * blinking cursor, each held and then replaced by the next, in a loop. The
8991
+ * native placeholder carries the whole current hint for assistive
8992
+ * technology, and under `prefers-reduced-motion` the hints swap whole without
8993
+ * a cursor. Takes the place of `placeholder` while it holds any hints.
8994
+ */
8995
+ readonly typedPlaceholder: import("@angular/core").InputSignal<readonly string[]>;
8786
8996
  readonly size: import("@angular/core").InputSignal<EaSize>;
8787
8997
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
8788
8998
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
8789
8999
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
8790
9000
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
9001
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
9002
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
8791
9003
  readonly disabled: import("@angular/core").InputSignal<boolean>;
8792
9004
  readonly readonly: import("@angular/core").InputSignal<boolean>;
8793
9005
  readonly required: import("@angular/core").InputSignal<boolean>;
@@ -8812,6 +9024,9 @@ export declare class TextareaComponent implements ControlValueAccessor {
8812
9024
  private onChange;
8813
9025
  private onTouched;
8814
9026
  readonly isDisabled: import("@angular/core").Signal<boolean>;
9027
+ protected readonly typed: TypedPlaceholder;
9028
+ protected readonly typedPlaceholderShown: import("@angular/core").Signal<boolean>;
9029
+ protected readonly nativePlaceholder: import("@angular/core").Signal<string>;
8815
9030
  private readonly errorState;
8816
9031
  readonly errorText: import("@angular/core").Signal<string | null>;
8817
9032
  readonly hasError: import("@angular/core").Signal<boolean>;
@@ -8881,6 +9096,11 @@ export declare class TextareaComponent implements ControlValueAccessor {
8881
9096
  "required": false;
8882
9097
  "isSignal": true;
8883
9098
  };
9099
+ "typedPlaceholder": {
9100
+ "alias": "typedPlaceholder";
9101
+ "required": false;
9102
+ "isSignal": true;
9103
+ };
8884
9104
  "size": {
8885
9105
  "alias": "size";
8886
9106
  "required": false;
@@ -8901,6 +9121,11 @@ export declare class TextareaComponent implements ControlValueAccessor {
8901
9121
  "required": false;
8902
9122
  "isSignal": true;
8903
9123
  };
9124
+ "showErrorsOn": {
9125
+ "alias": "showErrorsOn";
9126
+ "required": false;
9127
+ "isSignal": true;
9128
+ };
8904
9129
  "disabled": {
8905
9130
  "alias": "disabled";
8906
9131
  "required": false;
@@ -9016,6 +9241,8 @@ export declare class TimePickerComponent implements ControlValueAccessor {
9016
9241
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
9017
9242
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
9018
9243
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string | null>> | undefined>;
9244
+ /** When the error shows: `'change'` once the user changes the field and leaves it, `'touch'` as soon as they leave it, even unchanged; unset follows the app-wide `forms` option of `provideEagamiUi`. */
9245
+ readonly showErrorsOn: import("@angular/core").InputSignal<EaShowErrorsOn | undefined>;
9019
9246
  /** Display format for the trigger label. Wire value is always 24h. */
9020
9247
  readonly format: import("@angular/core").InputSignal<TimePickerFormat>;
9021
9248
  readonly includeSeconds: import("@angular/core").InputSignal<boolean>;
@@ -9227,6 +9454,11 @@ export declare class TimePickerComponent implements ControlValueAccessor {
9227
9454
  "required": false;
9228
9455
  "isSignal": true;
9229
9456
  };
9457
+ "showErrorsOn": {
9458
+ "alias": "showErrorsOn";
9459
+ "required": false;
9460
+ "isSignal": true;
9461
+ };
9230
9462
  "format": {
9231
9463
  "alias": "format";
9232
9464
  "required": false;
@@ -13964,4 +14196,4 @@ export declare class ZoomOutIconComponent extends IconComponentBase {
13964
14196
  static ɵfac: i0.ɵɵFactoryDeclaration<ZoomOutIconComponent, never>;
13965
14197
  static ɵcmp: i0.ɵɵComponentDeclaration<ZoomOutIconComponent, "ea-icon-zoom-out", never, {}, {}, never, never, true, never>;
13966
14198
  }
13967
- export type { ChartCurve, ChartLabelOrientation, ChartPointEvent, ChartReferenceLine, ChartSeries, ChartSize, EaErrorMessages, EaValidationErrorKey };
14199
+ export type { ChartCurve, ChartLabelOrientation, ChartPointEvent, ChartReferenceLine, ChartSeries, ChartSize, EaErrorMessages, EaShowErrorsOn, EaValidationErrorKey, EagamiFormsConfig };