@eagami/ui 5.53.0 → 5.54.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.
@@ -136,6 +136,10 @@ export interface EagamiMessages {
136
136
  dropdown: {
137
137
  placeholder: string;
138
138
  };
139
+ fieldLabel: {
140
+ /** Accessible name of the button that reveals a field label's help. */
141
+ help: (label: string) => string;
142
+ };
139
143
  fileUploader: {
140
144
  prompt: string;
141
145
  promptSingle: string;
@@ -613,13 +617,19 @@ export type EaSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
613
617
  export type EaWidth = EaSize | '2xl' | 'full';
614
618
  /**
615
619
  * Single expandable section within an `ea-accordion`. Each item exposes a
616
- * header button with the supplied `label` and reveals its projected content
620
+ * header button with the supplied `label`, or with an element projected as
621
+ * `slot="label"` for richer content, and reveals its other projected content
617
622
  * when expanded. Inherits its size from the parent accordion. Must be
618
623
  * rendered inside an `ea-accordion`.
619
624
  */
620
625
  export declare class AccordionItemComponent implements OnInit, OnDestroy {
621
626
  private readonly accordion;
622
627
  readonly value: import("@angular/core").InputSignal<string>;
628
+ /**
629
+ * Plain-text label shown in the header button. For richer content, project
630
+ * an element with `slot="label"` instead: its text then names the button, so
631
+ * mark purely decorative parts of it `aria-hidden`.
632
+ */
623
633
  readonly label: import("@angular/core").InputSignal<string>;
624
634
  /** Optional icon component rendered before the label in the header button. */
625
635
  readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
@@ -641,7 +651,7 @@ export declare class AccordionItemComponent implements OnInit, OnDestroy {
641
651
  };
642
652
  "label": {
643
653
  "alias": "label";
644
- "required": true;
654
+ "required": false;
645
655
  "isSignal": true;
646
656
  };
647
657
  "icon": {
@@ -659,7 +669,7 @@ export declare class AccordionItemComponent implements OnInit, OnDestroy {
659
669
  "required": false;
660
670
  "isSignal": true;
661
671
  };
662
- }, {}, never, ["*"], true, never>;
672
+ }, {}, never, ["[slot=label]", "*"], true, never>;
663
673
  }
664
674
  /** Heading level exposed by each item's header for assistive technology. */
665
675
  export type AccordionHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
@@ -668,7 +678,9 @@ export type AccordionSize = EaSize;
668
678
  /**
669
679
  * Container for expandable content sections. By default only one item can be
670
680
  * open at a time; set `multi` to allow several to stay expanded together.
671
- * Provides a built-in chevron animation and supports per-item disabling.
681
+ * Which items are open is the `expandedValues` model, so items can start
682
+ * expanded or be controlled from outside. Provides a built-in chevron
683
+ * animation and supports per-item disabling.
672
684
  */
673
685
  export declare class AccordionComponent {
674
686
  readonly multi: import("@angular/core").InputSignal<boolean>;
@@ -678,6 +690,12 @@ export declare class AccordionComponent {
678
690
  readonly headingLevel: import("@angular/core").InputSignal<AccordionHeadingLevel>;
679
691
  /** Tints an open item's header and sets its label, icon, and chevron in the brand color. */
680
692
  readonly highlightExpanded: import("@angular/core").InputSignal<boolean>;
693
+ /**
694
+ * Values of the expanded items. Set it to open items from the start, or bind
695
+ * `[(expandedValues)]` to control expansion from outside. Without `multi`,
696
+ * only the first of them in document order stays open.
697
+ */
698
+ readonly expandedValues: import("@angular/core").ModelSignal<readonly string[]>;
681
699
  readonly expandedItems: import("@angular/core").WritableSignal<Set<string>>;
682
700
  readonly registeredItems: import("@angular/core").WritableSignal<AccordionItemComponent[]>;
683
701
  constructor();
@@ -707,16 +725,25 @@ export declare class AccordionComponent {
707
725
  "required": false;
708
726
  "isSignal": true;
709
727
  };
710
- }, {}, never, ["*"], true, never>;
728
+ "expandedValues": {
729
+ "alias": "expandedValues";
730
+ "required": false;
731
+ "isSignal": true;
732
+ };
733
+ }, {
734
+ "expandedValues": "expandedValuesChange";
735
+ }, never, ["*"], true, never>;
711
736
  }
712
737
  /** Semantic colour scheme of an alert. Drives icon and palette. */
713
738
  export type AlertVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
714
739
  /** Scales the alert's text, icon, and gap together. */
715
740
  export type AlertSize = EaSize;
741
+ /** How assistive technology announces an alert. */
742
+ export type AlertLive = 'auto' | 'assertive' | 'polite' | 'off';
716
743
  /**
717
744
  * Inline banner for surfacing semantic messages such as success confirmations,
718
745
  * warnings, or errors. Optionally dismissible, with a two-way `visible`
719
- * binding and an automatically chosen ARIA role based on severity.
746
+ * binding and an ARIA role chosen by severity unless `live` sets one.
720
747
  */
