ngx-tethys 20.0.2 → 20.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/anchor/index.d.ts +9 -3
- package/cascader/index.d.ts +32 -30
- package/cascader/styles/cascader.scss +15 -0
- package/fesm2022/ngx-tethys-anchor.mjs +55 -18
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +29 -10
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +1 -1
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-native-table.mjs +1289 -0
- package/fesm2022/ngx-tethys-native-table.mjs.map +1 -0
- package/fesm2022/ngx-tethys-pagination.mjs +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +3 -1
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +41 -14
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +4 -3
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +20 -16
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-util.mjs +22 -1
- package/fesm2022/ngx-tethys-util.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/input/index.d.ts +1 -1
- package/native-table/index.d.ts +339 -0
- package/native-table/styles/native-table.scss +203 -0
- package/package.json +5 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/select/index.d.ts +8 -2
- package/shared/index.d.ts +2 -1
- package/shared/option/styles/select-dropdown.scss +5 -2
- package/styles/index.scss +1 -0
- package/util/index.d.ts +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,41 @@
|
|
|
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
|
+
## [20.0.4](https://github.com/atinc/ngx-tethys/compare/20.0.3...20.0.4) (2025-12-31)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **select:** fix TypeError: Cannot add property 0, object is not extensible #TINFR-3281 ([#3657](https://github.com/atinc/ngx-tethys/issues/3657)) ([65f8951](https://github.com/atinc/ngx-tethys/commit/65f8951b5de6998f10b572211865be25272e9153)), closes [#TINFR-3281](https://github.com/atinc/ngx-tethys/issues/TINFR-3281)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **cascader:** support load children #TINFR-2984 ([#3660](https://github.com/atinc/ngx-tethys/issues/3660)) ([c46eaff](https://github.com/atinc/ngx-tethys/commit/c46eaffb6299b1e4d1e9e19fe5a83ac25a606a8d)), closes [#TINFR-2984](https://github.com/atinc/ngx-tethys/issues/TINFR-2984) [#TINFR-2984](https://github.com/atinc/ngx-tethys/issues/TINFR-2984)
|
|
16
|
+
* **native-table:** 支持固定列 #TINFR-3268 ([#3656](https://github.com/atinc/ngx-tethys/issues/3656)) ([130c167](https://github.com/atinc/ngx-tethys/commit/130c167433b37ac4c880e5d8559b77c138e55e01)), closes [#TINFR-3268](https://github.com/atinc/ngx-tethys/issues/TINFR-3268) [#TINFR-3268](https://github.com/atinc/ngx-tethys/issues/TINFR-3268)
|
|
17
|
+
* **native-table:** 支持表头 #TINFR-3276 ([#3658](https://github.com/atinc/ngx-tethys/issues/3658)) ([bf59651](https://github.com/atinc/ngx-tethys/commit/bf59651923987bf31435065aef5c128bf4ec8ffa)), closes [#TINFR-3276](https://github.com/atinc/ngx-tethys/issues/TINFR-3276)
|
|
18
|
+
* **select:** set minBufferPx and maxBufferPx for virtual scroll #TINFR-3294 ([#3659](https://github.com/atinc/ngx-tethys/issues/3659)) ([e22db1a](https://github.com/atinc/ngx-tethys/commit/e22db1a89512a5c307fa50964d44d312b08cce3c)), closes [#TINFR-3294](https://github.com/atinc/ngx-tethys/issues/TINFR-3294)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [20.0.3](https://github.com/atinc/ngx-tethys/compare/20.0.2...20.0.3) (2025-12-24)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* **input-group:** update inputDirective usage to ensure proper type handling ([#3653](https://github.com/atinc/ngx-tethys/issues/3653)) ([48e3813](https://github.com/atinc/ngx-tethys/commit/48e3813fefde755c65e648362c836eb6bb18b576))
|
|
28
|
+
* **property:** 修复hover状态下编辑下拉选择后,左上角会闪烁 #TINFR-3246 ([48df583](https://github.com/atinc/ngx-tethys/commit/48df5836d66795dfda573d4848fd28b8ff5643ca)), closes [#TINFR-3246](https://github.com/atinc/ngx-tethys/issues/TINFR-3246)
|
|
29
|
+
* **select:** should call onChangeFn before close panel #TINFR-3248 ([#3645](https://github.com/atinc/ngx-tethys/issues/3645)) ([8627151](https://github.com/atinc/ngx-tethys/commit/8627151a796c5cc2fc79ec489f840ee0723e18b9)), closes [#TINFR-3248](https://github.com/atinc/ngx-tethys/issues/TINFR-3248)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
* **anchor:** add thyDisabledContainerScroll to support disabling the scrolling container jump, and keep the link activation within the visible range #TINFR-3243 ([#3643](https://github.com/atinc/ngx-tethys/issues/3643)) ([ea62f9f](https://github.com/atinc/ngx-tethys/commit/ea62f9f3b6b7039dd09efe5702c6593cec5ee556)), closes [#TINFR-3243](https://github.com/atinc/ngx-tethys/issues/TINFR-3243)
|
|
35
|
+
* **select:** add thyVirtualScroll parameter #TINFR-3232 ([#3651](https://github.com/atinc/ngx-tethys/issues/3651)) ([b37b73b](https://github.com/atinc/ngx-tethys/commit/b37b73b6057af624ea78a65e8c85a9307d287a3a)), closes [#TINFR-3232](https://github.com/atinc/ngx-tethys/issues/TINFR-3232)
|
|
36
|
+
* **select:** support suffixTemplate for thy-option ([#3652](https://github.com/atinc/ngx-tethys/issues/3652)) ([70487b0](https://github.com/atinc/ngx-tethys/commit/70487b0373567b3e7b130573fb045d45325f85d4))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
5
40
|
## [20.0.2](https://github.com/atinc/ngx-tethys/compare/20.0.1...20.0.2) (2025-12-17)
|
|
6
41
|
|
|
7
42
|
|
package/anchor/index.d.ts
CHANGED
|
@@ -76,6 +76,10 @@ declare class ThyAnchor implements IThyAnchorComponent, OnDestroy, AfterViewInit
|
|
|
76
76
|
* 设置导航方向
|
|
77
77
|
*/
|
|
78
78
|
readonly thyDirection: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
79
|
+
/**
|
|
80
|
+
* 是否禁用容器滚动
|
|
81
|
+
*/
|
|
82
|
+
readonly thyDisabledContainerScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
79
83
|
/**
|
|
80
84
|
* 点击项触发
|
|
81
85
|
*/
|
|
@@ -89,10 +93,11 @@ declare class ThyAnchor implements IThyAnchorComponent, OnDestroy, AfterViewInit
|
|
|
89
93
|
'max-height': string;
|
|
90
94
|
}>;
|
|
91
95
|
readonly container: Signal<HTMLElement | Window>;
|
|
92
|
-
|
|
96
|
+
links: ThyAnchorLink[];
|
|
93
97
|
private animating;
|
|
94
98
|
private destroy$;
|
|
95
99
|
private handleScrollTimeoutID;
|
|
100
|
+
private wrapper;
|
|
96
101
|
registerLink(link: ThyAnchorLink): void;
|
|
97
102
|
unregisterLink(link: ThyAnchorLink): void;
|
|
98
103
|
constructor();
|
|
@@ -102,11 +107,12 @@ declare class ThyAnchor implements IThyAnchorComponent, OnDestroy, AfterViewInit
|
|
|
102
107
|
private registerScrollEvent;
|
|
103
108
|
handleScroll(): void;
|
|
104
109
|
private clearActive;
|
|
105
|
-
|
|
110
|
+
handleActive(linkComponent: ThyAnchorLink): void;
|
|
111
|
+
private linkVisible;
|
|
106
112
|
private setVisible;
|
|
107
113
|
handleScrollTo(linkComponent: ThyAnchorLink): void;
|
|
108
114
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThyAnchor, never>;
|
|
109
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThyAnchor, "thy-anchor", ["thyAnchor"], { "thyAffix": { "alias": "thyAffix"; "required": false; "isSignal": true; }; "thyBounds": { "alias": "thyBounds"; "required": false; "isSignal": true; }; "thyOffsetTop": { "alias": "thyOffsetTop"; "required": false; "isSignal": true; }; "thyContainer": { "alias": "thyContainer"; "required": false; "isSignal": true; }; "thyDirection": { "alias": "thyDirection"; "required": false; "isSignal": true; }; }, { "thyClick": "thyClick"; "thyScroll": "thyScroll"; }, never, ["*"], true, never>;
|
|
115
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThyAnchor, "thy-anchor", ["thyAnchor"], { "thyAffix": { "alias": "thyAffix"; "required": false; "isSignal": true; }; "thyBounds": { "alias": "thyBounds"; "required": false; "isSignal": true; }; "thyOffsetTop": { "alias": "thyOffsetTop"; "required": false; "isSignal": true; }; "thyContainer": { "alias": "thyContainer"; "required": false; "isSignal": true; }; "thyDirection": { "alias": "thyDirection"; "required": false; "isSignal": true; }; "thyDisabledContainerScroll": { "alias": "thyDisabledContainerScroll"; "required": false; "isSignal": true; }; }, { "thyClick": "thyClick"; "thyScroll": "thyScroll"; }, never, ["*"], true, never>;
|
|
110
116
|
}
|
|
111
117
|
|
|
112
118
|
declare class ThyAnchorModule {
|
package/cascader/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnInit,
|
|
2
|
+
import { OnInit, TemplateRef, Signal, OnDestroy, AfterContentInit, ElementRef, PipeTransform } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/common';
|
|
4
4
|
import * as i2 from '@angular/forms';
|
|
5
5
|
import { ControlValueAccessor } from '@angular/forms';
|
|
@@ -13,10 +13,9 @@ import { SelectOptionBase, SelectControlSize } from 'ngx-tethys/shared';
|
|
|
13
13
|
import * as i8 from 'ngx-tethys/checkbox';
|
|
14
14
|
import * as i9 from 'ngx-tethys/flexible-text';
|
|
15
15
|
import { TabIndexDisabledControlValueAccessorMixin } from 'ngx-tethys/core';
|
|
16
|
-
import
|
|
17
|
-
import { Subject } from 'rxjs';
|
|
18
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
16
|
+
import { Observable, Subject } from 'rxjs';
|
|
19
17
|
import { Id } from 'ngx-tethys/types';
|
|
18
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
20
19
|
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
21
20
|
import * as i1 from 'ngx-tethys/util';
|
|
22
21
|
|
|
@@ -43,6 +42,30 @@ interface ThyCascaderSearchOption {
|
|
|
43
42
|
disabled?: boolean;
|
|
44
43
|
}
|
|
45
44
|
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
declare class ThyCascaderOptionComponent implements OnInit {
|
|
49
|
+
private cdr;
|
|
50
|
+
readonly option: _angular_core.InputSignal<ThyCascaderOption | undefined>;
|
|
51
|
+
readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
52
|
+
readonly isOnlySelectLeaf: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
53
|
+
readonly optionRender: _angular_core.InputSignal<TemplateRef<any> | undefined>;
|
|
54
|
+
readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
55
|
+
readonly halfSelected: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
56
|
+
readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
57
|
+
readonly disabled: Signal<boolean>;
|
|
58
|
+
readonly expand: Signal<boolean>;
|
|
59
|
+
readonly labelProperty: _angular_core.InputSignal<string>;
|
|
60
|
+
readonly toggleSelectChange: _angular_core.OutputEmitterRef<boolean>;
|
|
61
|
+
constructor();
|
|
62
|
+
ngOnInit(): void;
|
|
63
|
+
toggleOption(value: boolean): void;
|
|
64
|
+
markForCheck(): void;
|
|
65
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThyCascaderOptionComponent, never>;
|
|
66
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThyCascaderOptionComponent, "[thy-cascader-option]", never, { "option": { "alias": "option"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "isOnlySelectLeaf": { "alias": "isOnlySelectLeaf"; "required": false; "isSignal": true; }; "optionRender": { "alias": "optionRender"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "halfSelected": { "alias": "halfSelected"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "labelProperty": { "alias": "labelProperty"; "required": false; "isSignal": true; }; }, { "toggleSelectChange": "toggleSelectChange"; }, never, never, true, never>;
|
|
67
|
+
}
|
|
68
|
+
|
|
46
69
|
/**
|
|
47
70
|
* @internal
|
|
48
71
|
*/
|
|
@@ -56,7 +79,7 @@ declare class ThyCascaderService {
|
|
|
56
79
|
isMultiple?: boolean;
|
|
57
80
|
isOnlySelectLeaf?: boolean;
|
|
58
81
|
isLabelRenderTemplate?: boolean;
|
|
59
|
-
loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<
|
|
82
|
+
loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<ThyCascaderOption> | Observable<ThyCascaderOption>;
|
|
60
83
|
};
|
|
61
84
|
selectedOptions: ThyCascaderOption[];
|
|
62
85
|
activatedOptions: ThyCascaderOption[];
|
|
@@ -69,7 +92,7 @@ declare class ThyCascaderService {
|
|
|
69
92
|
value: any[];
|
|
70
93
|
private prevSelectedOptions;
|
|
71
94
|
valueChange$: Subject<void>;
|
|
72
|
-
cascaderValueChange():
|
|
95
|
+
cascaderValueChange(): Observable<{
|
|
73
96
|
value: any[];
|
|
74
97
|
isValueEqual: boolean;
|
|
75
98
|
isSelectionModelEmpty: boolean;
|
|
@@ -80,7 +103,7 @@ declare class ThyCascaderService {
|
|
|
80
103
|
isMultiple?: boolean;
|
|
81
104
|
isOnlySelectLeaf?: boolean;
|
|
82
105
|
isLabelRenderTemplate?: boolean;
|
|
83
|
-
loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<
|
|
106
|
+
loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<ThyCascaderOption> | Observable<ThyCascaderOption>;
|
|
84
107
|
}): void;
|
|
85
108
|
initSelectionModel(isMultiple?: boolean): void;
|
|
86
109
|
initColumns(columns: ThyCascaderOption[][]): void;
|
|
@@ -205,7 +228,7 @@ declare class ThyCascader extends TabIndexDisabledControlValueAccessorMixin impl
|
|
|
205
228
|
/**
|
|
206
229
|
* 用于动态加载选项
|
|
207
230
|
*/
|
|
208
|
-
readonly thyLoadData: _angular_core.InputSignal<((node: ThyCascaderOption, index?: number) => PromiseLike<
|
|
231
|
+
readonly thyLoadData: _angular_core.InputSignal<((node: ThyCascaderOption, index?: number) => PromiseLike<ThyCascaderOption> | Observable<ThyCascaderOption>) | undefined>;
|
|
209
232
|
/**
|
|
210
233
|
* 控制触发状态, 支持 `click` | `hover`
|
|
211
234
|
* @type ThyCascaderTriggerType | ThyCascaderTriggerType[]
|
|
@@ -325,6 +348,7 @@ declare class ThyCascader extends TabIndexDisabledControlValueAccessorMixin impl
|
|
|
325
348
|
*/
|
|
326
349
|
readonly thyExpandStatusChange: _angular_core.OutputEmitterRef<boolean>;
|
|
327
350
|
readonly cascaderOptions: Signal<readonly ElementRef<any>[]>;
|
|
351
|
+
readonly cascaderItems: Signal<readonly ThyCascaderOptionComponent[]>;
|
|
328
352
|
readonly cascaderOptionContainers: Signal<readonly ElementRef<any>[]>;
|
|
329
353
|
readonly cdkConnectedOverlay: Signal<CdkConnectedOverlay | undefined>;
|
|
330
354
|
readonly trigger: Signal<ElementRef<any>>;
|
|
@@ -411,28 +435,6 @@ declare class ThyCascader extends TabIndexDisabledControlValueAccessorMixin impl
|
|
|
411
435
|
static ngAcceptInputType_thyDisabled: i1.ThyBooleanInput;
|
|
412
436
|
}
|
|
413
437
|
|
|
414
|
-
/**
|
|
415
|
-
* @internal
|
|
416
|
-
*/
|
|
417
|
-
declare class ThyCascaderOptionComponent implements OnInit {
|
|
418
|
-
readonly option: _angular_core.InputSignal<ThyCascaderOption | undefined>;
|
|
419
|
-
readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
420
|
-
readonly isOnlySelectLeaf: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
421
|
-
readonly optionRender: _angular_core.InputSignal<TemplateRef<any> | undefined>;
|
|
422
|
-
readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
423
|
-
readonly halfSelected: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
424
|
-
readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
425
|
-
readonly disabled: Signal<boolean>;
|
|
426
|
-
readonly expand: Signal<boolean>;
|
|
427
|
-
readonly labelProperty: _angular_core.InputSignal<string>;
|
|
428
|
-
readonly toggleSelectChange: _angular_core.OutputEmitterRef<boolean>;
|
|
429
|
-
constructor();
|
|
430
|
-
ngOnInit(): void;
|
|
431
|
-
toggleOption(value: boolean): void;
|
|
432
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThyCascaderOptionComponent, never>;
|
|
433
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThyCascaderOptionComponent, "[thy-cascader-option]", never, { "option": { "alias": "option"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "isOnlySelectLeaf": { "alias": "isOnlySelectLeaf"; "required": false; "isSignal": true; }; "optionRender": { "alias": "optionRender"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "halfSelected": { "alias": "halfSelected"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "labelProperty": { "alias": "labelProperty"; "required": false; "isSignal": true; }; }, { "toggleSelectChange": "toggleSelectChange"; }, never, never, true, never>;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
438
|
/**
|
|
437
439
|
* @internal
|
|
438
440
|
*/
|
|
@@ -126,6 +126,21 @@ $cascader-menu-min-width: 122px;
|
|
|
126
126
|
&-disabled &-loading-icon {
|
|
127
127
|
color: variables.$gray-400;
|
|
128
128
|
}
|
|
129
|
+
&-loading {
|
|
130
|
+
position: absolute;
|
|
131
|
+
right: 10px;
|
|
132
|
+
color: variables.$gray-200;
|
|
133
|
+
animation: loading-rotate 1.3s linear infinite;
|
|
134
|
+
}
|
|
135
|
+
@keyframes loading-rotate {
|
|
136
|
+
0% {
|
|
137
|
+
transform: rotate(0deg);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
to {
|
|
141
|
+
transform: rotate(1turn);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
129
144
|
}
|
|
130
145
|
|
|
131
146
|
&-empty-container {
|
|
@@ -51,6 +51,10 @@ class ThyAnchor {
|
|
|
51
51
|
* 设置导航方向
|
|
52
52
|
*/
|
|
53
53
|
this.thyDirection = input('vertical', ...(ngDevMode ? [{ debugName: "thyDirection" }] : []));
|
|
54
|
+
/**
|
|
55
|
+
* 是否禁用容器滚动
|
|
56
|
+
*/
|
|
57
|
+
this.thyDisabledContainerScroll = input(false, ...(ngDevMode ? [{ debugName: "thyDisabledContainerScroll", transform: coerceBooleanProperty }] : [{ transform: coerceBooleanProperty }]));
|
|
54
58
|
/**
|
|
55
59
|
* 点击项触发
|
|
56
60
|
*/
|
|
@@ -74,6 +78,7 @@ class ThyAnchor {
|
|
|
74
78
|
this.animating = false;
|
|
75
79
|
this.destroy$ = new Subject();
|
|
76
80
|
this.handleScrollTimeoutID = -1;
|
|
81
|
+
this.wrapper = viewChild.required('wrapper');
|
|
77
82
|
effect(() => {
|
|
78
83
|
if (this.thyContainer()) {
|
|
79
84
|
this.registerScrollEvent();
|
|
@@ -101,6 +106,9 @@ class ThyAnchor {
|
|
|
101
106
|
if (!this.platform.isBrowser) {
|
|
102
107
|
return;
|
|
103
108
|
}
|
|
109
|
+
if (this.thyDisabledContainerScroll()) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
104
112
|
this.destroy$.next();
|
|
105
113
|
this.zone.runOutsideAngular(() => {
|
|
106
114
|
fromEvent(this.container(), 'scroll', { passive: true })
|
|
@@ -156,14 +164,39 @@ class ThyAnchor {
|
|
|
156
164
|
const linkNode = linkComponent.getLinkTitleElement();
|
|
157
165
|
const horizontalAnchor = this.thyDirection() === 'horizontal';
|
|
158
166
|
const ink = this.ink();
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
const linkOffset = {
|
|
168
|
+
top: linkNode.offsetTop,
|
|
169
|
+
left: linkNode.offsetLeft,
|
|
170
|
+
height: linkNode.clientHeight,
|
|
171
|
+
width: linkNode.clientWidth
|
|
172
|
+
};
|
|
173
|
+
ink.nativeElement.style.top = horizontalAnchor ? '' : `${linkOffset.top}px`;
|
|
174
|
+
ink.nativeElement.style.height = horizontalAnchor ? '' : `${linkOffset.height}px`;
|
|
175
|
+
ink.nativeElement.style.left = horizontalAnchor ? `${linkOffset.left}px` : '';
|
|
176
|
+
ink.nativeElement.style.width = horizontalAnchor ? `${linkOffset.width}px` : '';
|
|
163
177
|
this.visible = true;
|
|
164
178
|
this.setVisible();
|
|
179
|
+
this.linkVisible(linkOffset, horizontalAnchor);
|
|
165
180
|
this.thyScroll.emit(linkComponent);
|
|
166
181
|
}
|
|
182
|
+
linkVisible(linkOffset, horizontalAnchor) {
|
|
183
|
+
const wrapper = this.wrapper()?.nativeElement;
|
|
184
|
+
if (!wrapper) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const scrollTo = horizontalAnchor ? linkOffset.left : linkOffset.top;
|
|
188
|
+
const scrollPos = horizontalAnchor ? wrapper.scrollLeft : wrapper.scrollTop;
|
|
189
|
+
const wrapperSize = horizontalAnchor ? wrapper.offsetWidth : wrapper.offsetHeight;
|
|
190
|
+
const linkSize = horizontalAnchor ? linkOffset.width : linkOffset.height;
|
|
191
|
+
if (scrollTo < scrollPos || scrollTo + linkSize > scrollPos + wrapperSize) {
|
|
192
|
+
if (horizontalAnchor) {
|
|
193
|
+
wrapper.scrollLeft = scrollTo;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
wrapper.scrollTop = scrollTo;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
167
200
|
setVisible() {
|
|
168
201
|
const visible = this.visible;
|
|
169
202
|
const visibleClassname = 'visible';
|
|
@@ -178,28 +211,30 @@ class ThyAnchor {
|
|
|
178
211
|
}
|
|
179
212
|
}
|
|
180
213
|
handleScrollTo(linkComponent) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
214
|
+
if (!this.thyDisabledContainerScroll()) {
|
|
215
|
+
const container = this.container() instanceof HTMLElement ? this.container() : this.document;
|
|
216
|
+
const linkElement = container.querySelector(linkComponent.thyHref());
|
|
217
|
+
if (!linkElement) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
this.animating = true;
|
|
221
|
+
const containerScrollTop = this.scrollService.getScroll(this.container());
|
|
222
|
+
const elementOffsetTop = getOffset(linkElement, this.container()).top;
|
|
223
|
+
const targetScrollTop = containerScrollTop + elementOffsetTop - (this.thyOffsetTop() || 0);
|
|
224
|
+
this.scrollService.scrollTo(this.container(), targetScrollTop, undefined, () => {
|
|
225
|
+
this.animating = false;
|
|
226
|
+
});
|
|
185
227
|
}
|
|
186
|
-
this.animating = true;
|
|
187
|
-
const containerScrollTop = this.scrollService.getScroll(this.container());
|
|
188
|
-
const elementOffsetTop = getOffset(linkElement, this.container()).top;
|
|
189
|
-
const targetScrollTop = containerScrollTop + elementOffsetTop - (this.thyOffsetTop() || 0);
|
|
190
|
-
this.scrollService.scrollTo(this.container(), targetScrollTop, undefined, () => {
|
|
191
|
-
this.animating = false;
|
|
192
|
-
});
|
|
193
228
|
this.handleActive(linkComponent);
|
|
194
229
|
this.thyClick.emit(linkComponent);
|
|
195
230
|
}
|
|
196
231
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ThyAnchor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
197
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ThyAnchor, isStandalone: true, selector: "thy-anchor", inputs: { thyAffix: { classPropertyName: "thyAffix", publicName: "thyAffix", isSignal: true, isRequired: false, transformFunction: null }, thyBounds: { classPropertyName: "thyBounds", publicName: "thyBounds", isSignal: true, isRequired: false, transformFunction: null }, thyOffsetTop: { classPropertyName: "thyOffsetTop", publicName: "thyOffsetTop", isSignal: true, isRequired: false, transformFunction: null }, thyContainer: { classPropertyName: "thyContainer", publicName: "thyContainer", isSignal: true, isRequired: false, transformFunction: null }, thyDirection: { classPropertyName: "thyDirection", publicName: "thyDirection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thyClick: "thyClick", thyScroll: "thyScroll" }, providers: [
|
|
232
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ThyAnchor, isStandalone: true, selector: "thy-anchor", inputs: { thyAffix: { classPropertyName: "thyAffix", publicName: "thyAffix", isSignal: true, isRequired: false, transformFunction: null }, thyBounds: { classPropertyName: "thyBounds", publicName: "thyBounds", isSignal: true, isRequired: false, transformFunction: null }, thyOffsetTop: { classPropertyName: "thyOffsetTop", publicName: "thyOffsetTop", isSignal: true, isRequired: false, transformFunction: null }, thyContainer: { classPropertyName: "thyContainer", publicName: "thyContainer", isSignal: true, isRequired: false, transformFunction: null }, thyDirection: { classPropertyName: "thyDirection", publicName: "thyDirection", isSignal: true, isRequired: false, transformFunction: null }, thyDisabledContainerScroll: { classPropertyName: "thyDisabledContainerScroll", publicName: "thyDisabledContainerScroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thyClick: "thyClick", thyScroll: "thyScroll" }, providers: [
|
|
198
233
|
{
|
|
199
234
|
provide: THY_ANCHOR_COMPONENT,
|
|
200
235
|
useExisting: ThyAnchor
|
|
201
236
|
}
|
|
202
|
-
], viewQueries: [{ propertyName: "ink", first: true, predicate: ["ink"], descendants: true, isSignal: true }], exportAs: ["thyAnchor"], ngImport: i0, template: `
|
|
237
|
+
], viewQueries: [{ propertyName: "ink", first: true, predicate: ["ink"], descendants: true, isSignal: true }, { propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, isSignal: true }], exportAs: ["thyAnchor"], ngImport: i0, template: `
|
|
203
238
|
@if (thyAffix()) {
|
|
204
239
|
<thy-affix [thyOffsetTop]="thyOffsetTop()" [thyContainer]="container()">
|
|
205
240
|
<ng-template [ngTemplateOutlet]="content"></ng-template>
|
|
@@ -209,6 +244,7 @@ class ThyAnchor {
|
|
|
209
244
|
}
|
|
210
245
|
<ng-template #content>
|
|
211
246
|
<div
|
|
247
|
+
#wrapper
|
|
212
248
|
class="thy-anchor-wrapper"
|
|
213
249
|
[ngClass]="{ 'thy-anchor-wrapper-horizontal': thyDirection() === 'horizontal' }"
|
|
214
250
|
[ngStyle]="wrapperStyle()">
|
|
@@ -238,6 +274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
238
274
|
}
|
|
239
275
|
<ng-template #content>
|
|
240
276
|
<div
|
|
277
|
+
#wrapper
|
|
241
278
|
class="thy-anchor-wrapper"
|
|
242
279
|
[ngClass]="{ 'thy-anchor-wrapper-horizontal': thyDirection() === 'horizontal' }"
|
|
243
280
|
[ngStyle]="wrapperStyle()">
|
|
@@ -260,7 +297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
260
297
|
}
|
|
261
298
|
]
|
|
262
299
|
}]
|
|
263
|
-
}], ctorParameters: () => [], propDecorators: { ink: [{ type: i0.ViewChild, args: ['ink', { isSignal: true }] }], thyAffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAffix", required: false }] }], thyBounds: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyBounds", required: false }] }], thyOffsetTop: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyOffsetTop", required: false }] }], thyContainer: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyContainer", required: false }] }], thyDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDirection", required: false }] }], thyClick: [{ type: i0.Output, args: ["thyClick"] }], thyScroll: [{ type: i0.Output, args: ["thyScroll"] }] } });
|
|
300
|
+
}], ctorParameters: () => [], propDecorators: { ink: [{ type: i0.ViewChild, args: ['ink', { isSignal: true }] }], thyAffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAffix", required: false }] }], thyBounds: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyBounds", required: false }] }], thyOffsetTop: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyOffsetTop", required: false }] }], thyContainer: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyContainer", required: false }] }], thyDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDirection", required: false }] }], thyDisabledContainerScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDisabledContainerScroll", required: false }] }], thyClick: [{ type: i0.Output, args: ["thyClick"] }], thyScroll: [{ type: i0.Output, args: ["thyScroll"] }], wrapper: [{ type: i0.ViewChild, args: ['wrapper', { isSignal: true }] }] } });
|
|
264
301
|
|
|
265
302
|
/**
|
|
266
303
|
* 锚点链接组件,可供锚点跳转
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-anchor.mjs","sources":["../../../src/anchor/anchor.token.ts","../../../src/anchor/anchor.component.ts","../../../src/anchor/anchor-link.component.ts","../../../src/anchor/anchor.module.ts","../../../src/anchor/ngx-tethys-anchor.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface IThyAnchorLinkComponent {}\n\nexport interface IThyAnchorComponent {\n registerLink(link: IThyAnchorLinkComponent): void;\n unregisterLink(link: IThyAnchorLinkComponent): void;\n handleScrollTo(linkComponent: IThyAnchorLinkComponent): void;\n}\n\nexport const THY_ANCHOR_COMPONENT = new InjectionToken<IThyAnchorComponent>('THY_ANCHOR_COMPONENT');\n","import { Platform } from '@angular/cdk/platform';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewEncapsulation,\n numberAttribute,\n inject,\n input,\n viewChild,\n output,\n effect,\n computed,\n Signal,\n DOCUMENT\n} from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ThyAffix } from 'ngx-tethys/affix';\nimport { ThyScrollService } from 'ngx-tethys/core';\nimport { coerceBooleanProperty, getOffset } from 'ngx-tethys/util';\nimport { ThyAnchorLink } from './anchor-link.component';\nimport { IThyAnchorComponent, THY_ANCHOR_COMPONENT } from './anchor.token';\n\ninterface Section {\n linkComponent: ThyAnchorLink;\n top: number;\n}\n\nconst sharpMatcherRegx = /#([^#]+)$/;\n\n/**\n * 锚点组件\n * @name thy-anchor\n */\n@Component({\n selector: 'thy-anchor',\n exportAs: 'thyAnchor',\n preserveWhitespaces: false,\n template: `\n @if (thyAffix()) {\n <thy-affix [thyOffsetTop]=\"thyOffsetTop()\" [thyContainer]=\"container()\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </thy-affix>\n } @else {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n }\n <ng-template #content>\n <div\n class=\"thy-anchor-wrapper\"\n [ngClass]=\"{ 'thy-anchor-wrapper-horizontal': thyDirection() === 'horizontal' }\"\n [ngStyle]=\"wrapperStyle()\">\n <div class=\"thy-anchor\">\n <div class=\"thy-anchor-ink\">\n <div class=\"thy-anchor-ink-full\" #ink></div>\n </div>\n <ng-content></ng-content>\n </div>\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyAffix, NgTemplateOutlet, NgStyle, NgClass],\n providers: [\n {\n provide: THY_ANCHOR_COMPONENT,\n useExisting: ThyAnchor\n }\n ]\n})\nexport class ThyAnchor implements IThyAnchorComponent, OnDestroy, AfterViewInit {\n private document = inject(DOCUMENT);\n private cdr = inject(ChangeDetectorRef);\n private platform = inject(Platform);\n private zone = inject(NgZone);\n private renderer = inject(Renderer2);\n private scrollService = inject(ThyScrollService);\n\n readonly ink = viewChild.required<ElementRef>('ink');\n\n /**\n * 固定模式\n */\n readonly thyAffix = input(true, { transform: coerceBooleanProperty });\n\n /**\n * 锚点区域边界,单位:px\n */\n readonly thyBounds = input(5, { transform: numberAttribute });\n\n /**\n * 缓冲的偏移量阈值\n */\n readonly thyOffsetTop = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 指定滚动的容器\n */\n readonly thyContainer = input<string | HTMLElement>();\n\n /**\n * 设置导航方向\n */\n readonly thyDirection = input<'vertical' | 'horizontal'>('vertical');\n\n /**\n * 点击项触发\n */\n readonly thyClick = output<ThyAnchorLink>();\n\n /**\n * 滚动到某锚点时触发\n */\n readonly thyScroll = output<ThyAnchorLink>();\n\n visible = false;\n\n readonly wrapperStyle = computed(() => {\n return {\n 'max-height': this.thyOffsetTop() ? `calc(100vh - ${this.thyOffsetTop()}px)` : '100vh'\n };\n });\n\n readonly container: Signal<HTMLElement | Window> = computed(() => {\n return (\n (typeof this.thyContainer() === 'string'\n ? (this.document.querySelector(this.thyContainer() as string) as HTMLElement)\n : (this.thyContainer() as HTMLElement)) || window\n );\n });\n\n private links: ThyAnchorLink[] = [];\n\n private animating = false;\n\n private destroy$ = new Subject<void>();\n\n private handleScrollTimeoutID: any = -1;\n\n registerLink(link: ThyAnchorLink): void {\n this.links.push(link);\n }\n\n unregisterLink(link: ThyAnchorLink): void {\n this.links.splice(this.links.indexOf(link), 1);\n }\n\n constructor() {\n effect(() => {\n if (this.thyContainer()) {\n this.registerScrollEvent();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.warningPrompt();\n this.registerScrollEvent();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.handleScrollTimeoutID);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private warningPrompt() {\n if (this.thyDirection() === 'horizontal') {\n const hasChildren = this.links.some(link =>\n Array.from(link?.elementRef?.nativeElement?.childNodes as HTMLElement[])?.some(\n (item: HTMLElement) => item?.nodeName === 'THY-ANCHOR-LINK'\n )\n );\n if (hasChildren) {\n console.warn(\"Anchor link nesting is not supported when 'Anchor' direction is horizontal.\");\n }\n }\n }\n\n private registerScrollEvent(): void {\n if (!this.platform.isBrowser) {\n return;\n }\n this.destroy$.next();\n this.zone.runOutsideAngular(() => {\n fromEvent(this.container(), 'scroll', { passive: true })\n .pipe(throttleTime(50), takeUntil(this.destroy$))\n .subscribe(() => this.handleScroll());\n });\n // Browser would maintain the scrolling position when refreshing.\n // So we have to delay calculation in avoid of getting a incorrect result.\n this.handleScrollTimeoutID = setTimeout(() => this.handleScroll());\n }\n\n handleScroll(): void {\n if (typeof document === 'undefined' || this.animating) {\n return;\n }\n const container: HTMLElement =\n this.container() instanceof HTMLElement ? (this.container() as HTMLElement) : (this.document as unknown as HTMLElement);\n\n const sections: Section[] = [];\n const scope = (this.thyOffsetTop() || 0) + this.thyBounds();\n this.links.forEach(linkComponent => {\n const sharpLinkMatch = sharpMatcherRegx.exec(linkComponent.thyHref().toString());\n if (!sharpLinkMatch) {\n return;\n }\n const target = container.querySelector(`#${sharpLinkMatch[1]}`) as HTMLElement;\n if (target) {\n const top = getOffset(target, this.container())!.top;\n if (top < scope) {\n sections.push({\n top,\n linkComponent\n });\n }\n }\n });\n\n this.visible = !!sections.length;\n if (!this.visible) {\n this.clearActive();\n this.cdr.detectChanges();\n } else {\n const maxSection = sections.reduce((prev, curr) => (curr.top > prev.top ? curr : prev));\n this.handleActive(maxSection.linkComponent);\n }\n this.setVisible();\n }\n\n private clearActive(): void {\n this.links.forEach(i => {\n i.unsetActive();\n });\n }\n\n private handleActive(linkComponent: ThyAnchorLink): void {\n this.clearActive();\n linkComponent.setActive();\n const linkNode = linkComponent.getLinkTitleElement();\n const horizontalAnchor = this.thyDirection() === 'horizontal';\n\n const ink = this.ink();\n ink.nativeElement.style.top = horizontalAnchor ? '' : `${linkNode.offsetTop}px`;\n ink.nativeElement.style.height = horizontalAnchor ? '' : `${linkNode.clientHeight}px`;\n ink.nativeElement.style.left = horizontalAnchor ? `${linkNode.offsetLeft}px` : '';\n ink.nativeElement.style.width = horizontalAnchor ? `${linkNode.clientWidth}px` : '';\n this.visible = true;\n this.setVisible();\n this.thyScroll.emit(linkComponent);\n }\n\n private setVisible(): void {\n const visible = this.visible;\n const visibleClassname = 'visible';\n const ink = this.ink();\n if (ink) {\n if (visible) {\n this.renderer.addClass(ink.nativeElement, visibleClassname);\n } else {\n this.renderer.removeClass(ink.nativeElement, visibleClassname);\n }\n }\n }\n\n handleScrollTo(linkComponent: ThyAnchorLink): void {\n const container: HTMLElement =\n this.container() instanceof HTMLElement ? (this.container() as HTMLElement) : (this.document as unknown as HTMLElement);\n const linkElement: HTMLElement | null = container.querySelector(linkComponent.thyHref());\n if (!linkElement) {\n return;\n }\n\n this.animating = true;\n const containerScrollTop = this.scrollService.getScroll(this.container());\n const elementOffsetTop = getOffset(linkElement, this.container())!.top;\n const targetScrollTop = containerScrollTop + elementOffsetTop - (this.thyOffsetTop() || 0);\n this.scrollService.scrollTo(this.container(), targetScrollTop, undefined, () => {\n this.animating = false;\n });\n this.handleActive(linkComponent);\n this.thyClick.emit(linkComponent);\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewEncapsulation,\n inject,\n input,\n contentChild,\n viewChild,\n Signal,\n computed\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { IThyAnchorLinkComponent, THY_ANCHOR_COMPONENT } from './anchor.token';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * 锚点链接组件,可供锚点跳转\n * @name thy-anchor-link,thyAnchorLink\n */\n@Component({\n selector: 'thy-link,thy-anchor-link',\n exportAs: 'thyLink,thyAnchorLink',\n preserveWhitespaces: false,\n template: `\n <a #linkTitle (click)=\"goToClick($event)\" href=\"{{ thyHref() }}\" class=\"thy-anchor-link-title\" title=\"{{ title() }}\">\n @if (title()) {\n <span>{{ title() }}</span>\n } @else {\n <ng-template [ngTemplateOutlet]=\"titleTemplate() || thyTemplate()\"></ng-template>\n }\n </a>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet]\n})\nexport class ThyAnchorLink implements IThyAnchorLinkComponent, OnInit, OnDestroy {\n elementRef = inject(ElementRef);\n private anchorComponent = inject(THY_ANCHOR_COMPONENT, { optional: true })!;\n private platform = inject(Platform);\n\n readonly title: Signal<string | null> = computed(() => {\n return this.thyTitle() instanceof TemplateRef ? null : (this.thyTitle() as string);\n });\n\n readonly titleTemplate: Signal<TemplateRef<any> | null> = computed(() => {\n return this.thyTitle() instanceof TemplateRef ? (this.thyTitle() as TemplateRef<any>) : null;\n });\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 锚点链接\n */\n readonly thyHref = input('#');\n\n /**\n * 文字内容\n */\n readonly thyTitle = input<string | TemplateRef<void>>('');\n\n readonly thyTemplate = contentChild.required<TemplateRef<void>>('thyTemplate');\n\n readonly linkTitle = viewChild.required<ElementRef<HTMLAnchorElement>>('linkTitle');\n\n constructor() {\n const elementRef = this.elementRef;\n\n this.hostRenderer.addClass('thy-anchor-link');\n if (elementRef.nativeElement.tagName.toLowerCase() === 'thy-link') {\n console.warn(`'thy-link' and 'thyLink' are deprecated, please use 'thy-anchor-link' and 'thyAnchorLink' instead.`);\n }\n }\n\n ngOnInit(): void {\n this.anchorComponent.registerLink(this);\n }\n\n getLinkTitleElement(): HTMLAnchorElement {\n return this.linkTitle().nativeElement;\n }\n\n setActive(): void {\n this.hostRenderer.addClass('thy-anchor-link-active');\n }\n\n unsetActive(): void {\n this.hostRenderer.removeClass('thy-anchor-link-active');\n }\n\n goToClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n if (this.platform.isBrowser) {\n this.anchorComponent.handleScrollTo(this);\n }\n }\n\n ngOnDestroy(): void {\n this.anchorComponent.unregisterLink(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { ThyAnchor } from './anchor.component';\nimport { ThyAnchorLink } from './anchor-link.component';\nimport { ThyAffixModule } from 'ngx-tethys/affix';\n\n@NgModule({\n exports: [ThyAnchor, ThyAnchorLink],\n imports: [CommonModule, PlatformModule, ThyAffixModule, ThyAnchor, ThyAnchorLink]\n})\nexport class ThyAnchorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AAUO,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAsB,sBAAsB,CAAC;;AC0BnG,MAAM,gBAAgB,GAAG,WAAW;AAEpC;;;AAGG;MAqCU,SAAS,CAAA;AAqElB,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,cAAc,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD;AAEA,IAAA,WAAA,GAAA;AA5EQ,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEvC,QAAA,IAAA,CAAA,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAa,KAAK,CAAC;AAEpD;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,4CAAI,SAAS,EAAE,qBAAqB,EAAA,CAAA,GAAA,CAAlC,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAC;AAErE;;AAEG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,CAAC,6CAAI,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GAAC;AAE7D;;AAEG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAkB,SAAS,gDAAI,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GAAC;AAEzF;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAwB;AAErD;;AAEG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA4B,UAAU,wDAAC;AAEpE;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAiB;AAE3C;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,MAAM,EAAiB;QAE5C,IAAA,CAAA,OAAO,GAAG,KAAK;AAEN,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YAClC,OAAO;AACH,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG;aAClF;AACL,QAAA,CAAC,wDAAC;AAEO,QAAA,IAAA,CAAA,SAAS,GAAiC,QAAQ,CAAC,MAAK;YAC7D,QACI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK;kBACzB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAY;kBACzD,IAAI,CAAC,YAAY,EAAkB,KAAK,MAAM;AAE7D,QAAA,CAAC,qDAAC;QAEM,IAAA,CAAA,KAAK,GAAoB,EAAE;QAE3B,IAAA,CAAA,SAAS,GAAG,KAAK;AAEjB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QAE9B,IAAA,CAAA,qBAAqB,GAAQ,CAAC,CAAC;QAWnC,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,IAAI,CAAC,mBAAmB,EAAE;YAC9B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,mBAAmB,EAAE;IAC9B;IAEA,WAAW,GAAA;AACP,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC5B;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IACpC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,UAA2B,CAAC,EAAE,IAAI,CAC1E,CAAC,IAAiB,KAAK,IAAI,EAAE,QAAQ,KAAK,iBAAiB,CAC9D,CACJ;YACD,IAAI,WAAW,EAAE;AACb,gBAAA,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC;YAC/F;QACJ;IACJ;IAEQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YAC1B;QACJ;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC7B,YAAA,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AAClD,iBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC/C,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;;;AAGF,QAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IACtE;IAEA,YAAY,GAAA;QACR,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;YACnD;QACJ;QACA,MAAM,SAAS,GACX,IAAI,CAAC,SAAS,EAAE,YAAY,WAAW,GAAI,IAAI,CAAC,SAAS,EAAkB,GAAI,IAAI,CAAC,QAAmC;QAE3H,MAAM,QAAQ,GAAc,EAAE;AAC9B,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AAC3D,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,IAAG;AAC/B,YAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YAChF,IAAI,CAAC,cAAc,EAAE;gBACjB;YACJ;AACA,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,cAAc,CAAC,CAAC,CAAC,CAAA,CAAE,CAAgB;YAC9E,IAAI,MAAM,EAAE;AACR,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAE,CAAC,GAAG;AACpD,gBAAA,IAAI,GAAG,GAAG,KAAK,EAAE;oBACb,QAAQ,CAAC,IAAI,CAAC;wBACV,GAAG;wBACH;AACH,qBAAA,CAAC;gBACN;YACJ;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC5B;aAAO;AACH,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACvF,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC;QAC/C;QACA,IAAI,CAAC,UAAU,EAAE;IACrB;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;YACnB,CAAC,CAAC,WAAW,EAAE;AACnB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,aAA4B,EAAA;QAC7C,IAAI,CAAC,WAAW,EAAE;QAClB,aAAa,CAAC,SAAS,EAAE;AACzB,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,EAAE;QACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY;AAE7D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,gBAAgB,GAAG,EAAE,GAAG,CAAA,EAAG,QAAQ,CAAC,SAAS,IAAI;QAC/E,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,GAAG,EAAE,GAAG,CAAA,EAAG,QAAQ,CAAC,YAAY,IAAI;QACrF,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,GAAG,CAAA,EAAG,QAAQ,CAAC,UAAU,CAAA,EAAA,CAAI,GAAG,EAAE;QACjF,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAA,EAAG,QAAQ,CAAC,WAAW,CAAA,EAAA,CAAI,GAAG,EAAE;AACnF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACtC;IAEQ,UAAU,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAC5B,MAAM,gBAAgB,GAAG,SAAS;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,GAAG,EAAE;YACL,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC;YAC/D;iBAAO;gBACH,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC;YAClE;QACJ;IACJ;AAEA,IAAA,cAAc,CAAC,aAA4B,EAAA;QACvC,MAAM,SAAS,GACX,IAAI,CAAC,SAAS,EAAE,YAAY,WAAW,GAAI,IAAI,CAAC,SAAS,EAAkB,GAAI,IAAI,CAAC,QAAmC;QAC3H,MAAM,WAAW,GAAuB,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACxF,IAAI,CAAC,WAAW,EAAE;YACd;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACzE,QAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,CAAE,CAAC,GAAG;AACtE,QAAA,MAAM,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,MAAK;AAC3E,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;IACrC;+GArNS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAPP;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,WAAW,EAAE;AAChB;SACJ,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9BS;;;;;;;;;;;;;;;;;;;;;AAqBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,2EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAQ7C,SAAS,EAAA,UAAA,EAAA,CAAA;kBApCrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;AAqBT,IAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC;AACvD,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;2FASiD,KAAK,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACjEvD;;;AAGG;MAmBU,aAAa,CAAA;AA6BtB,IAAA,WAAA,GAAA;AA5BA,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACvB,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;AACnE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE1B,QAAA,IAAA,CAAA,KAAK,GAA0B,QAAQ,CAAC,MAAK;AAClD,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,WAAW,GAAG,IAAI,GAAI,IAAI,CAAC,QAAQ,EAAa;AACtF,QAAA,CAAC,iDAAC;AAEO,QAAA,IAAA,CAAA,aAAa,GAAoC,QAAQ,CAAC,MAAK;AACpE,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,WAAW,GAAI,IAAI,CAAC,QAAQ,EAAuB,GAAG,IAAI;AAChG,QAAA,CAAC,yDAAC;QAEM,IAAA,CAAA,YAAY,GAAG,eAAe,EAAE;AAExC;;AAEG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,GAAG,mDAAC;AAE7B;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA6B,EAAE,oDAAC;AAEhD,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAoB,aAAa,CAAC;AAErE,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAgC,WAAW,CAAC;AAG/E,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAElC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC7C,IAAI,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AAC/D,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,kGAAA,CAAoG,CAAC;QACtH;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3C;IAEA,mBAAmB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa;IACzC;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACxD;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,wBAAwB,CAAC;IAC3D;AAEA,IAAA,SAAS,CAAC,CAAQ,EAAA;QACd,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC;QAC7C;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC;IAC7C;+GAhES,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdZ;;;;;;;;;AAST,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAEjB,aAAa,EAAA,UAAA,EAAA,CAAA;kBAlBzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,IAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,gBAAgB;AAC7B,iBAAA;AA0BmE,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,aAAa,mEAEN,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MC3DzE,eAAe,CAAA;+GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,OAAA,EAAA,CAFd,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,CAAA,EAAA,OAAA,EAAA,CADtE,SAAS,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;AAGzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAFd,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,CAAA,EAAA,CAAA,CAAA;;4FAExD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;oBACnC,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa;AACnF,iBAAA;;;ACVD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-anchor.mjs","sources":["../../../src/anchor/anchor.token.ts","../../../src/anchor/anchor.component.ts","../../../src/anchor/anchor-link.component.ts","../../../src/anchor/anchor.module.ts","../../../src/anchor/ngx-tethys-anchor.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface IThyAnchorLinkComponent {}\n\nexport interface IThyAnchorComponent {\n registerLink(link: IThyAnchorLinkComponent): void;\n unregisterLink(link: IThyAnchorLinkComponent): void;\n handleScrollTo(linkComponent: IThyAnchorLinkComponent): void;\n}\n\nexport const THY_ANCHOR_COMPONENT = new InjectionToken<IThyAnchorComponent>('THY_ANCHOR_COMPONENT');\n","import { Platform } from '@angular/cdk/platform';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewEncapsulation,\n numberAttribute,\n inject,\n input,\n viewChild,\n output,\n effect,\n computed,\n Signal,\n DOCUMENT\n} from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ThyAffix } from 'ngx-tethys/affix';\nimport { ThyScrollService } from 'ngx-tethys/core';\nimport { coerceBooleanProperty, getOffset } from 'ngx-tethys/util';\nimport { ThyAnchorLink } from './anchor-link.component';\nimport { IThyAnchorComponent, THY_ANCHOR_COMPONENT } from './anchor.token';\n\ninterface Section {\n linkComponent: ThyAnchorLink;\n top: number;\n}\n\nconst sharpMatcherRegx = /#([^#]+)$/;\n\n/**\n * 锚点组件\n * @name thy-anchor\n */\n@Component({\n selector: 'thy-anchor',\n exportAs: 'thyAnchor',\n preserveWhitespaces: false,\n template: `\n @if (thyAffix()) {\n <thy-affix [thyOffsetTop]=\"thyOffsetTop()\" [thyContainer]=\"container()\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </thy-affix>\n } @else {\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n }\n <ng-template #content>\n <div\n #wrapper\n class=\"thy-anchor-wrapper\"\n [ngClass]=\"{ 'thy-anchor-wrapper-horizontal': thyDirection() === 'horizontal' }\"\n [ngStyle]=\"wrapperStyle()\">\n <div class=\"thy-anchor\">\n <div class=\"thy-anchor-ink\">\n <div class=\"thy-anchor-ink-full\" #ink></div>\n </div>\n <ng-content></ng-content>\n </div>\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyAffix, NgTemplateOutlet, NgStyle, NgClass],\n providers: [\n {\n provide: THY_ANCHOR_COMPONENT,\n useExisting: ThyAnchor\n }\n ]\n})\nexport class ThyAnchor implements IThyAnchorComponent, OnDestroy, AfterViewInit {\n private document = inject(DOCUMENT);\n private cdr = inject(ChangeDetectorRef);\n private platform = inject(Platform);\n private zone = inject(NgZone);\n private renderer = inject(Renderer2);\n private scrollService = inject(ThyScrollService);\n\n readonly ink = viewChild.required<ElementRef>('ink');\n\n /**\n * 固定模式\n */\n readonly thyAffix = input(true, { transform: coerceBooleanProperty });\n\n /**\n * 锚点区域边界,单位:px\n */\n readonly thyBounds = input(5, { transform: numberAttribute });\n\n /**\n * 缓冲的偏移量阈值\n */\n readonly thyOffsetTop = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 指定滚动的容器\n */\n readonly thyContainer = input<string | HTMLElement>();\n\n /**\n * 设置导航方向\n */\n readonly thyDirection = input<'vertical' | 'horizontal'>('vertical');\n\n /**\n * 是否禁用容器滚动\n */\n readonly thyDisabledContainerScroll = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 点击项触发\n */\n readonly thyClick = output<ThyAnchorLink>();\n\n /**\n * 滚动到某锚点时触发\n */\n readonly thyScroll = output<ThyAnchorLink>();\n\n visible = false;\n\n readonly wrapperStyle = computed(() => {\n return {\n 'max-height': this.thyOffsetTop() ? `calc(100vh - ${this.thyOffsetTop()}px)` : '100vh'\n };\n });\n\n readonly container: Signal<HTMLElement | Window> = computed(() => {\n return (\n (typeof this.thyContainer() === 'string'\n ? (this.document.querySelector(this.thyContainer() as string) as HTMLElement)\n : (this.thyContainer() as HTMLElement)) || window\n );\n });\n\n public links: ThyAnchorLink[] = [];\n\n private animating = false;\n\n private destroy$ = new Subject<void>();\n\n private handleScrollTimeoutID: any = -1;\n\n private wrapper = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n\n registerLink(link: ThyAnchorLink): void {\n this.links.push(link);\n }\n\n unregisterLink(link: ThyAnchorLink): void {\n this.links.splice(this.links.indexOf(link), 1);\n }\n\n constructor() {\n effect(() => {\n if (this.thyContainer()) {\n this.registerScrollEvent();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.warningPrompt();\n this.registerScrollEvent();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.handleScrollTimeoutID);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private warningPrompt() {\n if (this.thyDirection() === 'horizontal') {\n const hasChildren = this.links.some(link =>\n Array.from(link?.elementRef?.nativeElement?.childNodes as HTMLElement[])?.some(\n (item: HTMLElement) => item?.nodeName === 'THY-ANCHOR-LINK'\n )\n );\n if (hasChildren) {\n console.warn(\"Anchor link nesting is not supported when 'Anchor' direction is horizontal.\");\n }\n }\n }\n\n private registerScrollEvent(): void {\n if (!this.platform.isBrowser) {\n return;\n }\n if (this.thyDisabledContainerScroll()) {\n return;\n }\n this.destroy$.next();\n this.zone.runOutsideAngular(() => {\n fromEvent(this.container(), 'scroll', { passive: true })\n .pipe(throttleTime(50), takeUntil(this.destroy$))\n .subscribe(() => this.handleScroll());\n });\n // Browser would maintain the scrolling position when refreshing.\n // So we have to delay calculation in avoid of getting a incorrect result.\n this.handleScrollTimeoutID = setTimeout(() => this.handleScroll());\n }\n\n handleScroll(): void {\n if (typeof document === 'undefined' || this.animating) {\n return;\n }\n const container: HTMLElement =\n this.container() instanceof HTMLElement ? (this.container() as HTMLElement) : (this.document as unknown as HTMLElement);\n\n const sections: Section[] = [];\n const scope = (this.thyOffsetTop() || 0) + this.thyBounds();\n this.links.forEach(linkComponent => {\n const sharpLinkMatch = sharpMatcherRegx.exec(linkComponent.thyHref().toString());\n if (!sharpLinkMatch) {\n return;\n }\n const target = container.querySelector(`#${sharpLinkMatch[1]}`) as HTMLElement;\n if (target) {\n const top = getOffset(target, this.container())!.top;\n if (top < scope) {\n sections.push({\n top,\n linkComponent\n });\n }\n }\n });\n\n this.visible = !!sections.length;\n if (!this.visible) {\n this.clearActive();\n this.cdr.detectChanges();\n } else {\n const maxSection = sections.reduce((prev, curr) => (curr.top > prev.top ? curr : prev));\n this.handleActive(maxSection.linkComponent);\n }\n this.setVisible();\n }\n\n private clearActive(): void {\n this.links.forEach(i => {\n i.unsetActive();\n });\n }\n\n public handleActive(linkComponent: ThyAnchorLink): void {\n this.clearActive();\n linkComponent.setActive();\n const linkNode = linkComponent.getLinkTitleElement();\n const horizontalAnchor = this.thyDirection() === 'horizontal';\n\n const ink = this.ink();\n const linkOffset = {\n top: linkNode.offsetTop,\n left: linkNode.offsetLeft,\n height: linkNode.clientHeight,\n width: linkNode.clientWidth\n };\n ink.nativeElement.style.top = horizontalAnchor ? '' : `${linkOffset.top}px`;\n ink.nativeElement.style.height = horizontalAnchor ? '' : `${linkOffset.height}px`;\n ink.nativeElement.style.left = horizontalAnchor ? `${linkOffset.left}px` : '';\n ink.nativeElement.style.width = horizontalAnchor ? `${linkOffset.width}px` : '';\n this.visible = true;\n this.setVisible();\n this.linkVisible(linkOffset, horizontalAnchor);\n this.thyScroll.emit(linkComponent);\n }\n\n private linkVisible(linkOffset: { top: number; left: number; height: number; width: number }, horizontalAnchor: boolean): void {\n const wrapper = this.wrapper()?.nativeElement;\n if (!wrapper) {\n return;\n }\n const scrollTo = horizontalAnchor ? linkOffset.left : linkOffset.top;\n const scrollPos = horizontalAnchor ? wrapper.scrollLeft : wrapper.scrollTop;\n const wrapperSize = horizontalAnchor ? wrapper.offsetWidth : wrapper.offsetHeight;\n const linkSize = horizontalAnchor ? linkOffset.width : linkOffset.height;\n if (scrollTo < scrollPos || scrollTo + linkSize > scrollPos + wrapperSize) {\n if (horizontalAnchor) {\n wrapper.scrollLeft = scrollTo;\n } else {\n wrapper.scrollTop = scrollTo;\n }\n }\n }\n\n private setVisible(): void {\n const visible = this.visible;\n const visibleClassname = 'visible';\n const ink = this.ink();\n if (ink) {\n if (visible) {\n this.renderer.addClass(ink.nativeElement, visibleClassname);\n } else {\n this.renderer.removeClass(ink.nativeElement, visibleClassname);\n }\n }\n }\n\n handleScrollTo(linkComponent: ThyAnchorLink): void {\n if (!this.thyDisabledContainerScroll()) {\n const container: HTMLElement =\n this.container() instanceof HTMLElement ? (this.container() as HTMLElement) : (this.document as unknown as HTMLElement);\n const linkElement: HTMLElement | null = container.querySelector(linkComponent.thyHref());\n if (!linkElement) {\n return;\n }\n\n this.animating = true;\n const containerScrollTop = this.scrollService.getScroll(this.container());\n const elementOffsetTop = getOffset(linkElement, this.container())!.top;\n const targetScrollTop = containerScrollTop + elementOffsetTop - (this.thyOffsetTop() || 0);\n this.scrollService.scrollTo(this.container(), targetScrollTop, undefined, () => {\n this.animating = false;\n });\n }\n this.handleActive(linkComponent);\n this.thyClick.emit(linkComponent);\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewEncapsulation,\n inject,\n input,\n contentChild,\n viewChild,\n Signal,\n computed\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { IThyAnchorLinkComponent, THY_ANCHOR_COMPONENT } from './anchor.token';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * 锚点链接组件,可供锚点跳转\n * @name thy-anchor-link,thyAnchorLink\n */\n@Component({\n selector: 'thy-link,thy-anchor-link',\n exportAs: 'thyLink,thyAnchorLink',\n preserveWhitespaces: false,\n template: `\n <a #linkTitle (click)=\"goToClick($event)\" href=\"{{ thyHref() }}\" class=\"thy-anchor-link-title\" title=\"{{ title() }}\">\n @if (title()) {\n <span>{{ title() }}</span>\n } @else {\n <ng-template [ngTemplateOutlet]=\"titleTemplate() || thyTemplate()\"></ng-template>\n }\n </a>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet]\n})\nexport class ThyAnchorLink implements IThyAnchorLinkComponent, OnInit, OnDestroy {\n elementRef = inject(ElementRef);\n private anchorComponent = inject(THY_ANCHOR_COMPONENT, { optional: true })!;\n private platform = inject(Platform);\n\n readonly title: Signal<string | null> = computed(() => {\n return this.thyTitle() instanceof TemplateRef ? null : (this.thyTitle() as string);\n });\n\n readonly titleTemplate: Signal<TemplateRef<any> | null> = computed(() => {\n return this.thyTitle() instanceof TemplateRef ? (this.thyTitle() as TemplateRef<any>) : null;\n });\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 锚点链接\n */\n readonly thyHref = input('#');\n\n /**\n * 文字内容\n */\n readonly thyTitle = input<string | TemplateRef<void>>('');\n\n readonly thyTemplate = contentChild.required<TemplateRef<void>>('thyTemplate');\n\n readonly linkTitle = viewChild.required<ElementRef<HTMLAnchorElement>>('linkTitle');\n\n constructor() {\n const elementRef = this.elementRef;\n\n this.hostRenderer.addClass('thy-anchor-link');\n if (elementRef.nativeElement.tagName.toLowerCase() === 'thy-link') {\n console.warn(`'thy-link' and 'thyLink' are deprecated, please use 'thy-anchor-link' and 'thyAnchorLink' instead.`);\n }\n }\n\n ngOnInit(): void {\n this.anchorComponent.registerLink(this);\n }\n\n getLinkTitleElement(): HTMLAnchorElement {\n return this.linkTitle().nativeElement;\n }\n\n setActive(): void {\n this.hostRenderer.addClass('thy-anchor-link-active');\n }\n\n unsetActive(): void {\n this.hostRenderer.removeClass('thy-anchor-link-active');\n }\n\n goToClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n if (this.platform.isBrowser) {\n this.anchorComponent.handleScrollTo(this);\n }\n }\n\n ngOnDestroy(): void {\n this.anchorComponent.unregisterLink(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { ThyAnchor } from './anchor.component';\nimport { ThyAnchorLink } from './anchor-link.component';\nimport { ThyAffixModule } from 'ngx-tethys/affix';\n\n@NgModule({\n exports: [ThyAnchor, ThyAnchorLink],\n imports: [CommonModule, PlatformModule, ThyAffixModule, ThyAnchor, ThyAnchorLink]\n})\nexport class ThyAnchorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|