@tedi-design-system/angular 8.1.0-rc.8 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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';
@@ -354,6 +354,27 @@ declare const translationsMap: {
354
354
  en: string;
355
355
  ru: string;
356
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
+ };
357
378
  required: {
358
379
  description: string;
359
380
  components: string[];
@@ -577,6 +598,13 @@ declare const translationsMap: {
577
598
  en: string;
578
599
  ru: string;
579
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
+ };
580
608
  "modal.close": {
581
609
  description: string;
582
610
  components: string[];
@@ -1032,20 +1060,6 @@ declare const translationsMap: {
1032
1060
  en: string;
1033
1061
  ru: string;
1034
1062
  };
1035
- "table-of-contents.valid": {
1036
- description: string;
1037
- components: string[];
1038
- et: (count: string | number) => string;
1039
- en: (count: string | number) => string;
1040
- ru: (count: string | number) => string;
1041
- };
1042
- "table-of-contents.invalid": {
1043
- description: string;
1044
- components: string[];
1045
- et: (count: string | number) => string;
1046
- en: (count: string | number) => string;
1047
- ru: (count: string | number) => string;
1048
- };
1049
1063
  "truncate.see-more": {
1050
1064
  description: string;
1051
1065
  components: string[];
@@ -1826,12 +1840,19 @@ declare class AlertComponent {
1826
1840
  * @default false
1827
1841
  */
1828
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>;
1829
1849
  /**
1830
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.
1831
1852
  * Options:
1832
- * - 'alert': For high-priority messages that demand immediate attention.
1833
- * - 'status': For less urgent messages providing feedback or updates.
1834
- * - '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.
1835
1856
  * @default alert
1836
1857
  */
1837
1858
  role: _angular_core.InputSignal<AlertRole>;
@@ -1866,8 +1887,6 @@ declare class AlertComponent {
1866
1887
  * Close click output
1867
1888
  */
1868
1889
  readonly closeClick: _angular_core.OutputEmitterRef<void>;
1869
- getAriaLive: _angular_core.Signal<"assertive" | "polite" | "off">;
1870
- getAriaLabel: _angular_core.Signal<string>;
1871
1890
  classes: _angular_core.Signal<{
1872
1891
  [x: string]: boolean;
1873
1892
  "tedi-alert": boolean;
@@ -1876,7 +1895,7 @@ declare class AlertComponent {
1876
1895
  }>;
1877
1896
  handleClose(): void;
1878
1897
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertComponent, never>;
1879
- 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>;
1880
1899
  }
1881
1900
 
1882
1901
  declare const TOAST_DEFAULT_DURATION = 6000;
@@ -1911,15 +1930,16 @@ interface ToastConfig {
1911
1930
  */
1912
1931
  showProgressBar?: boolean;
1913
1932
  /**
1914
- * 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.
1915
1935
  * @default true
1916
1936
  */
1917
1937
  pauseOnHover?: boolean;
1918
1938
  /**
1919
- * The ARIA role of the toast, informing screen readers about the notification's priority.
1920
- * - 'status': For non-critical notifications.
1921
- * - 'alert': For critical errors.
1922
- * - '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.
1923
1943
  * @default status
1924
1944
  */
1925
1945
  role?: ToastRole;
@@ -1953,10 +1973,12 @@ declare class ToastComponent {
1953
1973
  */
1954
1974
  readonly icon: _angular_core.InputSignal<string>;
1955
1975
  /**
1956
- * The ARIA role of the toast, informing screen readers about the notification's priority.
1957
- * - 'status': For non-critical notifications (screen readers announce politely).
1958
- * - 'alert': For critical errors (screen readers announce immediately).
1959
- * - '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.
1960
1982
  * @default status
1961
1983
  */
1962
1984
  readonly role: _angular_core.InputSignal<AlertRole>;
@@ -1979,13 +2001,25 @@ declare class ToastComponent {
1979
2001
  * Emits when the toast is closed by the user.
1980
2002
  */
1981
2003
  readonly closed: _angular_core.OutputEmitterRef<void>;
2004
+ private readonly translationService;
2005
+ protected readonly closeLabel: _angular_core.Signal<string>;
1982
2006
  readonly mouseEnter: _angular_core.OutputEmitterRef<void>;
1983
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>;
1984
2016
  handleClose(): void;
1985
2017
  onMouseEnter(): void;
1986
2018
  onMouseLeave(): void;
2019
+ onFocusIn(): void;
2020
+ onFocusOut(event: FocusEvent): void;
1987
2021
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastComponent, never>;
1988
- 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>;
1989
2023
  }
1990
2024
 
1991
2025
  interface ToastItem {
@@ -2271,6 +2305,81 @@ declare class ClosingButtonComponent {
2271
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>;
2272
2306
  }
2273
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
+
2274
2383
  /**
2275
2384
  * A single item inside a `tedi-accordion`. Owns the item's state (expanded)
2276
2385
  * and the inputs shared by header and content (selected, showIconCard,
@@ -5145,10 +5254,17 @@ declare class TruncateComponent {
5145
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>;
5146
5255
  }
5147
5256
 
5148
- type DropdownTriggerAriaHasPopup = "menu" | "listbox" | "dialog" | "true";
5257
+ type DropdownTriggerAriaHasPopup = "menu" | "listbox" | "dialog" | "true" | "false";
5149
5258
  declare class DropdownTriggerDirective implements AfterViewInit {
5150
- /** 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. */
5151
- 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>;
5152
5268
  readonly host: ElementRef<HTMLElement>;
5153
5269
  readonly dropdown: DropdownComponent;
5154
5270
  readonly overlayOrigin: CdkOverlayOrigin;
@@ -5161,6 +5277,7 @@ declare class DropdownTriggerDirective implements AfterViewInit {
5161
5277
  * would both be tab stops, and the ARIA state would land on the wrong element.
5162
5278
  */
5163
5279
  private readonly triggerElement;
5280
+ private readonly hasPopup;
5164
5281
  constructor();
5165
5282
  ngAfterViewInit(): void;
5166
5283
  focus(): void;
@@ -5169,6 +5286,7 @@ declare class DropdownTriggerDirective implements AfterViewInit {
5169
5286
  get focusableElement(): HTMLElement;
5170
5287
  onClick(): void;
5171
5288
  onKeydown(event: KeyboardEvent): void;
5289
+ private isWidgetContent;
5172
5290
  private resolveTriggerElement;
5173
5291
  private isNativelyFocusable;
5174
5292
  private openAndFocusFirst;
@@ -5177,6 +5295,18 @@ declare class DropdownTriggerDirective implements AfterViewInit {
5177
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: {}; }]>;
5178
5296
  }
5179
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";
5180
5310
  interface DropdownApi {
5181
5311
  /** Current value of the dropdown. Used to track the selected option in listbox mode. */
5182
5312
  value: WritableSignal<string | undefined>;
@@ -5206,7 +5336,9 @@ interface DropdownApi {
5206
5336
  declare const DROPDOWN_API: InjectionToken<DropdownApi>;
5207
5337
  interface DropdownContentApi {
5208
5338
  /** The ARIA role of the dropdown content. Determines keyboard interaction and accessibility semantics. */
5209
- 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>;
5210
5342
  }
5211
5343
  declare const DROPDOWN_CONTENT_API: InjectionToken<DropdownContentApi>;
5212
5344
 
@@ -5258,6 +5390,20 @@ declare class DropdownItemComponent {
5258
5390
  readonly value: _angular_core.InputSignal<string | undefined>;
5259
5391
  /** Is item disabled? */
5260
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>;
5261
5407
  /**
5262
5408
  * Whether the item's label clips overflowing content (for text ellipsis).
5263
5409
  * Set `false` when projecting content with decorations that intentionally
@@ -5283,20 +5429,58 @@ declare class DropdownItemComponent {
5283
5429
  readonly dropdownContent: DropdownContentApi;
5284
5430
  /** Check if custom dropdown-item-value is provided */
5285
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;
5286
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;
5287
5455
  focus(): void;
5456
+ setTabindex(value: string | null): void;
5457
+ private controlElement;
5288
5458
  onClick(): void;
5289
5459
  onMousedown(event: MouseEvent): void;
5290
5460
  onKeydown(event: KeyboardEvent): void;
5461
+ /** Returns whether the key was an activation key and has been dealt with. */
5462
+ private handleActivationKey;
5291
5463
  private onItemSelect;
5292
5464
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemComponent, never>;
5293
- 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>;
5294
5466
  }
5295
5467
 
5296
- type DropdownRole = "menu" | "listbox";
5297
5468
  declare class DropdownContentComponent {
5298
5469
  /**
5299
- * 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`.
5300
5484
  * @default menu
5301
5485
  */
5302
5486
  readonly dropdownRole: _angular_core.InputSignal<DropdownRole>;
@@ -5304,6 +5488,7 @@ declare class DropdownContentComponent {
5304
5488
  private readonly dropdownApi;
5305
5489
  readonly containerId: _angular_core.Signal<string>;
5306
5490
  readonly items: _angular_core.Signal<readonly DropdownItemComponent[]>;
5491
+ readonly isWidget: _angular_core.Signal<boolean>;
5307
5492
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownContentComponent, never>;
5308
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>;
5309
5494
  }
@@ -5353,6 +5538,7 @@ declare class DropdownComponent implements OnDestroy {
5353
5538
  private readonly platformId;
5354
5539
  private readonly document;
5355
5540
  private readonly renderer;
5541
+ private readonly overlayContainer;
5356
5542
  private scrollListener?;
5357
5543
  private skipNextGestureOutsideClick;
5358
5544
  constructor();
@@ -5363,6 +5549,12 @@ declare class DropdownComponent implements OnDestroy {
5363
5549
  onOutsideClick(event?: MouseEvent): void;
5364
5550
  handleFocusOut: (event: FocusEvent) => void;
5365
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;
5366
5558
  focusFirstItem(): void;
5367
5559
  focusLastItem(): void;
5368
5560
  setActiveToSelectedOrFirst(): void;
@@ -5370,6 +5562,11 @@ declare class DropdownComponent implements OnDestroy {
5370
5562
  focusNextItem(fromEl: HTMLLIElement): void;
5371
5563
  focusPrevItem(fromEl: HTMLLIElement): void;
5372
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;
5373
5570
  private setupScrollListener;
5374
5571
  private cleanupScrollListener;
5375
5572
  private findIndexByElement;
@@ -5923,6 +6120,13 @@ interface DateInputTag {
5923
6120
  }
5924
6121
  declare class DateInputComponent implements AfterViewChecked {
5925
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>;
5926
6130
  readonly value: _angular_core.InputSignal<string>;
5927
6131
  readonly tags: _angular_core.InputSignal<readonly DateInputTag[]>;
5928
6132
  readonly mode: _angular_core.InputSignal<DateFieldMode>;
@@ -5954,6 +6158,7 @@ declare class DateInputComponent implements AfterViewChecked {
5954
6158
  private readonly inputElement;
5955
6159
  private readonly fieldElement;
5956
6160
  private readonly tagElements;
6161
+ private readonly textField;
5957
6162
  /** Number of tags that fit on a single row; `null` until measured. */
5958
6163
  readonly visibleTagsCount: _angular_core.WritableSignal<number | null>;
5959
6164
  constructor();
@@ -5976,7 +6181,7 @@ declare class DateInputComponent implements AfterViewChecked {
5976
6181
  private calculateVisibleTags;
5977
6182
  private getAvailableTagWidth;
5978
6183
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateInputComponent, never>;
5979
- 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>;
5980
6185
  }
5981
6186
 
5982
6187
  /**
@@ -6065,6 +6270,11 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6065
6270
  * `<label tedi-label [for]>` to the same value.
6066
6271
  */
6067
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>;
6068
6278
  /**
6069
6279
  * The selected value (two-way / `ControlValueAccessor`). Shape follows `mode`:
6070
6280
  * `single` → `Date | null`, `multiple` → `Date[]`, `range` → `{ from, to }`.
@@ -6258,7 +6468,17 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6258
6468
  readonly overlayOpen: _angular_core.WritableSignal<boolean>;
6259
6469
  private readonly openedBy;
6260
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;
6261
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;
6262
6482
  private modalRef;
6263
6483
  private scrollListener?;
6264
6484
  private onChange;
@@ -6287,6 +6507,11 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6287
6507
  readonly nativeIsoValue: _angular_core.Signal<string>;
6288
6508
  readonly effectivePlaceholder: _angular_core.Signal<string>;
6289
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>;
6290
6515
  readonly tagsForMultipleMode: _angular_core.Signal<DateInputTag[]>;
6291
6516
  readonly canClear: _angular_core.Signal<boolean>;
6292
6517
  readonly inputIsTrigger: _angular_core.Signal<boolean>;
@@ -6296,6 +6521,7 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6296
6521
  registerOnChange(fn: (value: DateFieldValue) => void): void;
6297
6522
  registerOnTouched(fn: () => void): void;
6298
6523
  setDisabledState(isDisabled: boolean): void;
6524
+ setDescribedBy(ids: string[]): void;
6299
6525
  focus(): void;
6300
6526
  reset(): void;
6301
6527
  handleClear(): void;
@@ -6335,7 +6561,7 @@ declare class DateFieldComponent implements OnInit, ControlValueAccessor, FormFi
6335
6561
  private toIsoDate;
6336
6562
  private queryNativeInput;
6337
6563
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateFieldComponent, never>;
6338
- 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>;
6339
6565
  }
6340
6566
 
6341
6567
  declare class DatePickerCalendarGridComponent {
@@ -6391,6 +6617,9 @@ type DatePickerMatcher = Date | Date[] | {
6391
6617
  from: Date;
6392
6618
  to?: Date;
6393
6619
  } | ((date: Date) => boolean);
6620
+ /**
6621
+ * @deprecated Use `tedi-date-field` from `@tedi-design-system/angular/tedi` instead.
6622
+ */
6394
6623
  declare class DatePickerComponent implements OnInit, ControlValueAccessor {
6395
6624
  readonly today: Date;
6396
6625
  readonly uniqueId: string;
@@ -6549,7 +6778,7 @@ declare class FeedbackTextComponent {
6549
6778
  */
6550
6779
  position: _angular_core.InputSignal<FeedbackTextPosition>;
6551
6780
  role: _angular_core.Signal<"alert" | undefined>;
6552
- ariaLive: _angular_core.Signal<"assertive" | "polite">;
6781
+ ariaLive: _angular_core.Signal<"polite" | "assertive">;
6553
6782
  classes: _angular_core.Signal<string>;
6554
6783
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FeedbackTextComponent, never>;
6555
6784
  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>;
@@ -6770,7 +6999,78 @@ declare class FormFieldComponent implements FieldContext {
6770
6999
  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>;
6771
7000
  }
6772
7001
 
7002
+ /**
7003
+ * Context passed to a custom suggestion row template.
7004
+ */
7005
+ interface SearchSuggestionContext<T = unknown> {
7006
+ /** The suggestion, so `let-item` works without naming a context key. */
7007
+ $implicit: T;
7008
+ /** The same suggestion under a name, for `let-item="item"`. */
7009
+ item: T;
7010
+ /** Position in the rendered list, matching the row's `aria-activedescendant` id. */
7011
+ index: number;
7012
+ /** Resolved display label, via `bindLabel`. */
7013
+ label: string;
7014
+ /** Resolved secondary line, via `bindDescription`. Empty when unbound. */
7015
+ description: string;
7016
+ /** Whether the row is unselectable, via `bindDisabled`. */
7017
+ disabled: boolean;
7018
+ /** Current trimmed field value, for custom match highlighting. */
7019
+ query: string;
7020
+ }
7021
+ /**
7022
+ * Renders each suggestion row. Without it, rows show the resolved label with the
7023
+ * matched substring bolded.
7024
+ *
7025
+ * @example
7026
+ * ```html
7027
+ * <tedi-search [suggestions]="people" bindLabel="name">
7028
+ * <ng-template tediSearchSuggestion let-item>
7029
+ * <span tedi-text modifiers="bold">{{ item.name }}</span>
7030
+ * <span tedi-text color="tertiary">{{ item.code }}</span>
7031
+ * </ng-template>
7032
+ * </tedi-search>
7033
+ * ```
7034
+ */
7035
+ declare class SearchSuggestionTemplateDirective<T = unknown> {
7036
+ template: TemplateRef<SearchSuggestionContext<T>>;
7037
+ static ngTemplateContextGuard<T>(_dir: SearchSuggestionTemplateDirective<T>, _ctx: unknown): _ctx is SearchSuggestionContext<T>;
7038
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSuggestionTemplateDirective<any>, never>;
7039
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SearchSuggestionTemplateDirective<any>, "[tediSearchSuggestion]", never, {}, {}, never, never, true, never>;
7040
+ }
7041
+ /**
7042
+ * Extra content pinned below the suggestions — fallback actions and a hint, for
7043
+ * example. It shows whenever the panel is open, including the no-results state,
7044
+ * which is what makes it useful for "nothing matched, try this instead".
7045
+ *
7046
+ * Suggestions keep behaving exactly as they do without it: filtering, arrow-key
7047
+ * navigation and Enter to select are unchanged. Tab moves from the field into the
7048
+ * footer's controls.
7049
+ *
7050
+ * @example
7051
+ * ```html
7052
+ * <tedi-search [suggestions]="matches()">
7053
+ * <ng-template tediSearchFooter>
7054
+ * <tedi-search-footer-actions>
7055
+ * <button tedi-button variant="secondary">Isik teadmata</button>
7056
+ * </tedi-search-footer-actions>
7057
+ * </ng-template>
7058
+ * </tedi-search>
7059
+ * ```
7060
+ */
7061
+ declare class SearchFooterTemplateDirective {
7062
+ template: TemplateRef<unknown>;
7063
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchFooterTemplateDirective, never>;
7064
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SearchFooterTemplateDirective, "[tediSearchFooter]", never, {}, {}, never, never, true, never>;
7065
+ }
7066
+
6773
7067
  type SearchSize = InputSize;
7068
+ interface SearchSuggestionView<T = unknown> {
7069
+ item: T;
7070
+ label: string;
7071
+ description: string;
7072
+ disabled: boolean;
7073
+ }
6774
7074
  interface SearchButton {
6775
7075
  /**
6776
7076
  * Visible button text. When omitted, the button is rendered icon-only.
@@ -6792,7 +7092,7 @@ interface SearchButton {
6792
7092
  */
6793
7093
  ariaLabel?: string;
6794
7094
  }
6795
- declare class SearchComponent implements ControlValueAccessor {
7095
+ declare class SearchComponent<T = unknown> implements ControlValueAccessor {
6796
7096
  /**
6797
7097
  * Unique identifier for the input element, used to associate the label.
6798
7098
  */
@@ -6842,6 +7142,62 @@ declare class SearchComponent implements ControlValueAccessor {
6842
7142
  * `placeholder`, then the translated "search" label.
6843
7143
  */
6844
7144
  ariaLabel: _angular_core.InputSignal<string | undefined>;
7145
+ /**
7146
+ * Suggestions to show in the panel, already filtered by the consumer. Bind an
7147
+ * empty array to keep the combobox behaviour while nothing matches; leave it
7148
+ * unbound for a plain search field.
7149
+ */
7150
+ suggestions: _angular_core.InputSignal<T[] | undefined>;
7151
+ /**
7152
+ * Property holding the display label when suggestions are objects.
7153
+ * @default "label"
7154
+ */
7155
+ bindLabel: _angular_core.InputSignal<string>;
7156
+ /**
7157
+ * Property holding a secondary line shown under the label. Unset by default,
7158
+ * so rows are a single line unless asked for.
7159
+ */
7160
+ bindDescription: _angular_core.InputSignal<string | undefined>;
7161
+ /**
7162
+ * Property marking a suggestion as unselectable. Disabled rows are greyed out
7163
+ * and skipped by keyboard navigation.
7164
+ * @default "disabled"
7165
+ */
7166
+ bindDisabled: _angular_core.InputSignal<string>;
7167
+ /**
7168
+ * Characters required before the panel opens. Below it nothing is shown, not
7169
+ * even the no-results row, so short queries stay quiet.
7170
+ * @default 0
7171
+ */
7172
+ minQueryLength: _angular_core.InputSignalWithTransform<number, unknown>;
7173
+ /**
7174
+ * Shows a loading row instead of results.
7175
+ * @default false
7176
+ */
7177
+ loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
7178
+ /**
7179
+ * Closes the suggestion panel when the page (or a scrollable ancestor)
7180
+ * scrolls. Scrolling the option list itself keeps the panel open.
7181
+ * @default false
7182
+ */
7183
+ hideOnScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
7184
+ /**
7185
+ * Whether the suggestion panel is open.
7186
+ * @default false
7187
+ */
7188
+ panelOpen: _angular_core.ModelSignal<boolean>;
7189
+ /**
7190
+ * Overrides the translated "no results" row.
7191
+ */
7192
+ noResultsText: _angular_core.InputSignal<string | undefined>;
7193
+ /**
7194
+ * Overrides the translated loading row.
7195
+ */
7196
+ loadingText: _angular_core.InputSignal<string | undefined>;
7197
+ /**
7198
+ * Overrides the translated screen-reader result count.
7199
+ */
7200
+ resultsCountText: _angular_core.InputSignal<((count: number) => string) | undefined>;
6845
7201
  /**
6846
7202
  * Emitted when the search is executed (Enter key or button click).
6847
7203
  */
@@ -6850,11 +7206,41 @@ declare class SearchComponent implements ControlValueAccessor {
6850
7206
  * Emitted when the clear button is clicked.
6851
7207
  */
6852
7208
  readonly clear: _angular_core.OutputEmitterRef<void>;
7209
+ /**
7210
+ * Emitted when a suggestion is accepted. The field is filled with its label.
7211
+ */
7212
+ readonly suggestionSelect: _angular_core.OutputEmitterRef<T>;
7213
+ readonly suggestionTemplate: _angular_core.Signal<SearchSuggestionTemplateDirective<any> | undefined>;
7214
+ readonly footerTemplate: _angular_core.Signal<SearchFooterTemplateDirective | undefined>;
6853
7215
  private readonly inputRef;
7216
+ private readonly overlayOrigin;
7217
+ private readonly connectedOverlay;
7218
+ private readonly suggestionRows;
6854
7219
  private readonly formDisabled;
7220
+ private readonly hostElement;
6855
7221
  private readonly translationService;
7222
+ private readonly renderer;
7223
+ private readonly document;
7224
+ private readonly injector;
7225
+ private scrollListener?;
6856
7226
  private onChange;
6857
7227
  private onTouched;
7228
+ /** Suppresses the focus-driven reopen after a selection, until the next edit. */
7229
+ private justSelected;
7230
+ /**
7231
+ * Navigation is driven from `event.key` via the explicit `set*ItemActive`
7232
+ * methods rather than `keyManager.onKeydown`, which switches on the deprecated
7233
+ * `event.keyCode` and so ignores synthesised events.
7234
+ */
7235
+ private readonly keyManager;
7236
+ private readonly activeIndex;
7237
+ readonly overlayPositions: ConnectedPosition[];
7238
+ readonly panelWidth: _angular_core.WritableSignal<number>;
7239
+ /**
7240
+ * True while the panel sits above the field on the fallback position, so the
7241
+ * rounded edge can move to the side that is not joined to the field.
7242
+ */
7243
+ readonly panelAbove: _angular_core.WritableSignal<boolean>;
6858
7244
  readonly isDisabled: _angular_core.Signal<boolean>;
6859
7245
  readonly fieldIcon: _angular_core.Signal<string | FormFieldIcon | undefined>;
6860
7246
  readonly fieldHeight: _angular_core.Signal<"var(--form-field-height-sm)" | "var(--form-field-height-lg)" | "var(--form-field-height)">;
@@ -6869,19 +7255,121 @@ declare class SearchComponent implements ControlValueAccessor {
6869
7255
  * otherwise `aria-label` would silently override the visible text.
6870
7256
  */
6871
7257
  readonly inputAriaLabel: _angular_core.Signal<string | null>;
7258
+ /**
7259
+ * Derived from capability, never from current content — an empty
7260
+ * `suggestions` array still means the consumer opted into the combobox.
7261
+ */
7262
+ readonly autocomplete: _angular_core.Signal<boolean>;
7263
+ readonly resolvedSuggestions: _angular_core.Signal<SearchSuggestionView<T>[]>;
7264
+ readonly query: _angular_core.Signal<string>;
7265
+ readonly hasSuggestions: _angular_core.Signal<boolean>;
7266
+ readonly listboxId: _angular_core.Signal<string>;
7267
+ readonly meetsMinQueryLength: _angular_core.Signal<boolean>;
7268
+ readonly panelVisible: _angular_core.Signal<boolean>;
7269
+ readonly inputRole: _angular_core.Signal<"combobox" | "searchbox">;
7270
+ readonly ariaAutocomplete: _angular_core.Signal<"list" | null>;
7271
+ readonly ariaExpanded: _angular_core.Signal<boolean | null>;
7272
+ readonly ariaControls: _angular_core.Signal<string | null>;
7273
+ readonly activeOptionId: _angular_core.Signal<string | null>;
7274
+ readonly resolvedNoResultsText: _angular_core.Signal<string>;
7275
+ readonly resolvedLoadingText: _angular_core.Signal<string>;
7276
+ readonly announcement: _angular_core.Signal<string>;
7277
+ constructor();
7278
+ optionId(index: number): string;
6872
7279
  onInputValue(value: string): void;
6873
7280
  onClear(): void;
6874
7281
  onBlur(): void;
7282
+ onInputFocus(): void;
7283
+ openPanel(): void;
7284
+ closePanel(): void;
7285
+ onPositionChange(change: ConnectedOverlayPositionChange): void;
7286
+ onOverlayAttach(): void;
7287
+ onOverlayDetach(): void;
7288
+ /**
7289
+ * Listens on the document in the capture phase so scrolls in any ancestor are
7290
+ * seen — a scroll event does not bubble past the element that scrolled.
7291
+ */
7292
+ private setupScrollListener;
7293
+ private cleanupScrollListener;
7294
+ /** Closes the panel and hands focus back to the input. */
7295
+ closeAndRestoreFocus(): void;
7296
+ onKeydown(event: KeyboardEvent): void;
7297
+ /**
7298
+ * Footer controls live in the overlay, which sits at the end of the document,
7299
+ * so they are not next in tab order. Tab reaches them explicitly; without this
7300
+ * they would be mouse-only.
7301
+ */
7302
+ private onTabFromInput;
7303
+ /**
7304
+ * Tabbing past the footer leaves the component: close the panel and continue to
7305
+ * whatever follows the field in document order, so the footer is not a trap.
7306
+ */
7307
+ onFooterKeydown(event: KeyboardEvent): void;
7308
+ private footerFocusables;
7309
+ private focusAfterField;
7310
+ selectSuggestion(suggestion: SearchSuggestionView<T>): void;
7311
+ /**
7312
+ * The panel is portalled into the overlay container, so it is not a descendant
7313
+ * of the host — both roots have to be consulted before deciding focus left.
7314
+ */
7315
+ onFocusOut(event: FocusEvent): void;
6875
7316
  emitSearch(): void;
6876
7317
  focus(): void;
6877
7318
  writeValue(value: string | null): void;
6878
7319
  registerOnChange(fn: (value: string) => void): void;
6879
7320
  registerOnTouched(fn: () => void): void;
6880
7321
  setDisabledState(isDisabled: boolean): void;
6881
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent, never>;
6882
- 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>;
7322
+ private onArrowKey;
7323
+ private onEnter;
7324
+ private panelElement;
7325
+ private resetActiveOption;
7326
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent<any>, never>;
7327
+ 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>;
7328
+ }
7329
+
7330
+ declare class SearchSuggestionComponent implements Highlightable {
7331
+ /** Resolved display label. */
7332
+ readonly label: _angular_core.InputSignal<string>;
7333
+ /** Secondary line under the label. */
7334
+ readonly description: _angular_core.InputSignal<string>;
7335
+ /** Current field value, used to bold the matching segment. */
7336
+ readonly query: _angular_core.InputSignal<string>;
7337
+ /** Whether a custom suggestion template supplies the row content. */
7338
+ readonly custom: _angular_core.InputSignalWithTransform<boolean, unknown>;
7339
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
7340
+ readonly host: ElementRef<HTMLLIElement>;
7341
+ private readonly active;
7342
+ readonly isActive: _angular_core.Signal<boolean>;
7343
+ readonly parts: _angular_core.Signal<_tedi_design_system_angular_tedi.SearchHighlightPart[]>;
7344
+ /**
7345
+ * `Highlightable` requires a plain boolean, so the signal input is aliased and
7346
+ * this getter satisfies the CDK contract — a signal would always read truthy.
7347
+ */
7348
+ get disabled(): boolean;
7349
+ setActiveStyles(): void;
7350
+ setInactiveStyles(): void;
7351
+ getLabel(): string;
7352
+ scrollIntoView(): void;
7353
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSuggestionComponent, never>;
7354
+ 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>;
7355
+ }
7356
+
7357
+ /**
7358
+ * Row of buttons inside a `tediSearchFooter`. Centres them and wraps to a new
7359
+ * line when they no longer fit side by side.
7360
+ */
7361
+ declare class SearchFooterActionsComponent {
7362
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchFooterActionsComponent, never>;
7363
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchFooterActionsComponent, "tedi-search-footer-actions", never, {}, {}, never, ["*"], true, never>;
6883
7364
  }
6884
7365
 
7366
+ interface SearchHighlightPart {
7367
+ text: string;
7368
+ match: boolean;
7369
+ }
7370
+ /** Splits `text` so the segment matching `query` can be emphasised. */
7371
+ declare function highlightParts(text: string, query: string): SearchHighlightPart[];
7372
+
6885
7373
  /**
6886
7374
  * Context provided to custom option templates.
6887
7375
  */
@@ -6999,6 +7487,11 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6999
7487
  * Used for label association and accessibility.
7000
7488
  */
7001
7489
  inputId: _angular_core.InputSignal<string>;
7490
+ /**
7491
+ * Name the selection is submitted under in a native form, one entry per
7492
+ * selected value. With object options, set `bindValue` to pick what is sent.
7493
+ */
7494
+ name: _angular_core.InputSignal<string | undefined>;
7002
7495
  /**
7003
7496
  * Label text displayed above the select.
7004
7497
  */
@@ -7261,6 +7754,14 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7261
7754
  measuredRowHeight: _angular_core.WritableSignal<number | null>;
7262
7755
  private static readonly DEFAULT_ROW_HEIGHT;
7263
7756
  private static readonly SMALL_ROW_HEIGHT;
7757
+ /**
7758
+ * Values written to the hidden form inputs — one entry per selected value,
7759
+ * and a single empty entry when nothing is selected, so the field is still
7760
+ * submitted.
7761
+ */
7762
+ readonly formValues: _angular_core.Signal<string[]>;
7763
+ readonly isInvalid: _angular_core.Signal<boolean>;
7764
+ readonly feedbackId: _angular_core.Signal<string | null>;
7264
7765
  hiddenTagsCount: _angular_core.Signal<number>;
7265
7766
  /**
7266
7767
  * Whether the default identity comparator is in use. When true, selection and
@@ -7407,7 +7908,7 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7407
7908
  registerOnTouched(fn: () => void): void;
7408
7909
  setDisabledState(isDisabled: boolean): void;
7409
7910
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent<any>, never>;
7410
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualItemSize": { "alias": "virtualItemSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; }, ["optionTemplate", "valueTemplate", "tooltipTemplate"], never, true, never>;
7911
+ 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>;
7411
7912
  }
7412
7913
 
7413
7914
  type SliderHideLabel = boolean | "keep-space";
@@ -8978,7 +9479,7 @@ declare class HeaderMobileButtonComponent {
8978
9479
  * is confusing to assistive tech — if a popup is involved, omit `href`
8979
9480
  * so the component renders as a button.
8980
9481
  */
8981
- ariaHasPopup: _angular_core.InputSignal<"menu" | "listbox" | "dialog" | "true" | "grid" | "false" | "tree" | undefined>;
9482
+ ariaHasPopup: _angular_core.InputSignal<"menu" | "listbox" | "dialog" | "true" | "false" | "grid" | "tree" | undefined>;
8982
9483
  /**
8983
9484
  * Forwarded to the inner `<button>` as `aria-expanded`. Pair with
8984
9485
  * `ariaHasPopup` when this button toggles a dialog/menu open.
@@ -9672,9 +10173,19 @@ type RenderToken = {
9672
10173
  * the current page — add `aria-current="page"` to it yourself.
9673
10174
  *
9674
10175
  * Crumb links are underlined by default. Set `[underline]="false"` on the
9675
- * `tedi-link` for non-underlined crumbs — recommended for the `short` back-link.
9676
- * Crumbs collapsed into the ellipsis dropdown are always rendered without an
9677
- * underline, regardless of their `[underline]` setting.
10176
+ * `tedi-link` for non-underlined crumbs, which is recommended for the `short`
10177
+ * back-link. A collapsed crumb keeps its own `[underline]` setting, so it looks
10178
+ * the same in the ellipsis dropdown as it does in the trail. To restyle the
10179
+ * collapsed rows, target `.tedi-breadcrumbs__dropdown-item`, which travels with
10180
+ * them into the overlay.
10181
+ *
10182
+ * The ellipsis dropdown is a plain list (`dropdownRole="list"`), not a menu, so
10183
+ * the collapsed crumbs stay links: screen readers announce them as links and
10184
+ * each one is its own tab stop. Its panel renders inside the crumb it belongs
10185
+ * to, so the collapsed crumbs come between the ellipsis button and the next
10186
+ * crumb both in the tab order and for a screen reader that swipes through the
10187
+ * DOM. Opening it moves focus to the first collapsed crumb; Escape closes it
10188
+ * and returns focus to the button.
9678
10189
  */
9679
10190
  declare class BreadcrumbsComponent implements BreakpointInputs<BreadcrumbsInputs> {
9680
10191
  private readonly breakpointService;
@@ -9815,6 +10326,252 @@ interface UsePaginationArgs {
9815
10326
  */
9816
10327
  declare function usePagination({ page, pageCount, boundaryCount, siblingCount, }: UsePaginationArgs): PaginationItem[];
9817
10328
 
10329
+ type TableOfContentsVariant = "default" | "transparent";
10330
+ type TableOfContentsHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
10331
+ /**
10332
+ * A navigation aid that lists the sections of a page and highlights the one the
10333
+ * reader is on. Compose it from `tedi-table-of-contents-item` elements; nest
10334
+ * items to build a two-level hierarchy.
10335
+ *
10336
+ * The active item is controlled via `activeId`: it gets the accent bar and active link colour.
10337
+ *
10338
+ * When `sticky` is enabled the container pins while the page scrolls. Two knobs
10339
+ * adapt it to the surrounding layout: `stickyOffset` moves where it pins (raise
10340
+ * it to clear a fixed header), and `stickyMaxHeight` overrides the height cap
10341
+ * for when the TOC scrolls inside a fixed-height container rather than the window.
10342
+ *
10343
+ * The gap the sticky TOC leaves above the viewport bottom has no input — override
10344
+ * the `--tedi-table-of-contents-sticky-bottom` CSS custom property (default
10345
+ * `1.5rem`) from any ancestor when you need to clear a fixed footer.
10346
+ */
10347
+ declare class TableOfContentsComponent {
10348
+ /**
10349
+ * Heading rendered above the list. Defaults to the localised "Table of
10350
+ * contents" label; pass `null` (or an empty string) to render it headless —
10351
+ * the navigation keeps an accessible name via `aria-label`.
10352
+ */
10353
+ readonly heading: _angular_core.InputSignal<string | null | undefined>;
10354
+ /**
10355
+ * Semantic level of the heading element (`h1`–`h6`). The visual style stays
10356
+ * h4 regardless; set this to match the surrounding page's heading outline
10357
+ * (e.g. `h2` when the TOC follows only a page `h1`).
10358
+ */
10359
+ readonly headingLevel: _angular_core.InputSignal<TableOfContentsHeadingLevel>;
10360
+ /**
10361
+ * Visual variant:
10362
+ * - `default` — rendered inside a bordered card.
10363
+ * - `transparent` — no card chrome; the list sits on the page with a
10364
+ * continuous grey left rail.
10365
+ */
10366
+ readonly variant: _angular_core.InputSignal<TableOfContentsVariant>;
10367
+ /**
10368
+ * Draws a divider under each item except the last — sub-items included — so the
10369
+ * list reads as a set of separated rows.
10370
+ * @default false
10371
+ */
10372
+ readonly bordered: _angular_core.InputSignal<boolean>;
10373
+ /** Id of the currently active item. */
10374
+ readonly activeId: _angular_core.InputSignal<string | undefined>;
10375
+ /**
10376
+ * Keep the active item visible inside the TOC's own scroll area. When the list
10377
+ * is taller than a bounded or sticky container and `activeId` changes, the TOC
10378
+ * scrolls its internal scroll region just enough to reveal the active item.
10379
+ * No-op when the list isn't scrollable (short lists, unbounded layouts).
10380
+ * @default false
10381
+ */
10382
+ readonly scrollActiveIntoView: _angular_core.InputSignal<boolean>;
10383
+ /**
10384
+ * Whether nested items are expanded by default. When `true` (default) the full
10385
+ * outline is always visible. When `false`, a branch reveals its sub-items only
10386
+ * while it is on the active trail (the active item or one of its ancestors).
10387
+ * @default true
10388
+ */
10389
+ readonly defaultOpen: _angular_core.InputSignal<boolean>;
10390
+ /** Show auto-generated hierarchical numbers (`1.`, `2.`, `2.1`, …). */
10391
+ readonly numbered: _angular_core.InputSignal<boolean>;
10392
+ /** Stick the container to the viewport while scrolling. */
10393
+ readonly sticky: _angular_core.InputSignal<boolean>;
10394
+ /**
10395
+ * Distance from the top of the scroll container at which the sticky TOC pins,
10396
+ * as any CSS length or expression. Raise it to clear a fixed header — e.g.
10397
+ * `"calc(var(--layout-header-height) + 1.5rem)"`. Drives both `top` and the
10398
+ * default `max-height`. Only applies while `sticky` is `true`.
10399
+ * @default "1.5rem"
10400
+ */
10401
+ readonly stickyOffset: _angular_core.InputSignal<string | undefined>;
10402
+ /**
10403
+ * Overrides the sticky height cap. The default keeps the TOC within the
10404
+ * viewport (`calc(100dvh - offset - 1.5rem)`); set this when the TOC scrolls
10405
+ * inside a fixed-height container rather than the window — e.g.
10406
+ * `"calc(30rem - 3rem)"` for a 30rem scroll region. Only applies while
10407
+ * `sticky` is `true`.
10408
+ */
10409
+ readonly stickyMaxHeight: _angular_core.InputSignal<string | undefined>;
10410
+ /**
10411
+ * Accessible name for the navigation landmark. Overrides the default, which is
10412
+ * the heading (via `aria-labelledby`) or the localised title when headless.
10413
+ * Useful to disambiguate multiple tables of contents on one page.
10414
+ */
10415
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
10416
+ private readonly translations;
10417
+ private readonly host;
10418
+ private readonly platformId;
10419
+ constructor();
10420
+ /** Top-level items, used by items to compute their hierarchical numbers. */
10421
+ readonly items: _angular_core.Signal<readonly any[]>;
10422
+ private readonly titleLabel;
10423
+ readonly resolvedHeading: _angular_core.Signal<string | null>;
10424
+ readonly navLabel: _angular_core.Signal<string>;
10425
+ readonly headingId: string;
10426
+ /** Scroll the TOC's own scroll region so the active item's row is visible. */
10427
+ private revealActiveItem;
10428
+ /** Nearest scrollable ancestor within this component (e.g. the sticky `nav`). */
10429
+ private findScrollParent;
10430
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsComponent, never>;
10431
+ 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>;
10432
+ }
10433
+
10434
+ /**
10435
+ * A single entry in a `tedi-table-of-contents`. Its non-item content (a
10436
+ * `tedi-link`, anchor or button) is the clickable label; nested
10437
+ * `tedi-table-of-contents-item` children become this item's sub-items and are
10438
+ * only revealed when the item is on the active branch.
10439
+ */
10440
+ declare class TableOfContentsItemComponent {
10441
+ /**
10442
+ * Unique id. Required to mark the item active (via the parent's `activeId`)
10443
+ * and to be the parent of nested items. Named `itemId` to avoid
10444
+ * shadowing the native `id` attribute.
10445
+ */
10446
+ readonly itemId: _angular_core.InputSignal<string | undefined>;
10447
+ /** Render a separator below the item. */
10448
+ readonly separator: _angular_core.InputSignal<boolean>;
10449
+ private readonly root;
10450
+ private readonly parent;
10451
+ /** Direct nested items (a single level down). */
10452
+ readonly childItems: Signal<readonly TableOfContentsItemComponent[]>;
10453
+ readonly numbered: Signal<boolean>;
10454
+ readonly depth: Signal<number>;
10455
+ /** CSS indent level — capped at 2, matching the design's two-level hierarchy. */
10456
+ readonly level: Signal<number>;
10457
+ readonly hasChildren: Signal<boolean>;
10458
+ readonly isSelected: Signal<boolean>;
10459
+ /** Whether the active item is this item or somewhere in its subtree. */
10460
+ readonly containsActive: Signal<boolean>;
10461
+ /**
10462
+ * Whether this item's nested group is expanded: always when the TOC is
10463
+ * `defaultOpen`, otherwise only along the branch leading to the active item.
10464
+ */
10465
+ readonly isOpen: Signal<boolean>;
10466
+ private readonly siblings;
10467
+ private readonly index;
10468
+ private readonly numberPrefix;
10469
+ /** Hierarchical number base without trailing dot, e.g. `2` or `2.1`. */
10470
+ readonly numberBase: Signal<string>;
10471
+ /** Rendered number — `1.` at the top level, `1.1` when nested. */
10472
+ readonly numberLabel: Signal<string>;
10473
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsItemComponent, never>;
10474
+ 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>;
10475
+ }
10476
+
10477
+ /**
10478
+ * Marks projected content as the trailing suffix of a
10479
+ * `tedi-table-of-contents-item`. The item renders it right-aligned at the end of
10480
+ * the row — e.g. a `tedi-tag`.
10481
+ */
10482
+ declare class TableOfContentsItemSuffixDirective {
10483
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsItemSuffixDirective, never>;
10484
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableOfContentsItemSuffixDirective, "[tediTocItemSuffix]", never, {}, {}, never, never, true, never>;
10485
+ }
10486
+
10487
+ /**
10488
+ * Mobile variant of `tedi-table-of-contents`: a bottom bar that opens the list
10489
+ * in a bottom-sheet overlay. Takes the same `tedi-table-of-contents-item`
10490
+ * children as the desktop card; render it on small viewports.
10491
+ *
10492
+ * It provides itself as `TableOfContentsComponent` so the projected items
10493
+ * resolve their context (`activeId`, `numbered`, `items`) exactly as they do
10494
+ * inside the desktop component.
10495
+ */
10496
+ declare class TableOfContentsCollapsibleComponent implements OnDestroy {
10497
+ /**
10498
+ * Heading shown on the bar and sheet. Defaults to the localised "Table of
10499
+ * contents" label.
10500
+ */
10501
+ readonly heading: _angular_core.InputSignal<string | null | undefined>;
10502
+ /** Id of the currently active item. */
10503
+ readonly activeId: _angular_core.InputSignal<string | undefined>;
10504
+ /**
10505
+ * Whether nested items are expanded by default. When `false`, a branch reveals
10506
+ * its sub-items only while it is on the active trail. Mirrors
10507
+ * `tedi-table-of-contents` so projected items resolve it via the shared root.
10508
+ * @default true
10509
+ */
10510
+ readonly defaultOpen: _angular_core.InputSignal<boolean>;
10511
+ /** Show auto-generated hierarchical numbers (`1.`, `2.`, `2.1`, …). */
10512
+ readonly numbered: _angular_core.InputSignal<boolean>;
10513
+ /**
10514
+ * Draws a divider under each item except the last — sub-items included — so the
10515
+ * sheet's list reads as a set of separated rows. Mirrors `tedi-table-of-contents`.
10516
+ * @default false
10517
+ */
10518
+ readonly bordered: _angular_core.InputSignal<boolean>;
10519
+ /**
10520
+ * Pin the bar to the bottom of the viewport. Set `false` to render it inline.
10521
+ */
10522
+ readonly sticky: _angular_core.InputSignal<boolean>;
10523
+ /**
10524
+ * Hide the bar while the user scrolls down and reveal it when they scroll up,
10525
+ * keeping the reading area clear. Watches window scroll by default; set
10526
+ * `scrollContainer` to watch a scrollable element instead.
10527
+ * @default false
10528
+ */
10529
+ readonly hideOnScroll: _angular_core.InputSignal<boolean>;
10530
+ /**
10531
+ * Element whose scroll drives `hideOnScroll`. Defaults to the window; set it to
10532
+ * the scrollable container when the content scrolls inside a region rather than
10533
+ * the whole page.
10534
+ */
10535
+ readonly scrollContainer: _angular_core.InputSignal<HTMLElement | undefined>;
10536
+ /**
10537
+ * Accessible name for the sheet's navigation landmark and dialog. Defaults to
10538
+ * the visible title.
10539
+ */
10540
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
10541
+ /** Top-level items, read by items to compute their hierarchical numbers. */
10542
+ readonly items: _angular_core.Signal<readonly any[]>;
10543
+ private readonly dialog;
10544
+ private readonly overlay;
10545
+ private readonly translations;
10546
+ private readonly platformId;
10547
+ private readonly zone;
10548
+ private readonly sheet;
10549
+ private dialogRef?;
10550
+ readonly open: _angular_core.WritableSignal<boolean>;
10551
+ /** True while the sticky bar is hidden by a scroll-down gesture. */
10552
+ readonly barHidden: _angular_core.WritableSignal<boolean>;
10553
+ private lastScrollY;
10554
+ private ticking;
10555
+ private scrollTarget?;
10556
+ private readonly onScroll;
10557
+ constructor();
10558
+ private currentScrollY;
10559
+ private readonly titleLabel;
10560
+ readonly openLabel: _angular_core.Signal<string>;
10561
+ readonly closeLabel: _angular_core.Signal<string>;
10562
+ readonly title: _angular_core.Signal<string>;
10563
+ /** Accessible name for the nav/dialog — the `ariaLabel` override or the title. */
10564
+ readonly navLabel: _angular_core.Signal<string>;
10565
+ toggle(open: boolean): void;
10566
+ close(): void;
10567
+ ngOnDestroy(): void;
10568
+ private handleScroll;
10569
+ onListClick(event: Event): void;
10570
+ private openSheet;
10571
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableOfContentsCollapsibleComponent, never>;
10572
+ 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>;
10573
+ }
10574
+
9818
10575
  /**
9819
10576
  * Root of the Tabs compound component. Wraps `tedi-tabs-list` and
9820
10577
  * `tedi-tabs-content` elements and owns the active-tab state, which the list,
@@ -10336,7 +11093,7 @@ declare class StatusBadgeComponent {
10336
11093
  */
10337
11094
  icon: _angular_core.InputSignal<string>;
10338
11095
  classes: _angular_core.Signal<string[]>;
10339
- ariaLive: _angular_core.Signal<"assertive" | "polite" | null>;
11096
+ ariaLive: _angular_core.Signal<"polite" | "assertive" | null>;
10340
11097
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBadgeComponent, never>;
10341
11098
  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>;
10342
11099
  }
@@ -10416,6 +11173,12 @@ declare const TEDI_TRANSLATION_DEFAULT_TOKEN: InjectionToken<Language>;
10416
11173
 
10417
11174
  declare function cookieSignal<T>(key: string, initialValue: T): _angular_core.WritableSignal<T>;
10418
11175
 
11176
+ /**
11177
+ * Logs a deprecation warning once per component, in dev mode only.
11178
+ * @internal
11179
+ */
11180
+ declare function warnDeprecated(name: string, message: string): void;
11181
+
10419
11182
  declare function getFocusableElements(container: HTMLElement): HTMLElement[];
10420
11183
 
10421
11184
  /** Horizontal gap (px) between tags in a single row. */
@@ -10460,6 +11223,6 @@ declare function isValidTime(time: string | null | undefined): boolean;
10460
11223
  */
10461
11224
  declare function normalizeTime(input: string): string | null;
10462
11225
 
10463
- export { AVAILABLE_LANGUAGES, AccordionComponent, AccordionItemComponent, AccordionItemContentComponent, AccordionItemHeaderComponent, AlertComponent, AttachmentActionsComponent, AttachmentComponent, BREAKPOINTS, BaseButtonDirective, BreadcrumbItemDirective, BreadcrumbSeparatorDirective, BreadcrumbsComponent, BreakpointService, ButtonComponent, ButtonGroupButtonDirective, ButtonGroupComponent, COUNTER_TAG_WIDTH, CalendarComponent, CardButtonComponent, CardComponent, CardContentComponent, CardHeaderComponent, CardIconComponent, CardRowComponent, CarouselComponent, CarouselContentComponent, CarouselFooterComponent, CarouselHeaderComponent, CarouselIndicatorsComponent, CarouselNavigationComponent, CarouselSlideDirective, CheckboxCardComponent, CheckboxCardGroupComponent, CheckboxComponent, CheckboxGroupComponent, ClosingButtonComponent, ColComponent, CollapseButtonComponent, CollapseComponent, DROPDOWN_API, DROPDOWN_CONTENT_API, DateFieldComponent, DatePickerComponent, DropdownComponent, DropdownContentComponent, DropdownItemComponent, DropdownItemValueComponent, DropdownItemValueLabelComponent, DropdownItemValueMetaComponent, DropdownTriggerDirective, EllipsisComponent, EmptyStateComponent, FeedbackTextComponent, FilterComponent, FilterContentDirective, FilterGroupComponent, FilterPrependDirective, FooterBodyComponent, FooterBottomComponent, FooterComponent, FooterSectionComponent, FooterSideComponent, FormFieldComponent, FormFieldExtraDirective, HeaderActionsComponent, HeaderBottomComponent, HeaderComponent, HeaderContentComponent, HeaderLanguageComponent, HeaderLoginComponent, HeaderLogoComponent, HeaderLogoDarkDirective, HeaderLogoutComponent, HeaderMobileButtonComponent, HeaderProfileComponent, HeaderRoleComponent, HeaderRoleContentDirective, HeaderRoleNoResultsDirective, HeaderRoleTitleDirective, HeaderSearchComponent, HeaderTopComponent, HeadingWithIconComponent, HideAtDirective, HorizontalPushHandler, HorizontalStepperComponent, HorizontalStepperItemComponent, IconComponent, InfoButtonComponent, InfoTooltipComponent, InputGroupComponent, InputGroupPrefixDirective, InputGroupSuffixDirective, LANGUAGE_COOKIE_NAME, LANGUAGE_FALLBACK_VALUE, LabelComponent, LabelRowComponent, LinkComponent, ListComponent, MODAL_DATA, MODAL_SIZE, ModalComponent, ModalContentComponent, ModalFooterComponent, ModalHeaderComponent, ModalRef, ModalService, NumberFieldComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, PopoverTriggerDirective, ProgressBarComponent, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RowComponent, ScrollFadeComponent, SearchComponent, SelectComponent, SelectOptionTemplateDirective, SelectTooltipTemplateDirective, SelectValueTemplateDirective, SeparatorComponent, ShowAtDirective, SideNavComponent, SideNavDropdownComponent, SideNavDropdownGroupComponent, SideNavDropdownItemComponent, SideNavGroupTitleComponent, SideNavItemComponent, SideNavOverlayComponent, SideNavToggleComponent, SkeletonBlockComponent, SkeletonComponent, SliderComponent, SpecialOptionControls, SpinnerComponent, StatusBadgeComponent, StatusIndicatorComponent, TAG_GAP, TEDI_FIELD_CONTEXT, TEDI_FORM_FIELD_CONTROL, TEDI_INPUT_GROUP, TEDI_TABLE_CONTEXT, TEDI_THEME_DEFAULT_TOKEN, TEDI_TRANSLATION_DEFAULT_TOKEN, THEME_CLASS_PREFIX, THEME_COOKIE_NAME, THEME_FALLBACK_VALUE, TOAST_DEFAULT_DURATION, TabsComponent, TabsContentComponent, TabsListComponent, TabsTriggerComponent, TagComponent, TediPaginationResultsDirective, TediTableColumnsMenuComponent, TediTableComponent, TediTableHeaderButtonComponent, TediTableToolbarComponent, TediTranslationPipe, TediTranslationService, TextComponent, TextFieldComponent, TextGroupComponent, TextGroupLabelComponent, TextGroupValueComponent, TextareaComponent, ThemeService, TimeFieldComponent, TimePickerComponent, TimelineComponent, TimelineDescriptionComponent, TimelineItemComponent, TimelineTimingsBottomDirective, TimelineTitleComponent, ToastComponent, ToastService, ToggleComponent, TooltipComponent, TooltipContentComponent, TooltipTriggerComponent, TruncateComponent, VerticalSpacingDirective, VerticalSpacingItemDirective, addDays, addMonths, addYears, breakpointInput, buildMonthGrid, calculateArrowOffset, calculateVisibleTagCount, computeGroupSpans, controlDescribedBy, cookieSignal, createTablePersistence, deriveControlState, endOfMonth, formatDate, formatLocaleDate, formatLocaleDateHint, formatLocaleDateLong, formatMonthYear, generateUUID, getCardBorderPlacementColor, getDaysInMonth, getFirstDayOfWeek, getFocusableElements, getISOWeek, getMonthNames, getPaddingCssVariables, getPlacementFromPositionChange, getWeekdayNames, groupRowSpan, injectTediTableContext, isAfterDay, isBeforeDay, isDateInRange, isSameDay, isSameMonth, isSameYear, isValidTime, matchAny, matchDate, normalizeTime, parseDate, parseLocaleDate, provideTedi, resolveCardBorderRadius, startOfMonth, startOfWeek, toConnectedPositions, toggleDateInArray, usePagination };
10464
- export type { AccordionInputs, AlertRole, AlertSize, AlertTitleType, AlertType, AlertVariant, AlignItems, AlignSelf, ArrowOffset, ArrowType, AttachmentDirection, BreadcrumbsInputs, BreadcrumbsVariant, Breakpoint, BreakpointFlag, BreakpointInput, BreakpointInputs, BreakpointInputsWithoutSignals, BreakpointObject, BulletColor, ButtonGroupDropdownLabelMode, ButtonSize, ButtonVariant, CalendarView, CardBackground, CardBorderPlacement, CardBorderRadius, CardBorderType, CardContentInputs, CardIconSize, CardIconType, CardInputs, CardPadding, CardPaddingNumber, CardResolvedCorners, CardRowDirection, CardRowInputs, CarouselIndicatorsVariant, CheckboxCardVariant, CheckboxGroupDirection, CheckboxSize, ClosingButtonIconSize, ClosingButtonSize, ColInputs, ColWidth, CollapseButtonArrowType, CollapseButtonSize, CollapseSize, Cols, ColumnReorderPhase, CompareWithFn, ComponentInputs, ControlDescribedBy, DateAfter, DateBefore, DateFieldMode, DateInterval, DatePickerDay, DatePickerInputSize, DatePickerInputState, DatePickerMatcher, DatePickerSelectorMode, DatePickerView, DateRange, DayOfWeek, DerivedControlState, DropdownApi, DropdownContentApi, DropdownItemValueLayout, DropdownItemValueType, DropdownPosition, DropdownRole, DropdownTriggerAriaHasPopup, EllipsisPosition, EmptyStateSize, EmptyStateType, FeedbackTextPosition, FeedbackTextType, FieldContext, FilterOption, FilterSize, FilterVariant, FooterSidePlacement, FooterSidePosition, FormFieldControl, FormFieldIcon, Gap, GroupByFn, HeaderContentAlignment, HeaderLanguage, HeaderLanguageLabelPosition, HeaderLoginInputs, HeaderLoginSize, HeaderLogoutInputs, HeaderLogoutSize, HeaderProfileInputs, HeaderProfileSize, HeaderSearchMobileLabels, HeaderSearchMobileVariant, HeaderTopAlignment, HeaderTopInputs, HeadingLevel, HeadingModifiers, HorizontalStepperBackground, IconBackgroundColor, IconColor, IconSize, IconType, IconVariant, InputGroupContext, InputSize, InputState, JustifyItems, JustifySelf, LabelColor, LabelSize, LabelVisuallyHidden, Language, LinkInputs, LinkSize, LinkVariant, Matcher, ModalConfig, ModalFullscreen, ModalPosition, ModalScrollBehavior, ModalSize, ModalWidth, ModalWidthPreset, NumberFieldSize, OverlayPosition, OverlaySide, PaginationBackground, PaginationDividerPosition, PaginationItem, PaginationItemType, PaginationLabels, PaginationVisibility, PopoverPosition, PopoverWidth, PopoverWidthPreset, ProgressBarAnnounce, ProgressBarInputs, ProgressBarLabelPosition, ProgressBarSize, ProgressBarValuePosition, RadioCardVariant, RadioGroupDirection, RadioSize, Representative, RepresentativeIcon, RowInputs, ScrollFadePosition, ScrollFadeScrollbar, ScrollFadeSize, SearchButton, SearchSize, SelectInputSize, SelectOption, SelectOptionContext, SelectOptionGroup, SelectValueContext, SeparatorAxis, SeparatorColor, SeparatorDotSize, SeparatorSpacing, SeparatorSpacingValue, SeparatorThickness, SeparatorVariant, SideNavItemSize, SkeletonBlockHeight, SkeletonBlockInputs, SkeletonBlockTextHeight, SkeletonBlockWidth, SliderHideLabel, SpinnerColor, SpinnerSize, StatusBadgeColor, StatusBadgeSize, StatusBadgeStatus, StatusBadgeVariant, StatusIndicatorPosition, StatusIndicatorSize, StatusIndicatorType, TEDITheme, TableColumnMeta, TableControlColumn, TableControlColumnOrder, TableExpandTrigger, TableFilterModalData, TableFilterOptions, TablePaginationOptions, TablePersistOptions, TablePersistenceController, TableSelectionMode, TableSize, TableState, TableStatePatch, TabsOverflowMode, TagEllipsis, TagOverflowOptions, TagType, TediColumnDef, TediConfig, TediTableContextValue, TediTableFilterContext, TextColor, TextGroupInputs, TextGroupType, TextModifiers, TextareaSize, Theme, TimeFieldFullscreen, TimeFieldModal, TimeFieldPickerTrigger, TimeFieldPickerVariant, TimeFieldUseNativePicker, TimePickerVariant, TimelineCardPadding, TimelineVariant, ToastConfig, ToastPosition, ToastRole, ToastType, ToggleSize, ToggleType, ToggleVariant, TooltipOpenWith, TooltipPosition, TooltipWidth, UsePaginationArgs, VerticalSpacingSize, VirtualRow };
11226
+ 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, warnDeprecated };
11227
+ 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 };
10465
11228
  //# sourceMappingURL=index.d.ts.map