@eagami/ui 5.52.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>;
@@ -627,6 +637,7 @@ export declare class AccordionItemComponent implements OnInit, OnDestroy {
627
637
  readonly id: import("@angular/core").InputSignal<string>;
628
638
  readonly isExpanded: import("@angular/core").Signal<boolean>;
629
639
  readonly headingLevel: import("@angular/core").Signal<import("@eagami/ui").AccordionHeadingLevel>;
640
+ readonly isHighlighted: import("@angular/core").Signal<boolean>;
630
641
  readonly size: import("@angular/core").Signal<import("@eagami/ui").EaSize>;
631
642
  ngOnInit(): void;
632
643
  ngOnDestroy(): void;
@@ -640,7 +651,7 @@ export declare class AccordionItemComponent implements OnInit, OnDestroy {
640
651
  };
641
652
  "label": {
642
653
  "alias": "label";
643
- "required": true;
654
+ "required": false;
644
655
  "isSignal": true;
645
656
  };
646
657
  "icon": {
@@ -658,7 +669,7 @@ export declare class AccordionItemComponent implements OnInit, OnDestroy {
658
669
  "required": false;
659
670
  "isSignal": true;
660
671
  };
661
- }, {}, never, ["*"], true, never>;
672
+ }, {}, never, ["[slot=label]", "*"], true, never>;
662
673
  }
663
674
  /** Heading level exposed by each item's header for assistive technology. */
664
675
  export type AccordionHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
@@ -667,7 +678,9 @@ export type AccordionSize = EaSize;
667
678
  /**
668
679
  * Container for expandable content sections. By default only one item can be
669
680
  * open at a time; set `multi` to allow several to stay expanded together.
670
- * 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.
671
684
  */
672
685
  export declare class AccordionComponent {
673
686
  readonly multi: import("@angular/core").InputSignal<boolean>;
@@ -675,6 +688,14 @@ export declare class AccordionComponent {
675
688
  readonly size: import("@angular/core").InputSignal<EaSize>;
676
689
  /** Heading level (1-6) applied to every item's header wrapper. */
677
690
  readonly headingLevel: import("@angular/core").InputSignal<AccordionHeadingLevel>;
691
+ /** Tints an open item's header and sets its label, icon, and chevron in the brand color. */
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[]>;
678
699
  readonly expandedItems: import("@angular/core").WritableSignal<Set<string>>;
679
700
  readonly registeredItems: import("@angular/core").WritableSignal<AccordionItemComponent[]>;
680
701
  constructor();
@@ -699,16 +720,30 @@ export declare class AccordionComponent {
699
720
  "required": false;
700
721
  "isSignal": true;
701
722
  };
702
- }, {}, never, ["*"], true, never>;
723
+ "highlightExpanded": {
724
+ "alias": "highlightExpanded";
725
+ "required": false;
726
+ "isSignal": true;
727
+ };
728
+ "expandedValues": {
729
+ "alias": "expandedValues";
730
+ "required": false;
731
+ "isSignal": true;
732
+ };
733
+ }, {
734
+ "expandedValues": "expandedValuesChange";
735
+ }, never, ["*"], true, never>;
703
736
  }
704
737
  /** Semantic colour scheme of an alert. Drives icon and palette. */
705
738
  export type AlertVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
706
739
  /** Scales the alert's text, icon, and gap together. */
707
740
  export type AlertSize = EaSize;
741
+ /** How assistive technology announces an alert. */
742
+ export type AlertLive = 'auto' | 'assertive' | 'polite' | 'off';
708
743
  /**
709
744
  * Inline banner for surfacing semantic messages such as success confirmations,
710
745
  * warnings, or errors. Optionally dismissible, with a two-way `visible`
711
- * binding and an automatically chosen ARIA role based on severity.
746
+ * binding and an ARIA role chosen by severity unless `live` sets one.
712
747
  */
