@ngstarter-ui/components 21.0.37 → 21.0.38
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.
|
@@ -6827,19 +6827,19 @@
|
|
|
6827
6827
|
"Basic with extra columns (sidebar and aside)",
|
|
6828
6828
|
"Panel with extra columns"
|
|
6829
6829
|
],
|
|
6830
|
-
"minimalExample": "<div class=\"h-[500px]\">\n <ngs-panel class=\"border border-muted\">\n <ngs-panel-header class=\"bg-surface-container flex items-center px-6\">Header</ngs-panel-header>\n <ngs-panel-content>\n <ngs-scrollbar-area
|
|
6830
|
+
"minimalExample": "<div class=\"h-[500px]\">\n <ngs-panel class=\"border border-muted\">\n <ngs-panel-header class=\"bg-surface-container flex items-center px-6\">Header</ngs-panel-header>\n <ngs-panel-content>\n <ngs-scrollbar-area>\n <div class=\"p-6 h-[1000px]\">Body</div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n <ngs-panel-footer class=\"bg-surface-container-low flex items-center px-6\">Footer</ngs-panel-footer>\n </ngs-panel>\n</div>",
|
|
6831
6831
|
"exampleFiles": [
|
|
6832
6832
|
{
|
|
6833
6833
|
"name": "basic-panel-example",
|
|
6834
6834
|
"title": "Basic panel",
|
|
6835
6835
|
"file": "projects/docs/src/app/components/panel/_examples/basic-panel-example/basic-panel-example.html",
|
|
6836
|
-
"source": "<div class=\"h-[500px]\">\n <ngs-panel class=\"border border-muted\">\n <ngs-panel-header class=\"bg-surface-container flex items-center px-6\">Header</ngs-panel-header>\n <ngs-panel-content>\n <ngs-scrollbar-area
|
|
6836
|
+
"source": "<div class=\"h-[500px]\">\n <ngs-panel class=\"border border-muted\">\n <ngs-panel-header class=\"bg-surface-container flex items-center px-6\">Header</ngs-panel-header>\n <ngs-panel-content>\n <ngs-scrollbar-area>\n <div class=\"p-6 h-[1000px]\">Body</div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n <ngs-panel-footer class=\"bg-surface-container-low flex items-center px-6\">Footer</ngs-panel-footer>\n </ngs-panel>\n</div>"
|
|
6837
6837
|
},
|
|
6838
6838
|
{
|
|
6839
6839
|
"name": "panel-with-extra-columns-example",
|
|
6840
6840
|
"title": "Panel with extra columns",
|
|
6841
6841
|
"file": "projects/docs/src/app/components/panel/_examples/panel-with-extra-columns-example/panel-with-extra-columns-example.html",
|
|
6842
|
-
"source": "<div class=\"h-[500px]\">\n <ngs-panel class=\"border border-muted\">\n <ngs-panel-header class=\"bg-surface-container flex items-center px-6\">Header</ngs-panel-header>\n <ngs-panel-sidebar class=\"border-r border-e-muted w-[200px]\">\n <ngs-scrollbar-area
|
|
6842
|
+
"source": "<div class=\"h-[500px]\">\n <ngs-panel class=\"border border-muted\">\n <ngs-panel-header class=\"bg-surface-container flex items-center px-6\">Header</ngs-panel-header>\n <ngs-panel-sidebar class=\"border-r border-e-muted w-[200px]\">\n <ngs-scrollbar-area>\n <div class=\"p-6 h-[1000px]\" [style.width.px]=\"width()\" (click)=\"setSidebarLongWidth()\">Sidebar</div>\n </ngs-scrollbar-area>\n </ngs-panel-sidebar>\n <ngs-panel-content>\n <ngs-scrollbar-area>\n <div class=\"p-6 h-[1000px] w-[1000px]\">Body</div>\n </ngs-scrollbar-area>\n </ngs-panel-content>\n <ngs-panel-aside class=\"border-s border-s-muted w-[120px]\">\n <div class=\"p-6\">Aside</div>\n </ngs-panel-aside>\n <ngs-panel-footer class=\"bg-surface-container-low flex items-center px-6\">Footer</ngs-panel-footer>\n </ngs-panel>\n</div>"
|
|
6843
6843
|
}
|
|
6844
6844
|
],
|
|
6845
6845
|
"previewAsset": "projects/components/panel/preview.svg",
|
|
@@ -51,22 +51,16 @@ class ScrollSpyNav {
|
|
|
51
51
|
threshold = 10;
|
|
52
52
|
_activeId;
|
|
53
53
|
scrollContainer;
|
|
54
|
+
isDocumentScrollContainer = false;
|
|
54
55
|
ngAfterContentInit() {
|
|
55
56
|
if (isPlatformServer(this.platformId)) {
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
else if (this.layoutBody) {
|
|
62
|
-
this.scrollContainer = this.layoutBody.scrollContainer();
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.scrollContainer = this.document.body;
|
|
66
|
-
}
|
|
59
|
+
this.scrollContainer = this._getScrollContainer();
|
|
60
|
+
const scrollEventTarget = this._getScrollEventTarget();
|
|
67
61
|
if (this.scrollContainer) {
|
|
68
62
|
this.zone.runOutsideAngular(() => {
|
|
69
|
-
fromEvent(
|
|
63
|
+
fromEvent(scrollEventTarget, 'scroll')
|
|
70
64
|
.pipe(debounceTime(35), takeUntilDestroyed(this.destroyRef))
|
|
71
65
|
.subscribe(() => {
|
|
72
66
|
this._findActiveItem();
|
|
@@ -84,44 +78,83 @@ class ScrollSpyNav {
|
|
|
84
78
|
if (!this.scrollContainer) {
|
|
85
79
|
return;
|
|
86
80
|
}
|
|
87
|
-
this._activeId = targetId;
|
|
88
81
|
const targetElement = this.document.querySelector('#' + targetId);
|
|
89
|
-
|
|
90
|
-
|
|
82
|
+
if (!targetElement) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this._activeId = targetId;
|
|
86
|
+
const targetTop = this._getTargetScrollTop(targetElement);
|
|
91
87
|
this.cdr.detectChanges();
|
|
92
88
|
this.scrollContainer.scroll({
|
|
93
|
-
top:
|
|
89
|
+
top: targetTop,
|
|
94
90
|
left: 0,
|
|
95
91
|
behavior: 'smooth'
|
|
96
92
|
});
|
|
97
93
|
}
|
|
98
94
|
_findActiveItem() {
|
|
95
|
+
let activeId;
|
|
96
|
+
let nextId;
|
|
97
|
+
let nextDistance = Number.POSITIVE_INFINITY;
|
|
99
98
|
for (let item of this._items()) {
|
|
100
99
|
const targetElement = this.document.querySelector('#' + item.targetId());
|
|
101
100
|
if (targetElement) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
break;
|
|
101
|
+
const bounds = this._getTargetBounds(targetElement);
|
|
102
|
+
if (bounds.top <= this.threshold && bounds.bottom > this.threshold) {
|
|
103
|
+
activeId = item.targetId();
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (!activeId && bounds.top > this.threshold && bounds.top < nextDistance) {
|
|
107
|
+
nextId = item.targetId();
|
|
108
|
+
nextDistance = bounds.top;
|
|
111
109
|
}
|
|
112
110
|
}
|
|
113
111
|
}
|
|
112
|
+
const nextActiveId = activeId ?? nextId;
|
|
113
|
+
if (!nextActiveId || this._activeId === nextActiveId) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
this.zone.run(() => {
|
|
117
|
+
this._activeId = nextActiveId;
|
|
118
|
+
this.cdr.detectChanges();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
_getScrollContainer() {
|
|
122
|
+
if (this.panelBody) {
|
|
123
|
+
this.isDocumentScrollContainer = false;
|
|
124
|
+
return this.panelBody.scrollContainer();
|
|
125
|
+
}
|
|
126
|
+
if (this.layoutBody) {
|
|
127
|
+
this.isDocumentScrollContainer = false;
|
|
128
|
+
return this.layoutBody.scrollContainer();
|
|
129
|
+
}
|
|
130
|
+
this.isDocumentScrollContainer = true;
|
|
131
|
+
return this.document.scrollingElement ??
|
|
132
|
+
this.document.documentElement ??
|
|
133
|
+
this.document.body;
|
|
134
|
+
}
|
|
135
|
+
_getScrollEventTarget() {
|
|
136
|
+
if (this.isDocumentScrollContainer) {
|
|
137
|
+
return this.document.defaultView ?? this.document;
|
|
138
|
+
}
|
|
139
|
+
return this.scrollContainer;
|
|
140
|
+
}
|
|
141
|
+
_getTargetScrollTop(targetElement) {
|
|
142
|
+
const targetBounds = this._getTargetBounds(targetElement);
|
|
143
|
+
return this.scrollContainer.scrollTop + targetBounds.top - this.threshold;
|
|
114
144
|
}
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
145
|
+
_getTargetBounds(targetElement) {
|
|
146
|
+
const targetRect = targetElement.getBoundingClientRect();
|
|
147
|
+
if (this.isDocumentScrollContainer) {
|
|
148
|
+
return {
|
|
149
|
+
top: targetRect.top,
|
|
150
|
+
bottom: targetRect.bottom
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const containerRect = this.scrollContainer.getBoundingClientRect();
|
|
154
|
+
return {
|
|
155
|
+
top: targetRect.top - containerRect.top,
|
|
156
|
+
bottom: targetRect.bottom - containerRect.top
|
|
157
|
+
};
|
|
125
158
|
}
|
|
126
159
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ScrollSpyNav, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
127
160
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: ScrollSpyNav, isStandalone: true, selector: "ngs-scroll-spy-nav,[ngs-scroll-spy-nav]", host: { classAttribute: "ngs-scroll-spy-nav" }, providers: [
|
|
@@ -190,7 +223,9 @@ class ScrollSpyBackToTop {
|
|
|
190
223
|
this.scrollContainer = this.layoutBody.scrollContainer();
|
|
191
224
|
}
|
|
192
225
|
else {
|
|
193
|
-
this.scrollContainer = this.document.
|
|
226
|
+
this.scrollContainer = this.document.scrollingElement ??
|
|
227
|
+
this.document.documentElement ??
|
|
228
|
+
this.document.body;
|
|
194
229
|
}
|
|
195
230
|
if (this.scrollContainer) {
|
|
196
231
|
this.scrollContainer.scrollTo({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-scroll-spy.mjs","sources":["../../../projects/components/scroll-spy/src/types.ts","../../../projects/components/scroll-spy/src/scroll-spy-on/scroll-spy-on.ts","../../../projects/components/scroll-spy/src/scroll-spy-on/scroll-spy-on.html","../../../projects/components/scroll-spy/src/scroll-spy-nav/scroll-spy-nav.ts","../../../projects/components/scroll-spy/src/scroll-spy-nav/scroll-spy-nav.html","../../../projects/components/scroll-spy/src/scroll-spy-title/scroll-spy-title.ts","../../../projects/components/scroll-spy/src/scroll-spy-title/scroll-spy-title.html","../../../projects/components/scroll-spy/src/scroll-spy-container.directive.ts","../../../projects/components/scroll-spy/src/scroll-spy-back-to-top/scroll-spy-back-to-top.ts","../../../projects/components/scroll-spy/src/scroll-spy-back-to-top/scroll-spy-back-to-top.html","../../../projects/components/scroll-spy/ngstarter-ui-components-scroll-spy.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const SCROLL_SPY_NAV = new InjectionToken('SPY_NAV');\n","import { Component, ElementRef, inject, input, OnInit, Renderer2, DOCUMENT } from '@angular/core';\n\nimport { ScrollSpyNav } from '../scroll-spy-nav/scroll-spy-nav';\nimport { SCROLL_SPY_NAV } from '../types';\n\n@Component({\n selector: 'ngs-scroll-spy-on,[ngs-scroll-spy-on]',\n exportAs: 'ngsScrollSpyOn',\n templateUrl: './scroll-spy-on.html',\n styleUrl: './scroll-spy-on.scss',\n host: {\n 'class': 'ngs-scroll-spy-on',\n '[class.is-active]': 'isActive',\n '(click)': '_handleClick($event)'\n }\n})\nexport class ScrollSpyOn implements OnInit {\n private _parent = inject<ScrollSpyNav>(SCROLL_SPY_NAV);\n private _elementRef = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _document = inject(DOCUMENT);\n\n targetId = input.required<string>();\n\n ngOnInit() {\n const fullUrl = this._document.location.origin + this._document.location.pathname;\n this._renderer.setAttribute(this._elementRef.nativeElement, 'href', fullUrl + '#' + this.targetId());\n }\n\n protected get isActive() {\n return this.targetId() === this._parent.activeId;\n }\n\n protected _handleClick(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this._parent.scrollTo(this.targetId());\n }\n}\n","<ng-content/>\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n NgZone,\n PLATFORM_ID,\n contentChildren,\n DOCUMENT\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { debounceTime, fromEvent } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SCROLL_SPY_NAV } from '../types';\nimport { ScrollSpyOn } from '../scroll-spy-on/scroll-spy-on';\nimport { LAYOUT_CONTENT } from '@ngstarter-ui/components/layout';\nimport { PANEL_CONTENT } from '@ngstarter-ui/components/panel';\n\n@Component({\n selector: 'ngs-scroll-spy-nav,[ngs-scroll-spy-nav]',\n exportAs: 'ngsScrollSpyNav',\n templateUrl: './scroll-spy-nav.html',\n styleUrl: './scroll-spy-nav.scss',\n providers: [\n {\n provide: SCROLL_SPY_NAV,\n useExisting: ScrollSpyNav\n }\n ],\n host: {\n 'class': 'ngs-scroll-spy-nav'\n }\n})\nexport class ScrollSpyNav implements AfterContentInit {\n private document = inject(DOCUMENT);\n private cdr = inject(ChangeDetectorRef);\n private platformId = inject(PLATFORM_ID);\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private panelBody = inject(PANEL_CONTENT, { optional: true });\n private layoutBody = inject(LAYOUT_CONTENT, { optional: true });\n\n readonly _items = contentChildren(ScrollSpyOn);\n\n private threshold = 10;\n protected _activeId: string;\n private scrollContainer: HTMLElement;\n\n ngAfterContentInit() {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n if (this.panelBody) {\n this.scrollContainer = this.panelBody.scrollContainer();\n } else if (this.layoutBody) {\n this.scrollContainer = this.layoutBody.scrollContainer();\n } else {\n this.scrollContainer = this.document.body;\n }\n\n if (this.scrollContainer) {\n this.zone.runOutsideAngular(() => {\n fromEvent(this.scrollContainer, 'scroll')\n .pipe(\n debounceTime(35),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this._findActiveItem();\n })\n ;\n });\n setTimeout(() => {\n this._findActiveItem();\n }, 10);\n }\n }\n\n get activeId(): string {\n return this._activeId;\n }\n\n scrollTo(targetId: string) {\n if (!this.scrollContainer) {\n return;\n }\n\n this._activeId = targetId;\n const targetElement = this.document.querySelector('#' + targetId) as HTMLElement;\n const offsetTopFix = parseInt(getComputedStyle(targetElement).marginTop) +\n parseInt(getComputedStyle(targetElement).height) + this.threshold\n ;\n this.cdr.detectChanges();\n this.scrollContainer.scroll({\n top: targetElement.offsetTop - offsetTopFix,\n left: 0,\n behavior: 'smooth'\n });\n }\n\n private _findActiveItem() {\n for (let item of this._items()) {\n const targetElement = this.document.querySelector('#' + item.targetId()) as HTMLElement;\n\n if (targetElement) {\n if (this._elementIsVisibleInViewport(this.scrollContainer, targetElement)) {\n if (this._activeId === item.targetId()) {\n return;\n }\n\n this.zone.run(() => {\n this._activeId = item.targetId();\n this.cdr.detectChanges();\n });\n break;\n }\n }\n }\n }\n\n private _elementIsVisibleInViewport(container: HTMLElement, targetEl: HTMLElement, partiallyVisible = false) {\n const { top, left, bottom, right } = targetEl.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const innerWidth = containerRect.width;\n const innerHeight = containerRect.height;\n return partiallyVisible\n ? ((top > 0 && top < innerHeight) ||\n (bottom > 0 && bottom < innerHeight)) &&\n ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))\n : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;\n }\n}\n","<ng-content select=\"ngs-scroll-spy-title,[ngs-scroll-spy-title]\"/>\n<div>\n <ng-content/>\n</div>\n<ng-content select=\"ngs-scroll-spy-back-to-top,[ngs-scroll-spy-back-to-top]\"/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-scroll-spy-title,[ngs-scroll-spy-title]',\n exportAs: 'ngsScrollSpyTitle',\n templateUrl: './scroll-spy-title.html',\n styleUrl: './scroll-spy-title.scss',\n host: {\n 'class': 'ngs-scroll-spy-title'\n }\n})\nexport class ScrollSpyTitle {\n\n}\n","<div class=\"truncate\"><ng-content/></div>\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[ngsScrollSpyContainer]',\n exportAs: 'ngsScrollSpyContainer',\n host: {\n 'class': 'ngs-scroll-spy-container'\n }\n})\nexport class ScrollSpyContainerDirective {\n private elementRef = inject(ElementRef);\n\n getScrollContainer(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import { Component, DOCUMENT, inject, PLATFORM_ID } from '@angular/core';\nimport { PANEL_CONTENT } from '@ngstarter-ui/components/panel';\nimport { LAYOUT_CONTENT } from '@ngstarter-ui/components/layout';\nimport { isPlatformServer } from '@angular/common';\nimport { Icon } from '@ngstarter-ui/components/icon';\n\n@Component({\n selector: 'ngs-scroll-spy-back-to-top,[ngs-scroll-spy-back-to-top]',\n exportAs: 'ngsScrollSpyBackToTop',\n imports: [\n Icon\n ],\n templateUrl: './scroll-spy-back-to-top.html',\n styleUrl: './scroll-spy-back-to-top.scss',\n host: {\n '(click)': 'scrollToTop()'\n }\n})\nexport class ScrollSpyBackToTop {\n private platformId = inject(PLATFORM_ID);\n private document = inject(DOCUMENT);\n private panelBody = inject(PANEL_CONTENT, { optional: true });\n private layoutBody = inject(LAYOUT_CONTENT, { optional: true });\n\n private scrollContainer: HTMLElement;\n\n scrollToTop() {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n if (this.panelBody) {\n this.scrollContainer = this.panelBody.scrollContainer();\n } else if (this.layoutBody) {\n this.scrollContainer = this.layoutBody.scrollContainer();\n } else {\n this.scrollContainer = this.document.body;\n }\n\n if (this.scrollContainer) {\n this.scrollContainer.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n }\n }\n}\n","<ngs-icon name=\"fluent:arrow-up-24-regular\"/>\n<ng-content/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;MAEa,cAAc,GAAG,IAAI,cAAc,CAAC,SAAS;;MCc7C,WAAW,CAAA;AACd,IAAA,OAAO,GAAG,MAAM,CAAe,cAAc,CAAC;AAC9C,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEpC,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAU;IAEnC,QAAQ,GAAA;AACN,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ;QACjF,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACtG;AAEA,IAAA,IAAc,QAAQ,GAAA;QACpB,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ;IAClD;AAEU,IAAA,YAAY,CAAC,KAAiB,EAAA;QACtC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxC;uGArBW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,yZChBxB,iBACA,EAAA,MAAA,EAAA,CAAA,sYAAA,CAAA,EAAA,CAAA;;2FDea,WAAW,EAAA,UAAA,EAAA,CAAA;kBAXvB,SAAS;+BACE,uCAAuC,EAAA,QAAA,EACvC,gBAAgB,EAAA,IAAA,EAGpB;AACJ,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,mBAAmB,EAAE,UAAU;AAC/B,wBAAA,SAAS,EAAE;AACZ,qBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,sYAAA,CAAA,EAAA;;;MEoBU,YAAY,CAAA;AACf,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACrD,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtD,IAAA,MAAM,GAAG,eAAe,CAAC,WAAW,6EAAC;IAEtC,SAAS,GAAG,EAAE;AACZ,IAAA,SAAS;AACX,IAAA,eAAe;IAEvB,kBAAkB,GAAA;AAChB,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;QACzD;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;QAC1D;aAAO;YACL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;QAC3C;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ;AACrC,qBAAA,IAAI,CACH,YAAY,CAAC,EAAE,CAAC,EAChB,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;qBAEpC,SAAS,CAAC,MAAK;oBACd,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,CAAC,CAAC;AAEN,YAAA,CAAC,CAAC;YACF,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,eAAe,EAAE;YACxB,CAAC,EAAE,EAAE,CAAC;QACR;IACF;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,QAAQ,CAAC,QAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,QAAQ,CAAgB;QAChF,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC;AACtE,YAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS;AAEnE,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC1B,YAAA,GAAG,EAAE,aAAa,CAAC,SAAS,GAAG,YAAY;AAC3C,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;IAEQ,eAAe,GAAA;QACrB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAC9B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAgB;YAEvF,IAAI,aAAa,EAAE;gBACjB,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE;oBACzE,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;wBACtC;oBACF;AAEA,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,wBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,oBAAA,CAAC,CAAC;oBACF;gBACF;YACF;QACF;IACF;AAEQ,IAAA,2BAA2B,CAAC,SAAsB,EAAE,QAAqB,EAAE,gBAAgB,GAAG,KAAK,EAAA;AACzG,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AACrE,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE;AACvD,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK;AACtC,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM;AACxC,QAAA,OAAO;cACH,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,WAAW;iBAC7B,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,WAAW,CAAC;AACtC,iBAAC,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,UAAU,MAAM,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,UAAU,CAAC;AACrE,cAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,WAAW,IAAI,KAAK,IAAI,UAAU;IAC3E;uGAlGW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EAVZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,WAAW,EAAE;AACd;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAciC,WAAW,4EC3C/C,0LAKA,EAAA,MAAA,EAAA,CAAA,iKAAA,CAAA,EAAA,CAAA;;2FD6Ba,YAAY,EAAA,UAAA,EAAA,CAAA;kBAfxB,SAAS;+BACE,yCAAyC,EAAA,QAAA,EACzC,iBAAiB,EAAA,SAAA,EAGhB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,WAAW,EAAA;AACZ;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,0LAAA,EAAA,MAAA,EAAA,CAAA,iKAAA,CAAA,EAAA;8FAWiC,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEhClC,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,0LCX3B,+CACA,EAAA,MAAA,EAAA,CAAA,6IAAA,CAAA,EAAA,CAAA;;2FDUa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAT1B,SAAS;+BACE,6CAA6C,EAAA,QAAA,EAC7C,mBAAmB,EAAA,IAAA,EAGvB;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,6IAAA,CAAA,EAAA;;;MEAU,2BAA2B,CAAA;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEvC,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;IACtC;uGALW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE;AACV;AACF,iBAAA;;;MCUY,kBAAkB,CAAA;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACrD,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEvD,IAAA,eAAe;IAEvB,WAAW,GAAA;AACT,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACrC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;QACzD;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;QAC1D;aAAO;YACL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;QAC3C;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC5B,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;QACJ;IACF;uGA3BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yDAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB/B,kEAEA,EAAA,MAAA,EAAA,CAAA,yTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDQI,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAQK,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;+BACE,yDAAyD,EAAA,QAAA,EACzD,uBAAuB,EAAA,OAAA,EACxB;wBACP;qBACD,EAAA,IAAA,EAGK;AACJ,wBAAA,SAAS,EAAE;AACZ,qBAAA,EAAA,QAAA,EAAA,kEAAA,EAAA,MAAA,EAAA,CAAA,yTAAA,CAAA,EAAA;;;AEhBH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-scroll-spy.mjs","sources":["../../../projects/components/scroll-spy/src/types.ts","../../../projects/components/scroll-spy/src/scroll-spy-on/scroll-spy-on.ts","../../../projects/components/scroll-spy/src/scroll-spy-on/scroll-spy-on.html","../../../projects/components/scroll-spy/src/scroll-spy-nav/scroll-spy-nav.ts","../../../projects/components/scroll-spy/src/scroll-spy-nav/scroll-spy-nav.html","../../../projects/components/scroll-spy/src/scroll-spy-title/scroll-spy-title.ts","../../../projects/components/scroll-spy/src/scroll-spy-title/scroll-spy-title.html","../../../projects/components/scroll-spy/src/scroll-spy-container.directive.ts","../../../projects/components/scroll-spy/src/scroll-spy-back-to-top/scroll-spy-back-to-top.ts","../../../projects/components/scroll-spy/src/scroll-spy-back-to-top/scroll-spy-back-to-top.html","../../../projects/components/scroll-spy/ngstarter-ui-components-scroll-spy.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const SCROLL_SPY_NAV = new InjectionToken('SPY_NAV');\n","import { Component, ElementRef, inject, input, OnInit, Renderer2, DOCUMENT } from '@angular/core';\n\nimport { ScrollSpyNav } from '../scroll-spy-nav/scroll-spy-nav';\nimport { SCROLL_SPY_NAV } from '../types';\n\n@Component({\n selector: 'ngs-scroll-spy-on,[ngs-scroll-spy-on]',\n exportAs: 'ngsScrollSpyOn',\n templateUrl: './scroll-spy-on.html',\n styleUrl: './scroll-spy-on.scss',\n host: {\n 'class': 'ngs-scroll-spy-on',\n '[class.is-active]': 'isActive',\n '(click)': '_handleClick($event)'\n }\n})\nexport class ScrollSpyOn implements OnInit {\n private _parent = inject<ScrollSpyNav>(SCROLL_SPY_NAV);\n private _elementRef = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _document = inject(DOCUMENT);\n\n targetId = input.required<string>();\n\n ngOnInit() {\n const fullUrl = this._document.location.origin + this._document.location.pathname;\n this._renderer.setAttribute(this._elementRef.nativeElement, 'href', fullUrl + '#' + this.targetId());\n }\n\n protected get isActive() {\n return this.targetId() === this._parent.activeId;\n }\n\n protected _handleClick(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this._parent.scrollTo(this.targetId());\n }\n}\n","<ng-content/>\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n inject,\n NgZone,\n PLATFORM_ID,\n contentChildren,\n DOCUMENT\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { debounceTime, fromEvent } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SCROLL_SPY_NAV } from '../types';\nimport { ScrollSpyOn } from '../scroll-spy-on/scroll-spy-on';\nimport { LAYOUT_CONTENT } from '@ngstarter-ui/components/layout';\nimport { PANEL_CONTENT } from '@ngstarter-ui/components/panel';\n\n@Component({\n selector: 'ngs-scroll-spy-nav,[ngs-scroll-spy-nav]',\n exportAs: 'ngsScrollSpyNav',\n templateUrl: './scroll-spy-nav.html',\n styleUrl: './scroll-spy-nav.scss',\n providers: [\n {\n provide: SCROLL_SPY_NAV,\n useExisting: ScrollSpyNav\n }\n ],\n host: {\n 'class': 'ngs-scroll-spy-nav'\n }\n})\nexport class ScrollSpyNav implements AfterContentInit {\n private document = inject(DOCUMENT);\n private cdr = inject(ChangeDetectorRef);\n private platformId = inject(PLATFORM_ID);\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private panelBody = inject(PANEL_CONTENT, { optional: true });\n private layoutBody = inject(LAYOUT_CONTENT, { optional: true });\n\n readonly _items = contentChildren(ScrollSpyOn);\n\n private threshold = 10;\n protected _activeId: string;\n private scrollContainer: HTMLElement;\n private isDocumentScrollContainer = false;\n\n ngAfterContentInit() {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this.scrollContainer = this._getScrollContainer();\n const scrollEventTarget = this._getScrollEventTarget();\n\n if (this.scrollContainer) {\n this.zone.runOutsideAngular(() => {\n fromEvent(scrollEventTarget, 'scroll')\n .pipe(\n debounceTime(35),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this._findActiveItem();\n })\n ;\n });\n setTimeout(() => {\n this._findActiveItem();\n }, 10);\n }\n }\n\n get activeId(): string {\n return this._activeId;\n }\n\n scrollTo(targetId: string) {\n if (!this.scrollContainer) {\n return;\n }\n\n const targetElement = this.document.querySelector('#' + targetId) as HTMLElement;\n\n if (!targetElement) {\n return;\n }\n\n this._activeId = targetId;\n const targetTop = this._getTargetScrollTop(targetElement);\n\n this.cdr.detectChanges();\n this.scrollContainer.scroll({\n top: targetTop,\n left: 0,\n behavior: 'smooth'\n });\n }\n\n private _findActiveItem() {\n let activeId: string | undefined;\n let nextId: string | undefined;\n let nextDistance = Number.POSITIVE_INFINITY;\n\n for (let item of this._items()) {\n const targetElement = this.document.querySelector('#' + item.targetId()) as HTMLElement;\n\n if (targetElement) {\n const bounds = this._getTargetBounds(targetElement);\n\n if (bounds.top <= this.threshold && bounds.bottom > this.threshold) {\n activeId = item.targetId();\n continue;\n }\n\n if (!activeId && bounds.top > this.threshold && bounds.top < nextDistance) {\n nextId = item.targetId();\n nextDistance = bounds.top;\n }\n }\n }\n\n const nextActiveId = activeId ?? nextId;\n\n if (!nextActiveId || this._activeId === nextActiveId) {\n return;\n }\n\n this.zone.run(() => {\n this._activeId = nextActiveId;\n this.cdr.detectChanges();\n });\n }\n\n private _getScrollContainer(): HTMLElement {\n if (this.panelBody) {\n this.isDocumentScrollContainer = false;\n return this.panelBody.scrollContainer();\n }\n\n if (this.layoutBody) {\n this.isDocumentScrollContainer = false;\n return this.layoutBody.scrollContainer();\n }\n\n this.isDocumentScrollContainer = true;\n return (this.document.scrollingElement as HTMLElement | null) ??\n this.document.documentElement ??\n this.document.body\n ;\n }\n\n private _getScrollEventTarget(): EventTarget {\n if (this.isDocumentScrollContainer) {\n return this.document.defaultView ?? this.document;\n }\n\n return this.scrollContainer;\n }\n\n private _getTargetScrollTop(targetElement: HTMLElement): number {\n const targetBounds = this._getTargetBounds(targetElement);\n return this.scrollContainer.scrollTop + targetBounds.top - this.threshold;\n }\n\n private _getTargetBounds(targetElement: HTMLElement): Pick<DOMRect, 'top' | 'bottom'> {\n const targetRect = targetElement.getBoundingClientRect();\n\n if (this.isDocumentScrollContainer) {\n return {\n top: targetRect.top,\n bottom: targetRect.bottom\n };\n }\n\n const containerRect = this.scrollContainer.getBoundingClientRect();\n\n return {\n top: targetRect.top - containerRect.top,\n bottom: targetRect.bottom - containerRect.top\n };\n }\n}\n","<ng-content select=\"ngs-scroll-spy-title,[ngs-scroll-spy-title]\"/>\n<div>\n <ng-content/>\n</div>\n<ng-content select=\"ngs-scroll-spy-back-to-top,[ngs-scroll-spy-back-to-top]\"/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-scroll-spy-title,[ngs-scroll-spy-title]',\n exportAs: 'ngsScrollSpyTitle',\n templateUrl: './scroll-spy-title.html',\n styleUrl: './scroll-spy-title.scss',\n host: {\n 'class': 'ngs-scroll-spy-title'\n }\n})\nexport class ScrollSpyTitle {\n\n}\n","<div class=\"truncate\"><ng-content/></div>\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[ngsScrollSpyContainer]',\n exportAs: 'ngsScrollSpyContainer',\n host: {\n 'class': 'ngs-scroll-spy-container'\n }\n})\nexport class ScrollSpyContainerDirective {\n private elementRef = inject(ElementRef);\n\n getScrollContainer(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import { Component, DOCUMENT, inject, PLATFORM_ID } from '@angular/core';\nimport { PANEL_CONTENT } from '@ngstarter-ui/components/panel';\nimport { LAYOUT_CONTENT } from '@ngstarter-ui/components/layout';\nimport { isPlatformServer } from '@angular/common';\nimport { Icon } from '@ngstarter-ui/components/icon';\n\n@Component({\n selector: 'ngs-scroll-spy-back-to-top,[ngs-scroll-spy-back-to-top]',\n exportAs: 'ngsScrollSpyBackToTop',\n imports: [\n Icon\n ],\n templateUrl: './scroll-spy-back-to-top.html',\n styleUrl: './scroll-spy-back-to-top.scss',\n host: {\n '(click)': 'scrollToTop()'\n }\n})\nexport class ScrollSpyBackToTop {\n private platformId = inject(PLATFORM_ID);\n private document = inject(DOCUMENT);\n private panelBody = inject(PANEL_CONTENT, { optional: true });\n private layoutBody = inject(LAYOUT_CONTENT, { optional: true });\n\n private scrollContainer: HTMLElement;\n\n scrollToTop() {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n if (this.panelBody) {\n this.scrollContainer = this.panelBody.scrollContainer();\n } else if (this.layoutBody) {\n this.scrollContainer = this.layoutBody.scrollContainer();\n } else {\n this.scrollContainer = (this.document.scrollingElement as HTMLElement | null) ??\n this.document.documentElement ??\n this.document.body\n ;\n }\n\n if (this.scrollContainer) {\n this.scrollContainer.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n }\n }\n}\n","<ngs-icon name=\"fluent:arrow-up-24-regular\"/>\n<ng-content/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngstarter-ui/components",
|
|
3
3
|
"description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
|
|
4
|
-
"version": "21.0.
|
|
4
|
+
"version": "21.0.38",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/elementarlabsdev/ngstarter.git"
|
|
@@ -26,11 +26,15 @@ declare class ScrollSpyNav implements AfterContentInit {
|
|
|
26
26
|
private threshold;
|
|
27
27
|
protected _activeId: string;
|
|
28
28
|
private scrollContainer;
|
|
29
|
+
private isDocumentScrollContainer;
|
|
29
30
|
ngAfterContentInit(): void;
|
|
30
31
|
get activeId(): string;
|
|
31
32
|
scrollTo(targetId: string): void;
|
|
32
33
|
private _findActiveItem;
|
|
33
|
-
private
|
|
34
|
+
private _getScrollContainer;
|
|
35
|
+
private _getScrollEventTarget;
|
|
36
|
+
private _getTargetScrollTop;
|
|
37
|
+
private _getTargetBounds;
|
|
34
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScrollSpyNav, never>;
|
|
35
39
|
static ɵcmp: i0.ɵɵComponentDeclaration<ScrollSpyNav, "ngs-scroll-spy-nav,[ngs-scroll-spy-nav]", ["ngsScrollSpyNav"], {}, {}, ["_items"], ["ngs-scroll-spy-title,[ngs-scroll-spy-title]", "*", "ngs-scroll-spy-back-to-top,[ngs-scroll-spy-back-to-top]"], true, never>;
|
|
36
40
|
}
|