721
748
  export declare class AlertComponent {
722
749
  protected readonly i18n: EagamiI18nService;
@@ -726,12 +753,20 @@ export declare class AlertComponent {
726
753
  readonly visible: import("@angular/core").ModelSignal<boolean>;
727
754
  /** Overrides the variant's default status icon with any icon component. */
728
755
  readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
756
+ /**
757
+ * How assistive technology announces the alert. `auto` interrupts for
758
+ * `error` and `warning` (`role="alert"`) and waits its turn for the rest
759
+ * (`role="status"`); `assertive` and `polite` pick one of those whatever the
760
+ * variant, and `off` announces nothing, for static text that is part of the
761
+ * page rather than news about it.
762
+ */
763
+ readonly live: import("@angular/core").InputSignal<AlertLive>;
729
764
  /** Fires when the user dismisses the alert via its close button. */
730
765
  readonly dismissed: import("@angular/core").OutputEmitterRef<void>;
731
766
  readonly alertClasses: import("@angular/core").Signal<{
732
767
  [x: string]: boolean;
733
768
  }>;
734
- readonly role: import("@angular/core").Signal<"alert" | "status">;
769
+ readonly role: import("@angular/core").Signal<"alert" | "status" | null>;
735
770
  /** Hides the alert and emits `dismissed`. */
736
771
  dismiss(): void;
737
772
  static ɵfac: i0.ɵɵFactoryDeclaration<AlertComponent, never>;
@@ -761,6 +796,11 @@ export declare class AlertComponent {
761
796
  "required": false;
762
797
  "isSignal": true;
763
798
  };
799
+ "live": {
800
+ "alias": "live";
801
+ "required": false;
802
+ "isSignal": true;
803
+ };
764
804
  }, {
765
805
  "visible": "visibleChange";
766
806
  "dismissed": "dismissed";
@@ -834,6 +874,8 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
834
874
  readonly label: import("@angular/core").InputSignal<string | undefined>;
835
875
  /** Optional icon component rendered before the label text. */
836
876
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
877
+ /** Help revealed by an info button beside the label, as plain text or a template. */
878
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
837
879
  /** Accessible name for the input and suggestion list when no visible label is provided. */
838
880
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
839
881
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -848,6 +890,8 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
848
890
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
849
891
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
850
892
  readonly minLength: import("@angular/core").InputSignal<number>;
893
+ /** Maximum number of characters the input accepts (native `maxlength`). */
894
+ readonly maxLength: import("@angular/core").InputSignal<number | undefined>;
851
895
  readonly maxResults: import("@angular/core").InputSignal<number>;
852
896
  readonly emptyMessage: import("@angular/core").InputSignal<string | undefined>;
853
897
  readonly id: import("@angular/core").InputSignal<string>;
@@ -922,6 +966,11 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
922
966
  "required": false;
923
967
  "isSignal": true;
924
968
  };
969
+ "labelHelp": {
970
+ "alias": "labelHelp";
971
+ "required": false;
972
+ "isSignal": true;
973
+ };
925
974
  "ariaLabel": {
926
975
  "alias": "ariaLabel";
927
976
  "required": false;
@@ -977,6 +1026,11 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
977
1026
  "required": false;
978
1027
  "isSignal": true;
979
1028
  };
1029
+ "maxLength": {
1030
+ "alias": "maxLength";
1031
+ "required": false;
1032
+ "isSignal": true;
1033
+ };
980
1034
  "maxResults": {
981
1035
  "alias": "maxResults";
982
1036
  "required": false;
@@ -1681,19 +1735,29 @@ export declare class BreadcrumbsComponent {
1681
1735
  "clicked": "clicked";
1682
1736
  }, never, never, true, never>;
1683
1737
  }
1684
- /** Visual style of a button; drives colour and emphasis. */
1685
- export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
1738
+ /**
1739
+ * Visual style of a button; drives colour and emphasis. `link` drops the box
1740
+ * for an inline text link in the link colour, underlined on hover and focus.
1741
+ */
1742
+ export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'link';
1686
1743
  /** Visual size of a button. */
1687
1744
  export type ButtonSize = EaSize;
1688
1745
  /** HTML `type` attribute applied to the underlying `<button>` element. */
1689
1746
  export type ButtonType = 'button' | 'submit' | 'reset';
1690
1747
  /**
1691
- * Standard action button supporting primary, secondary, ghost, and danger
1692
- * variants. Includes a loading state that swaps the label for a spinner while
1693
- * preserving the rendered width. Chrome is tunable per instance via
1748
+ * Placement of a button's content along its inline axis when the button is
1749
+ * wider than its content. `start` and `end` follow the text direction.
1750
+ */
1751
+ export type ButtonAlign = 'start' | 'center' | 'end';
1752
+ /**
1753
+ * Standard action button supporting primary, secondary, ghost, danger, and
1754
+ * link variants. Includes a loading state that swaps the label for a spinner
1755
+ * while preserving the rendered width. Chrome is tunable per instance via
1694
1756
  * `--ea-button-padding`, `--ea-button-min-height` and `--ea-button-radius`,
1695
1757
  * which is how an icon-only button comes down to little more than its glyph
1696
- * and how a call-to-action becomes a pill.
1758
+ * and how a call-to-action becomes a pill. For navigation, put
1759
+ * `ButtonLinkComponent` on an anchor instead (`<a eaButtonLink href="...">`):
1760
+ * it takes the same styling inputs and keeps real link behaviour.
1697
1761
  */
1698
1762
  export declare class ButtonComponent {
1699
1763
  readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
@@ -1702,22 +1766,28 @@ export declare class ButtonComponent {
1702
1766
  readonly disabled: import("@angular/core").InputSignal<boolean>;
1703
1767
  readonly loading: import("@angular/core").InputSignal<boolean>;
1704
1768
  readonly fullWidth: import("@angular/core").InputSignal<boolean>;
1769
+ /**
1770
+ * Places the content along the inline axis of a button wider than it, as a
1771
+ * full-width one is; `start` lets a stack of buttons read as list rows.
1772
+ */
1773
+ readonly align: import("@angular/core").InputSignal<ButtonAlign>;
1705
1774
  readonly uppercase: import("@angular/core").InputSignal<boolean>;
1706
1775
  /** Optional icon component rendered to the left of the label. */
1707
1776
  readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
1708
1777
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
1709
1778
  readonly ariaCurrent: import("@angular/core").InputSignal<string | undefined>;
1779
+ /** Space-separated ids of the elements whose text names the button. */
1780
+ readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
1781
+ /** Space-separated ids of the elements that describe the button, e.g. a hint. */
1782
+ readonly ariaDescribedby: import("@angular/core").InputSignal<string | undefined>;
1783
+ private readonly buttonEl;
1710
1784
  /** Fires when the button is activated; suppressed while disabled or loading. */
1711
1785
  readonly clicked: import("@angular/core").OutputEmitterRef<MouseEvent>;
1712
1786
  readonly isDisabled: import("@angular/core").Signal<boolean>;
1713
- readonly hostClasses: import("@angular/core").Signal<{
1714
- [x: string]: boolean;
1715
- 'ea-button--full-width': boolean;
1716
- 'ea-button--uppercase': boolean;
1717
- 'ea-button--loading': boolean;
1718
- 'ea-button--disabled': boolean;
1719
- }>;
1787
+ readonly hostClasses: import("@angular/core").Signal<Record<string, boolean>>;
1720
1788
  handleClick(event: MouseEvent): void;
1789
+ /** Moves keyboard focus to the underlying native button. */
1790
+ focus(): void;
1721
1791
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
1722
1792
  static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "ea-button", never, {
1723
1793
  "variant": {
@@ -1750,6 +1820,11 @@ export declare class ButtonComponent {
1750
1820
  "required": false;
1751
1821
  "isSignal": true;
1752
1822
  };
1823
+ "align": {
1824
+ "alias": "align";
1825
+ "required": false;
1826
+ "isSignal": true;
1827
+ };
1753
1828
  "uppercase": {
1754
1829
  "alias": "uppercase";
1755
1830
  "required": false;
@@ -1770,10 +1845,88 @@ export declare class ButtonComponent {
1770
1845
  "required": false;
1771
1846
  "isSignal": true;
1772
1847
  };
1848
+ "ariaLabelledby": {
1849
+ "alias": "aria-labelledby";
1850
+ "required": false;
1851
+ "isSignal": true;
1852
+ };
1853
+ "ariaDescribedby": {
1854
+ "alias": "aria-describedby";
1855
+ "required": false;
1856
+ "isSignal": true;
1857
+ };
1773
1858
  }, {
1774
1859
  "clicked": "clicked";
1775
1860
  }, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
1776
1861
  }
1862
+ /**
1863
+ * Button styling for an anchor, for navigation that should look like a button
1864
+ * while staying a real link: middle-click and open in a new tab work, and
1865
+ * assistive technology announces it as a link. Put it on an `<a>` with an
1866
+ * `href`, or with Angular's `routerLink`, which binds the `href` itself
1867
+ * (`<a eaButtonLink routerLink="/pricing">`). Takes the same styling inputs as
1868
+ * `ea-button` and is painted by the same stylesheet.
1869
+ *
1870
+ * `disabled` sets `aria-disabled`, takes the link out of the tab order, and
1871
+ * blocks activation before `routerLink` or any `(click)` handler sees it, so
1872
+ * nothing navigates. There is no loading state: a link hands off to the
1873
+ * browser or router, so there is no in-flight action for a spinner to cover.
1874
+ */
1875
+ export declare class ButtonLinkComponent {
1876
+ protected readonly authoredTabindex: string | null;
1877
+ readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
1878
+ readonly size: import("@angular/core").InputSignal<import("@eagami/ui").EaSize>;
1879
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
1880
+ readonly fullWidth: import("@angular/core").InputSignal<boolean>;
1881
+ /**
1882
+ * Places the content along the inline axis of a link wider than it, as a
1883
+ * full-width one is; `start` lets a stack of links read as list rows.
1884
+ */
1885
+ readonly align: import("@angular/core").InputSignal<ButtonAlign>;
1886
+ readonly uppercase: import("@angular/core").InputSignal<boolean>;
1887
+ /** Optional icon component rendered before the label. */
1888
+ readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
1889
+ protected readonly boxClasses: import("@angular/core").Signal<Record<string, boolean>>;
1890
+ constructor();
1891
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonLinkComponent, never>;
1892
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonLinkComponent, "a[eaButtonLink]", never, {
1893
+ "variant": {
1894
+ "alias": "variant";
1895
+ "required": false;
1896
+ "isSignal": true;
1897
+ };
1898
+ "size": {
1899
+ "alias": "size";
1900
+ "required": false;
1901
+ "isSignal": true;
1902
+ };
1903
+ "disabled": {
1904
+ "alias": "disabled";
1905
+ "required": false;
1906
+ "isSignal": true;
1907
+ };
1908
+ "fullWidth": {
1909
+ "alias": "fullWidth";
1910
+ "required": false;
1911
+ "isSignal": true;
1912
+ };
1913
+ "align": {
1914
+ "alias": "align";
1915
+ "required": false;
1916
+ "isSignal": true;
1917
+ };
1918
+ "uppercase": {
1919
+ "alias": "uppercase";
1920
+ "required": false;
1921
+ "isSignal": true;
1922
+ };
1923
+ "icon": {
1924
+ "alias": "icon";
1925
+ "required": false;
1926
+ "isSignal": true;
1927
+ };
1928
+ }, {}, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
1929
+ }
1777
1930
  /** Visual style of a card surface. */
1778
1931
  export type CardVariant = 'elevated' | 'outlined' | 'filled';
1779
1932
  /** Padding preset applied to the card's content area. */
@@ -2216,6 +2369,8 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
2216
2369
  readonly label: import("@angular/core").InputSignal<string | undefined>;
2217
2370
  /** Optional icon component rendered before the label text. */
2218
2371
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
2372
+ /** Help revealed by an info button beside the label, as plain text or a template. */
2373
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
2219
2374
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
2220
2375
  readonly size: import("@angular/core").InputSignal<EaSize>;
2221
2376
  readonly disabled: import("@angular/core").InputSignal<boolean>;
@@ -2389,6 +2544,11 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
2389
2544
  "required": false;
2390
2545
  "isSignal": true;
2391
2546
  };
2547
+ "labelHelp": {
2548
+ "alias": "labelHelp";
2549
+ "required": false;
2550
+ "isSignal": true;
2551
+ };
2392
2552
  "placeholder": {
2393
2553
  "alias": "placeholder";
2394
2554
  "required": false;
@@ -2686,6 +2846,8 @@ export declare class CodeInputComponent implements ControlValueAccessor {
2686
2846
  readonly label: import("@angular/core").InputSignal<string | undefined>;
2687
2847
  /** Optional icon component rendered before the label text. */
2688
2848
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
2849
+ /** Help revealed by an info button beside the label, as plain text or a template. */
2850
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
2689
2851
  /** Placeholder text spread one character per cell (cell i shows character i). */
2690
2852
  readonly placeholder: import("@angular/core").InputSignal<string>;
2691
2853
  readonly length: import("@angular/core").InputSignal<number>;
@@ -2741,6 +2903,11 @@ export declare class CodeInputComponent implements ControlValueAccessor {
2741
2903
  "required": false;
2742
2904
  "isSignal": true;
2743
2905
  };
2906
+ "labelHelp": {
2907
+ "alias": "labelHelp";
2908
+ "required": false;
2909
+ "isSignal": true;
2910
+ };
2744
2911
  "placeholder": {
2745
2912
  "alias": "placeholder";
2746
2913
  "required": false;
@@ -2840,6 +3007,8 @@ export declare class DatePickerComponent implements ControlValueAccessor {
2840
3007
  readonly label: import("@angular/core").InputSignal<string | undefined>;
2841
3008
  /** Optional icon component rendered before the label text. */
2842
3009
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
3010
+ /** Help revealed by an info button beside the label, as plain text or a template. */
3011
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
2843
3012
  /** Placeholder shown in the field when no date is selected. */
2844
3013
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
2845
3014
  readonly size: import("@angular/core").InputSignal<EaSize>;
@@ -2962,6 +3131,11 @@ export declare class DatePickerComponent implements ControlValueAccessor {
2962
3131
  "required": false;
2963
3132
  "isSignal": true;
2964
3133
  };
3134
+ "labelHelp": {
3135
+ "alias": "labelHelp";
3136
+ "required": false;
3137
+ "isSignal": true;
3138
+ };
2965
3139
  "placeholder": {
2966
3140
  "alias": "placeholder";
2967
3141
  "required": false;
@@ -3398,6 +3572,8 @@ export declare class DropdownComponent implements ControlValueAccessor {
3398
3572
  readonly label: import("@angular/core").InputSignal<string | undefined>;
3399
3573
  /** Optional icon component rendered before the label text. */
3400
3574
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
3575
+ /** Help revealed by an info button beside the label, as plain text or a template. */
3576
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
3401
3577
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
3402
3578
  /** Selectable options, either flat or split into groups. */
3403
3579
  readonly options: import("@angular/core").InputSignal<SelectOptions>;
@@ -3482,6 +3658,11 @@ export declare class DropdownComponent implements ControlValueAccessor {
3482
3658
  "required": false;
3483
3659
  "isSignal": true;
3484
3660
  };
3661
+ "labelHelp": {
3662
+ "alias": "labelHelp";
3663
+ "required": false;
3664
+ "isSignal": true;
3665
+ };
3485
3666
  "placeholder": {
3486
3667
  "alias": "placeholder";
3487
3668
  "required": false;
@@ -3646,12 +3827,33 @@ export declare class EmptyStateComponent {
3646
3827
  }, {}, never, ["[slot=media]", "[slot=actions]"], true, never>;
3647
3828
  }
3648
3829
  export declare class FieldLabelComponent {
3830
+ private readonly i18n;
3831
+ private readonly press;
3832
+ private readonly renderer;
3649
3833
  readonly text: import("@angular/core").InputSignal<string>;
3650
3834
  /** Optional icon component rendered before the label text. */
3651
3835
  readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
3836
+ /**
3837
+ * Help revealed by an info button beside the label, as plain text or a
3838
+ * template. Click, tap, Enter or Space toggles it, and it is announced when
3839
+ * shown; Escape, a click outside, or moving focus away closes it.
3840
+ */
3841
+ readonly help: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
3652
3842
  readonly forId: import("@angular/core").InputSignal<string | undefined>;
3653
3843
  readonly required: import("@angular/core").InputSignal<boolean>;
3654
3844
  readonly labelId: import("@angular/core").InputSignal<string | undefined>;
3845
+ protected readonly helpOpen: import("@angular/core").WritableSignal<boolean>;
3846
+ protected readonly helpId: string;
3847
+ protected readonly helpTemplate: import("@angular/core").Signal<TemplateRef<unknown> | null>;
3848
+ protected readonly helpTriggerLabel: import("@angular/core").Signal<string>;
3849
+ private readonly helpEl;
3850
+ private readonly helpTrigger;
3851
+ private readonly helpBubble;
3852
+ constructor();
3853
+ protected toggleHelp(): void;
3854
+ protected onHelpFocusout(event: FocusEvent): void;
3855
+ /** Raises and places an open bubble and wires its dismissal; returns the teardown. */
3856
+ private attachHelpBubble;
3655
3857
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldLabelComponent, never>;
3656
3858
  static ɵcmp: i0.ɵɵComponentDeclaration<FieldLabelComponent, "ea-field-label", never, {
3657
3859
  "text": {
@@ -3664,6 +3866,11 @@ export declare class FieldLabelComponent {
3664
3866
  "required": false;
3665
3867
  "isSignal": true;
3666
3868
  };
3869
+ "help": {
3870
+ "alias": "help";
3871
+ "required": false;
3872
+ "isSignal": true;
3873
+ };
3667
3874
  "forId": {
3668
3875
  "alias": "forId";
3669
3876
  "required": false;
@@ -3725,6 +3932,8 @@ export declare class FormFieldComponent {
3725
3932
  readonly label: import("@angular/core").InputSignal<string | undefined>;
3726
3933
  /** Optional icon component rendered before the label text. */
3727
3934
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
3935
+ /** Help revealed by an info button beside the label, as plain text or a template. */
3936
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
3728
3937
  /** Helper text shown below the control; hidden while an error is showing. */
3729
3938
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
3730
3939
  /** Error message shown below the control; replaces the hint and flags the field invalid. */
@@ -3760,6 +3969,11 @@ export declare class FormFieldComponent {
3760
3969
  "required": false;
3761
3970
  "isSignal": true;
3762
3971
  };
3972
+ "labelHelp": {
3973
+ "alias": "labelHelp";
3974
+ "required": false;
3975
+ "isSignal": true;
3976
+ };
3763
3977
  "hint": {
3764
3978
  "alias": "hint";
3765
3979
  "required": false;
@@ -3842,6 +4056,8 @@ declare function controlErrorStateFrom(control: Signal<AbstractControl | null>,
3842
4056
  declare function injectControlErrorState(config: ControlErrorStateConfig): ControlErrorState;
3843
4057
  /** Visual size of the file uploader. */
3844
4058
  export type FileUploaderSize = EaSize;
4059
+ /** Presentation of the uploader: a drag-and-drop zone, or a compact picker button. */
4060
+ export type FileUploaderVariant = 'dropzone' | 'button';
3845
4061
  /** Reason a file was rejected during selection. */
3846
4062
  export type FileUploaderRejectionReason = 'type' | 'size' | 'count';
3847
4063
  /** Detail object emitted on the `rejected` output when one or more files fail validation. */
@@ -3859,25 +4075,56 @@ export interface FileUploaderRejection {
3859
4075
  * slot via the `icon` attribute: project any element to override it, and the
3860
4076
  * dropzone's size-aware wrapper handles sizing automatically.
3861
4077
  *
4078
+ * Where a dropzone is too large, `variant="button"` swaps it for a compact
4079
+ * `ea-button` that opens the file picker, keeping the same validation, file
4080
+ * list and outputs.
4081
+ *
3862
4082
  * @example
3863
4083
  * ```html
3864
4084
  * <ea-file-uploader label="Attach files">
3865
4085
  * <ea-icon-paperclip icon />
3866
4086
  * </ea-file-uploader>
4087
+ *
4088
+ * <ea-file-uploader
4089
+ * variant="button"
4090
+ * accept=".csv"
4091
+ * buttonLabel="Import CSV"
4092
+ * [buttonIcon]="uploadIcon"
4093
+ * [multiple]="false" />
3867
4094
  * ```
3868
4095
  */
3869
4096
  export declare class FileUploaderComponent implements ControlValueAccessor {
3870
4097
  private readonly fileInputEl;
3871
4098
  private readonly dropzoneEl;
4099
+ private readonly pickerButton;
3872
4100
  protected readonly i18n: EagamiI18nService;
3873
4101
  readonly label: import("@angular/core").InputSignal<string | undefined>;
3874
4102
  /** Optional icon component rendered before the label text. */
3875
4103
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
4104
+ /** Help revealed by an info button beside the label, as plain text or a template. */
4105
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
3876
4106
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
3877
4107
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
3878
4108
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
3879
4109
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
3880
4110
  readonly size: import("@angular/core").InputSignal<EaSize>;
4111
+ /**
4112
+ * `dropzone` renders the drag-and-drop area; `button` renders a compact
4113
+ * secondary `ea-button` that opens the file picker instead, without drop support.
4114
+ */
4115
+ readonly variant: import("@angular/core").InputSignal<FileUploaderVariant>;
4116
+ /**
4117
+ * Visible text of the `button` variant, falling back to the localized "Browse
4118
+ * files". An empty string together with a `buttonIcon` leaves an icon-only button.
4119
+ */
4120
+ readonly buttonLabel: import("@angular/core").InputSignal<string | undefined>;
4121
+ /** Optional icon component rendered before the `button` variant's text. */
4122
+ readonly buttonIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
4123
+ /**
4124
+ * Accessible name when nothing visible names the control: no `label`, and in
4125
+ * the `button` variant no button text either.
4126
+ */
4127
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
3881
4128
  readonly disabled: import("@angular/core").InputSignal<boolean>;
3882
4129
  readonly required: import("@angular/core").InputSignal<boolean>;
3883
4130
  /**
@@ -3894,6 +4141,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3894
4141
  readonly maxFiles: import("@angular/core").InputSignal<number | undefined>;
3895
4142
  /** Toggle the file list under the dropzone. */
3896
4143
  readonly showFileList: import("@angular/core").InputSignal<boolean>;
4144
+ /**
4145
+ * Toggle the line listing the accepted types, size and file count limits, for a
4146
+ * compact placement (an icon button in a toolbar) where it would crowd the control.
4147
+ */
4148
+ readonly showConstraints: import("@angular/core").InputSignal<boolean>;
3897
4149
  /**
3898
4150
  * Optional per-file progress (0-100). Keyed by `File` object identity, so
3899
4151
  * consumers must keep the same `File` references between change-detection
@@ -3926,6 +4178,7 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3926
4178
  protected readonly showHint: import("@angular/core").Signal<boolean>;
3927
4179
  protected readonly hostClasses: import("@angular/core").Signal<{
3928
4180
  [x: string]: boolean;
4181
+ 'ea-file-uploader-field--button': boolean;
3929
4182
  'ea-file-uploader-field--error': boolean;
3930
4183
  'ea-file-uploader-field--disabled': boolean;
3931
4184
  'ea-file-uploader-field--drag-over': boolean;
@@ -3938,6 +4191,12 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3938
4191
  /** Joined human-readable description of accept / maxSize / maxFiles limits. */
3939
4192
  protected readonly constraintsText: import("@angular/core").Signal<string>;
3940
4193
  protected readonly promptText: import("@angular/core").Signal<string>;
4194
+ protected readonly dropzoneLabel: import("@angular/core").Signal<string>;
4195
+ protected readonly labelId: import("@angular/core").Signal<string>;
4196
+ protected readonly buttonTextId: import("@angular/core").Signal<string>;
4197
+ protected readonly buttonText: import("@angular/core").Signal<string>;
4198
+ protected readonly buttonLabelledBy: import("@angular/core").Signal<string | undefined>;
4199
+ protected readonly buttonAriaLabel: import("@angular/core").Signal<string | undefined>;
3941
4200
  writeValue(value: readonly File[] | null | undefined): void;
3942
4201
  registerOnChange(fn: (value: readonly File[]) => void): void;
3943
4202
  registerOnTouched(fn: () => void): void;
@@ -3946,6 +4205,7 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3946
4205
  protected onDropzoneKeydown(event: KeyboardEvent): void;
3947
4206
  protected onDropzoneFocus(): void;
3948
4207
  protected onDropzoneBlur(): void;
4208
+ protected onPickerButtonFocusOut(): void;
3949
4209
  protected onFileSelected(event: Event): void;
3950
4210
  protected onDragEnter(event: DragEvent): void;
3951
4211
  protected onDragOver(event: DragEvent): void;
@@ -3971,6 +4231,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3971
4231
  "required": false;
3972
4232
  "isSignal": true;
3973
4233
  };
4234
+ "labelHelp": {
4235
+ "alias": "labelHelp";
4236
+ "required": false;
4237
+ "isSignal": true;
4238
+ };
3974
4239
  "hint": {
3975
4240
  "alias": "hint";
3976
4241
  "required": false;
@@ -3991,6 +4256,26 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3991
4256
  "required": false;
3992
4257
  "isSignal": true;
3993
4258
  };
4259
+ "variant": {
4260
+ "alias": "variant";
4261
+ "required": false;
4262
+ "isSignal": true;
4263
+ };
4264
+ "buttonLabel": {
4265
+ "alias": "buttonLabel";
4266
+ "required": false;
4267
+ "isSignal": true;
4268
+ };
4269
+ "buttonIcon": {
4270
+ "alias": "buttonIcon";
4271
+ "required": false;
4272
+ "isSignal": true;
4273
+ };
4274
+ "ariaLabel": {
4275
+ "alias": "aria-label";
4276
+ "required": false;
4277
+ "isSignal": true;
4278
+ };
3994
4279
  "disabled": {
3995
4280
  "alias": "disabled";
3996
4281
  "required": false;
@@ -4026,6 +4311,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
4026
4311
  "required": false;
4027
4312
  "isSignal": true;
4028
4313
  };
4314
+ "showConstraints": {
4315
+ "alias": "showConstraints";
4316
+ "required": false;
4317
+ "isSignal": true;
4318
+ };
4029
4319
  "progress": {
4030
4320
  "alias": "progress";
4031
4321
  "required": false;
@@ -4066,6 +4356,8 @@ export declare class InputComponent implements ControlValueAccessor {
4066
4356
  readonly label: import("@angular/core").InputSignal<string | undefined>;
4067
4357
  /** Optional icon component rendered before the label text. */
4068
4358
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
4359
+ /** Help revealed by an info button beside the label, as plain text or a template. */
4360
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
4069
4361
  /** Accessible name for the control when no visible `label` is set. */
4070
4362
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
4071
4363
  /** ARIA role applied to the native input, e.g. `combobox` for a typeahead host. */
@@ -4185,6 +4477,11 @@ export declare class InputComponent implements ControlValueAccessor {
4185
4477
  "required": false;
4186
4478
  "isSignal": true;
4187
4479
  };
4480
+ "labelHelp": {
4481
+ "alias": "labelHelp";
4482
+ "required": false;
4483
+ "isSignal": true;
4484
+ };
4188
4485
  "ariaLabel": {
4189
4486
  "alias": "aria-label";
4190
4487
  "required": false;
@@ -4398,9 +4695,9 @@ interface XDomain {
4398
4695
  * Plots one or more series of values as lines, with optional points and area
4399
4696
  * fills. Points are spaced evenly by default, or placed along a numeric scale
4400
4697
  * by `xValues`, with the x-axis labelled per point or by `xTicks`. A
4401
- * `visibleXSpan` window makes a long run of data pannable. Hovering or
4402
- * arrowing through the chart reveals each point's values in a tooltip, and a
4403
- * visually hidden table carries the full data for screen readers.
4698
+ * `visibleXSpan` window makes a long run of data pannable. Hovering, tapping,
4699
+ * or arrowing through the chart reveals each point's values in a tooltip, and
4700
+ * a visually hidden table carries the full data for screen readers.
4404
4701
  */
4405
4702
  export declare class LineChartComponent {
4406
4703
  protected readonly i18n: EagamiI18nService;
@@ -4469,6 +4766,7 @@ export declare class LineChartComponent {
4469
4766
  readonly visibleRangeChange: import("@angular/core").OutputEmitterRef<LineChartVisibleRange>;
4470
4767
  private readonly viewport;
4471
4768
  private readonly format;
4769
+ private readonly plotEl;
4472
4770
  protected readonly active: import("@angular/core").WritableSignal<ActivePoint | null>;
4473
4771
  protected readonly clipId: string;
4474
4772
  protected readonly breakMaskId: string;
@@ -4478,6 +4776,7 @@ export declare class LineChartComponent {
4478
4776
  protected readonly panning: import("@angular/core").WritableSignal<boolean>;
4479
4777
  private drag;
4480
4778
  private suppressClick;
4779
+ private releaseTap;
4481
4780
  protected readonly label: import("@angular/core").Signal<string>;
4482
4781
  protected readonly count: import("@angular/core").Signal<number>;
4483
4782
  protected readonly hasData: import("@angular/core").Signal<boolean>;
@@ -4544,6 +4843,7 @@ export declare class LineChartComponent {
4544
4843
  }[]>;
4545
4844
  protected readonly announcement: import("@angular/core").Signal<string>;
4546
4845
  protected readonly showsLegend: import("@angular/core").Signal<boolean>;
4846
+ constructor();
4547
4847
  protected seriesColor(index: number): string;
4548
4848
  protected isDimmed(index: number): boolean;
4549
4849
  protected isActivePoint(seriesIndex: number, index: number): boolean;
@@ -4551,6 +4851,7 @@ export declare class LineChartComponent {
4551
4851
  protected onPointerDown(event: PointerEvent): void;
4552
4852
  protected onPointerMove(event: PointerEvent): void;
4553
4853
  protected onPointerUp(event: PointerEvent): void;
4854
+ protected onPointerCancel(event: PointerEvent): void;
4554
4855
  protected onPointerLeave(): void;
4555
4856
  protected onWheel(event: WheelEvent): void;
4556
4857
  protected onClick(): void;
@@ -4572,6 +4873,8 @@ export declare class LineChartComponent {
4572
4873
  private unitsPerPx;
4573
4874
  private panTo;
4574
4875
  private endDrag;
4876
+ private holdTap;
4877
+ private endTapHold;
4575
4878
  private reveal;
4576
4879
  private indexAt;
4577
4880
  private valueAt;
@@ -5114,6 +5417,8 @@ export declare class MultiSelectComponent implements ControlValueAccessor {
5114
5417
  readonly label: import("@angular/core").InputSignal<string | undefined>;
5115
5418
  /** Optional icon component rendered before the label text. */
5116
5419
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
5420
+ /** Help revealed by an info button beside the label, as plain text or a template. */
5421
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
5117
5422
  /** Accessible name for the combobox when no visible `label` is set. */
5118
5423
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
5119
5424
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
@@ -5302,6 +5607,11 @@ export declare class MultiSelectComponent implements ControlValueAccessor {
5302
5607
  "required": false;
5303
5608
  "isSignal": true;
5304
5609
  };
5610
+ "labelHelp": {
5611
+ "alias": "labelHelp";
5612
+ "required": false;
5613
+ "isSignal": true;
5614
+ };
5305
5615
  "ariaLabel": {
5306
5616
  "alias": "aria-label";
5307
5617
  "required": false;
@@ -5423,6 +5733,8 @@ export declare class NumberInputComponent implements ControlValueAccessor {
5423
5733
  readonly label: import("@angular/core").InputSignal<string | undefined>;
5424
5734
  /** Optional icon component rendered before the label text. */
5425
5735
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
5736
+ /** Help revealed by an info button beside the label, as plain text or a template. */
5737
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
5426
5738
  /** Placeholder shown while the field is empty. */
5427
5739
  readonly placeholder: import("@angular/core").InputSignal<string>;
5428
5740
  /** Visual size of the field. */
@@ -5511,6 +5823,11 @@ export declare class NumberInputComponent implements ControlValueAccessor {
5511
5823
  "required": false;
5512
5824
  "isSignal": true;
5513
5825
  };
5826
+ "labelHelp": {
5827
+ "alias": "labelHelp";
5828
+ "required": false;
5829
+ "isSignal": true;
5830
+ };
5514
5831
  "placeholder": {
5515
5832
  "alias": "placeholder";
5516
5833
  "required": false;
@@ -5998,6 +6315,8 @@ export declare class RadioGroupComponent implements ControlValueAccessor {
5998
6315
  readonly label: import("@angular/core").InputSignal<string | undefined>;
5999
6316
  /** Optional icon component rendered before the label text. */
6000
6317
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
6318
+ /** Help revealed by an info button beside the label, as plain text or a template. */
6319
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
6001
6320
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6002
6321
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6003
6322
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6063,6 +6382,11 @@ export declare class RadioGroupComponent implements ControlValueAccessor {
6063
6382
  "required": false;
6064
6383
  "isSignal": true;
6065
6384
  };
6385
+ "labelHelp": {
6386
+ "alias": "labelHelp";
6387
+ "required": false;
6388
+ "isSignal": true;
6389
+ };
6066
6390
  "hint": {
6067
6391
  "alias": "hint";
6068
6392
  "required": false;
@@ -6162,6 +6486,8 @@ export declare class RangeSliderComponent implements ControlValueAccessor {
6162
6486
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6163
6487
  /** Optional icon component rendered before the label text. */
6164
6488
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
6489
+ /** Help revealed by an info button beside the label, as plain text or a template. */
6490
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
6165
6491
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6166
6492
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6167
6493
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6237,6 +6563,11 @@ export declare class RangeSliderComponent implements ControlValueAccessor {
6237
6563
  "required": false;
6238
6564
  "isSignal": true;
6239
6565
  };
6566
+ "labelHelp": {
6567
+ "alias": "labelHelp";
6568
+ "required": false;
6569
+ "isSignal": true;
6570
+ };
6240
6571
  "hint": {
6241
6572
  "alias": "hint";
6242
6573
  "required": false;
@@ -6353,6 +6684,8 @@ export declare class RatingComponent implements ControlValueAccessor {
6353
6684
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6354
6685
  /** Optional icon component rendered before the label text. */
6355
6686
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
6687
+ /** Help revealed by an info button beside the label, as plain text or a template. */
6688
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
6356
6689
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6357
6690
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6358
6691
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6433,6 +6766,11 @@ export declare class RatingComponent implements ControlValueAccessor {
6433
6766
  "required": false;
6434
6767
  "isSignal": true;
6435
6768
  };
6769
+ "labelHelp": {
6770
+ "alias": "labelHelp";
6771
+ "required": false;
6772
+ "isSignal": true;
6773
+ };
6436
6774
  "hint": {
6437
6775
  "alias": "hint";
6438
6776
  "required": false;
@@ -6527,6 +6865,8 @@ export declare class SegmentedComponent implements ControlValueAccessor {
6527
6865
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6528
6866
  /** Optional icon component rendered before the label text. */
6529
6867
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
6868
+ /** Help revealed by an info button beside the label, as plain text or a template. */
6869
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
6530
6870
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6531
6871
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6532
6872
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6584,6 +6924,11 @@ export declare class SegmentedComponent implements ControlValueAccessor {
6584
6924
  "required": false;
6585
6925
  "isSignal": true;
6586
6926
  };
6927
+ "labelHelp": {
6928
+ "alias": "labelHelp";
6929
+ "required": false;
6930
+ "isSignal": true;
6931
+ };
6587
6932
  "hint": {
6588
6933
  "alias": "hint";
6589
6934
  "required": false;
@@ -6688,6 +7033,8 @@ export declare class SliderComponent implements ControlValueAccessor {
6688
7033
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6689
7034
  /** Optional icon component rendered before the label text. */
6690
7035
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
7036
+ /** Help revealed by an info button beside the label, as plain text or a template. */
7037
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
6691
7038
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6692
7039
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6693
7040
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6765,6 +7112,11 @@ export declare class SliderComponent implements ControlValueAccessor {
6765
7112
  "required": false;
6766
7113
  "isSignal": true;
6767
7114
  };
7115
+ "labelHelp": {
7116
+ "alias": "labelHelp";
7117
+ "required": false;
7118
+ "isSignal": true;
7119
+ };
6768
7120
  "hint": {
6769
7121
  "alias": "hint";
6770
7122
  "required": false;
@@ -7018,6 +7370,8 @@ export declare class StepperComponent {
7018
7370
  }
7019
7371
  /** Visual size of the switch. */
7020
7372
  export type SwitchSize = EaSize;
7373
+ /** Status tone applied to the switch track in both states. */
7374
+ export type SwitchVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
7021
7375
  /**
7022
7376
  * On/off toggle styled as a sliding switch. Backed by a visually hidden
7023
7377
  * native checkbox and integrates with Angular forms via
@@ -7030,6 +7384,15 @@ export declare class SwitchComponent implements ControlValueAccessor {
7030
7384
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
7031
7385
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
7032
7386
  readonly size: import("@angular/core").InputSignal<EaSize>;
7387
+ /**
7388
+ * Status tone for the track: a tinted wash with a toned border while off and
7389
+ * the solid tone while on. `default` keeps the neutral off track and brand on track.
7390
+ */
7391
+ readonly variant: import("@angular/core").InputSignal<SwitchVariant>;
7392
+ /** Optional icon component drawn in the thumb while the switch is on. */
7393
+ readonly onIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
7394
+ /** Optional icon component drawn in the thumb while the switch is off. */
7395
+ readonly offIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
7033
7396
  readonly disabled: import("@angular/core").InputSignal<boolean>;
7034
7397
  readonly required: import("@angular/core").InputSignal<boolean>;
7035
7398
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
@@ -7052,6 +7415,7 @@ export declare class SwitchComponent implements ControlValueAccessor {
7052
7415
  'ea-switch--disabled': boolean;
7053
7416
  'ea-switch--error': boolean;
7054
7417
  }>;
7418
+ protected readonly thumbIcon: import("@angular/core").Signal<Type<unknown> | undefined>;
7055
7419
  writeValue(val: boolean): void;
7056
7420
  registerOnChange(fn: (value: boolean) => void): void;
7057
7421
  registerOnTouched(fn: () => void): void;
@@ -7084,6 +7448,21 @@ export declare class SwitchComponent implements ControlValueAccessor {
7084
7448
  "required": false;
7085
7449
  "isSignal": true;
7086
7450
  };
7451
+ "variant": {
7452
+ "alias": "variant";
7453
+ "required": false;
7454
+ "isSignal": true;
7455
+ };
7456
+ "onIcon": {
7457
+ "alias": "onIcon";
7458
+ "required": false;
7459
+ "isSignal": true;
7460
+ };
7461
+ "offIcon": {
7462
+ "alias": "offIcon";
7463
+ "required": false;
7464
+ "isSignal": true;
7465
+ };
7087
7466
  "disabled": {
7088
7467
  "alias": "disabled";
7089
7468
  "required": false;
@@ -7375,11 +7754,19 @@ export declare class TagComponent {
7375
7754
  */
7376
7755
  readonly maxWidth: import("@angular/core").InputSignal<string | number | undefined>;
7377
7756
  /**
7378
- * Fill colour as a hex value, for a tag carrying a colour of its own (a
7379
- * user-chosen label). Paints the chip and its border, and picks whichever ink
7380
- * reads better on it. Takes precedence over `variant`.
7757
+ * Fill colour, for a tag carrying a colour of its own (a user-chosen label).
7758
+ * Paints the chip and its border, and takes precedence over `variant`. On
7759
+ * its own it must be a hex value, from which the tag picks whichever ink
7760
+ * reads better; alongside `ink` it takes any CSS colour, such as a
7761
+ * theme-aware `var(--my-token)`.
7381
7762
  */
7382
7763
  readonly color: import("@angular/core").InputSignal<string | undefined>;
7764
+ /**
7765
+ * Text colour, as any CSS colour, overriding the ink the tag would pick for
7766
+ * `color`. Supplying it lets `color` be a value the tag cannot measure, so
7767
+ * the contrast between the two rests with the caller.
7768
+ */
7769
+ readonly ink: import("@angular/core").InputSignal<string | undefined>;
7383
7770
  /**
7384
7771
  * Where a label clipped by `maxWidth` reveals its full text. Set `none` for
7385
7772
  * a tag rendered inside a tooltip, which would otherwise stack a second
@@ -7409,7 +7796,7 @@ export declare class TagComponent {
7409
7796
  }>;
7410
7797
  /** `maxWidth` as a CSS length; a bare number is px, as the input documents. */
7411
7798
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | null>;
7412
- /** Ink that reads on `color`, or `null` when it is not a hex the library can measure. */
7799
+ /** The caller's `ink`, else one that reads on a hex `color`, else `null`. */
7413
7800
  protected readonly resolvedInk: import("@angular/core").Signal<string | null>;
7414
7801
  protected readonly resolvedColor: import("@angular/core").Signal<string | null>;
7415
7802
  constructor();
@@ -7457,6 +7844,11 @@ export declare class TagComponent {
7457
7844
  "required": false;
7458
7845
  "isSignal": true;
7459
7846
  };
7847
+ "ink": {
7848
+ "alias": "ink";
7849
+ "required": false;
7850
+ "isSignal": true;
7851
+ };
7460
7852
  "tooltip": {
7461
7853
  "alias": "tooltip";
7462
7854
  "required": false;
@@ -7480,9 +7872,15 @@ export declare class TagComponent {
7480
7872
  export type TextareaSize = EaSize;
7481
7873
  /** Axis along which the user is allowed to resize the textarea. */
7482
7874
  export type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
7875
+ /** Selected character range in the textarea; `start` equals `end` for a bare caret. */
7876
+ export interface TextareaSelection {
7877
+ readonly start: number;
7878
+ readonly end: number;
7879
+ }
7483
7880
  /**
7484
7881
  * Multiline text field that mirrors the `ea-input` API. Supports configurable
7485
- * `resize` direction and `maxlength`, and integrates with Angular
7882
+ * `resize` direction and `maxlength`, exposes the caret through
7883
+ * `getSelection()` and `insertText()`, and integrates with Angular
7486
7884
  * forms via `ControlValueAccessor`.
7487
7885
  */
7488
7886
  export declare class TextareaComponent implements ControlValueAccessor {
@@ -7490,6 +7888,8 @@ export declare class TextareaComponent implements ControlValueAccessor {
7490
7888
  readonly label: import("@angular/core").InputSignal<string | undefined>;
7491
7889
  /** Optional icon component rendered before the label text. */
7492
7890
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
7891
+ /** Help revealed by an info button beside the label, as plain text or a template. */
7892
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
7493
7893
  /** Accessible name for the control when no visible `label` is set. */
7494
7894
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
7495
7895
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -7542,6 +7942,19 @@ export declare class TextareaComponent implements ControlValueAccessor {
7542
7942
  handleBlur(event: FocusEvent): void;
7543
7943
  /** Moves keyboard focus to the underlying native textarea element. */
7544
7944
  focus(): void;
7945
+ /**
7946
+ * Returns the selected range as character offsets into the value. The browser
7947
+ * keeps it after the field loses focus, so it still reflects where the caret
7948
+ * was left once the user has moved on to a button or a dialog.
7949
+ */
7950
+ getSelection(): TextareaSelection;
7951
+ /**
7952
+ * Replaces the current selection with `text` and places the caret after it,
7953
+ * notifying the value model, a bound form control and native `input`
7954
+ * listeners exactly as typing does. Does nothing while disabled or read-only,
7955
+ * and leaves focus where it is.
7956
+ */
7957
+ insertText(text: string): void;
7545
7958
  static ɵfac: i0.ɵɵFactoryDeclaration<TextareaComponent, never>;
7546
7959
  static ɵcmp: i0.ɵɵComponentDeclaration<TextareaComponent, "ea-textarea", never, {
7547
7960
  "label": {
@@ -7554,6 +7967,11 @@ export declare class TextareaComponent implements ControlValueAccessor {
7554
7967
  "required": false;
7555
7968
  "isSignal": true;
7556
7969
  };
7970
+ "labelHelp": {
7971
+ "alias": "labelHelp";
7972
+ "required": false;
7973
+ "isSignal": true;
7974
+ };
7557
7975
  "ariaLabel": {
7558
7976
  "alias": "aria-label";
7559
7977
  "required": false;
@@ -7681,6 +8099,8 @@ export declare class TimePickerComponent implements ControlValueAccessor {
7681
8099
  readonly label: import("@angular/core").InputSignal<string | undefined>;
7682
8100
  /** Optional icon component rendered before the label text. */
7683
8101
  readonly labelIcon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
8102
+ /** Help revealed by an info button beside the label, as plain text or a template. */
8103
+ readonly labelHelp: import("@angular/core").InputSignal<string | TemplateRef<unknown> | undefined>;
7684
8104
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
7685
8105
  readonly size: import("@angular/core").InputSignal<EaSize>;
7686
8106
  readonly disabled: import("@angular/core").InputSignal<boolean>;
@@ -7851,6 +8271,11 @@ export declare class TimePickerComponent implements ControlValueAccessor {
7851
8271
  "required": false;
7852
8272
  "isSignal": true;
7853
8273
  };
8274
+ "labelHelp": {
8275
+ "alias": "labelHelp";
8276
+ "required": false;
8277
+ "isSignal": true;
8278
+ };
7854
8279
  "placeholder": {
7855
8280
  "alias": "placeholder";
7856
8281
  "required": false;