713
748
  export declare class AlertComponent {
714
749
  protected readonly i18n: EagamiI18nService;
@@ -718,12 +753,20 @@ export declare class AlertComponent {
718
753
  readonly visible: import("@angular/core").ModelSignal<boolean>;
719
754
  /** Overrides the variant's default status icon with any icon component. */
720
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>;
721
764
  /** Fires when the user dismisses the alert via its close button. */
722
765
  readonly dismissed: import("@angular/core").OutputEmitterRef<void>;
723
766
  readonly alertClasses: import("@angular/core").Signal<{
724
767
  [x: string]: boolean;
725
768
  }>;
726
- readonly role: import("@angular/core").Signal<"alert" | "status">;
769
+ readonly role: import("@angular/core").Signal<"alert" | "status" | null>;
727
770
  /** Hides the alert and emits `dismissed`. */
728
771
  dismiss(): void;
729
772
  static ɵfac: i0.ɵɵFactoryDeclaration<AlertComponent, never>;
@@ -753,6 +796,11 @@ export declare class AlertComponent {
753
796
  "required": false;
754
797
  "isSignal": true;
755
798
  };
799
+ "live": {
800
+ "alias": "live";
801
+ "required": false;
802
+ "isSignal": true;
803
+ };
756
804
  }, {
757
805
  "visible": "visibleChange";
758
806
  "dismissed": "dismissed";
@@ -826,6 +874,8 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
826
874
  readonly label: import("@angular/core").InputSignal<string | undefined>;
827
875
  /** Optional icon component rendered before the label text. */
828
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>;
829
879
  /** Accessible name for the input and suggestion list when no visible label is provided. */
830
880
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
831
881
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -840,6 +890,8 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
840
890
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
841
891
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
842
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>;
843
895
  readonly maxResults: import("@angular/core").InputSignal<number>;
844
896
  readonly emptyMessage: import("@angular/core").InputSignal<string | undefined>;
845
897
  readonly id: import("@angular/core").InputSignal<string>;
@@ -914,6 +966,11 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
914
966
  "required": false;
915
967
  "isSignal": true;
916
968
  };
969
+ "labelHelp": {
970
+ "alias": "labelHelp";
971
+ "required": false;
972
+ "isSignal": true;
973
+ };
917
974
  "ariaLabel": {
918
975
  "alias": "ariaLabel";
919
976
  "required": false;
@@ -969,6 +1026,11 @@ export declare class AutocompleteComponent implements ControlValueAccessor {
969
1026
  "required": false;
970
1027
  "isSignal": true;
971
1028
  };
1029
+ "maxLength": {
1030
+ "alias": "maxLength";
1031
+ "required": false;
1032
+ "isSignal": true;
1033
+ };
972
1034
  "maxResults": {
973
1035
  "alias": "maxResults";
974
1036
  "required": false;
@@ -1673,19 +1735,29 @@ export declare class BreadcrumbsComponent {
1673
1735
  "clicked": "clicked";
1674
1736
  }, never, never, true, never>;
1675
1737
  }
1676
- /** Visual style of a button; drives colour and emphasis. */
1677
- 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';
1678
1743
  /** Visual size of a button. */
1679
1744
  export type ButtonSize = EaSize;
1680
1745
  /** HTML `type` attribute applied to the underlying `<button>` element. */
1681
1746
  export type ButtonType = 'button' | 'submit' | 'reset';
1682
1747
  /**
1683
- * Standard action button supporting primary, secondary, ghost, and danger
1684
- * variants. Includes a loading state that swaps the label for a spinner while
1685
- * 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
1686
1756
  * `--ea-button-padding`, `--ea-button-min-height` and `--ea-button-radius`,
1687
1757
  * which is how an icon-only button comes down to little more than its glyph
1688
- * 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.
1689
1761
  */
1690
1762
  export declare class ButtonComponent {
1691
1763
  readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
@@ -1694,22 +1766,28 @@ export declare class ButtonComponent {
1694
1766
  readonly disabled: import("@angular/core").InputSignal<boolean>;
1695
1767
  readonly loading: import("@angular/core").InputSignal<boolean>;
1696
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>;
1697
1774
  readonly uppercase: import("@angular/core").InputSignal<boolean>;
1698
1775
  /** Optional icon component rendered to the left of the label. */
1699
1776
  readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
1700
1777
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
1701
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;
1702
1784
  /** Fires when the button is activated; suppressed while disabled or loading. */
1703
1785
  readonly clicked: import("@angular/core").OutputEmitterRef<MouseEvent>;
1704
1786
  readonly isDisabled: import("@angular/core").Signal<boolean>;
1705
- readonly hostClasses: import("@angular/core").Signal<{
1706
- [x: string]: boolean;
1707
- 'ea-button--full-width': boolean;
1708
- 'ea-button--uppercase': boolean;
1709
- 'ea-button--loading': boolean;
1710
- 'ea-button--disabled': boolean;
1711
- }>;
1787
+ readonly hostClasses: import("@angular/core").Signal<Record<string, boolean>>;
1712
1788
  handleClick(event: MouseEvent): void;
1789
+ /** Moves keyboard focus to the underlying native button. */
1790
+ focus(): void;
1713
1791
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
1714
1792
  static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "ea-button", never, {
1715
1793
  "variant": {
@@ -1742,6 +1820,11 @@ export declare class ButtonComponent {
1742
1820
  "required": false;
1743
1821
  "isSignal": true;
1744
1822
  };
1823
+ "align": {
1824
+ "alias": "align";
1825
+ "required": false;
1826
+ "isSignal": true;
1827
+ };
1745
1828
  "uppercase": {
1746
1829
  "alias": "uppercase";
1747
1830
  "required": false;
@@ -1762,10 +1845,88 @@ export declare class ButtonComponent {
1762
1845
  "required": false;
1763
1846
  "isSignal": true;
1764
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
+ };
1765
1858
  }, {
1766
1859
  "clicked": "clicked";
1767
1860
  }, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
1768
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
+ }
1769
1930
  /** Visual style of a card surface. */
1770
1931
  export type CardVariant = 'elevated' | 'outlined' | 'filled';
1771
1932
  /** Padding preset applied to the card's content area. */
@@ -2208,6 +2369,8 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
2208
2369
  readonly label: import("@angular/core").InputSignal<string | undefined>;
2209
2370
  /** Optional icon component rendered before the label text. */
2210
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>;
2211
2374
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
2212
2375
  readonly size: import("@angular/core").InputSignal<EaSize>;
2213
2376
  readonly disabled: import("@angular/core").InputSignal<boolean>;
@@ -2381,6 +2544,11 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
2381
2544
  "required": false;
2382
2545
  "isSignal": true;
2383
2546
  };
2547
+ "labelHelp": {
2548
+ "alias": "labelHelp";
2549
+ "required": false;
2550
+ "isSignal": true;
2551
+ };
2384
2552
  "placeholder": {
2385
2553
  "alias": "placeholder";
2386
2554
  "required": false;
@@ -2678,6 +2846,8 @@ export declare class CodeInputComponent implements ControlValueAccessor {
2678
2846
  readonly label: import("@angular/core").InputSignal<string | undefined>;
2679
2847
  /** Optional icon component rendered before the label text. */
2680
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>;
2681
2851
  /** Placeholder text spread one character per cell (cell i shows character i). */
2682
2852
  readonly placeholder: import("@angular/core").InputSignal<string>;
2683
2853
  readonly length: import("@angular/core").InputSignal<number>;
@@ -2733,6 +2903,11 @@ export declare class CodeInputComponent implements ControlValueAccessor {
2733
2903
  "required": false;
2734
2904
  "isSignal": true;
2735
2905
  };
2906
+ "labelHelp": {
2907
+ "alias": "labelHelp";
2908
+ "required": false;
2909
+ "isSignal": true;
2910
+ };
2736
2911
  "placeholder": {
2737
2912
  "alias": "placeholder";
2738
2913
  "required": false;
@@ -2832,6 +3007,8 @@ export declare class DatePickerComponent implements ControlValueAccessor {
2832
3007
  readonly label: import("@angular/core").InputSignal<string | undefined>;
2833
3008
  /** Optional icon component rendered before the label text. */
2834
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>;
2835
3012
  /** Placeholder shown in the field when no date is selected. */
2836
3013
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
2837
3014
  readonly size: import("@angular/core").InputSignal<EaSize>;
@@ -2954,6 +3131,11 @@ export declare class DatePickerComponent implements ControlValueAccessor {
2954
3131
  "required": false;
2955
3132
  "isSignal": true;
2956
3133
  };
3134
+ "labelHelp": {
3135
+ "alias": "labelHelp";
3136
+ "required": false;
3137
+ "isSignal": true;
3138
+ };
2957
3139
  "placeholder": {
2958
3140
  "alias": "placeholder";
2959
3141
  "required": false;
@@ -3390,6 +3572,8 @@ export declare class DropdownComponent implements ControlValueAccessor {
3390
3572
  readonly label: import("@angular/core").InputSignal<string | undefined>;
3391
3573
  /** Optional icon component rendered before the label text. */
3392
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>;
3393
3577
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
3394
3578
  /** Selectable options, either flat or split into groups. */
3395
3579
  readonly options: import("@angular/core").InputSignal<SelectOptions>;
@@ -3474,6 +3658,11 @@ export declare class DropdownComponent implements ControlValueAccessor {
3474
3658
  "required": false;
3475
3659
  "isSignal": true;
3476
3660
  };
3661
+ "labelHelp": {
3662
+ "alias": "labelHelp";
3663
+ "required": false;
3664
+ "isSignal": true;
3665
+ };
3477
3666
  "placeholder": {
3478
3667
  "alias": "placeholder";
3479
3668
  "required": false;
@@ -3638,12 +3827,33 @@ export declare class EmptyStateComponent {
3638
3827
  }, {}, never, ["[slot=media]", "[slot=actions]"], true, never>;
3639
3828
  }
3640
3829
  export declare class FieldLabelComponent {
3830
+ private readonly i18n;
3831
+ private readonly press;
3832
+ private readonly renderer;
3641
3833
  readonly text: import("@angular/core").InputSignal<string>;
3642
3834
  /** Optional icon component rendered before the label text. */
3643
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>;
3644
3842
  readonly forId: import("@angular/core").InputSignal<string | undefined>;
3645
3843
  readonly required: import("@angular/core").InputSignal<boolean>;
3646
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;
3647
3857
  static ɵfac: i0.ɵɵFactoryDeclaration<FieldLabelComponent, never>;
3648
3858
  static ɵcmp: i0.ɵɵComponentDeclaration<FieldLabelComponent, "ea-field-label", never, {
3649
3859
  "text": {
@@ -3656,6 +3866,11 @@ export declare class FieldLabelComponent {
3656
3866
  "required": false;
3657
3867
  "isSignal": true;
3658
3868
  };
3869
+ "help": {
3870
+ "alias": "help";
3871
+ "required": false;
3872
+ "isSignal": true;
3873
+ };
3659
3874
  "forId": {
3660
3875
  "alias": "forId";
3661
3876
  "required": false;
@@ -3717,6 +3932,8 @@ export declare class FormFieldComponent {
3717
3932
  readonly label: import("@angular/core").InputSignal<string | undefined>;
3718
3933
  /** Optional icon component rendered before the label text. */
3719
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>;
3720
3937
  /** Helper text shown below the control; hidden while an error is showing. */
3721
3938
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
3722
3939
  /** Error message shown below the control; replaces the hint and flags the field invalid. */
@@ -3752,6 +3969,11 @@ export declare class FormFieldComponent {
3752
3969
  "required": false;
3753
3970
  "isSignal": true;
3754
3971
  };
3972
+ "labelHelp": {
3973
+ "alias": "labelHelp";
3974
+ "required": false;
3975
+ "isSignal": true;
3976
+ };
3755
3977
  "hint": {
3756
3978
  "alias": "hint";
3757
3979
  "required": false;
@@ -3834,6 +4056,8 @@ declare function controlErrorStateFrom(control: Signal<AbstractControl | null>,
3834
4056
  declare function injectControlErrorState(config: ControlErrorStateConfig): ControlErrorState;
3835
4057
  /** Visual size of the file uploader. */
3836
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';
3837
4061
  /** Reason a file was rejected during selection. */
3838
4062
  export type FileUploaderRejectionReason = 'type' | 'size' | 'count';
3839
4063
  /** Detail object emitted on the `rejected` output when one or more files fail validation. */
@@ -3851,25 +4075,56 @@ export interface FileUploaderRejection {
3851
4075
  * slot via the `icon` attribute: project any element to override it, and the
3852
4076
  * dropzone's size-aware wrapper handles sizing automatically.
3853
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
+ *
3854
4082
  * @example
3855
4083
  * ```html
3856
4084
  * <ea-file-uploader label="Attach files">
3857
4085
  * <ea-icon-paperclip icon />
3858
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" />
3859
4094
  * ```
3860
4095
  */
3861
4096
  export declare class FileUploaderComponent implements ControlValueAccessor {
3862
4097
  private readonly fileInputEl;
3863
4098
  private readonly dropzoneEl;
4099
+ private readonly pickerButton;
3864
4100
  protected readonly i18n: EagamiI18nService;
3865
4101
  readonly label: import("@angular/core").InputSignal<string | undefined>;
3866
4102
  /** Optional icon component rendered before the label text. */
3867
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>;
3868
4106
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
3869
4107
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
3870
4108
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
3871
4109
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
3872
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>;
3873
4128
  readonly disabled: import("@angular/core").InputSignal<boolean>;
3874
4129
  readonly required: import("@angular/core").InputSignal<boolean>;
3875
4130
  /**
@@ -3886,6 +4141,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3886
4141
  readonly maxFiles: import("@angular/core").InputSignal<number | undefined>;
3887
4142
  /** Toggle the file list under the dropzone. */
3888
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>;
3889
4149
  /**
3890
4150
  * Optional per-file progress (0-100). Keyed by `File` object identity, so
3891
4151
  * consumers must keep the same `File` references between change-detection
@@ -3918,6 +4178,7 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3918
4178
  protected readonly showHint: import("@angular/core").Signal<boolean>;
3919
4179
  protected readonly hostClasses: import("@angular/core").Signal<{
3920
4180
  [x: string]: boolean;
4181
+ 'ea-file-uploader-field--button': boolean;
3921
4182
  'ea-file-uploader-field--error': boolean;
3922
4183
  'ea-file-uploader-field--disabled': boolean;
3923
4184
  'ea-file-uploader-field--drag-over': boolean;
@@ -3930,6 +4191,12 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3930
4191
  /** Joined human-readable description of accept / maxSize / maxFiles limits. */
3931
4192
  protected readonly constraintsText: import("@angular/core").Signal<string>;
3932
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>;
3933
4200
  writeValue(value: readonly File[] | null | undefined): void;
3934
4201
  registerOnChange(fn: (value: readonly File[]) => void): void;
3935
4202
  registerOnTouched(fn: () => void): void;
@@ -3938,6 +4205,7 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3938
4205
  protected onDropzoneKeydown(event: KeyboardEvent): void;
3939
4206
  protected onDropzoneFocus(): void;
3940
4207
  protected onDropzoneBlur(): void;
4208
+ protected onPickerButtonFocusOut(): void;
3941
4209
  protected onFileSelected(event: Event): void;
3942
4210
  protected onDragEnter(event: DragEvent): void;
3943
4211
  protected onDragOver(event: DragEvent): void;
@@ -3963,6 +4231,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3963
4231
  "required": false;
3964
4232
  "isSignal": true;
3965
4233
  };
4234
+ "labelHelp": {
4235
+ "alias": "labelHelp";
4236
+ "required": false;
4237
+ "isSignal": true;
4238
+ };
3966
4239
  "hint": {
3967
4240
  "alias": "hint";
3968
4241
  "required": false;
@@ -3983,6 +4256,26 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
3983
4256
  "required": false;
3984
4257
  "isSignal": true;
3985
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
+ };
3986
4279
  "disabled": {
3987
4280
  "alias": "disabled";
3988
4281
  "required": false;
@@ -4018,6 +4311,11 @@ export declare class FileUploaderComponent implements ControlValueAccessor {
4018
4311
  "required": false;
4019
4312
  "isSignal": true;
4020
4313
  };
4314
+ "showConstraints": {
4315
+ "alias": "showConstraints";
4316
+ "required": false;
4317
+ "isSignal": true;
4318
+ };
4021
4319
  "progress": {
4022
4320
  "alias": "progress";
4023
4321
  "required": false;
@@ -4058,6 +4356,8 @@ export declare class InputComponent implements ControlValueAccessor {
4058
4356
  readonly label: import("@angular/core").InputSignal<string | undefined>;
4059
4357
  /** Optional icon component rendered before the label text. */
4060
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>;
4061
4361
  /** Accessible name for the control when no visible `label` is set. */
4062
4362
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
4063
4363
  /** ARIA role applied to the native input, e.g. `combobox` for a typeahead host. */
@@ -4177,6 +4477,11 @@ export declare class InputComponent implements ControlValueAccessor {
4177
4477
  "required": false;
4178
4478
  "isSignal": true;
4179
4479
  };
4480
+ "labelHelp": {
4481
+ "alias": "labelHelp";
4482
+ "required": false;
4483
+ "isSignal": true;
4484
+ };
4180
4485
  "ariaLabel": {
4181
4486
  "alias": "aria-label";
4182
4487
  "required": false;
@@ -4390,9 +4695,9 @@ interface XDomain {
4390
4695
  * Plots one or more series of values as lines, with optional points and area
4391
4696
  * fills. Points are spaced evenly by default, or placed along a numeric scale
4392
4697
  * by `xValues`, with the x-axis labelled per point or by `xTicks`. A
4393
- * `visibleXSpan` window makes a long run of data pannable. Hovering or
4394
- * arrowing through the chart reveals each point's values in a tooltip, and a
4395
- * 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.
4396
4701
  */
4397
4702
  export declare class LineChartComponent {
4398
4703
  protected readonly i18n: EagamiI18nService;
@@ -4461,6 +4766,7 @@ export declare class LineChartComponent {
4461
4766
  readonly visibleRangeChange: import("@angular/core").OutputEmitterRef<LineChartVisibleRange>;
4462
4767
  private readonly viewport;
4463
4768
  private readonly format;
4769
+ private readonly plotEl;
4464
4770
  protected readonly active: import("@angular/core").WritableSignal<ActivePoint | null>;
4465
4771
  protected readonly clipId: string;
4466
4772
  protected readonly breakMaskId: string;
@@ -4470,6 +4776,7 @@ export declare class LineChartComponent {
4470
4776
  protected readonly panning: import("@angular/core").WritableSignal<boolean>;
4471
4777
  private drag;
4472
4778
  private suppressClick;
4779
+ private releaseTap;
4473
4780
  protected readonly label: import("@angular/core").Signal<string>;
4474
4781
  protected readonly count: import("@angular/core").Signal<number>;
4475
4782
  protected readonly hasData: import("@angular/core").Signal<boolean>;
@@ -4536,6 +4843,7 @@ export declare class LineChartComponent {
4536
4843
  }[]>;
4537
4844
  protected readonly announcement: import("@angular/core").Signal<string>;
4538
4845
  protected readonly showsLegend: import("@angular/core").Signal<boolean>;
4846
+ constructor();
4539
4847
  protected seriesColor(index: number): string;
4540
4848
  protected isDimmed(index: number): boolean;
4541
4849
  protected isActivePoint(seriesIndex: number, index: number): boolean;
@@ -4543,6 +4851,7 @@ export declare class LineChartComponent {
4543
4851
  protected onPointerDown(event: PointerEvent): void;
4544
4852
  protected onPointerMove(event: PointerEvent): void;
4545
4853
  protected onPointerUp(event: PointerEvent): void;
4854
+ protected onPointerCancel(event: PointerEvent): void;
4546
4855
  protected onPointerLeave(): void;
4547
4856
  protected onWheel(event: WheelEvent): void;
4548
4857
  protected onClick(): void;
@@ -4564,6 +4873,8 @@ export declare class LineChartComponent {
4564
4873
  private unitsPerPx;
4565
4874
  private panTo;
4566
4875
  private endDrag;
4876
+ private holdTap;
4877
+ private endTapHold;
4567
4878
  private reveal;
4568
4879
  private indexAt;
4569
4880
  private valueAt;
@@ -5106,6 +5417,8 @@ export declare class MultiSelectComponent implements ControlValueAccessor {
5106
5417
  readonly label: import("@angular/core").InputSignal<string | undefined>;
5107
5418
  /** Optional icon component rendered before the label text. */
5108
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>;
5109
5422
  /** Accessible name for the combobox when no visible `label` is set. */
5110
5423
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
5111
5424
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
@@ -5294,6 +5607,11 @@ export declare class MultiSelectComponent implements ControlValueAccessor {
5294
5607
  "required": false;
5295
5608
  "isSignal": true;
5296
5609
  };
5610
+ "labelHelp": {
5611
+ "alias": "labelHelp";
5612
+ "required": false;
5613
+ "isSignal": true;
5614
+ };
5297
5615
  "ariaLabel": {
5298
5616
  "alias": "aria-label";
5299
5617
  "required": false;
@@ -5415,6 +5733,8 @@ export declare class NumberInputComponent implements ControlValueAccessor {
5415
5733
  readonly label: import("@angular/core").InputSignal<string | undefined>;
5416
5734
  /** Optional icon component rendered before the label text. */
5417
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>;
5418
5738
  /** Placeholder shown while the field is empty. */
5419
5739
  readonly placeholder: import("@angular/core").InputSignal<string>;
5420
5740
  /** Visual size of the field. */
@@ -5503,6 +5823,11 @@ export declare class NumberInputComponent implements ControlValueAccessor {
5503
5823
  "required": false;
5504
5824
  "isSignal": true;
5505
5825
  };
5826
+ "labelHelp": {
5827
+ "alias": "labelHelp";
5828
+ "required": false;
5829
+ "isSignal": true;
5830
+ };
5506
5831
  "placeholder": {
5507
5832
  "alias": "placeholder";
5508
5833
  "required": false;
@@ -5990,6 +6315,8 @@ export declare class RadioGroupComponent implements ControlValueAccessor {
5990
6315
  readonly label: import("@angular/core").InputSignal<string | undefined>;
5991
6316
  /** Optional icon component rendered before the label text. */
5992
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>;
5993
6320
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
5994
6321
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
5995
6322
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6055,6 +6382,11 @@ export declare class RadioGroupComponent implements ControlValueAccessor {
6055
6382
  "required": false;
6056
6383
  "isSignal": true;
6057
6384
  };
6385
+ "labelHelp": {
6386
+ "alias": "labelHelp";
6387
+ "required": false;
6388
+ "isSignal": true;
6389
+ };
6058
6390
  "hint": {
6059
6391
  "alias": "hint";
6060
6392
  "required": false;
@@ -6154,6 +6486,8 @@ export declare class RangeSliderComponent implements ControlValueAccessor {
6154
6486
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6155
6487
  /** Optional icon component rendered before the label text. */
6156
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>;
6157
6491
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6158
6492
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6159
6493
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6229,6 +6563,11 @@ export declare class RangeSliderComponent implements ControlValueAccessor {
6229
6563
  "required": false;
6230
6564
  "isSignal": true;
6231
6565
  };
6566
+ "labelHelp": {
6567
+ "alias": "labelHelp";
6568
+ "required": false;
6569
+ "isSignal": true;
6570
+ };
6232
6571
  "hint": {
6233
6572
  "alias": "hint";
6234
6573
  "required": false;
@@ -6345,6 +6684,8 @@ export declare class RatingComponent implements ControlValueAccessor {
6345
6684
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6346
6685
  /** Optional icon component rendered before the label text. */
6347
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>;
6348
6689
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6349
6690
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6350
6691
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6425,6 +6766,11 @@ export declare class RatingComponent implements ControlValueAccessor {
6425
6766
  "required": false;
6426
6767
  "isSignal": true;
6427
6768
  };
6769
+ "labelHelp": {
6770
+ "alias": "labelHelp";
6771
+ "required": false;
6772
+ "isSignal": true;
6773
+ };
6428
6774
  "hint": {
6429
6775
  "alias": "hint";
6430
6776
  "required": false;
@@ -6519,6 +6865,8 @@ export declare class SegmentedComponent implements ControlValueAccessor {
6519
6865
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6520
6866
  /** Optional icon component rendered before the label text. */
6521
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>;
6522
6870
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6523
6871
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6524
6872
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6576,6 +6924,11 @@ export declare class SegmentedComponent implements ControlValueAccessor {
6576
6924
  "required": false;
6577
6925
  "isSignal": true;
6578
6926
  };
6927
+ "labelHelp": {
6928
+ "alias": "labelHelp";
6929
+ "required": false;
6930
+ "isSignal": true;
6931
+ };
6579
6932
  "hint": {
6580
6933
  "alias": "hint";
6581
6934
  "required": false;
@@ -6680,6 +7033,8 @@ export declare class SliderComponent implements ControlValueAccessor {
6680
7033
  readonly label: import("@angular/core").InputSignal<string | undefined>;
6681
7034
  /** Optional icon component rendered before the label text. */
6682
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>;
6683
7038
  readonly hint: import("@angular/core").InputSignal<string | undefined>;
6684
7039
  readonly errorMsg: import("@angular/core").InputSignal<string | undefined>;
6685
7040
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
@@ -6757,6 +7112,11 @@ export declare class SliderComponent implements ControlValueAccessor {
6757
7112
  "required": false;
6758
7113
  "isSignal": true;
6759
7114
  };
7115
+ "labelHelp": {
7116
+ "alias": "labelHelp";
7117
+ "required": false;
7118
+ "isSignal": true;
7119
+ };
6760
7120
  "hint": {
6761
7121
  "alias": "hint";
6762
7122
  "required": false;
@@ -7010,6 +7370,8 @@ export declare class StepperComponent {
7010
7370
  }
7011
7371
  /** Visual size of the switch. */
7012
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';
7013
7375
  /**
7014
7376
  * On/off toggle styled as a sliding switch. Backed by a visually hidden
7015
7377
  * native checkbox and integrates with Angular forms via
@@ -7022,6 +7384,15 @@ export declare class SwitchComponent implements ControlValueAccessor {
7022
7384
  /** Per-validator-key message overrides for a bound form control (e.g. `{ required: '...' }`). */
7023
7385
  readonly errorMessages: import("@angular/core").InputSignal<Partial<Record<string, string>> | undefined>;
7024
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>;
7025
7396
  readonly disabled: import("@angular/core").InputSignal<boolean>;
7026
7397
  readonly required: import("@angular/core").InputSignal<boolean>;
7027
7398
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
@@ -7044,6 +7415,7 @@ export declare class SwitchComponent implements ControlValueAccessor {
7044
7415
  'ea-switch--disabled': boolean;
7045
7416
  'ea-switch--error': boolean;
7046
7417
  }>;
7418
+ protected readonly thumbIcon: import("@angular/core").Signal<Type<unknown> | undefined>;
7047
7419
  writeValue(val: boolean): void;
7048
7420
  registerOnChange(fn: (value: boolean) => void): void;
7049
7421
  registerOnTouched(fn: () => void): void;
@@ -7076,6 +7448,21 @@ export declare class SwitchComponent implements ControlValueAccessor {
7076
7448
  "required": false;
7077
7449
  "isSignal": true;
7078
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
+ };
7079
7466
  "disabled": {
7080
7467
  "alias": "disabled";
7081
7468
  "required": false;
@@ -7367,11 +7754,19 @@ export declare class TagComponent {
7367
7754
  */
7368
7755
  readonly maxWidth: import("@angular/core").InputSignal<string | number | undefined>;
7369
7756
  /**
7370
- * Fill colour as a hex value, for a tag carrying a colour of its own (a
7371
- * user-chosen label). Paints the chip and its border, and picks whichever ink
7372
- * 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)`.
7373
7762
  */
7374
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>;
7375
7770
  /**
7376
7771
  * Where a label clipped by `maxWidth` reveals its full text. Set `none` for
7377
7772
  * a tag rendered inside a tooltip, which would otherwise stack a second
@@ -7401,7 +7796,7 @@ export declare class TagComponent {
7401
7796
  }>;
7402
7797
  /** `maxWidth` as a CSS length; a bare number is px, as the input documents. */
7403
7798
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | null>;
7404
- /** 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`. */
7405
7800
  protected readonly resolvedInk: import("@angular/core").Signal<string | null>;
7406
7801
  protected readonly resolvedColor: import("@angular/core").Signal<string | null>;
7407
7802
  constructor();
@@ -7449,6 +7844,11 @@ export declare class TagComponent {
7449
7844
  "required": false;
7450
7845
  "isSignal": true;
7451
7846
  };
7847
+ "ink": {
7848
+ "alias": "ink";
7849
+ "required": false;
7850
+ "isSignal": true;
7851
+ };
7452
7852
  "tooltip": {
7453
7853
  "alias": "tooltip";
7454
7854
  "required": false;
@@ -7472,9 +7872,15 @@ export declare class TagComponent {
7472
7872
  export type TextareaSize = EaSize;
7473
7873
  /** Axis along which the user is allowed to resize the textarea. */
7474
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
+ }
7475
7880
  /**
7476
7881
  * Multiline text field that mirrors the `ea-input` API. Supports configurable
7477
- * `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
7478
7884
  * forms via `ControlValueAccessor`.
7479
7885
  */
7480
7886
  export declare class TextareaComponent implements ControlValueAccessor {
@@ -7482,6 +7888,8 @@ export declare class TextareaComponent implements ControlValueAccessor {
7482
7888
  readonly label: import("@angular/core").InputSignal<string | undefined>;
7483
7889
  /** Optional icon component rendered before the label text. */
7484
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>;
7485
7893
  /** Accessible name for the control when no visible `label` is set. */
7486
7894
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
7487
7895
  readonly placeholder: import("@angular/core").InputSignal<string>;
@@ -7534,6 +7942,19 @@ export declare class TextareaComponent implements ControlValueAccessor {
7534
7942
  handleBlur(event: FocusEvent): void;
7535
7943
  /** Moves keyboard focus to the underlying native textarea element. */
7536
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;
7537
7958
  static ɵfac: i0.ɵɵFactoryDeclaration<TextareaComponent, never>;
7538
7959
  static ɵcmp: i0.ɵɵComponentDeclaration<TextareaComponent, "ea-textarea", never, {
7539
7960
  "label": {
@@ -7546,6 +7967,11 @@ export declare class TextareaComponent implements ControlValueAccessor {
7546
7967
  "required": false;
7547
7968
  "isSignal": true;
7548
7969
  };
7970
+ "labelHelp": {
7971
+ "alias": "labelHelp";
7972
+ "required": false;
7973
+ "isSignal": true;
7974
+ };
7549
7975
  "ariaLabel": {
7550
7976
  "alias": "aria-label";
7551
7977
  "required": false;
@@ -7673,6 +8099,8 @@ export declare class TimePickerComponent implements ControlValueAccessor {
7673
8099
  readonly label: import("@angular/core").InputSignal<string | undefined>;
7674
8100
  /** Optional icon component rendered before the label text. */
7675
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>;
7676
8104
  readonly placeholder: import("@angular/core").InputSignal<string | undefined>;
7677
8105
  readonly size: import("@angular/core").InputSignal<EaSize>;
7678
8106
  readonly disabled: import("@angular/core").InputSignal<boolean>;
@@ -7843,6 +8271,11 @@ export declare class TimePickerComponent implements ControlValueAccessor {
7843
8271
  "required": false;
7844
8272
  "isSignal": true;
7845
8273
  };
8274
+ "labelHelp": {
8275
+ "alias": "labelHelp";
8276
+ "required": false;
8277
+ "isSignal": true;
8278
+ };
7846
8279
  "placeholder": {
7847
8280
  "alias": "placeholder";
7848
8281
  "required": false;