@tedi-design-system/angular 8.2.0-rc.5 → 8.2.0-rc.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tedi-design-system/angular",
3
- "version": "8.2.0-rc.5",
3
+ "version": "8.2.0-rc.7",
4
4
  "type": "module",
5
5
  "main": "community.mjs",
6
6
  "module": "fesm2022/tedi-design-system-angular.mjs",
package/tedi/index.d.ts CHANGED
@@ -2212,56 +2212,6 @@ declare class CollapseButtonComponent {
2212
2212
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CollapseButtonComponent, "button[tedi-collapse-button]", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "openText": { "alias": "openText"; "required": false; "isSignal": true; }; "closeText": { "alias": "closeText"; "required": false; "isSignal": true; }; "hideText": { "alias": "hideText"; "required": false; "isSignal": true; }; "arrowType": { "alias": "arrowType"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "inverted": { "alias": "inverted"; "required": false; "isSignal": true; }; "underline": { "alias": "underline"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; }, never, never, true, never>;
2213
2213
  }
2214
2214
 
2215
- type ArrowType = CollapseButtonArrowType;
2216
- type CollapseSize = CollapseButtonSize;
2217
- declare class CollapseComponent implements AfterViewInit {
2218
- /**
2219
- * The title/header element for the collapsible section.
2220
- * Rendered inside the toggle button.
2221
- */
2222
- openText: _angular_core.InputSignal<string | undefined>;
2223
- /**
2224
- * Text shown on the toggle button when the content is expanded.
2225
- */
2226
- closeText: _angular_core.InputSignal<string | undefined>;
2227
- /**
2228
- * Whether the collapse should be initially open.
2229
- * @default false
2230
- */
2231
- defaultOpen: _angular_core.InputSignal<boolean>;
2232
- /**
2233
- * To show or hide the openText and closeText.
2234
- * @default "false"
2235
- */
2236
- hideCollapseText: _angular_core.InputSignal<boolean>;
2237
- /**
2238
- * Option for toggling different arrow styles.
2239
- * @default "default"
2240
- */
2241
- arrowType: _angular_core.InputSignal<CollapseButtonArrowType>;
2242
- /**
2243
- * Visual size of the toggle button.
2244
- * @default "default"
2245
- */
2246
- size: _angular_core.InputSignal<CollapseButtonSize>;
2247
- /**
2248
- * Inverted color palette — flips the link / icon colors to their
2249
- * inverted-surface equivalents (white text + icon), for use on top of dark
2250
- * backgrounds. Pairs with both the text and icon-only variants; the
2251
- * secondary-arrow style has no inverted form in the design and the flag is
2252
- * ignored when `arrowType === 'secondary'`.
2253
- * @default false
2254
- */
2255
- inverted: _angular_core.InputSignal<boolean>;
2256
- collapseContentId: string;
2257
- isOpen: _angular_core.WritableSignal<boolean>;
2258
- protected readonly isInvertedActive: _angular_core.Signal<boolean>;
2259
- toggleCollapse(): void;
2260
- ngAfterViewInit(): void;
2261
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<CollapseComponent, never>;
2262
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CollapseComponent, "tedi-collapse", never, { "openText": { "alias": "openText"; "required": false; "isSignal": true; }; "closeText": { "alias": "closeText"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "hideCollapseText": { "alias": "hideCollapseText"; "required": false; "isSignal": true; }; "arrowType": { "alias": "arrowType"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "inverted": { "alias": "inverted"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2263
- }
2264
-
2265
2215
  type ClosingButtonSize = "default" | "small";
2266
2216
  type ClosingButtonIconSize = 18 | 24;
2267
2217
  declare class ClosingButtonComponent {
@@ -2848,6 +2798,108 @@ declare class CardHeaderComponent extends CardContentComponent {
2848
2798
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardHeaderComponent, "tedi-card-header", never, {}, {}, never, ["*"], true, never>;
2849
2799
  }
2850
2800
 
2801
+ type ArrowType = CollapseButtonArrowType;
2802
+ type CollapseSize = CollapseButtonSize;
2803
+ declare class CollapseComponent implements AfterViewInit {
2804
+ /**
2805
+ * The title/header element for the collapsible section.
2806
+ * Rendered inside the toggle button.
2807
+ */
2808
+ openText: _angular_core.InputSignal<string | undefined>;
2809
+ /**
2810
+ * Text shown on the toggle button when the content is expanded.
2811
+ */
2812
+ closeText: _angular_core.InputSignal<string | undefined>;
2813
+ /**
2814
+ * Whether the collapse should be initially open.
2815
+ * @default false
2816
+ */
2817
+ defaultOpen: _angular_core.InputSignal<boolean>;
2818
+ /**
2819
+ * To show or hide the openText and closeText.
2820
+ * @default "false"
2821
+ */
2822
+ hideCollapseText: _angular_core.InputSignal<boolean>;
2823
+ /**
2824
+ * Option for toggling different arrow styles.
2825
+ * @default "default"
2826
+ */
2827
+ arrowType: _angular_core.InputSignal<CollapseButtonArrowType>;
2828
+ /**
2829
+ * Visual size of the toggle button.
2830
+ * @default "default"
2831
+ */
2832
+ size: _angular_core.InputSignal<CollapseButtonSize>;
2833
+ /**
2834
+ * Inverted color palette — flips the link / icon colors to their
2835
+ * inverted-surface equivalents (white text + icon), for use on top of dark
2836
+ * backgrounds. Pairs with both the text and icon-only variants; the
2837
+ * secondary-arrow style has no inverted form in the design and the flag is
2838
+ * ignored when `arrowType === 'secondary'`.
2839
+ * @default false
2840
+ */
2841
+ inverted: _angular_core.InputSignal<boolean>;
2842
+ collapseContentId: string;
2843
+ isOpen: _angular_core.WritableSignal<boolean>;
2844
+ protected readonly isInvertedActive: _angular_core.Signal<boolean>;
2845
+ toggleCollapse(): void;
2846
+ ngAfterViewInit(): void;
2847
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CollapseComponent, never>;
2848
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CollapseComponent, "tedi-collapse", never, { "openText": { "alias": "openText"; "required": false; "isSignal": true; }; "closeText": { "alias": "closeText"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "hideCollapseText": { "alias": "hideCollapseText"; "required": false; "isSignal": true; }; "arrowType": { "alias": "arrowType"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "inverted": { "alias": "inverted"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2849
+ }
2850
+
2851
+ type EmptyStateType = "separate" | "attached" | "inside";
2852
+ type EmptyStateSize = "default" | "small";
2853
+ /**
2854
+ * Communicates that there is nothing to display — empty search results, an
2855
+ * unpopulated list, a freshly-created workspace — and optionally guides the
2856
+ * user toward the next step via action buttons or a link.
2857
+ *
2858
+ * Description is projected via `<ng-content>`. Actions are projected via
2859
+ * `<ng-content select="[tedi-empty-state-actions]">`.
2860
+ */
2861
+ declare class EmptyStateComponent {
2862
+ /**
2863
+ * Container variant — matches the Figma "Types" section.
2864
+ * - `'separate'` (default) — full border + radius, stands on its own.
2865
+ * - `'attached'` — top border omitted so the block sits flush beneath a
2866
+ * preceding card or table (same width + same bottom-radius).
2867
+ * - `'inside'` — no border, no radius; intended to be placed inside another
2868
+ * container such as a `<tedi-card>` or `<tedi-table>`.
2869
+ * @default separate
2870
+ */
2871
+ readonly type: _angular_core.InputSignal<EmptyStateType>;
2872
+ /**
2873
+ * Padding scale. `default` = 24px, `small` = 16px.
2874
+ * @default default
2875
+ */
2876
+ readonly size: _angular_core.InputSignal<EmptyStateSize>;
2877
+ /**
2878
+ * Material icon name rendered above the text block. Pass `null` to hide.
2879
+ * @default spa
2880
+ */
2881
+ readonly icon: _angular_core.InputSignal<string | null>;
2882
+ /**
2883
+ * Color of the icon. Defaults to brand so the empty state reads as a
2884
+ * "fresh canvas" cue rather than a destructive state.
2885
+ * @default brand
2886
+ */
2887
+ readonly iconColor: _angular_core.InputSignal<IconColor>;
2888
+ /**
2889
+ * Size of the icon, in pixels.
2890
+ * @default 36
2891
+ */
2892
+ readonly iconSize: _angular_core.InputSignal<IconSize>;
2893
+ /**
2894
+ * Optional heading rendered above the description — appears as an `<h3>` in
2895
+ * brand-primary text color.
2896
+ */
2897
+ readonly heading: _angular_core.InputSignal<string | undefined>;
2898
+ protected readonly hostClasses: _angular_core.Signal<string>;
2899
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
2900
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "tedi-empty-state", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[tedi-empty-state-actions]"], true, never>;
2901
+ }
2902
+
2851
2903
  declare class HeadingWithIconComponent {
2852
2904
  /**
2853
2905
  * Name of the Material Icon
@@ -2895,6 +2947,40 @@ declare class HeadingWithIconComponent {
2895
2947
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeadingWithIconComponent, "tedi-heading-with-icon", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "element": { "alias": "element"; "required": false; "isSignal": true; }; "modifiers": { "alias": "modifiers"; "required": false; "isSignal": true; }; "headingColor": { "alias": "headingColor"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "iconVariant": { "alias": "iconVariant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2896
2948
  }
2897
2949
 
2950
+ type LabelSize = "small" | "default";
2951
+ type LabelColor = "primary" | "secondary";
2952
+ type LabelVisuallyHidden = boolean | "reserve-space";
2953
+ declare class LabelComponent {
2954
+ private readonly field;
2955
+ /**
2956
+ * Size of the label. Falls back to the size of a wrapping `tedi-form-field`,
2957
+ * so the label and the control scale together without being set twice.
2958
+ * @default default
2959
+ */
2960
+ size: _angular_core.InputSignal<LabelSize | undefined>;
2961
+ readonly resolvedSize: _angular_core.Signal<LabelSize>;
2962
+ /**
2963
+ * Whether label is required.
2964
+ * @default false
2965
+ */
2966
+ required: _angular_core.InputSignal<boolean>;
2967
+ /**
2968
+ * Color of the label.
2969
+ * @default secondary
2970
+ */
2971
+ color: _angular_core.InputSignal<LabelColor>;
2972
+ /**
2973
+ * Hides the label visually while keeping it in the accessibility tree, so the
2974
+ * control it names stays named. `"reserve-space"` also keeps the label's line
2975
+ * of layout, to align the field with labelled siblings in the same row.
2976
+ * @default false
2977
+ */
2978
+ visuallyHidden: _angular_core.InputSignal<LabelVisuallyHidden>;
2979
+ classes: _angular_core.Signal<string>;
2980
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LabelComponent, never>;
2981
+ 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; }; "visuallyHidden": { "alias": "visuallyHidden"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2982
+ }
2983
+
2898
2984
  type BulletColor = "primary" | "secondary" | "tertiary" | "brand" | "brand-dark" | "success" | "warning" | "warning-dark" | "danger" | "white";
2899
2985
  declare class ListComponent {
2900
2986
  /**
@@ -2965,6 +3051,12 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
2965
3051
  readonly fade: _angular_core.InputSignal<boolean>;
2966
3052
  /** Transition duration in ms */
2967
3053
  readonly transitionMs: _angular_core.InputSignal<number>;
3054
+ /**
3055
+ * Whether navigation wraps around at the ends. When `false`, it stops at the
3056
+ * first and last reachable positions and disables the corresponding arrow.
3057
+ * @default true
3058
+ */
3059
+ readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
2968
3060
  /** Accessible label for the carousel region. Falls back to the `carousel` translation. */
2969
3061
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
2970
3062
  readonly translationService: TediTranslationService;
@@ -2982,8 +3074,17 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
2982
3074
  readonly currentSlidesPerView: _angular_core.Signal<number>;
2983
3075
  readonly currentGap: _angular_core.Signal<number>;
2984
3076
  readonly buffer: _angular_core.Signal<number>;
3077
+ /** Furthest track position in bounded mode; may be fractional to show the last slide fully. */
3078
+ readonly maxIndex: _angular_core.Signal<number>;
3079
+ /** Number of indicator positions: one per slide when looping, or one per reachable stop when bounded. */
3080
+ readonly positionCount: _angular_core.Signal<number>;
3081
+ /** Index of the active indicator; a fractional final stop gets its own index. */
3082
+ readonly activePosition: _angular_core.Signal<number>;
3083
+ /** Index of the leftmost visible slide, skipping a partially visible one in bounded mode. */
2985
3084
  readonly slideIndex: _angular_core.Signal<number>;
2986
3085
  readonly renderedActiveIndex: _angular_core.Signal<number>;
3086
+ readonly canPrev: _angular_core.Signal<boolean>;
3087
+ readonly canNext: _angular_core.Signal<boolean>;
2987
3088
  /**
2988
3089
  * Checks if a slide at the given rendered index is currently visible in the viewport.
2989
3090
  * Used to determine which slides should be accessible to screen readers.
@@ -2997,6 +3098,7 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
2997
3098
  transform: string;
2998
3099
  transition: string;
2999
3100
  }>;
3101
+ constructor();
3000
3102
  locked: boolean;
3001
3103
  dragging: boolean;
3002
3104
  private pendingFocus;
@@ -3024,20 +3126,25 @@ declare class CarouselContentComponent implements AfterViewInit, OnDestroy {
3024
3126
  */
3025
3127
  focusActiveSlide(): void;
3026
3128
  onTransitionEnd(e: TransitionEvent): void;
3027
- lockNavigation(): void;
3129
+ private clampIntoRange;
3130
+ private clampIndex;
3131
+ /** Snap to the nearest reachable position, including a fractional end. */
3132
+ private snap;
3028
3133
  /**
3029
- * Announces the current slide position to screen readers via LiveAnnouncer.
3030
- * Called after navigation to inform users of the slide change.
3134
+ * Range the track may be dragged or wheeled within. A looping track stays inside
3135
+ * its rendered duplicate buffer around `base`; a bounded one stops at the ends.
3031
3136
  */
3137
+ private dragBounds;
3138
+ lockNavigation(): void;
3032
3139
  announceSlideChange(): void;
3033
3140
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CarouselContentComponent, never>;
3034
- 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>;
3141
+ 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; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, ["slides"], never, true, never>;
3035
3142
  }
3036
3143
 
3037
3144
  declare class CarouselComponent {
3038
3145
  carouselContent: _angular_core.Signal<CarouselContentComponent>;
3039
3146
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CarouselComponent, never>;
3040
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselComponent, "tedi-carousel", never, {}, {}, ["carouselContent"], ["tedi-carousel-header", "tedi-carousel-content", "tedi-carousel-footer"], true, never>;
3147
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselComponent, "tedi-carousel", never, {}, {}, ["carouselContent"], ["tedi-carousel-header", "tedi-carousel-content", "tedi-carousel-navigation", "tedi-carousel-footer"], true, never>;
3041
3148
  }
3042
3149
 
3043
3150
  declare class CarouselFooterComponent {
@@ -3071,12 +3178,20 @@ declare class CarouselIndicatorsComponent {
3071
3178
  }
3072
3179
 
3073
3180
  declare class CarouselNavigationComponent {
3181
+ /**
3182
+ * Shows floating navigation buttons over the slides. Place navigation directly
3183
+ * inside `tedi-carousel`, outside the header and footer.
3184
+ * @default false
3185
+ */
3186
+ readonly overlay: _angular_core.InputSignalWithTransform<boolean, unknown>;
3074
3187
  readonly translationService: TediTranslationService;
3075
3188
  private readonly carousel;
3189
+ readonly canPrev: _angular_core.Signal<boolean>;
3190
+ readonly canNext: _angular_core.Signal<boolean>;
3076
3191
  handleNext(): void;
3077
3192
  handlePrev(): void;
3078
3193
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CarouselNavigationComponent, never>;
3079
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselNavigationComponent, "tedi-carousel-navigation", never, {}, {}, never, never, true, never>;
3194
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselNavigationComponent, "tedi-carousel-navigation", never, { "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3080
3195
  }
3081
3196
 
3082
3197
  /**
@@ -6810,40 +6925,6 @@ declare class FeedbackTextComponent {
6810
6925
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FeedbackTextComponent, "tedi-feedback-text", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6811
6926
  }
6812
6927
 
6813
- type LabelSize = "small" | "default";
6814
- type LabelColor = "primary" | "secondary";
6815
- type LabelVisuallyHidden = boolean | "reserve-space";
6816
- declare class LabelComponent {
6817
- private readonly field;
6818
- /**
6819
- * Size of the label. Falls back to the size of a wrapping `tedi-form-field`,
6820
- * so the label and the control scale together without being set twice.
6821
- * @default default
6822
- */
6823
- size: _angular_core.InputSignal<LabelSize | undefined>;
6824
- readonly resolvedSize: _angular_core.Signal<LabelSize>;
6825
- /**
6826
- * Whether label is required.
6827
- * @default false
6828
- */
6829
- required: _angular_core.InputSignal<boolean>;
6830
- /**
6831
- * Color of the label.
6832
- * @default secondary
6833
- */
6834
- color: _angular_core.InputSignal<LabelColor>;
6835
- /**
6836
- * Hides the label visually while keeping it in the accessibility tree, so the
6837
- * control it names stays named. `"reserve-space"` also keeps the label's line
6838
- * of layout, to align the field with labelled siblings in the same row.
6839
- * @default false
6840
- */
6841
- visuallyHidden: _angular_core.InputSignal<LabelVisuallyHidden>;
6842
- classes: _angular_core.Signal<string>;
6843
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<LabelComponent, never>;
6844
- 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; }; "visuallyHidden": { "alias": "visuallyHidden"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
6845
- }
6846
-
6847
6928
  declare class LabelRowComponent {
6848
6929
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LabelRowComponent, never>;
6849
6930
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<LabelRowComponent, "tedi-label-row", never, {}, {}, never, ["*"], true, never>;
@@ -6964,6 +7045,12 @@ declare class FormFieldComponent implements FieldContext {
6964
7045
  * @default false
6965
7046
  */
6966
7047
  clearable: _angular_core.InputSignal<boolean>;
7048
+ /**
7049
+ * Show the clear button only while the filled field is hovered or focused.
7050
+ * Requires `clearable`.
7051
+ * @default false
7052
+ */
7053
+ showClearOnInteraction: _angular_core.InputSignal<boolean>;
6967
7054
  /**
6968
7055
  * Custom CSS classes for the field box.
6969
7056
  *
@@ -7018,11 +7105,12 @@ declare class FormFieldComponent implements FieldContext {
7018
7105
  "tedi-form-field--valid": boolean;
7019
7106
  "tedi-form-field--invalid": boolean;
7020
7107
  "tedi-form-field--disabled": boolean;
7108
+ "tedi-form-field--clear-on-interaction": boolean;
7021
7109
  "tedi-form-field--small": boolean;
7022
7110
  "tedi-form-field--large": boolean;
7023
7111
  }>;
7024
7112
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, never>;
7025
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldComponent, "tedi-form-field", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inputClass": { "alias": "inputClass"; "required": false; "isSignal": true; }; "characterLimit": { "alias": "characterLimit"; "required": false; "isSignal": true; }; }, {}, ["control", "feedback"], ["label[tedi-label], tedi-label-row", "*", "tedi-feedback-text", "[tediFormFieldExtra]"], true, never>;
7113
+ 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; }; "showClearOnInteraction": { "alias": "showClearOnInteraction"; "required": false; "isSignal": true; }; "inputClass": { "alias": "inputClass"; "required": false; "isSignal": true; }; "characterLimit": { "alias": "characterLimit"; "required": false; "isSignal": true; }; }, {}, ["control", "feedback"], ["label[tedi-label], tedi-label-row", "*", "tedi-feedback-text", "[tediFormFieldExtra]"], true, never>;
7026
7114
  }
7027
7115
 
7028
7116
  /**
@@ -7145,6 +7233,12 @@ declare class SearchComponent<T = unknown> implements ControlValueAccessor {
7145
7233
  * @default true
7146
7234
  */
7147
7235
  clearable: _angular_core.InputSignal<boolean>;
7236
+ /**
7237
+ * Show the clear button only while the filled search field is hovered or focused.
7238
+ * Requires `clearable`.
7239
+ * @default false
7240
+ */
7241
+ showClearOnInteraction: _angular_core.InputSignal<boolean>;
7148
7242
  /**
7149
7243
  * Icon shown inside the input. Ignored when `button` is set.
7150
7244
  * @default "search"
@@ -7350,7 +7444,7 @@ declare class SearchComponent<T = unknown> implements ControlValueAccessor {
7350
7444
  private panelElement;
7351
7445
  private resetActiveOption;
7352
7446
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchComponent<any>, never>;
7353
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchComponent<any>, "tedi-search", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindDescription": { "alias": "bindDescription"; "required": false; "isSignal": true; }; "bindDisabled": { "alias": "bindDisabled"; "required": false; "isSignal": true; }; "minQueryLength": { "alias": "minQueryLength"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "panelOpen": { "alias": "panelOpen"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "resultsCountText": { "alias": "resultsCountText"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "panelOpen": "panelOpenChange"; "searchEvent": "searchEvent"; "clear": "clear"; "suggestionSelect": "suggestionSelect"; }, ["suggestionTemplate", "footerTemplate"], never, true, never>;
7447
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchComponent<any>, "tedi-search", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showClearOnInteraction": { "alias": "showClearOnInteraction"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "button": { "alias": "button"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindDescription": { "alias": "bindDescription"; "required": false; "isSignal": true; }; "bindDisabled": { "alias": "bindDisabled"; "required": false; "isSignal": true; }; "minQueryLength": { "alias": "minQueryLength"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "panelOpen": { "alias": "panelOpen"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "resultsCountText": { "alias": "resultsCountText"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "panelOpen": "panelOpenChange"; "searchEvent": "searchEvent"; "clear": "clear"; "suggestionSelect": "suggestionSelect"; }, ["suggestionTemplate", "footerTemplate"], never, true, never>;
7354
7448
  }
7355
7449
 
7356
7450
  declare class SearchSuggestionComponent implements Highlightable {
@@ -7565,6 +7659,12 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7565
7659
  * @default false
7566
7660
  */
7567
7661
  clearable: _angular_core.InputSignal<boolean>;
7662
+ /**
7663
+ * Show the clear button only while the filled select is hovered or focused.
7664
+ * Requires `clearable`.
7665
+ * @default false
7666
+ */
7667
+ showClearOnInteraction: _angular_core.InputSignal<boolean>;
7568
7668
  /**
7569
7669
  * Element reference used to determine dropdown width.
7570
7670
  * When null, dropdown width matches the host element.
@@ -7934,7 +8034,7 @@ declare class SelectComponent<T = unknown> implements AfterContentChecked, After
7934
8034
  registerOnTouched(fn: () => void): void;
7935
8035
  setDisabledState(isDisabled: boolean): void;
7936
8036
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent<any>, never>;
7937
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualItemSize": { "alias": "virtualItemSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; }, ["optionTemplate", "valueTemplate", "tooltipTemplate"], never, true, never>;
8037
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "tedi-select", never, { "inputId": { "alias": "inputId"; "required": true; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showClearOnInteraction": { "alias": "showClearOnInteraction"; "required": false; "isSignal": true; }; "dropdownWidthRef": { "alias": "dropdownWidthRef"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "feedbackText": { "alias": "feedbackText"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "allowMultiple": { "alias": "allowMultiple"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "selectableGroups": { "alias": "selectableGroups"; "required": false; "isSignal": true; }; "isTagRemovable": { "alias": "isTagRemovable"; "required": false; "isSignal": true; }; "multiRow": { "alias": "multiRow"; "required": false; "isSignal": true; }; "tagEllipsis": { "alias": "tagEllipsis"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledKey": { "alias": "disabledKey"; "required": false; "isSignal": true; }; "noOptionsMessage": { "alias": "noOptionsMessage"; "required": false; "isSignal": true; }; "maxDropdownHeight": { "alias": "maxDropdownHeight"; "required": false; "isSignal": true; }; "hideOnScroll": { "alias": "hideOnScroll"; "required": false; "isSignal": true; }; "dropdownType": { "alias": "dropdownType"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualItemSize": { "alias": "virtualItemSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchFn": { "alias": "searchFn"; "required": false; "isSignal": true; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; }, ["optionTemplate", "valueTemplate", "tooltipTemplate"], never, true, never>;
7938
8038
  }
7939
8039
 
7940
8040
  type SliderHideLabel = boolean | "keep-space";
@@ -8859,58 +8959,6 @@ declare class AttachmentActionsComponent {
8859
8959
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AttachmentActionsComponent, "tedi-attachment-actions", never, { "padded": { "alias": "padded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
8860
8960
  }
8861
8961
 
8862
- type EmptyStateType = "separate" | "attached" | "inside";
8863
- type EmptyStateSize = "default" | "small";
8864
- /**
8865
- * Communicates that there is nothing to display — empty search results, an
8866
- * unpopulated list, a freshly-created workspace — and optionally guides the
8867
- * user toward the next step via action buttons or a link.
8868
- *
8869
- * Description is projected via `<ng-content>`. Actions are projected via
8870
- * `<ng-content select="[tedi-empty-state-actions]">`.
8871
- */
8872
- declare class EmptyStateComponent {
8873
- /**
8874
- * Container variant — matches the Figma "Types" section.
8875
- * - `'separate'` (default) — full border + radius, stands on its own.
8876
- * - `'attached'` — top border omitted so the block sits flush beneath a
8877
- * preceding card or table (same width + same bottom-radius).
8878
- * - `'inside'` — no border, no radius; intended to be placed inside another
8879
- * container such as a `<tedi-card>` or `<tedi-table>`.
8880
- * @default separate
8881
- */
8882
- readonly type: _angular_core.InputSignal<EmptyStateType>;
8883
- /**
8884
- * Padding scale. `default` = 24px, `small` = 16px.
8885
- * @default default
8886
- */
8887
- readonly size: _angular_core.InputSignal<EmptyStateSize>;
8888
- /**
8889
- * Material icon name rendered above the text block. Pass `null` to hide.
8890
- * @default spa
8891
- */
8892
- readonly icon: _angular_core.InputSignal<string | null>;
8893
- /**
8894
- * Color of the icon. Defaults to brand so the empty state reads as a
8895
- * "fresh canvas" cue rather than a destructive state.
8896
- * @default brand
8897
- */
8898
- readonly iconColor: _angular_core.InputSignal<IconColor>;
8899
- /**
8900
- * Size of the icon, in pixels.
8901
- * @default 36
8902
- */
8903
- readonly iconSize: _angular_core.InputSignal<IconSize>;
8904
- /**
8905
- * Optional heading rendered above the description — appears as an `<h3>` in
8906
- * brand-primary text color.
8907
- */
8908
- readonly heading: _angular_core.InputSignal<string | undefined>;
8909
- protected readonly hostClasses: _angular_core.Signal<string>;
8910
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
8911
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "tedi-empty-state", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[tedi-empty-state-actions]"], true, never>;
8912
- }
8913
-
8914
8962
  type ColWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
8915
8963
  type JustifySelf = "start" | "end" | "center" | "stretch";
8916
8964
  type AlignSelf = "start" | "end" | "center" | "stretch";