@tedi-design-system/angular 8.1.0-rc.1 → 8.1.0-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/tedi/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { AfterContentChecked, AfterViewInit, InputSignal, Signal, PipeTransform, OnInit, OnDestroy, TemplateRef, ElementRef, Injector, WritableSignal, InjectionToken, AfterViewChecked, AfterContentInit, QueryList, EnvironmentProviders } from '@angular/core';
3
- import { _IdGenerator } from '@angular/cdk/a11y';
3
+ import { _IdGenerator, Highlightable } from '@angular/cdk/a11y';
4
4
  import * as _tedi_design_system_angular_tedi from '@tedi-design-system/angular/tedi';
5
5
  import { ControlValueAccessor } from '@angular/forms';
6
6
  import * as _tanstack_table_core from '@tanstack/table-core';
@@ -65,7 +65,9 @@ declare class IconComponent {
65
65
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconComponent, "tedi-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
66
66
  }
67
67
 
68
- type TextModifiers = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "normal" | "small" | "extra-small" | "bold" | "thin" | "italic" | "center" | "left" | "right" | "nowrap" | "break-all" | "break-word" | "break-spaces" | "uppercase" | "lowercase" | "capitalize" | "capitalize-first" | "inline-block" | "inline" | "line-normal" | "line-condensed" | "subtitle";
68
+ type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
69
+ type HeadingModifiers = `h${HeadingLevel}`;
70
+ type TextModifiers = HeadingModifiers | "normal" | "small" | "extra-small" | "bold" | "thin" | "italic" | "center" | "left" | "right" | "nowrap" | "break-all" | "break-word" | "break-spaces" | "uppercase" | "lowercase" | "capitalize" | "capitalize-first" | "inline-block" | "inline" | "line-normal" | "line-condensed" | "subtitle";
69
71
  type TextColor = "primary" | "secondary" | "tertiary" | "white" | "disabled" | "brand" | "success" | "warning" | "danger" | "info" | "neutral" | "inherit";
