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.
Files changed (37) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/anchor/index.d.ts +9 -3
  3. package/cascader/index.d.ts +32 -30
  4. package/cascader/styles/cascader.scss +15 -0
  5. package/fesm2022/ngx-tethys-anchor.mjs +55 -18
  6. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  7. package/fesm2022/ngx-tethys-cascader.mjs +29 -10
  8. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  9. package/fesm2022/ngx-tethys-input.mjs +1 -1
  10. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  11. package/fesm2022/ngx-tethys-native-table.mjs +1289 -0
  12. package/fesm2022/ngx-tethys-native-table.mjs.map +1 -0
  13. package/fesm2022/ngx-tethys-pagination.mjs +1 -1
  14. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  15. package/fesm2022/ngx-tethys-property.mjs +3 -1
  16. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  17. package/fesm2022/ngx-tethys-select.mjs +41 -14
  18. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  19. package/fesm2022/ngx-tethys-shared.mjs +4 -3
  20. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  21. package/fesm2022/ngx-tethys-tooltip.mjs +20 -16
  22. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  23. package/fesm2022/ngx-tethys-util.mjs +22 -1
  24. package/fesm2022/ngx-tethys-util.mjs.map +1 -1
  25. package/fesm2022/ngx-tethys.mjs +1 -1
  26. package/fesm2022/ngx-tethys.mjs.map +1 -1
  27. package/input/index.d.ts +1 -1
  28. package/native-table/index.d.ts +339 -0
  29. package/native-table/styles/native-table.scss +203 -0
  30. package/package.json +5 -1
  31. package/schematics/version.d.ts +1 -1
  32. package/schematics/version.js +1 -1
  33. package/select/index.d.ts +8 -2
  34. package/shared/index.d.ts +2 -1
  35. package/shared/option/styles/select-dropdown.scss +5 -2
  36. package/styles/index.scss +1 -0
  37. 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
- private links;
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
- private handleActive;
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 {
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, OnDestroy, AfterContentInit, ElementRef, Signal, TemplateRef, PipeTransform } from '@angular/core';
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 * as rxjs from 'rxjs';
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<any>;
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(): rxjs.Observable<{
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<any>;
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<any>) | undefined>;
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
- ink.nativeElement.style.top = horizontalAnchor ? '' : `${linkNode.offsetTop}px`;
160
- ink.nativeElement.style.height = horizontalAnchor ? '' : `${linkNode.clientHeight}px`;
161
- ink.nativeElement.style.left = horizontalAnchor ? `${linkNode.offsetLeft}px` : '';
162
- ink.nativeElement.style.width = horizontalAnchor ? `${linkNode.clientWidth}px` : '';
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
- const container = this.container() instanceof HTMLElement ? this.container() : this.document;
182
- const linkElement = container.querySelector(linkComponent.thyHref());
183
- if (!linkElement) {
184
- return;
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":"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"}
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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"}