@tedi-design-system/angular 8.1.0-rc.2 → 8.1.0-rc.21

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[];
@@ -1030,20 +1060,6 @@ declare const translationsMap: {
1030
1060
  en: string;
1031
1061
  ru: string;
1032
1062
  };
1033
- "table-of-contents.valid": {
1034
- description: string;
1035
- components: string[];
1036
- et: (count: string | number) => string;
1037
- en: (count: string | number) => string;
1038
- ru: (count: string | number) => string;
1039
- };
1040
- "table-of-contents.invalid": {
1041
- description: string;
1042
- components: string[];
1043
- et: (count: string | number) => string;
1044
- en: (count: string | number) => string;
1045
- ru: (count: string | number) => string;
1046
- };
1047
1063
  "truncate.see-more": {
1048
1064
  description: string;
1049
1065
  components: string[];
@@ -1548,6 +1564,125 @@ declare const translationsMap: {
1548
1564
  en: string;
1549
1565
  ru: string;
1550
1566
  };
1567
+ "text-editor.bold": {
1568
+ description: string;
1569
+ components: string[];
1570
+ et: string;
1571
+ en: string;
1572
+ ru: string;
1573
+ };
1574
+ "text-editor.italic": {
1575
+ description: string;
1576
+ components: string[];
1577
+ et: string;
1578
+ en: string;
1579
+ ru: string;
1580
+ };
1581
+ "text-editor.underline": {
1582
+ description: string;
1583
+ components: string[];
1584
+ et: string;
1585
+ en: string;
1586
+ ru: string;
1587
+ };
1588
+ "text-editor.strike": {
1589
+ description: string;
1590
+ components: string[];
1591
+ et: string;
1592
+ en: string;
1593
+ ru: string;
1594
+ };
1595
+ "text-editor.align.left": {
1596
+ description: string;
1597
+ components: string[];
1598
+ et: string;
1599
+ en: string;
1600
+ ru: string;
1601
+ };
1602
+ "text-editor.align.center": {
1603
+ description: string;
1604
+ components: string[];
1605
+ et: string;
1606
+ en: string;
1607
+ ru: string;
1608
+ };
1609
+ "text-editor.align.right": {
1610
+ description: string;
1611
+ components: string[];
1612
+ et: string;
1613
+ en: string;
1614
+ ru: string;
1615
+ };
1616
+ "text-editor.align.justify": {
1617
+ description: string;
1618
+ components: string[];
1619
+ et: string;
1620
+ en: string;
1621
+ ru: string;
1622
+ };
1623
+ "text-editor.list.bullet": {
1624
+ description: string;
1625
+ components: string[];
1626
+ et: string;
1627
+ en: string;
1628
+ ru: string;
1629
+ };
1630
+ "text-editor.list.ordered": {
1631
+ description: string;
1632
+ components: string[];
1633
+ et: string;
1634
+ en: string;
1635
+ ru: string;
1636
+ };
1637
+ "text-editor.indent.increase": {
1638
+ description: string;
1639
+ components: string[];
1640
+ et: string;
1641
+ en: string;
1642
+ ru: string;
1643
+ };
1644
+ "text-editor.indent.decrease": {
1645
+ description: string;
1646
+ components: string[];
1647
+ et: string;
1648
+ en: string;
1649
+ ru: string;
1650
+ };
1651
+ "text-editor.color": {
1652
+ description: string;
1653
+ components: string[];
1654
+ et: string;
1655
+ en: string;
1656
+ ru: string;
1657
+ };
1658
+ "text-editor.background": {
1659
+ description: string;
1660
+ components: string[];
1661
+ et: string;
1662
+ en: string;
1663
+ ru: string;
1664
+ };
1665
+ "text-editor.link": {
1666
+ description: string;
1667
+ components: string[];
1668
+ et: string;
1669
+ en: string;
1670
+ ru: string;
1671
+ };
1672
+ "text-editor.blockquote": {
1673
+ description: string;
1674
+ components: string[];
1675
+ et: string;
1676
+ en: string;
1677
+ ru: string;
1678
+ };
1679
+ "text-editor.clean": {
1680
+ description: string;
1681
+ components: string[];
1682
+ et: string;
1683
+ en: string;
1684
+ ru: string;
1685
+ };
1551
1686
  "time-picker.hours": {
1552
1687
  description: string;
1553
1688
  components: string[];
@@ -1705,12 +1840,19 @@ declare class AlertComponent {
1705
1840
  * @default false
1706
1841
  */
1707
1842
  showClose: _angular_core.InputSignal<boolean>;
1843
+ /**
1844
+ * Accessible name for the close button. Override the generic default
1845
+ * ("Close") when several alerts can be on screen at once, so the button
1846
+ * says which one it closes.
1847
+ */
1848
+ closeAriaLabel: _angular_core.InputSignal<string | undefined>;
1708
1849
  /**
1709
1850
  * The ARIA role of the alert, informing screen readers about the alert's purpose.
1851
+ * The role carries its own live-region semantics, so no separate `aria-live` is set.
1710
1852
  * 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.
1853
+ * - 'alert': For high-priority messages that demand immediate attention (announced assertively).
1854
+ * - 'status': For less urgent messages providing feedback or updates (announced politely).
1855
+ * - 'none': No role and no announcement.
1714
1856
  * @default alert
1715
1857
  */
1716
1858
  role: _angular_core.InputSignal<AlertRole>;
@@ -1745,8 +1887,6 @@ declare class AlertComponent {
1745
1887
  * Close click output
1746
1888
  */
1747
1889
  readonly closeClick: _angular_core.OutputEmitterRef<void>;
1748
- getAriaLive: _angular_core.Signal<"assertive" | "polite" | "off">;
1749
- getAriaLabel: _angular_core.Signal<string>;
1750
1890
  classes: _angular_core.Signal<{
1751
1891
  [x: string]: boolean;
1752
1892
  "tedi-alert": boolean;
@@ -1755,7 +1895,7 @@ declare class AlertComponent {
1755
1895
  }>;
1756
1896
  handleClose(): void;
1757
1897
  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>;
1898
+ 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
1899
  }
1760
1900
 
1761
1901
  declare const TOAST_DEFAULT_DURATION = 6000;
@@ -1790,15 +1930,16 @@ interface ToastConfig {
1790
1930
  */
1791
1931
  showProgressBar?: boolean;
1792
1932
  /**
1793
- * Whether to pause the auto-close timer when hovering over the toast.
1933
+ * Whether to pause the auto-close timer while the toast is hovered or
1934
+ * holds keyboard focus.
1794
1935
  * @default true
1795
1936
  */
1796
1937
  pauseOnHover?: boolean;
1797
1938
  /**
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.
1939
+ * Politeness of the screen reader announcement.
1940
+ * - 'status': For non-critical notifications (announced politely).
1941
+ * - 'alert': For critical errors (announced immediately).
1942
+ * - 'none': No announcement.
1802
1943
  * @default status
1803
1944
  */
1804
1945
  role?: ToastRole;
@@ -1832,10 +1973,12 @@ declare class ToastComponent {
1832
1973
  */
1833
1974
  readonly icon: _angular_core.InputSignal<string>;
1834
1975
  /**
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.
1976
+ * Politeness of the screen reader announcement made by `ToastService`.
1977
+ * The visible toast itself is never a live region — announcing from both it
1978
+ * and the announcer made screen readers read every toast two or three times.
1979
+ * - 'status': For non-critical notifications (announced politely).
1980
+ * - 'alert': For critical errors (announced immediately).
1981
+ * - 'none': No announcement.
1839
1982
  * @default status
1840
1983
  */
1841
1984
  readonly role: _angular_core.InputSignal<AlertRole>;
@@ -1858,13 +2001,25 @@ declare class ToastComponent {
1858
2001
  * Emits when the toast is closed by the user.
1859
2002
  */
1860
2003
  readonly closed: _angular_core.OutputEmitterRef<void>;
2004
+ private readonly translationService;
2005
+ protected readonly closeLabel: _angular_core.Signal<string>;
1861
2006
  readonly mouseEnter: _angular_core.OutputEmitterRef<void>;
1862
2007
  readonly mouseLeave: _angular_core.OutputEmitterRef<void>;
2008
+ /**
2009
+ * Emits when focus enters the toast, so the auto-close timer can be paused.
2010
+ */
2011
+ readonly focusIn: _angular_core.OutputEmitterRef<void>;
2012
+ /**
2013
+ * Emits when focus leaves the toast entirely.
2014
+ */
2015
+ readonly focusOut: _angular_core.OutputEmitterRef<void>;
1863
2016
  handleClose(): void;
1864
2017
  onMouseEnter(): void;
1865
2018
  onMouseLeave(): void;
2019
+ onFocusIn(): void;
2020
+ onFocusOut(event: FocusEvent): void;
1866
2021
  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>;
2022
+ 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
2023
  }
1869
2024
 
1870
2025
  interface ToastItem {
@@ -2150,6 +2305,81 @@ declare class ClosingButtonComponent {
2150
2305
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClosingButtonComponent, "button[tedi-closing-button]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "showTitle": { "alias": "showTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2151
2306
  }
2152
2307
 
2308
+ type FloatingButtonVariant = "primary" | "secondary";
2309
+ type FloatingButtonSize = "default" | "large";
2310
+ type FloatingButtonAxis = "horizontal" | "vertical";
2311
+ type FloatingButtonPosition = "fixed" | "absolute" | "sticky" | "relative" | "static";
2312
+ type FloatingButtonPlacement = {
2313
+ vertical: "top" | "bottom" | "center";
2314
+ horizontal: "left" | "right" | "center";
2315
+ };
2316
+ type FloatingButtonOffset = {
2317
+ top?: number | string;
2318
+ bottom?: number | string;
2319
+ left?: number | string;
2320
+ right?: number | string;
2321
+ };
2322
+ declare class FloatingButtonComponent implements OnInit {
2323
+ private readonly baseButton;
2324
+ /**
2325
+ * The button's color variant.
2326
+ * @default primary
2327
+ */
2328
+ readonly variant: _angular_core.InputSignal<FloatingButtonVariant>;
2329
+ /**
2330
+ * The button's size.
2331
+ * @default default
2332
+ */
2333
+ readonly size: _angular_core.InputSignal<FloatingButtonSize>;
2334
+ /**
2335
+ * `vertical` rotates the button 90° counter-clockwise, with rounded left
2336
+ * corners and square right corners. Intended for desktop side placement;
2337
+ * on mobile prefer a horizontal button near the bottom, or an icon-only one.
2338
+ *
2339
+ * Rotation does not change the layout box. To align the visible button with
2340
+ * an edge, center it in a container that reserves its rotated width and height,
2341
+ * then position the container at that edge. See the Placement story.
2342
+ * @default horizontal
2343
+ */
2344
+ readonly axis: _angular_core.InputSignal<FloatingButtonAxis>;
2345
+ /**
2346
+ * CSS positioning mode. Defaults to `fixed`; use `static` to keep the button
2347
+ * in normal document flow.
2348
+ * @default fixed
2349
+ */
2350
+ readonly position: _angular_core.InputSignal<FloatingButtonPosition>;
2351
+ /**
2352
+ * Where to pin the button within its containing block. Applied as `top` / `bottom` /
2353
+ * `left` / `right`; `center` pins the midpoint on that axis. Has no effect when
2354
+ * `position` is `static`.
2355
+ */
2356
+ readonly placement: _angular_core.InputSignal<FloatingButtonPlacement | undefined>;
2357
+ /**
2358
+ * Distance from the pinned edges, defaulting to `0`. Numbers are treated as pixels,
2359
+ * strings accept CSS lengths such as `1rem`. Only the edges named by `placement` apply.
2360
+ */
2361
+ readonly offset: _angular_core.InputSignal<FloatingButtonOffset | undefined>;
2362
+ /**
2363
+ * Overrides the button's CSS `z-index`. Defaults to `--z-index-feedback` when omitted.
2364
+ */
2365
+ readonly zIndex: _angular_core.InputSignal<number | undefined>;
2366
+ readonly classes: _angular_core.Signal<string>;
2367
+ /**
2368
+ * Uses the separate `translate` property for centering, while the vertical
2369
+ * orientation is handled by `rotate`.
2370
+ */
2371
+ protected readonly placementStyles: _angular_core.Signal<{
2372
+ top: string | null;
2373
+ bottom: string | null;
2374
+ left: string | null;
2375
+ right: string | null;
2376
+ translate: string | null;
2377
+ }>;
2378
+ ngOnInit(): void;
2379
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FloatingButtonComponent, never>;
2380
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FloatingButtonComponent, "[tedi-floating-button]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "axis": { "alias": "axis"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof BaseButtonDirective; inputs: {}; outputs: {}; }]>;
2381
+ }
2382
+
2153
2383
  /**
2154
2384
  * A single item inside a `tedi-accordion`. Owns the item's state (expanded)
2155
2385
  * and the inputs shared by header and content (selected, showIconCard,
@@ -2336,7 +2566,7 @@ declare class AccordionItemHeaderComponent {
2336
2566
  * `display: contents` so it doesn't affect the visual layout — it only adds
2337
2567
  * semantic information for assistive technologies and TOC tools.
2338
2568
  */
2339
- headingLevel: _angular_core.InputSignal<1 | 3 | 5 | 4 | 2 | 6 | undefined>;
2569
+ headingLevel: _angular_core.InputSignal<1 | 2 | 3 | 4 | 5 | 6 | undefined>;
2340
2570
  /**
2341
2571
  * Chevron style of the default expand action.
2342
2572
  * Only effective when `headerClickable` is `false` (otherwise the
@@ -2618,6 +2848,53 @@ declare class CardHeaderComponent extends CardContentComponent {
2618
2848
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardHeaderComponent, "tedi-card-header", never, {}, {}, never, ["*"], true, never>;
2619
2849
  }
2620
2850
 
2851
+ declare class HeadingWithIconComponent {
2852
+ /**
2853
+ * Name of the Material Icon
2854
+ * https://fonts.google.com/icons
2855
+ *
2856
+ * Rendered as decorative and hidden from assistive technology — the
2857
+ * projected text is the accessible heading name.
2858
+ */
2859
+ icon: _angular_core.InputSignal<string>;
2860
+ /**
2861
+ * Semantic heading tag. Also sets the typography unless a heading modifier
2862
+ * overrides it, so pick the tag that fits the surrounding document outline.
2863
+ * @default h4
2864
+ */
2865
+ element: _angular_core.InputSignal<"h1" | "h2" | "h3" | "h4" | "h5" | "h6">;
2866
+ /**
2867
+ * Single or multiple modifiers to change the heading behavior. A heading
2868
+ * modifier here styles the heading as that level while `element` keeps the
2869
+ * semantics — e.g. an `h2` that looks like an `h4`.
2870
+ */
2871
+ modifiers: _angular_core.InputSignal<TextModifiers | TextModifiers[] | undefined>;
2872
+ /**
2873
+ * Heading text color.
2874
+ * @default primary
2875
+ */
2876
+ headingColor: _angular_core.InputSignal<TextColor>;
2877
+ /**
2878
+ * Color of the icon.
2879
+ * @default primary
2880
+ */
2881
+ iconColor: _angular_core.InputSignal<IconColor>;
2882
+ /**
2883
+ * Size of the icon in pixels.
2884
+ * @default 24
2885
+ */
2886
+ iconSize: _angular_core.InputSignal<IconSize>;
2887
+ /**
2888
+ * Whether the icon should be filled or outlined.
2889
+ * @default outlined
2890
+ */
2891
+ iconVariant: _angular_core.InputSignal<IconVariant>;
2892
+ private readonly visualLevel;
2893
+ lineHeightVar: _angular_core.Signal<string>;
2894
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeadingWithIconComponent, never>;
2895
+ 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>;
2896
+ }
2897
+
2621
2898
  type BulletColor = "primary" | "secondary" | "tertiary" | "brand" | "brand-dark" | "success" | "warning" | "warning-dark" | "danger" | "white";
2622
2899
  declare class ListComponent {
2623
2900
  /**
@@ -3711,7 +3988,7 @@ declare class PaginationComponent {
3711
3988
  protected readonly statusText: _angular_core.Signal<string>;
3712
3989
  constructor();
3713
3990
  protected handlePageChange(nextPage: number | null): void;
3714
- protected handlePageSizeChange(value: number | null): void;
3991
+ protected handlePageSizeChange(value: unknown): void;
3715
3992
  protected openMobilePicker(): void;
3716
3993
  protected openPageSizePicker(): void;
3717
3994
  private openPickerModal;
@@ -4937,10 +5214,57 @@ declare class TediTableHeaderButtonComponent {
4937
5214
  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
5215
  }
4939
5216
 
4940
- type DropdownTriggerAriaHasPopup = "menu" | "listbox" | "dialog" | "true";
5217
+ declare class TruncateComponent {
5218
+ /**
5219
+ * Text to display and truncate when it exceeds `maxLength`.
5220
+ */
5221
+ readonly text: _angular_core.InputSignal<string>;
5222
+ /**
5223
+ * Maximum characters shown while collapsed, excluding the ellipsis.
5224
+ * Accepts a number or a breakpoint object, e.g. `{ xs: 100, md: 200 }`.
5225
+ * @default 200
5226
+ */
5227
+ readonly maxLength: _angular_core.InputSignalWithTransform<BreakpointObject<number>, BreakpointInput<number>>;
5228
+ /**
5229
+ * Text appended when content is truncated.
5230
+ * @default "..."
5231
+ */
5232
+ readonly ellipsis: _angular_core.InputSignal<string>;
5233
+ /**
5234
+ * Shows an expand/collapse button when the text exceeds `maxLength`.
5235
+ * When false, `expanded` can still be controlled programmatically.
5236
+ * @default true
5237
+ */
5238
+ readonly expandable: _angular_core.InputSignal<boolean>;
5239
+ /**
5240
+ * Whether to show the full text. Supports two-way binding with `[(expanded)]`.
5241
+ * @default false
5242
+ */
5243
+ readonly expanded: _angular_core.ModelSignal<boolean>;
5244
+ private readonly breakpointService;
5245
+ protected readonly textId: string;
5246
+ protected readonly resolvedMaxLength: _angular_core.Signal<number>;
5247
+ private readonly characters;
5248
+ protected readonly exceedsMaxLength: _angular_core.Signal<boolean>;
5249
+ protected readonly isTruncated: _angular_core.Signal<boolean>;
5250
+ protected readonly showToggle: _angular_core.Signal<boolean>;
5251
+ protected readonly displayText: _angular_core.Signal<string>;
5252
+ protected toggle(): void;
5253
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TruncateComponent, never>;
5254
+ 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>;
5255
+ }
5256
+
5257
+ type DropdownTriggerAriaHasPopup = "menu" | "listbox" | "dialog" | "true" | "false";
4941
5258
  declare class DropdownTriggerDirective implements AfterViewInit {
4942
- /** 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. */
4943
- readonly ariaHaspopup: _angular_core.InputSignal<DropdownTriggerAriaHasPopup>;
5259
+ /**
5260
+ * The `aria-haspopup` value for the trigger, telling assistive technology
5261
+ * what kind of popup it opens.
5262
+ *
5263
+ * Defaults to the content's `dropdownRole`: `menu` for a menu, `listbox` for
5264
+ * a listbox, and no attribute for a plain `list`, which ARIA has no
5265
+ * `aria-haspopup` token for. `false` also omits the attribute.
5266
+ */
5267
+ readonly ariaHaspopup: _angular_core.InputSignal<DropdownTriggerAriaHasPopup | undefined>;
4944
5268
  readonly host: ElementRef<HTMLElement>;
4945
5269
  readonly dropdown: DropdownComponent;
4946
5270
  readonly overlayOrigin: CdkOverlayOrigin;
@@ -4953,6 +5277,7 @@ declare class DropdownTriggerDirective implements AfterViewInit {
4953
5277
  * would both be tab stops, and the ARIA state would land on the wrong element.
4954
5278
  */
4955
5279
  private readonly triggerElement;
5280
+ private readonly hasPopup;
4956
5281
  constructor();
4957
5282
  ngAfterViewInit(): void;
4958
5283
  focus(): void;
@@ -4961,6 +5286,7 @@ declare class DropdownTriggerDirective implements AfterViewInit {
4961
5286
  get focusableElement(): HTMLElement;
4962
5287
  onClick(): void;
4963
5288
  onKeydown(event: KeyboardEvent): void;
5289
+ private isWidgetContent;
4964
5290
  private resolveTriggerElement;
4965
5291
  private isNativelyFocusable;
4966
5292
  private openAndFocusFirst;
@@ -4969,6 +5295,18 @@ declare class DropdownTriggerDirective implements AfterViewInit {
4969
5295
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DropdownTriggerDirective, "[tedi-dropdown-trigger]", never, { "ariaHaspopup": { "alias": "ariaHaspopup"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof _angular_cdk_overlay.CdkOverlayOrigin; inputs: {}; outputs: {}; }]>;
4970
5296
  }
4971
5297
 
5298
+ /**
5299
+ * How the dropdown panel is exposed to assistive technology.
5300
+ *
5301
+ * - `menu`: a menu of actions. Composite widget, so it is a single tab stop
5302
+ * with arrow-key navigation and its items are `menuitem`s.
5303
+ * - `listbox`: a list of options, one of which can be selected. Composite
5304
+ * widget, like `menu`, and its items are `option`s.
5305
+ * - `list`: a plain list, not a widget. Items keep their own semantics, so
5306
+ * navigation links stay links and each is its own tab stop. Use this
5307
+ * whenever the panel is a set of links.
5308
+ */
5309
+ type DropdownRole = "menu" | "listbox" | "list";
4972
5310
  interface DropdownApi {
4973
5311
  /** Current value of the dropdown. Used to track the selected option in listbox mode. */
4974
5312
  value: WritableSignal<string | undefined>;
@@ -4998,7 +5336,9 @@ interface DropdownApi {
4998
5336
  declare const DROPDOWN_API: InjectionToken<DropdownApi>;
4999
5337
  interface DropdownContentApi {
5000
5338
  /** The ARIA role of the dropdown content. Determines keyboard interaction and accessibility semantics. */
5001
- dropdownRole: Signal<"menu" | "listbox">;
5339
+ dropdownRole: Signal<DropdownRole>;
5340
+ /** Whether the content is a composite widget (`menu`, `listbox`) rather than a plain `list`. Widgets own focus management and key handling; a plain list leaves both to the items' own controls. */
5341
+ isWidget: Signal<boolean>;
5002
5342
  }
5003
5343
  declare const DROPDOWN_CONTENT_API: InjectionToken<DropdownContentApi>;
5004
5344
 
@@ -5050,6 +5390,20 @@ declare class DropdownItemComponent {
5050
5390
  readonly value: _angular_core.InputSignal<string | undefined>;
5051
5391
  /** Is item disabled? */
5052
5392
  readonly disabled: _angular_core.InputSignal<boolean>;
5393
+ /**
5394
+ * Whether the projected content is itself the interactive control, e.g. a
5395
+ * button. In a `menu` or `listbox` the item role and the roving tabindex then
5396
+ * move onto that element instead of the host `li`, so assistive technology
5397
+ * reports one control per item and the control keeps its own activation
5398
+ * behaviour.
5399
+ *
5400
+ * A widget role replaces the control's own role, so a projected link stops
5401
+ * being announced as a link. For navigation links use
5402
+ * `dropdownRole="list"` instead, where this input is not needed: a plain list
5403
+ * adds no roles, and the links stay links and stay in the tab order.
5404
+ * @default false
5405
+ */
5406
+ readonly interactiveContent: _angular_core.InputSignal<boolean>;
5053
5407
  /**
5054
5408
  * Whether the item's label clips overflowing content (for text ellipsis).
5055
5409
  * Set `false` when projecting content with decorations that intentionally
@@ -5075,20 +5429,58 @@ declare class DropdownItemComponent {
5075
5429
  readonly dropdownContent: DropdownContentApi;
5076
5430
  /** Check if custom dropdown-item-value is provided */
5077
5431
  readonly customItemValue: _angular_core.Signal<DropdownItemValueComponent | undefined>;
5432
+ private readonly renderer;
5433
+ private readonly destroyRef;
5434
+ private control;
5435
+ constructor();
5436
+ /** The widget role for this item, or `null` in a plain `list`. */
5437
+ itemRole(): "menuitem" | "option" | null;
5438
+ hostRole(): "option" | "menuitem" | "none" | null;
5439
+ hostAriaSelected(): boolean | null;
5440
+ hostAriaDisabled(): "true" | null;
5441
+ hostTabindex(): "-1" | null;
5442
+ /**
5443
+ * Whether the item's ARIA state and focus belong on the projected control
5444
+ * rather than the host `li`. Always true in a plain `list`, where the
5445
+ * projected control is what the item is.
5446
+ */
5447
+ private controlOwnsSemantics;
5078
5448
  isSelected(): boolean;
5449
+ /**
5450
+ * The element that carries the item's role, roving tabindex and focus: the
5451
+ * projected control when it owns the item's semantics, the host `li`
5452
+ * otherwise.
5453
+ */
5454
+ focusTarget(): HTMLElement;
5079
5455
  focus(): void;
5456
+ setTabindex(value: string | null): void;
5457
+ private controlElement;
5080
5458
  onClick(): void;
5081
5459
  onMousedown(event: MouseEvent): void;
5082
5460
  onKeydown(event: KeyboardEvent): void;
5461
+ /** Returns whether the key was an activation key and has been dealt with. */
5462
+ private handleActivationKey;
5083
5463
  private onItemSelect;
5084
5464
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemComponent, never>;
5085
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemComponent, "li[tedi-dropdown-item]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clipContent": { "alias": "clipContent"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, ["customItemValue"], ["tedi-dropdown-item-value", "*"], true, never>;
5465
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemComponent, "li[tedi-dropdown-item]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "interactiveContent": { "alias": "interactiveContent"; "required": false; "isSignal": true; }; "clipContent": { "alias": "clipContent"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, ["customItemValue"], ["tedi-dropdown-item-value", "*"], true, never>;
5086
5466
  }
5087
5467
 
5088
- type DropdownRole = "menu" | "listbox";
5089
5468
  declare class DropdownContentComponent {
5090
5469
  /**
5091
- * Role for content, use listbox for list and menu for actions
5470
+ * How the panel is exposed to assistive technology: `menu` for actions,
5471
+ * `listbox` for selectable options, `list` for a plain list of links.
5472
+ *
5473
+ * `menu` and `listbox` are composite widgets, so the panel is a single tab
5474
+ * stop with arrow-key navigation and the items carry `menuitem` / `option`.
5475
+ * `list` is not a widget: it adds no item roles and no key handling, so
5476
+ * projected links keep the link role and each one is its own tab stop. A
5477
+ * panel of navigation links belongs in `list`, because a widget role would
5478
+ * replace the link role and screen readers would stop announcing them as
5479
+ * links. The `role="list"` it puts on the `ul` is redundant on paper but not
5480
+ * in Safari, which drops list semantics from a list with no marker. A `list`
5481
+ * panel also renders in the dropdown's own place in the DOM rather than at the
5482
+ * end of `<body>`, so it keeps its place in reading order for the screen
5483
+ * readers that navigate by DOM order instead of by `Tab`.
5092
5484
  * @default menu
5093
5485
  */
5094
5486
  readonly dropdownRole: _angular_core.InputSignal<DropdownRole>;
@@ -5096,6 +5488,7 @@ declare class DropdownContentComponent {
5096
5488
  private readonly dropdownApi;
5097
5489
  readonly containerId: _angular_core.Signal<string>;
5098
5490
  readonly items: _angular_core.Signal<readonly DropdownItemComponent[]>;
5491
+ readonly isWidget: _angular_core.Signal<boolean>;
5099
5492
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownContentComponent, never>;
5100
5493
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownContentComponent, "tedi-dropdown-content", never, { "dropdownRole": { "alias": "dropdownRole"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*", "li[tedi-dropdown-item]"], true, never>;
5101
5494
  }
@@ -5145,6 +5538,7 @@ declare class DropdownComponent implements OnDestroy {
5145
5538
  private readonly platformId;
5146
5539
  private readonly document;
5147
5540
  private readonly renderer;
5541
+ private readonly overlayContainer;
5148
5542
  private scrollListener?;
5149
5543
  private skipNextGestureOutsideClick;
5150
5544
  constructor();
@@ -5155,6 +5549,12 @@ declare class DropdownComponent implements OnDestroy {
5155
5549
  onOutsideClick(event?: MouseEvent): void;
5156
5550
  handleFocusOut: (event: FocusEvent) => void;
5157
5551
  tabOutOfDropdown(shiftKey: boolean): void;
5552
+ /**
5553
+ * Focuses `target` and only then tears the panel down, so focus is never on a
5554
+ * detached element. `handleFocusOut` already closes on the resulting
5555
+ * `focusin`; the explicit call covers a target that refuses focus.
5556
+ */
5557
+ private moveFocusOut;
5158
5558
  focusFirstItem(): void;
5159
5559
  focusLastItem(): void;
5160
5560
  setActiveToSelectedOrFirst(): void;
@@ -5162,6 +5562,11 @@ declare class DropdownComponent implements OnDestroy {
5162
5562
  focusNextItem(fromEl: HTMLLIElement): void;
5163
5563
  focusPrevItem(fromEl: HTMLLIElement): void;
5164
5564
  updateTabindexes(): void;
5565
+ /** Moves focus to the first focusable element in the panel. */
5566
+ focusPanelStart(): void;
5567
+ onPanelKeydown(event: KeyboardEvent): void;
5568
+ private panelFocusables;
5569
+ private closeAndFocusTrigger;
5165
5570
  private setupScrollListener;
5166
5571
  private cleanupScrollListener;
5167
5572
  private findIndexByElement;
@@ -5715,6 +6120,13 @@ interface DateInputTag {
5715
6120
  }
5716
6121
  declare class DateInputComponent implements AfterViewChecked {
5717
6122
  readonly inputId: _angular_core.InputSignal<string>;
6123
+ /** `name` attribute of the text input; omitted from the DOM when not set. */
6124
+ readonly name: _angular_core.InputSignal<string | undefined>;
6125
+ /**
6126
+ * `aria-describedby` ids for the input. Handed to the `tedi-text-field`
6127
+ * directive, which owns the input's `aria-describedby` attribute.
6128
+ */
6129
+ readonly ariaDescribedby: _angular_core.InputSignal<string | null>;
5718
6130
  readonly value: _angular_core.InputSignal<string>;
5719
6131
  readonly tags: _angular_core.InputSignal<readonly DateInputTag[]>;
5720
6132
  readonly mode: _angular_core.InputSignal<DateFieldMode>;
@@ -5746,6 +6158,7 @@ declare class DateInputComponent implements AfterViewChecked {
5746
6158
  private readonly inputElement;
5747
6159
  private readonly fieldElement;
5748
6160
  private readonly tagElements;
6161
+ private readonly textField;
5749
6162
  /** Number of tags that fit on a single row; `null` until measured. */
5750
6163
  readonly visibleTagsCount: _angular_core.WritableSignal<number | null>;
5751
6164
  constructor();
@@ -5768,7 +6181,7 @@ declare class DateInputComponent implements AfterViewChecked {
5768
6181
  private calculateVisibleTags;
5769
6182
  private getAvailableTagWidth;
5770
6183
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateInputComponent, never>;
5771
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateInputComponent, "tedi-date-input", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "iconActive": { "alias": "iconActive"; "required": false; "isSignal": true; }; "iconDisabled": { "alias": "iconDisabled"; "required": false; "isSignal": true; }; "useNativePicker": { "alias": "useNativePicker"; "required": false; "isSignal": true; }; "nativeIsoValue": { "alias": "nativeIsoValue"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "inputChange": "inputChange"; "iconClick": "iconClick"; "tagRemove": "tagRemove"; "clear": "clear"; }, never, never, true, never>;
6184
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateInputComponent, "tedi-date-input", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "ariaDescribedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "iconActive": { "alias": "iconActive"; "required": false; "isSignal": true; }; "iconDisabled": { "alias": "iconDisabled"; "required": false; "isSignal": true; }; "useNativePicker": { "alias": "useNativePicker"; "required": false; "isSignal": true; }; "nativeIsoValue": { "alias": "nativeIsoValue"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "inputChange": "inputChange"; "iconClick": "iconClick"; "tagRemove": "tagRemove"; "clear": "clear"; }, never, never, true, never>;
5772
6185
  }
5773
6186
 
5774
6187
  /**
@@ -5794,6 +6207,12 @@ interface FormFieldControl<T = unknown> {
5794
6207
  dirty?: Signal<boolean>;
5795
6208
  required?: Signal<boolean>;
5796
6209
  maxLength?: Signal<number | undefined>;
6210
+ /**
6211
+ * Number of characters `tedi-form-field`'s counter should report. Implemented
6212
+ * by controls whose value is not the text the user sees — a rich text editor
6213
+ * holding markup, say. Falls back to the length of `value`.
6214
+ */
6215
+ characterCount?: Signal<number>;
5797
6216
  /**
5798
6217
  * Clears the value. Implemented by controls that can be cleared, and called
5799
6218
  * by `tedi-form-field`'s clear button.
@@ -5851,6 +6270,11 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
5851
6270
  * `<label tedi-label [for]>` to the same value.
5852
6271
  */
5853
6272
  readonly inputId: _angular_core.InputSignal<string>;
6273
+ /**
6274
+ * `name` attribute of the underlying text input, used by native form
6275
+ * submission. Omitted from the DOM when not set.
6276
+ */
6277
+ readonly name: _angular_core.InputSignal<string | undefined>;
5854
6278
  /**
5855
6279
  * The selected value (two-way / `ControlValueAccessor`). Shape follows `mode`:
5856
6280
  * `single` → `Date | null`, `multiple` → `Date[]`, `range` → `{ from, to }`.
@@ -6044,7 +6468,17 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6044
6468
  readonly overlayOpen: _angular_core.WritableSignal<boolean>;
6045
6469
  private readonly openedBy;
6046
6470
  readonly overlayPositions: _angular_core.Signal<ConnectedPosition[]>;
6471
+ /**
6472
+ * `aria-describedby` ids for the inner input — the wrapping form-field's
6473
+ * feedback text, plus any set on `<tedi-date-field>` itself.
6474
+ */
6475
+ readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
6047
6476
  private readonly cvaDisabled;
6477
+ /**
6478
+ * Uncommitted input text, tracked separately so resets clear it even when
6479
+ * `value` is unchanged. Value changes discard it; `null` shows the formatted value.
6480
+ */
6481
+ private readonly typedText;
6048
6482
  private modalRef;
6049
6483
  private scrollListener?;
6050
6484
  private onChange;
@@ -6073,6 +6507,11 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6073
6507
  readonly nativeIsoValue: _angular_core.Signal<string>;
6074
6508
  readonly effectivePlaceholder: _angular_core.Signal<string>;
6075
6509
  readonly displayValue: _angular_core.Signal<string>;
6510
+ /**
6511
+ * What the text input actually shows: uncommitted typed text when there is
6512
+ * any, otherwise the formatted `value`.
6513
+ */
6514
+ readonly inputText: _angular_core.Signal<string>;
6076
6515
  readonly tagsForMultipleMode: _angular_core.Signal<DateInputTag[]>;
6077
6516
  readonly canClear: _angular_core.Signal<boolean>;
6078
6517
  readonly inputIsTrigger: _angular_core.Signal<boolean>;
@@ -6082,6 +6521,7 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6082
6521
  registerOnChange(fn: (value: DateFieldValue) => void): void;
6083
6522
  registerOnTouched(fn: () => void): void;
6084
6523
  setDisabledState(isDisabled: boolean): void;
6524
+ setDescribedBy(ids: string[]): void;
6085
6525
  focus(): void;
6086
6526
  reset(): void;
6087
6527
  handleClear(): void;
@@ -6121,7 +6561,7 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6121
6561
  private toIsoDate;
6122
6562
  private queryNativeInput;
6123
6563
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateFieldComponent, never>;
6124
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateFieldComponent, "tedi-date-field", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledMatchers": { "alias": "disabledMatchers"; "required": false; "isSignal": true; }; "inputDisabled": { "alias": "inputDisabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "disablePast": { "alias": "disablePast"; "required": false; "isSignal": true; }; "disableFuture": { "alias": "disableFuture"; "required": false; "isSignal": true; }; "shouldDisableMonth": { "alias": "shouldDisableMonth"; "required": false; "isSignal": true; }; "shouldDisableYear": { "alias": "shouldDisableYear"; "required": false; "isSignal": true; }; "minYear": { "alias": "minYear"; "required": false; "isSignal": true; }; "maxYear": { "alias": "maxYear"; "required": false; "isSignal": true; }; "availableDays": { "alias": "availableDays"; "required": false; "isSignal": true; }; "unavailableDays": { "alias": "unavailableDays"; "required": false; "isSignal": true; }; "selectionLevel": { "alias": "selectionLevel"; "required": false; "isSignal": true; }; "monthYearSelectType": { "alias": "monthYearSelectType"; "required": false; "isSignal": true; }; "initialMonth": { "alias": "initialMonth"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "showOutsideDays": { "alias": "showOutsideDays"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "numberOfMonths": { "alias": "numberOfMonths"; "required": false; "isSignal": true; }; "enableCalendar": { "alias": "enableCalendar"; "required": false; "isSignal": true; }; "calendarTrigger": { "alias": "calendarTrigger"; "required": false; "isSignal": true; }; "useNativePicker": { "alias": "useNativePicker"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "formatDate": { "alias": "formatDate"; "required": false; "isSignal": true; }; "parseDate": { "alias": "parseDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "openChange": "openChange"; }, never, ["[tediCalendarFooter]"], true, never>;
6564
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateFieldComponent, "tedi-date-field", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledMatchers": { "alias": "disabledMatchers"; "required": false; "isSignal": true; }; "inputDisabled": { "alias": "inputDisabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalidInput": { "alias": "invalid"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "disablePast": { "alias": "disablePast"; "required": false; "isSignal": true; }; "disableFuture": { "alias": "disableFuture"; "required": false; "isSignal": true; }; "shouldDisableMonth": { "alias": "shouldDisableMonth"; "required": false; "isSignal": true; }; "shouldDisableYear": { "alias": "shouldDisableYear"; "required": false; "isSignal": true; }; "minYear": { "alias": "minYear"; "required": false; "isSignal": true; }; "maxYear": { "alias": "maxYear"; "required": false; "isSignal": true; }; "availableDays": { "alias": "availableDays"; "required": false; "isSignal": true; }; "unavailableDays": { "alias": "unavailableDays"; "required": false; "isSignal": true; }; "selectionLevel": { "alias": "selectionLevel"; "required": false; "isSignal": true; }; "monthYearSelectType": { "alias": "monthYearSelectType"; "required": false; "isSignal": true; }; "initialMonth": { "alias": "initialMonth"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "showOutsideDays": { "alias": "showOutsideDays"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "numberOfMonths": { "alias": "numberOfMonths"; "required": false; "isSignal": true; }; "enableCalendar": { "alias": "enableCalendar"; "required": false; "isSignal": true; }; "calendarTrigger": { "alias": "calendarTrigger"; "required": false; "isSignal": true; }; "useNativePicker": { "alias": "useNativePicker"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "formatDate": { "alias": "formatDate"; "required": false; "isSignal": true; }; "parseDate": { "alias": "parseDate"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "openChange": "openChange"; }, never, ["[tediCalendarFooter]"], true, never>;
6125
6565
  }
6126
6566
 
6127
6567
  declare class DatePickerCalendarGridComponent {
@@ -6335,7 +6775,7 @@ declare class FeedbackTextComponent {
6335
6775
  */
6336
6776
  position: _angular_core.InputSignal<FeedbackTextPosition>;
6337
6777
  role: _angular_core.Signal<"alert" | undefined>;
6338
- ariaLive: _angular_core.Signal<"assertive" | "polite">;
6778
+ ariaLive: _angular_core.Signal<"polite" | "assertive">;
6339
6779
  classes: _angular_core.Signal<string>;
6340
6780
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FeedbackTextComponent, never>;
6341
6781
  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 +6996,78 @@ declare class FormFieldComponent implements FieldContext {
6556
6996
  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
6997
  }
6558
6998
 
6999
+ /**
7000
+ * Context passed to a custom suggestion row template.
7001
+ */
7002
+ interface SearchSuggestionContext<T = unknown> {
7003
+ /** The suggestion, so `let-item` works without naming a context key. */
7004
+ $implicit: T;
7005
+ /** The same suggestion under a name, for `let-item="item"`. */
7006
+ item: T;
7007
+ /** Position in the rendered list, matching the row's `aria-activedescendant` id. */
7008
+ index: number;
7009
+ /** Resolved display label, via `bindLabel`. */
7010
+ label: string;
7011
+ /** Resolved secondary line, via `bindDescription`. Empty when unbound. */
7012
+ description: string;
7013
+ /** Whether the row is unselectable, via `bindDisabled`. */
7014
+ disabled: boolean;
7015
+ /** Current trimmed field value, for custom match highlighting. */
7016
+ query: string;
7017
+ }
7018
+ /**
7019
+ * Renders each suggestion row. Without it, rows show the resolved label with the
7020
+ * matched substring bolded.
7021
+ *
7022
+ * @example
7023
+ * ```html
7024
+ * <tedi-search [suggestions]="people" bindLabel="name">
7025
+ * <ng-template tediSearchSuggestion let-item>
7026
+ * <span tedi-text modifiers="bold">{{ item.name }}</span>
7027
+ * <span tedi-text color="tertiary">{{ item.code }}</span>
7028
+ * </ng-template>
7029
+ * </tedi-search>
7030
+ * ```
7031
+ */
7032
+ declare class SearchSuggestionTemplateDirective<T = unknown> {
7033
+ template: TemplateRef<SearchSuggestionContext<T>>;
7034
+ static ngTemplateContextGuard<T>(_dir: SearchSuggestionTemplateDirective<T>, _ctx: unknown): _ctx is SearchSuggestionContext<T>;
7035
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSuggestionTemplateDirective<any>, never>;
7036
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SearchSuggestionTemplateDirective<any>, "[tediSearchSuggestion]", never, {}, {}, never, never, true, never>;
7037
+ }
7038
+ /**
7039
+ * Extra content pinned below the suggestions — fallback actions and a hint, for
7040
+ * example. It shows whenever the panel is open, including the no-results state,
7041
+ * which is what makes it useful for "nothing matched, try this instead".
7042
+ *
7043
+ * Suggestions keep behaving exactly as they do without it: filtering, arrow-key
7044
+ * navigation and Enter to select are unchanged. Tab moves from the field into the
7045
+ * footer's controls.
7046
+ *
7047
+ * @example
7048
+ * ```html
7049
+ * <tedi-search [suggestions]="matches()">
7050
+ * <ng-template tediSearchFooter>
7051
+ * <tedi-search-footer-actions>
7052
+ * <button tedi-button variant="secondary">Isik teadmata</button>
7053
+ * </tedi-search-footer-actions>
7054
+ * </ng-template>
7055
+ * </tedi-search>
7056
+ * ```
7057
+ */
7058
+ declare class SearchFooterTemplateDirective {
7059
+ template: TemplateRef<unknown>;
7060
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchFooterTemplateDirective, never>;
7061
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SearchFooterTemplateDirective, "[tediSearchFooter]", never, {}, {}, never, never, true, never>;
7062
+ }
7063
+
6559
7064
  type SearchSize = InputSize;
7065
+ interface SearchSuggestionView<T = unknown> {
7066
+ item: T;
7067
+ label: string;
7068
+ description: string;
7069
+ disabled: boolean;
7070
+ }
6560
7071
  interface SearchButton {
6561
7072
  /**
6562
7073
  * Visible button text. When omitted, the button is rendered icon-only.
@@ -6578,7 +7089,7 @@ interface SearchButton {
6578
7089
  */
6579
7090
  ariaLabel?: string;
6580
7091
  }
6581
- declare class SearchComponent implements ControlValueAccessor {
7092
+ declare class SearchComponent<T = unknown> implements ControlValueAccessor {
6582
7093
  /**
6583
7094
  * Unique identifier for the input element, used to associate the label.
6584
7095
  */
@@ -6628,6 +7139,62 @@ declare class SearchComponent implements ControlValueAccessor {
6628
7139
  * `placeholder`, then the translated "search" label.
6629
7140
  */
6630
7141
  ariaLabel: _angular_core.InputSignal<string | undefined>;
7142
+ /**
7143
+ * Suggestions to show in the panel, already filtered by the consumer. Bind an
7144
+ * empty array to keep the combobox behaviour while nothing matches; leave it
7145
+ * unbound for a plain search field.
7146
+ */
7147
+ suggestions: _angular_core.InputSignal<T[] | undefined>;
7148
+ /**
7149
+ * Property holding the display label when suggestions are objects.
7150
+ * @default "label"
7151
+ */
7152
+ bindLabel: _angular_core.InputSignal<string>;
7153
+ /**
7154
+ * Property holding a secondary line shown under the label. Unset by default,
7155
+ * so rows are a single line unless asked for.
7156
+ */
7157
+ bindDescription: _angular_core.InputSignal<string | undefined>;
7158
+ /**
7159
+ * Property marking a suggestion as unselectable. Disabled rows are greyed out
7160
+ * and skipped by keyboard navigation.
7161
+ * @default "disabled"
7162
+ */
7163
+ bindDisabled: _angular_core.InputSignal<string>;
7164
+ /**
7165
+ * Characters required before the panel opens. Below it nothing is shown, not
7166
+ * even the no-results row, so short queries stay quiet.
7167
+ * @default 0
7168
+ */
7169
+ minQueryLength: _angular_core.InputSignalWithTransform<number, unknown>;
7170
+ /**
7171
+ * Shows a loading row instead of results.
7172
+ * @default false
7173
+ */
7174
+ loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
7175
+ /**
7176
+ * Closes the suggestion panel when the page (or a scrollable ancestor)
7177
+ * scrolls. Scrolling the option list itself keeps the panel open.
7178
+ * @default false
7179
+ */
7180
+ hideOnScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
7181
+ /**
7182
+ * Whether the suggestion panel is open.
7183
+ * @default false
7184
+ */
7185
+ panelOpen: _angular_core.ModelSignal<boolean>;
7186
+ /**
7187
+ * Overrides the translated "no results" row.
7188
+ */
7189
+ noResultsText: _angular_core.InputSignal<string | undefined>;
7190
+ /**
7191
+ * Overrides the translated loading row.
7192
+ */
7193
+ loadingText: _angular_core.InputSignal<string | undefined>;
7194
+ /**
7195
+ * Overrides the translated screen-reader result count.
7196
+ */
7197
+ resultsCountText: _angular_core.InputSignal<((count: number) => string) | undefined>;
6631
7198
  /**
6632
7199
  * Emitted when the search is executed (Enter key or button click).
6633
7200
  */
@@ -6636,11 +7203,41 @@ declare class SearchComponent implements ControlValueAccessor {
6636
7203
  * Emitted when the clear button is clicked.
6637
7204
  */
6638
7205
  readonly clear: _angular_core.OutputEmitterRef<void>;
7206
+ /**
7207
+ * Emitted when a suggestion is accepted. The field is filled with its label.
7208
+ */
7209
+ readonly suggestionSelect: _angular_core.OutputEmitterRef<T>;
7210
+ readonly suggestionTemplate: _angular_core.Signal<SearchSuggestionTemplateDirective<any> | undefined>;
7211
+ readonly footerTemplate: _angular_core.Signal<SearchFooterTemplateDirective | undefined>;
6639
7212
  private readonly inputRef;
7213
+ private readonly overlayOrigin;
7214
+ private readonly connectedOverlay;
7215
+ private readonly suggestionRows;
6640
7216
  private readonly formDisabled;
7217
+ private readonly hostElement;
6641
7218
  private readonly translationService;
7219
+ private readonly renderer;
7220
+ private readonly document;
7221
+ private readonly injector;
7222
+ private scrollListener?;
6642
7223
  private onChange;
6643
7224
  private onTouched;
7225
+ /** Suppresses the focus-driven reopen after a selection, until the next edit. */
7226
+ private justSelected;
7227
+ /**
7228
+ * Navigation is driven from `event.key` via the explicit `set*ItemActive`
7229
+ * methods rather than `keyManager.onKeydown`, which switches on the deprecated
7230
+ * `event.keyCode` and so ignores synthesised events.
7231
+ */
7232
+ private readonly keyManager;
7233
+ private readonly activeIndex;
7234
+ readonly overlayPositions: ConnectedPosition[];
7235
+ readonly panelWidth: _angular_core.WritableSignal<number>;
7236
+ /**
7237
+ * True while the panel sits above the field on the fallback position, so the
7238
+ * rounded edge can move to the side that is not joined to the field.
7239
+ */
7240
+ readonly panelAbove: _angular_core.WritableSignal<boolean>;
6644
7241
  readonly isDisabled: _angular_core.Signal<boolean>;
6645
7242
  readonly fieldIcon: _angular_core.Signal<string | FormFieldIcon | undefined>;
6646
7243
  readonly fieldHeight: _angular_core.Signal<"var(--form-field-height-sm)" | "var(--form-field-height-lg)" | "var(--form-field-height)">;
@@ -6655,19 +7252,121 @@ declare class SearchComponent implements ControlValueAccessor {
6655
7252
  * otherwise `aria-label` would silently override the visible text.
6656
7253
  */
6657
7254
  readonly inputAriaLabel: _angular_core.Signal<string | null>;
7255
+ /**
7256
+ * Derived from capability, never from current content — an empty
7257
+ * `suggestions` array still means the consumer opted into the combobox.
7258
+ */
7259
+ readonly autocomplete: _angular_core.Signal<boolean>;
7260
+ readonly resolvedSuggestions: _angular_core.Signal<SearchSuggestionView<T>[]>;
7261
+ readonly query: _angular_core.Signal<string>;
7262
+ readonly hasSuggestions: _angular_core.Signal<boolean>;
7263
+ readonly listboxId: _angular_core.Signal<string>;
7264
+ readonly meetsMinQueryLength: _angular_core.Signal<boolean>;
7265
+ readonly panelVisible: _angular_core.Signal<boolean>;
7266
+ readonly inputRole: _angular_core.Signal<"combobox" | "searchbox">;
7267
+ readonly ariaAutocomplete: _angular_core.Signal<"list" | null>;
7268
+ readonly ariaExpanded: _angular_core.Signal<boolean | null>;
7269
+ readonly ariaControls: _angular_core.Signal<string | null>;
7270
+ readonly activeOptionId: _angular_core.Signal<string | null>;
7271
+ readonly resolvedNoResultsText: _angular_core.Signal<string>;
7272
+ readonly resolvedLoadingText: _angular_core.Signal<string>;
7273
+ readonly announcement: _angular_core.Signal<string>;
7274
+ constructor();
7275
+ optionId(index: number): string;
6658
7276
  onInputValue(value: string): void;
6659
7277
  onClear(): void;
6660
7278
  onBlur(): void;
7279
+ onInputFocus(): void;
7280
+ openPanel(): void;
7281
+ closePanel(): void;
7282
+ onPositionChange(change: ConnectedOverlayPositionChange): void;
7283
+ onOverlayAttach(): void;
7284
+ onOverlayDetach(): void;
7285
+ /**
7286
+ * Listens on the document in the capture phase so scrolls in any ancestor are
7287
+ * seen — a scroll event does not bubble past the element that scrolled.
7288
+ */
7289
+ private setupScrollListener;
7290
+ private cleanupScrollListener;
7291
+ /** Closes the panel and hands focus back to the input. */
7292
+ closeAndRestoreFocus(): void;
7293
+ onKeydown(event: KeyboardEvent): void;
7294
+ /**
7295
+ * Footer controls live in the overlay, which sits at the end of the document,
7296
+ * so they are not next in tab order. Tab reaches them explicitly; without this
7297
+ * they would be mouse-only.
7298
+ */
7299
+ private onTabFromInput;
7300
+ /**
7301
+ * Tabbing past the footer leaves the component: close the panel and continue to
7302
+ * whatever follows the field in document order, so the footer is not a trap.
7303
+ */
7304
+ onFooterKeydown(event: KeyboardEvent): void;
7305
+ private footerFocusables;
7306
+ private focusAfterField;
7307
+ selectSuggestion(suggestion: SearchSuggestionView<T>): void;
7308
+ /**
7309
+ * The panel is portalled into the overlay container, so it is not a descendant
7310
+ * of the host — both roots have to be consulted before deciding focus left.
7311
+ */
7312
+ onFocusOut(event: FocusEvent): void;
6661
7313
  emitSearch(): void;
6662
7314
  focus(): void;
6663
7315
  writeValue(value: string | null): void;
6664
7316
  registerOnChange(fn: (value: string) => void): void;
6665
7317
  registerOnTouched(fn: () => void): void;
6666
7318
  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>;
7319
+ private onArrowKey;
7320
+ private onEnter;
7321
+ private panelElement;
7322
+ private resetActiveOption;
7323
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent<any>, never>;
7324
+ 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>;
7325
+ }
7326
+
7327
+ declare class SearchSuggestionComponent implements Highlightable {
7328
+ /** Resolved display label. */
7329
+ readonly label: _angular_core.InputSignal<string>;
7330
+ /** Secondary line under the label. */
7331
+ readonly description: _angular_core.InputSignal<string>;
7332
+ /** Current field value, used to bold the matching segment. */
7333
+ readonly query: _angular_core.InputSignal<string>;
7334
+ /** Whether a custom suggestion template supplies the row content. */
7335
+ readonly custom: _angular_core.InputSignalWithTransform<boolean, unknown>;
7336
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
7337
+ readonly host: ElementRef<HTMLLIElement>;
7338
+ private readonly active;
7339
+ readonly isActive: _angular_core.Signal<boolean>;
7340
+ readonly parts: _angular_core.Signal<_tedi_design_system_angular_tedi.SearchHighlightPart[]>;
7341
+ /**
7342
+ * `Highlightable` requires a plain boolean, so the signal input is aliased and
7343
+ * this getter satisfies the CDK contract — a signal would always read truthy.
7344
+ */
7345
+ get disabled(): boolean;
7346
+ setActiveStyles(): void;
7347
+ setInactiveStyles(): void;
7348
+ getLabel(): string;
7349
+ scrollIntoView(): void;
7350
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSuggestionComponent, never>;
7351
+ 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
7352
  }
6670
7353
 
7354
+ /**
7355
+ * Row of buttons inside a `tediSearchFooter`. Centres them and wraps to a new
7356
+ * line when they no longer fit side by side.
7357
+ */
7358
+ declare class SearchFooterActionsComponent {
7359
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchFooterActionsComponent, never>;
7360
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchFooterActionsComponent, "tedi-search-footer-actions", never, {}, {}, never, ["*"], true, never>;
7361
+ }
7362
+
7363
+ interface SearchHighlightPart {
7364
+ text: string;
7365
+ match: boolean;
7366
+ }
7367
+ /** Splits `text` so the segment matching `query` can be emphasised. */
7368
+ declare function highlightParts(text: string, query: string): SearchHighlightPart[];
7369
+
6671
7370
  /**
6672
7371
  * Context provided to custom option templates.
6673
7372
  */
@@ -6785,6 +7484,11 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6785
7484
  * Used for label association and accessibility.
6786
7485
  */
6787
7486
  inputId: _angular_core.InputSignal<string>;
7487
+ /**
7488
+ * Name the selection is submitted under in a native form, one entry per
7489
+ * selected value. With object options, set `bindValue` to pick what is sent.
7490
+ */
7491
+ name: _angular_core.InputSignal<string | undefined>;
6788
7492
  /**
6789
7493
  * Label text displayed above the select.
6790
7494
  */
@@ -6864,6 +7568,12 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6864
7568
  * When undefined, the entire object is used as the value.
6865
7569
  */
6866
7570
  bindValue: _angular_core.InputSignal<string | undefined>;
7571
+ /**
7572
+ * Selected value, for use without a form directive. An array in multi-select
7573
+ * mode, the bare value otherwise. Unlike `[ngModel]` it applies on the first
7574
+ * render rather than a frame later. Do not combine with a form directive.
7575
+ */
7576
+ value: _angular_core.InputSignal<unknown>;
6867
7577
  /**
6868
7578
  * Whether multiple items can be selected.
6869
7579
  * @default false
@@ -7027,6 +7737,7 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7027
7737
  /** `aria-label` is only used when no labelledby reference is available. */
7028
7738
  resolvedAriaLabel: _angular_core.Signal<string | null>;
7029
7739
  isOpen: _angular_core.WritableSignal<boolean>;
7740
+ /** `allowMultiple` untracked, so flipping the mode cannot wipe the selection. */
7030
7741
  selectedValues: _angular_core.WritableSignal<unknown[]>;
7031
7742
  disabled: _angular_core.WritableSignal<boolean>;
7032
7743
  dropdownWidth: _angular_core.WritableSignal<number | null>;
@@ -7040,6 +7751,14 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7040
7751
  measuredRowHeight: _angular_core.WritableSignal<number | null>;
7041
7752
  private static readonly DEFAULT_ROW_HEIGHT;
7042
7753
  private static readonly SMALL_ROW_HEIGHT;
7754
+ /**
7755
+ * Values written to the hidden form inputs — one entry per selected value,
7756
+ * and a single empty entry when nothing is selected, so the field is still
7757
+ * submitted.
7758
+ */
7759
+ readonly formValues: _angular_core.Signal<string[]>;
7760
+ readonly isInvalid: _angular_core.Signal<boolean>;
7761
+ readonly feedbackId: _angular_core.Signal<string | null>;
7043
7762
  hiddenTagsCount: _angular_core.Signal<number>;
7044
7763
  /**
7045
7764
  * Whether the default identity comparator is in use. When true, selection and
@@ -7180,12 +7899,13 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7180
7899
  private toggleGroupSelection;
7181
7900
  onChange: (value: unknown) => void;
7182
7901
  onTouched: () => void;
7902
+ private toSelection;
7183
7903
  writeValue(value: unknown): void;
7184
7904
  registerOnChange(fn: (value: unknown) => void): void;
7185
7905
  registerOnTouched(fn: () => void): void;
7186
7906
  setDisabledState(isDisabled: boolean): void;
7187
7907
  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>;
7908
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "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
7909
  }
7190
7910
 
7191
7911
  type SliderHideLabel = boolean | "keep-space";
@@ -7389,6 +8109,27 @@ declare class FormFieldExtraDirective {
7389
8109
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FormFieldExtraDirective, "[tediFormFieldExtra]", never, {}, {}, never, never, true, never>;
7390
8110
  }
7391
8111
 
8112
+ interface DerivedControlState {
8113
+ invalid: Signal<boolean>;
8114
+ touched: Signal<boolean>;
8115
+ dirty: Signal<boolean>;
8116
+ /** Whether the bound control carries `Validators.required`. */
8117
+ required: Signal<boolean>;
8118
+ /**
8119
+ * Call from `ngOnInit`: a control that is its own `NG_VALUE_ACCESSOR` cannot
8120
+ * inject `NgControl` in the constructor, because the accessor is what
8121
+ * `NgControl` depends on.
8122
+ */
8123
+ connect(): void;
8124
+ }
8125
+ declare function deriveControlState(): DerivedControlState;
8126
+
8127
+ interface ControlDescribedBy {
8128
+ attribute: Signal<string | null>;
8129
+ set(ids: string[]): void;
8130
+ }
8131
+ declare function controlDescribedBy(): ControlDescribedBy;
8132
+
7392
8133
  /**
7393
8134
  * Shared behavior for the prefix/suffix addon directives: reads the group's
7394
8135
  * disabled state and detects whether the addon holds plain text (so the
@@ -7469,11 +8210,6 @@ declare class InputGroupComponent implements InputGroupContext {
7469
8210
  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
8211
  }
7471
8212
 
7472
- interface ControlDescribedBy {
7473
- attribute: Signal<string | null>;
7474
- set(ids: string[]): void;
7475
- }
7476
-
7477
8213
  declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFieldControl {
7478
8214
  private el;
7479
8215
  private readonly fieldContext;
@@ -7507,7 +8243,7 @@ declare class TextFieldComponent implements OnInit, ControlValueAccessor, FormFi
7507
8243
  readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
7508
8244
  readonly disabled: _angular_core.Signal<boolean>;
7509
8245
  private readonly derived;
7510
- readonly describedBy: ControlDescribedBy;
8246
+ readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
7511
8247
  readonly touched: _angular_core.Signal<boolean>;
7512
8248
  readonly dirty: _angular_core.Signal<boolean>;
7513
8249
  readonly invalid: _angular_core.Signal<boolean>;
@@ -7615,7 +8351,7 @@ declare class TextareaComponent implements OnInit, ControlValueAccessor, FormFie
7615
8351
  readonly maxHeightStyle: _angular_core.Signal<string>;
7616
8352
  readonly disabled: _angular_core.Signal<boolean>;
7617
8353
  private readonly derived;
7618
- readonly describedBy: ControlDescribedBy;
8354
+ readonly describedBy: _tedi_design_system_angular_tedi.ControlDescribedBy;
7619
8355
  readonly touched: _angular_core.Signal<boolean>;
7620
8356
  readonly dirty: _angular_core.Signal<boolean>;
7621
8357
  readonly invalid: _angular_core.Signal<boolean>;
@@ -7760,9 +8496,18 @@ interface ModalConfig<D = unknown> {
7760
8496
  fullscreen?: ModalFullscreen;
7761
8497
  /** Max-width cap (e.g. '75%', '60vw'). Overrides the default 95vw limit. */
7762
8498
  maxWidth?: string;
7763
- /** ARIA label for the dialog. */
8499
+ /**
8500
+ * Accessible name for the dialog. Set this only when the modal has no
8501
+ * visible heading, or when the heading is not the name you want announced:
8502
+ * a modal whose content renders a heading inside `<tedi-modal-header>` is
8503
+ * labelled by that heading automatically.
8504
+ */
7764
8505
  ariaLabel?: string;
7765
- /** ID of the element that labels the dialog. */
8506
+ /**
8507
+ * Id of the element that labels the dialog, for a label that lives outside
8508
+ * `<tedi-modal-header>`. Ignored when `ariaLabel` is set, and takes
8509
+ * precedence over the automatic heading lookup.
8510
+ */
7766
8511
  ariaLabelledBy?: string;
7767
8512
  }
7768
8513
  /** Injection token for data passed to a modal opened via ModalService. */
@@ -8731,7 +9476,7 @@ declare class HeaderMobileButtonComponent {
8731
9476
  * is confusing to assistive tech — if a popup is involved, omit `href`
8732
9477
  * so the component renders as a button.
8733
9478
  */
8734
- ariaHasPopup: _angular_core.InputSignal<"menu" | "listbox" | "dialog" | "true" | "grid" | "false" | "tree" | undefined>;
9479
+ ariaHasPopup: _angular_core.InputSignal<"menu" | "listbox" | "dialog" | "true" | "false" | "grid" | "tree" | undefined>;
8735
9480
  /**
8736
9481
  * Forwarded to the inner `<button>` as `aria-expanded`. Pair with
8737
9482
  * `ariaHasPopup` when this button toggles a dialog/menu open.
@@ -9262,6 +10007,94 @@ declare class SideNavToggleComponent {
9262
10007
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SideNavToggleComponent, "button[tedi-sidenav-toggle]", never, {}, {}, never, never, true, never>;
9263
10008
  }
9264
10009
 
10010
+ declare class SkeletonComponent implements OnInit, OnDestroy {
10011
+ private readonly liveAnnouncer;
10012
+ private readonly translationService;
10013
+ private readonly isBrowser;
10014
+ /**
10015
+ * Announced by the skeleton's `role="status"` live region once the skeleton
10016
+ * has been on screen for `labelDelay`. Say what is loading: "Loading search
10017
+ * results" carries more than the generic fallback.
10018
+ * @default the translated `skeleton.loading` label
10019
+ */
10020
+ label: _angular_core.InputSignal<string | undefined>;
10021
+ /**
10022
+ * Announced when the skeleton is removed. The skeleton's own live region goes
10023
+ * with it, so this one goes through a page-level announcer. Only announced if
10024
+ * `label` was announced first, so content that arrives faster than
10025
+ * `labelDelay` stays silent.
10026
+ * @default the translated `skeleton.loading-completed` label
10027
+ */
10028
+ completedLabel: _angular_core.InputSignal<string | undefined>;
10029
+ /**
10030
+ * Delay in ms before `label` is announced, so brief loads do not interrupt
10031
+ * the screen reader.
10032
+ * @default 200
10033
+ */
10034
+ labelDelay: _angular_core.InputSignal<number>;
10035
+ /**
10036
+ * Text of the `role="status"` live region. Empty until `labelDelay` has
10037
+ * passed, so the region is in the DOM before it gains text: screen readers
10038
+ * only announce a live region they were already tracking.
10039
+ */
10040
+ protected readonly announcement: _angular_core.WritableSignal<string>;
10041
+ private announceTimer?;
10042
+ ngOnInit(): void;
10043
+ ngOnDestroy(): void;
10044
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonComponent, never>;
10045
+ 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>;
10046
+ }
10047
+
10048
+ type SkeletonBlockWidth = number | `${number}` | "auto" | `${number}px`;
10049
+ type SkeletonBlockTextHeight = "p" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
10050
+ type SkeletonBlockHeight = SkeletonBlockTextHeight | number | `${number}`;
10051
+ /**
10052
+ * The subset of inputs that can be overridden per breakpoint via the
10053
+ * `xs`–`xxl` inputs. Every field is optional; only the ones you set override
10054
+ * the base value at that breakpoint.
10055
+ */
10056
+ type SkeletonBlockInputs = {
10057
+ /** Overrides {@link SkeletonBlockComponent.width}. */
10058
+ width?: SkeletonBlockWidth;
10059
+ /** Overrides {@link SkeletonBlockComponent.height}. */
10060
+ height?: SkeletonBlockHeight;
10061
+ };
10062
+ declare class SkeletonBlockComponent {
10063
+ /**
10064
+ * Width of the block. A number is a percentage of the container, a `px`
10065
+ * string is an absolute width, and `auto` fills the container.
10066
+ * @default auto
10067
+ */
10068
+ width: _angular_core.InputSignal<SkeletonBlockWidth>;
10069
+ /**
10070
+ * Height of the block. A text style (`p`, `h1`–`h6`) takes the line height of
10071
+ * the text the block stands in for and follows it across breakpoints, so the
10072
+ * real content drops in without shifting the layout. Pass a number instead
10073
+ * for a height in px, for blocks that stand in for something other than text.
10074
+ * @default p
10075
+ */
10076
+ height: _angular_core.InputSignal<SkeletonBlockHeight>;
10077
+ /** Overrides applied from the `xs` breakpoint (≥ 0px) and up. */
10078
+ xs: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
10079
+ /** Overrides applied from the `sm` breakpoint (≥ 576px) and up. */
10080
+ sm: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
10081
+ /** Overrides applied from the `md` breakpoint (≥ 768px) and up. */
10082
+ md: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
10083
+ /** Overrides applied from the `lg` breakpoint (≥ 992px) and up. */
10084
+ lg: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
10085
+ /** Overrides applied from the `xl` breakpoint (≥ 1200px) and up. */
10086
+ xl: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
10087
+ /** Overrides applied from the `xxl` breakpoint (≥ 1400px) and up. */
10088
+ xxl: _angular_core.InputSignal<SkeletonBlockInputs | undefined>;
10089
+ private readonly breakpointService;
10090
+ protected currentProps: _angular_core.Signal<SkeletonBlockInputs>;
10091
+ protected classes: _angular_core.Signal<string>;
10092
+ protected resolvedWidth: _angular_core.Signal<string | null>;
10093
+ protected resolvedHeight: _angular_core.Signal<string | null>;
10094
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonBlockComponent, never>;
10095
+ 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>;
10096
+ }
10097
+
9265
10098
  type SpinnerSize = 10 | 16 | 48;
9266
10099
  type SpinnerColor = "primary" | "secondary";
9267
10100
  declare class SpinnerComponent {
@@ -9337,9 +10170,19 @@ type RenderToken = {
9337
10170
  * the current page — add `aria-current="page"` to it yourself.
9338
10171
  *
9339
10172
  * Crumb links are underlined by default. Set `[underline]="false"` on the
9340
- * `tedi-link` for non-underlined crumbs — recommended for the `short` back-link.
9341
- * Crumbs collapsed into the ellipsis dropdown are always rendered without an
9342
- * underline, regardless of their `[underline]` setting.
10173
+ * `tedi-link` for non-underlined crumbs, which is recommended for the `short`
10174
+ * back-link. A collapsed crumb keeps its own `[underline]` setting, so it looks
10175
+ * the same in the ellipsis dropdown as it does in the trail. To restyle the
10176
+ * collapsed rows, target `.tedi-breadcrumbs__dropdown-item`, which travels with
10177
+ * them into the overlay.
10178
+ *
10179
+ * The ellipsis dropdown is a plain list (`dropdownRole="list"`), not a menu, so
10180
+ * the collapsed crumbs stay links: screen readers announce them as links and
10181
+ * each one is its own tab stop. Its panel renders inside the crumb it belongs
10182
+ * to, so the collapsed crumbs come between the ellipsis button and the next
10183
+ * crumb both in the tab order and for a screen reader that swipes through the
10184
+ * DOM. Opening it moves focus to the first collapsed crumb; Escape closes it
10185
+ * and returns focus to the button.
9343
10186
  */
9344
10187
  declare class BreadcrumbsComponent implements BreakpointInputs<BreadcrumbsInputs> {
9345
10188
  private readonly breakpointService;
@@ -9480,6 +10323,252 @@ interface UsePaginationArgs {
9480
10323
  */
9481
10324
  declare function usePagination({ page, pageCount, boundaryCount, siblingCount, }: UsePaginationArgs): PaginationItem[];
9482
10325
 
10326
+ type TableOfContentsVariant = "default" | "transparent";
10327
+ type TableOfContentsHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
10328
+ /**
10329
+ * A navigation aid that lists the sections of a page and highlights the one the
10330
+ * reader is on. Compose it from `tedi-table-of-contents-item` elements; nest
10331
+ * items to build a two-level hierarchy.
10332
+ *
10333
+ * The active item is controlled via `activeId`: it gets the accent bar and active link colour.
10334
+ *
10335
+ * When `sticky` is enabled the container pins while the page scrolls. Two knobs
10336
+ * adapt it to the surrounding layout: `stickyOffset` moves where it pins (raise
10337
+ * it to clear a fixed header), and `stickyMaxHeight` overrides the height cap
10338
+ * for when the TOC scrolls inside a fixed-height container rather than the window.
10339
+ *
10340
+ * The gap the sticky TOC leaves above the viewport bottom has no input — override
10341
+ * the `--tedi-table-of-contents-sticky-bottom` CSS custom property (default
10342
+ * `1.5rem`) from any ancestor when you need to clear a fixed footer.
10343
+ */
10344
+ declare class TableOfContentsComponent {
10345
+ /**
10346
+ * Heading rendered above the list. Defaults to the localised "Table of
10347
+ * contents" label; pass `null` (or an empty string) to render it headless —
10348
+ * the navigation keeps an accessible name via `aria-label`.
10349
+ */
10350
+ readonly heading: _angular_core.InputSignal<string | null | undefined>;
10351
+ /**
10352
+ * Semantic level of the heading element (`h1`–`h6`). The visual style stays
10353
+ * h4 regardless; set this to match the surrounding page's heading outline
10354
+ * (e.g. `h2` when the TOC follows only a page `h1`).
10355
+ */
10356
+ readonly headingLevel: _angular_core.InputSignal<TableOfContentsHeadingLevel>;
10357
+ /**
10358
+ * Visual variant:
10359
+ * - `default` — rendered inside a bordered card.
10360
+ * - `transparent` — no card chrome; the list sits on the page with a
10361
+ * continuous grey left rail.
10362
+ */
10363
+ readonly variant: _angular_core.InputSignal<TableOfContentsVariant>;
10364
+ /**
10365
+ * Draws a divider under each item except the last — sub-items included — so the
10366
+ * list reads as a set of separated rows.
10367
+ * @default false
10368
+ */
10369
+ readonly bordered: _angular_core.InputSignal<boolean>;
10370
+ /** Id of the currently active item. */
10371
+ readonly activeId: _angular_core.InputSignal<string | undefined>;
10372
+ /**
10373
+ * Keep the active item visible inside the TOC's own scroll area. When the list
10374
+ * is taller than a bounded or sticky container and `activeId` changes, the TOC
10375
+ * scrolls its internal scroll region just enough to reveal the active item.
10376
+ * No-op when the list isn't scrollable (short lists, unbounded layouts).
10377
+ * @default false
10378
+ */
10379
+ readonly scrollActiveIntoView: _angular_core.InputSignal<boolean>;
10380
+ /**
10381
+ * Whether nested items are expanded by default. When `true` (default) the full
10382
+ * outline is always visible. When `false`, a branch reveals its sub-items only
10383
+ * while it is on the active trail (the active item or one of its ancestors).
10384
+ * @default true
10385
+ */
10386
+ readonly defaultOpen: _angular_core.InputSignal<boolean>;
10387
+ /** Show auto-generated hierarchical numbers (`1.`, `2.`, `2.1`, …). */
10388
+ readonly numbered: _angular_core.InputSignal<boolean>;
10389
+ /** Stick the container to the viewport while scrolling. */
10390
+ readonly sticky: _angular_core.InputSignal<boolean>;
10391
+ /**
10392
+ * Distance from the top of the scroll container at which the sticky TOC pins,
10393
+ * as any CSS length or expression. Raise it to clear a fixed header — e.g.
10394
+ * `"calc(var(--layout-header-height) + 1.5rem)"`. Drives both `top` and the
10395
+ * default `max-height`. Only applies while `sticky` is `true`.
10396
+ * @default "1.5rem"
10397
+ */
10398
+ readonly stickyOffset: _angular_core.InputSignal<string | undefined>;
10399
+ /**
10400
+ * Overrides the sticky height cap. The default keeps the TOC within the
10401
+ * viewport (`calc(100dvh - offset - 1.5rem)`); set this when the TOC scrolls
10402
+ * inside a fixed-height container rather than the window — e.g.
10403
+ * `"calc(30rem - 3rem)"` for a 30rem scroll region. Only applies while
10404
+ * `sticky` is `true`.
10405
+ */
10406
+ readonly stickyMaxHeight: _angular_core.InputSignal<string | undefined>;
10407
+ /**
10408
+ * Accessible name for the navigation landmark. Overrides the default, which is
10409
+ * the heading (via `aria-labelledby`) or the localised title when headless.
10410
+ * Useful to disambiguate multiple tables of contents on one page.
10411
+ */
10412
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
10413
+ private readonly translations;
10414
+ private readonly host;
10415
+ private readonly platformId;
10416
+ constructor();
10417
+ /** Top-level items, used by items to compute their hierarchical numbers. */
10418
+ readonly items: _angular_core.Signal<readonly any[]>;
10419
+ private readonly titleLabel;
10420
+ readonly resolvedHeading: _angular_core.Signal<string | null>;
10421
+ readonly navLabel: _angular_core.Signal<string>;
10422
+ readonly headingId: string;
10423
+ /** Scroll the TOC's own scroll region so the active item's row is visible. */
10424
+ private revealActiveItem;
10425
+ /** Nearest scrollable ancestor within this component (e.g. the sticky `nav`). */
10426
+ private findScrollParent;
10427
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsComponent, never>;
10428
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableOfContentsComponent, "tedi-table-of-contents", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "headingLevel": { "alias": "headingLevel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "scrollActiveIntoView": { "alias": "scrollActiveIntoView"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "numbered": { "alias": "numbered"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "stickyOffset": { "alias": "stickyOffset"; "required": false; "isSignal": true; }; "stickyMaxHeight": { "alias": "stickyMaxHeight"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, ["items"], ["tedi-table-of-contents-item"], true, never>;
10429
+ }
10430
+
10431
+ /**
10432
+ * A single entry in a `tedi-table-of-contents`. Its non-item content (a
10433
+ * `tedi-link`, anchor or button) is the clickable label; nested
10434
+ * `tedi-table-of-contents-item` children become this item's sub-items and are
10435
+ * only revealed when the item is on the active branch.
10436
+ */
10437
+ declare class TableOfContentsItemComponent {
10438
+ /**
10439
+ * Unique id. Required to mark the item active (via the parent's `activeId`)
10440
+ * and to be the parent of nested items. Named `itemId` to avoid
10441
+ * shadowing the native `id` attribute.
10442
+ */
10443
+ readonly itemId: _angular_core.InputSignal<string | undefined>;
10444
+ /** Render a separator below the item. */
10445
+ readonly separator: _angular_core.InputSignal<boolean>;
10446
+ private readonly root;
10447
+ private readonly parent;
10448
+ /** Direct nested items (a single level down). */
10449
+ readonly childItems: Signal<readonly TableOfContentsItemComponent[]>;
10450
+ readonly numbered: Signal<boolean>;
10451
+ readonly depth: Signal<number>;
10452
+ /** CSS indent level — capped at 2, matching the design's two-level hierarchy. */
10453
+ readonly level: Signal<number>;
10454
+ readonly hasChildren: Signal<boolean>;
10455
+ readonly isSelected: Signal<boolean>;
10456
+ /** Whether the active item is this item or somewhere in its subtree. */
10457
+ readonly containsActive: Signal<boolean>;
10458
+ /**
10459
+ * Whether this item's nested group is expanded: always when the TOC is
10460
+ * `defaultOpen`, otherwise only along the branch leading to the active item.
10461
+ */
10462
+ readonly isOpen: Signal<boolean>;
10463
+ private readonly siblings;
10464
+ private readonly index;
10465
+ private readonly numberPrefix;
10466
+ /** Hierarchical number base without trailing dot, e.g. `2` or `2.1`. */
10467
+ readonly numberBase: Signal<string>;
10468
+ /** Rendered number — `1.` at the top level, `1.1` when nested. */
10469
+ readonly numberLabel: Signal<string>;
10470
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsItemComponent, never>;
10471
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableOfContentsItemComponent, "tedi-table-of-contents-item", never, { "itemId": { "alias": "itemId"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, {}, ["childItems"], ["*", "[tediTocItemSuffix]", "tedi-table-of-contents-item"], true, never>;
10472
+ }
10473
+
10474
+ /**
10475
+ * Marks projected content as the trailing suffix of a
10476
+ * `tedi-table-of-contents-item`. The item renders it right-aligned at the end of
10477
+ * the row — e.g. a `tedi-tag`.
10478
+ */
10479
+ declare class TableOfContentsItemSuffixDirective {
10480
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsItemSuffixDirective, never>;
10481
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableOfContentsItemSuffixDirective, "[tediTocItemSuffix]", never, {}, {}, never, never, true, never>;
10482
+ }
10483
+
10484
+ /**
10485
+ * Mobile variant of `tedi-table-of-contents`: a bottom bar that opens the list
10486
+ * in a bottom-sheet overlay. Takes the same `tedi-table-of-contents-item`
10487
+ * children as the desktop card; render it on small viewports.
10488
+ *
10489
+ * It provides itself as `TableOfContentsComponent` so the projected items
10490
+ * resolve their context (`activeId`, `numbered`, `items`) exactly as they do
10491
+ * inside the desktop component.
10492
+ */
10493
+ declare class TableOfContentsCollapsibleComponent implements OnDestroy {
10494
+ /**
10495
+ * Heading shown on the bar and sheet. Defaults to the localised "Table of
10496
+ * contents" label.
10497
+ */
10498
+ readonly heading: _angular_core.InputSignal<string | null | undefined>;
10499
+ /** Id of the currently active item. */
10500
+ readonly activeId: _angular_core.InputSignal<string | undefined>;
10501
+ /**
10502
+ * Whether nested items are expanded by default. When `false`, a branch reveals
10503
+ * its sub-items only while it is on the active trail. Mirrors
10504
+ * `tedi-table-of-contents` so projected items resolve it via the shared root.
10505
+ * @default true
10506
+ */
10507
+ readonly defaultOpen: _angular_core.InputSignal<boolean>;
10508
+ /** Show auto-generated hierarchical numbers (`1.`, `2.`, `2.1`, …). */
10509
+ readonly numbered: _angular_core.InputSignal<boolean>;
10510
+ /**
10511
+ * Draws a divider under each item except the last — sub-items included — so the
10512
+ * sheet's list reads as a set of separated rows. Mirrors `tedi-table-of-contents`.
10513
+ * @default false
10514
+ */
10515
+ readonly bordered: _angular_core.InputSignal<boolean>;
10516
+ /**
10517
+ * Pin the bar to the bottom of the viewport. Set `false` to render it inline.
10518
+ */
10519
+ readonly sticky: _angular_core.InputSignal<boolean>;
10520
+ /**
10521
+ * Hide the bar while the user scrolls down and reveal it when they scroll up,
10522
+ * keeping the reading area clear. Watches window scroll by default; set
10523
+ * `scrollContainer` to watch a scrollable element instead.
10524
+ * @default false
10525
+ */
10526
+ readonly hideOnScroll: _angular_core.InputSignal<boolean>;
10527
+ /**
10528
+ * Element whose scroll drives `hideOnScroll`. Defaults to the window; set it to
10529
+ * the scrollable container when the content scrolls inside a region rather than
10530
+ * the whole page.
10531
+ */
10532
+ readonly scrollContainer: _angular_core.InputSignal<HTMLElement | undefined>;
10533
+ /**
10534
+ * Accessible name for the sheet's navigation landmark and dialog. Defaults to
10535
+ * the visible title.
10536
+ */
10537
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
10538
+ /** Top-level items, read by items to compute their hierarchical numbers. */
10539
+ readonly items: _angular_core.Signal<readonly any[]>;
10540
+ private readonly dialog;
10541
+ private readonly overlay;
10542
+ private readonly translations;
10543
+ private readonly platformId;
10544
+ private readonly zone;
10545
+ private readonly sheet;
10546
+ private dialogRef?;
10547
+ readonly open: _angular_core.WritableSignal<boolean>;
10548
+ /** True while the sticky bar is hidden by a scroll-down gesture. */
10549
+ readonly barHidden: _angular_core.WritableSignal<boolean>;
10550
+ private lastScrollY;
10551
+ private ticking;
10552
+ private scrollTarget?;
10553
+ private readonly onScroll;
10554
+ constructor();
10555
+ private currentScrollY;
10556
+ private readonly titleLabel;
10557
+ readonly openLabel: _angular_core.Signal<string>;
10558
+ readonly closeLabel: _angular_core.Signal<string>;
10559
+ readonly title: _angular_core.Signal<string>;
10560
+ /** Accessible name for the nav/dialog — the `ariaLabel` override or the title. */
10561
+ readonly navLabel: _angular_core.Signal<string>;
10562
+ toggle(open: boolean): void;
10563
+ close(): void;
10564
+ ngOnDestroy(): void;
10565
+ private handleScroll;
10566
+ onListClick(event: Event): void;
10567
+ private openSheet;
10568
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsCollapsibleComponent, never>;
10569
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableOfContentsCollapsibleComponent, "tedi-table-of-contents-collapsible", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "numbered": { "alias": "numbered"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, ["items"], ["tedi-table-of-contents-item"], true, never>;
10570
+ }
10571
+
9483
10572
  /**
9484
10573
  * Root of the Tabs compound component. Wraps `tedi-tabs-list` and
9485
10574
  * `tedi-tabs-content` elements and owns the active-tab state, which the list,
@@ -9640,9 +10729,21 @@ declare class ModalComponent implements AfterViewInit, OnDestroy {
9640
10729
  readonly position: _angular_core.InputSignal<ModalPosition>;
9641
10730
  /** @deprecated Whether clicking the backdrop closes the modal. Only used in standalone mode. */
9642
10731
  readonly closeOnBackdropClick: _angular_core.InputSignal<boolean>;
10732
+ /**
10733
+ * Accessible name for the dialog. Only needed when the modal has no heading
10734
+ * in `<tedi-modal-header>`, or that heading is not the name to announce.
10735
+ * Standalone mode only; service mode uses `ModalConfig.ariaLabel`.
10736
+ */
10737
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
10738
+ /**
10739
+ * Id of an element labelling the dialog, for a label outside
10740
+ * `<tedi-modal-header>`. Ignored when `ariaLabel` is set.
10741
+ */
10742
+ readonly ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
9643
10743
  private readonly document;
9644
10744
  private readonly host;
9645
10745
  private readonly platformId;
10746
+ private readonly idGenerator;
9646
10747
  /**
9647
10748
  * When a ModalRef is available, this component is inside a CDK Dialog
9648
10749
  * and should act as a layout-only wrapper.
@@ -9653,17 +10754,29 @@ declare class ModalComponent implements AfterViewInit, OnDestroy {
9653
10754
  private readonly isPresetWidth;
9654
10755
  /** Custom width for non-preset widths (legacy mode only). */
9655
10756
  readonly customWidth: Signal<ModalWidth | null>;
10757
+ /** Re-resolved on every open, since the heading is projected content. */
10758
+ private readonly headingLabelId;
10759
+ /** @internal */
10760
+ protected readonly dialogAriaLabel: Signal<string | null>;
10761
+ /** @internal `aria-label` wins, so it is never paired with a labelledby. */
10762
+ protected readonly dialogAriaLabelledBy: Signal<string | null>;
9656
10763
  readonly classes: Signal<string>;
9657
10764
  constructor();
9658
10765
  ngAfterViewInit(): void;
9659
10766
  ngOnDestroy(): void;
9660
10767
  private onOpen;
10768
+ /**
10769
+ * A DOM query rather than a `contentChild`, because the header injects this
10770
+ * component (importing it back would close a cycle) and the heading is
10771
+ * double-projected, out of reach of any query here.
10772
+ */
10773
+ private resolveHeadingLabel;
9661
10774
  private onClose;
9662
10775
  /** @internal */
9663
10776
  onBackdropClick(): void;
9664
10777
  private handleKeydown;
9665
10778
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ModalComponent, never>;
9666
- 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>;
10779
+ 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>;
9667
10780
  }
9668
10781
 
9669
10782
  /**
@@ -9688,6 +10801,8 @@ declare class ModalRef<R = unknown> {
9688
10801
  declare class ModalService {
9689
10802
  private readonly dialog;
9690
10803
  private readonly overlay;
10804
+ private readonly injector;
10805
+ private readonly idGenerator;
9691
10806
  /**
9692
10807
  * Open a modal dialog with the given component as content.
9693
10808
  *
@@ -9709,6 +10824,16 @@ declare class ModalService {
9709
10824
  open<R = unknown, D = unknown>(component: ComponentType<unknown>, config?: ModalConfig<D>): ModalRef<R>;
9710
10825
  /** Close all open modals. */
9711
10826
  closeAll(): void;
10827
+ /**
10828
+ * Names the dialog from the heading in its `<tedi-modal-header>` when the
10829
+ * caller passed no label of their own. Deferred, because `Dialog.open`
10830
+ * returns before the content renders and the heading does not exist yet.
10831
+ *
10832
+ * Written onto the container rather than passed as
10833
+ * `DialogConfig.ariaLabelledBy`, which would commit to an id before knowing
10834
+ * whether a heading exists and leave a dangling reference when none does.
10835
+ */
10836
+ private labelFromHeading;
9712
10837
  private buildPanelClasses;
9713
10838
  private setupDialogBehavior;
9714
10839
  private buildPositionStrategy;
@@ -9965,7 +11090,7 @@ declare class StatusBadgeComponent {
9965
11090
  */
9966
11091
  icon: _angular_core.InputSignal<string>;
9967
11092
  classes: _angular_core.Signal<string[]>;
9968
- ariaLive: _angular_core.Signal<"assertive" | "polite" | null>;
11093
+ ariaLive: _angular_core.Signal<"polite" | "assertive" | null>;
9969
11094
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBadgeComponent, never>;
9970
11095
  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>;
9971
11096
  }
@@ -10089,6 +11214,6 @@ declare function isValidTime(time: string | null | undefined): boolean;
10089
11214
  */
10090
11215
  declare function normalizeTime(input: string): string | null;
10091
11216
 
10092
- 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 };
10093
- 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 };
11217
+ 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, FloatingButtonComponent, 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, TableOfContentsCollapsibleComponent, TableOfContentsComponent, TableOfContentsItemComponent, TableOfContentsItemSuffixDirective, 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 };
11218
+ 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, FloatingButtonAxis, FloatingButtonOffset, FloatingButtonPlacement, FloatingButtonPosition, FloatingButtonSize, FloatingButtonVariant, 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, TableOfContentsHeadingLevel, TableOfContentsVariant, 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 };
10094
11219
  //# sourceMappingURL=index.d.ts.map