70
72
  declare class TextComponent {
71
73
  /**
@@ -352,6 +354,27 @@ declare const translationsMap: {
352
354
  en: string;
353
355
  ru: string;
354
356
  };
357
+ "search.no-results": {
358
+ description: string;
359
+ components: string[];
360
+ et: string;
361
+ en: string;
362
+ ru: string;
363
+ };
364
+ "search.loading": {
365
+ description: string;
366
+ components: string[];
367
+ et: string;
368
+ en: string;
369
+ ru: string;
370
+ };
371
+ "search.results-count": {
372
+ description: string;
373
+ components: string[];
374
+ et: (count: number) => string;
375
+ en: (count: number) => string;
376
+ ru: (count: number) => string;
377
+ };
355
378
  required: {
356
379
  description: string;
357
380
  components: string[];
@@ -575,6 +598,13 @@ declare const translationsMap: {
575
598
  en: string;
576
599
  ru: string;
577
600
  };
601
+ "toast.close": {
602
+ description: string;
603
+ components: string[];
604
+ et: (title: string) => string;
605
+ en: (title: string) => string;
606
+ ru: (title: string) => string;
607
+ };
578
608
  "modal.close": {
579
609
  description: string;
580
610
  components: string[];
@@ -1548,6 +1578,125 @@ declare const translationsMap: {
1548
1578
  en: string;
1549
1579
  ru: string;
1550
1580
  };
1581
+ "text-editor.bold": {
1582
+ description: string;
1583
+ components: string[];
1584
+ et: string;
1585
+ en: string;
1586
+ ru: string;
1587
+ };
1588
+ "text-editor.italic": {
1589
+ description: string;
1590
+ components: string[];
1591
+ et: string;
1592
+ en: string;
1593
+ ru: string;
1594
+ };
1595
+ "text-editor.underline": {
1596
+ description: string;
1597
+ components: string[];
1598
+ et: string;
1599
+ en: string;
1600
+ ru: string;
1601
+ };
1602
+ "text-editor.strike": {
1603
+ description: string;
1604
+ components: string[];
1605
+ et: string;
1606
+ en: string;
1607
+ ru: string;
1608
+ };
1609
+ "text-editor.align.left": {
1610
+ description: string;
1611
+ components: string[];
1612
+ et: string;
1613
+ en: string;
1614
+ ru: string;
1615
+ };
1616
+ "text-editor.align.center": {
1617
+ description: string;
1618
+ components: string[];
1619
+ et: string;
1620
+ en: string;
1621
+ ru: string;
1622
+ };
1623
+ "text-editor.align.right": {
1624
+ description: string;
1625
+ components: string[];
1626
+ et: string;
1627
+ en: string;
1628
+ ru: string;
1629
+ };
1630
+ "text-editor.align.justify": {
1631
+ description: string;
1632
+ components: string[];
1633
+ et: string;
1634
+ en: string;
1635
+ ru: string;
1636
+ };
1637
+ "text-editor.list.bullet": {
1638
+ description: string;
1639
+ components: string[];
1640
+ et: string;
1641
+ en: string;
1642
+ ru: string;
1643
+ };
1644
+ "text-editor.list.ordered": {
1645
+ description: string;
1646
+ components: string[];
1647
+ et: string;
1648
+ en: string;
1649
+ ru: string;
1650
+ };
1651
+ "text-editor.indent.increase": {
1652
+ description: string;
1653
+ components: string[];
1654
+ et: string;
1655
+ en: string;
1656
+ ru: string;
1657
+ };
1658
+ "text-editor.indent.decrease": {
1659
+ description: string;
1660
+ components: string[];
1661
+ et: string;
1662
+ en: string;
1663
+ ru: string;
1664
+ };
1665
+ "text-editor.color": {
1666
+ description: string;
1667
+ components: string[];
1668
+ et: string;
1669
+ en: string;
1670
+ ru: string;
1671
+ };
1672
+ "text-editor.background": {
1673
+ description: string;
1674
+ components: string[];
1675
+ et: string;
1676
+ en: string;
1677
+ ru: string;
1678
+ };
1679
+ "text-editor.link": {
1680
+ description: string;
1681
+ components: string[];
1682
+ et: string;
1683
+ en: string;
1684
+ ru: string;
1685
+ };
1686
+ "text-editor.blockquote": {
1687
+ description: string;
1688
+ components: string[];
1689
+ et: string;
1690
+ en: string;
1691
+ ru: string;
1692
+ };
1693
+ "text-editor.clean": {
1694
+ description: string;
1695
+ components: string[];
1696
+ et: string;
1697
+ en: string;
1698
+ ru: string;
1699
+ };
1551
1700
  "time-picker.hours": {
1552
1701
  description: string;
1553
1702
  components: string[];
@@ -1705,12 +1854,19 @@ declare class AlertComponent {
1705
1854
  * @default false
1706
1855
  */
1707
1856
  showClose: _angular_core.InputSignal<boolean>;
1857
+ /**
1858
+ * Accessible name for the close button. Override the generic default
1859
+ * ("Close") when several alerts can be on screen at once, so the button
1860
+ * says which one it closes.
1861
+ */
1862
+ closeAriaLabel: _angular_core.InputSignal<string | undefined>;
1708
1863
  /**
1709
1864
  * The ARIA role of the alert, informing screen readers about the alert's purpose.
1865
+ * The role carries its own live-region semantics, so no separate `aria-live` is set.
1710
1866
  * Options:
1711
- * - 'alert': For high-priority messages that demand immediate attention.
1712
- * - 'status': For less urgent messages providing feedback or updates.
1713
- * - 'none': Used when no ARIA role is needed.
1867
+ * - 'alert': For high-priority messages that demand immediate attention (announced assertively).
1868
+ * - 'status': For less urgent messages providing feedback or updates (announced politely).
1869
+ * - 'none': No role and no announcement.
1714
1870
  * @default alert
1715
1871
  */
1716
1872
  role: _angular_core.InputSignal<AlertRole>;
@@ -1745,8 +1901,6 @@ declare class AlertComponent {
1745
1901
  * Close click output
1746
1902
  */
1747
1903
  readonly closeClick: _angular_core.OutputEmitterRef<void>;
1748
- getAriaLive: _angular_core.Signal<"assertive" | "polite" | "off">;
1749
- getAriaLabel: _angular_core.Signal<string>;
1750
1904
  classes: _angular_core.Signal<{
1751
1905
  [x: string]: boolean;
1752
1906
  "tedi-alert": boolean;
@@ -1755,7 +1909,7 @@ declare class AlertComponent {
1755
1909
  }>;
1756
1910
  handleClose(): void;
1757
1911
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertComponent, never>;
1758
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertComponent, "tedi-alert", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "titleElement": { "alias": "titleElement"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closeClick": "closeClick"; }, never, ["[tedi-alert-action]", "*"], true, never>;
1912
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertComponent, "tedi-alert", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "closeAriaLabel": { "alias": "closeAriaLabel"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "titleElement": { "alias": "titleElement"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closeClick": "closeClick"; }, never, ["[tedi-alert-action]", "*"], true, never>;
1759
1913
  }
1760
1914
 
1761
1915
  declare const TOAST_DEFAULT_DURATION = 6000;
@@ -1790,15 +1944,16 @@ interface ToastConfig {
1790
1944
  */
1791
1945
  showProgressBar?: boolean;
1792
1946
  /**
1793
- * Whether to pause the auto-close timer when hovering over the toast.
1947
+ * Whether to pause the auto-close timer while the toast is hovered or
1948
+ * holds keyboard focus.
1794
1949
  * @default true
1795
1950
  */
1796
1951
  pauseOnHover?: boolean;
1797
1952
  /**
1798
- * The ARIA role of the toast, informing screen readers about the notification's priority.
1799
- * - 'status': For non-critical notifications.
1800
- * - 'alert': For critical errors.
1801
- * - 'none': Used when no ARIA role is needed.
1953
+ * Politeness of the screen reader announcement.
1954
+ * - 'status': For non-critical notifications (announced politely).
1955
+ * - 'alert': For critical errors (announced immediately).
1956
+ * - 'none': No announcement.
1802
1957
  * @default status
1803
1958
  */
1804
1959
  role?: ToastRole;
@@ -1832,10 +1987,12 @@ declare class ToastComponent {
1832
1987
  */
1833
1988
  readonly icon: _angular_core.InputSignal<string>;
1834
1989
  /**
1835
- * The ARIA role of the toast, informing screen readers about the notification's priority.
1836
- * - 'status': For non-critical notifications (screen readers announce politely).
1837
- * - 'alert': For critical errors (screen readers announce immediately).
1838
- * - 'none': Used when no ARIA role is needed.
1990
+ * Politeness of the screen reader announcement made by `ToastService`.
1991
+ * The visible toast itself is never a live region — announcing from both it
1992
+ * and the announcer made screen readers read every toast two or three times.
1993
+ * - 'status': For non-critical notifications (announced politely).
1994
+ * - 'alert': For critical errors (announced immediately).
1995
+ * - 'none': No announcement.
1839
1996
  * @default status
1840
1997
  */
1841
1998
  readonly role: _angular_core.InputSignal<AlertRole>;
@@ -1858,13 +2015,25 @@ declare class ToastComponent {
1858
2015
  * Emits when the toast is closed by the user.
1859
2016
  */
1860
2017
  readonly closed: _angular_core.OutputEmitterRef<void>;
2018
+ private readonly translationService;
2019
+ protected readonly closeLabel: _angular_core.Signal<string>;
1861
2020
  readonly mouseEnter: _angular_core.OutputEmitterRef<void>;
1862
2021
  readonly mouseLeave: _angular_core.OutputEmitterRef<void>;
2022
+ /**
2023
+ * Emits when focus enters the toast, so the auto-close timer can be paused.
2024
+ */
2025
+ readonly focusIn: _angular_core.OutputEmitterRef<void>;
2026
+ /**
2027
+ * Emits when focus leaves the toast entirely.
2028
+ */
2029
+ readonly focusOut: _angular_core.OutputEmitterRef<void>;
1863
2030
  handleClose(): void;
1864
2031
  onMouseEnter(): void;
1865
2032
  onMouseLeave(): void;
2033
+ onFocusIn(): void;
2034
+ onFocusOut(event: FocusEvent): void;
1866
2035
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastComponent, never>;
1867
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "tedi-toast", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "showProgressBar": { "alias": "showProgressBar"; "required": false; "isSignal": true; }; "paused": { "alias": "paused"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "mouseEnter": "mouseEnter"; "mouseLeave": "mouseLeave"; }, never, ["*"], true, never>;
2036
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "tedi-toast", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "showProgressBar": { "alias": "showProgressBar"; "required": false; "isSignal": true; }; "paused": { "alias": "paused"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "mouseEnter": "mouseEnter"; "mouseLeave": "mouseLeave"; "focusIn": "focusIn"; "focusOut": "focusOut"; }, never, ["*"], true, never>;
1868
2037
  }
1869
2038
 
1870
2039
  interface ToastItem {
@@ -2336,7 +2505,7 @@ declare class AccordionItemHeaderComponent {
2336
2505
  * `display: contents` so it doesn't affect the visual layout — it only adds
2337
2506
  * semantic information for assistive technologies and TOC tools.
2338
2507
  */
2339
- headingLevel: _angular_core.InputSignal<1 | 3 | 5 | 4 | 2 | 6 | undefined>;
2508
+ headingLevel: _angular_core.InputSignal<1 | 2 | 3 | 4 | 5 | 6 | undefined>;
2340
2509
  /**
2341
2510
  * Chevron style of the default expand action.
2342
2511
  * Only effective when `headerClickable` is `false` (otherwise the
@@ -2618,6 +2787,53 @@ declare class CardHeaderComponent extends CardContentComponent {
2618
2787
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardHeaderComponent, "tedi-card-header", never, {}, {}, never, ["*"], true, never>;
2619
2788
  }
2620
2789
 
2790
+ declare class HeadingWithIconComponent {
2791
+ /**
2792
+ * Name of the Material Icon
2793
+ * https://fonts.google.com/icons
2794
+ *
2795
+ * Rendered as decorative and hidden from assistive technology — the
2796
+ * projected text is the accessible heading name.
2797
+ */
2798
+ icon: _angular_core.InputSignal<string>;
2799
+ /**
2800
+ * Semantic heading tag. Also sets the typography unless a heading modifier
2801
+ * overrides it, so pick the tag that fits the surrounding document outline.
2802
+ * @default h4
2803
+ */
2804
+ element: _angular_core.InputSignal<"h1" | "h2" | "h3" | "h4" | "h5" | "h6">;
2805
+ /**
2806
+ * Single or multiple modifiers to change the heading behavior. A heading
2807
+ * modifier here styles the heading as that level while `element` keeps the
2808
+ * semantics — e.g. an `h2` that looks like an `h4`.
2809
+ */
2810
+ modifiers: _angular_core.InputSignal<TextModifiers | TextModifiers[] | undefined>;
2811
+ /**
2812
+ * Heading text color.
2813
+ * @default primary
2814
+ */
2815
+ headingColor: _angular_core.InputSignal<TextColor>;
2816
+ /**
2817
+ * Color of the icon.
2818
+ * @default primary
2819
+ */
2820
+ iconColor: _angular_core.InputSignal<IconColor>;
2821
+ /**
2822
+ * Size of the icon in pixels.
2823
+ * @default 24
2824
+ */
2825
+ iconSize: _angular_core.InputSignal<IconSize>;
2826
+ /**
2827
+ * Whether the icon should be filled or outlined.
2828
+ * @default outlined
2829
+ */
2830
+ iconVariant: _angular_core.InputSignal<IconVariant>;
2831
+ private readonly visualLevel;
2832
+ lineHeightVar: _angular_core.Signal<string>;
2833
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeadingWithIconComponent, never>;
2834
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeadingWithIconComponent, "tedi-heading-with-icon", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "element": { "alias": "element"; "required": false; "isSignal": true; }; "modifiers": { "alias": "modifiers"; "required": false; "isSignal": true; }; "headingColor": { "alias": "headingColor"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "iconVariant": { "alias": "iconVariant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2835
+ }
2836
+
2621
2837
  type BulletColor = "primary" | "secondary" | "tertiary" | "brand" | "brand-dark" | "success" | "warning" | "warning-dark" | "danger" | "white";
2622
2838
  declare class ListComponent {
2623
2839
  /**
@@ -3711,7 +3927,7 @@ declare class PaginationComponent {
3711
3927
  protected readonly statusText: _angular_core.Signal<string>;
3712
3928
  constructor();
3713
3929
  protected handlePageChange(nextPage: number | null): void;
3714
- protected handlePageSizeChange(value: number | null): void;
3930
+ protected handlePageSizeChange(value: unknown): void;
3715
3931
  protected openMobilePicker(): void;
3716
3932
  protected openPageSizePicker(): void;
3717
3933
  private openPickerModal;
@@ -4937,6 +5153,46 @@ declare class TediTableHeaderButtonComponent {
4937
5153
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TediTableHeaderButtonComponent, "button[tedi-table-header-button]", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4938
5154
  }
4939
5155
 
5156
+ declare class TruncateComponent {
5157
+ /**
5158
+ * Text to display and truncate when it exceeds `maxLength`.
5159
+ */
5160
+ readonly text: _angular_core.InputSignal<string>;
5161
+ /**
5162
+ * Maximum characters shown while collapsed, excluding the ellipsis.
5163
+ * Accepts a number or a breakpoint object, e.g. `{ xs: 100, md: 200 }`.
5164
+ * @default 200
5165
+ */
5166
+ readonly maxLength: _angular_core.InputSignalWithTransform<BreakpointObject<number>, BreakpointInput<number>>;
5167
+ /**
5168
+ * Text appended when content is truncated.
5169
+ * @default "..."
5170
+ */
5171
+ readonly ellipsis: _angular_core.InputSignal<string>;
5172
+ /**
5173
+ * Shows an expand/collapse button when the text exceeds `maxLength`.
5174
+ * When false, `expanded` can still be controlled programmatically.
5175
+ * @default true
5176
+ */
5177
+ readonly expandable: _angular_core.InputSignal<boolean>;
5178
+ /**
5179
+ * Whether to show the full text. Supports two-way binding with `[(expanded)]`.
5180
+ * @default false
5181
+ */
5182
+ readonly expanded: _angular_core.ModelSignal<boolean>;
5183
+ private readonly breakpointService;
5184
+ protected readonly textId: string;
5185
+ protected readonly resolvedMaxLength: _angular_core.Signal<number>;
5186
+ private readonly characters;
5187
+ protected readonly exceedsMaxLength: _angular_core.Signal<boolean>;
5188
+ protected readonly isTruncated: _angular_core.Signal<boolean>;
5189
+ protected readonly showToggle: _angular_core.Signal<boolean>;
5190
+ protected readonly displayText: _angular_core.Signal<string>;
5191
+ protected toggle(): void;
5192
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TruncateComponent, never>;
5193
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TruncateComponent, "tedi-truncate", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, never, true, never>;
5194
+ }
5195
+
4940
5196
  type DropdownTriggerAriaHasPopup = "menu" | "listbox" | "dialog" | "true";
4941
5197
  declare class DropdownTriggerDirective implements AfterViewInit {
4942
5198
  /** Defines the aria-haspopup attribute for the trigger, informing assistive technologies whether it opens a menu or listbox. Improves accessibility by describing the type of popup. */
@@ -5794,6 +6050,12 @@ interface FormFieldControl<T = unknown> {
5794
6050
  dirty?: Signal<boolean>;
5795
6051
  required?: Signal<boolean>;
5796
6052
  maxLength?: Signal<number | undefined>;
6053
+ /**
6054
+ * Number of characters `tedi-form-field`'s counter should report. Implemented
6055
+ * by controls whose value is not the text the user sees — a rich text editor
6056
+ * holding markup, say. Falls back to the length of `value`.
6057
+ */
6058
+ characterCount?: Signal<number>;
5797
6059
  /**
5798
6060
  * Clears the value. Implemented by controls that can be cleared, and called
5799
6061
  * by `tedi-form-field`'s clear button.
@@ -6335,7 +6597,7 @@ declare class FeedbackTextComponent {
6335
6597
  */
6336
6598
  position: _angular_core.InputSignal<FeedbackTextPosition>;
6337
6599
  role: _angular_core.Signal<"alert" | undefined>;
6338
- ariaLive: _angular_core.Signal<"assertive" | "polite">;
6600
+ ariaLive: _angular_core.Signal<"polite" | "assertive">;
6339
6601
  classes: _angular_core.Signal<string>;
6340
6602
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FeedbackTextComponent, never>;
6341
6603
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FeedbackTextComponent, "tedi-feedback-text", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -6556,7 +6818,78 @@ declare class FormFieldComponent implements FieldContext {
6556
6818
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldComponent, "tedi-form-field", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inputClass": { "alias": "inputClass"; "required": false; "isSignal": true; }; "characterLimit": { "alias": "characterLimit"; "required": false; "isSignal": true; }; }, {}, ["control", "feedback"], ["label[tedi-label], tedi-label-row", "*", "tedi-feedback-text", "[tediFormFieldExtra]"], true, never>;
6557
6819
  }
6558
6820
 
6821
+ /**
6822
+ * Context passed to a custom suggestion row template.
6823
+ */
6824
+ interface SearchSuggestionContext<T = unknown> {
6825
+ /** The suggestion, so `let-item` works without naming a context key. */
6826
+ $implicit: T;
6827
+ /** The same suggestion under a name, for `let-item="item"`. */
6828
+ item: T;
6829
+ /** Position in the rendered list, matching the row's `aria-activedescendant` id. */
6830
+ index: number;
6831
+ /** Resolved display label, via `bindLabel`. */
6832
+ label: string;
6833
+ /** Resolved secondary line, via `bindDescription`. Empty when unbound. */
6834
+ description: string;
6835
+ /** Whether the row is unselectable, via `bindDisabled`. */
6836
+ disabled: boolean;
6837
+ /** Current trimmed field value, for custom match highlighting. */
6838
+ query: string;
6839
+ }
6840
+ /**
6841
+ * Renders each suggestion row. Without it, rows show the resolved label with the
6842
+ * matched substring bolded.
6843
+ *
6844
+ * @example
6845
+ * ```html
6846
+ * <tedi-search [suggestions]="people" bindLabel="name">
6847
+ * <ng-template tediSearchSuggestion let-item>
6848
+ * <span tedi-text modifiers="bold">{{ item.name }}</span>
6849
+ * <span tedi-text color="tertiary">{{ item.code }}</span>
6850
+ * </ng-template>
6851
+ * </tedi-search>
6852
+ * ```
6853
+ */
6854
+ declare class SearchSuggestionTemplateDirective<T = unknown> {
6855
+ template: TemplateRef<SearchSuggestionContext<T>>;
6856
+ static ngTemplateContextGuard<T>(_dir: SearchSuggestionTemplateDirective<T>, _ctx: unknown): _ctx is SearchSuggestionContext<T>;
6857
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSuggestionTemplateDirective<any>, never>;
6858
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SearchSuggestionTemplateDirective<any>, "[tediSearchSuggestion]", never, {}, {}, never, never, true, never>;
6859
+ }
6860
+ /**
6861
+ * Extra content pinned below the suggestions — fallback actions and a hint, for
6862
+ * example. It shows whenever the panel is open, including the no-results state,
6863
+ * which is what makes it useful for "nothing matched, try this instead".
6864
+ *
6865
+ * Suggestions keep behaving exactly as they do without it: filtering, arrow-key
6866
+ * navigation and Enter to select are unchanged. Tab moves from the field into the
6867
+ * footer's controls.
6868
+ *
6869
+ * @example
6870
+ * ```html
6871
+ * <tedi-search [suggestions]="matches()">
6872
+ * <ng-template tediSearchFooter>
6873
+ * <tedi-search-footer-actions>
6874
+ * <button tedi-button variant="secondary">Isik teadmata</button>
6875
+ * </tedi-search-footer-actions>
6876
+ * </ng-template>
6877
+ * </tedi-search>
6878
+ * ```
6879
+ */
6880
+ declare class SearchFooterTemplateDirective {
6881
+ template: TemplateRef<unknown>;
6882
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchFooterTemplateDirective, never>;
6883
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SearchFooterTemplateDirective, "[tediSearchFooter]", never, {}, {}, never, never, true, never>;
6884
+ }
6885
+
6559
6886
  type SearchSize = InputSize;
6887
+ interface SearchSuggestionView<T = unknown> {
6888
+ item: T;
6889
+ label: string;
6890
+ description: string;
6891
+ disabled: boolean;
6892
+ }
6560
6893
  interface SearchButton {
6561
6894
  /**
6562
6895
  * Visible button text. When omitted, the button is rendered icon-only.
@@ -6578,7 +6911,7 @@ interface SearchButton {
6578
6911
  */
6579
6912
  ariaLabel?: string;
6580
6913
  }
6581
- declare class SearchComponent implements ControlValueAccessor {
6914
+ declare class SearchComponent<T = unknown> implements ControlValueAccessor {
6582
6915
  /**
6583
6916
  * Unique identifier for the input element, used to associate the label.
6584
6917
  */
@@ -6628,6 +6961,62 @@ declare class SearchComponent implements ControlValueAccessor {
6628
6961
  * `placeholder`, then the translated "search" label.
6629
6962
  */
6630
6963
  ariaLabel: _angular_core.InputSignal<string | undefined>;
6964
+ /**
6965
+ * Suggestions to show in the panel, already filtered by the consumer. Bind an
6966
+ * empty array to keep the combobox behaviour while nothing matches; leave it
6967
+ * unbound for a plain search field.
6968
+ */
6969
+ suggestions: _angular_core.InputSignal<T[] | undefined>;
6970
+ /**
6971
+ * Property holding the display label when suggestions are objects.
6972
+ * @default "label"
6973
+ */
6974
+ bindLabel: _angular_core.InputSignal<string>;
6975
+ /**
6976
+ * Property holding a secondary line shown under the label. Unset by default,
6977
+ * so rows are a single line unless asked for.
6978
+ */
6979
+ bindDescription: _angular_core.InputSignal<string | undefined>;
6980
+ /**
6981
+ * Property marking a suggestion as unselectable. Disabled rows are greyed out
6982
+ * and skipped by keyboard navigation.
6983
+ * @default "disabled"
6984
+ */
6985
+ bindDisabled: _angular_core.InputSignal<string>;
6986
+ /**
6987
+ * Characters required before the panel opens. Below it nothing is shown, not
6988
+ * even the no-results row, so short queries stay quiet.
6989
+ * @default 0
6990
+ */
6991
+ minQueryLength: _angular_core.InputSignalWithTransform<number, unknown>;
6992
+ /**
6993
+ * Shows a loading row instead of results.
6994
+ * @default false
6995
+ */
6996
+ loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
6997
+ /**
6998
+ * Closes the suggestion panel when the page (or a scrollable ancestor)
6999
+ * scrolls. Scrolling the option list itself keeps the panel open.
7000
+ * @default false
7001
+ */
7002
+ hideOnScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
7003
+ /**
7004
+ * Whether the suggestion panel is open.
7005
+ * @default false
7006
+ */
7007
+ panelOpen: _angular_core.ModelSignal<boolean>;
7008
+ /**
7009
+ * Overrides the translated "no results" row.
7010
+ */
7011
+ noResultsText: _angular_core.InputSignal<string | undefined>;
7012
+ /**
7013
+ * Overrides the translated loading row.
7014
+ */
7015
+ loadingText: _angular_core.InputSignal<string | undefined>;
7016
+ /**
7017
+ * Overrides the translated screen-reader result count.
7018
+ */
7019
+ resultsCountText: _angular_core.InputSignal<((count: number) => string) | undefined>;
6631
7020
  /**
6632
7021
  * Emitted when the search is executed (Enter key or button click).
6633
7022
  */
@@ -6636,11 +7025,41 @@ declare class SearchComponent implements ControlValueAccessor {
6636
7025
  * Emitted when the clear button is clicked.
6637
7026
  */
6638
7027
  readonly clear: _angular_core.OutputEmitterRef<void>;
7028
+ /**
7029
+ * Emitted when a suggestion is accepted. The field is filled with its label.
7030
+ */
7031
+ readonly suggestionSelect: _angular_core.OutputEmitterRef<T>;
7032
+ readonly suggestionTemplate: _angular_core.Signal<SearchSuggestionTemplateDirective<any> | undefined>;
7033
+ readonly footerTemplate: _angular_core.Signal<SearchFooterTemplateDirective | undefined>;
6639
7034
  private readonly inputRef;
7035
+ private readonly overlayOrigin;
7036
+ private readonly connectedOverlay;
7037
+ private readonly suggestionRows;
6640
7038
  private readonly formDisabled;
7039
+ private readonly hostElement;
6641
7040
  private readonly translationService;
7041
+ private readonly renderer;
7042
+ private readonly document;
7043
+ private readonly injector;
7044
+ private scrollListener?;
6642
7045
  private onChange;
6643
7046
  private onTouched;
7047
+ /** Suppresses the focus-driven reopen after a selection, until the next edit. */
7048
+ private justSelected;
7049
+ /**
7050
+ * Navigation is driven from `event.key` via the explicit `set*ItemActive`
7051
+ * methods rather than `keyManager.onKeydown`, which switches on the deprecated
7052
+ * `event.keyCode` and so ignores synthesised events.
7053
+ */
7054
+ private readonly keyManager;
7055
+ private readonly activeIndex;
7056
+ readonly overlayPositions: ConnectedPosition[];
7057
+ readonly panelWidth: _angular_core.WritableSignal<number>;
7058
+ /**
7059
+ * True while the panel sits above the field on the fallback position, so the
7060
+ * rounded edge can move to the side that is not joined to the field.
7061
+ */
7062
+ readonly panelAbove: _angular_core.WritableSignal<boolean>;
6644
7063
  readonly isDisabled: _angular_core.Signal<boolean>;
6645
7064
  readonly fieldIcon: _angular_core.Signal<string | FormFieldIcon | undefined>;
6646
7065
  readonly fieldHeight: _angular_core.Signal<"var(--form-field-height-sm)" | "var(--form-field-height-lg)" | "var(--form-field-height)">;
@@ -6655,19 +7074,121 @@ declare class SearchComponent implements ControlValueAccessor {
6655
7074
  * otherwise `aria-label` would silently override the visible text.
6656
7075
  */
6657
7076
  readonly inputAriaLabel: _angular_core.Signal<string | null>;
7077
+ /**
7078
+ * Derived from capability, never from current content — an empty
7079
+ * `suggestions` array still means the consumer opted into the combobox.
7080
+ */
7081
+ readonly autocomplete: _angular_core.Signal<boolean>;
7082
+ readonly resolvedSuggestions: _angular_core.Signal<SearchSuggestionView<T>[]>;
7083
+ readonly query: _angular_core.Signal<string>;
7084
+ readonly hasSuggestions: _angular_core.Signal<boolean>;
7085
+ readonly listboxId: _angular_core.Signal<string>;
7086
+ readonly meetsMinQueryLength: _angular_core.Signal<boolean>;
7087
+ readonly panelVisible: _angular_core.Signal<boolean>;
7088
+ readonly inputRole: _angular_core.Signal<"combobox" | "searchbox">;
7089
+ readonly ariaAutocomplete: _angular_core.Signal<"list" | null>;
7090
+ readonly ariaExpanded: _angular_core.Signal<boolean | null>;
7091
+ readonly ariaControls: _angular_core.Signal<string | null>;
7092
+ readonly activeOptionId: _angular_core.Signal<string | null>;
7093
+ readonly resolvedNoResultsText: _angular_core.Signal<string>;
7094
+ readonly resolvedLoadingText: _angular_core.Signal<string>;
7095
+ readonly announcement: _angular_core.Signal<string>;
7096
+ constructor();
7097
+ optionId(index: number): string;
6658
7098
  onInputValue(value: string): void;
6659
7099
  onClear(): void;
6660
7100
  onBlur(): void;
7101
+ onInputFocus(): void;
7102
+ openPanel(): void;
7103
+ closePanel(): void;
7104
+ onPositionChange(change: ConnectedOverlayPositionChange): void;
7105
+ onOverlayAttach(): void;
7106
+ onOverlayDetach(): void;
7107
+ /**
7108
+ * Listens on the document in the capture phase so scrolls in any ancestor are
7109
+ * seen — a scroll event does not bubble past the element that scrolled.
7110
+ */
7111
+ private setupScrollListener;
7112
+ private cleanupScrollListener;
7113
+ /** Closes the panel and hands focus back to the input. */
7114
+ closeAndRestoreFocus(): void;
7115
+ onKeydown(event: KeyboardEvent): void;
7116
+ /**
7117
+ * Footer controls live in the overlay, which sits at the end of the document,
7118
+ * so they are not next in tab order. Tab reaches them explicitly; without this
7119
+ * they would be mouse-only.
7120
+ */
7121
+ private onTabFromInput;
7122
+ /**
7123
+ * Tabbing past the footer leaves the component: close the panel and continue to
7124
+ * whatever follows the field in document order, so the footer is not a trap.
7125
+ */
7126
+ onFooterKeydown(event: KeyboardEvent): void;
7127
+ private footerFocusables;
7128
+ private focusAfterField;
7129
+ selectSuggestion(suggestion: SearchSuggestionView<T>): void;
7130
+ /**
7131
+ * The panel is portalled into the overlay container, so it is not a descendant
7132
+ * of the host — both roots have to be consulted before deciding focus left.
7133
+ */
7134
+ onFocusOut(event: FocusEvent): void;
6661
7135
  emitSearch(): void;
6662
7136
  focus(): void;
6663
7137
  writeValue(value: string | null): void;
6664
7138
  registerOnChange(fn: (value: string) => void): void;
6665
7139
  registerOnTouched(fn: () => void): void;
6666
7140
  setDisabledState(isDisabled: boolean): void;
6667
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent, never>;
6668
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchComponent, "tedi-search", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "searchEvent": "searchEvent"; "clear": "clear"; }, never, never, true, never>;
7141
+ private onArrowKey;
7142
+ private onEnter;
7143
+ private panelElement;
7144
+ private resetActiveOption;
7145
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent<any>, never>;
7146
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchComponent<any>, "tedi-search", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindDescription": { "alias": "bindDescription"; "required": false; "isSignal": true; }; "bindDisabled": { "alias": "bindDisabled"; "required": false; "isSignal": true; }; "minQueryLength": { "alias": "minQueryLength"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "panelOpen": { "alias": "panelOpen"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "resultsCountText": { "alias": "resultsCountText"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "panelOpen": "panelOpenChange"; "searchEvent": "searchEvent"; "clear": "clear"; "suggestionSelect": "suggestionSelect"; }, ["suggestionTemplate", "footerTemplate"], never, true, never>;
7147
+ }
7148
+
7149
+ declare class SearchSuggestionComponent implements Highlightable {
7150
+ /** Resolved display label. */
7151
+ readonly label: _angular_core.InputSignal<string>;
7152
+ /** Secondary line under the label. */
7153
+ readonly description: _angular_core.InputSignal<string>;
7154
+ /** Current field value, used to bold the matching segment. */
7155
+ readonly query: _angular_core.InputSignal<string>;
7156
+ /** Whether a custom suggestion template supplies the row content. */
7157
+ readonly custom: _angular_core.InputSignalWithTransform<boolean, unknown>;
7158
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
7159
+ readonly host: ElementRef<HTMLLIElement>;
7160
+ private readonly active;
7161
+ readonly isActive: _angular_core.Signal<boolean>;
7162
+ readonly parts: _angular_core.Signal<_tedi_design_system_angular_tedi.SearchHighlightPart[]>;
7163
+ /**
7164
+ * `Highlightable` requires a plain boolean, so the signal input is aliased and
7165
+ * this getter satisfies the CDK contract — a signal would always read truthy.
7166
+ */
7167
+ get disabled(): boolean;
7168
+ setActiveStyles(): void;
7169
+ setInactiveStyles(): void;
7170
+ getLabel(): string;
7171
+ scrollIntoView(): void;
7172
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSuggestionComponent, never>;
7173
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchSuggestionComponent, "li[tedi-search-suggestion]", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "custom": { "alias": "custom"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
6669
7174
  }
6670
7175
 
7176
+ /**
7177
+ * Row of buttons inside a `tediSearchFooter`. Centres them and wraps to a new
7178
+ * line when they no longer fit side by side.
7179
+ */
7180
+ declare class SearchFooterActionsComponent {
7181
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchFooterActionsComponent, never>;
7182
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchFooterActionsComponent, "tedi-search-footer-actions", never, {}, {}, never, ["*"], true, never>;
7183
+ }
7184
+
7185
+ interface SearchHighlightPart {
7186
+ text: string;
7187
+ match: boolean;
7188
+ }
7189
+ /** Splits `text` so the segment matching `query` can be emphasised. */
7190
+ declare function highlightParts(text: string, query: string): SearchHighlightPart[];
7191
+
6671
7192
  /**
6672
7193
  * Context provided to custom option templates.
6673
7194
  */
@@ -6864,6 +7385,12 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6864
7385
  * When undefined, the entire object is used as the value.
6865
7386
  */
6866
7387
  bindValue: _angular_core.InputSignal<string | undefined>;
7388
+ /**
7389
+ * Selected value, for use without a form directive. An array in multi-select
7390
+ * mode, the bare value otherwise. Unlike `[ngModel]` it applies on the first
7391
+ * render rather than a frame later. Do not combine with a form directive.
7392
+ */
7393
+ value: _angular_core.InputSignal<unknown>;
6867
7394
  /**
6868
7395
  * Whether multiple items can be selected.
6869
7396
  * @default false
@@ -7027,6 +7554,7 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7027
7554
  /** `aria-label` is only used when no labelledby reference is available. */
7028
7555
  resolvedAriaLabel: _angular_core.Signal<string | null>;
7029
7556
  isOpen: _angular_core.WritableSignal<boolean>;
7557
+ /** `allowMultiple` untracked, so flipping the mode cannot wipe the selection. */
7030
7558
  selectedValues: _angular_core.WritableSignal<unknown[]>;
7031
7559
  disabled: _angular_core.WritableSignal<boolean>;
7032
7560
  dropdownWidth: _angular_core.WritableSignal<number | null>;
@@ -7180,12 +7708,13 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7180
7708
  private toggleGroupSelection;
7181
7709
  onChange: (value: unknown) => void;
7182
7710
  onTouched: () => void;
7711
+ private toSelection;
7183
7712
  writeValue(value: unknown): void;
7184
7713
  registerOnChange(fn: (value: unknown) => void): void;
7185
7714
  registerOnTouched(fn: () => void): void;
7186
7715
  setDisabledState(isDisabled: boolean): void;
7187
7716
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent<any>, never>;
7188
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualItemSize": { "alias": "virtualItemSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; }, ["optionTemplate", "valueTemplate", "tooltipTemplate"], never, true, never>;
7717
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualItemSize": { "alias": "virtualItemSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; }, ["optionTemplate", "valueTemplate", "tooltipTemplate"], never, true, never>;
7189
7718
  }
7190
7719
 
7191
7720
  type SliderHideLabel = boolean | "keep-space";
@@ -7389,6 +7918,27 @@ declare class FormFieldExtraDirective {
7389
7918
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FormFieldExtraDirective, "[tediFormFieldExtra]", never, {}, {}, never, never, true, never>;
7390
7919
  }
7391
7920
 
7921
+ interface DerivedControlState {
7922
+ invalid: Signal<boolean>;
7923
+ touched: Signal<boolean>;
7924
+ dirty: Signal<boolean>;
7925
+ /** Whether the bound control carries `Validators.required`. */
7926
+ required: Signal<boolean>;
7927
+ /**
7928
+ * Call from `ngOnInit`: a control that is its own `NG_VALUE_ACCESSOR` cannot
7929
+ * inject `NgControl` in the constructor, because the accessor is what
7930
+ * `NgControl` depends on.
7931
+ */
7932
+ connect(): void;
7933
+ }
7934
+ declare function deriveControlState(): DerivedControlState;
7935
+
7936
+ interface ControlDescribedBy {
7937
+ attribute: Signal<string | null>;
7938
+ set(ids: string[]): void;
7939
+ }
7940
+ declare function controlDescribedBy(): ControlDescribedBy;
7941
+
7392
7942
  /**
7393
7943
  * Shared behavior for the prefix/suffix addon directives: reads the group's
7394
7944
  * disabled state and detects whether the addon holds plain text (so the
@@ -7469,11 +8019,6 @@ declare class InputGroupComponent implements InputGroupContext {
7469
8019
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputGroupComponent, "tedi-input-group", never, { "addons": { "alias": "addons"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, {}, ["prefix", "suffix"], ["label[tedi-label], tedi-label-row", "[tediInputGroupPrefix]", "tedi-form-field, tedi-select", "[tediInputGroupSuffix]", "tedi-feedback-text"], true, never>;
7470
8020
  }
7471
8021
 
7472
- interface ControlDescribedBy {
7473
- attribute: Signal<string | null>;
7474
- set(ids: string[]): void;
7475
- }
7476
-
7477
8022
  declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFieldControl {
7478
8023
  private el;
7479
8024
  private readonly fieldContext;
@@ -7507,7 +8052,7 @@ declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFi
7507
8052
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
7508
8053
  readonly disabled: _angular_core.Signal<boolean>;
7509
8054
  private readonly derived;
7510
- readonly describedBy: ControlDescribedBy;
8055
+ readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
7511
8056
  readonly touched: _angular_core.Signal<boolean>;
7512
8057
  readonly dirty: _angular_core.Signal<boolean>;
7513
8058
  readonly invalid: _angular_core.Signal<boolean>;
@@ -7615,7 +8160,7 @@ declare class TextareaComponent implements OnInit, ControlValueAccessor, FormFie
7615
8160
  readonly maxHeightStyle: _angular_core.Signal<string>;
7616
8161
  readonly disabled: _angular_core.Signal<boolean>;
7617
8162
  private readonly derived;
7618
- readonly describedBy: ControlDescribedBy;
8163
+ readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
7619
8164
  readonly touched: _angular_core.Signal<boolean>;
7620
8165
  readonly dirty: _angular_core.Signal<boolean>;
7621
8166
  readonly invalid: _angular_core.Signal<boolean>;
@@ -7760,9 +8305,18 @@ interface ModalConfig<D = unknown> {
7760
8305
  fullscreen?: ModalFullscreen;
7761
8306
  /** Max-width cap (e.g. '75%', '60vw'). Overrides the default 95vw limit. */
7762
8307
  maxWidth?: string;
7763
- /** ARIA label for the dialog. */
8308
+ /**
8309
+ * Accessible name for the dialog. Set this only when the modal has no
8310
+ * visible heading, or when the heading is not the name you want announced:
8311
+ * a modal whose content renders a heading inside `<tedi-modal-header>` is
8312
+ * labelled by that heading automatically.
8313
+ */
7764
8314
  ariaLabel?: string;
7765
- /** ID of the element that labels the dialog. */
8315
+ /**
8316
+ * Id of the element that labels the dialog, for a label that lives outside
8317
+ * `<tedi-modal-header>`. Ignored when `ariaLabel` is set, and takes
8318
+ * precedence over the automatic heading lookup.
8319
+ */
7766
8320
  ariaLabelledBy?: string;
7767
8321
  }
7768
8322
  /** Injection token for data passed to a modal opened via ModalService. */
@@ -8363,8 +8917,11 @@ declare class TimelineComponent {
8363
8917
  */
8364
8918
  variant: _angular_core.InputSignal<TimelineVariant>;
8365
8919
  /**
8366
- * Item padding in rems for the card variant.
8367
- * @default 1
8920
+ * Vertical padding of each item in the "card" variant, in rems (same scale
8921
+ * as Card). Both the gaps between items and the card's top/bottom edges
8922
+ * resolve to twice this value. Horizontal item padding is fixed at the card
8923
+ * default.
8924
+ * @default 0.5
8368
8925
  */
8369
8926
  cardPadding: _angular_core.InputSignal<CardPaddingNumber | undefined>;
8370
8927
  items: _angular_core.WritableSignal<TimelineItemComponent[]>;
@@ -8728,7 +9285,7 @@ declare class HeaderMobileButtonComponent {
8728
9285
  * is confusing to assistive tech — if a popup is involved, omit `href`
8729
9286
  * so the component renders as a button.
8730
9287
  */
8731
- ariaHasPopup: _angular_core.InputSignal<"menu" | "listbox" | "dialog" | "true" | "grid" | "false" | "tree" | undefined>;
9288
+ ariaHasPopup: _angular_core.InputSignal<"menu" | "listbox" | "dialog" | "true" | "false" | "grid" | "tree" | undefined>;
8732
9289
  /**
8733
9290
  * Forwarded to the inner `<button>` as `aria-expanded`. Pair with
8734
9291
  * `ariaHasPopup` when this button toggles a dialog/menu open.
@@ -9259,6 +9816,94 @@ declare class SideNavToggleComponent {
9259
9816
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SideNavToggleComponent, "button[tedi-sidenav-toggle]", never, {}, {}, never, never, true, never>;
9260
9817
  }
9261
9818
 
9819
+ declare class SkeletonComponent implements OnInit, OnDestroy {
9820
+ private readonly liveAnnouncer;
9821
+ private readonly translationService;
9822
+ private readonly isBrowser;
9823
+ /**
9824
+ * Announced by the skeleton's `role="status"` live region once the skeleton
9825
+ * has been on screen for `labelDelay`. Say what is loading: "Loading search
9826
+ * results" carries more than the generic fallback.
9827
+ * @default the translated `skeleton.loading` label
9828
+ */
9829
+ label: _angular_core.InputSignal<string | undefined>;
9830
+ /**
9831
+ * Announced when the skeleton is removed. The skeleton's own live region goes
9832
+ * with it, so this one goes through a page-level announcer. Only announced if
9833
+ * `label` was announced first, so content that arrives faster than
9834
+ * `labelDelay` stays silent.
9835
+ * @default the translated `skeleton.loading-completed` label
9836
+ */
9837
+ completedLabel: _angular_core.InputSignal<string | undefined>;
9838
+ /**
9839
+ * Delay in ms before `label` is announced, so brief loads do not interrupt
9840
+ * the screen reader.
9841
+ * @default 200
9842
+ */
9843
+ labelDelay: _angular_core.InputSignal<number>;
9844
+ /**
9845
+ * Text of the `role="status"` live region. Empty until `labelDelay` has
9846
+ * passed, so the region is in the DOM before it gains text: screen readers
9847
+ * only announce a live region they were already tracking.
9848
+ */
9849
+ protected readonly announcement: _angular_core.WritableSignal<string>;
9850
+ private announceTimer?;
9851
+ ngOnInit(): void;
9852
+ ngOnDestroy(): void;
9853
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonComponent, never>;
9854
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonComponent, "tedi-skeleton", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "completedLabel": { "alias": "completedLabel"; "required": false; "isSignal": true; }; "labelDelay": { "alias": "labelDelay"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9855
+ }
9856
+
9857
+ type SkeletonBlockWidth = number | `${number}` | "auto" | `${number}px`;
9858
+ type SkeletonBlockTextHeight = "p" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
9859
+ type SkeletonBlockHeight = SkeletonBlockTextHeight | number | `${number}`;
9860
+ /**
9861
+ * The subset of inputs that can be overridden per breakpoint via the
9862
+ * `xs`–`xxl` inputs. Every field is optional; only the ones you set override
9863
+ * the base value at that breakpoint.
9864
+ */
9865
+ type SkeletonBlockInputs = {
9866
+ /** Overrides {@link SkeletonBlockComponent.width}. */
9867
+ width?: SkeletonBlockWidth;
9868
+ /** Overrides {@link SkeletonBlockComponent.height}. */
9869
+ height?: SkeletonBlockHeight;
9870
+ };
9871
+ declare class SkeletonBlockComponent {
9872
+ /**
9873
+ * Width of the block. A number is a percentage of the container, a `px`
9874
+ * string is an absolute width, and `auto` fills the container.
9875
+ * @default auto
9876
+ */
9877
+ width: _angular_core.InputSignal<SkeletonBlockWidth>;
9878
+ /**
9879
+ * Height of the block. A text style (`p`, `h1`–`h6`) takes the line height of
9880
+ * the text the block stands in for and follows it across breakpoints, so the
9881
+ * real content drops in without shifting the layout. Pass a number instead
9882
+ * for a height in px, for blocks that stand in for something other than text.
9883
+ * @default p
9884
+ */
9885
+ height: _angular_core.InputSignal<SkeletonBlockHeight>;
9886
+ /** Overrides applied from the `xs` breakpoint (≥ 0px) and up. */
9887
+ xs: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
9888
+ /** Overrides applied from the `sm` breakpoint (≥ 576px) and up. */
9889
+ sm: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
9890
+ /** Overrides applied from the `md` breakpoint (≥ 768px) and up. */
9891
+ md: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
9892
+ /** Overrides applied from the `lg` breakpoint (≥ 992px) and up. */
9893
+ lg: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
9894
+ /** Overrides applied from the `xl` breakpoint (≥ 1200px) and up. */
9895
+ xl: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
9896
+ /** Overrides applied from the `xxl` breakpoint (≥ 1400px) and up. */
9897
+ xxl: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
9898
+ private readonly breakpointService;
9899
+ protected currentProps: _angular_core.Signal<SkeletonBlockInputs>;
9900
+ protected classes: _angular_core.Signal<string>;
9901
+ protected resolvedWidth: _angular_core.Signal<string | null>;
9902
+ protected resolvedHeight: _angular_core.Signal<string | null>;
9903
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonBlockComponent, never>;
9904
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonBlockComponent, "tedi-skeleton-block", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "xs": { "alias": "xs"; "required": false; "isSignal": true; }; "sm": { "alias": "sm"; "required": false; "isSignal": true; }; "md": { "alias": "md"; "required": false; "isSignal": true; }; "lg": { "alias": "lg"; "required": false; "isSignal": true; }; "xl": { "alias": "xl"; "required": false; "isSignal": true; }; "xxl": { "alias": "xxl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9905
+ }
9906
+
9262
9907
  type SpinnerSize = 10 | 16 | 48;
9263
9908
  type SpinnerColor = "primary" | "secondary";
9264
9909
  declare class SpinnerComponent {
@@ -9637,9 +10282,21 @@ declare class ModalComponent implements AfterViewInit, OnDestroy {
9637
10282
  readonly position: _angular_core.InputSignal<ModalPosition>;
9638
10283
  /** @deprecated Whether clicking the backdrop closes the modal. Only used in standalone mode. */
9639
10284
  readonly closeOnBackdropClick: _angular_core.InputSignal<boolean>;
10285
+ /**
10286
+ * Accessible name for the dialog. Only needed when the modal has no heading
10287
+ * in `<tedi-modal-header>`, or that heading is not the name to announce.
10288
+ * Standalone mode only; service mode uses `ModalConfig.ariaLabel`.
10289
+ */
10290
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
10291
+ /**
10292
+ * Id of an element labelling the dialog, for a label outside
10293
+ * `<tedi-modal-header>`. Ignored when `ariaLabel` is set.
10294
+ */
10295
+ readonly ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
9640
10296
  private readonly document;
9641
10297
  private readonly host;
9642
10298
  private readonly platformId;
10299
+ private readonly idGenerator;
9643
10300
  /**
9644
10301
  * When a ModalRef is available, this component is inside a CDK Dialog
9645
10302
  * and should act as a layout-only wrapper.
@@ -9650,17 +10307,29 @@ declare class ModalComponent implements AfterViewInit, OnDestroy {
9650
10307
  private readonly isPresetWidth;
9651
10308
  /** Custom width for non-preset widths (legacy mode only). */
9652
10309
  readonly customWidth: Signal<ModalWidth | null>;
10310
+ /** Re-resolved on every open, since the heading is projected content. */
10311
+ private readonly headingLabelId;
10312
+ /** @internal */
10313
+ protected readonly dialogAriaLabel: Signal<string | null>;
10314
+ /** @internal `aria-label` wins, so it is never paired with a labelledby. */
10315
+ protected readonly dialogAriaLabelledBy: Signal<string | null>;
9653
10316
  readonly classes: Signal<string>;
9654
10317
  constructor();
9655
10318
  ngAfterViewInit(): void;
9656
10319
  ngOnDestroy(): void;
9657
10320
  private onOpen;
10321
+ /**
10322
+ * A DOM query rather than a `contentChild`, because the header injects this
10323
+ * component (importing it back would close a cycle) and the heading is
10324
+ * double-projected, out of reach of any query here.
10325
+ */
10326
+ private resolveHeadingLabel;
9658
10327
  private onClose;
9659
10328
  /** @internal */
9660
10329
  onBackdropClick(): void;
9661
10330
  private handleKeydown;
9662
10331
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ModalComponent, never>;
9663
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ModalComponent, "tedi-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["tedi-modal-header", "tedi-modal-content", "tedi-modal-footer"], true, never>;
10332
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ModalComponent, "tedi-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["tedi-modal-header", "tedi-modal-content", "tedi-modal-footer"], true, never>;
9664
10333
  }
9665
10334
 
9666
10335
  /**
@@ -9685,6 +10354,8 @@ declare class ModalRef<R = unknown> {
9685
10354
  declare class ModalService {
9686
10355
  private readonly dialog;
9687
10356
  private readonly overlay;
10357
+ private readonly injector;
10358
+ private readonly idGenerator;
9688
10359
  /**
9689
10360
  * Open a modal dialog with the given component as content.
9690
10361
  *
@@ -9706,6 +10377,16 @@ declare class ModalService {
9706
10377
  open<R = unknown, D = unknown>(component: ComponentType<unknown>, config?: ModalConfig<D>): ModalRef<R>;
9707
10378
  /** Close all open modals. */
9708
10379
  closeAll(): void;
10380
+ /**
10381
+ * Names the dialog from the heading in its `<tedi-modal-header>` when the
10382
+ * caller passed no label of their own. Deferred, because `Dialog.open`
10383
+ * returns before the content renders and the heading does not exist yet.
10384
+ *
10385
+ * Written onto the container rather than passed as
10386
+ * `DialogConfig.ariaLabelledBy`, which would commit to an id before knowing
10387
+ * whether a heading exists and leave a dangling reference when none does.
10388
+ */
10389
+ private labelFromHeading;
9709
10390
  private buildPanelClasses;
9710
10391
  private setupDialogBehavior;
9711
10392
  private buildPositionStrategy;
@@ -9962,7 +10643,7 @@ declare class StatusBadgeComponent {
9962
10643
  */
9963
10644
  icon: _angular_core.InputSignal<string>;
9964
10645
  classes: _angular_core.Signal<string[]>;
9965
- ariaLive: _angular_core.Signal<"assertive" | "polite" | null>;
10646
+ ariaLive: _angular_core.Signal<"polite" | "assertive" | null>;
9966
10647
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBadgeComponent, never>;
9967
10648
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBadgeComponent, "tedi-status-badge", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9968
10649
  }
@@ -10086,6 +10767,6 @@ declare function isValidTime(time: string | null | undefined): boolean;
10086
10767
  */
10087
10768
  declare function normalizeTime(input: string): string | null;
10088
10769
 
10089
- export { AVAILABLE_LANGUAGES, AccordionComponent, AccordionItemComponent, AccordionItemContentComponent, AccordionItemHeaderComponent, AlertComponent, AttachmentActionsComponent, AttachmentComponent, BREAKPOINTS, BaseButtonDirective, BreadcrumbItemDirective, BreadcrumbSeparatorDirective, BreadcrumbsComponent, BreakpointService, ButtonComponent, ButtonGroupButtonDirective, ButtonGroupComponent, COUNTER_TAG_WIDTH, CalendarComponent, CardButtonComponent, CardComponent, CardContentComponent, CardHeaderComponent, CardIconComponent, CardRowComponent, CarouselComponent, CarouselContentComponent, CarouselFooterComponent, CarouselHeaderComponent, CarouselIndicatorsComponent, CarouselNavigationComponent, CarouselSlideDirective, CheckboxCardComponent, CheckboxCardGroupComponent, CheckboxComponent, CheckboxGroupComponent, ClosingButtonComponent, ColComponent, CollapseButtonComponent, CollapseComponent, DROPDOWN_API, DROPDOWN_CONTENT_API, DateFieldComponent, DatePickerComponent, DropdownComponent, DropdownContentComponent, DropdownItemComponent, DropdownItemValueComponent, DropdownItemValueLabelComponent, DropdownItemValueMetaComponent, DropdownTriggerDirective, EllipsisComponent, EmptyStateComponent, FeedbackTextComponent, FilterComponent, FilterContentDirective, FilterGroupComponent, FilterPrependDirective, FooterBodyComponent, FooterBottomComponent, FooterComponent, FooterSectionComponent, FooterSideComponent, FormFieldComponent, FormFieldExtraDirective, HeaderActionsComponent, HeaderBottomComponent, HeaderComponent, HeaderContentComponent, HeaderLanguageComponent, HeaderLoginComponent, HeaderLogoComponent, HeaderLogoDarkDirective, HeaderLogoutComponent, HeaderMobileButtonComponent, HeaderProfileComponent, HeaderRoleComponent, HeaderRoleContentDirective, HeaderRoleNoResultsDirective, HeaderRoleTitleDirective, HeaderSearchComponent, HeaderTopComponent, HideAtDirective, HorizontalPushHandler, HorizontalStepperComponent, HorizontalStepperItemComponent, IconComponent, InfoButtonComponent, InfoTooltipComponent, InputGroupComponent, InputGroupPrefixDirective, InputGroupSuffixDirective, LANGUAGE_COOKIE_NAME, LANGUAGE_FALLBACK_VALUE, LabelComponent, LabelRowComponent, LinkComponent, ListComponent, MODAL_DATA, MODAL_SIZE, ModalComponent, ModalContentComponent, ModalFooterComponent, ModalHeaderComponent, ModalRef, ModalService, NumberFieldComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, PopoverTriggerDirective, ProgressBarComponent, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RowComponent, ScrollFadeComponent, SearchComponent, SelectComponent, SelectOptionTemplateDirective, SelectTooltipTemplateDirective, SelectValueTemplateDirective, SeparatorComponent, ShowAtDirective, SideNavComponent, SideNavDropdownComponent, SideNavDropdownGroupComponent, SideNavDropdownItemComponent, SideNavGroupTitleComponent, SideNavItemComponent, SideNavOverlayComponent, SideNavToggleComponent, SliderComponent, SpecialOptionControls, SpinnerComponent, StatusBadgeComponent, StatusIndicatorComponent, TAG_GAP, TEDI_FIELD_CONTEXT, TEDI_FORM_FIELD_CONTROL, TEDI_INPUT_GROUP, TEDI_TABLE_CONTEXT, TEDI_THEME_DEFAULT_TOKEN, TEDI_TRANSLATION_DEFAULT_TOKEN, THEME_CLASS_PREFIX, THEME_COOKIE_NAME, THEME_FALLBACK_VALUE, TOAST_DEFAULT_DURATION, TabsComponent, TabsContentComponent, TabsListComponent, TabsTriggerComponent, TagComponent, TediPaginationResultsDirective, TediTableColumnsMenuComponent, TediTableComponent, TediTableHeaderButtonComponent, TediTableToolbarComponent, TediTranslationPipe, TediTranslationService, TextComponent, TextFieldComponent, TextGroupComponent, TextGroupLabelComponent, TextGroupValueComponent, TextareaComponent, ThemeService, TimeFieldComponent, TimePickerComponent, TimelineComponent, TimelineDescriptionComponent, TimelineItemComponent, TimelineTimingsBottomDirective, TimelineTitleComponent, ToastComponent, ToastService, ToggleComponent, TooltipComponent, TooltipContentComponent, TooltipTriggerComponent, VerticalSpacingDirective, VerticalSpacingItemDirective, addDays, addMonths, addYears, breakpointInput, buildMonthGrid, calculateArrowOffset, calculateVisibleTagCount, computeGroupSpans, cookieSignal, createTablePersistence, endOfMonth, formatDate, formatLocaleDate, formatLocaleDateHint, formatLocaleDateLong, formatMonthYear, generateUUID, getCardBorderPlacementColor, getDaysInMonth, getFirstDayOfWeek, getFocusableElements, getISOWeek, getMonthNames, getPaddingCssVariables, getPlacementFromPositionChange, getWeekdayNames, groupRowSpan, injectTediTableContext, isAfterDay, isBeforeDay, isDateInRange, isSameDay, isSameMonth, isSameYear, isValidTime, matchAny, matchDate, normalizeTime, parseDate, parseLocaleDate, provideTedi, resolveCardBorderRadius, startOfMonth, startOfWeek, toConnectedPositions, toggleDateInArray, usePagination };
10090
- export type { AccordionInputs, AlertRole, AlertSize, AlertTitleType, AlertType, AlertVariant, AlignItems, AlignSelf, ArrowOffset, ArrowType, AttachmentDirection, BreadcrumbsInputs, BreadcrumbsVariant, Breakpoint, BreakpointFlag, BreakpointInput, BreakpointInputs, BreakpointInputsWithoutSignals, BreakpointObject, BulletColor, ButtonGroupDropdownLabelMode, ButtonSize, ButtonVariant, CalendarView, CardBackground, CardBorderPlacement, CardBorderRadius, CardBorderType, CardContentInputs, CardIconSize, CardIconType, CardInputs, CardPadding, CardPaddingNumber, CardResolvedCorners, CardRowDirection, CardRowInputs, CarouselIndicatorsVariant, CheckboxCardVariant, CheckboxGroupDirection, CheckboxSize, ClosingButtonIconSize, ClosingButtonSize, ColInputs, ColWidth, CollapseButtonArrowType, CollapseButtonSize, CollapseSize, Cols, ColumnReorderPhase, CompareWithFn, ComponentInputs, DateAfter, DateBefore, DateFieldMode, DateInterval, DatePickerDay, DatePickerInputSize, DatePickerInputState, DatePickerMatcher, DatePickerSelectorMode, DatePickerView, DateRange, DayOfWeek, DropdownApi, DropdownContentApi, DropdownItemValueLayout, DropdownItemValueType, DropdownPosition, DropdownRole, DropdownTriggerAriaHasPopup, EllipsisPosition, EmptyStateSize, EmptyStateType, FeedbackTextPosition, FeedbackTextType, FieldContext, FilterOption, FilterSize, FilterVariant, FooterSidePlacement, FooterSidePosition, FormFieldControl, FormFieldIcon, Gap, GroupByFn, HeaderContentAlignment, HeaderLanguage, HeaderLanguageLabelPosition, HeaderLoginInputs, HeaderLoginSize, HeaderLogoutInputs, HeaderLogoutSize, HeaderProfileInputs, HeaderProfileSize, HeaderSearchMobileLabels, HeaderSearchMobileVariant, HeaderTopAlignment, HeaderTopInputs, HorizontalStepperBackground, IconBackgroundColor, IconColor, IconSize, IconType, IconVariant, InputGroupContext, InputSize, InputState, JustifyItems, JustifySelf, LabelColor, LabelSize, LabelVisuallyHidden, Language, LinkInputs, LinkSize, LinkVariant, Matcher, ModalConfig, ModalFullscreen, ModalPosition, ModalScrollBehavior, ModalSize, ModalWidth, ModalWidthPreset, NumberFieldSize, OverlayPosition, OverlaySide, PaginationBackground, PaginationDividerPosition, PaginationItem, PaginationItemType, PaginationLabels, PaginationVisibility, PopoverPosition, PopoverWidth, PopoverWidthPreset, ProgressBarAnnounce, ProgressBarInputs, ProgressBarLabelPosition, ProgressBarSize, ProgressBarValuePosition, RadioCardVariant, RadioGroupDirection, RadioSize, Representative, RepresentativeIcon, RowInputs, ScrollFadePosition, ScrollFadeScrollbar, ScrollFadeSize, SearchButton, SearchSize, SelectInputSize, SelectOption, SelectOptionContext, SelectOptionGroup, SelectValueContext, SeparatorAxis, SeparatorColor, SeparatorDotSize, SeparatorSpacing, SeparatorSpacingValue, SeparatorThickness, SeparatorVariant, SideNavItemSize, SliderHideLabel, SpinnerColor, SpinnerSize, StatusBadgeColor, StatusBadgeSize, StatusBadgeStatus, StatusBadgeVariant, StatusIndicatorPosition, StatusIndicatorSize, StatusIndicatorType, TEDITheme, TableColumnMeta, TableControlColumn, TableControlColumnOrder, TableExpandTrigger, TableFilterModalData, TableFilterOptions, TablePaginationOptions, TablePersistOptions, TablePersistenceController, TableSelectionMode, TableSize, TableState, TableStatePatch, TabsOverflowMode, TagEllipsis, TagOverflowOptions, TagType, TediColumnDef, TediConfig, TediTableContextValue, TediTableFilterContext, TextColor, TextGroupInputs, TextGroupType, TextModifiers, TextareaSize, Theme, TimeFieldFullscreen, TimeFieldModal, TimeFieldPickerTrigger, TimeFieldPickerVariant, TimeFieldUseNativePicker, TimePickerVariant, TimelineCardPadding, TimelineVariant, ToastConfig, ToastPosition, ToastRole, ToastType, ToggleSize, ToggleType, ToggleVariant, TooltipOpenWith, TooltipPosition, TooltipWidth, UsePaginationArgs, VerticalSpacingSize, VirtualRow };
10770
+ export { AVAILABLE_LANGUAGES, AccordionComponent, AccordionItemComponent, AccordionItemContentComponent, AccordionItemHeaderComponent, AlertComponent, AttachmentActionsComponent, AttachmentComponent, BREAKPOINTS, BaseButtonDirective, BreadcrumbItemDirective, BreadcrumbSeparatorDirective, BreadcrumbsComponent, BreakpointService, ButtonComponent, ButtonGroupButtonDirective, ButtonGroupComponent, COUNTER_TAG_WIDTH, CalendarComponent, CardButtonComponent, CardComponent, CardContentComponent, CardHeaderComponent, CardIconComponent, CardRowComponent, CarouselComponent, CarouselContentComponent, CarouselFooterComponent, CarouselHeaderComponent, CarouselIndicatorsComponent, CarouselNavigationComponent, CarouselSlideDirective, CheckboxCardComponent, CheckboxCardGroupComponent, CheckboxComponent, CheckboxGroupComponent, ClosingButtonComponent, ColComponent, CollapseButtonComponent, CollapseComponent, DROPDOWN_API, DROPDOWN_CONTENT_API, DateFieldComponent, DatePickerComponent, DropdownComponent, DropdownContentComponent, DropdownItemComponent, DropdownItemValueComponent, DropdownItemValueLabelComponent, DropdownItemValueMetaComponent, DropdownTriggerDirective, EllipsisComponent, EmptyStateComponent, FeedbackTextComponent, FilterComponent, FilterContentDirective, FilterGroupComponent, FilterPrependDirective, FooterBodyComponent, FooterBottomComponent, FooterComponent, FooterSectionComponent, FooterSideComponent, FormFieldComponent, FormFieldExtraDirective, HeaderActionsComponent, HeaderBottomComponent, HeaderComponent, HeaderContentComponent, HeaderLanguageComponent, HeaderLoginComponent, HeaderLogoComponent, HeaderLogoDarkDirective, HeaderLogoutComponent, HeaderMobileButtonComponent, HeaderProfileComponent, HeaderRoleComponent, HeaderRoleContentDirective, HeaderRoleNoResultsDirective, HeaderRoleTitleDirective, HeaderSearchComponent, HeaderTopComponent, HeadingWithIconComponent, HideAtDirective, HorizontalPushHandler, HorizontalStepperComponent, HorizontalStepperItemComponent, IconComponent, InfoButtonComponent, InfoTooltipComponent, InputGroupComponent, InputGroupPrefixDirective, InputGroupSuffixDirective, LANGUAGE_COOKIE_NAME, LANGUAGE_FALLBACK_VALUE, LabelComponent, LabelRowComponent, LinkComponent, ListComponent, MODAL_DATA, MODAL_SIZE, ModalComponent, ModalContentComponent, ModalFooterComponent, ModalHeaderComponent, ModalRef, ModalService, NumberFieldComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, PopoverTriggerDirective, ProgressBarComponent, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RowComponent, ScrollFadeComponent, SearchComponent, SearchFooterActionsComponent, SearchFooterTemplateDirective, SearchSuggestionComponent, SearchSuggestionTemplateDirective, SelectComponent, SelectOptionTemplateDirective, SelectTooltipTemplateDirective, SelectValueTemplateDirective, SeparatorComponent, ShowAtDirective, SideNavComponent, SideNavDropdownComponent, SideNavDropdownGroupComponent, SideNavDropdownItemComponent, SideNavGroupTitleComponent, SideNavItemComponent, SideNavOverlayComponent, SideNavToggleComponent, SkeletonBlockComponent, SkeletonComponent, SliderComponent, SpecialOptionControls, SpinnerComponent, StatusBadgeComponent, StatusIndicatorComponent, TAG_GAP, TEDI_FIELD_CONTEXT, TEDI_FORM_FIELD_CONTROL, TEDI_INPUT_GROUP, TEDI_TABLE_CONTEXT, TEDI_THEME_DEFAULT_TOKEN, TEDI_TRANSLATION_DEFAULT_TOKEN, THEME_CLASS_PREFIX, THEME_COOKIE_NAME, THEME_FALLBACK_VALUE, TOAST_DEFAULT_DURATION, TabsComponent, TabsContentComponent, TabsListComponent, TabsTriggerComponent, TagComponent, TediPaginationResultsDirective, TediTableColumnsMenuComponent, TediTableComponent, TediTableHeaderButtonComponent, TediTableToolbarComponent, TediTranslationPipe, TediTranslationService, TextComponent, TextFieldComponent, TextGroupComponent, TextGroupLabelComponent, TextGroupValueComponent, TextareaComponent, ThemeService, TimeFieldComponent, TimePickerComponent, TimelineComponent, TimelineDescriptionComponent, TimelineItemComponent, TimelineTimingsBottomDirective, TimelineTitleComponent, ToastComponent, ToastService, ToggleComponent, TooltipComponent, TooltipContentComponent, TooltipTriggerComponent, TruncateComponent, VerticalSpacingDirective, VerticalSpacingItemDirective, addDays, addMonths, addYears, breakpointInput, buildMonthGrid, calculateArrowOffset, calculateVisibleTagCount, computeGroupSpans, controlDescribedBy, cookieSignal, createTablePersistence, deriveControlState, endOfMonth, formatDate, formatLocaleDate, formatLocaleDateHint, formatLocaleDateLong, formatMonthYear, generateUUID, getCardBorderPlacementColor, getDaysInMonth, getFirstDayOfWeek, getFocusableElements, getISOWeek, getMonthNames, getPaddingCssVariables, getPlacementFromPositionChange, getWeekdayNames, groupRowSpan, highlightParts, injectTediTableContext, isAfterDay, isBeforeDay, isDateInRange, isSameDay, isSameMonth, isSameYear, isValidTime, matchAny, matchDate, normalizeTime, parseDate, parseLocaleDate, provideTedi, resolveCardBorderRadius, startOfMonth, startOfWeek, toConnectedPositions, toggleDateInArray, usePagination };
10771
+ export type { AccordionInputs, AlertRole, AlertSize, AlertTitleType, AlertType, AlertVariant, AlignItems, AlignSelf, ArrowOffset, ArrowType, AttachmentDirection, BreadcrumbsInputs, BreadcrumbsVariant, Breakpoint, BreakpointFlag, BreakpointInput, BreakpointInputs, BreakpointInputsWithoutSignals, BreakpointObject, BulletColor, ButtonGroupDropdownLabelMode, ButtonSize, ButtonVariant, CalendarView, CardBackground, CardBorderPlacement, CardBorderRadius, CardBorderType, CardContentInputs, CardIconSize, CardIconType, CardInputs, CardPadding, CardPaddingNumber, CardResolvedCorners, CardRowDirection, CardRowInputs, CarouselIndicatorsVariant, CheckboxCardVariant, CheckboxGroupDirection, CheckboxSize, ClosingButtonIconSize, ClosingButtonSize, ColInputs, ColWidth, CollapseButtonArrowType, CollapseButtonSize, CollapseSize, Cols, ColumnReorderPhase, CompareWithFn, ComponentInputs, ControlDescribedBy, DateAfter, DateBefore, DateFieldMode, DateInterval, DatePickerDay, DatePickerInputSize, DatePickerInputState, DatePickerMatcher, DatePickerSelectorMode, DatePickerView, DateRange, DayOfWeek, DerivedControlState, DropdownApi, DropdownContentApi, DropdownItemValueLayout, DropdownItemValueType, DropdownPosition, DropdownRole, DropdownTriggerAriaHasPopup, EllipsisPosition, EmptyStateSize, EmptyStateType, FeedbackTextPosition, FeedbackTextType, FieldContext, FilterOption, FilterSize, FilterVariant, FooterSidePlacement, FooterSidePosition, FormFieldControl, FormFieldIcon, Gap, GroupByFn, HeaderContentAlignment, HeaderLanguage, HeaderLanguageLabelPosition, HeaderLoginInputs, HeaderLoginSize, HeaderLogoutInputs, HeaderLogoutSize, HeaderProfileInputs, HeaderProfileSize, HeaderSearchMobileLabels, HeaderSearchMobileVariant, HeaderTopAlignment, HeaderTopInputs, HeadingLevel, HeadingModifiers, HorizontalStepperBackground, IconBackgroundColor, IconColor, IconSize, IconType, IconVariant, InputGroupContext, InputSize, InputState, JustifyItems, JustifySelf, LabelColor, LabelSize, LabelVisuallyHidden, Language, LinkInputs, LinkSize, LinkVariant, Matcher, ModalConfig, ModalFullscreen, ModalPosition, ModalScrollBehavior, ModalSize, ModalWidth, ModalWidthPreset, NumberFieldSize, OverlayPosition, OverlaySide, PaginationBackground, PaginationDividerPosition, PaginationItem, PaginationItemType, PaginationLabels, PaginationVisibility, PopoverPosition, PopoverWidth, PopoverWidthPreset, ProgressBarAnnounce, ProgressBarInputs, ProgressBarLabelPosition, ProgressBarSize, ProgressBarValuePosition, RadioCardVariant, RadioGroupDirection, RadioSize, Representative, RepresentativeIcon, RowInputs, ScrollFadePosition, ScrollFadeScrollbar, ScrollFadeSize, SearchButton, SearchHighlightPart, SearchSize, SearchSuggestionContext, SearchSuggestionView, SelectInputSize, SelectOption, SelectOptionContext, SelectOptionGroup, SelectValueContext, SeparatorAxis, SeparatorColor, SeparatorDotSize, SeparatorSpacing, SeparatorSpacingValue, SeparatorThickness, SeparatorVariant, SideNavItemSize, SkeletonBlockHeight, SkeletonBlockInputs, SkeletonBlockTextHeight, SkeletonBlockWidth, SliderHideLabel, SpinnerColor, SpinnerSize, StatusBadgeColor, StatusBadgeSize, StatusBadgeStatus, StatusBadgeVariant, StatusIndicatorPosition, StatusIndicatorSize, StatusIndicatorType, TEDITheme, TableColumnMeta, TableControlColumn, TableControlColumnOrder, TableExpandTrigger, TableFilterModalData, TableFilterOptions, TablePaginationOptions, TablePersistOptions, TablePersistenceController, TableSelectionMode, TableSize, TableState, TableStatePatch, TabsOverflowMode, TagEllipsis, TagOverflowOptions, TagType, TediColumnDef, TediConfig, TediTableContextValue, TediTableFilterContext, TextColor, TextGroupInputs, TextGroupType, TextModifiers, TextareaSize, Theme, TimeFieldFullscreen, TimeFieldModal, TimeFieldPickerTrigger, TimeFieldPickerVariant, TimeFieldUseNativePicker, TimePickerVariant, TimelineCardPadding, TimelineVariant, ToastConfig, ToastPosition, ToastRole, ToastType, ToggleSize, ToggleType, ToggleVariant, TooltipOpenWith, TooltipPosition, TooltipWidth, UsePaginationArgs, VerticalSpacingSize, VirtualRow };
10091
10772
  //# sourceMappingURL=index.d.ts.map