@taiga-ui/core 5.0.0-rc.2 → 5.0.0-rc.4

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.
Files changed (138) hide show
  1. package/components/calendar/calendar-sheet.component.d.ts +8 -15
  2. package/components/calendar/calendar-spin.component.d.ts +5 -8
  3. package/components/calendar/calendar-year.component.d.ts +11 -19
  4. package/components/calendar/calendar.component.d.ts +7 -9
  5. package/components/checkbox/checkbox.component.d.ts +10 -0
  6. package/components/checkbox/checkbox.options.d.ts +10 -0
  7. package/components/checkbox/index.d.ts +2 -0
  8. package/components/data-list/data-list.component.d.ts +1 -0
  9. package/components/index.d.ts +3 -0
  10. package/components/input/input.directive.d.ts +2 -0
  11. package/components/loader/loader.component.d.ts +0 -2
  12. package/components/radio/index.d.ts +4 -0
  13. package/components/radio/radio.component.d.ts +18 -0
  14. package/components/radio/radio.d.ts +3 -0
  15. package/components/radio/radio.directive.d.ts +8 -0
  16. package/components/radio/radio.options.d.ts +7 -0
  17. package/components/slider/helpers/key-steps.d.ts +27 -0
  18. package/components/slider/helpers/slider-key-steps.directive.d.ts +32 -0
  19. package/components/slider/helpers/slider-readonly.directive.d.ts +15 -0
  20. package/components/slider/helpers/slider-thumb-label.component.d.ts +13 -0
  21. package/components/slider/index.d.ts +6 -0
  22. package/components/slider/slider.component.d.ts +22 -0
  23. package/components/slider/slider.d.ts +5 -0
  24. package/components/textfield/index.d.ts +0 -1
  25. package/components/textfield/textfield.component.d.ts +1 -0
  26. package/directives/items-handlers/items-handlers.validator.d.ts +1 -0
  27. package/fesm2022/taiga-ui-core-components-button.mjs +2 -2
  28. package/fesm2022/taiga-ui-core-components-button.mjs.map +1 -1
  29. package/fesm2022/taiga-ui-core-components-calendar.mjs +84 -174
  30. package/fesm2022/taiga-ui-core-components-calendar.mjs.map +1 -1
  31. package/fesm2022/taiga-ui-core-components-cell.mjs +2 -2
  32. package/fesm2022/taiga-ui-core-components-cell.mjs.map +1 -1
  33. package/fesm2022/taiga-ui-core-components-checkbox.mjs +37 -0
  34. package/fesm2022/taiga-ui-core-components-checkbox.mjs.map +1 -0
  35. package/fesm2022/taiga-ui-core-components-data-list.mjs +10 -4
  36. package/fesm2022/taiga-ui-core-components-data-list.mjs.map +1 -1
  37. package/fesm2022/taiga-ui-core-components-error.mjs +3 -3
  38. package/fesm2022/taiga-ui-core-components-error.mjs.map +1 -1
  39. package/fesm2022/taiga-ui-core-components-icon.mjs +2 -2
  40. package/fesm2022/taiga-ui-core-components-icon.mjs.map +1 -1
  41. package/fesm2022/taiga-ui-core-components-input.mjs +4 -2
  42. package/fesm2022/taiga-ui-core-components-input.mjs.map +1 -1
  43. package/fesm2022/taiga-ui-core-components-label.mjs +3 -3
  44. package/fesm2022/taiga-ui-core-components-label.mjs.map +1 -1
  45. package/fesm2022/taiga-ui-core-components-link.mjs +2 -2
  46. package/fesm2022/taiga-ui-core-components-link.mjs.map +1 -1
  47. package/fesm2022/taiga-ui-core-components-loader.mjs +5 -8
  48. package/fesm2022/taiga-ui-core-components-loader.mjs.map +1 -1
  49. package/fesm2022/taiga-ui-core-components-notification.mjs +2 -2
  50. package/fesm2022/taiga-ui-core-components-notification.mjs.map +1 -1
  51. package/fesm2022/taiga-ui-core-components-radio.mjs +91 -0
  52. package/fesm2022/taiga-ui-core-components-radio.mjs.map +1 -0
  53. package/fesm2022/taiga-ui-core-components-root.mjs +2 -2
  54. package/fesm2022/taiga-ui-core-components-root.mjs.map +1 -1
  55. package/fesm2022/taiga-ui-core-components-slider.mjs +337 -0
  56. package/fesm2022/taiga-ui-core-components-slider.mjs.map +1 -0
  57. package/fesm2022/taiga-ui-core-components-spin-button.mjs +2 -2
  58. package/fesm2022/taiga-ui-core-components-spin-button.mjs.map +1 -1
  59. package/fesm2022/taiga-ui-core-components-textfield.mjs +20 -21
  60. package/fesm2022/taiga-ui-core-components-textfield.mjs.map +1 -1
  61. package/fesm2022/taiga-ui-core-components-title.mjs +3 -3
  62. package/fesm2022/taiga-ui-core-components-title.mjs.map +1 -1
  63. package/fesm2022/taiga-ui-core-components.mjs +3 -0
  64. package/fesm2022/taiga-ui-core-components.mjs.map +1 -1
  65. package/fesm2022/taiga-ui-core-directives-appearance.mjs +3 -3
  66. package/fesm2022/taiga-ui-core-directives-appearance.mjs.map +1 -1
  67. package/fesm2022/taiga-ui-core-directives-group.mjs +3 -3
  68. package/fesm2022/taiga-ui-core-directives-group.mjs.map +1 -1
  69. package/fesm2022/taiga-ui-core-directives-icons.mjs +3 -3
  70. package/fesm2022/taiga-ui-core-directives-icons.mjs.map +1 -1
  71. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs +7 -1
  72. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs.map +1 -1
  73. package/fesm2022/taiga-ui-core-portals-alert.mjs +2 -2
  74. package/fesm2022/taiga-ui-core-portals-alert.mjs.map +1 -1
  75. package/fesm2022/taiga-ui-core-portals-dialog.mjs +2 -2
  76. package/fesm2022/taiga-ui-core-portals-dialog.mjs.map +1 -1
  77. package/fesm2022/taiga-ui-core-portals-dropdown.mjs +167 -115
  78. package/fesm2022/taiga-ui-core-portals-dropdown.mjs.map +1 -1
  79. package/fesm2022/taiga-ui-core-portals-hint.mjs +3 -3
  80. package/fesm2022/taiga-ui-core-portals-hint.mjs.map +1 -1
  81. package/fesm2022/taiga-ui-core-portals-modal.mjs +2 -2
  82. package/fesm2022/taiga-ui-core-portals-modal.mjs.map +1 -1
  83. package/fesm2022/taiga-ui-core-portals-popup.mjs +2 -2
  84. package/fesm2022/taiga-ui-core-portals-popup.mjs.map +1 -1
  85. package/fesm2022/taiga-ui-core-tokens.mjs +1 -1
  86. package/fesm2022/taiga-ui-core-tokens.mjs.map +1 -1
  87. package/fesm2022/taiga-ui-core-utils-miscellaneous.mjs.map +1 -1
  88. package/package.json +32 -20
  89. package/portals/dropdown/dropdown-a11y.directive.d.ts +10 -0
  90. package/portals/dropdown/dropdown-close.directive.d.ts +3 -3
  91. package/portals/dropdown/dropdown-open.directive.d.ts +4 -3
  92. package/portals/dropdown/dropdown-selection.directive.d.ts +1 -0
  93. package/portals/dropdown/dropdown.d.ts +2 -1
  94. package/portals/dropdown/dropdown.directive.d.ts +5 -5
  95. package/portals/dropdown/index.d.ts +1 -0
  96. package/utils/miscellaneous/font-scaling.d.ts +2 -2
  97. package/components/textfield/textfield-icon.d.ts +0 -6
  98. package/styles/components/appearance.less +0 -51
  99. package/styles/components/button.less +0 -134
  100. package/styles/components/group.less +0 -172
  101. package/styles/components/icon.less +0 -83
  102. package/styles/components/icons.less +0 -79
  103. package/styles/components/label.less +0 -51
  104. package/styles/components/link.less +0 -69
  105. package/styles/components/notification.less +0 -184
  106. package/styles/components/textfield.less +0 -358
  107. package/styles/components/title.less +0 -80
  108. package/styles/mixins/appearance.less +0 -56
  109. package/styles/mixins/appearance.scss +0 -57
  110. package/styles/mixins/browsers.less +0 -23
  111. package/styles/mixins/browsers.scss +0 -23
  112. package/styles/mixins/date-picker.less +0 -152
  113. package/styles/mixins/mixins.less +0 -168
  114. package/styles/mixins/mixins.scss +0 -161
  115. package/styles/mixins/picker.less +0 -200
  116. package/styles/mixins/picker.scss +0 -199
  117. package/styles/mixins/slider.less +0 -67
  118. package/styles/mixins/slider.scss +0 -67
  119. package/styles/taiga-ui-fonts.less +0 -4
  120. package/styles/taiga-ui-local.less +0 -7
  121. package/styles/taiga-ui-local.scss +0 -6
  122. package/styles/taiga-ui-theme.less +0 -4
  123. package/styles/theme/appearance/accent.less +0 -14
  124. package/styles/theme/appearance/action.less +0 -38
  125. package/styles/theme/appearance/flat.less +0 -23
  126. package/styles/theme/appearance/floating.less +0 -21
  127. package/styles/theme/appearance/glass.less +0 -30
  128. package/styles/theme/appearance/outline.less +0 -78
  129. package/styles/theme/appearance/primary.less +0 -48
  130. package/styles/theme/appearance/secondary.less +0 -77
  131. package/styles/theme/appearance/status.less +0 -125
  132. package/styles/theme/appearance/table.less +0 -68
  133. package/styles/theme/appearance/textfield.less +0 -80
  134. package/styles/theme/appearance.less +0 -12
  135. package/styles/theme/palette.less +0 -161
  136. package/styles/theme/variables.less +0 -42
  137. package/styles/variables/media.less +0 -23
  138. package/styles/variables/media.scss +0 -23
