ngx-tethys 21.0.5 → 21.0.6

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/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [21.0.6](github.com/atinc/ngx-tethys/compare/21.0.5...21.0.6) (2026-07-02)
6
+
7
+
8
+ ### Features
9
+
10
+ * add flexiblePosition config for overlays #NEXUS-2762 ([#3826](/github.com/atinc/ngx-tethys/issues/3826)) ([9771c12](github.com/atinc/ngx-tethys/commits/9771c123245b5518a5f2b6f15123f34ccf1f4249)), closes [#NEXUS-2762](github.com/atinc/ngx-tethys/issues/NEXUS-2762)
11
+
5
12
  ## [21.0.5](github.com/atinc/ngx-tethys/compare/21.0.4...21.0.5) (2026-06-25)
6
13
 
7
14
 
@@ -12,7 +12,7 @@ import { ThyOptionRender, ThyOptionSelectionChangeEvent, ThyStopPropagationDirec
12
12
  import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
13
13
  import { coerceBooleanProperty, ESCAPE, ENTER, UP_ARROW, DOWN_ARROW, TAB } from 'ngx-tethys/util';
14
14
  import { injectLocale } from 'ngx-tethys/i18n';
15
- import { injectPanelEmptyIcon, ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService, getFlexiblePositions, ScrollToService } from 'ngx-tethys/core';
15
+ import { injectPanelEmptyIcon, ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService, getOverlayGlobalConfig, getFlexiblePositions, THY_GLOBAL_CONFIG, ScrollToService } from 'ngx-tethys/core';
16
16
  import { takeUntilDestroyed, outputToObservable } from '@angular/core/rxjs-interop';
17
17
  import { Subject, merge, of, from, fromEvent } from 'rxjs';
18
18
  import { filter, takeUntil, map, delay, switchMap, take } from 'rxjs/operators';
@@ -221,7 +221,8 @@ class ThyInternalAutocompleteRef extends ThyAbstractInternalOverlayRef {
221
221
  class ThyAutocompleteService extends ThyAbstractOverlayService {
222
222
  buildPositionStrategy(config) {
223
223
  const positionStrategy = new FlexibleConnectedPositionStrategy(config.origin, this._viewportRuler, this._document, this._platform, this._overlayContainer);
224
- const positions = getFlexiblePositions(config.placement, config.offset, 'thy-autocomplete');
224
+ const flexiblePosition = getOverlayGlobalConfig(this.globalConfig).flexiblePosition !== false;
225
+ const positions = getFlexiblePositions(config.placement, config.offset, 'thy-autocomplete', flexiblePosition);
225
226
  positionStrategy.withPositions(positions);
226
227
  positionStrategy.withGrowAfterOpen(true);
227
228
  positionStrategy.positionChanges.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(change => {
@@ -289,6 +290,7 @@ class ThyAutocompleteService extends ThyAbstractOverlayService {
289
290
  this._document = inject(DOCUMENT);
290
291
  this._platform = inject(Platform);
291
292
  this._overlayContainer = inject(OverlayContainer);
293
+ this.globalConfig = inject(THY_GLOBAL_CONFIG, { optional: true });
292
294
  this.ngUnsubscribe$ = new Subject();
293
295
  this.originInstancesMap = new Map();
294
296
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-autocomplete.mjs","sources":["../../../src/autocomplete/autocomplete.component.ts","../../../src/autocomplete/autocomplete.component.html","../../../src/autocomplete/overlay/autocomplete-animations.ts","../../../src/autocomplete/overlay/autocomplete.config.ts","../../../src/autocomplete/overlay/autocomplete.options.ts","../../../src/autocomplete/overlay/autocomplete-container.component.ts","../../../src/autocomplete/overlay/autocomplete-container.component.html","../../../src/autocomplete/overlay/autocomplete-ref.ts","../../../src/autocomplete/overlay/autocomplete.service.ts","../../../src/autocomplete/autocomplete.trigger.directive.ts","../../../src/autocomplete/module.ts","../../../src/autocomplete/ngx-tethys-autocomplete.ts"],"sourcesContent":["import {\n Component,\n TemplateRef,\n ChangeDetectionStrategy,\n ContentChildren,\n QueryList,\n ChangeDetectorRef,\n ElementRef,\n inject,\n Signal,\n viewChild,\n input,\n output,\n viewChildren,\n signal,\n DestroyRef,\n afterRenderEffect,\n computed\n} from '@angular/core';\nimport { ThyOption, ThyOptionRender, ThyOptionSelectionChangeEvent, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { NgClass } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { injectLocale, ThyAutoCompleteLocale } from 'ngx-tethys/i18n';\nimport { injectPanelEmptyIcon } from 'ngx-tethys/core';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/** Event object that is emitted when an autocomplete option is activated. */\nexport interface ThyAutocompleteActivatedEvent {\n /** Reference to the autocomplete panel that emitted the event. */\n source: ThyAutocomplete;\n\n /** Option that was selected. */\n option: ThyOption | null;\n}\n\n/**\n * 自动完成组件\n * @name thy-autocomplete\n */\n@Component({\n selector: 'thy-autocomplete',\n templateUrl: 'autocomplete.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyStopPropagationDirective, NgClass, ThyEmpty, ThyOptionRender]\n})\nexport class ThyAutocomplete {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n private destroyRef = inject(DestroyRef);\n\n private locale: Signal<ThyAutoCompleteLocale> = injectLocale('autocomplete');\n\n emptyIcon: Signal<string> = injectPanelEmptyIcon();\n\n dropDownClass: { [key: string]: boolean } = {\n 'thy-select-dropdown': true,\n 'thy-select-dropdown-single': true\n };\n\n isOpened = false;\n\n readonly selectedValues = signal<SafeAny[]>([]);\n\n readonly selectedValuesMap = computed<Map<SafeAny, boolean>>(() => {\n return new Map(this.selectedValues().map(value => [value, true]));\n });\n\n /** Manages active item in option list based on key events. */\n keyManager?: ActiveDescendantKeyManager<ThyOptionRender>;\n\n readonly contentTemplateRef = viewChild<TemplateRef<any>>('contentTemplate');\n\n // scroll element container\n readonly optionsContainer = viewChild<ElementRef<any>>('panel');\n\n /**\n * @private\n */\n @ContentChildren(ThyOption, { descendants: true }) options!: QueryList<ThyOption>;\n\n readonly optionRenders = viewChildren(ThyOptionRender);\n\n /**\n * 空选项时的文本\n * @default 没有任何数据\n */\n readonly thyEmptyText = input<string>(this.locale().empty);\n\n /**\n * 是否默认高亮第一个选项\n */\n readonly thyAutoActiveFirstOption = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 被选中时调用,参数包含选中项的 value 值\n */\n readonly thyOptionSelected = output<ThyOptionSelectionChangeEvent>();\n\n /**\n * 只读,展开下拉菜单的回调\n */\n readonly thyOpened = output<void>();\n\n /**\n * 只读,关闭下拉菜单的回调\n */\n readonly thyClosed = output<void>();\n\n /** Emits whenever an option is activated using the keyboard. */\n /**\n * 只读,option 激活状态变化时,调用此函数\n */\n readonly thyOptionActivated = output<ThyAutocompleteActivatedEvent>();\n\n constructor() {\n afterRenderEffect(() => {\n this.initKeyManager();\n });\n }\n\n initKeyManager() {\n const optionRenders = this.optionRenders();\n this.keyManager = new ActiveDescendantKeyManager<ThyOptionRender>(optionRenders).withWrap();\n this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(index => {\n this.thyOptionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n });\n }\n\n open() {\n this.isOpened = true;\n this.changeDetectorRef.markForCheck();\n this.thyOpened.emit();\n }\n\n close() {\n this.isOpened = false;\n this.thyClosed.emit();\n }\n\n optionClick(event: { value: SafeAny; isUserInput?: boolean }) {\n const { value, isUserInput } = event;\n const option = this.options.toArray().find(option => option.thyValue() === value);\n if (option) {\n option.selectionChange.emit({ option, isUserInput: !!isUserInput });\n }\n\n this.selectedValues.set([value]);\n this.thyOptionSelected.emit(new ThyOptionSelectionChangeEvent(option!, false));\n }\n}\n","<ng-template #contentTemplate>\n <div thyStopPropagation [ngClass]=\"dropDownClass\">\n <div #panel class=\"thy-select-dropdown-options\">\n @for (option of options; track option.thyValue()) {\n <thy-option-render\n [thyValue]=\"option.thyValue()\"\n [thyRawValue]=\"option.thyRawValue()\"\n [thyLabelText]=\"option.thyLabelText()\"\n [thyShowOptionCustom]=\"option.thyShowOptionCustom()\"\n [thySearchKey]=\"option.thySearchKey()\"\n [thyDisabled]=\"option.thyDisabled()\"\n [thyTemplate]=\"option.template()\"\n [thySelectedValuesMap]=\"selectedValuesMap()\"\n (optionClick)=\"optionClick($event)\">\n </thy-option-render>\n }\n @if (options.length <= 0) {\n <thy-empty [thyMessage]=\"thyEmptyText()\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n </div>\n</ng-template>\n","import { animate, state, style, transition, trigger, AnimationTriggerMetadata } from '@angular/animations';\n\nconst animationBody = [state('void, exit', style({ opacity: 0, transform: 'scale(0.1)' })), state('enter', style({ transform: 'none' }))];\n\n/**\n * Animations used by ThyAutocomplete.\n * @docs-private\n */\nexport const thyAutocompleteAnimations: {\n readonly autocompleteContainer: AnimationTriggerMetadata;\n} = {\n autocompleteContainer: trigger('autocompleteContainer', animationBody)\n};\n","import { ElementRef, InjectionToken } from '@angular/core';\nimport { ThyPlacement, ThyAbstractOverlayConfig } from 'ngx-tethys/core';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\n\nexport class ThyAutocompleteConfig<TData = any> extends ThyAbstractOverlayConfig<TData> {\n /** Origin Element, for overlay flexible connected to */\n // @ts-ignore\n origin: ElementRef<any> | HTMLElement;\n\n /** Placement be relative to origin, topCenter, topLeft, topRight, bottomCenter, bottomLeft, bottomRight ...*/\n placement?: ThyPlacement;\n\n /** Click inside can been close */\n insideClosable?: boolean;\n\n /** Offset be relative to origin, default is 4*/\n offset?: number;\n\n /** Manually close it, default rules is which auto close last autocomplete when open a new unless set manualClosure as true */\n manualClosure?: boolean;\n\n /** Origin active class when autocomplete is opened */\n originActiveClass?: string | string[];\n\n /**\n * 滚动策略\n */\n scrollStrategy?: ScrollStrategy;\n\n /** Click outside can been close */\n outsideClosable?: boolean;\n}\n\nexport const THY_AUTOCOMPLETE_DEFAULT_CONFIG = new InjectionToken<ThyAutocompleteConfig>('thy-autocomplete-default-config');\n\nexport const THY_AUTOCOMPLETE_DEFAULT_CONFIG_PROVIDER = {\n provide: THY_AUTOCOMPLETE_DEFAULT_CONFIG,\n useValue: {\n hasBackdrop: false,\n panelClass: '',\n closeOnNavigation: true,\n insideClosable: true,\n manualClosure: false,\n outsideClosable: true,\n originActiveClass: 'thy-autocomplete-origin-active'\n }\n};\n","import { ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport const autocompleteAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'autocomplete',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet } from 'ngx-tethys/core';\nimport { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { AnimationEvent } from '@angular/animations';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, NgZone, ViewChild, inject, DOCUMENT } from '@angular/core';\n\nimport { thyAutocompleteAnimations } from './autocomplete-animations';\nimport { ThyAutocompleteConfig } from './autocomplete.config';\nimport { autocompleteAbstractOverlayOptions } from './autocomplete.options';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-autocomplete-container',\n templateUrl: './autocomplete-container.component.html',\n animations: [thyAutocompleteAnimations.autocompleteContainer],\n host: {\n class: 'thy-autocomplete-container',\n tabindex: '-1',\n '[attr.role]': `'autocomplete'`,\n '[@autocompleteContainer]': 'animationState',\n '(@autocompleteContainer.start)': 'onAnimationStart($event)',\n '(@autocompleteContainer.done)': 'onAnimationDone($event)'\n },\n imports: [PortalModule, ThyPortalOutlet]\n})\nexport class ThyAutocompleteContainer extends ThyAbstractOverlayContainer implements AfterViewInit {\n private elementRef = inject(ElementRef);\n private document = inject(DOCUMENT);\n config = inject(ThyAutocompleteConfig);\n private thyClickDispatcher = inject(ThyClickDispatcher);\n private ngZone = inject(NgZone);\n\n @ViewChild(ThyPortalOutlet, { static: true })\n portalOutlet!: ThyPortalOutlet;\n\n /** State of the autocomplete animation. */\n animationState: 'void' | 'enter' | 'exit' = 'enter';\n\n /** Emits when an animation state changes. */\n animationStateChanged = new EventEmitter<AnimationEvent>();\n\n animationOpeningDone!: Observable<AnimationEvent>;\n animationClosingDone!: Observable<AnimationEvent>;\n\n beforeAttachPortal(): void {}\n\n constructor() {\n const changeDetectorRef = inject(ChangeDetectorRef);\n\n super(autocompleteAbstractOverlayOptions, changeDetectorRef);\n\n this.animationOpeningDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'enter';\n })\n );\n this.animationClosingDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'exit';\n })\n );\n }\n\n ngAfterViewInit() {}\n\n /** Callback, invoked whenever an animation on the host completes. */\n onAnimationDone(event: AnimationEvent) {\n this.animationStateChanged.emit(event);\n }\n\n /** Callback, invoked when an animation on the host starts. */\n onAnimationStart(event: AnimationEvent) {\n this.animationStateChanged.emit(event);\n }\n\n startExitAnimation(): void {\n this.animationState = 'exit';\n this.changeDetectorRef.markForCheck();\n }\n}\n","<ng-template thyPortalOutlet></ng-template>\n","import { ThyAbstractInternalOverlayRef, ThyAbstractOverlayOptions, ThyAbstractOverlayRef } from 'ngx-tethys/core';\nimport { ThyAutocompleteContainer } from './autocomplete-container.component';\nimport { ThyAutocompleteConfig } from './autocomplete.config';\nimport { autocompleteAbstractOverlayOptions } from './autocomplete.options';\n\nexport abstract class ThyAutocompleteRef<T, TResult = any> extends ThyAbstractOverlayRef<T, ThyAutocompleteContainer, TResult> {}\n\nexport class ThyInternalAutocompleteRef<T, TResult = any>\n extends ThyAbstractInternalOverlayRef<T, ThyAutocompleteContainer, TResult, ThyAutocompleteConfig>\n implements ThyAutocompleteRef<T, TResult>\n{\n constructor() {\n super();\n }\n\n protected get options(): ThyAbstractOverlayOptions {\n return autocompleteAbstractOverlayOptions;\n }\n\n /**\n * Updates the autocomplete's position.\n * @param position New autocomplete position.\n */\n updatePosition(): this {\n this.overlayRef.updatePosition();\n return this;\n }\n}\n","import { getFlexiblePositions, ThyAbstractOverlayService } from 'ngx-tethys/core';\nimport { of, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceArray, coerceElement } from '@angular/cdk/coercion';\nimport {\n ComponentType,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayContainer,\n OverlayRef,\n PositionStrategy,\n ScrollDispatcher\n} from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\n\nimport { ElementRef, Injectable, Injector, NgZone, OnDestroy, StaticProvider, TemplateRef, inject, DOCUMENT } from '@angular/core';\n\nimport { ThyAutocompleteContainer } from './autocomplete-container.component';\nimport { ThyAutocompleteRef, ThyInternalAutocompleteRef } from './autocomplete-ref';\nimport { THY_AUTOCOMPLETE_DEFAULT_CONFIG, ThyAutocompleteConfig } from './autocomplete.config';\nimport { autocompleteAbstractOverlayOptions } from './autocomplete.options';\n\n/**\n * @private\n */\n@Injectable()\nexport class ThyAutocompleteService\n extends ThyAbstractOverlayService<ThyAutocompleteConfig, ThyAutocompleteContainer>\n implements OnDestroy\n{\n private scrollDispatcher = inject(ScrollDispatcher);\n private ngZone = inject(NgZone);\n private _viewportRuler = inject(ViewportRuler);\n private _document = inject(DOCUMENT);\n private _platform = inject(Platform);\n private _overlayContainer = inject(OverlayContainer);\n\n private readonly ngUnsubscribe$ = new Subject();\n\n private originInstancesMap = new Map<\n ElementRef | HTMLElement,\n {\n config: ThyAutocompleteConfig;\n autocompleteRef: ThyAutocompleteRef<any, any>;\n }\n >();\n\n private buildPositionStrategy<TData>(config: ThyAutocompleteConfig<TData>): PositionStrategy {\n const positionStrategy = new FlexibleConnectedPositionStrategy(\n config.origin,\n this._viewportRuler,\n this._document,\n this._platform,\n this._overlayContainer\n );\n const positions = getFlexiblePositions(config.placement!, config.offset, 'thy-autocomplete');\n positionStrategy.withPositions(positions);\n positionStrategy.withGrowAfterOpen(true);\n positionStrategy.positionChanges.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(change => {\n if (change.scrollableViewProperties.isOverlayClipped) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this.ngZone.run(() => this.close());\n }\n });\n return positionStrategy;\n }\n\n protected buildOverlayConfig<TData>(config: ThyAutocompleteConfig<TData>): OverlayConfig {\n const strategy = this.buildPositionStrategy(config);\n const overlayConfig = this.buildBaseOverlayConfig(config);\n overlayConfig.positionStrategy = strategy;\n overlayConfig.scrollStrategy = config.scrollStrategy || this.overlay.scrollStrategies.block();\n overlayConfig.width = config.width;\n return overlayConfig;\n }\n\n protected attachOverlayContainer(overlay: OverlayRef, config: ThyAutocompleteConfig<any>): ThyAutocompleteContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this.injector,\n providers: [{ provide: ThyAutocompleteConfig, useValue: config }]\n });\n const containerPortal = new ComponentPortal(ThyAutocompleteContainer, config.viewContainerRef, injector);\n const containerRef = overlay.attach<ThyAutocompleteContainer>(containerPortal);\n return containerRef.instance;\n }\n\n protected createAbstractOverlayRef<T>(\n overlayRef: OverlayRef,\n containerInstance: ThyAutocompleteContainer,\n config: ThyAutocompleteConfig<any>\n ): ThyInternalAutocompleteRef<T> {\n const autocompleteRef = new ThyInternalAutocompleteRef<T>();\n autocompleteRef.initialize(overlayRef, containerInstance, config);\n return autocompleteRef;\n }\n\n protected createInjectorProviders<T>(\n autocompleteRef: ThyAutocompleteRef<T>,\n autocompleteContainer: ThyAutocompleteContainer\n ): StaticProvider[] {\n return [\n {\n provide: ThyAutocompleteContainer,\n useValue: autocompleteContainer\n },\n {\n provide: ThyAutocompleteRef,\n useValue: autocompleteRef\n }\n ];\n }\n\n private originElementAddActiveClass(config: ThyAutocompleteConfig) {\n if (config.originActiveClass) {\n coerceElement<HTMLElement>(config.origin).classList.add(...coerceArray(config.originActiveClass));\n }\n }\n\n private originElementRemoveActiveClass(config: ThyAutocompleteConfig) {\n if (config.originActiveClass) {\n coerceElement<HTMLElement>(config.origin).classList.remove(...coerceArray(config.originActiveClass));\n }\n }\n\n constructor() {\n const overlay = inject(Overlay);\n const injector = inject(Injector);\n const defaultConfig = inject(THY_AUTOCOMPLETE_DEFAULT_CONFIG);\n\n super(autocompleteAbstractOverlayOptions, overlay, injector, defaultConfig);\n }\n\n open<T, TData = any, TResult = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: ThyAutocompleteConfig<TData>\n ): ThyAutocompleteRef<T, TResult> {\n const originElement = coerceElement(config?.origin);\n const autocompleteRef = this.openOverlay(componentOrTemplateRef, config) as ThyAutocompleteRef<T>;\n config = autocompleteRef.containerInstance.config;\n autocompleteRef.afterClosed().subscribe(() => {\n this.originElementRemoveActiveClass(config);\n this.originInstancesMap.delete(originElement);\n });\n\n this.originElementAddActiveClass(config);\n this.originInstancesMap.set(originElement, {\n config,\n autocompleteRef\n });\n\n return autocompleteRef;\n }\n\n ngOnDestroy() {\n this.dispose();\n }\n}\n","import {\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n HostBinding,\n ChangeDetectorRef,\n numberAttribute,\n inject,\n input,\n computed,\n Signal,\n DOCUMENT\n} from '@angular/core';\nimport { OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { ThyPlacement, ScrollToService } from 'ngx-tethys/core';\nimport { ThyAutocompleteService } from './overlay/autocomplete.service';\nimport { ThyAutocompleteRef } from './overlay/autocomplete-ref';\nimport { ThyAutocomplete } from './autocomplete.component';\nimport { ThyOptionRender, ThyOptionSelectionChangeEvent } from 'ngx-tethys/shared';\nimport { Subject, Observable, merge, fromEvent, of, Subscription, from } from 'rxjs';\nimport { ESCAPE, UP_ARROW, ENTER, DOWN_ARROW, TAB, coerceBooleanProperty } from 'ngx-tethys/util';\nimport { filter, map, take, delay, switchMap } from 'rxjs/operators';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\n\n/**\n * 自动完成触发指令\n * @name thyAutocomplete\n */\n@Directive({\n selector:\n 'input[thyAutocompleteTrigger], textarea[thyAutocompleteTrigger], thy-input[thyAutocompleteTrigger], thy-input-search[thyAutocompleteTrigger], input[thyAutocomplete], textarea[thyAutocomplete], thy-input[thyAutocomplete], thy-input-search[thyAutocomplete]',\n exportAs: 'thyAutocompleteTrigger, thyAutocomplete',\n host: {\n '(input)': 'handleInput($event)',\n '(focusin)': 'onFocus()',\n '(keydown)': 'onKeydown($event)'\n }\n})\nexport class ThyAutocompleteTriggerDirective implements OnInit, OnDestroy {\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private overlay = inject(Overlay);\n private autocompleteService = inject(ThyAutocompleteService);\n private viewContainerRef = inject(ViewContainerRef);\n private document = inject(DOCUMENT, { optional: true })!;\n private cdr = inject(ChangeDetectorRef);\n\n protected overlayRef: OverlayRef | null = null;\n\n private autocompleteRef!: ThyAutocompleteRef<ThyAutocomplete>;\n\n private readonly closeKeyEventStream = new Subject<void>();\n\n private closingActionsSubscription!: Subscription;\n\n @HostBinding(`class.thy-autocomplete-opened`) panelOpened = false;\n\n /**\n * 下拉菜单组件实例。已废弃,请使用 thyAutocomplete\n * @type thyAutocompleteComponent\n * @deprecated\n */\n readonly thyAutocompleteComponent = input<ThyAutocomplete>();\n\n /**\n * 下拉菜单组件实例\n * @type thyAutocompleteComponent\n */\n readonly thyAutocomplete = input<ThyAutocomplete>();\n\n readonly autocompleteComponent: Signal<ThyAutocomplete> = computed(() => {\n return this.thyAutocomplete() || this.thyAutocompleteComponent()!;\n });\n\n /**\n * 弹出框默认 offset\n */\n readonly thyOffset = input<number, unknown>(4, { transform: numberAttribute });\n\n /**\n * 下拉菜单的宽度,不设置默认与输入框同宽\n */\n readonly thyAutocompleteWidth = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 下拉菜单的显示位置,'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'left' | 'leftTop' | 'leftBottom' | 'right' | 'rightTop' | 'rightBottom'\n */\n readonly thyPlacement = input<ThyPlacement>('bottomLeft');\n\n /**\n * 是否允许聚焦时打开下拉菜单\n */\n readonly thyIsFocusOpen = input(true, { transform: coerceBooleanProperty });\n\n readonly activeOption: Signal<ThyOptionRender | null> = computed(() => {\n if (this.autocompleteComponent() && this.autocompleteComponent().keyManager) {\n return this.autocompleteComponent().keyManager!.activeItem;\n }\n return null;\n });\n\n get panelClosingActions(): Observable<ThyOptionSelectionChangeEvent | null> {\n return merge(\n outputToObservable(this.autocompleteComponent().thyOptionSelected),\n this.autocompleteComponent().keyManager!.tabOut.pipe(filter(() => this.panelOpened)),\n this.closeKeyEventStream,\n this.getOutsideClickStream(),\n this.overlayRef ? this.overlayRef.detachments().pipe(filter(() => this.panelOpened)) : of()\n ).pipe(\n // Normalize the output so we return a consistent type.\n map(event => (event instanceof ThyOptionSelectionChangeEvent ? event : null))\n );\n }\n\n ngOnInit(): void {}\n\n onFocus() {\n if (this.canOpen() && this.thyIsFocusOpen()) {\n this.openPanel();\n }\n }\n\n onKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE) {\n event.preventDefault();\n }\n const autocompleteComponent = this.autocompleteComponent();\n if (this.activeOption() && keyCode === ENTER && this.panelOpened) {\n this.activeOption()!.selectViaInteraction();\n this.resetActiveItem();\n event.preventDefault();\n } else if (autocompleteComponent) {\n const prevActiveItem = autocompleteComponent.keyManager!.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n if (this.panelOpened || keyCode === TAB) {\n autocompleteComponent.keyManager!.onKeydown(event);\n } else if (isArrowKey && this.canOpen()) {\n this.openPanel();\n }\n if (\n (isArrowKey || autocompleteComponent.keyManager!.activeItem !== prevActiveItem) &&\n autocompleteComponent.keyManager!.activeItem\n ) {\n ScrollToService.scrollToElement(\n autocompleteComponent.keyManager!.activeItem.element.nativeElement,\n autocompleteComponent.optionsContainer()!.nativeElement\n );\n }\n }\n }\n\n handleInput(event: KeyboardEvent) {\n if (this.canOpen() && document.activeElement === event.target) {\n this.openPanel();\n }\n }\n\n openPanel() {\n if (this.overlayRef && this.overlayRef.hasAttached()) {\n return;\n }\n const overlayRef = this.createOverlay();\n this.overlayRef = overlayRef;\n overlayRef.keydownEvents().subscribe(event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if (event.keyCode === ESCAPE || (event.keyCode === UP_ARROW && event.altKey)) {\n this.resetActiveItem();\n this.closeKeyEventStream.next();\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n });\n this.panelOpened = true;\n this.autocompleteComponent().open();\n }\n\n closePanel() {\n if (this.autocompleteRef) {\n this.autocompleteRef.close();\n this.cdr.detectChanges();\n this.closingActionsSubscription.unsubscribe();\n }\n }\n\n createOverlay(): OverlayRef {\n const config = Object.assign({\n origin: this.elementRef.nativeElement,\n viewContainerRef: this.viewContainerRef,\n placement: this.thyPlacement(),\n offset: this.thyOffset(),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n width: this.thyAutocompleteWidth() || this.elementRef.nativeElement.clientWidth\n });\n const autocompleteComponent = this.autocompleteComponent();\n this.autocompleteRef = this.autocompleteService.open(autocompleteComponent.contentTemplateRef()!, config);\n this.autocompleteRef.afterClosed().subscribe(() => {\n this.panelOpened = false;\n autocompleteComponent.close();\n });\n // delay 200ms to prevent emit document click rightnow\n this.autocompleteRef\n .afterOpened()\n .pipe(delay(200))\n .subscribe(() => {\n this.closingActionsSubscription = this.subscribeToClosingActions();\n });\n return this.autocompleteRef.getOverlayRef();\n }\n\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n private subscribeToClosingActions(): Subscription {\n const firstStable = from(Promise.resolve());\n const optionChanges = this.autocompleteComponent().options.changes.pipe(\n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0)\n );\n // When the zone is stable initially, and when the option list changes...\n return (\n merge(firstStable, optionChanges)\n .pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => {\n this.resetActiveItem();\n\n if (this.panelOpened) {\n this.overlayRef!.updatePosition();\n }\n return this.panelClosingActions;\n }),\n // when the first closing event occurs...\n take(1)\n )\n // set the value, close the panel, and complete.\n .subscribe(event => this.setValueAndClose(event))\n );\n }\n\n private setValueAndClose(event: ThyOptionSelectionChangeEvent | null): void {\n if (event && event.option) {\n this.setValue(event.option.thyLabelText()!);\n }\n this.closePanel();\n }\n\n /** Stream of clicks outside of the autocomplete panel. */\n private getOutsideClickStream(): Observable<any> {\n return merge(\n fromEvent(this.document, 'click') as Observable<MouseEvent>,\n fromEvent(this.document, 'touchend') as Observable<TouchEvent>\n ).pipe(\n filter(event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = event.target as HTMLElement;\n const formField: any = null;\n\n return (\n this.panelOpened &&\n clickTarget !== this.elementRef.nativeElement &&\n !this.elementRef.nativeElement.contains(clickTarget) &&\n (!formField || !formField.contains(clickTarget)) &&\n !!this.overlayRef &&\n !this.overlayRef.overlayElement.contains(clickTarget)\n );\n })\n );\n }\n\n private setValue(value: string) {\n const input = this.elementRef.nativeElement.querySelector('input');\n const element = input ? input : this.elementRef.nativeElement;\n element.value = value;\n element.focus();\n }\n\n private canOpen(): boolean {\n const element: HTMLInputElement = this.elementRef.nativeElement;\n return !element.readOnly && !element.disabled;\n }\n\n private resetActiveItem(): void {\n const autocompleteComponent = this.autocompleteComponent();\n const index = autocompleteComponent.thyAutoActiveFirstOption() ? 0 : -1;\n autocompleteComponent.keyManager!.setActiveItem(index);\n }\n\n private destroyPanel(): void {\n if (this.overlayRef) {\n this.closePanel();\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n ngOnDestroy() {\n this.closeKeyEventStream.complete();\n this.destroyPanel();\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyOptionModule, ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyAutocomplete } from './autocomplete.component';\nimport { ThyAutocompleteTriggerDirective } from './autocomplete.trigger.directive';\nimport { ThyAutocompleteContainer } from './overlay/autocomplete-container.component';\nimport { THY_AUTOCOMPLETE_DEFAULT_CONFIG_PROVIDER } from './overlay/autocomplete.config';\nimport { ThyAutocompleteService } from './overlay/autocomplete.service';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThyInputModule,\n OverlayModule,\n PortalModule,\n ThyLoadingModule,\n ThySharedModule,\n ThyIconModule,\n ThyEmptyModule,\n ThyOptionModule,\n ThyAutocompleteTriggerDirective,\n ThyAutocomplete,\n ThyAutocompleteContainer\n ],\n exports: [ThyAutocompleteTriggerDirective, ThyAutocomplete, ThyAutocompleteContainer, ThyOptionModule],\n providers: [THY_AUTOCOMPLETE_DEFAULT_CONFIG_PROVIDER, ThyAutocompleteService]\n})\nexport class ThyAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-autocomplete.mjs","sources":["../../../src/autocomplete/autocomplete.component.ts","../../../src/autocomplete/autocomplete.component.html","../../../src/autocomplete/overlay/autocomplete-animations.ts","../../../src/autocomplete/overlay/autocomplete.config.ts","../../../src/autocomplete/overlay/autocomplete.options.ts","../../../src/autocomplete/overlay/autocomplete-container.component.ts","../../../src/autocomplete/overlay/autocomplete-container.component.html","../../../src/autocomplete/overlay/autocomplete-ref.ts","../../../src/autocomplete/overlay/autocomplete.service.ts","../../../src/autocomplete/autocomplete.trigger.directive.ts","../../../src/autocomplete/module.ts","../../../src/autocomplete/ngx-tethys-autocomplete.ts"],"sourcesContent":["import {\n Component,\n TemplateRef,\n ChangeDetectionStrategy,\n ContentChildren,\n QueryList,\n ChangeDetectorRef,\n ElementRef,\n inject,\n Signal,\n viewChild,\n input,\n output,\n viewChildren,\n signal,\n DestroyRef,\n afterRenderEffect,\n computed\n} from '@angular/core';\nimport { ThyOption, ThyOptionRender, ThyOptionSelectionChangeEvent, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { NgClass } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { injectLocale, ThyAutoCompleteLocale } from 'ngx-tethys/i18n';\nimport { injectPanelEmptyIcon } from 'ngx-tethys/core';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/** Event object that is emitted when an autocomplete option is activated. */\nexport interface ThyAutocompleteActivatedEvent {\n /** Reference to the autocomplete panel that emitted the event. */\n source: ThyAutocomplete;\n\n /** Option that was selected. */\n option: ThyOption | null;\n}\n\n/**\n * 自动完成组件\n * @name thy-autocomplete\n */\n@Component({\n selector: 'thy-autocomplete',\n templateUrl: 'autocomplete.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyStopPropagationDirective, NgClass, ThyEmpty, ThyOptionRender]\n})\nexport class ThyAutocomplete {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n private destroyRef = inject(DestroyRef);\n\n private locale: Signal<ThyAutoCompleteLocale> = injectLocale('autocomplete');\n\n emptyIcon: Signal<string> = injectPanelEmptyIcon();\n\n dropDownClass: { [key: string]: boolean } = {\n 'thy-select-dropdown': true,\n 'thy-select-dropdown-single': true\n };\n\n isOpened = false;\n\n readonly selectedValues = signal<SafeAny[]>([]);\n\n readonly selectedValuesMap = computed<Map<SafeAny, boolean>>(() => {\n return new Map(this.selectedValues().map(value => [value, true]));\n });\n\n /** Manages active item in option list based on key events. */\n keyManager?: ActiveDescendantKeyManager<ThyOptionRender>;\n\n readonly contentTemplateRef = viewChild<TemplateRef<any>>('contentTemplate');\n\n // scroll element container\n readonly optionsContainer = viewChild<ElementRef<any>>('panel');\n\n /**\n * @private\n */\n @ContentChildren(ThyOption, { descendants: true }) options!: QueryList<ThyOption>;\n\n readonly optionRenders = viewChildren(ThyOptionRender);\n\n /**\n * 空选项时的文本\n * @default 没有任何数据\n */\n readonly thyEmptyText = input<string>(this.locale().empty);\n\n /**\n * 是否默认高亮第一个选项\n */\n readonly thyAutoActiveFirstOption = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 被选中时调用,参数包含选中项的 value 值\n */\n readonly thyOptionSelected = output<ThyOptionSelectionChangeEvent>();\n\n /**\n * 只读,展开下拉菜单的回调\n */\n readonly thyOpened = output<void>();\n\n /**\n * 只读,关闭下拉菜单的回调\n */\n readonly thyClosed = output<void>();\n\n /** Emits whenever an option is activated using the keyboard. */\n /**\n * 只读,option 激活状态变化时,调用此函数\n */\n readonly thyOptionActivated = output<ThyAutocompleteActivatedEvent>();\n\n constructor() {\n afterRenderEffect(() => {\n this.initKeyManager();\n });\n }\n\n initKeyManager() {\n const optionRenders = this.optionRenders();\n this.keyManager = new ActiveDescendantKeyManager<ThyOptionRender>(optionRenders).withWrap();\n this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(index => {\n this.thyOptionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n });\n }\n\n open() {\n this.isOpened = true;\n this.changeDetectorRef.markForCheck();\n this.thyOpened.emit();\n }\n\n close() {\n this.isOpened = false;\n this.thyClosed.emit();\n }\n\n optionClick(event: { value: SafeAny; isUserInput?: boolean }) {\n const { value, isUserInput } = event;\n const option = this.options.toArray().find(option => option.thyValue() === value);\n if (option) {\n option.selectionChange.emit({ option, isUserInput: !!isUserInput });\n }\n\n this.selectedValues.set([value]);\n this.thyOptionSelected.emit(new ThyOptionSelectionChangeEvent(option!, false));\n }\n}\n","<ng-template #contentTemplate>\n <div thyStopPropagation [ngClass]=\"dropDownClass\">\n <div #panel class=\"thy-select-dropdown-options\">\n @for (option of options; track option.thyValue()) {\n <thy-option-render\n [thyValue]=\"option.thyValue()\"\n [thyRawValue]=\"option.thyRawValue()\"\n [thyLabelText]=\"option.thyLabelText()\"\n [thyShowOptionCustom]=\"option.thyShowOptionCustom()\"\n [thySearchKey]=\"option.thySearchKey()\"\n [thyDisabled]=\"option.thyDisabled()\"\n [thyTemplate]=\"option.template()\"\n [thySelectedValuesMap]=\"selectedValuesMap()\"\n (optionClick)=\"optionClick($event)\">\n </thy-option-render>\n }\n @if (options.length <= 0) {\n <thy-empty [thyMessage]=\"thyEmptyText()\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n </div>\n</ng-template>\n","import { animate, state, style, transition, trigger, AnimationTriggerMetadata } from '@angular/animations';\n\nconst animationBody = [state('void, exit', style({ opacity: 0, transform: 'scale(0.1)' })), state('enter', style({ transform: 'none' }))];\n\n/**\n * Animations used by ThyAutocomplete.\n * @docs-private\n */\nexport const thyAutocompleteAnimations: {\n readonly autocompleteContainer: AnimationTriggerMetadata;\n} = {\n autocompleteContainer: trigger('autocompleteContainer', animationBody)\n};\n","import { ElementRef, InjectionToken } from '@angular/core';\nimport { ThyPlacement, ThyAbstractOverlayConfig } from 'ngx-tethys/core';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\n\nexport class ThyAutocompleteConfig<TData = any> extends ThyAbstractOverlayConfig<TData> {\n /** Origin Element, for overlay flexible connected to */\n // @ts-ignore\n origin: ElementRef<any> | HTMLElement;\n\n /** Placement be relative to origin, topCenter, topLeft, topRight, bottomCenter, bottomLeft, bottomRight ...*/\n placement?: ThyPlacement;\n\n /** Click inside can been close */\n insideClosable?: boolean;\n\n /** Offset be relative to origin, default is 4*/\n offset?: number;\n\n /** Manually close it, default rules is which auto close last autocomplete when open a new unless set manualClosure as true */\n manualClosure?: boolean;\n\n /** Origin active class when autocomplete is opened */\n originActiveClass?: string | string[];\n\n /**\n * 滚动策略\n */\n scrollStrategy?: ScrollStrategy;\n\n /** Click outside can been close */\n outsideClosable?: boolean;\n}\n\nexport const THY_AUTOCOMPLETE_DEFAULT_CONFIG = new InjectionToken<ThyAutocompleteConfig>('thy-autocomplete-default-config');\n\nexport const THY_AUTOCOMPLETE_DEFAULT_CONFIG_PROVIDER = {\n provide: THY_AUTOCOMPLETE_DEFAULT_CONFIG,\n useValue: {\n hasBackdrop: false,\n panelClass: '',\n closeOnNavigation: true,\n insideClosable: true,\n manualClosure: false,\n outsideClosable: true,\n originActiveClass: 'thy-autocomplete-origin-active'\n }\n};\n","import { ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport const autocompleteAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'autocomplete',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet } from 'ngx-tethys/core';\nimport { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { AnimationEvent } from '@angular/animations';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, NgZone, ViewChild, inject, DOCUMENT } from '@angular/core';\n\nimport { thyAutocompleteAnimations } from './autocomplete-animations';\nimport { ThyAutocompleteConfig } from './autocomplete.config';\nimport { autocompleteAbstractOverlayOptions } from './autocomplete.options';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-autocomplete-container',\n templateUrl: './autocomplete-container.component.html',\n animations: [thyAutocompleteAnimations.autocompleteContainer],\n host: {\n class: 'thy-autocomplete-container',\n tabindex: '-1',\n '[attr.role]': `'autocomplete'`,\n '[@autocompleteContainer]': 'animationState',\n '(@autocompleteContainer.start)': 'onAnimationStart($event)',\n '(@autocompleteContainer.done)': 'onAnimationDone($event)'\n },\n imports: [PortalModule, ThyPortalOutlet]\n})\nexport class ThyAutocompleteContainer extends ThyAbstractOverlayContainer implements AfterViewInit {\n private elementRef = inject(ElementRef);\n private document = inject(DOCUMENT);\n config = inject(ThyAutocompleteConfig);\n private thyClickDispatcher = inject(ThyClickDispatcher);\n private ngZone = inject(NgZone);\n\n @ViewChild(ThyPortalOutlet, { static: true })\n portalOutlet!: ThyPortalOutlet;\n\n /** State of the autocomplete animation. */\n animationState: 'void' | 'enter' | 'exit' = 'enter';\n\n /** Emits when an animation state changes. */\n animationStateChanged = new EventEmitter<AnimationEvent>();\n\n animationOpeningDone!: Observable<AnimationEvent>;\n animationClosingDone!: Observable<AnimationEvent>;\n\n beforeAttachPortal(): void {}\n\n constructor() {\n const changeDetectorRef = inject(ChangeDetectorRef);\n\n super(autocompleteAbstractOverlayOptions, changeDetectorRef);\n\n this.animationOpeningDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'enter';\n })\n );\n this.animationClosingDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'exit';\n })\n );\n }\n\n ngAfterViewInit() {}\n\n /** Callback, invoked whenever an animation on the host completes. */\n onAnimationDone(event: AnimationEvent) {\n this.animationStateChanged.emit(event);\n }\n\n /** Callback, invoked when an animation on the host starts. */\n onAnimationStart(event: AnimationEvent) {\n this.animationStateChanged.emit(event);\n }\n\n startExitAnimation(): void {\n this.animationState = 'exit';\n this.changeDetectorRef.markForCheck();\n }\n}\n","<ng-template thyPortalOutlet></ng-template>\n","import { ThyAbstractInternalOverlayRef, ThyAbstractOverlayOptions, ThyAbstractOverlayRef } from 'ngx-tethys/core';\nimport { ThyAutocompleteContainer } from './autocomplete-container.component';\nimport { ThyAutocompleteConfig } from './autocomplete.config';\nimport { autocompleteAbstractOverlayOptions } from './autocomplete.options';\n\nexport abstract class ThyAutocompleteRef<T, TResult = any> extends ThyAbstractOverlayRef<T, ThyAutocompleteContainer, TResult> {}\n\nexport class ThyInternalAutocompleteRef<T, TResult = any>\n extends ThyAbstractInternalOverlayRef<T, ThyAutocompleteContainer, TResult, ThyAutocompleteConfig>\n implements ThyAutocompleteRef<T, TResult>\n{\n constructor() {\n super();\n }\n\n protected get options(): ThyAbstractOverlayOptions {\n return autocompleteAbstractOverlayOptions;\n }\n\n /**\n * Updates the autocomplete's position.\n * @param position New autocomplete position.\n */\n updatePosition(): this {\n this.overlayRef.updatePosition();\n return this;\n }\n}\n","import { getFlexiblePositions, getOverlayGlobalConfig, THY_GLOBAL_CONFIG, ThyAbstractOverlayService, ThyGlobalConfig } from 'ngx-tethys/core';\nimport { of, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceArray, coerceElement } from '@angular/cdk/coercion';\nimport {\n ComponentType,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayContainer,\n OverlayRef,\n PositionStrategy,\n ScrollDispatcher\n} from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\n\nimport { ElementRef, Injectable, Injector, NgZone, OnDestroy, StaticProvider, TemplateRef, inject, DOCUMENT } from '@angular/core';\n\nimport { ThyAutocompleteContainer } from './autocomplete-container.component';\nimport { ThyAutocompleteRef, ThyInternalAutocompleteRef } from './autocomplete-ref';\nimport { THY_AUTOCOMPLETE_DEFAULT_CONFIG, ThyAutocompleteConfig } from './autocomplete.config';\nimport { autocompleteAbstractOverlayOptions } from './autocomplete.options';\n\n/**\n * @private\n */\n@Injectable()\nexport class ThyAutocompleteService\n extends ThyAbstractOverlayService<ThyAutocompleteConfig, ThyAutocompleteContainer>\n implements OnDestroy\n{\n private scrollDispatcher = inject(ScrollDispatcher);\n private ngZone = inject(NgZone);\n private _viewportRuler = inject(ViewportRuler);\n private _document = inject(DOCUMENT);\n private _platform = inject(Platform);\n private _overlayContainer = inject(OverlayContainer);\n private globalConfig = inject<ThyGlobalConfig>(THY_GLOBAL_CONFIG, { optional: true });\n\n private readonly ngUnsubscribe$ = new Subject();\n\n private originInstancesMap = new Map<\n ElementRef | HTMLElement,\n {\n config: ThyAutocompleteConfig;\n autocompleteRef: ThyAutocompleteRef<any, any>;\n }\n >();\n\n private buildPositionStrategy<TData>(config: ThyAutocompleteConfig<TData>): PositionStrategy {\n const positionStrategy = new FlexibleConnectedPositionStrategy(\n config.origin,\n this._viewportRuler,\n this._document,\n this._platform,\n this._overlayContainer\n );\n const flexiblePosition = getOverlayGlobalConfig(this.globalConfig).flexiblePosition !== false;\n const positions = getFlexiblePositions(config.placement!, config.offset, 'thy-autocomplete', flexiblePosition);\n positionStrategy.withPositions(positions);\n positionStrategy.withGrowAfterOpen(true);\n positionStrategy.positionChanges.pipe(takeUntil(this.ngUnsubscribe$)).subscribe(change => {\n if (change.scrollableViewProperties.isOverlayClipped) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this.ngZone.run(() => this.close());\n }\n });\n return positionStrategy;\n }\n\n protected buildOverlayConfig<TData>(config: ThyAutocompleteConfig<TData>): OverlayConfig {\n const strategy = this.buildPositionStrategy(config);\n const overlayConfig = this.buildBaseOverlayConfig(config);\n overlayConfig.positionStrategy = strategy;\n overlayConfig.scrollStrategy = config.scrollStrategy || this.overlay.scrollStrategies.block();\n overlayConfig.width = config.width;\n return overlayConfig;\n }\n\n protected attachOverlayContainer(overlay: OverlayRef, config: ThyAutocompleteConfig<any>): ThyAutocompleteContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this.injector,\n providers: [{ provide: ThyAutocompleteConfig, useValue: config }]\n });\n const containerPortal = new ComponentPortal(ThyAutocompleteContainer, config.viewContainerRef, injector);\n const containerRef = overlay.attach<ThyAutocompleteContainer>(containerPortal);\n return containerRef.instance;\n }\n\n protected createAbstractOverlayRef<T>(\n overlayRef: OverlayRef,\n containerInstance: ThyAutocompleteContainer,\n config: ThyAutocompleteConfig<any>\n ): ThyInternalAutocompleteRef<T> {\n const autocompleteRef = new ThyInternalAutocompleteRef<T>();\n autocompleteRef.initialize(overlayRef, containerInstance, config);\n return autocompleteRef;\n }\n\n protected createInjectorProviders<T>(\n autocompleteRef: ThyAutocompleteRef<T>,\n autocompleteContainer: ThyAutocompleteContainer\n ): StaticProvider[] {\n return [\n {\n provide: ThyAutocompleteContainer,\n useValue: autocompleteContainer\n },\n {\n provide: ThyAutocompleteRef,\n useValue: autocompleteRef\n }\n ];\n }\n\n private originElementAddActiveClass(config: ThyAutocompleteConfig) {\n if (config.originActiveClass) {\n coerceElement<HTMLElement>(config.origin).classList.add(...coerceArray(config.originActiveClass));\n }\n }\n\n private originElementRemoveActiveClass(config: ThyAutocompleteConfig) {\n if (config.originActiveClass) {\n coerceElement<HTMLElement>(config.origin).classList.remove(...coerceArray(config.originActiveClass));\n }\n }\n\n constructor() {\n const overlay = inject(Overlay);\n const injector = inject(Injector);\n const defaultConfig = inject(THY_AUTOCOMPLETE_DEFAULT_CONFIG);\n\n super(autocompleteAbstractOverlayOptions, overlay, injector, defaultConfig);\n }\n\n open<T, TData = any, TResult = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: ThyAutocompleteConfig<TData>\n ): ThyAutocompleteRef<T, TResult> {\n const originElement = coerceElement(config?.origin);\n const autocompleteRef = this.openOverlay(componentOrTemplateRef, config) as ThyAutocompleteRef<T>;\n config = autocompleteRef.containerInstance.config;\n autocompleteRef.afterClosed().subscribe(() => {\n this.originElementRemoveActiveClass(config);\n this.originInstancesMap.delete(originElement);\n });\n\n this.originElementAddActiveClass(config);\n this.originInstancesMap.set(originElement, {\n config,\n autocompleteRef\n });\n\n return autocompleteRef;\n }\n\n ngOnDestroy() {\n this.dispose();\n }\n}\n","import {\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n HostBinding,\n ChangeDetectorRef,\n numberAttribute,\n inject,\n input,\n computed,\n Signal,\n DOCUMENT\n} from '@angular/core';\nimport { OverlayRef, Overlay } from '@angular/cdk/overlay';\nimport { ThyPlacement, ScrollToService } from 'ngx-tethys/core';\nimport { ThyAutocompleteService } from './overlay/autocomplete.service';\nimport { ThyAutocompleteRef } from './overlay/autocomplete-ref';\nimport { ThyAutocomplete } from './autocomplete.component';\nimport { ThyOptionRender, ThyOptionSelectionChangeEvent } from 'ngx-tethys/shared';\nimport { Subject, Observable, merge, fromEvent, of, Subscription, from } from 'rxjs';\nimport { ESCAPE, UP_ARROW, ENTER, DOWN_ARROW, TAB, coerceBooleanProperty } from 'ngx-tethys/util';\nimport { filter, map, take, delay, switchMap } from 'rxjs/operators';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\n\n/**\n * 自动完成触发指令\n * @name thyAutocomplete\n */\n@Directive({\n selector:\n 'input[thyAutocompleteTrigger], textarea[thyAutocompleteTrigger], thy-input[thyAutocompleteTrigger], thy-input-search[thyAutocompleteTrigger], input[thyAutocomplete], textarea[thyAutocomplete], thy-input[thyAutocomplete], thy-input-search[thyAutocomplete]',\n exportAs: 'thyAutocompleteTrigger, thyAutocomplete',\n host: {\n '(input)': 'handleInput($event)',\n '(focusin)': 'onFocus()',\n '(keydown)': 'onKeydown($event)'\n }\n})\nexport class ThyAutocompleteTriggerDirective implements OnInit, OnDestroy {\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private overlay = inject(Overlay);\n private autocompleteService = inject(ThyAutocompleteService);\n private viewContainerRef = inject(ViewContainerRef);\n private document = inject(DOCUMENT, { optional: true })!;\n private cdr = inject(ChangeDetectorRef);\n\n protected overlayRef: OverlayRef | null = null;\n\n private autocompleteRef!: ThyAutocompleteRef<ThyAutocomplete>;\n\n private readonly closeKeyEventStream = new Subject<void>();\n\n private closingActionsSubscription!: Subscription;\n\n @HostBinding(`class.thy-autocomplete-opened`) panelOpened = false;\n\n /**\n * 下拉菜单组件实例。已废弃,请使用 thyAutocomplete\n * @type thyAutocompleteComponent\n * @deprecated\n */\n readonly thyAutocompleteComponent = input<ThyAutocomplete>();\n\n /**\n * 下拉菜单组件实例\n * @type thyAutocompleteComponent\n */\n readonly thyAutocomplete = input<ThyAutocomplete>();\n\n readonly autocompleteComponent: Signal<ThyAutocomplete> = computed(() => {\n return this.thyAutocomplete() || this.thyAutocompleteComponent()!;\n });\n\n /**\n * 弹出框默认 offset\n */\n readonly thyOffset = input<number, unknown>(4, { transform: numberAttribute });\n\n /**\n * 下拉菜单的宽度,不设置默认与输入框同宽\n */\n readonly thyAutocompleteWidth = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 下拉菜单的显示位置,'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'left' | 'leftTop' | 'leftBottom' | 'right' | 'rightTop' | 'rightBottom'\n */\n readonly thyPlacement = input<ThyPlacement>('bottomLeft');\n\n /**\n * 是否允许聚焦时打开下拉菜单\n */\n readonly thyIsFocusOpen = input(true, { transform: coerceBooleanProperty });\n\n readonly activeOption: Signal<ThyOptionRender | null> = computed(() => {\n if (this.autocompleteComponent() && this.autocompleteComponent().keyManager) {\n return this.autocompleteComponent().keyManager!.activeItem;\n }\n return null;\n });\n\n get panelClosingActions(): Observable<ThyOptionSelectionChangeEvent | null> {\n return merge(\n outputToObservable(this.autocompleteComponent().thyOptionSelected),\n this.autocompleteComponent().keyManager!.tabOut.pipe(filter(() => this.panelOpened)),\n this.closeKeyEventStream,\n this.getOutsideClickStream(),\n this.overlayRef ? this.overlayRef.detachments().pipe(filter(() => this.panelOpened)) : of()\n ).pipe(\n // Normalize the output so we return a consistent type.\n map(event => (event instanceof ThyOptionSelectionChangeEvent ? event : null))\n );\n }\n\n ngOnInit(): void {}\n\n onFocus() {\n if (this.canOpen() && this.thyIsFocusOpen()) {\n this.openPanel();\n }\n }\n\n onKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE) {\n event.preventDefault();\n }\n const autocompleteComponent = this.autocompleteComponent();\n if (this.activeOption() && keyCode === ENTER && this.panelOpened) {\n this.activeOption()!.selectViaInteraction();\n this.resetActiveItem();\n event.preventDefault();\n } else if (autocompleteComponent) {\n const prevActiveItem = autocompleteComponent.keyManager!.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n if (this.panelOpened || keyCode === TAB) {\n autocompleteComponent.keyManager!.onKeydown(event);\n } else if (isArrowKey && this.canOpen()) {\n this.openPanel();\n }\n if (\n (isArrowKey || autocompleteComponent.keyManager!.activeItem !== prevActiveItem) &&\n autocompleteComponent.keyManager!.activeItem\n ) {\n ScrollToService.scrollToElement(\n autocompleteComponent.keyManager!.activeItem.element.nativeElement,\n autocompleteComponent.optionsContainer()!.nativeElement\n );\n }\n }\n }\n\n handleInput(event: KeyboardEvent) {\n if (this.canOpen() && document.activeElement === event.target) {\n this.openPanel();\n }\n }\n\n openPanel() {\n if (this.overlayRef && this.overlayRef.hasAttached()) {\n return;\n }\n const overlayRef = this.createOverlay();\n this.overlayRef = overlayRef;\n overlayRef.keydownEvents().subscribe(event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if (event.keyCode === ESCAPE || (event.keyCode === UP_ARROW && event.altKey)) {\n this.resetActiveItem();\n this.closeKeyEventStream.next();\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n });\n this.panelOpened = true;\n this.autocompleteComponent().open();\n }\n\n closePanel() {\n if (this.autocompleteRef) {\n this.autocompleteRef.close();\n this.cdr.detectChanges();\n this.closingActionsSubscription.unsubscribe();\n }\n }\n\n createOverlay(): OverlayRef {\n const config = Object.assign({\n origin: this.elementRef.nativeElement,\n viewContainerRef: this.viewContainerRef,\n placement: this.thyPlacement(),\n offset: this.thyOffset(),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n width: this.thyAutocompleteWidth() || this.elementRef.nativeElement.clientWidth\n });\n const autocompleteComponent = this.autocompleteComponent();\n this.autocompleteRef = this.autocompleteService.open(autocompleteComponent.contentTemplateRef()!, config);\n this.autocompleteRef.afterClosed().subscribe(() => {\n this.panelOpened = false;\n autocompleteComponent.close();\n });\n // delay 200ms to prevent emit document click rightnow\n this.autocompleteRef\n .afterOpened()\n .pipe(delay(200))\n .subscribe(() => {\n this.closingActionsSubscription = this.subscribeToClosingActions();\n });\n return this.autocompleteRef.getOverlayRef();\n }\n\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n private subscribeToClosingActions(): Subscription {\n const firstStable = from(Promise.resolve());\n const optionChanges = this.autocompleteComponent().options.changes.pipe(\n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0)\n );\n // When the zone is stable initially, and when the option list changes...\n return (\n merge(firstStable, optionChanges)\n .pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => {\n this.resetActiveItem();\n\n if (this.panelOpened) {\n this.overlayRef!.updatePosition();\n }\n return this.panelClosingActions;\n }),\n // when the first closing event occurs...\n take(1)\n )\n // set the value, close the panel, and complete.\n .subscribe(event => this.setValueAndClose(event))\n );\n }\n\n private setValueAndClose(event: ThyOptionSelectionChangeEvent | null): void {\n if (event && event.option) {\n this.setValue(event.option.thyLabelText()!);\n }\n this.closePanel();\n }\n\n /** Stream of clicks outside of the autocomplete panel. */\n private getOutsideClickStream(): Observable<any> {\n return merge(\n fromEvent(this.document, 'click') as Observable<MouseEvent>,\n fromEvent(this.document, 'touchend') as Observable<TouchEvent>\n ).pipe(\n filter(event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = event.target as HTMLElement;\n const formField: any = null;\n\n return (\n this.panelOpened &&\n clickTarget !== this.elementRef.nativeElement &&\n !this.elementRef.nativeElement.contains(clickTarget) &&\n (!formField || !formField.contains(clickTarget)) &&\n !!this.overlayRef &&\n !this.overlayRef.overlayElement.contains(clickTarget)\n );\n })\n );\n }\n\n private setValue(value: string) {\n const input = this.elementRef.nativeElement.querySelector('input');\n const element = input ? input : this.elementRef.nativeElement;\n element.value = value;\n element.focus();\n }\n\n private canOpen(): boolean {\n const element: HTMLInputElement = this.elementRef.nativeElement;\n return !element.readOnly && !element.disabled;\n }\n\n private resetActiveItem(): void {\n const autocompleteComponent = this.autocompleteComponent();\n const index = autocompleteComponent.thyAutoActiveFirstOption() ? 0 : -1;\n autocompleteComponent.keyManager!.setActiveItem(index);\n }\n\n private destroyPanel(): void {\n if (this.overlayRef) {\n this.closePanel();\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n ngOnDestroy() {\n this.closeKeyEventStream.complete();\n this.destroyPanel();\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyOptionModule, ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyAutocomplete } from './autocomplete.component';\nimport { ThyAutocompleteTriggerDirective } from './autocomplete.trigger.directive';\nimport { ThyAutocompleteContainer } from './overlay/autocomplete-container.component';\nimport { THY_AUTOCOMPLETE_DEFAULT_CONFIG_PROVIDER } from './overlay/autocomplete.config';\nimport { ThyAutocompleteService } from './overlay/autocomplete.service';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThyInputModule,\n OverlayModule,\n PortalModule,\n ThyLoadingModule,\n ThySharedModule,\n ThyIconModule,\n ThyEmptyModule,\n ThyOptionModule,\n ThyAutocompleteTriggerDirective,\n ThyAutocomplete,\n ThyAutocompleteContainer\n ],\n exports: [ThyAutocompleteTriggerDirective, ThyAutocomplete, ThyAutocompleteContainer, ThyOptionModule],\n providers: [THY_AUTOCOMPLETE_DEFAULT_CONFIG_PROVIDER, ThyAutocompleteService]\n})\nexport class ThyAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { coerceBooleanProperty as coerceBooleanProperty$1, coerceNumberProperty,
3
3
  import { Subject, fromEvent, of, Observable, throwError, BehaviorSubject, from } from 'rxjs';
4
4
  import { FocusMonitor } from '@angular/cdk/a11y';
5
5
  import * as i0 from '@angular/core';
6
- import { inject, ElementRef, Injectable, NgZone, DOCUMENT, input, effect, Directive, signal, computed, EventEmitter, Injector, TemplateRef, reflectComponentType, Renderer2, InjectionToken, isDevMode } from '@angular/core';
6
+ import { inject, ElementRef, Injectable, NgZone, DOCUMENT, input, effect, Directive, signal, computed, EventEmitter, Injector, TemplateRef, reflectComponentType, Renderer2, InjectionToken, isDevMode, makeEnvironmentProviders } from '@angular/core';
7
7
  import { takeUntil, take, finalize, filter, catchError, shareReplay, exhaustMap, map, distinctUntilChanged, debounceTime } from 'rxjs/operators';
8
8
  import { ThyClickDispatcher } from '@tethys/cdk/event';
9
9
  export * from '@tethys/cdk/event';
@@ -818,7 +818,10 @@ function getFallbackPlacements(placement) {
818
818
  * [{topPosition}, {topLeftPosition}, {topRightPosition}, {bottomPosition}, {bottomLeftPosition}, {bottomRightPosition},]
819
819
  * @returns [ConnectionPositionPair]
820
820
  */
821
- function getFlexiblePositions(placement, offset, panelClassPrefix) {
821
+ function getFlexiblePositions(placement, offset, panelClassPrefix, flexiblePosition = true) {
822
+ if (!flexiblePosition) {
823
+ return [buildConnectedPositionPair(placement, offset, panelClassPrefix)];
824
+ }
822
825
  const fallbackPlacements = getFallbackPlacements(placement);
823
826
  return [placement, ...fallbackPlacements].map(placementName => {
824
827
  return buildConnectedPositionPair(placementName, offset, panelClassPrefix);
@@ -1805,9 +1808,21 @@ class DebounceTimeWrapper {
1805
1808
  }
1806
1809
  }
1807
1810
 
1811
+ const THY_GLOBAL_CONFIG = new InjectionToken('thy-global-config');
1812
+ function getOverlayGlobalConfig(globalConfig) {
1813
+ return globalConfig?.overlay ?? {};
1814
+ }
1815
+
1816
+ function provideTethys(...features) {
1817
+ return makeEnvironmentProviders(features);
1818
+ }
1819
+ function withGlobalConfig(config) {
1820
+ return makeEnvironmentProviders([{ provide: THY_GLOBAL_CONFIG, useValue: config }]);
1821
+ }
1822
+
1808
1823
  /**
1809
1824
  * Generated bundle index. Do not edit.
1810
1825
  */
1811
1826
 
1812
- export { AbstractControlValueAccessor, AnimationCurves, AnimationDuration, AnonymousClass, DebounceTimeWrapper, EXPANDED_DROPDOWN_POSITIONS, InputBoolean, InputCssPixel, InputNumber, MiniAction, MiniActionState, MiniStore, MixinBase, POSITION_MAP, ScrollToService, TabIndexDisabledControlValueAccessorMixin, TabIndexMixinBase, ThyAbstractInternalOverlayRef, ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyAbstractOverlayRef, ThyAbstractOverlayService, ThyAnimationCollapseDirective, ThyClickPositioner, ThyOverlayDirectiveBase, ThyPortalOutlet, ThyScrollService, ThyThemeStore, ThyTranslate, UpdateHostClassService, buildConnectedPositionOffset, buildConnectedPositionPair, cancelAnimationFrame, cancelRequestAnimationFrame, collapseMotion, fadeMotion, getFallbackPlacements, getFlexiblePositions, getNumericSize, getPlacementByPosition, injectPanelEmptyIcon, isBgColor, isTextColor, isThemeColor, mixinDisabled, mixinInitialized, mixinLoadingDone, mixinTabIndex, mixinUnsubscribe, presetBgColors, presetTextColors, presetThemeColors, reqAnimFrame, requestAnimationFrame, scaleMotion, scaleXMotion, scaleYMotion, throwPopoverContentAlreadyAttachedError, thumbMotion, thyAnimationFade, thyAnimationZoom, useHostFocusControl };
1827
+ export { AbstractControlValueAccessor, AnimationCurves, AnimationDuration, AnonymousClass, DebounceTimeWrapper, EXPANDED_DROPDOWN_POSITIONS, InputBoolean, InputCssPixel, InputNumber, MiniAction, MiniActionState, MiniStore, MixinBase, POSITION_MAP, ScrollToService, THY_GLOBAL_CONFIG, TabIndexDisabledControlValueAccessorMixin, TabIndexMixinBase, ThyAbstractInternalOverlayRef, ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyAbstractOverlayRef, ThyAbstractOverlayService, ThyAnimationCollapseDirective, ThyClickPositioner, ThyOverlayDirectiveBase, ThyPortalOutlet, ThyScrollService, ThyThemeStore, ThyTranslate, UpdateHostClassService, buildConnectedPositionOffset, buildConnectedPositionPair, cancelAnimationFrame, cancelRequestAnimationFrame, collapseMotion, fadeMotion, getFallbackPlacements, getFlexiblePositions, getNumericSize, getOverlayGlobalConfig, getPlacementByPosition, injectPanelEmptyIcon, isBgColor, isTextColor, isThemeColor, mixinDisabled, mixinInitialized, mixinLoadingDone, mixinTabIndex, mixinUnsubscribe, presetBgColors, presetTextColors, presetThemeColors, provideTethys, reqAnimFrame, requestAnimationFrame, scaleMotion, scaleXMotion, scaleYMotion, throwPopoverContentAlreadyAttachedError, thumbMotion, thyAnimationFade, thyAnimationZoom, useHostFocusControl, withGlobalConfig };
1813
1828
  //# sourceMappingURL=ngx-tethys-core.mjs.map