@tedi-design-system/angular 7.1.0-rc.9 → 7.2.0-rc.1

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,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterContentChecked, AfterViewInit, InputSignal, Signal, PipeTransform, OnInit, OnDestroy, ElementRef, TemplateRef, Injector, InjectionToken, WritableSignal, AfterViewChecked, AfterContentInit, QueryList, EnvironmentProviders } from '@angular/core';
2
+ import { AfterContentChecked, AfterViewInit, InputSignal, Signal, PipeTransform, OnInit, OnDestroy, TemplateRef, ElementRef, Injector, InjectionToken, WritableSignal, AfterViewChecked, AfterContentInit, QueryList, EnvironmentProviders } from '@angular/core';
3
3
  import { _IdGenerator } from '@angular/cdk/a11y';
4
4
  import * as _tedi_design_system_angular_tedi from '@tedi-design-system/angular/tedi';
5
5
  import { ControlValueAccessor, NgControl } from '@angular/forms';
@@ -9,10 +9,11 @@ import { Table, VisibilityState, ColumnOrderState, ColumnSizingState, RowSelecti
9
9
  import * as _angular_cdk_overlay from '@angular/cdk/overlay';
10
10
  import { ConnectedOverlayPositionChange, ConnectedPosition, CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';
11
11
  import { CdkListbox } from '@angular/cdk/listbox';
12
+ import * as i1 from '@angular/cdk/scrolling';
13
+ import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
12
14
  import { Observable } from 'rxjs';
13
15
  import { DialogRef } from '@angular/cdk/dialog';
14
16
  import { ComponentType } from '@angular/cdk/portal';
15
- import * as i1 from '@angular/cdk/scrolling';
16
17
 
17
18
  type IconSize = 8 | 12 | 16 | 18 | 22 | 24 | 36 | 48 | "inherit";
18
19
  type IconVariant = "filled" | "outlined";
@@ -819,6 +820,34 @@ declare const translationsMap: {
819
820
  en: string;
820
821
  ru: string;
821
822
  };
823
+ "table.select-column": {
824
+ description: string;
825
+ components: string[];
826
+ et: string;
827
+ en: string;
828
+ ru: string;
829
+ };
830
+ "table.expand-column": {
831
+ description: string;
832
+ components: string[];
833
+ et: string;
834
+ en: string;
835
+ ru: string;
836
+ };
837
+ "table.reorder-column": {
838
+ description: string;
839
+ components: string[];
840
+ et: string;
841
+ en: string;
842
+ ru: string;
843
+ };
844
+ "table.scroll-region": {
845
+ description: string;
846
+ components: string[];
847
+ et: string;
848
+ en: string;
849
+ ru: string;
850
+ };
822
851
  "table.expand-row": {
823
852
  description: string;
824
853
  components: string[];
@@ -917,6 +946,13 @@ declare const translationsMap: {
917
946
  en: string;
918
947
  ru: string;
919
948
  };
949
+ "scroll-fade.label": {
950
+ description: string;
951
+ components: string[];
952
+ et: string;
953
+ en: string;
954
+ ru: string;
955
+ };
920
956
  "pagination.title": {
921
957
  description: string;
922
958
  components: string[];
@@ -1519,6 +1555,13 @@ declare const translationsMap: {
1519
1555
  en: string;
1520
1556
  ru: string;
1521
1557
  };
1558
+ "time-picker.times": {
1559
+ description: string;
1560
+ components: string[];
1561
+ et: string;
1562
+ en: string;
1563
+ ru: string;
1564
+ };
1522
1565
  "time-field.clear": {
1523
1566
  description: string;
1524
1567
  components: string[];
@@ -2578,12 +2621,10 @@ type TextGroupInputs = {
2578
2621
  */
2579
2622
  labelWidth: string | undefined;
2580
2623
  };
2581
- declare class TextGroupComponent implements BreakpointInputs<TextGroupInputs>, AfterContentChecked {
2624
+ declare class TextGroupComponent implements BreakpointInputs<TextGroupInputs> {
2582
2625
  type: _angular_core.InputSignal<TextGroupType>;
2583
2626
  labelWidth: _angular_core.InputSignal<string | undefined>;
2584
2627
  breakpointService: BreakpointService;
2585
- readonly textGroupLabel: _angular_core.Signal<ElementRef<any> | undefined>;
2586
- readonly labelText: _angular_core.WritableSignal<string | null>;
2587
2628
  xs: _angular_core.InputSignal<TextGroupInputs | undefined>;
2588
2629
  sm: _angular_core.InputSignal<TextGroupInputs | undefined>;
2589
2630
  md: _angular_core.InputSignal<TextGroupInputs | undefined>;
@@ -2592,9 +2633,8 @@ declare class TextGroupComponent implements BreakpointInputs<TextGroupInputs>, A
2592
2633
  xxl: _angular_core.InputSignal<TextGroupInputs | undefined>;
2593
2634
  breakpointInputs: _angular_core.Signal<TextGroupInputs>;
2594
2635
  classes: _angular_core.Signal<string>;
2595
- ngAfterContentChecked(): void;
2596
2636
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextGroupComponent, never>;
2597
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextGroupComponent, "tedi-text-group", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "xs": { "alias": "xs"; "required": false; "isSignal": true; }; "sm": { "alias": "sm"; "required": false; "isSignal": true; }; "md": { "alias": "md"; "required": false; "isSignal": true; }; "lg": { "alias": "lg"; "required": false; "isSignal": true; }; "xl": { "alias": "xl"; "required": false; "isSignal": true; }; "xxl": { "alias": "xxl"; "required": false; "isSignal": true; }; }, {}, ["textGroupLabel"], ["tedi-text-group-label", "tedi-text-group-value"], true, never>;
2637
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextGroupComponent, "tedi-text-group", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "xs": { "alias": "xs"; "required": false; "isSignal": true; }; "sm": { "alias": "sm"; "required": false; "isSignal": true; }; "md": { "alias": "md"; "required": false; "isSignal": true; }; "lg": { "alias": "lg"; "required": false; "isSignal": true; }; "xl": { "alias": "xl"; "required": false; "isSignal": true; }; "xxl": { "alias": "xxl"; "required": false; "isSignal": true; }; }, {}, never, ["tedi-text-group-label", "tedi-text-group-value"], true, never>;
2598
2638
  }
2599
2639
 
2600
2640
  declare class TextGroupLabelComponent {
@@ -2622,6 +2662,8 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
2622
2662
  readonly fade: _angular_core.InputSignal<boolean>;
2623
2663
  /** Transition duration in ms */
2624
2664
  readonly transitionMs: _angular_core.InputSignal<number>;
2665
+ /** Accessible label for the carousel region. Falls back to the `carousel` translation. */
2666
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
2625
2667
  readonly translationService: TediTranslationService;
2626
2668
  private readonly breakpointService;
2627
2669
  private readonly host;
@@ -2629,6 +2671,7 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
2629
2671
  readonly track: _angular_core.Signal<ElementRef<HTMLDivElement>>;
2630
2672
  readonly slideElements: _angular_core.Signal<readonly ElementRef<HTMLDivElement>[]>;
2631
2673
  readonly slides: _angular_core.Signal<readonly CarouselSlideDirective[]>;
2674
+ readonly resolvedAriaLabel: _angular_core.Signal<string>;
2632
2675
  readonly trackIndex: _angular_core.WritableSignal<number>;
2633
2676
  readonly animate: _angular_core.WritableSignal<boolean>;
2634
2677
  readonly viewportWidth: _angular_core.WritableSignal<number>;
@@ -2685,7 +2728,7 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
2685
2728
  */
2686
2729
  announceSlideChange(): void;
2687
2730
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CarouselContentComponent, never>;
2688
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselContentComponent, "tedi-carousel-content", never, { "slidesPerView": { "alias": "slidesPerView"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "fade": { "alias": "fade"; "required": false; "isSignal": true; }; "transitionMs": { "alias": "transitionMs"; "required": false; "isSignal": true; }; }, {}, ["slides"], never, true, never>;
2731
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselContentComponent, "tedi-carousel-content", never, { "slidesPerView": { "alias": "slidesPerView"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "fade": { "alias": "fade"; "required": false; "isSignal": true; }; "transitionMs": { "alias": "transitionMs"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, ["slides"], never, true, never>;
2689
2732
  }
2690
2733
 
2691
2734
  declare class CarouselComponent {
@@ -3087,12 +3130,12 @@ declare class CalendarComponent implements ControlValueAccessor {
3087
3130
  */
3088
3131
  readonly shouldDisableYear: _angular_core.InputSignal<YearPredicate$1 | undefined>;
3089
3132
  /**
3090
- * Earliest year offered in the year grid/dropdown. Defaults to 10 years before
3091
- * the current year when `null`.
3133
+ * Earliest year offered in the year grid/dropdown. Defaults to 100 years
3134
+ * before the current year when `null`.
3092
3135
  */
3093
3136
  readonly minYear: _angular_core.InputSignal<number | null>;
3094
3137
  /**
3095
- * Latest year offered in the year grid/dropdown. Defaults to 10 years after
3138
+ * Latest year offered in the year grid/dropdown. Defaults to 20 years after
3096
3139
  * the current year when `null`.
3097
3140
  */
3098
3141
  readonly maxYear: _angular_core.InputSignal<number | null>;
@@ -3252,12 +3295,20 @@ declare class PopoverTriggerDirective {
3252
3295
  * @default false
3253
3296
  */
3254
3297
  readonly underline: _angular_core.InputSignal<boolean>;
3298
+ /**
3299
+ * When `false`, the trigger drops its `button` role and dialog ARIA
3300
+ * (`aria-haspopup`, `aria-expanded`, `aria-controls`). Use this when the element
3301
+ * is only a positioning anchor and an inner control is the real, labelled trigger
3302
+ * — e.g. a field wrapper whose icon button opens the popover.
3303
+ * @default true
3304
+ */
3305
+ readonly interactive: _angular_core.InputSignal<boolean>;
3255
3306
  readonly host: ElementRef<HTMLElement>;
3256
3307
  readonly popover: PopoverComponent;
3257
3308
  readonly overlayOrigin: CdkOverlayOrigin;
3258
3309
  onClick(): void;
3259
3310
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverTriggerDirective, never>;
3260
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PopoverTriggerDirective, "[tedi-popover-trigger]", never, { "underline": { "alias": "underline"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof _angular_cdk_overlay.CdkOverlayOrigin; inputs: {}; outputs: {}; }]>;
3311
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PopoverTriggerDirective, "[tedi-popover-trigger]", never, { "underline": { "alias": "underline"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof _angular_cdk_overlay.CdkOverlayOrigin; inputs: {}; outputs: {}; }]>;
3261
3312
  }
3262
3313
 
3263
3314
  type PopoverPosition = OverlayPosition;
@@ -3343,6 +3394,16 @@ declare class PopoverComponent {
3343
3394
  private getPageFocusableElements;
3344
3395
  private focusElementAfterTrigger;
3345
3396
  private focusElementBeforeTrigger;
3397
+ /**
3398
+ * Whether the target is inside this popover's own overlay or a child overlay
3399
+ * opened from within it — such interactions must not dismiss the popover.
3400
+ *
3401
+ * Child overlays (e.g. a date-picker month dropdown) share the CDK overlay
3402
+ * container but render in their own pane, stacked ON TOP (after this pane in
3403
+ * DOM order). An overlay stacked BELOW (e.g. a tedi-modal hosting this
3404
+ * popover) precedes this pane, so clicking it must dismiss.
3405
+ */
3406
+ private isInsideOverlay;
3346
3407
  private handleClosePopoverEvent;
3347
3408
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverComponent, never>;
3348
3409
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<PopoverComponent, "tedi-popover", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "preventOverflow": { "alias": "preventOverflow"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "withBorder": { "alias": "withBorder"; "required": false; "isSignal": true; }; "withArrow": { "alias": "withArrow"; "required": false; "isSignal": true; }; "lockScroll": { "alias": "lockScroll"; "required": false; "isSignal": true; }; "timeoutDelay": { "alias": "timeoutDelay"; "required": false; "isSignal": true; }; }, {}, ["popoverTrigger", "popoverContent"], ["[tedi-popover-trigger]", "tedi-popover-content"], true, never>;
@@ -3941,6 +4002,16 @@ declare class TediTableComponent<TData> {
3941
4002
  * @default undefined
3942
4003
  */
3943
4004
  readonly getSubRows: _angular_core.InputSignal<((row: TData) => TData[] | undefined) | undefined>;
4005
+ /**
4006
+ * Accessor returning a stable, unique id for a row, passed straight through
4007
+ * to TanStack's `getRowId`. By default rows are keyed by their index, so
4008
+ * selection / expansion state breaks as soon as the data changes (filtering,
4009
+ * adding, removing, reordering rows). Key by an entity id instead — e.g.
4010
+ * `getRowId: (row) => row.id` — to keep `rowSelection` / `expanded` stable
4011
+ * across data updates and controllable from the outside by that id.
4012
+ * @default undefined
4013
+ */
4014
+ readonly getRowId: _angular_core.InputSignal<((originalRow: TData, index: number, parent?: Row<TData>) => string) | undefined>;
3944
4015
  /**
3945
4016
  * Table-level row grouping key. When set, consecutive rendered rows with an
3946
4017
  * equal key form a group, and:
@@ -4117,6 +4188,10 @@ declare class TediTableComponent<TData> {
4117
4188
  protected readonly rowDetailsLabel: Signal<string>;
4118
4189
  protected readonly dragColumnLabel: Signal<string>;
4119
4190
  protected readonly dragRowLabel: Signal<string>;
4191
+ protected readonly selectColumnLabel: Signal<string>;
4192
+ protected readonly expandColumnLabel: Signal<string>;
4193
+ protected readonly reorderColumnLabel: Signal<string>;
4194
+ protected readonly scrollRegionLabel: Signal<string>;
4120
4195
  /** Currently picked-up column id (during keyboard reordering), or `null`. */
4121
4196
  private readonly _pickedUpColumnId;
4122
4197
  /** Column order snapshot captured when picking up — restored on cancel. */
@@ -4216,6 +4291,14 @@ declare class TediTableComponent<TData> {
4216
4291
  protected readonly isSomePageRowsSelected: Signal<boolean>;
4217
4292
  constructor();
4218
4293
  private applyPatch;
4294
+ /**
4295
+ * Clears every active column filter in one call, resetting all `filterable`
4296
+ * columns at once. Routes through the same state machinery as the per-column
4297
+ * **Clear** buttons, so it updates internal state, respects a controlled
4298
+ * `state` input, and emits `(stateChange)`. Grab a component reference (e.g.
4299
+ * a template ref `#table` or `viewChild`) to call it from consumer code.
4300
+ */
4301
+ clearFilters(): void;
4219
4302
  protected handleRowClick(event: Event, row: Row<TData>): void;
4220
4303
  /**
4221
4304
  * True when the click originated on an interactive control between the event
@@ -4227,6 +4310,7 @@ declare class TediTableComponent<TData> {
4227
4310
  * the row is not interactive or no resolver is provided. */
4228
4311
  protected rowAriaLabelFor(row: Row<TData>): string | null;
4229
4312
  protected rowExpandsOnClick(row: Row<TData>): boolean;
4313
+ protected rowHasNestedInteractive(row: Row<TData>): boolean;
4230
4314
  protected handleRowMouseEnter(row: Row<TData>): void;
4231
4315
  protected handleRowMouseLeave(): void;
4232
4316
  /**
@@ -4344,7 +4428,7 @@ declare class TediTableComponent<TData> {
4344
4428
  };
4345
4429
  }): TableColumnMeta | undefined;
4346
4430
  protected getHeaderAriaSort(column: ReturnType<Table<TData>["getAllLeafColumns"]>[number]): "ascending" | "descending" | "none" | null;
4347
- protected getHeaderLabel(column: ReturnType<Table<TData>["getAllLeafColumns"]>[number]): string | null;
4431
+ protected getSrOnlyHeaderLabel(column: ReturnType<Table<TData>["getAllLeafColumns"]>[number]): string | null;
4348
4432
  protected resolveColumnLabel(column: ReturnType<Table<TData>["getAllLeafColumns"]>[number]): string;
4349
4433
  protected filterLabel(column: ReturnType<Table<TData>["getAllLeafColumns"]>[number]): string;
4350
4434
  protected filterPlaceholder(): string;
@@ -4425,6 +4509,7 @@ declare class TediTableComponent<TData> {
4425
4509
  * nothing.
4426
4510
  */
4427
4511
  private readonly filterDrafts;
4512
+ private readonly filterDraftBaselines;
4428
4513
  /**
4429
4514
  * Normalises `filterable: true | TableFilterOptions | undefined | false`
4430
4515
  * into `TableFilterOptions | null`. `null` means the column did not opt in.
@@ -4452,6 +4537,22 @@ declare class TediTableComponent<TData> {
4452
4537
  protected filterApplyLabel(): string;
4453
4538
  protected filterClearLabel(): string;
4454
4539
  private getFilterDraft;
4540
+ /**
4541
+ * Structural equality for filter values (strings, numbers, bigints, arrays,
4542
+ * plain objects). Filter values are consumer-supplied `unknown`, so the
4543
+ * comparison must never throw: reference-equal values (including equal
4544
+ * primitives and bigints) short-circuit, and anything JSON can't serialise
4545
+ * (bigint mismatches, cyclic structures) falls back to "changed".
4546
+ */
4547
+ private filterValuesEqual;
4548
+ /**
4549
+ * Realigns each open/created filter draft with the applied filter state
4550
+ * whenever the latter changes externally (`clearFilters()`, controlled
4551
+ * `state`, a removed filter chip). A draft is only overwritten when its
4552
+ * column's applied value actually moved since the draft last synced — so an
4553
+ * in-progress, unapplied draft (applied value unchanged) is left intact.
4554
+ */
4555
+ private reconcileFilterDrafts;
4455
4556
  /**
4456
4557
  * Called when the filter trigger button is clicked. If `clearOnClose` is
4457
4558
  * set, the draft is reset to the currently-applied value every time the
@@ -4487,7 +4588,7 @@ declare class TediTableComponent<TData> {
4487
4588
  };
4488
4589
  }, cellContext: CellContext<TData, unknown>): number | null;
4489
4590
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TediTableComponent<any>, never>;
4490
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TediTableComponent<any>, "tedi-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "verticalBorders": { "alias": "verticalBorders"; "required": false; "isSignal": true; }; "borderless": { "alias": "borderless"; "required": false; "isSignal": true; }; "stickyFirstColumn": { "alias": "stickyFirstColumn"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "fixedLayout": { "alias": "fixedLayout"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "activeRowId": { "alias": "activeRowId"; "required": false; "isSignal": true; }; "selectedRowHighlight": { "alias": "selectedRowHighlight"; "required": false; "isSignal": true; }; "rowHover": { "alias": "rowHover"; "required": false; "isSignal": true; }; "enableRowSelection": { "alias": "enableRowSelection"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "enableColumnFilters": { "alias": "enableColumnFilters"; "required": false; "isSignal": true; }; "renderSubComponent": { "alias": "renderSubComponent"; "required": false; "isSignal": true; }; "getRowCanExpand": { "alias": "getRowCanExpand"; "required": false; "isSignal": true; }; "expandTrigger": { "alias": "expandTrigger"; "required": false; "isSignal": true; }; "expandButtonVariant": { "alias": "expandButtonVariant"; "required": false; "isSignal": true; }; "expandButtonLabel": { "alias": "expandButtonLabel"; "required": false; "isSignal": true; }; "getSubRows": { "alias": "getSubRows"; "required": false; "isSignal": true; }; "groupRowsBy": { "alias": "groupRowsBy"; "required": false; "isSignal": true; }; "rowGroupDividers": { "alias": "rowGroupDividers"; "required": false; "isSignal": true; }; "controlColumnOrder": { "alias": "controlColumnOrder"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "paginationTop": { "alias": "paginationTop"; "required": false; "isSignal": true; }; "manualPagination": { "alias": "manualPagination"; "required": false; "isSignal": true; }; "manualSorting": { "alias": "manualSorting"; "required": false; "isSignal": true; }; "manualFiltering": { "alias": "manualFiltering"; "required": false; "isSignal": true; }; "pageCount": { "alias": "pageCount"; "required": false; "isSignal": true; }; "rowCount": { "alias": "rowCount"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "defaultState": { "alias": "defaultState"; "required": false; "isSignal": true; }; "persist": { "alias": "persist"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "placeholderRole": { "alias": "placeholderRole"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "rowAriaLabel": { "alias": "rowAriaLabel"; "required": false; "isSignal": true; }; "reorderableRows": { "alias": "reorderableRows"; "required": false; "isSignal": true; }; "reorderableColumns": { "alias": "reorderableColumns"; "required": false; "isSignal": true; }; }, { "stateChange": "stateChange"; "rowClick": "rowClick"; "rowDrop": "rowDrop"; }, ["customResultsTemplateRef"], ["tedi-table-toolbar", "tedi-table-columns-menu"], true, never>;
4591
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TediTableComponent<any>, "tedi-table", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "verticalBorders": { "alias": "verticalBorders"; "required": false; "isSignal": true; }; "borderless": { "alias": "borderless"; "required": false; "isSignal": true; }; "stickyFirstColumn": { "alias": "stickyFirstColumn"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "fixedLayout": { "alias": "fixedLayout"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "activeRowId": { "alias": "activeRowId"; "required": false; "isSignal": true; }; "selectedRowHighlight": { "alias": "selectedRowHighlight"; "required": false; "isSignal": true; }; "rowHover": { "alias": "rowHover"; "required": false; "isSignal": true; }; "enableRowSelection": { "alias": "enableRowSelection"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "enableColumnFilters": { "alias": "enableColumnFilters"; "required": false; "isSignal": true; }; "renderSubComponent": { "alias": "renderSubComponent"; "required": false; "isSignal": true; }; "getRowCanExpand": { "alias": "getRowCanExpand"; "required": false; "isSignal": true; }; "expandTrigger": { "alias": "expandTrigger"; "required": false; "isSignal": true; }; "expandButtonVariant": { "alias": "expandButtonVariant"; "required": false; "isSignal": true; }; "expandButtonLabel": { "alias": "expandButtonLabel"; "required": false; "isSignal": true; }; "getSubRows": { "alias": "getSubRows"; "required": false; "isSignal": true; }; "getRowId": { "alias": "getRowId"; "required": false; "isSignal": true; }; "groupRowsBy": { "alias": "groupRowsBy"; "required": false; "isSignal": true; }; "rowGroupDividers": { "alias": "rowGroupDividers"; "required": false; "isSignal": true; }; "controlColumnOrder": { "alias": "controlColumnOrder"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "paginationTop": { "alias": "paginationTop"; "required": false; "isSignal": true; }; "manualPagination": { "alias": "manualPagination"; "required": false; "isSignal": true; }; "manualSorting": { "alias": "manualSorting"; "required": false; "isSignal": true; }; "manualFiltering": { "alias": "manualFiltering"; "required": false; "isSignal": true; }; "pageCount": { "alias": "pageCount"; "required": false; "isSignal": true; }; "rowCount": { "alias": "rowCount"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "defaultState": { "alias": "defaultState"; "required": false; "isSignal": true; }; "persist": { "alias": "persist"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "placeholderRole": { "alias": "placeholderRole"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "rowAriaLabel": { "alias": "rowAriaLabel"; "required": false; "isSignal": true; }; "reorderableRows": { "alias": "reorderableRows"; "required": false; "isSignal": true; }; "reorderableColumns": { "alias": "reorderableColumns"; "required": false; "isSignal": true; }; }, { "stateChange": "stateChange"; "rowClick": "rowClick"; "rowDrop": "rowDrop"; }, ["customResultsTemplateRef"], ["tedi-table-toolbar", "tedi-table-columns-menu"], true, never>;
4491
4592
  }
4492
4593
 
4493
4594
  declare const TEDI_TABLE_CONTEXT: InjectionToken<TediTableContextValue<unknown>>;
@@ -4689,6 +4790,14 @@ declare class DropdownItemValueComponent {
4689
4790
  * @default false
4690
4791
  */
4691
4792
  readonly disabled: _angular_core.InputSignal<boolean>;
4793
+ /**
4794
+ * The checkbox/radio only pictures the item's state — the item itself owns the
4795
+ * interaction. Cancelling the default action keeps the browser from toggling the
4796
+ * indicator on its own, which would leave it showing the opposite of `selected`.
4797
+ * The click is left to bubble, so hitting the indicator selects the item just
4798
+ * like hitting anywhere else on it.
4799
+ */
4800
+ onIndicatorClick(event: MouseEvent): void;
4692
4801
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemValueComponent, never>;
4693
4802
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemValueComponent, "tedi-dropdown-item-value", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["tedi-icon, [tediIcon]", "tedi-dropdown-item-value-label", "tedi-dropdown-item-value-meta", "*"], true, never>;
4694
4803
  }
@@ -5407,6 +5516,8 @@ declare class DateInputComponent implements AfterViewChecked {
5407
5516
  readonly showClear: _angular_core.Signal<boolean>;
5408
5517
  readonly iconAriaLabel: _angular_core.Signal<string>;
5409
5518
  readonly clearAriaLabel: _angular_core.Signal<string>;
5519
+ /** Moves focus to the text input. Used by the wrapping field. */
5520
+ focusInput(): void;
5410
5521
  handleInput(event: Event): void;
5411
5522
  handleIconClick(): void;
5412
5523
  handleTagRemove(id: string): void;
@@ -5439,6 +5550,12 @@ interface FormFieldControl<T = unknown> {
5439
5550
  * If implemented, the form field can trigger clearing the value.
5440
5551
  */
5441
5552
  clearField?(): void;
5553
+ /**
5554
+ * Optional method used when the field box itself is clicked. If implemented,
5555
+ * clicking the box padding — which is not part of the control's own hit area —
5556
+ * moves focus into the control, the way clicking the value does.
5557
+ */
5558
+ focus?(): void;
5442
5559
  }
5443
5560
  /**
5444
5561
  * Injection token used by `tedi-form-field` to obtain
@@ -5535,6 +5652,16 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5535
5652
  * the calendar's year navigation/grid. Leave `undefined` to disable nothing.
5536
5653
  */
5537
5654
  readonly shouldDisableYear: _angular_core.InputSignal<YearPredicate | undefined>;
5655
+ /**
5656
+ * Earliest year offered in the calendar's year grid/dropdown. Defaults to 100
5657
+ * years before the current year when `null`.
5658
+ */
5659
+ readonly minYear: _angular_core.InputSignal<number | null>;
5660
+ /**
5661
+ * Latest year offered in the calendar's year grid/dropdown. Defaults to 20
5662
+ * years after the current year when `null`.
5663
+ */
5664
+ readonly maxYear: _angular_core.InputSignal<number | null>;
5538
5665
  /**
5539
5666
  * Whitelist of selectable days — an explicit `Date[]` or a predicate
5540
5667
  * `(date) => boolean`. Every other day is disabled.
@@ -5602,6 +5729,12 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5602
5729
  * (custom popover from that breakpoint up).
5603
5730
  */
5604
5731
  readonly useNativePicker: _angular_core.InputSignal<DateFieldUseNativePicker>;
5732
+ /**
5733
+ * Close the calendar popover when the page (or a scrollable ancestor) scrolls.
5734
+ * Scrolling inside the calendar itself — or its nested year/month dropdown —
5735
+ * keeps it open. Only applies to the popover; the modal is unaffected.
5736
+ */
5737
+ readonly hideOnScroll: _angular_core.InputSignal<boolean>;
5605
5738
  /** Open the calendar in a modal: `true` always, `false` never, breakpoint name → modal below that breakpoint. */
5606
5739
  readonly modal: _angular_core.InputSignal<DateFieldModalInput>;
5607
5740
  /** Make the modal fullscreen: `true` always, `false` never, breakpoint name → fullscreen below that breakpoint. Only applies when the calendar actually opens as a modal. */
@@ -5622,8 +5755,11 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5622
5755
  private readonly breakpointService;
5623
5756
  private readonly modalService;
5624
5757
  private readonly hostEl;
5758
+ private readonly renderer;
5759
+ private readonly document;
5625
5760
  readonly calendar: _angular_core.Signal<CalendarComponent | undefined>;
5626
5761
  readonly dateInput: _angular_core.Signal<DateInputComponent>;
5762
+ private readonly connectedOverlay;
5627
5763
  readonly currentMonth: _angular_core.WritableSignal<Date>;
5628
5764
  readonly overlayOpen: _angular_core.WritableSignal<boolean>;
5629
5765
  private readonly openedBy;
@@ -5631,6 +5767,7 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5631
5767
  private readonly cvaDisabled;
5632
5768
  private readonly formInvalid;
5633
5769
  private modalRef;
5770
+ private scrollListener?;
5634
5771
  private onChange;
5635
5772
  private onTouched;
5636
5773
  readonly fieldDisabled: _angular_core.Signal<boolean>;
@@ -5660,6 +5797,7 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5660
5797
  registerOnTouched(fn: () => void): void;
5661
5798
  setDisabledState(isDisabled: boolean): void;
5662
5799
  setInvalidState(isInvalid: boolean): void;
5800
+ focus(): void;
5663
5801
  clearField(): void;
5664
5802
  handleClear(): void;
5665
5803
  handleIconClick(): void;
@@ -5672,8 +5810,19 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5672
5810
  closeOverlay(): void;
5673
5811
  handleOverlayOutsideClick(event: MouseEvent): void;
5674
5812
  handleOverlayAttached(): void;
5813
+ handleOverlayDetached(): void;
5675
5814
  handleOverlayKeydown(event: KeyboardEvent): void;
5676
5815
  private focusIconButton;
5816
+ private setupScrollListener;
5817
+ private cleanupScrollListener;
5818
+ /**
5819
+ * Whether the scroll target is inside this field's own calendar overlay or a
5820
+ * nested overlay opened from within it (e.g. the year/month dropdown). Nested
5821
+ * overlays share the CDK overlay container but render in their own pane
5822
+ * stacked after this one in DOM order, so a `DOCUMENT_POSITION_FOLLOWING`
5823
+ * check distinguishes them from unrelated ancestors that should dismiss.
5824
+ */
5825
+ private isInsideOverlay;
5677
5826
  private openNativePicker;
5678
5827
  private openModal;
5679
5828
  private handleNativeInputChange;
@@ -5687,7 +5836,7 @@ declare class DateFieldComponent implements ControlValueAccessor, FormFieldContr
5687
5836
  private toIsoDate;
5688
5837
  private queryNativeInput;
5689
5838
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateFieldComponent, never>;
5690
- 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; }; "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; }; "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; }; "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>;
5839
+ 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; }; "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>;
5691
5840
  }
5692
5841
 
5693
5842
  declare class DatePickerCalendarGridComponent {
@@ -5917,6 +6066,11 @@ declare class LabelComponent {
5917
6066
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LabelComponent, "[tedi-label]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
5918
6067
  }
5919
6068
 
6069
+ declare class LabelRowComponent {
6070
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LabelRowComponent, never>;
6071
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LabelRowComponent, "tedi-label-row", never, {}, {}, never, ["*"], true, never>;
6072
+ }
6073
+
5920
6074
  type NumberFieldSize = "default" | "small";
5921
6075
  declare class NumberFieldComponent implements ControlValueAccessor {
5922
6076
  /**
@@ -5977,6 +6131,11 @@ declare class NumberFieldComponent implements ControlValueAccessor {
5977
6131
  * @default false
5978
6132
  */
5979
6133
  fullWidth: _angular_core.InputSignal<boolean>;
6134
+ /**
6135
+ * Accessible label for the input, used when no visible `label` is provided
6136
+ * (e.g. when the field is embedded as a compact addon of another control).
6137
+ */
6138
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
5980
6139
  inputRef: ElementRef<HTMLInputElement>;
5981
6140
  private formDisabled;
5982
6141
  private onChange;
@@ -5999,7 +6158,206 @@ declare class NumberFieldComponent implements ControlValueAccessor {
5999
6158
  handleInputChange(event: Event): void;
6000
6159
  handleBlur(): void;
6001
6160
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumberFieldComponent, never>;
6002
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberFieldComponent, "tedi-number-field", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
6161
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberFieldComponent, "tedi-number-field", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
6162
+ }
6163
+
6164
+ type InputSize = "small" | "large" | "default";
6165
+ type InputState = "valid" | "error" | "default";
6166
+ type ValidationState = "invalid" | "valid" | "neutral";
6167
+ interface FormFieldIcon {
6168
+ name: string;
6169
+ size?: IconSize;
6170
+ color?: IconColor;
6171
+ type?: IconType;
6172
+ variant?: IconVariant;
6173
+ }
6174
+ declare class FormFieldComponent implements AfterContentInit {
6175
+ /**
6176
+ * The size of the form field.
6177
+ * @default "default"
6178
+ */
6179
+ size: _angular_core.InputSignal<InputSize>;
6180
+ /**
6181
+ * Icon name or configuration object.
6182
+ */
6183
+ icon: _angular_core.InputSignal<string | FormFieldIcon | undefined>;
6184
+ /**
6185
+ * Whether the form field includes a clear button.
6186
+ * @default false
6187
+ */
6188
+ clearable: _angular_core.InputSignal<boolean>;
6189
+ /**
6190
+ * Custom CSS classes for the input.
6191
+ */
6192
+ inputClass: _angular_core.InputSignal<string | null>;
6193
+ /**
6194
+ * Maximum number of characters the control should hold. When set, a live
6195
+ * character counter (`current/limit`) is shown in the feedback row and the
6196
+ * field enters an error state once the limit is exceeded.
6197
+ */
6198
+ characterLimit: _angular_core.InputSignal<number | undefined>;
6199
+ readonly control: _angular_core.Signal<FormFieldControl<unknown> | undefined>;
6200
+ readonly controlElement: _angular_core.Signal<ElementRef<any> | undefined>;
6201
+ ngControl?: NgControl;
6202
+ feedback?: FeedbackTextComponent;
6203
+ feedbackElement?: ElementRef<HTMLElement>;
6204
+ private readonly destroyRef;
6205
+ private readonly inputGroup;
6206
+ private readonly fallbackId;
6207
+ constructor();
6208
+ /**
6209
+ * A textarea has no room for the trailing clear button / icon (per design),
6210
+ * so the form field suppresses both when it wraps one.
6211
+ */
6212
+ readonly isTextarea: _angular_core.WritableSignal<boolean>;
6213
+ ngAfterContentInit(): void;
6214
+ private updateValidationState;
6215
+ private computeInvalid;
6216
+ readonly resolvedIcon: _angular_core.Signal<FormFieldIcon | undefined>;
6217
+ readonly characterCount: _angular_core.Signal<number>;
6218
+ readonly characterCountExceeded: _angular_core.Signal<boolean>;
6219
+ /** Base for the generated feedback / counter ids — the control's own id, or a fallback. */
6220
+ private get baseId();
6221
+ readonly characterCountId: _angular_core.Signal<string | null>;
6222
+ private syncAriaDescribedBy;
6223
+ readonly validationState: _angular_core.Signal<ValidationState>;
6224
+ showClearButton: _angular_core.Signal<boolean>;
6225
+ readonly isDisabled: _angular_core.Signal<boolean>;
6226
+ readonly hostClasses: _angular_core.Signal<{
6227
+ "tedi-form-field": boolean;
6228
+ "tedi-form-field--valid": boolean;
6229
+ "tedi-form-field--invalid": boolean;
6230
+ "tedi-form-field--disabled": boolean;
6231
+ "tedi-form-field--small": boolean;
6232
+ "tedi-form-field--large": boolean;
6233
+ "tedi-form-field--with-icon": boolean;
6234
+ }>;
6235
+ readonly inputClasses: _angular_core.Signal<{
6236
+ "tedi-form-field__input": boolean;
6237
+ }>;
6238
+ clear(): void;
6239
+ /**
6240
+ * The control never fills the whole box — the box padding and the layout
6241
+ * wrappers around the control are outside its hit area — so clicking there
6242
+ * would otherwise leave the field unfocused. Focus the control instead, unless
6243
+ * the click landed on something interactive that handles it itself (the
6244
+ * control, the clear/calendar buttons, a tag's close button).
6245
+ */
6246
+ handleBoxMouseDown(event: MouseEvent): void;
6247
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, never>;
6248
+ 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", "controlElement", "ngControl", "feedback", "feedbackElement"], ["label[tedi-label]", "input[tedi-text-field], textarea[tedi-textarea], tedi-time-field, tedi-date-field", "tedi-feedback-text", "*"], true, never>;
6249
+ }
6250
+
6251
+ type SearchSize = InputSize;
6252
+ interface SearchButton {
6253
+ /**
6254
+ * Visible button text. When omitted, the button is rendered icon-only.
6255
+ */
6256
+ text?: string;
6257
+ /**
6258
+ * Icon shown inside the button.
6259
+ * @default "search"
6260
+ */
6261
+ icon?: string;
6262
+ /**
6263
+ * Button color variant.
6264
+ * @default "primary"
6265
+ */
6266
+ variant?: ButtonVariant;
6267
+ /**
6268
+ * Accessible label for an icon-only button.
6269
+ * @default translation "search"
6270
+ */
6271
+ ariaLabel?: string;
6272
+ }
6273
+ declare class SearchComponent implements ControlValueAccessor {
6274
+ /**
6275
+ * Unique identifier for the input element, used to associate the label.
6276
+ */
6277
+ inputId: _angular_core.InputSignal<string>;
6278
+ /**
6279
+ * Visible label text. When omitted, provide `ariaLabel` for accessibility.
6280
+ */
6281
+ label: _angular_core.InputSignal<string | undefined>;
6282
+ /**
6283
+ * Value of the search input. Supports two-way binding and reactive forms.
6284
+ */
6285
+ value: _angular_core.ModelSignal<string>;
6286
+ /**
6287
+ * Placeholder text for the search input.
6288
+ */
6289
+ placeholder: _angular_core.InputSignal<string>;
6290
+ /**
6291
+ * Size of the search field.
6292
+ * @default "default"
6293
+ */
6294
+ size: _angular_core.InputSignal<InputSize>;
6295
+ /**
6296
+ * Whether the input shows a clear button once it has a value.
6297
+ * @default true
6298
+ */
6299
+ clearable: _angular_core.InputSignal<boolean>;
6300
+ /**
6301
+ * Icon shown inside the input. Ignored when `button` is set.
6302
+ * @default "search"
6303
+ */
6304
+ searchIcon: _angular_core.InputSignal<string | FormFieldIcon>;
6305
+ /**
6306
+ * Whether the search field is disabled.
6307
+ * @default false
6308
+ */
6309
+ disabled: _angular_core.InputSignal<boolean>;
6310
+ /**
6311
+ * When set, renders a trailing search button and hides the inline icon.
6312
+ */
6313
+ button: _angular_core.InputSignal<SearchButton | undefined>;
6314
+ /**
6315
+ * FeedbackText component inputs (hint / validation message).
6316
+ */
6317
+ feedbackText: _angular_core.InputSignal<ComponentInputs<FeedbackTextComponent> | undefined>;
6318
+ /**
6319
+ * Accessible name for the search region. Falls back to `label`, then
6320
+ * `placeholder`, then the translated "search" label.
6321
+ */
6322
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
6323
+ /**
6324
+ * Emitted when the search is executed (Enter key or button click).
6325
+ */
6326
+ readonly searchEvent: _angular_core.OutputEmitterRef<string>;
6327
+ /**
6328
+ * Emitted when the clear button is clicked.
6329
+ */
6330
+ readonly clear: _angular_core.OutputEmitterRef<void>;
6331
+ private readonly inputRef;
6332
+ private readonly formDisabled;
6333
+ private readonly translationService;
6334
+ private onChange;
6335
+ private onTouched;
6336
+ readonly isDisabled: _angular_core.Signal<boolean>;
6337
+ readonly fieldIcon: _angular_core.Signal<string | FormFieldIcon | undefined>;
6338
+ readonly fieldHeight: _angular_core.Signal<"var(--form-field-height-sm)" | "var(--form-field-height-lg)" | "var(--form-field-height)">;
6339
+ readonly buttonSize: _angular_core.Signal<"small" | "default">;
6340
+ readonly buttonIconSize: _angular_core.Signal<24 | 18>;
6341
+ readonly buttonAriaLabel: _angular_core.Signal<string | null>;
6342
+ readonly feedbackId: _angular_core.Signal<string | null>;
6343
+ readonly searchAriaLabel: _angular_core.Signal<string>;
6344
+ /**
6345
+ * Accessible name for the input itself. A visible `label` already names it
6346
+ * via `for`/`id`, so the attribute is only emitted when there is none —
6347
+ * otherwise `aria-label` would silently override the visible text.
6348
+ */
6349
+ readonly inputAriaLabel: _angular_core.Signal<string | null>;
6350
+ onInputValue(value: string): void;
6351
+ onClear(): void;
6352
+ onBlur(): void;
6353
+ emitSearch(): void;
6354
+ focus(): void;
6355
+ writeValue(value: string | null): void;
6356
+ registerOnChange(fn: (value: string) => void): void;
6357
+ registerOnTouched(fn: () => void): void;
6358
+ setDisabledState(isDisabled: boolean): void;
6359
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent, never>;
6360
+ 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>;
6003
6361
  }
6004
6362
 
6005
6363
  /**
@@ -6068,64 +6426,24 @@ declare class SelectValueTemplateDirective<T = unknown> {
6068
6426
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectValueTemplateDirective<any>, never>;
6069
6427
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueTemplateDirective<any>, "[tediSelectValue]", never, {}, {}, never, never, true, never>;
6070
6428
  }
6071
-
6072
- type InputSize = "small" | "large" | "default";
6073
- type InputState = "valid" | "error" | "default";
6074
- type ValidationState = "invalid" | "valid" | "neutral";
6075
- interface FormFieldIcon {
6076
- name: string;
6077
- size?: IconSize;
6078
- color?: IconColor;
6079
- type?: IconType;
6080
- variant?: IconVariant;
6081
- }
6082
- declare class FormFieldComponent implements AfterContentInit {
6083
- /**
6084
- * The size of the form field.
6085
- * @default "default"
6086
- */
6087
- size: _angular_core.InputSignal<InputSize>;
6088
- /**
6089
- * Icon name or configuration object.
6090
- */
6091
- icon: _angular_core.InputSignal<string | FormFieldIcon | undefined>;
6092
- /**
6093
- * Whether the form field includes a clear button.
6094
- * @default false
6095
- */
6096
- clearable: _angular_core.InputSignal<boolean>;
6097
- /**
6098
- * Custom CSS classes for the input.
6099
- */
6100
- inputClass: _angular_core.InputSignal<string | null>;
6101
- control?: FormFieldControl;
6102
- ngControl?: NgControl;
6103
- feedback?: FeedbackTextComponent;
6104
- private readonly destroyRef;
6105
- private readonly inputGroup;
6106
- constructor();
6107
- ngAfterContentInit(): void;
6108
- private updateValidationState;
6109
- private computeInvalid;
6110
- readonly resolvedIcon: _angular_core.Signal<FormFieldIcon | undefined>;
6111
- readonly validationState: _angular_core.Signal<ValidationState>;
6112
- showClearButton: _angular_core.Signal<boolean>;
6113
- readonly isDisabled: _angular_core.Signal<boolean>;
6114
- readonly hostClasses: _angular_core.Signal<{
6115
- "tedi-form-field": boolean;
6116
- "tedi-form-field--valid": boolean;
6117
- "tedi-form-field--invalid": boolean;
6118
- "tedi-form-field--disabled": boolean;
6119
- "tedi-form-field--small": boolean;
6120
- "tedi-form-field--large": boolean;
6121
- "tedi-form-field--with-icon": boolean;
6122
- }>;
6123
- readonly inputClasses: _angular_core.Signal<{
6124
- "tedi-form-field__input": boolean;
6125
- }>;
6126
- clear(): void;
6127
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, never>;
6128
- 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; }; }, {}, ["control", "ngControl", "feedback"], ["label[tedi-label]", "input[tedi-text-field], tedi-time-field, tedi-date-field", "tedi-feedback-text", "*"], true, never>;
6429
+ /**
6430
+ * Directive for custom tooltip content next to the label. Use when the tooltip
6431
+ * needs formatting the plain `tooltip` string input cannot express (bold,
6432
+ * italic, links). Takes precedence over the `tooltip` input.
6433
+ *
6434
+ * @example
6435
+ * ```html
6436
+ * <tedi-select [options]="options" label="Ravim">
6437
+ * <ng-template tediSelectTooltip>
6438
+ * Vali <b>toimeaine</b>, mitte ravimi nimi.
6439
+ * </ng-template>
6440
+ * </tedi-select>
6441
+ * ```
6442
+ */
6443
+ declare class SelectTooltipTemplateDirective {
6444
+ template: TemplateRef<unknown>;
6445
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectTooltipTemplateDirective, never>;
6446
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectTooltipTemplateDirective, "[tediSelectTooltip]", never, {}, {}, never, never, true, never>;
6129
6447
  }
6130
6448
 
6131
6449
  type SelectInputSize = Exclude<InputSize, "large">;
@@ -6140,6 +6458,13 @@ interface SelectOptionGroup<T = unknown> {
6140
6458
  label: string;
6141
6459
  options: SelectOption<T>[];
6142
6460
  }
6461
+ /** A navigable row in the virtual-scroll listbox: the pinned select-all row or an option. */
6462
+ type VirtualRow<T = unknown> = {
6463
+ kind: "select-all";
6464
+ } | {
6465
+ kind: "option";
6466
+ option: SelectOption<T>;
6467
+ };
6143
6468
  type GroupByFn<T = unknown> = (item: T) => string | undefined;
6144
6469
  type CompareWithFn<T = unknown> = (a: T, b: T) => boolean;
6145
6470
  declare enum SpecialOptionControls {
@@ -6158,7 +6483,8 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6158
6483
  label: _angular_core.InputSignal<string | undefined>;
6159
6484
  /**
6160
6485
  * When set, renders an info button next to the label that reveals this text
6161
- * in a tooltip on hover/focus.
6486
+ * in a tooltip on hover/focus. For formatted content, project a
6487
+ * `*tediSelectTooltip` template instead, which takes precedence over this.
6162
6488
  */
6163
6489
  tooltip: _angular_core.InputSignal<string | undefined>;
6164
6490
  /**
@@ -6264,8 +6590,13 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6264
6590
  */
6265
6591
  multiRow: _angular_core.InputSignal<boolean>;
6266
6592
  /**
6267
- * Which end a selected tag's label truncates from when it doesn't fit.
6268
- * `false` (default) never truncates; `end` → `label…`; `start` → `…label`.
6593
+ * Which end a selected tag's label truncates from: `end` `label…`, `start` →
6594
+ * `…label`. `false` (default) never truncates.
6595
+ *
6596
+ * Truncation needs the tag to be width-constrained: in a single row the tags
6597
+ * share the row with the `+N` counter, so an over-wide label truncates to fit.
6598
+ * With `multiRow` the tags wrap first, so a label truncates only when it is
6599
+ * wider than the field on its own.
6269
6600
  * @default false
6270
6601
  */
6271
6602
  tagEllipsis: _angular_core.InputSignal<TagEllipsis>;
@@ -6297,6 +6628,11 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6297
6628
  * When not set, the dropdown height is calculated based on available viewport space.
6298
6629
  */
6299
6630
  maxDropdownHeight: _angular_core.InputSignal<number | undefined>;
6631
+ /**
6632
+ * Does the dropdown close when the page scrolls?
6633
+ * @default false
6634
+ */
6635
+ hideOnScroll: _angular_core.InputSignal<boolean>;
6300
6636
  /**
6301
6637
  * Layout type for the dropdown options.
6302
6638
  * - `"menu"` (default): vertical list of options.
@@ -6306,6 +6642,28 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6306
6642
  * @default "menu"
6307
6643
  */
6308
6644
  dropdownType: _angular_core.InputSignal<"menu" | "grid">;
6645
+ /**
6646
+ * Renders options with virtual scrolling so only the rows in view exist in the
6647
+ * DOM. Enable for very large option lists (hundreds or more) to keep opening
6648
+ * and scrolling fast. Takes effect only for the default `menu` dropdown type
6649
+ * without `groupBy`; grid and grouped lists fall back to full rendering.
6650
+ * @default false
6651
+ */
6652
+ virtualScroll: _angular_core.InputSignal<boolean>;
6653
+ /**
6654
+ * Fixed row height in pixels for the virtual scroll viewport. Virtual scrolling
6655
+ * assumes every row is the same height and uses this value to compute how many
6656
+ * rows fit, the total scroll height, and where to jump when scrolling. Only
6657
+ * relevant when `virtualScroll` is enabled.
6658
+ *
6659
+ * Leave unset by default: the height is auto-measured from the first rendered
6660
+ * option, which covers the standard option template. Set it only when that
6661
+ * measurement is unreliable — typically a custom `optionTemplate` whose rows
6662
+ * have a known uniform height that the first row doesn't represent (e.g. only
6663
+ * some rows carry a description line). Setting a wrong value makes rows overlap
6664
+ * or leave gaps, so prefer auto-measurement unless you hit one of these cases.
6665
+ */
6666
+ virtualItemSize: _angular_core.InputSignal<number | undefined>;
6309
6667
  /**
6310
6668
  * Whether the select has a search input for filtering options.
6311
6669
  * @default false
@@ -6368,9 +6726,29 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6368
6726
  visibleTagsCount: _angular_core.WritableSignal<number | null>;
6369
6727
  searchTerm: _angular_core.WritableSignal<string>;
6370
6728
  searchFocused: _angular_core.WritableSignal<boolean>;
6729
+ /** Index into `virtualRows()` of the keyboard-active row (-1 when none). */
6730
+ activeIndex: _angular_core.WritableSignal<number>;
6731
+ /** Measured row height for the virtual scroll viewport. */
6732
+ measuredRowHeight: _angular_core.WritableSignal<number | null>;
6733
+ private static readonly DEFAULT_ROW_HEIGHT;
6734
+ private static readonly SMALL_ROW_HEIGHT;
6371
6735
  hiddenTagsCount: _angular_core.Signal<number>;
6736
+ /**
6737
+ * Whether the default identity comparator is in use. When true, selection and
6738
+ * item lookups can use O(1) Set/Map paths instead of O(n) scans with the
6739
+ * user-supplied comparator. See issue #552.
6740
+ */
6741
+ private readonly usesDefaultCompare;
6742
+ /** O(1) membership set of selected values for the identity-comparison path. */
6743
+ private readonly selectedValueSet;
6744
+ /** value → normalized option, for O(1) label lookups. */
6745
+ private readonly optionByValue;
6746
+ /** value → original item, for O(1) custom-template context lookups. */
6747
+ private readonly itemByValue;
6372
6748
  listboxRef: _angular_core.Signal<ElementRef<any> | undefined>;
6373
6749
  cdkListboxRef: _angular_core.Signal<CdkListbox<any> | undefined>;
6750
+ viewport: _angular_core.Signal<CdkVirtualScrollViewport | undefined>;
6751
+ virtualListboxRef: _angular_core.Signal<ElementRef<any> | undefined>;
6374
6752
  connectedOverlay: _angular_core.Signal<CdkConnectedOverlay | undefined>;
6375
6753
  triggerRef: _angular_core.Signal<ElementRef<any> | undefined>;
6376
6754
  searchInputRef: _angular_core.Signal<ElementRef<any> | undefined>;
@@ -6378,8 +6756,12 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6378
6756
  tagRefs: _angular_core.Signal<readonly ElementRef<any>[]>;
6379
6757
  hostRef: ElementRef<any>;
6380
6758
  private ngZone;
6759
+ private renderer;
6760
+ private document;
6761
+ private scrollListener?;
6381
6762
  optionTemplate: _angular_core.Signal<SelectOptionTemplateDirective<any> | undefined>;
6382
6763
  valueTemplate: _angular_core.Signal<SelectValueTemplateDirective<any> | undefined>;
6764
+ tooltipTemplate: _angular_core.Signal<SelectTooltipTemplateDirective | undefined>;
6383
6765
  normalizedOptions: _angular_core.Signal<SelectOption<T>[]>;
6384
6766
  filteredOptions: _angular_core.Signal<SelectOption<T>[]>;
6385
6767
  optionGroups: _angular_core.Signal<SelectOptionGroup<T>[]>;
@@ -6389,6 +6771,19 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6389
6771
  showSingleSelectedValue: _angular_core.Signal<boolean>;
6390
6772
  allOptionsSelected: _angular_core.Signal<boolean>;
6391
6773
  someOptionsSelected: _angular_core.Signal<boolean>;
6774
+ /** Whether virtual scrolling is active: opt-in, flat `menu` lists only. */
6775
+ readonly virtualize: _angular_core.Signal<boolean>;
6776
+ /** Whether the pinned select-all row is shown above the virtual viewport. */
6777
+ readonly showSelectAllRow: _angular_core.Signal<boolean>;
6778
+ /** Ordered navigable rows for the virtual listbox (pinned select-all + options). */
6779
+ readonly virtualRows: _angular_core.Signal<VirtualRow<T>[]>;
6780
+ /** Effective row height for the viewport: explicit input, measured, or size default. */
6781
+ readonly virtualRowHeight: _angular_core.Signal<number>;
6782
+ /** Height of the scrolling viewport: content-sized, capped at available space. */
6783
+ readonly virtualViewportHeight: _angular_core.Signal<number>;
6784
+ trackByOptionValue: (_: number, option: SelectOption<T>) => unknown;
6785
+ /** id of the active row, exposed via aria-activedescendant on the listbox. */
6786
+ readonly activeDescendantId: _angular_core.Signal<string | null>;
6392
6787
  ngAfterContentChecked(): void;
6393
6788
  ngAfterViewChecked(): void;
6394
6789
  onWindowResize(): void;
@@ -6410,11 +6805,47 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6410
6805
  onArrowClick(event: Event): void;
6411
6806
  onTriggerEnter(): void;
6412
6807
  onSearchKeydown(event: KeyboardEvent): void;
6808
+ /** Navigate the open list (virtual or CDK), or open the dropdown when closed. */
6809
+ private navigateOrOpen;
6810
+ /** Activate the active option (virtual or CDK), or open the dropdown when closed. */
6811
+ private confirmActiveOrOpen;
6413
6812
  private static readonly KEY_CODES;
6414
6813
  private forwardToCdkListbox;
6814
+ virtualOptionId(index: number): string;
6815
+ /** Keyboard handler for the non-searchable virtual listbox element. */
6816
+ onVirtualListboxKeydown(event: KeyboardEvent): void;
6817
+ private handleVirtualNavKey;
6818
+ private moveActive;
6819
+ private moveActiveToEdge;
6820
+ private isRowNavigable;
6821
+ private setActiveIndex;
6822
+ private scrollActiveIntoView;
6823
+ /**
6824
+ * Scroll the initially-active option into view once the overlay has attached.
6825
+ * Driven by the overlay's `(attach)` event because the virtual viewport (a
6826
+ * viewChild inside the overlay portal) only resolves after attachment.
6827
+ *
6828
+ * The scroll is deferred one macrotask: at attach time the CDK viewport has not
6829
+ * yet established its scrollable content size, so `scrollToIndex` would clamp to
6830
+ * 0. By the next macrotask the content size is set and the measured row height
6831
+ * (for taller custom templates) has been applied to `itemSize`.
6832
+ */
6833
+ onOverlayAttached(): void;
6834
+ /** Set the active row on open: the first selected option, else the first navigable row. */
6835
+ private initVirtualActive;
6836
+ activateActiveRow(): void;
6837
+ private activateRow;
6838
+ onVirtualOptionClick(option: SelectOption<T>): void;
6839
+ private syncActiveToOptionValue;
6840
+ onVirtualSelectAllClick(): void;
6841
+ private toggleOptionValue;
6842
+ private selectSingleValue;
6843
+ private measureVirtualRowHeight;
6415
6844
  private openDropdown;
6416
6845
  private calculateDropdownMaxHeight;
6417
6846
  private closeDropdown;
6847
+ private setupScrollListener;
6848
+ private cleanupScrollListener;
6418
6849
  handleValueChange(event: {
6419
6850
  value: readonly unknown[];
6420
6851
  }): void;
@@ -6446,7 +6877,7 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
6446
6877
  registerOnTouched(fn: () => void): void;
6447
6878
  setDisabledState(isDisabled: boolean): void;
6448
6879
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent<any>, never>;
6449
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "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"], never, true, never>;
6880
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualItemSize": { "alias": "virtualItemSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; }, ["optionTemplate", "valueTemplate", "tooltipTemplate"], never, true, never>;
6450
6881
  }
6451
6882
 
6452
6883
  type SliderHideLabel = boolean | "keep-space";
@@ -6620,6 +7051,11 @@ declare class ToggleComponent implements ControlValueAccessor {
6620
7051
  * @default false
6621
7052
  */
6622
7053
  icon: _angular_core.InputSignal<boolean>;
7054
+ /**
7055
+ * Accessible label for the toggle. Provide this when there is no associated
7056
+ * visible `<label>` element, so the switch has an accessible name.
7057
+ */
7058
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
6623
7059
  inputRef: ElementRef<HTMLInputElement>;
6624
7060
  private onChange;
6625
7061
  private onTouched;
@@ -6632,7 +7068,7 @@ declare class ToggleComponent implements ControlValueAccessor {
6632
7068
  classes: _angular_core.Signal<string>;
6633
7069
  iconColor: _angular_core.Signal<IconColor>;
6634
7070
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToggleComponent, never>;
6635
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToggleComponent, "tedi-toggle", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
7071
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToggleComponent, "tedi-toggle", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, never, never, true, never>;
6636
7072
  }
6637
7073
 
6638
7074
  /**
@@ -6735,7 +7171,7 @@ declare class TextFieldComponent implements ControlValueAccessor, FormFieldContr
6735
7171
  * Disables the input from a parent template (e.g. a wrapping field component).
6736
7172
  * Combined with the reactive-forms disabled state and any input-group state.
6737
7173
  */
6738
- readonly disabledInput: _angular_core.InputSignal<boolean>;
7174
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
6739
7175
  readonly disabled: _angular_core.Signal<boolean>;
6740
7176
  readonly invalid: _angular_core.WritableSignal<boolean>;
6741
7177
  setInvalidState(isInvalid: boolean): void;
@@ -6750,11 +7186,91 @@ declare class TextFieldComponent implements ControlValueAccessor, FormFieldContr
6750
7186
  setDisabledState(isDisabled: boolean): void;
6751
7187
  handleInputChange(event: Event): void;
6752
7188
  handleBlur(): void;
7189
+ focus(): void;
6753
7190
  clearField(): void;
6754
7191
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextFieldComponent, never>;
6755
7192
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextFieldComponent, "input[tedi-text-field]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "arrowsHidden": { "alias": "arrowsHidden"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "clear": "clear"; }, never, never, true, never>;
6756
7193
  }
6757
7194
 
7195
+ declare class TextareaComponent implements ControlValueAccessor, FormFieldControl {
7196
+ private el;
7197
+ private renderer;
7198
+ /**
7199
+ * Value of the textarea. Supports two-way binding, use with form controls.
7200
+ */
7201
+ value: _angular_core.ModelSignal<string>;
7202
+ /**
7203
+ * Whether the user can resize the textarea. Only vertical resizing is
7204
+ * supported; set to `false` to disable resizing entirely.
7205
+ *
7206
+ * The resize is applied to the surrounding `tedi-form-field` box (which owns
7207
+ * the border) while the textarea fills it, so the visible field resizes with
7208
+ * the drag.
7209
+ *
7210
+ * @default true
7211
+ */
7212
+ resizable: _angular_core.InputSignal<boolean>;
7213
+ /**
7214
+ * Automatically grows the textarea to fit its content as the user types,
7215
+ * using the native CSS `field-sizing` property (no JavaScript). Growth is
7216
+ * bounded by `minRows` and `maxRows` (and the optional `maxHeight` cap), and
7217
+ * manual resizing is disabled while auto-growing.
7218
+ *
7219
+ * On browsers without `field-sizing` support the textarea gracefully falls
7220
+ * back to its `minRows` height and remains manually resizable.
7221
+ *
7222
+ * @default false
7223
+ */
7224
+ autoGrow: _angular_core.InputSignal<boolean>;
7225
+ /**
7226
+ * Minimum number of visible rows while `autoGrow` is enabled.
7227
+ * @default 3
7228
+ */
7229
+ minRows: _angular_core.InputSignal<number>;
7230
+ /**
7231
+ * Maximum number of visible rows before the field scrolls, while `autoGrow`
7232
+ * is enabled.
7233
+ * @default 12
7234
+ */
7235
+ maxRows: _angular_core.InputSignal<number>;
7236
+ /**
7237
+ * Fixed height of the textarea (e.g. `'7.5rem'`, `200` → `200px`). Applied
7238
+ * only when `autoGrow` is disabled; otherwise the height is content-driven.
7239
+ * Set to `undefined` to let the resting height come from the native `rows`
7240
+ * attribute instead.
7241
+ *
7242
+ * @default "7.5rem"
7243
+ */
7244
+ height: _angular_core.InputSignal<string | number | undefined>;
7245
+ /**
7246
+ * Maximum height the textarea may grow to (e.g. `'200px'`, `12` → `12px`,
7247
+ * `'12rem'`). Beyond it the field scrolls. Limits `autoGrow` growth (in
7248
+ * addition to `maxRows`) and manual resizing.
7249
+ */
7250
+ maxHeight: _angular_core.InputSignal<string | number | undefined>;
7251
+ private toCssSize;
7252
+ private rowsToHeight;
7253
+ readonly heightStyle: _angular_core.Signal<string | null>;
7254
+ readonly minHeightStyle: _angular_core.Signal<string | null>;
7255
+ readonly maxHeightStyle: _angular_core.Signal<string | null>;
7256
+ readonly disabled: _angular_core.Signal<boolean>;
7257
+ readonly invalid: _angular_core.WritableSignal<boolean>;
7258
+ setInvalidState(isInvalid: boolean): void;
7259
+ private formDisabled;
7260
+ private onChange;
7261
+ private onTouched;
7262
+ constructor();
7263
+ private setValue;
7264
+ writeValue(value: string | null): void;
7265
+ registerOnChange(fn: (value: string) => void): void;
7266
+ registerOnTouched(fn: () => void): void;
7267
+ setDisabledState(isDisabled: boolean): void;
7268
+ handleInputChange(event: Event): void;
7269
+ handleBlur(): void;
7270
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
7271
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "textarea[tedi-textarea]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "autoGrow": { "alias": "autoGrow"; "required": false; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
7272
+ }
7273
+
6758
7274
  type TimePickerVariant = "scroll" | "slots" | "dropdown";
6759
7275
  type WheelType = "hour" | "minute";
6760
7276
  declare class TimePickerComponent implements ControlValueAccessor, AfterViewInit, OnDestroy {
@@ -6973,6 +7489,7 @@ declare class TimeFieldComponent implements ControlValueAccessor, FormFieldContr
6973
7489
  handleInput(event: Event): void;
6974
7490
  handleBlur(): void;
6975
7491
  clearInput(): void;
7492
+ focus(): void;
6976
7493
  clearField(): void;
6977
7494
  openNativePicker(): void;
6978
7495
  onInputClick(event: MouseEvent): void;
@@ -7312,12 +7829,16 @@ declare class ScrollFadeComponent implements AfterViewInit, OnDestroy {
7312
7829
  readonly fadePosition: _angular_core.InputSignal<ScrollFadePosition>;
7313
7830
  /** Scrollbar style. */
7314
7831
  readonly scrollBar: _angular_core.InputSignal<ScrollFadeScrollbar>;
7832
+ /** Accessible label for the scrollable region. Falls back to a translated default. */
7833
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
7315
7834
  /** Emitted when scrolled to the top. */
7316
7835
  readonly scrolledToTop: _angular_core.OutputEmitterRef<void>;
7317
7836
  /** Emitted when scrolled to the bottom. */
7318
7837
  readonly scrolledToBottom: _angular_core.OutputEmitterRef<void>;
7838
+ private readonly translationService;
7319
7839
  private readonly innerRef;
7320
7840
  private resizeObserver;
7841
+ readonly _defaultLabel: _angular_core.Signal<string>;
7321
7842
  private readonly fade;
7322
7843
  readonly classes: _angular_core.Signal<string>;
7323
7844
  readonly innerClasses: _angular_core.Signal<string>;
@@ -7326,7 +7847,7 @@ declare class ScrollFadeComponent implements AfterViewInit, OnDestroy {
7326
7847
  ngOnDestroy(): void;
7327
7848
  private updateFade;
7328
7849
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollFadeComponent, never>;
7329
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScrollFadeComponent, "tedi-scroll-fade", never, { "fadeSize": { "alias": "fadeSize"; "required": false; "isSignal": true; }; "fadePosition": { "alias": "fadePosition"; "required": false; "isSignal": true; }; "scrollBar": { "alias": "scrollBar"; "required": false; "isSignal": true; }; }, { "scrolledToTop": "scrolledToTop"; "scrolledToBottom": "scrolledToBottom"; }, never, ["*"], true, never>;
7850
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScrollFadeComponent, "tedi-scroll-fade", never, { "fadeSize": { "alias": "fadeSize"; "required": false; "isSignal": true; }; "fadePosition": { "alias": "fadePosition"; "required": false; "isSignal": true; }; "scrollBar": { "alias": "scrollBar"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "scrolledToTop": "scrolledToTop"; "scrolledToBottom": "scrolledToBottom"; }, never, ["*"], true, never>;
7330
7851
  }
7331
7852
 
7332
7853
  type SeparatorAxis = "horizontal" | "vertical";
@@ -8073,8 +8594,7 @@ declare class HeaderRoleComponent {
8073
8594
  closeIfOtherRoleActive(active: unknown, isOpen: boolean): void;
8074
8595
  handleMobileOpen(): void;
8075
8596
  handleSelectRepresentative(r: Representative): void;
8076
- handleInputChange(event: Event): void;
8077
- trackById: (_: number, r: Representative) => string;
8597
+ handleInputChange(value: string): void;
8078
8598
  protected resolveIcon(icon: string | RepresentativeIcon | undefined): {
8079
8599
  name: string;
8080
8600
  size: IconSize;
@@ -8556,12 +9076,16 @@ declare class TabsComponent {
8556
9076
  }
8557
9077
 
8558
9078
  /**
8559
- * A single tab button inside `tedi-tabs-list`. Applied to a native `<button>`
8560
- * so it inherits native focus, disabled and activation behaviour.
9079
+ * A single tab inside `tedi-tabs-list`. Applied to a native `<button>` (in-page
9080
+ * tab) or `<a>` (a tab that navigates to a route — add `href`/`routerLink`).
9081
+ * The anchor form keeps the same `role="tab"` semantics but is a real link, so
9082
+ * it works with keyboard/new-tab/copy-link as WCAG expects for navigation.
8561
9083
  */
8562
9084
  declare class TabsTriggerComponent {
8563
9085
  private readonly tabs;
8564
9086
  private readonly host;
9087
+ /** Whether the trigger is rendered as an anchor (`<a>`) rather than a button. */
9088
+ readonly isAnchor: boolean;
8565
9089
  /**
8566
9090
  * Unique identifier for this tab. Used as the element id and to link to the
8567
9091
  * corresponding `tedi-tabs-content` panel (`aria-controls="{id}-panel"`).
@@ -8572,15 +9096,17 @@ declare class TabsTriggerComponent {
8572
9096
  /** Whether the tab is disabled. */
8573
9097
  readonly disabled: _angular_core.InputSignal<boolean>;
8574
9098
  readonly isSelected: _angular_core.Signal<boolean>;
9099
+ readonly tabIndex: _angular_core.Signal<0 | -1>;
8575
9100
  /** Plain-text label, used as the accessible name of the overflow dropdown item. */
8576
9101
  get label(): string;
8577
9102
  get contentNodes(): Node[];
8578
9103
  /** Scrolls this trigger into view within a horizontally scrolling tablist. */
8579
9104
  scrollIntoView(): void;
8580
- handleClick(): void;
9105
+ handleClick(event?: Event): void;
9106
+ private opensInNewBrowsingContext;
8581
9107
  handleKeydown(event: KeyboardEvent): void;
8582
9108
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsTriggerComponent, never>;
8583
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsTriggerComponent, "button[tedi-tabs-trigger]", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9109
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsTriggerComponent, "button[tedi-tabs-trigger], a[tedi-tabs-trigger]", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
8584
9110
  }
8585
9111
 
8586
9112
  type TabsOverflowMode = "dropdown" | "scroll";
@@ -8928,6 +9454,35 @@ declare class TooltipContentComponent {
8928
9454
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TooltipContentComponent, "tedi-tooltip-content", never, { "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
8929
9455
  }
8930
9456
 
9457
+ declare class InfoTooltipComponent {
9458
+ /**
9459
+ * Position of the tooltip relative to the info button.
9460
+ * @default top
9461
+ */
9462
+ position: _angular_core.InputSignal<_tedi_design_system_angular_tedi.OverlayPosition>;
9463
+ /**
9464
+ * How the tooltip can be opened.
9465
+ * @default both
9466
+ */
9467
+ openWith: _angular_core.InputSignal<TooltipOpenWith>;
9468
+ /**
9469
+ * Max width of the tooltip content.
9470
+ * @default medium
9471
+ */
9472
+ maxWidth: _angular_core.InputSignal<TooltipWidth>;
9473
+ /**
9474
+ * Color variant of the info button. Use `inverted` on dark or colored backgrounds.
9475
+ * @default primary
9476
+ */
9477
+ color: _angular_core.InputSignal<"primary" | "inverted">;
9478
+ /**
9479
+ * Accessible name for the info button. Defaults to the translated info-button label.
9480
+ */
9481
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
9482
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InfoTooltipComponent, never>;
9483
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InfoTooltipComponent, "tedi-info-tooltip", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "openWith": { "alias": "openWith"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9484
+ }
9485
+
8931
9486
  type PopoverWidth = "none" | "small" | "medium" | "large";
8932
9487
  declare class PopoverContentComponent {
8933
9488
  /**
@@ -9124,6 +9679,6 @@ declare function isValidTime(time: string | null | undefined): boolean;
9124
9679
  */
9125
9680
  declare function normalizeTime(input: string): string | null;
9126
9681
 
9127
- 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, HeaderActionsComponent, HeaderBottomComponent, HeaderComponent, HeaderContentComponent, HeaderLanguageComponent, HeaderLoginComponent, HeaderLogoComponent, HeaderLogoDarkDirective, HeaderLogoutComponent, HeaderMobileButtonComponent, HeaderProfileComponent, HeaderRoleComponent, HeaderRoleContentDirective, HeaderRoleNoResultsDirective, HeaderRoleTitleDirective, HeaderSearchComponent, HeaderTopComponent, HideAtDirective, HorizontalPushHandler, HorizontalStepperComponent, HorizontalStepperItemComponent, IconComponent, InfoButtonComponent, InputGroupComponent, InputGroupPrefixDirective, InputGroupSuffixDirective, LANGUAGE_COOKIE_NAME, LANGUAGE_FALLBACK_VALUE, LabelComponent, LinkComponent, ListComponent, MODAL_DATA, MODAL_SIZE, ModalComponent, ModalContentComponent, ModalFooterComponent, ModalHeaderComponent, ModalRef, ModalService, NumberFieldComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, PopoverTriggerDirective, ProgressBarComponent, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RowComponent, ScrollFadeComponent, SelectComponent, SelectOptionTemplateDirective, SelectValueTemplateDirective, SeparatorComponent, ShowAtDirective, SideNavComponent, SideNavDropdownComponent, SideNavDropdownGroupComponent, SideNavDropdownItemComponent, SideNavGroupTitleComponent, SideNavItemComponent, SideNavOverlayComponent, SideNavToggleComponent, SliderComponent, SpecialOptionControls, SpinnerComponent, StatusBadgeComponent, StatusIndicatorComponent, TAG_GAP, 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, ThemeService, TimeFieldComponent, TimePickerComponent, TimelineComponent, TimelineDescriptionComponent, TimelineItemComponent, TimelineTimingsBottomDirective, TimelineTitleComponent, ToastComponent, ToastService, ToggleComponent, TooltipComponent, TooltipContentComponent, TooltipTriggerComponent, VerticalSpacingDirective, VerticalSpacingItemDirective, addDays, addMonths, addYears, breakpointInput, buildMonthGrid, calculateArrowOffset, calculateVisibleTagCount, computeGroupSpans, cookieSignal, createTablePersistence, endOfMonth, formatDate, formatLocaleDate, formatLocaleDateHint, formatLocaleDateLong, formatMonthYear, generateUUID, getCardBorderPlacementColor, getDaysInMonth, getFirstDayOfWeek, getFocusableElements, getISOWeek, getMonthNames, getPaddingCssVariables, getPlacementFromPositionChange, getWeekdayNames, groupRowSpan, injectTediTableContext, isAfterDay, isBeforeDay, isDateInRange, isSameDay, isSameMonth, isSameYear, isValidTime, matchAny, matchDate, normalizeTime, parseDate, parseLocaleDate, provideTedi, resolveCardBorderRadius, startOfMonth, startOfWeek, toConnectedPositions, toggleDateInArray, usePagination };
9128
- 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, CarouselIndicatorsVariant, CheckboxCardVariant, CheckboxGroupDirection, CheckboxSize, ClosingButtonIconSize, ClosingButtonSize, ColInputs, ColWidth, CollapseButtonArrowType, CollapseButtonSize, CollapseSize, Cols, ColumnReorderPhase, CompareWithFn, ComponentInputs, DateAfter, DateBefore, DateFieldMode, DateInterval, DatePickerDay, DatePickerInputSize, DatePickerInputState, DatePickerMatcher, DatePickerSelectorMode, DatePickerView, DateRange, DayOfWeek, DropdownApi, DropdownContentApi, DropdownItemValueLayout, DropdownItemValueType, DropdownPosition, DropdownRole, DropdownTriggerAriaHasPopup, EllipsisPosition, EmptyStateSize, EmptyStateType, FeedbackTextPosition, FeedbackTextType, FilterOption, FilterSize, FilterVariant, FooterSidePlacement, FooterSidePosition, FormFieldControl, FormFieldIcon, Gap, GroupByFn, HeaderContentAlignment, HeaderLanguage, HeaderLanguageLabelPosition, HeaderLoginInputs, HeaderLoginSize, HeaderLogoutInputs, HeaderLogoutSize, HeaderProfileInputs, HeaderProfileSize, HeaderSearchMobileLabels, HeaderSearchMobileVariant, HeaderTopAlignment, HeaderTopInputs, HorizontalStepperBackground, IconBackgroundColor, IconColor, IconSize, IconType, IconVariant, InputGroupContext, InputSize, InputState, JustifyItems, JustifySelf, LabelColor, LabelSize, Language, LinkInputs, LinkSize, LinkVariant, Matcher, ModalConfig, ModalFullscreen, ModalPosition, ModalScrollBehavior, ModalSize, ModalWidth, ModalWidthPreset, NumberFieldSize, OverlayPosition, OverlaySide, PaginationBackground, PaginationDividerPosition, PaginationItem, PaginationItemType, PaginationLabels, PaginationVisibility, PopoverPosition, PopoverWidth, ProgressBarInputs, ProgressBarLabelPosition, ProgressBarSize, ProgressBarValuePosition, RadioCardVariant, RadioGroupDirection, RadioSize, Representative, RepresentativeIcon, RowInputs, ScrollFadePosition, ScrollFadeScrollbar, ScrollFadeSize, SelectInputSize, SelectOption, SelectOptionContext, SelectOptionGroup, SelectValueContext, SeparatorAxis, SeparatorColor, SeparatorDotSize, SeparatorSpacing, SeparatorSpacingValue, SeparatorThickness, SeparatorVariant, SideNavItemSize, SliderHideLabel, SpinnerColor, SpinnerSize, StatusBadgeColor, StatusBadgeSize, StatusBadgeStatus, StatusBadgeVariant, StatusIndicatorPosition, StatusIndicatorSize, StatusIndicatorType, TEDITheme, TableColumnMeta, TableControlColumn, TableExpandTrigger, TableFilterOptions, TablePaginationOptions, TablePersistOptions, TablePersistenceController, TableSelectionMode, TableSize, TableState, TableStatePatch, TabsOverflowMode, TagEllipsis, TagOverflowOptions, TagType, TediColumnDef, TediConfig, TediTableContextValue, TediTableFilterContext, TextColor, TextGroupInputs, TextGroupType, TextModifiers, Theme, TimeFieldFullscreen, TimeFieldModal, TimeFieldPickerTrigger, TimeFieldPickerVariant, TimeFieldUseNativePicker, TimePickerVariant, TimelineCardPadding, TimelineVariant, ToastConfig, ToastPosition, ToastRole, ToastType, ToggleSize, ToggleType, ToggleVariant, TooltipOpenWith, TooltipPosition, TooltipWidth, UsePaginationArgs, VerticalSpacingSize };
9682
+ 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, HeaderActionsComponent, HeaderBottomComponent, HeaderComponent, HeaderContentComponent, HeaderLanguageComponent, HeaderLoginComponent, HeaderLogoComponent, HeaderLogoDarkDirective, HeaderLogoutComponent, HeaderMobileButtonComponent, HeaderProfileComponent, HeaderRoleComponent, HeaderRoleContentDirective, HeaderRoleNoResultsDirective, HeaderRoleTitleDirective, HeaderSearchComponent, HeaderTopComponent, HideAtDirective, HorizontalPushHandler, HorizontalStepperComponent, HorizontalStepperItemComponent, IconComponent, InfoButtonComponent, InfoTooltipComponent, InputGroupComponent, InputGroupPrefixDirective, InputGroupSuffixDirective, LANGUAGE_COOKIE_NAME, LANGUAGE_FALLBACK_VALUE, LabelComponent, LabelRowComponent, LinkComponent, ListComponent, MODAL_DATA, MODAL_SIZE, ModalComponent, ModalContentComponent, ModalFooterComponent, ModalHeaderComponent, ModalRef, ModalService, NumberFieldComponent, PaginationComponent, PopoverComponent, PopoverContentComponent, PopoverTriggerDirective, ProgressBarComponent, RadioCardComponent, RadioCardGroupComponent, RadioComponent, RadioGroupComponent, RowComponent, ScrollFadeComponent, SearchComponent, SelectComponent, SelectOptionTemplateDirective, SelectTooltipTemplateDirective, SelectValueTemplateDirective, SeparatorComponent, ShowAtDirective, SideNavComponent, SideNavDropdownComponent, SideNavDropdownGroupComponent, SideNavDropdownItemComponent, SideNavGroupTitleComponent, SideNavItemComponent, SideNavOverlayComponent, SideNavToggleComponent, SliderComponent, SpecialOptionControls, SpinnerComponent, StatusBadgeComponent, StatusIndicatorComponent, TAG_GAP, TEDI_FORM_FIELD_CONTROL, TEDI_INPUT_GROUP, TEDI_TABLE_CONTEXT, TEDI_THEME_DEFAULT_TOKEN, TEDI_TRANSLATION_DEFAULT_TOKEN, THEME_CLASS_PREFIX, THEME_COOKIE_NAME, THEME_FALLBACK_VALUE, TOAST_DEFAULT_DURATION, TabsComponent, TabsContentComponent, TabsListComponent, TabsTriggerComponent, TagComponent, TediPaginationResultsDirective, TediTableColumnsMenuComponent, TediTableComponent, TediTableHeaderButtonComponent, TediTableToolbarComponent, TediTranslationPipe, TediTranslationService, TextComponent, TextFieldComponent, TextGroupComponent, TextGroupLabelComponent, TextGroupValueComponent, TextareaComponent, ThemeService, TimeFieldComponent, TimePickerComponent, TimelineComponent, TimelineDescriptionComponent, TimelineItemComponent, TimelineTimingsBottomDirective, TimelineTitleComponent, ToastComponent, ToastService, ToggleComponent, TooltipComponent, TooltipContentComponent, TooltipTriggerComponent, VerticalSpacingDirective, VerticalSpacingItemDirective, addDays, addMonths, addYears, breakpointInput, buildMonthGrid, calculateArrowOffset, calculateVisibleTagCount, computeGroupSpans, cookieSignal, createTablePersistence, endOfMonth, formatDate, formatLocaleDate, formatLocaleDateHint, formatLocaleDateLong, formatMonthYear, generateUUID, getCardBorderPlacementColor, getDaysInMonth, getFirstDayOfWeek, getFocusableElements, getISOWeek, getMonthNames, getPaddingCssVariables, getPlacementFromPositionChange, getWeekdayNames, groupRowSpan, injectTediTableContext, isAfterDay, isBeforeDay, isDateInRange, isSameDay, isSameMonth, isSameYear, isValidTime, matchAny, matchDate, normalizeTime, parseDate, parseLocaleDate, provideTedi, resolveCardBorderRadius, startOfMonth, startOfWeek, toConnectedPositions, toggleDateInArray, usePagination };
9683
+ 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, CarouselIndicatorsVariant, CheckboxCardVariant, CheckboxGroupDirection, CheckboxSize, ClosingButtonIconSize, ClosingButtonSize, ColInputs, ColWidth, CollapseButtonArrowType, CollapseButtonSize, CollapseSize, Cols, ColumnReorderPhase, CompareWithFn, ComponentInputs, DateAfter, DateBefore, DateFieldMode, DateInterval, DatePickerDay, DatePickerInputSize, DatePickerInputState, DatePickerMatcher, DatePickerSelectorMode, DatePickerView, DateRange, DayOfWeek, DropdownApi, DropdownContentApi, DropdownItemValueLayout, DropdownItemValueType, DropdownPosition, DropdownRole, DropdownTriggerAriaHasPopup, EllipsisPosition, EmptyStateSize, EmptyStateType, FeedbackTextPosition, FeedbackTextType, FilterOption, FilterSize, FilterVariant, FooterSidePlacement, FooterSidePosition, FormFieldControl, FormFieldIcon, Gap, GroupByFn, HeaderContentAlignment, HeaderLanguage, HeaderLanguageLabelPosition, HeaderLoginInputs, HeaderLoginSize, HeaderLogoutInputs, HeaderLogoutSize, HeaderProfileInputs, HeaderProfileSize, HeaderSearchMobileLabels, HeaderSearchMobileVariant, HeaderTopAlignment, HeaderTopInputs, HorizontalStepperBackground, IconBackgroundColor, IconColor, IconSize, IconType, IconVariant, InputGroupContext, InputSize, InputState, JustifyItems, JustifySelf, LabelColor, LabelSize, Language, LinkInputs, LinkSize, LinkVariant, Matcher, ModalConfig, ModalFullscreen, ModalPosition, ModalScrollBehavior, ModalSize, ModalWidth, ModalWidthPreset, NumberFieldSize, OverlayPosition, OverlaySide, PaginationBackground, PaginationDividerPosition, PaginationItem, PaginationItemType, PaginationLabels, PaginationVisibility, PopoverPosition, PopoverWidth, ProgressBarInputs, ProgressBarLabelPosition, ProgressBarSize, ProgressBarValuePosition, RadioCardVariant, RadioGroupDirection, RadioSize, Representative, RepresentativeIcon, RowInputs, ScrollFadePosition, ScrollFadeScrollbar, ScrollFadeSize, SearchButton, SearchSize, SelectInputSize, SelectOption, SelectOptionContext, SelectOptionGroup, SelectValueContext, SeparatorAxis, SeparatorColor, SeparatorDotSize, SeparatorSpacing, SeparatorSpacingValue, SeparatorThickness, SeparatorVariant, SideNavItemSize, SliderHideLabel, SpinnerColor, SpinnerSize, StatusBadgeColor, StatusBadgeSize, StatusBadgeStatus, StatusBadgeVariant, StatusIndicatorPosition, StatusIndicatorSize, StatusIndicatorType, TEDITheme, TableColumnMeta, TableControlColumn, TableExpandTrigger, TableFilterOptions, TablePaginationOptions, TablePersistOptions, TablePersistenceController, TableSelectionMode, TableSize, TableState, TableStatePatch, TabsOverflowMode, TagEllipsis, TagOverflowOptions, TagType, TediColumnDef, TediConfig, TediTableContextValue, TediTableFilterContext, TextColor, TextGroupInputs, TextGroupType, TextModifiers, Theme, TimeFieldFullscreen, TimeFieldModal, TimeFieldPickerTrigger, TimeFieldPickerVariant, TimeFieldUseNativePicker, TimePickerVariant, TimelineCardPadding, TimelineVariant, ToastConfig, ToastPosition, ToastRole, ToastType, ToggleSize, ToggleType, ToggleVariant, TooltipOpenWith, TooltipPosition, TooltipWidth, UsePaginationArgs, VerticalSpacingSize, VirtualRow };
9129
9684
  //# sourceMappingURL=index.d.ts.map