ngx-tethys 21.0.6 → 21.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/fesm2022/ngx-tethys-autocomplete.mjs +17 -13
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +1 -1
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +27 -18
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +21 -21
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +32 -33
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +214 -205
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +30 -33
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +5 -7
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-result.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +27 -30
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +37 -43
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +25 -20
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/types/ngx-tethys-autocomplete.d.ts +3 -2
- package/types/ngx-tethys-button.d.ts +2 -2
- package/types/ngx-tethys-carousel.d.ts +9 -8
- package/types/ngx-tethys-dropdown.d.ts +4 -4
- package/types/ngx-tethys-form.d.ts +6 -5
- package/types/ngx-tethys-layout.d.ts +4 -1
- package/types/ngx-tethys-list.d.ts +3 -5
- package/types/ngx-tethys-property-operation.d.ts +1 -1
- package/types/ngx-tethys-shared.d.ts +4 -5
- package/types/ngx-tethys-table.d.ts +8 -7
- package/types/ngx-tethys-tabs.d.ts +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
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.7](github.com/atinc/ngx-tethys/compare/21.0.6...21.0.7) (2026-08-04)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **button:** 修复button type参数无默认值 #TINFR-3815 ([6839cc6](github.com/atinc/ngx-tethys/commits/6839cc6c21b642772ad03b88a8526e0d29a3e75c)), closes [#TINFR-3815](github.com/atinc/ngx-tethys/issues/TINFR-3815)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add sidebar to thy-layout set has-sidebar class #NEXUS-3955 ([cd02729](github.com/atinc/ngx-tethys/commits/cd027295ad942f9427399feeb2da9dcd7d746ab7)), closes [#NEXUS-3955](github.com/atinc/ngx-tethys/issues/NEXUS-3955)
|
|
16
|
+
|
|
5
17
|
## [21.0.6](github.com/atinc/ngx-tethys/compare/21.0.5...21.0.6) (2026-07-02)
|
|
6
18
|
|
|
7
19
|
|
|
@@ -2,20 +2,20 @@ import { FlexibleConnectedPositionStrategy, Overlay, ScrollDispatcher, OverlayCo
|
|
|
2
2
|
import { PortalModule, ComponentPortal } from '@angular/cdk/portal';
|
|
3
3
|
import { NgClass, CommonModule } from '@angular/common';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { inject, ChangeDetectorRef, DestroyRef, signal, computed, viewChild, viewChildren, input, output, afterRenderEffect,
|
|
5
|
+
import { inject, ChangeDetectorRef, DestroyRef, signal, computed, viewChild, contentChildren, viewChildren, input, output, afterRenderEffect, ChangeDetectionStrategy, Component, InjectionToken, ElementRef, DOCUMENT, NgZone, EventEmitter, ViewChild, Injector, Injectable, ViewContainerRef, numberAttribute, HostBinding, Directive, NgModule } from '@angular/core';
|
|
6
6
|
import { FormsModule } from '@angular/forms';
|
|
7
7
|
import { ThyEmpty, ThyEmptyModule } from 'ngx-tethys/empty';
|
|
8
8
|
import { ThyIconModule } from 'ngx-tethys/icon';
|
|
9
9
|
import { ThyInputModule } from 'ngx-tethys/input';
|
|
10
10
|
import { ThyLoadingModule } from 'ngx-tethys/loading';
|
|
11
|
-
import { ThyOptionRender, ThyOptionSelectionChangeEvent, ThyStopPropagationDirective,
|
|
11
|
+
import { ThyOption, ThyOptionRender, ThyOptionSelectionChangeEvent, ThyStopPropagationDirective, ThyOptionModule, ThySharedModule } from 'ngx-tethys/shared';
|
|
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
15
|
import { injectPanelEmptyIcon, ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, ThyClickDispatcher, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService, getOverlayGlobalConfig, getFlexiblePositions, THY_GLOBAL_CONFIG, ScrollToService } from 'ngx-tethys/core';
|
|
16
|
-
import { takeUntilDestroyed, outputToObservable } from '@angular/core/rxjs-interop';
|
|
16
|
+
import { takeUntilDestroyed, outputToObservable, toObservable } from '@angular/core/rxjs-interop';
|
|
17
17
|
import { Subject, merge, of, from, fromEvent } from 'rxjs';
|
|
18
|
-
import { filter, takeUntil, map, delay, switchMap, take } from 'rxjs/operators';
|
|
18
|
+
import { filter, takeUntil, map, delay, skip, switchMap, take } from 'rxjs/operators';
|
|
19
19
|
import { coerceElement, coerceArray } from '@angular/cdk/coercion';
|
|
20
20
|
import { Platform } from '@angular/cdk/platform';
|
|
21
21
|
import { ViewportRuler } from '@angular/cdk/scrolling';
|
|
@@ -43,6 +43,10 @@ class ThyAutocomplete {
|
|
|
43
43
|
this.contentTemplateRef = viewChild('contentTemplate', ...(ngDevMode ? [{ debugName: "contentTemplateRef" }] : /* istanbul ignore next */ []));
|
|
44
44
|
// scroll element container
|
|
45
45
|
this.optionsContainer = viewChild('panel', ...(ngDevMode ? [{ debugName: "optionsContainer" }] : /* istanbul ignore next */ []));
|
|
46
|
+
/**
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
this.options = contentChildren(ThyOption, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), descendants: true });
|
|
46
50
|
this.optionRenders = viewChildren(ThyOptionRender, ...(ngDevMode ? [{ debugName: "optionRenders" }] : /* istanbul ignore next */ []));
|
|
47
51
|
/**
|
|
48
52
|
* 空选项时的文本
|
|
@@ -78,7 +82,7 @@ class ThyAutocomplete {
|
|
|
78
82
|
const optionRenders = this.optionRenders();
|
|
79
83
|
this.keyManager = new ActiveDescendantKeyManager(optionRenders).withWrap();
|
|
80
84
|
this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(index => {
|
|
81
|
-
this.thyOptionActivated.emit({ source: this, option: this.options
|
|
85
|
+
this.thyOptionActivated.emit({ source: this, option: this.options()[index] || null });
|
|
82
86
|
});
|
|
83
87
|
}
|
|
84
88
|
open() {
|
|
@@ -92,7 +96,7 @@ class ThyAutocomplete {
|
|
|
92
96
|
}
|
|
93
97
|
optionClick(event) {
|
|
94
98
|
const { value, isUserInput } = event;
|
|
95
|
-
const option = this.options
|
|
99
|
+
const option = this.options().find(option => option.thyValue() === value);
|
|
96
100
|
if (option) {
|
|
97
101
|
option.selectionChange.emit({ option, isUserInput: !!isUserInput });
|
|
98
102
|
}
|
|
@@ -100,15 +104,12 @@ class ThyAutocomplete {
|
|
|
100
104
|
this.thyOptionSelected.emit(new ThyOptionSelectionChangeEvent(option, false));
|
|
101
105
|
}
|
|
102
106
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ThyAutocomplete, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: ThyAutocomplete, isStandalone: true, selector: "thy-autocomplete", inputs: { thyEmptyText: { classPropertyName: "thyEmptyText", publicName: "thyEmptyText", isSignal: true, isRequired: false, transformFunction: null }, thyAutoActiveFirstOption: { classPropertyName: "thyAutoActiveFirstOption", publicName: "thyAutoActiveFirstOption", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thyOptionSelected: "thyOptionSelected", thyOpened: "thyOpened", thyClosed: "thyClosed", thyOptionActivated: "thyOptionActivated" }, queries: [{ propertyName: "options", predicate: ThyOption, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: ["contentTemplate"], descendants: true, isSignal: true }, { propertyName: "optionsContainer", first: true, predicate: ["panel"], descendants: true, isSignal: true }, { propertyName: "optionRenders", predicate: ThyOptionRender, descendants: true, isSignal: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyOptionRender, selector: "thy-option-render", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thySearchKey", "thyDisabled", "thyShowOptionCustom", "thyTemplate", "thyTemplateContext", "thyShowCheckedIcon", "thySelectedValuesMap", "thyActivatedValue"], outputs: ["optionClick", "optionHover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
107
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: ThyAutocomplete, isStandalone: true, selector: "thy-autocomplete", inputs: { thyEmptyText: { classPropertyName: "thyEmptyText", publicName: "thyEmptyText", isSignal: true, isRequired: false, transformFunction: null }, thyAutoActiveFirstOption: { classPropertyName: "thyAutoActiveFirstOption", publicName: "thyAutoActiveFirstOption", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thyOptionSelected: "thyOptionSelected", thyOpened: "thyOpened", thyClosed: "thyClosed", thyOptionActivated: "thyOptionActivated" }, queries: [{ propertyName: "options", predicate: ThyOption, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: ["contentTemplate"], descendants: true, isSignal: true }, { propertyName: "optionsContainer", first: true, predicate: ["panel"], descendants: true, isSignal: true }, { propertyName: "optionRenders", predicate: ThyOptionRender, descendants: true, isSignal: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyOptionRender, selector: "thy-option-render", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thySearchKey", "thyDisabled", "thyShowOptionCustom", "thyTemplate", "thyTemplateContext", "thyShowCheckedIcon", "thySelectedValuesMap", "thyActivatedValue"], outputs: ["optionClick", "optionHover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
104
108
|
}
|
|
105
109
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ThyAutocomplete, decorators: [{
|
|
106
110
|
type: Component,
|
|
107
|
-
args: [{ selector: 'thy-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ThyStopPropagationDirective, NgClass, ThyEmpty, ThyOptionRender], template: "<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" }]
|
|
108
|
-
}], ctorParameters: () => [], propDecorators: { contentTemplateRef: [{ type: i0.ViewChild, args: ['contentTemplate', { isSignal: true }] }], optionsContainer: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }], options: [{
|
|
109
|
-
type: ContentChildren,
|
|
110
|
-
args: [ThyOption, { descendants: true }]
|
|
111
|
-
}], optionRenders: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => ThyOptionRender), { isSignal: true }] }], thyEmptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyEmptyText", required: false }] }], thyAutoActiveFirstOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAutoActiveFirstOption", required: false }] }], thyOptionSelected: [{ type: i0.Output, args: ["thyOptionSelected"] }], thyOpened: [{ type: i0.Output, args: ["thyOpened"] }], thyClosed: [{ type: i0.Output, args: ["thyClosed"] }], thyOptionActivated: [{ type: i0.Output, args: ["thyOptionActivated"] }] } });
|
|
111
|
+
args: [{ selector: 'thy-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ThyStopPropagationDirective, NgClass, ThyEmpty, ThyOptionRender], template: "<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" }]
|
|
112
|
+
}], ctorParameters: () => [], propDecorators: { contentTemplateRef: [{ type: i0.ViewChild, args: ['contentTemplate', { isSignal: true }] }], optionsContainer: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }], options: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ThyOption), { ...{ descendants: true }, isSignal: true }] }], optionRenders: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => ThyOptionRender), { isSignal: true }] }], thyEmptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyEmptyText", required: false }] }], thyAutoActiveFirstOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAutoActiveFirstOption", required: false }] }], thyOptionSelected: [{ type: i0.Output, args: ["thyOptionSelected"] }], thyOpened: [{ type: i0.Output, args: ["thyOpened"] }], thyClosed: [{ type: i0.Output, args: ["thyClosed"] }], thyOptionActivated: [{ type: i0.Output, args: ["thyOptionActivated"] }] } });
|
|
112
113
|
|
|
113
114
|
const animationBody = [state('void, exit', style({ opacity: 0, transform: 'scale(0.1)' })), state('enter', style({ transform: 'none' }))];
|
|
114
115
|
/**
|
|
@@ -332,6 +333,7 @@ class ThyAutocompleteTriggerDirective {
|
|
|
332
333
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
333
334
|
this.document = inject(DOCUMENT, { optional: true });
|
|
334
335
|
this.cdr = inject(ChangeDetectorRef);
|
|
336
|
+
this.injector = inject(Injector);
|
|
335
337
|
this.overlayRef = null;
|
|
336
338
|
this.closeKeyEventStream = new Subject();
|
|
337
339
|
this.panelOpened = false;
|
|
@@ -476,7 +478,9 @@ class ThyAutocompleteTriggerDirective {
|
|
|
476
478
|
*/
|
|
477
479
|
subscribeToClosingActions() {
|
|
478
480
|
const firstStable = from(Promise.resolve());
|
|
479
|
-
const optionChanges = this.autocompleteComponent().options.
|
|
481
|
+
const optionChanges = toObservable(this.autocompleteComponent().options, { injector: this.injector }).pipe(
|
|
482
|
+
// Skip the initial emission to match QueryList.changes behavior.
|
|
483
|
+
skip(1),
|
|
480
484
|
// Defer emitting to the stream until the next tick, because changing
|
|
481
485
|
// bindings in here will cause "changed after checked" errors.
|
|
482
486
|
delay(0));
|
|
@@ -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, 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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"}
|
|
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 ChangeDetectorRef,\n ElementRef,\n inject,\n Signal,\n viewChild,\n input,\n output,\n viewChildren,\n signal,\n DestroyRef,\n afterRenderEffect,\n computed,\n contentChildren\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 readonly options = contentChildren(ThyOption, { descendants: true });\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()[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().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 Injector\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, skip } from 'rxjs/operators';\nimport { outputToObservable, toObservable } 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 private injector = inject(Injector);\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 = toObservable(this.autocompleteComponent().options, { injector: this.injector }).pipe(\n // Skip the initial emission to match QueryList.changes behavior.\n skip(1),\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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"}
|
|
@@ -309,7 +309,7 @@ class ThyButton {
|
|
|
309
309
|
return null;
|
|
310
310
|
}, ...(ngDevMode ? [{ debugName: "iconClass" }] : /* istanbul ignore next */ []));
|
|
311
311
|
this.buttonType = computed(() => {
|
|
312
|
-
return this.thyButton() || this.thyType();
|
|
312
|
+
return this.thyButton() || this.thyType() || 'primary';
|
|
313
313
|
}, ...(ngDevMode ? [{ debugName: "buttonType" }] : /* istanbul ignore next */ []));
|
|
314
314
|
this.isRadiusSquare = computed(() => {
|
|
315
315
|
const type = this.buttonType();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-button.mjs","sources":["../../../src/button/button-group.component.ts","../../../src/button/button-icon.component.ts","../../../src/button/button-icon.component.html","../../../src/button/button.component.ts","../../../src/button/button.component.html","../../../src/button/button.module.ts","../../../src/button/ngx-tethys-button.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { Component, effect, HostBinding, input, Input, OnInit, ViewEncapsulation } from '@angular/core';\n\nexport type ButtonGroupSize = 'sm' | 'lg' | 'xs' | 'md';\n\nexport type ButtonGroupType = 'outline-primary' | 'outline-default';\n\nconst buttonGroupSizeMap = {\n sm: ['btn-group-sm'],\n md: ['btn-group-md'],\n lg: ['btn-group-lg'],\n xs: ['btn-group-xs']\n};\n\n/**\n * 按钮分组组件\n * @name thy-button-group\n * @order 30\n */\n@Component({\n selector: 'thy-button-group',\n template: '<ng-content></ng-content>',\n host: {\n class: 'btn-group',\n '[class.btn-group-clear-min-width]': 'thyClearMinWidth()'\n },\n encapsulation: ViewEncapsulation.None\n})\nexport class ThyButtonGroup {\n private hostRenderer = useHostRenderer();\n\n /**\n * 大小\n * @type xs | sm | md | lg\n * @default md\n */\n readonly thySize = input<ButtonGroupSize>();\n\n /**\n * 类型\n * @type outline-default | outline-primary\n * @default outline-default\n */\n readonly thyType = input<ButtonGroupType>();\n\n /**\n * 是否需要最小宽度,默认按钮最小宽度为80px\n * @default false\n */\n readonly thyClearMinWidth = input(false, { transform: coerceBooleanProperty });\n\n constructor() {\n effect(() => {\n this.setClasses();\n });\n }\n\n private setClasses() {\n const type = this.thyType();\n const size = this.thySize();\n let classNames: string[] = [];\n if (type) {\n classNames.push(`btn-group-${type}`);\n }\n if (size && buttonGroupSizeMap[size]) {\n classNames = classNames.concat(...buttonGroupSizeMap[size]);\n }\n this.hostRenderer.updateClass(classNames);\n }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, ViewEncapsulation, computed, effect, input } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\n\nexport type ThyButtonIconShape = '' | 'circle-dashed' | 'circle-solid' | 'circle-thick-dashed' | 'circle-thick-solid' | 'self-icon';\n\nconst sizeClassesMap: Record<string, string[]> = {\n lg: ['btn-icon-lg'],\n md: ['btn-icon-md'],\n sm: ['btn-icon-sm'],\n xs: ['btn-icon-xs']\n};\n\nconst shapeClassesMap = {\n 'circle-dashed': ['btn-icon-circle', 'circle-dashed'],\n 'circle-solid': ['btn-icon-circle', 'circle-solid'],\n 'circle-thick-dashed': ['btn-icon-circle', 'circle-dashed', 'border-thick'],\n 'circle-thick-solid': ['btn-icon-circle', 'circle-solid', 'border-thick'],\n 'self-icon': ['btn-icon-self-circle']\n};\n\nconst themeClassesMap: any = {\n 'danger-weak': ['btn-icon-danger-weak']\n};\n\n/**\n * 操作按钮图标,支持`thy-button-icon`组件和`thyButtonIcon`指令两种形式\n * @name thy-button-icon,[thy-button-icon],[thyButtonIcon]\n * @order 20\n */\n@Component({\n selector: 'thy-button-icon,[thy-button-icon],[thyButtonIcon]',\n templateUrl: './button-icon.component.html',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'btn btn-icon',\n '[class.btn-icon-light]': 'thyLight()',\n '[class.btn-icon-active]': 'thyActive()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyIcon, NgClass]\n})\nexport class ThyButtonIcon {\n /**\n * 大小\n * @type xs | sm | md | lg\n * @default 36px\n */\n readonly thySize = input<string>();\n\n /**\n * 图标, 和`thyButtonIcon`相同,当使用`thy-button-icon`时,只能使用 thyIcon 设置图标\n */\n readonly thyIcon = input<string>();\n\n /**\n * 图标按钮的图标\n */\n readonly thyButtonIcon = input<string>();\n\n /**\n * 展示的形状,默认只显示字体图标图标,circle-dashed, circle-solid 展示成虚线,实线边框圆形图标, circle-thick-dashed, circle-thick-solid 边框加粗\n */\n readonly thyShape = input<ThyButtonIconShape>();\n\n /**\n * 亮色,颜色更浅,适合左侧导航顶部的按钮\n * @default false\n */\n readonly thyLight = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 设置为选中状态\n * @default false\n */\n readonly thyActive = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 按钮展示类型,默认图标移上去显示主色, danger-weak 鼠标移上去显示 danger 红色\n */\n readonly thyTheme = input<string>();\n\n readonly thyColor = input<string>();\n\n constructor() {\n effect(() => {\n this.setClasses();\n });\n }\n\n private hostRenderer = useHostRenderer();\n\n private icon = computed(() => {\n return this.thyButtonIcon() || this.thyIcon();\n });\n\n private isWtfIcon = computed(() => {\n const icon = this.icon();\n return icon && icon.includes('wtf');\n });\n\n protected svgIconName = computed(() => {\n if (!this.isWtfIcon()) {\n return this.icon();\n }\n return null;\n });\n\n protected iconClasses = computed<string[] | null>(() => {\n const icon = this.icon();\n if (this.isWtfIcon()) {\n const classes = icon!.split(' ');\n if (classes.length === 1) {\n classes.unshift('wtf');\n }\n return classes;\n }\n return null;\n });\n\n private setClasses() {\n const size = this.thySize();\n const shape = this.thyShape();\n const theme = this.thyTheme();\n const classes = size && sizeClassesMap[size] ? [...sizeClassesMap[size]] : [];\n if (shape && shapeClassesMap[shape]) {\n shapeClassesMap[shape].forEach((className: string) => {\n classes.push(className);\n });\n }\n if (theme && themeClassesMap[theme]) {\n themeClassesMap[theme].forEach((className: string) => {\n classes.push(className);\n });\n }\n this.hostRenderer.updateClass(classes);\n }\n}\n","@if (svgIconName()) {\n <thy-icon [thyIconName]=\"svgIconName()\" [style.color]=\"thyColor()\" [style.borderColor]=\"thyColor()\"></thy-icon>\n} @else {\n @if (iconClasses()) {\n <i [ngClass]=\"iconClasses()\" [style.color]=\"thyColor()\" [style.borderColor]=\"thyColor()\"></i>\n }\n}\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Renderer2,\n ViewEncapsulation,\n inject,\n input,\n computed,\n effect,\n afterNextRender\n} from '@angular/core';\n\nimport { assertIconOnly, coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgClass } from '@angular/common';\n\nexport type ThyButtonType =\n | 'primary'\n | 'secondary'\n | 'info'\n | 'outline-primary'\n | 'outline-default'\n | 'danger'\n | 'link'\n | 'link-secondary'\n | 'warning'\n | 'outline-warning'\n | 'success'\n | 'outline-success'\n | 'outline-info'\n | 'outline-danger'\n | 'link-danger-weak'\n | 'link-danger'\n | 'link-success';\n\nconst btnTypeClassesMap: Record<string, string[]> = {\n primary: ['btn-primary'],\n secondary: ['btn-primary', 'btn-md'],\n info: ['btn-info'],\n warning: ['btn-warning'],\n danger: ['btn-danger'],\n 'outline-primary': ['btn-outline-primary'],\n 'outline-default': ['btn-outline-default'],\n link: ['btn-link'], // 链接按钮\n 'link-info': ['btn-link', 'btn-link-info'], // 幽灵链接按钮\n 'link-secondary': ['btn-link', 'btn-link-primary-weak'], // 幽灵链接按钮\n 'link-danger-weak': ['btn-link', 'btn-link-danger-weak'], // 幽灵危险按钮\n 'link-danger': ['btn-link', 'btn-link-danger'], // 危险按钮\n 'link-success': ['btn-link', 'btn-link-success'] // 成功按钮\n};\n\nconst iconOnlyClass = 'thy-btn-icon-only';\n\n/**\n * 操作按钮,支持组件`thy-button`和`thyButton`指令两种形式\n * @name thy-button,[thy-button],[thyButton]\n * @order 10\n */\n@Component({\n selector: 'thy-button,[thy-button],[thyButton]',\n templateUrl: './button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-btn btn',\n '[class.btn-block]': 'thyBlock()'\n },\n imports: [ThyIcon, NgClass]\n})\nexport class ThyButton {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n private _originalText?: string;\n\n private get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 按钮类型,支持添加前缀`outline-`实现线框按钮,支持添加前缀`link-`实现按钮链接\n * @type primary | info | warning | danger | success\n * @default primary\n */\n readonly thyButton = input<ThyButtonType>();\n\n /**\n * 和`thyButton`参数一样,一般使用`thyButton`,为了减少参数输入, 当通过`thy-button`使用时,只能使用该参数控制类型\n * @default primary\n */\n readonly thyType = input<ThyButtonType>();\n\n /**\n * 加载状态\n * @default false\n */\n readonly thyLoading = input<boolean, ThyBooleanInput>(false, {\n transform: value => {\n if (!this.thyLoading() && value) {\n const textElement = this.nativeElement?.querySelector('span');\n this._originalText = textElement ? textElement.innerText : '';\n }\n return coerceBooleanProperty(value);\n }\n });\n\n /**\n * 加载状态时显示的文案\n */\n readonly thyLoadingText = input<string>();\n\n /**\n * 按钮大小\n * @type xs | sm | md | default | lg\n * @default default\n */\n readonly thySize = input<string>();\n\n /**\n * 按钮中显示的图标,支持SVG图标名称,比如`angle-left`,也支持传之前的 wtf 字体,比如: wtf-plus\n */\n readonly thyIcon = input<string>();\n\n /**\n * 按钮整块展示\n * @default false\n */\n readonly thyBlock = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n private isWtfIcon = computed(() => {\n const icon = this.thyIcon();\n return icon && icon.includes('wtf');\n });\n\n protected svgIconName = computed(() => {\n if (!this.isWtfIcon()) {\n return this.thyIcon();\n }\n return null;\n });\n\n protected iconClass = computed<string[] | null>(() => {\n const icon = this.thyIcon();\n if (this.isWtfIcon()) {\n const classes = icon!.split(' ');\n if (classes.length === 1) {\n classes.unshift('wtf');\n }\n return classes;\n }\n return null;\n });\n\n private buttonType = computed(() => {\n return this.thyButton() || this.thyType();\n });\n\n protected isRadiusSquare = computed(() => {\n const type = this.buttonType();\n return !!type?.includes('-square');\n });\n\n protected type = computed(() => {\n const type = this.buttonType();\n if (this.isRadiusSquare()) {\n return type?.replace('-square', '');\n } else {\n return type;\n }\n });\n\n private setButtonText() {\n const text = this.thyLoading() ? this.thyLoadingText() : this._originalText;\n const spanElement = this.nativeElement.querySelector('span');\n if (spanElement && text) {\n this.renderer.setProperty(spanElement, 'innerText', text);\n }\n }\n\n private updateClasses() {\n const type = this.type();\n if (!type) {\n return;\n }\n\n let classNames: string[] = [];\n if (btnTypeClassesMap[type]) {\n classNames = [...btnTypeClassesMap[type]];\n } else {\n if (type) {\n classNames.push(`btn-${type}`);\n }\n }\n\n const size = this.thySize();\n if (size) {\n classNames.push(`btn-${size}`);\n }\n if (this.isRadiusSquare()) {\n classNames.push('btn-square');\n }\n const loading = this.thyLoading();\n if (loading) {\n classNames.push('loading');\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n constructor() {\n effect(() => {\n this.updateClasses();\n });\n\n effect(() => {\n this.setButtonText();\n });\n\n afterNextRender(() => {\n if (assertIconOnly(this.nativeElement)) {\n this.hostRenderer.addClass(iconOnlyClass);\n } else {\n this.hostRenderer.removeClass(iconOnlyClass);\n }\n this.wrapSpanForText(this.nativeElement.childNodes);\n });\n }\n\n private wrapSpanForText(nodes: NodeList): void {\n nodes.forEach(node => {\n if (node.nodeName === '#text') {\n const span = this.renderer.createElement('span');\n const parent = this.renderer.parentNode(node);\n this.renderer.addClass(span, 'thy-btn-wrap-span');\n this.renderer.insertBefore(parent, span, node);\n this.renderer.appendChild(span, node);\n }\n });\n }\n}\n","@if (svgIconName()) {\n <thy-icon [thyIconName]=\"svgIconName()\"></thy-icon>\n} @else {\n @if (iconClass()) {\n <i [ngClass]=\"iconClass()\"></i>\n }\n}\n<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyButtonGroup } from './button-group.component';\nimport { ThyButtonIcon } from './button-icon.component';\nimport { ThyButton } from './button.component';\n\n@NgModule({\n imports: [CommonModule, ThyIconModule, ThyButton, ThyButtonIcon, ThyButtonGroup],\n exports: [ThyButton, ThyButtonIcon, ThyButtonGroup]\n})\nexport class ThyButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["coerceBooleanProperty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-button.mjs","sources":["../../../src/button/button-group.component.ts","../../../src/button/button-icon.component.ts","../../../src/button/button-icon.component.html","../../../src/button/button.component.ts","../../../src/button/button.component.html","../../../src/button/button.module.ts","../../../src/button/ngx-tethys-button.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { Component, effect, HostBinding, input, Input, OnInit, ViewEncapsulation } from '@angular/core';\n\nexport type ButtonGroupSize = 'sm' | 'lg' | 'xs' | 'md';\n\nexport type ButtonGroupType = 'outline-primary' | 'outline-default';\n\nconst buttonGroupSizeMap = {\n sm: ['btn-group-sm'],\n md: ['btn-group-md'],\n lg: ['btn-group-lg'],\n xs: ['btn-group-xs']\n};\n\n/**\n * 按钮分组组件\n * @name thy-button-group\n * @order 30\n */\n@Component({\n selector: 'thy-button-group',\n template: '<ng-content></ng-content>',\n host: {\n class: 'btn-group',\n '[class.btn-group-clear-min-width]': 'thyClearMinWidth()'\n },\n encapsulation: ViewEncapsulation.None\n})\nexport class ThyButtonGroup {\n private hostRenderer = useHostRenderer();\n\n /**\n * 大小\n * @type xs | sm | md | lg\n * @default md\n */\n readonly thySize = input<ButtonGroupSize>();\n\n /**\n * 类型\n * @type outline-default | outline-primary\n * @default outline-default\n */\n readonly thyType = input<ButtonGroupType>();\n\n /**\n * 是否需要最小宽度,默认按钮最小宽度为80px\n * @default false\n */\n readonly thyClearMinWidth = input(false, { transform: coerceBooleanProperty });\n\n constructor() {\n effect(() => {\n this.setClasses();\n });\n }\n\n private setClasses() {\n const type = this.thyType();\n const size = this.thySize();\n let classNames: string[] = [];\n if (type) {\n classNames.push(`btn-group-${type}`);\n }\n if (size && buttonGroupSizeMap[size]) {\n classNames = classNames.concat(...buttonGroupSizeMap[size]);\n }\n this.hostRenderer.updateClass(classNames);\n }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, ViewEncapsulation, computed, effect, input } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\n\nexport type ThyButtonIconShape = '' | 'circle-dashed' | 'circle-solid' | 'circle-thick-dashed' | 'circle-thick-solid' | 'self-icon';\n\nconst sizeClassesMap: Record<string, string[]> = {\n lg: ['btn-icon-lg'],\n md: ['btn-icon-md'],\n sm: ['btn-icon-sm'],\n xs: ['btn-icon-xs']\n};\n\nconst shapeClassesMap = {\n 'circle-dashed': ['btn-icon-circle', 'circle-dashed'],\n 'circle-solid': ['btn-icon-circle', 'circle-solid'],\n 'circle-thick-dashed': ['btn-icon-circle', 'circle-dashed', 'border-thick'],\n 'circle-thick-solid': ['btn-icon-circle', 'circle-solid', 'border-thick'],\n 'self-icon': ['btn-icon-self-circle']\n};\n\nconst themeClassesMap: any = {\n 'danger-weak': ['btn-icon-danger-weak']\n};\n\n/**\n * 操作按钮图标,支持`thy-button-icon`组件和`thyButtonIcon`指令两种形式\n * @name thy-button-icon,[thy-button-icon],[thyButtonIcon]\n * @order 20\n */\n@Component({\n selector: 'thy-button-icon,[thy-button-icon],[thyButtonIcon]',\n templateUrl: './button-icon.component.html',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'btn btn-icon',\n '[class.btn-icon-light]': 'thyLight()',\n '[class.btn-icon-active]': 'thyActive()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyIcon, NgClass]\n})\nexport class ThyButtonIcon {\n /**\n * 大小\n * @type xs | sm | md | lg\n * @default 36px\n */\n readonly thySize = input<string>();\n\n /**\n * 图标, 和`thyButtonIcon`相同,当使用`thy-button-icon`时,只能使用 thyIcon 设置图标\n */\n readonly thyIcon = input<string>();\n\n /**\n * 图标按钮的图标\n */\n readonly thyButtonIcon = input<string>();\n\n /**\n * 展示的形状,默认只显示字体图标图标,circle-dashed, circle-solid 展示成虚线,实线边框圆形图标, circle-thick-dashed, circle-thick-solid 边框加粗\n */\n readonly thyShape = input<ThyButtonIconShape>();\n\n /**\n * 亮色,颜色更浅,适合左侧导航顶部的按钮\n * @default false\n */\n readonly thyLight = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 设置为选中状态\n * @default false\n */\n readonly thyActive = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 按钮展示类型,默认图标移上去显示主色, danger-weak 鼠标移上去显示 danger 红色\n */\n readonly thyTheme = input<string>();\n\n readonly thyColor = input<string>();\n\n constructor() {\n effect(() => {\n this.setClasses();\n });\n }\n\n private hostRenderer = useHostRenderer();\n\n private icon = computed(() => {\n return this.thyButtonIcon() || this.thyIcon();\n });\n\n private isWtfIcon = computed(() => {\n const icon = this.icon();\n return icon && icon.includes('wtf');\n });\n\n protected svgIconName = computed(() => {\n if (!this.isWtfIcon()) {\n return this.icon();\n }\n return null;\n });\n\n protected iconClasses = computed<string[] | null>(() => {\n const icon = this.icon();\n if (this.isWtfIcon()) {\n const classes = icon!.split(' ');\n if (classes.length === 1) {\n classes.unshift('wtf');\n }\n return classes;\n }\n return null;\n });\n\n private setClasses() {\n const size = this.thySize();\n const shape = this.thyShape();\n const theme = this.thyTheme();\n const classes = size && sizeClassesMap[size] ? [...sizeClassesMap[size]] : [];\n if (shape && shapeClassesMap[shape]) {\n shapeClassesMap[shape].forEach((className: string) => {\n classes.push(className);\n });\n }\n if (theme && themeClassesMap[theme]) {\n themeClassesMap[theme].forEach((className: string) => {\n classes.push(className);\n });\n }\n this.hostRenderer.updateClass(classes);\n }\n}\n","@if (svgIconName()) {\n <thy-icon [thyIconName]=\"svgIconName()\" [style.color]=\"thyColor()\" [style.borderColor]=\"thyColor()\"></thy-icon>\n} @else {\n @if (iconClasses()) {\n <i [ngClass]=\"iconClasses()\" [style.color]=\"thyColor()\" [style.borderColor]=\"thyColor()\"></i>\n }\n}\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Renderer2,\n ViewEncapsulation,\n inject,\n input,\n computed,\n effect,\n afterNextRender\n} from '@angular/core';\n\nimport { assertIconOnly, coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgClass } from '@angular/common';\n\nexport type ThyButtonType =\n | 'primary'\n | 'secondary'\n | 'info'\n | 'outline-primary'\n | 'outline-default'\n | 'danger'\n | 'link'\n | 'link-secondary'\n | 'warning'\n | 'outline-warning'\n | 'success'\n | 'outline-success'\n | 'outline-info'\n | 'outline-danger'\n | 'link-danger-weak'\n | 'link-danger'\n | 'link-success';\n\nconst btnTypeClassesMap: Record<string, string[]> = {\n primary: ['btn-primary'],\n secondary: ['btn-primary', 'btn-md'],\n info: ['btn-info'],\n warning: ['btn-warning'],\n danger: ['btn-danger'],\n 'outline-primary': ['btn-outline-primary'],\n 'outline-default': ['btn-outline-default'],\n link: ['btn-link'], // 链接按钮\n 'link-info': ['btn-link', 'btn-link-info'], // 幽灵链接按钮\n 'link-secondary': ['btn-link', 'btn-link-primary-weak'], // 幽灵链接按钮\n 'link-danger-weak': ['btn-link', 'btn-link-danger-weak'], // 幽灵危险按钮\n 'link-danger': ['btn-link', 'btn-link-danger'], // 危险按钮\n 'link-success': ['btn-link', 'btn-link-success'] // 成功按钮\n};\n\nconst iconOnlyClass = 'thy-btn-icon-only';\n\n/**\n * 操作按钮,支持组件`thy-button`和`thyButton`指令两种形式\n * @name thy-button,[thy-button],[thyButton]\n * @order 10\n */\n@Component({\n selector: 'thy-button,[thy-button],[thyButton]',\n templateUrl: './button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-btn btn',\n '[class.btn-block]': 'thyBlock()'\n },\n imports: [ThyIcon, NgClass]\n})\nexport class ThyButton {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n private _originalText?: string;\n\n private get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 按钮类型,支持添加前缀`outline-`实现线框按钮,支持添加前缀`link-`实现按钮链接\n * @type primary | info | warning | danger | success\n * @default primary\n */\n readonly thyButton = input<ThyButtonType>();\n\n /**\n * 和`thyButton`参数一样,一般使用`thyButton`,为了减少参数输入, 当通过`thy-button`使用时,只能使用该参数控制类型\n * @default primary\n */\n readonly thyType = input<ThyButtonType>();\n\n /**\n * 加载状态\n * @default false\n */\n readonly thyLoading = input<boolean, ThyBooleanInput>(false, {\n transform: value => {\n if (!this.thyLoading() && value) {\n const textElement = this.nativeElement?.querySelector('span');\n this._originalText = textElement ? textElement.innerText : '';\n }\n return coerceBooleanProperty(value);\n }\n });\n\n /**\n * 加载状态时显示的文案\n */\n readonly thyLoadingText = input<string>();\n\n /**\n * 按钮大小\n * @type xs | sm | md | default | lg\n * @default default\n */\n readonly thySize = input<string>();\n\n /**\n * 按钮中显示的图标,支持SVG图标名称,比如`angle-left`,也支持传之前的 wtf 字体,比如: wtf-plus\n */\n readonly thyIcon = input<string>();\n\n /**\n * 按钮整块展示\n * @default false\n */\n readonly thyBlock = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n private isWtfIcon = computed(() => {\n const icon = this.thyIcon();\n return icon && icon.includes('wtf');\n });\n\n protected svgIconName = computed(() => {\n if (!this.isWtfIcon()) {\n return this.thyIcon();\n }\n return null;\n });\n\n protected iconClass = computed<string[] | null>(() => {\n const icon = this.thyIcon();\n if (this.isWtfIcon()) {\n const classes = icon!.split(' ');\n if (classes.length === 1) {\n classes.unshift('wtf');\n }\n return classes;\n }\n return null;\n });\n\n private readonly buttonType = computed<ThyButtonType>(() => {\n return this.thyButton() || this.thyType() || 'primary';\n });\n\n protected isRadiusSquare = computed(() => {\n const type = this.buttonType();\n return !!type?.includes('-square');\n });\n\n protected type = computed(() => {\n const type = this.buttonType();\n if (this.isRadiusSquare()) {\n return type?.replace('-square', '');\n } else {\n return type;\n }\n });\n\n private setButtonText() {\n const text = this.thyLoading() ? this.thyLoadingText() : this._originalText;\n const spanElement = this.nativeElement.querySelector('span');\n if (spanElement && text) {\n this.renderer.setProperty(spanElement, 'innerText', text);\n }\n }\n\n private updateClasses() {\n const type = this.type();\n if (!type) {\n return;\n }\n\n let classNames: string[] = [];\n if (btnTypeClassesMap[type]) {\n classNames = [...btnTypeClassesMap[type]];\n } else {\n if (type) {\n classNames.push(`btn-${type}`);\n }\n }\n\n const size = this.thySize();\n if (size) {\n classNames.push(`btn-${size}`);\n }\n if (this.isRadiusSquare()) {\n classNames.push('btn-square');\n }\n const loading = this.thyLoading();\n if (loading) {\n classNames.push('loading');\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n constructor() {\n effect(() => {\n this.updateClasses();\n });\n\n effect(() => {\n this.setButtonText();\n });\n\n afterNextRender(() => {\n if (assertIconOnly(this.nativeElement)) {\n this.hostRenderer.addClass(iconOnlyClass);\n } else {\n this.hostRenderer.removeClass(iconOnlyClass);\n }\n this.wrapSpanForText(this.nativeElement.childNodes);\n });\n }\n\n private wrapSpanForText(nodes: NodeList): void {\n nodes.forEach(node => {\n if (node.nodeName === '#text') {\n const span = this.renderer.createElement('span');\n const parent = this.renderer.parentNode(node);\n this.renderer.addClass(span, 'thy-btn-wrap-span');\n this.renderer.insertBefore(parent, span, node);\n this.renderer.appendChild(span, node);\n }\n });\n }\n}\n","@if (svgIconName()) {\n <thy-icon [thyIconName]=\"svgIconName()\"></thy-icon>\n} @else {\n @if (iconClass()) {\n <i [ngClass]=\"iconClass()\"></i>\n }\n}\n<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyButtonGroup } from './button-group.component';\nimport { ThyButtonIcon } from './button-icon.component';\nimport { ThyButton } from './button.component';\n\n@NgModule({\n imports: [CommonModule, ThyIconModule, ThyButton, ThyButtonIcon, ThyButtonGroup],\n exports: [ThyButton, ThyButtonIcon, ThyButtonGroup]\n})\nexport class ThyButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["coerceBooleanProperty"],"mappings":"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"}
|