@@ -1,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Directive, InjectionToken, Optional, Self, SkipSelf, inject, ChangeDetectorRef, effect, signal, INJECTOR, input, computed, TemplateRef, forwardRef, ChangeDetectionStrategy, Component, PLATFORM_ID, contentChild, ElementRef, model, ViewContainerRef } from '@angular/core';
2
+ import { Injectable, Directive, InjectionToken, Optional, Self, SkipSelf, inject, ChangeDetectorRef, effect, signal, INJECTOR, input, TemplateRef, computed, forwardRef, ChangeDetectionStrategy, Component, contentChild, ElementRef, model, PLATFORM_ID, ViewContainerRef } from '@angular/core';
3
3
  import { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
4
  import { EMPTY_CLIENT_RECT, TUI_TRUE_HANDLER, CHAR_ZERO_WIDTH_SPACE, CHAR_NO_BREAK_SPACE } from '@taiga-ui/cdk/constants';
5
5
  import * as i1 from '@taiga-ui/cdk/directives/active-zone';
6
6
  import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
7
7
  import * as i2 from '@taiga-ui/cdk/directives/animated';
8
8
  import { TuiAnimated } from '@taiga-ui/cdk/directives/animated';
9
- import { tuiInjectElement, tuiGetActualTarget, tuiPointToClientRect, tuiIsElement, tuiIsElementEditable, tuiIsHTMLElement, tuiIsTextNode, tuiIsTextfield } from '@taiga-ui/cdk/utils/dom';
9
+ import { tuiInjectElement, tuiGetActualTarget, tuiIsElement, tuiIsElementEditable, tuiIsHTMLElement, tuiPointToClientRect, tuiIsTextNode, tuiIsTextfield } from '@taiga-ui/cdk/utils/dom';
10
10
  import { tuiClamp } from '@taiga-ui/cdk/utils/math';
11
- import { tuiPx, tuiSetSignal, tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
11
+ import { tuiGenerateId, tuiPx, tuiSetSignal, tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
12
12
  import { TuiDriverDirective, TuiPositionAccessor, tuiFallbackAccessor, TuiRectAccessor, tuiAsVehicle, tuiPositionAccessorFor, tuiRectAccessorFor, tuiAsDriver, tuiAsRectAccessor, TuiDriver, tuiAsPositionAccessor } from '@taiga-ui/core/classes';
13
13
  import { TuiScrollbar } from '@taiga-ui/core/components/scrollbar';
14
14
  import { TuiVisualViewportService, TuiPositionService } from '@taiga-ui/core/services';
@@ -16,16 +16,16 @@ import { TUI_VIEWPORT, TUI_DARK_MODE, TUI_SELECTION_STREAM } from '@taiga-ui/cor
16
16
  import { PolymorpheusComponent, PolymorpheusTemplate, PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
17
17
  import { BehaviorSubject, Subject, distinctUntilChanged, throttleTime, takeWhile, map, merge, filter, EMPTY, switchMap, delay, startWith, takeUntil, fromEvent, of, tap, share, combineLatest } from 'rxjs';
18
18
  import { coerceArray } from '@angular/cdk/coercion';
19
- import { tuiZonefreeScheduler, tuiTypedFromEvent, tuiZoneOptimized, tuiIfMap, tuiCloseWatcher, tuiStopPropagation } from '@taiga-ui/cdk/observables';
19
+ import { tuiZonefreeScheduler, tuiIfMap, tuiCloseWatcher, tuiTypedFromEvent, tuiStopPropagation, tuiZoneOptimized } from '@taiga-ui/cdk/observables';
20
20
  import { TuiPopupService } from '@taiga-ui/core/portals/popup';
21
21
  import { tuiCheckFixedPosition, tuiGetWordRange } from '@taiga-ui/core/utils/dom';
22
22
  import { tuiProvide, tuiCreateOptions, tuiDirectiveBinding } from '@taiga-ui/cdk/utils/di';
23
23
  import { tuiOverrideOptions, tuiIsEditingKey } from '@taiga-ui/core/utils/miscellaneous';
24
- import { isPlatformBrowser, DOCUMENT } from '@angular/common';
25
- import { WA_IS_TOUCH } from '@ng-web-apis/platform';
24
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
26
25
  import * as i1$1 from '@taiga-ui/cdk/directives/obscured';
27
26
  import { TuiObscured } from '@taiga-ui/cdk/directives/obscured';
28
27
  import { tuiIsFocusable, tuiGetClosestFocusable, tuiIsFocusedIn, tuiGetFocused } from '@taiga-ui/cdk/utils/focus';
28
+ import { WA_IS_TOUCH } from '@ng-web-apis/platform';
29
29
 
30
30
  class TuiDropdownDriver extends BehaviorSubject {
31
31
  constructor() {
@@ -194,22 +194,25 @@ class TuiDropdownDirective {
194
194
  this.toggle(false);
195
195
  }
196
196
  });
197
+ this.id = tuiGenerateId();
197
198
  this.ref = signal(null);
198
199
  this.el = tuiInjectElement();
199
200
  this.type = 'dropdown';
200
201
  this.component = new PolymorpheusComponent(inject(TUI_DROPDOWN_COMPONENT), inject(INJECTOR));
201
- this.tuiDropdown = input();
202
- this.content = computed((content = this.tuiDropdown()) => {
203
- return content instanceof TemplateRef
202
+ this.content = input(null, {
203
+ alias: 'tuiDropdown',
204
+ transform: (content) => content instanceof TemplateRef
204
205
  ? new PolymorpheusTemplate(content, this.cdr)
205
- : content;
206
+ : content,
206
207
  });
207
208
  }
208
209
  get position() {
209
210
  return tuiCheckFixedPosition(this.el) ? 'fixed' : 'absolute';
210
211
  }
211
212
  ngAfterViewChecked() {
212
- this.refresh$.next();
213
+ if (this.ref()) {
214
+ this.refresh$.next();
215
+ }
213
216
  }
214
217
  ngOnDestroy() {
215
218
  this.toggle(false);
@@ -226,12 +229,11 @@ class TuiDropdownDirective {
226
229
  this.ref.set(null);
227
230
  ref.destroy();
228
231
  }
229
- // TODO: Remove in v5, only needed in Angular 16
230
- this.cdr.markForCheck();
232
+ this.ref()?.location.nativeElement.setAttribute('id', this.id);
231
233
  this.drivers.forEach((driver) => driver?.next(show));
232
234
  }
233
235
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
234
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiDropdownDirective, isStandalone: true, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: { tuiDropdown: { classPropertyName: "tuiDropdown", publicName: "tuiDropdown", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.tui-dropdown-open": "ref()" } }, providers: [tuiAsVehicle(TuiDropdownDirective)], exportAs: ["tuiDropdown"], hostDirectives: [{ directive: TuiDropdownDriverDirective }, { directive: TuiDropdownPosition, outputs: ["tuiDropdownDirectionChange", "tuiDropdownDirectionChange"] }], ngImport: i0 }); }
236
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiDropdownDirective, isStandalone: true, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: { content: { classPropertyName: "content", publicName: "tuiDropdown", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.tui-dropdown-open": "ref()" } }, providers: [tuiAsVehicle(TuiDropdownDirective)], exportAs: ["tuiDropdown"], hostDirectives: [{ directive: TuiDropdownDriverDirective }, { directive: TuiDropdownPosition, outputs: ["tuiDropdownDirectionChange", "tuiDropdownDirectionChange"] }], ngImport: i0 }); }
235
237
  }
236
238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownDirective, decorators: [{
237
239
  type: Directive,
@@ -250,6 +252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
250
252
  }]
251
253
  }] });
252
254
 
255
+ const MAX_WIDTH_GAP = 16; // 8px min gap from each side
253
256
  /**
254
257
  * @description:
255
258
  * This component is used to show template in a portal
@@ -283,6 +286,7 @@ class TuiDropdownComponent {
283
286
  const { left = 0, top = 0 } = this.position === 'fixed' ? {} : parent;
284
287
  const rect = this.accessor.getClientRect();
285
288
  const viewport = this.viewport.getClientRect();
289
+ const zoom = this.directive.el.currentCSSZoom || 1;
286
290
  const above = rect.top - viewport.top - 2 * offset;
287
291
  const below = viewport.top + viewport.height - y - offset;
288
292
  const available = y > rect.bottom ? below : above;
@@ -293,12 +297,12 @@ class TuiDropdownComponent {
293
297
  x -= left;
294
298
  return {
295
299
  position: this.position,
296
- top: tuiPx(Math.round(Math.max(y, offset - top))),
297
- left: tuiPx(Math.round(x)),
298
- maxHeight: tuiPx(Math.round(height)),
299
- width: limitWidth === 'fixed' ? tuiPx(Math.round(rect.width)) : '',
300
- minWidth: limitWidth === 'min' ? tuiPx(Math.round(rect.width)) : '',
301
- maxWidth: tuiPx(Math.round(viewport.width) - 16), // 8px min gap from each side
300
+ top: tuiPx(Math.round(Math.max(y, offset - top) / zoom)),
301
+ left: tuiPx(Math.round(x / zoom)),
302
+ maxHeight: tuiPx(Math.round(height / zoom)),
303
+ width: limitWidth === 'fixed' ? tuiPx(Math.round(rect.width / zoom)) : '',
304
+ minWidth: limitWidth === 'min' ? tuiPx(Math.round(rect.width / zoom)) : '',
305
+ maxWidth: tuiPx(Math.round(viewport.width / zoom) - MAX_WIDTH_GAP),
302
306
  };
303
307
  }
304
308
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -306,7 +310,7 @@ class TuiDropdownComponent {
306
310
  TuiPositionService,
307
311
  tuiPositionAccessorFor('dropdown', TuiDropdownPosition),
308
312
  tuiRectAccessorFor('dropdown', forwardRef(() => TuiDropdownDirective)),
309
- ], hostDirectives: [{ directive: i1.TuiActiveZone }, { directive: i2.TuiAnimated }], ngImport: i0, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive.content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:100%;inline-size:max-content;overscroll-behavior:none}.t-primitive{padding:1rem}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
313
+ ], hostDirectives: [{ directive: i1.TuiActiveZone }, { directive: i2.TuiAnimated }], ngImport: i0, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive.content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host:has(tui-data-list[data-size=l]){border-radius:var(--tui-radius-l)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:calc(100% + 2px);inline-size:max-content;overscroll-behavior:none;margin:-1px}.t-primitive{padding:1rem}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
310
314
  }
311
315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownComponent, decorators: [{
312
316
  type: Component,
@@ -317,91 +321,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
317
321
  ], hostDirectives: [TuiActiveZone, TuiAnimated], host: {
318
322
  '[attr.data-appearance]': 'options.appearance',
319
323
  '[attr.tuiTheme]': 'theme()',
320
- }, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive.content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:100%;inline-size:max-content;overscroll-behavior:none}.t-primitive{padding:1rem}\n"] }]
324
+ }, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive.content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host:has(tui-data-list[data-size=l]){border-radius:var(--tui-radius-l)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:calc(100% + 2px);inline-size:max-content;overscroll-behavior:none;margin:-1px}.t-primitive{padding:1rem}\n"] }]
321
325
  }] });
322
326
 
323
- class TuiDropdownContent {
324
- constructor() {
325
- this.directive = inject(TuiDropdownDirective);
326
- tuiSetSignal(this.directive.tuiDropdown, inject(TemplateRef));
327
- if (isPlatformBrowser(inject(PLATFORM_ID)) &&
328
- this.directive.el.matches(':focus-within')) {
329
- this.directive.toggle(true);
330
- }
331
- }
332
- ngOnDestroy() {
333
- tuiSetSignal(this.directive.tuiDropdown, null);
334
- }
335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
336
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: TuiDropdownContent, isStandalone: true, selector: "ng-template[tuiDropdown]", ngImport: i0 }); }
337
- }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContent, decorators: [{
339
- type: Directive,
340
- args: [{ selector: 'ng-template[tuiDropdown]' }]
341
- }], ctorParameters: () => [] });
342
-
343
- class TuiDropdownContext extends TuiRectAccessor {
344
- constructor() {
345
- super(...arguments);
346
- this.isTouch = inject(WA_IS_TOUCH);
347
- this.currentRect = EMPTY_CLIENT_RECT;
348
- this.userSelect = computed(() => (this.isTouch() ? 'none' : null));
349
- this.activeZone = inject(TuiActiveZone);
350
- this.driver = inject(TuiDropdownDriver);
351
- this.doc = inject(DOCUMENT);
352
- this.sub = merge(tuiTypedFromEvent(this.doc, 'pointerdown'), tuiTypedFromEvent(this.doc, 'keydown').pipe(filter(({ key }) => key === 'Escape')), tuiTypedFromEvent(this.doc, 'contextmenu', { capture: true }))
353
- .pipe(filter((event) => this.driver.value &&
354
- !this.activeZone.contains(tuiGetActualTarget(event))), tuiZoneOptimized(), takeUntilDestroyed())
355
- .subscribe(() => {
356
- this.driver.next(false);
357
- this.currentRect = EMPTY_CLIENT_RECT;
358
- });
359
- this.type = 'dropdown';
360
- }
361
- getClientRect() {
362
- return this.currentRect;
363
- }
364
- onContextMenu(x, y) {
365
- this.currentRect = tuiPointToClientRect(x, y);
366
- this.driver.next(true);
367
- }
368
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContext, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
369
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: TuiDropdownContext, isStandalone: true, selector: "[tuiDropdownContext]", host: { listeners: { "longtap": "onContextMenu($event.detail.clientX, $event.detail.clientY)" }, properties: { "style.user-select": "userSelect()", "style.-webkit-user-select": "userSelect()", "style.-webkit-touch-callout": "userSelect()" } }, providers: [
370
- TuiActiveZone,
371
- TuiDropdownDriver,
372
- tuiAsDriver(TuiDropdownDriver),
373
- tuiAsRectAccessor(TuiDropdownContext),
374
- ], usesInheritance: true, ngImport: i0 }); }
375
- }
376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContext, decorators: [{
377
- type: Directive,
378
- args: [{
379
- selector: '[tuiDropdownContext]',
380
- providers: [
381
- TuiActiveZone,
382
- TuiDropdownDriver,
383
- tuiAsDriver(TuiDropdownDriver),
384
- tuiAsRectAccessor(TuiDropdownContext),
385
- ],
386
- host: {
387
- '[style.user-select]': 'userSelect()',
388
- '[style.-webkit-user-select]': 'userSelect()',
389
- '[style.-webkit-touch-callout]': 'userSelect()',
390
- '(longtap)': 'onContextMenu($event.detail.clientX, $event.detail.clientY)',
391
- },
392
- }]
393
- }] });
394
-
395
- /** Default values for hint options */
396
- const TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS = {
397
- showDelay: 200,
398
- hideDelay: 500,
399
- };
400
- /**
401
- * Default parameters for dropdown hover directive
402
- */
403
- const [TUI_DROPDOWN_HOVER_OPTIONS, tuiDropdownHoverOptionsProvider] = tuiCreateOptions(TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS);
404
-
405
327
  class TuiDropdownClose {
406
328
  constructor() {
407
329
  this.el = tuiInjectElement();
@@ -516,7 +438,7 @@ class TuiDropdownOpen {
516
438
  focusable?.focus();
517
439
  }
518
440
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownOpen, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
519
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.18", type: TuiDropdownOpen, isStandalone: true, selector: "[tuiDropdown][tuiDropdownAuto],[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]", inputs: { enabled: { classPropertyName: "enabled", publicName: "tuiDropdownEnabled", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "tuiDropdownOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "tuiDropdownOpenChange" }, host: { listeners: { "click": "onClick($event.target)", "keydown.arrowDown": "onArrow($event, false)", "keydown.arrowUp": "onArrow($event, true)", "tuiActiveZoneChange": "0", "tuiDropdownClose": "toggle(false)" } }, providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)], queries: [{ propertyName: "dropdownHost", first: true, predicate: ["tuiDropdownHost"], descendants: true, read: ElementRef, isSignal: true }], hostDirectives: [{ directive: i1$1.TuiObscured }, { directive: TuiDropdownClose, outputs: ["tuiDropdownClose", "tuiDropdownClose"] }, { directive: i1.TuiActiveZone, inputs: ["tuiActiveZoneParent", "tuiActiveZoneParent"], outputs: ["tuiActiveZoneChange", "tuiActiveZoneChange"] }], ngImport: i0 }); }
441
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.18", type: TuiDropdownOpen, isStandalone: true, selector: "[tuiDropdown][tuiDropdownAuto],[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]", inputs: { enabled: { classPropertyName: "enabled", publicName: "tuiDropdownEnabled", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "tuiDropdownOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "tuiDropdownOpenChange" }, host: { listeners: { "click": "onClick($event.target)", "keydown.arrowDown": "onArrow($event, false)", "keydown.arrowUp": "onArrow($event, true)", "tuiActiveZoneChange": "0", "tuiDropdownClose": "toggle(false)" } }, providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)], queries: [{ propertyName: "dropdownHost", first: true, predicate: ["tuiDropdownHost"], descendants: true, read: ElementRef, isSignal: true }], hostDirectives: [{ directive: i1$1.TuiObscured }, { directive: i0.forwardRef(() => TuiDropdownA11y), inputs: ["tuiDropdownRole", "tuiDropdownRole"] }, { directive: TuiDropdownClose, outputs: ["tuiDropdownClose", "tuiDropdownClose"] }, { directive: i1.TuiActiveZone, inputs: ["tuiActiveZoneParent", "tuiActiveZoneParent"], outputs: ["tuiActiveZoneChange", "tuiActiveZoneChange"] }], ngImport: i0 }); }
520
442
  }
521
443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownOpen, decorators: [{
522
444
  type: Directive,
@@ -525,10 +447,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
525
447
  providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)],
526
448
  hostDirectives: [
527
449
  TuiObscured,
528
- {
529
- directive: TuiDropdownClose,
530
- outputs: ['tuiDropdownClose'],
531
- },
450
+ { directive: forwardRef(() => TuiDropdownA11y), inputs: ['tuiDropdownRole'] },
451
+ { directive: TuiDropdownClose, outputs: ['tuiDropdownClose'] },
532
452
  {
533
453
  directive: TuiActiveZone,
534
454
  inputs: ['tuiActiveZoneParent'],
@@ -546,6 +466,118 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
546
466
  }]
547
467
  }] });
548
468
 
469
+ class TuiDropdownA11y {
470
+ constructor() {
471
+ this.el = tuiInjectElement();
472
+ this.dropdown = inject(TuiDropdownDirective);
473
+ this.open = inject(forwardRef(() => TuiDropdownOpen), { self: true, optional: true });
474
+ this.tuiDropdownRole = input('listbox');
475
+ this.sync = effect(() => {
476
+ const content = this.dropdown.content();
477
+ const dropdown = this.dropdown.ref();
478
+ const host = this.open?.host || this.el;
479
+ host.setAttribute('aria-expanded', String(!!dropdown));
480
+ host.setAttribute('aria-controls', this.dropdown.id);
481
+ host.setAttribute('aria-haspopup', this.tuiDropdownRole());
482
+ dropdown?.location.nativeElement.setAttribute('role', this.tuiDropdownRole());
483
+ if (content) {
484
+ return;
485
+ }
486
+ host.removeAttribute('aria-expanded');
487
+ host.removeAttribute('aria-controls');
488
+ host.removeAttribute('aria-haspopup');
489
+ });
490
+ }
491
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownA11y, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
492
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiDropdownA11y, isStandalone: true, selector: "[tuiDropdownA11y]", inputs: { tuiDropdownRole: { classPropertyName: "tuiDropdownRole", publicName: "tuiDropdownRole", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
493
+ }
494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownA11y, decorators: [{
495
+ type: Directive,
496
+ args: [{ selector: '[tuiDropdownA11y]' }]
497
+ }] });
498
+
499
+ class TuiDropdownContent {
500
+ constructor() {
501
+ this.directive = inject(TuiDropdownDirective);
502
+ tuiSetSignal(this.directive.content, inject(TemplateRef));
503
+ if (isPlatformBrowser(inject(PLATFORM_ID)) &&
504
+ this.directive.el.matches(':focus-within')) {
505
+ this.directive.toggle(true);
506
+ }
507
+ }
508
+ ngOnDestroy() {
509
+ tuiSetSignal(this.directive.content, null);
510
+ }
511
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
512
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: TuiDropdownContent, isStandalone: true, selector: "ng-template[tuiDropdown]", ngImport: i0 }); }
513
+ }
514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContent, decorators: [{
515
+ type: Directive,
516
+ args: [{ selector: 'ng-template[tuiDropdown]' }]
517
+ }], ctorParameters: () => [] });
518
+
519
+ class TuiDropdownContext extends TuiRectAccessor {
520
+ constructor() {
521
+ super(...arguments);
522
+ this.isTouch = inject(WA_IS_TOUCH);
523
+ this.currentRect = EMPTY_CLIENT_RECT;
524
+ this.userSelect = computed(() => (this.isTouch() ? 'none' : null));
525
+ this.activeZone = inject(TuiActiveZone);
526
+ this.driver = inject(TuiDropdownDriver);
527
+ this.doc = inject(DOCUMENT);
528
+ this.sub = merge(tuiTypedFromEvent(this.doc, 'pointerdown'), tuiTypedFromEvent(this.doc, 'keydown').pipe(filter(({ key }) => key === 'Escape')), tuiTypedFromEvent(this.doc, 'contextmenu', { capture: true }))
529
+ .pipe(filter((event) => this.driver.value &&
530
+ !this.activeZone.contains(tuiGetActualTarget(event))), tuiZoneOptimized(), takeUntilDestroyed())
531
+ .subscribe(() => {
532
+ this.driver.next(false);
533
+ this.currentRect = EMPTY_CLIENT_RECT;
534
+ });
535
+ this.type = 'dropdown';
536
+ }
537
+ getClientRect() {
538
+ return this.currentRect;
539
+ }
540
+ onContextMenu(x, y) {
541
+ this.currentRect = tuiPointToClientRect(x, y);
542
+ this.driver.next(true);
543
+ }
544
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContext, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
545
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: TuiDropdownContext, isStandalone: true, selector: "[tuiDropdownContext]", host: { listeners: { "longtap": "onContextMenu($event.detail.clientX, $event.detail.clientY)" }, properties: { "style.user-select": "userSelect()", "style.-webkit-user-select": "userSelect()", "style.-webkit-touch-callout": "userSelect()" } }, providers: [
546
+ TuiActiveZone,
547
+ TuiDropdownDriver,
548
+ tuiAsDriver(TuiDropdownDriver),
549
+ tuiAsRectAccessor(TuiDropdownContext),
550
+ ], usesInheritance: true, ngImport: i0 }); }
551
+ }
552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownContext, decorators: [{
553
+ type: Directive,
554
+ args: [{
555
+ selector: '[tuiDropdownContext]',
556
+ providers: [
557
+ TuiActiveZone,
558
+ TuiDropdownDriver,
559
+ tuiAsDriver(TuiDropdownDriver),
560
+ tuiAsRectAccessor(TuiDropdownContext),
561
+ ],
562
+ host: {
563
+ '[style.user-select]': 'userSelect()',
564
+ '[style.-webkit-user-select]': 'userSelect()',
565
+ '[style.-webkit-touch-callout]': 'userSelect()',
566
+ '(longtap)': 'onContextMenu($event.detail.clientX, $event.detail.clientY)',
567
+ },
568
+ }]
569
+ }] });
570
+
571
+ /** Default values for hint options */
572
+ const TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS = {
573
+ showDelay: 200,
574
+ hideDelay: 500,
575
+ };
576
+ /**
577
+ * Default parameters for dropdown hover directive
578
+ */
579
+ const [TUI_DROPDOWN_HOVER_OPTIONS, tuiDropdownHoverOptionsProvider] = tuiCreateOptions(TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS);
580
+
549
581
  class TuiDropdownHover extends TuiDriver {
550
582
  constructor() {
551
583
  super((subscriber) => this.stream$.subscribe(subscriber));
@@ -683,13 +715,20 @@ class TuiDropdownSelection extends TuiDriver {
683
715
  inject(TUI_SELECTION_STREAM).pipe(map(() => this.getRange()), filter((range) => this.isValid(range)), distinctUntilChanged((x, y) => x.startOffset === y.startOffset &&
684
716
  x.endOffset === y.endOffset &&
685
717
  x.commonAncestorContainer === y.commonAncestorContainer)),
686
- ]).pipe(map(([handler, range]) => {
687
- const contained = this.el.contains(range.commonAncestorContainer);
718
+ merge(fromEvent(this.el, 'scroll', { passive: true, capture: true })).pipe(throttleTime(16, undefined, { leading: false, trailing: true }), startWith(0)),
719
+ ]).pipe(tap(([, range]) => {
688
720
  this.range =
689
- contained && tuiIsTextNode(range.commonAncestorContainer)
721
+ this.el.contains(range.commonAncestorContainer) &&
722
+ tuiIsTextNode(range.commonAncestorContainer)
690
723
  ? range
691
724
  : this.range;
692
- return (contained && handler(this.range)) || this.inDropdown(range);
725
+ }), map(([handler, range]) => {
726
+ const contained = this.el.contains(range.commonAncestorContainer);
727
+ const valid = contained && handler(this.range);
728
+ const visible = valid || this.inDropdown(range);
729
+ const active = tuiGetFocused(this.doc);
730
+ const textfield = active && tuiIsTextfield(active) && this.el.contains(active);
731
+ return visible && textfield ? this.isCaretVisible(this.range) : visible;
693
732
  }));
694
733
  this.range = isPlatformBrowser(inject(PLATFORM_ID))
695
734
  ? new Range()
@@ -790,6 +829,18 @@ class TuiDropdownSelection extends TuiDriver {
790
829
  this.ghost = ghost;
791
830
  return ghost;
792
831
  }
832
+ isCaretVisible(range) {
833
+ const caret = range.getBoundingClientRect();
834
+ const host = this.ghostHost.getBoundingClientRect();
835
+ const styles = getComputedStyle(this.ghostHost);
836
+ const fontSize = parseFloat(styles.fontSize) || 16;
837
+ const lineHeight = parseFloat(styles.lineHeight) || fontSize * 1.2;
838
+ const visibleTop = Math.max(caret.top, host.top);
839
+ const visibleBottom = Math.min(caret.bottom, host.bottom);
840
+ const visibleHeight = Math.max(0, visibleBottom - visibleTop);
841
+ const threshold = lineHeight * 0.5;
842
+ return visibleHeight >= threshold;
843
+ }
793
844
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiDropdownSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
794
845
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiDropdownSelection, isStandalone: true, selector: "[tuiDropdownSelection]", inputs: { tuiDropdownSelection: { classPropertyName: "tuiDropdownSelection", publicName: "tuiDropdownSelection", isSignal: true, isRequired: false, transformFunction: null }, tuiDropdownSelectionPosition: { classPropertyName: "tuiDropdownSelectionPosition", publicName: "tuiDropdownSelectionPosition", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
795
846
  tuiAsDriver(TuiDropdownSelection),
@@ -812,6 +863,7 @@ const TuiDropdown = [
812
863
  TuiDropdownDriverDirective,
813
864
  TuiDropdownDirective,
814
865
  TuiDropdownComponent,
866
+ TuiDropdownA11y,
815
867
  TuiDropdownOpen,
816
868
  TuiDropdownManual,
817
869
  TuiDropdownHover,
@@ -823,7 +875,7 @@ const TuiDropdown = [
823
875
  ];
824
876
 
825
877
  function tuiDropdown(value) {
826
- return tuiDirectiveBinding(TuiDropdownDirective, 'tuiDropdown', value, {});
878
+ return tuiDirectiveBinding(TuiDropdownDirective, 'content', value, {});
827
879
  }
828
880
  function tuiDropdownEnabled(value) {
829
881
  return tuiDirectiveBinding(TuiDropdownOpen, 'enabled', value, {});
@@ -877,5 +929,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
877
929
  * Generated bundle index. Do not edit.
878
930
  */
879
931
 
880
- export { TUI_DROPDOWN_COMPONENT, TUI_DROPDOWN_CONTEXT, TUI_DROPDOWN_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_OPTIONS, TUI_DROPDOWN_OPTIONS, TuiDropdown, TuiDropdownAuto, TuiDropdownClose, TuiDropdownComponent, TuiDropdownContent, TuiDropdownContext, TuiDropdownDirective, TuiDropdownDriver, TuiDropdownDriverDirective, TuiDropdownFixed, TuiDropdownHover, TuiDropdownManual, TuiDropdownOpen, TuiDropdownOptionsDirective, TuiDropdownPosition, TuiDropdownPositionSided, TuiDropdownSelection, TuiWithDropdownOpen, tuiDropdown, tuiDropdownEnabled, tuiDropdownHoverOptionsProvider, tuiDropdownOptionsProvider };
932
+ export { TUI_DROPDOWN_COMPONENT, TUI_DROPDOWN_CONTEXT, TUI_DROPDOWN_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_OPTIONS, TUI_DROPDOWN_OPTIONS, TuiDropdown, TuiDropdownA11y, TuiDropdownAuto, TuiDropdownClose, TuiDropdownComponent, TuiDropdownContent, TuiDropdownContext, TuiDropdownDirective, TuiDropdownDriver, TuiDropdownDriverDirective, TuiDropdownFixed, TuiDropdownHover, TuiDropdownManual, TuiDropdownOpen, TuiDropdownOptionsDirective, TuiDropdownPosition, TuiDropdownPositionSided, TuiDropdownSelection, TuiWithDropdownOpen, tuiDropdown, tuiDropdownEnabled, tuiDropdownHoverOptionsProvider, tuiDropdownOptionsProvider };
881
933
  //# sourceMappingURL=taiga-ui-core-portals-dropdown.mjs.map