@ethlete/core 0.2.0-next.6 → 0.2.0-next.8
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/esm2020/lib/directives/click-outside/click-outside.directive.mjs +3 -3
- package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +45 -21
- package/esm2020/lib/directives/destroy/destroy.directive.mjs +22 -0
- package/esm2020/lib/directives/destroy/public-api.mjs +2 -0
- package/esm2020/lib/directives/let/let.directive.mjs +3 -3
- package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +3 -3
- package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +3 -3
- package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +20 -5
- package/esm2020/lib/directives/public-api.mjs +9 -5
- package/esm2020/lib/directives/repeat/repeat.directive.mjs +3 -3
- package/esm2020/lib/directives/scroll-observer-first-element/index.mjs +2 -0
- package/esm2020/lib/directives/scroll-observer-first-element/public-api.mjs +2 -0
- package/esm2020/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +31 -0
- package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +3 -3
- package/esm2020/lib/directives/scroll-observer-last-element/index.mjs +2 -0
- package/esm2020/lib/directives/scroll-observer-last-element/public-api.mjs +2 -0
- package/esm2020/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +34 -0
- package/esm2020/lib/directives/seo/public-api.mjs +5 -0
- package/esm2020/lib/directives/seo/seo.directive.constants.mjs +3 -0
- package/esm2020/lib/directives/seo/seo.directive.mjs +162 -0
- package/esm2020/lib/directives/seo/seo.directive.types.mjs +2 -0
- package/esm2020/lib/directives/seo/seo.directive.utils.mjs +7 -0
- package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +3 -3
- package/esm2020/lib/services/click-observer.service.mjs +6 -6
- package/esm2020/lib/services/content-observer.service.mjs +6 -6
- package/esm2020/lib/services/destroy.service.mjs +6 -11
- package/esm2020/lib/services/focus-visible.service.mjs +3 -3
- package/esm2020/lib/services/public-api.mjs +6 -6
- package/esm2020/lib/services/resize-observer.service.mjs +6 -6
- package/esm2020/lib/services/viewport.service.mjs +3 -3
- package/fesm2015/ethlete-core.mjs +775 -499
- package/fesm2015/ethlete-core.mjs.map +1 -1
- package/fesm2020/ethlete-core.mjs +771 -496
- package/fesm2020/ethlete-core.mjs.map +1 -1
- package/lib/directives/click-outside/click-outside.directive.d.ts +1 -1
- package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +8 -2
- package/lib/directives/destroy/destroy.directive.d.ts +9 -0
- package/lib/directives/destroy/public-api.d.ts +1 -0
- package/lib/directives/let/let.directive.d.ts +1 -1
- package/lib/directives/observe-content/observe-content.directive.d.ts +1 -1
- package/lib/directives/observe-resize/observe-resize.directive.d.ts +1 -1
- package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +1 -1
- package/lib/directives/public-api.d.ts +8 -4
- package/lib/directives/repeat/repeat.directive.d.ts +1 -1
- package/lib/directives/scroll-observer-first-element/index.d.ts +1 -0
- package/lib/directives/scroll-observer-first-element/public-api.d.ts +1 -0
- package/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.d.ts +10 -0
- package/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.d.ts +1 -1
- package/lib/directives/scroll-observer-last-element/index.d.ts +1 -0
- package/lib/directives/scroll-observer-last-element/public-api.d.ts +1 -0
- package/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.d.ts +10 -0
- package/lib/directives/seo/public-api.d.ts +4 -0
- package/lib/directives/seo/seo.directive.constants.d.ts +3 -0
- package/lib/directives/seo/seo.directive.d.ts +21 -0
- package/lib/directives/seo/seo.directive.types.d.ts +51 -0
- package/lib/directives/seo/seo.directive.utils.d.ts +2 -0
- package/lib/services/destroy.service.d.ts +1 -1
- package/lib/services/public-api.d.ts +5 -5
- package/package.json +5 -4
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
3
|
-
import {
|
|
4
|
-
import { BehaviorSubject, combineLatest, map, shareReplay,
|
|
2
|
+
import { InjectionToken, Injectable, inject, Inject, Optional, ElementRef, EventEmitter, Directive, Output, Input, NgZone, HostBinding, Pipe } from '@angular/core';
|
|
3
|
+
import { coerceElement, coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
|
|
4
|
+
import { fromEvent, Observable, Subject, BehaviorSubject, combineLatest, map, shareReplay, startWith, debounceTime, tap, takeUntil, take } from 'rxjs';
|
|
5
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
6
|
import { __decorate, __metadata } from 'tslib';
|
|
6
7
|
import * as i1 from '@angular/cdk/layout';
|
|
7
|
-
import { DOCUMENT } from '@angular/common';
|
|
8
8
|
import { debounceTime as debounceTime$1 } from 'rxjs/operators';
|
|
9
|
+
import { Meta, Title } from '@angular/platform-browser';
|
|
9
10
|
|
|
10
11
|
const VIEWPORT_CONFIG = new InjectionToken('ViewportConfig');
|
|
11
12
|
/**
|
|
@@ -50,131 +51,313 @@ const Memo = (config = {}) => (_, __, descriptor) => {
|
|
|
50
51
|
return descriptor;
|
|
51
52
|
};
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
58
|
-
this.etLet = null;
|
|
54
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
55
|
+
class ClickObserverFactory {
|
|
56
|
+
create() {
|
|
57
|
+
return fromEvent(document, 'click');
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
ClickObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
61
|
+
ClickObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickObserverFactory, providedIn: 'root' });
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickObserverFactory, decorators: [{
|
|
63
|
+
type: Injectable,
|
|
64
|
+
args: [{ providedIn: 'root' }]
|
|
65
|
+
}] });
|
|
66
|
+
class ClickObserverService {
|
|
67
|
+
constructor(_clickObserverFactory) {
|
|
68
|
+
this._clickObserverFactory = _clickObserverFactory;
|
|
69
|
+
this._observedElements = new Map();
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
-
this.
|
|
72
|
-
this._updateView();
|
|
71
|
+
ngOnDestroy() {
|
|
72
|
+
this._observedElements.forEach((_, element) => this._cleanupObserver(element));
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return
|
|
74
|
+
observe(elementOrRef) {
|
|
75
|
+
const element = coerceElement(elementOrRef);
|
|
76
|
+
return new Observable((observer) => {
|
|
77
|
+
const stream = this._observeElement(element);
|
|
78
|
+
const subscription = stream.subscribe(observer);
|
|
79
|
+
return () => {
|
|
80
|
+
subscription.unsubscribe();
|
|
81
|
+
this._unobserveElement(element);
|
|
82
|
+
};
|
|
83
|
+
});
|
|
77
84
|
}
|
|
78
|
-
|
|
79
|
-
if (!this.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
85
|
+
_observeElement(element) {
|
|
86
|
+
if (!this._observedElements.has(element)) {
|
|
87
|
+
const stream = new Subject();
|
|
88
|
+
const observer = this._clickObserverFactory.create();
|
|
89
|
+
const sub = observer.subscribe((event) => stream.next(event));
|
|
90
|
+
this._observedElements.set(element, { observer: sub, stream, count: 1 });
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this._observedElements.get(element).count++;
|
|
94
|
+
}
|
|
95
|
+
return this._observedElements.get(element).stream;
|
|
96
|
+
}
|
|
97
|
+
_unobserveElement(element) {
|
|
98
|
+
if (this._observedElements.has(element)) {
|
|
99
|
+
this._observedElements.get(element).count--;
|
|
100
|
+
if (!this._observedElements.get(element).count) {
|
|
101
|
+
this._cleanupObserver(element);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
_cleanupObserver(element) {
|
|
106
|
+
if (this._observedElements.has(element)) {
|
|
107
|
+
const { observer, stream } = this._observedElements.get(element);
|
|
108
|
+
if (observer) {
|
|
109
|
+
observer.unsubscribe();
|
|
83
110
|
}
|
|
111
|
+
stream.complete();
|
|
112
|
+
this._observedElements.delete(element);
|
|
84
113
|
}
|
|
85
114
|
}
|
|
86
115
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
90
|
-
type:
|
|
91
|
-
args: [{
|
|
92
|
-
|
|
93
|
-
standalone: true,
|
|
94
|
-
}]
|
|
95
|
-
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { etLet: [{
|
|
96
|
-
type: Input
|
|
97
|
-
}] } });
|
|
116
|
+
ClickObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickObserverService, deps: [{ token: ClickObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
117
|
+
ClickObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickObserverService, providedIn: 'root' });
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickObserverService, decorators: [{
|
|
119
|
+
type: Injectable,
|
|
120
|
+
args: [{ providedIn: 'root' }]
|
|
121
|
+
}], ctorParameters: function () { return [{ type: ClickObserverFactory }]; } });
|
|
98
122
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this._repeatCount = 2;
|
|
123
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
124
|
+
class MutationObserverFactory {
|
|
125
|
+
create(callback) {
|
|
126
|
+
return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);
|
|
104
127
|
}
|
|
105
|
-
|
|
106
|
-
|
|
128
|
+
}
|
|
129
|
+
MutationObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
130
|
+
MutationObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' });
|
|
131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MutationObserverFactory, decorators: [{
|
|
132
|
+
type: Injectable,
|
|
133
|
+
args: [{ providedIn: 'root' }]
|
|
134
|
+
}] });
|
|
135
|
+
class ContentObserverService {
|
|
136
|
+
constructor(_mutationObserverFactory) {
|
|
137
|
+
this._mutationObserverFactory = _mutationObserverFactory;
|
|
138
|
+
this._observedElements = new Map();
|
|
107
139
|
}
|
|
108
|
-
|
|
109
|
-
this.
|
|
140
|
+
ngOnDestroy() {
|
|
141
|
+
this._observedElements.forEach((_, element) => this._cleanupObserver(element));
|
|
110
142
|
}
|
|
111
|
-
|
|
112
|
-
|
|
143
|
+
observe(elementOrRef) {
|
|
144
|
+
const element = coerceElement(elementOrRef);
|
|
145
|
+
return new Observable((observer) => {
|
|
146
|
+
const stream = this._observeElement(element);
|
|
147
|
+
const subscription = stream.subscribe(observer);
|
|
148
|
+
return () => {
|
|
149
|
+
subscription.unsubscribe();
|
|
150
|
+
this._unobserveElement(element);
|
|
151
|
+
};
|
|
152
|
+
});
|
|
113
153
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
154
|
+
_observeElement(element) {
|
|
155
|
+
if (!this._observedElements.has(element)) {
|
|
156
|
+
const stream = new Subject();
|
|
157
|
+
const observer = this._mutationObserverFactory.create((mutations) => stream.next(mutations));
|
|
158
|
+
if (observer) {
|
|
159
|
+
observer.observe(element, {
|
|
160
|
+
characterData: true,
|
|
161
|
+
childList: true,
|
|
162
|
+
subtree: true,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
this._observedElements.set(element, { observer, stream, count: 1 });
|
|
117
166
|
}
|
|
167
|
+
else {
|
|
168
|
+
this._observedElements.get(element).count++;
|
|
169
|
+
}
|
|
170
|
+
return this._observedElements.get(element).stream;
|
|
118
171
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
standalone: true,
|
|
127
|
-
}]
|
|
128
|
-
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { repeatCount: [{
|
|
129
|
-
type: Input,
|
|
130
|
-
args: ['etRepeat']
|
|
131
|
-
}] } });
|
|
132
|
-
|
|
133
|
-
class ViewportService {
|
|
134
|
-
constructor(_viewportConfig, _breakpointObserver) {
|
|
135
|
-
this._breakpointObserver = _breakpointObserver;
|
|
136
|
-
this._isXs$ = new BehaviorSubject(false);
|
|
137
|
-
this._isSm$ = new BehaviorSubject(false);
|
|
138
|
-
this._isMd$ = new BehaviorSubject(false);
|
|
139
|
-
this._isLg$ = new BehaviorSubject(false);
|
|
140
|
-
this._isXl$ = new BehaviorSubject(false);
|
|
141
|
-
this._is2Xl$ = new BehaviorSubject(false);
|
|
142
|
-
this.currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(map((val) => this.getCurrentViewport(val)), shareReplay());
|
|
143
|
-
this._viewportConfig = _viewportConfig || DEFAULT_VIEWPORT_CONFIG;
|
|
144
|
-
this._observeDefaultBreakpoints();
|
|
145
|
-
}
|
|
146
|
-
get isXs$() {
|
|
147
|
-
return this._isXs$.asObservable();
|
|
172
|
+
_unobserveElement(element) {
|
|
173
|
+
if (this._observedElements.has(element)) {
|
|
174
|
+
this._observedElements.get(element).count--;
|
|
175
|
+
if (!this._observedElements.get(element).count) {
|
|
176
|
+
this._cleanupObserver(element);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
148
179
|
}
|
|
149
|
-
|
|
150
|
-
|
|
180
|
+
_cleanupObserver(element) {
|
|
181
|
+
if (this._observedElements.has(element)) {
|
|
182
|
+
const { observer, stream } = this._observedElements.get(element);
|
|
183
|
+
if (observer) {
|
|
184
|
+
observer.disconnect();
|
|
185
|
+
}
|
|
186
|
+
stream.complete();
|
|
187
|
+
this._observedElements.delete(element);
|
|
188
|
+
}
|
|
151
189
|
}
|
|
152
|
-
|
|
153
|
-
|
|
190
|
+
}
|
|
191
|
+
ContentObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
192
|
+
ContentObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentObserverService, providedIn: 'root' });
|
|
193
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentObserverService, decorators: [{
|
|
194
|
+
type: Injectable,
|
|
195
|
+
args: [{ providedIn: 'root' }]
|
|
196
|
+
}], ctorParameters: function () { return [{ type: MutationObserverFactory }]; } });
|
|
197
|
+
|
|
198
|
+
class DestroyService {
|
|
199
|
+
constructor() {
|
|
200
|
+
this._destroy$ = new Subject();
|
|
201
|
+
this.destroy$ = this._destroy$.asObservable();
|
|
154
202
|
}
|
|
155
|
-
|
|
156
|
-
|
|
203
|
+
ngOnDestroy() {
|
|
204
|
+
this._destroy$.next(true);
|
|
205
|
+
this._destroy$.unsubscribe();
|
|
157
206
|
}
|
|
158
|
-
|
|
159
|
-
|
|
207
|
+
}
|
|
208
|
+
DestroyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DestroyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
209
|
+
DestroyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DestroyService });
|
|
210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DestroyService, decorators: [{
|
|
211
|
+
type: Injectable
|
|
212
|
+
}] });
|
|
213
|
+
|
|
214
|
+
class FocusVisibleService {
|
|
215
|
+
constructor() {
|
|
216
|
+
this._document = inject(DOCUMENT);
|
|
217
|
+
this._hadKeyboardEvent = false;
|
|
218
|
+
this._document.addEventListener('keydown', this.onKeyDown.bind(this), true);
|
|
219
|
+
this._document.addEventListener('mousedown', this.onPointerDown.bind(this), true);
|
|
220
|
+
this._document.addEventListener('pointerdown', this.onPointerDown.bind(this), true);
|
|
221
|
+
this._document.addEventListener('touchstart', this.onPointerDown.bind(this), true);
|
|
160
222
|
}
|
|
161
|
-
get
|
|
162
|
-
return this.
|
|
223
|
+
get isFocusVisible() {
|
|
224
|
+
return this._hadKeyboardEvent;
|
|
163
225
|
}
|
|
164
|
-
|
|
165
|
-
|
|
226
|
+
onKeyDown(e) {
|
|
227
|
+
if (e.metaKey || e.altKey || e.ctrlKey) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
this._hadKeyboardEvent = true;
|
|
166
231
|
}
|
|
167
|
-
|
|
168
|
-
|
|
232
|
+
onPointerDown() {
|
|
233
|
+
this._hadKeyboardEvent = false;
|
|
169
234
|
}
|
|
170
|
-
|
|
171
|
-
|
|
235
|
+
}
|
|
236
|
+
FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
237
|
+
FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FocusVisibleService, providedIn: 'root' });
|
|
238
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FocusVisibleService, decorators: [{
|
|
239
|
+
type: Injectable,
|
|
240
|
+
args: [{
|
|
241
|
+
providedIn: 'root',
|
|
242
|
+
}]
|
|
243
|
+
}], ctorParameters: function () { return []; } });
|
|
244
|
+
|
|
245
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
246
|
+
class ResizeObserverFactory {
|
|
247
|
+
create(callback) {
|
|
248
|
+
return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);
|
|
172
249
|
}
|
|
173
|
-
|
|
174
|
-
|
|
250
|
+
}
|
|
251
|
+
ResizeObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
252
|
+
ResizeObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' });
|
|
253
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ResizeObserverFactory, decorators: [{
|
|
254
|
+
type: Injectable,
|
|
255
|
+
args: [{ providedIn: 'root' }]
|
|
256
|
+
}] });
|
|
257
|
+
class ResizeObserverService {
|
|
258
|
+
constructor(_mutationObserverFactory) {
|
|
259
|
+
this._mutationObserverFactory = _mutationObserverFactory;
|
|
260
|
+
this._observedElements = new Map();
|
|
175
261
|
}
|
|
176
|
-
|
|
177
|
-
|
|
262
|
+
ngOnDestroy() {
|
|
263
|
+
this._observedElements.forEach((_, element) => this._cleanupObserver(element));
|
|
264
|
+
}
|
|
265
|
+
observe(elementOrRef) {
|
|
266
|
+
const element = coerceElement(elementOrRef);
|
|
267
|
+
return new Observable((observer) => {
|
|
268
|
+
const stream = this._observeElement(element);
|
|
269
|
+
const subscription = stream.subscribe(observer);
|
|
270
|
+
return () => {
|
|
271
|
+
subscription.unsubscribe();
|
|
272
|
+
this._unobserveElement(element);
|
|
273
|
+
};
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
_observeElement(element) {
|
|
277
|
+
if (!this._observedElements.has(element)) {
|
|
278
|
+
const stream = new Subject();
|
|
279
|
+
const observer = this._mutationObserverFactory.create((resizes) => stream.next(resizes));
|
|
280
|
+
if (observer) {
|
|
281
|
+
observer.observe(element);
|
|
282
|
+
}
|
|
283
|
+
this._observedElements.set(element, { observer, stream, count: 1 });
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
this._observedElements.get(element).count++;
|
|
287
|
+
}
|
|
288
|
+
return this._observedElements.get(element).stream;
|
|
289
|
+
}
|
|
290
|
+
_unobserveElement(element) {
|
|
291
|
+
if (this._observedElements.has(element)) {
|
|
292
|
+
this._observedElements.get(element).count--;
|
|
293
|
+
if (!this._observedElements.get(element).count) {
|
|
294
|
+
this._cleanupObserver(element);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
_cleanupObserver(element) {
|
|
299
|
+
if (this._observedElements.has(element)) {
|
|
300
|
+
const { observer, stream } = this._observedElements.get(element);
|
|
301
|
+
if (observer) {
|
|
302
|
+
observer.disconnect();
|
|
303
|
+
}
|
|
304
|
+
stream.complete();
|
|
305
|
+
this._observedElements.delete(element);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
310
|
+
ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
|
|
311
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ResizeObserverService, decorators: [{
|
|
312
|
+
type: Injectable,
|
|
313
|
+
args: [{ providedIn: 'root' }]
|
|
314
|
+
}], ctorParameters: function () { return [{ type: ResizeObserverFactory }]; } });
|
|
315
|
+
|
|
316
|
+
class ViewportService {
|
|
317
|
+
constructor(_viewportConfig, _breakpointObserver) {
|
|
318
|
+
this._breakpointObserver = _breakpointObserver;
|
|
319
|
+
this._isXs$ = new BehaviorSubject(false);
|
|
320
|
+
this._isSm$ = new BehaviorSubject(false);
|
|
321
|
+
this._isMd$ = new BehaviorSubject(false);
|
|
322
|
+
this._isLg$ = new BehaviorSubject(false);
|
|
323
|
+
this._isXl$ = new BehaviorSubject(false);
|
|
324
|
+
this._is2Xl$ = new BehaviorSubject(false);
|
|
325
|
+
this.currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(map((val) => this.getCurrentViewport(val)), shareReplay());
|
|
326
|
+
this._viewportConfig = _viewportConfig || DEFAULT_VIEWPORT_CONFIG;
|
|
327
|
+
this._observeDefaultBreakpoints();
|
|
328
|
+
}
|
|
329
|
+
get isXs$() {
|
|
330
|
+
return this._isXs$.asObservable();
|
|
331
|
+
}
|
|
332
|
+
get isXs() {
|
|
333
|
+
return this._isXs$.value;
|
|
334
|
+
}
|
|
335
|
+
get isSm$() {
|
|
336
|
+
return this._isSm$.asObservable();
|
|
337
|
+
}
|
|
338
|
+
get isSm() {
|
|
339
|
+
return this._isSm$.value;
|
|
340
|
+
}
|
|
341
|
+
get isMd$() {
|
|
342
|
+
return this._isMd$.asObservable();
|
|
343
|
+
}
|
|
344
|
+
get isMd() {
|
|
345
|
+
return this._isMd$.value;
|
|
346
|
+
}
|
|
347
|
+
get isLg$() {
|
|
348
|
+
return this._isLg$.asObservable();
|
|
349
|
+
}
|
|
350
|
+
get isLg() {
|
|
351
|
+
return this._isLg$.value;
|
|
352
|
+
}
|
|
353
|
+
get isXl$() {
|
|
354
|
+
return this._isXl$.asObservable();
|
|
355
|
+
}
|
|
356
|
+
get isXl() {
|
|
357
|
+
return this._isXl$.value;
|
|
358
|
+
}
|
|
359
|
+
get is2Xl$() {
|
|
360
|
+
return this._is2Xl$.asObservable();
|
|
178
361
|
}
|
|
179
362
|
get is2Xl() {
|
|
180
363
|
return this._is2Xl$.value;
|
|
@@ -260,8 +443,8 @@ class ViewportService {
|
|
|
260
443
|
return 'xs';
|
|
261
444
|
}
|
|
262
445
|
}
|
|
263
|
-
ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
264
|
-
ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
446
|
+
ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ViewportService, deps: [{ token: VIEWPORT_CONFIG, optional: true }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
447
|
+
ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ViewportService, providedIn: 'root' });
|
|
265
448
|
__decorate([
|
|
266
449
|
Memo(),
|
|
267
450
|
__metadata("design:type", Function),
|
|
@@ -279,7 +462,7 @@ __decorate([
|
|
|
279
462
|
__metadata("design:paramtypes", [Object]),
|
|
280
463
|
__metadata("design:returntype", void 0)
|
|
281
464
|
], ViewportService.prototype, "_buildMediaQuery", null);
|
|
282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
465
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ViewportService, decorators: [{
|
|
283
466
|
type: Injectable,
|
|
284
467
|
args: [{
|
|
285
468
|
providedIn: 'root',
|
|
@@ -293,276 +476,268 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImpor
|
|
|
293
476
|
}] }, { type: i1.BreakpointObserver }];
|
|
294
477
|
}, propDecorators: { _getViewportSize: [], _buildMediaQuery: [] } });
|
|
295
478
|
|
|
296
|
-
class
|
|
479
|
+
class ClickOutsideDirective {
|
|
297
480
|
constructor() {
|
|
298
|
-
this.
|
|
299
|
-
this.
|
|
300
|
-
this.
|
|
301
|
-
this.
|
|
302
|
-
this._document.addEventListener('pointerdown', this.onPointerDown.bind(this), true);
|
|
303
|
-
this._document.addEventListener('touchstart', this.onPointerDown.bind(this), true);
|
|
304
|
-
}
|
|
305
|
-
get isFocusVisible() {
|
|
306
|
-
return this._hadKeyboardEvent;
|
|
481
|
+
this._elementRef = inject(ElementRef);
|
|
482
|
+
this._clickObserverService = inject(ClickObserverService);
|
|
483
|
+
this._subscription = null;
|
|
484
|
+
this.etClickOutside = new EventEmitter();
|
|
307
485
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
486
|
+
ngOnInit() {
|
|
487
|
+
setTimeout(() => {
|
|
488
|
+
this._subscription = this._clickObserverService.observe(this._elementRef.nativeElement).subscribe((event) => {
|
|
489
|
+
const activeElement = event.target;
|
|
490
|
+
const isInside = this._elementRef.nativeElement.contains(activeElement);
|
|
491
|
+
if (!isInside) {
|
|
492
|
+
this.etClickOutside.emit(event);
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
});
|
|
313
496
|
}
|
|
314
|
-
|
|
315
|
-
|
|
497
|
+
ngOnDestroy() {
|
|
498
|
+
var _a;
|
|
499
|
+
(_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
316
500
|
}
|
|
317
501
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
321
|
-
type:
|
|
502
|
+
ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
503
|
+
ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ClickOutsideDirective, isStandalone: true, selector: "[etClickOutside]", outputs: { etClickOutside: "etClickOutside" }, ngImport: i0 });
|
|
504
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ClickOutsideDirective, decorators: [{
|
|
505
|
+
type: Directive,
|
|
322
506
|
args: [{
|
|
323
|
-
|
|
507
|
+
selector: '[etClickOutside]',
|
|
508
|
+
standalone: true,
|
|
324
509
|
}]
|
|
325
|
-
}],
|
|
510
|
+
}], propDecorators: { etClickOutside: [{
|
|
511
|
+
type: Output
|
|
512
|
+
}] } });
|
|
326
513
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
this.
|
|
514
|
+
const provideViewportConfig = (viewportConfig) => {
|
|
515
|
+
return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
const clamp = (value, min = 0, max = 100) => {
|
|
519
|
+
return Math.max(min, Math.min(max, value));
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
const elementCanScroll = (element) => {
|
|
523
|
+
const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
|
|
524
|
+
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
525
|
+
};
|
|
526
|
+
|
|
527
|
+
const CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';
|
|
528
|
+
const CURSOR_DRAG_SCROLLING_PREPARED_CLASS = 'et-cursor-drag-scroll--prepared';
|
|
529
|
+
|
|
530
|
+
class CursorDragScrollDirective {
|
|
531
|
+
constructor() {
|
|
532
|
+
this._subscriptions = [];
|
|
533
|
+
this._destroy$ = inject(DestroyService).destroy$;
|
|
534
|
+
this._elementRef = inject(ElementRef);
|
|
535
|
+
this._contentObserverService = inject(ContentObserverService);
|
|
536
|
+
this._resizeObserverService = inject(ResizeObserverService);
|
|
537
|
+
this._bufferUntilScroll = 5;
|
|
538
|
+
this._mouseUp$ = new Subject();
|
|
539
|
+
this._isScrolling = false;
|
|
540
|
+
this._canScroll = false;
|
|
541
|
+
this._currentScrollState = {
|
|
542
|
+
top: 0,
|
|
543
|
+
left: 0,
|
|
544
|
+
x: 0,
|
|
545
|
+
y: 0,
|
|
546
|
+
};
|
|
547
|
+
this._enabled = false;
|
|
346
548
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
return new Observable((observer) => {
|
|
350
|
-
const stream = this._observeElement(element);
|
|
351
|
-
const subscription = stream.subscribe(observer);
|
|
352
|
-
return () => {
|
|
353
|
-
subscription.unsubscribe();
|
|
354
|
-
this._unobserveElement(element);
|
|
355
|
-
};
|
|
356
|
-
});
|
|
549
|
+
get enabled() {
|
|
550
|
+
return this._enabled;
|
|
357
551
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if (observer) {
|
|
363
|
-
observer.observe(element);
|
|
364
|
-
}
|
|
365
|
-
this._observedElements.set(element, { observer, stream, count: 1 });
|
|
552
|
+
set enabled(value) {
|
|
553
|
+
this._enabled = coerceBooleanProperty(value);
|
|
554
|
+
if (this._enabled) {
|
|
555
|
+
this._enableCursorDragScroll();
|
|
366
556
|
}
|
|
367
557
|
else {
|
|
368
|
-
this.
|
|
558
|
+
this._disableCursorDragScroll();
|
|
369
559
|
}
|
|
370
|
-
return this._observedElements.get(element).stream;
|
|
371
560
|
}
|
|
372
|
-
|
|
373
|
-
if (this.
|
|
374
|
-
this.
|
|
375
|
-
if (!this._observedElements.get(element).count) {
|
|
376
|
-
this._cleanupObserver(element);
|
|
377
|
-
}
|
|
561
|
+
ngAfterViewInit() {
|
|
562
|
+
if (this.enabled) {
|
|
563
|
+
this._enableCursorDragScroll();
|
|
378
564
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
if (this._observedElements.has(element)) {
|
|
382
|
-
const { observer, stream } = this._observedElements.get(element);
|
|
383
|
-
if (observer) {
|
|
384
|
-
observer.disconnect();
|
|
385
|
-
}
|
|
386
|
-
stream.complete();
|
|
387
|
-
this._observedElements.delete(element);
|
|
565
|
+
else {
|
|
566
|
+
this._disableCursorDragScroll();
|
|
388
567
|
}
|
|
389
568
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
569
|
+
_enableCursorDragScroll() {
|
|
570
|
+
const contentResizeSub = combineLatest([
|
|
571
|
+
this._contentObserverService.observe(this._elementRef.nativeElement).pipe(startWith(null)),
|
|
572
|
+
this._resizeObserverService.observe(this._elementRef.nativeElement).pipe(startWith(null)),
|
|
573
|
+
])
|
|
574
|
+
.pipe(debounceTime(25), tap(() => this._updateCanScrollState()), takeUntil(this._destroy$))
|
|
575
|
+
.subscribe();
|
|
576
|
+
const mousedownSub = fromEvent(this._elementRef.nativeElement, 'mousedown')
|
|
577
|
+
.pipe(tap((e) => this._onMouseDown(e)), takeUntil(this._destroy$))
|
|
578
|
+
.subscribe();
|
|
579
|
+
this._subscriptions.push(contentResizeSub, mousedownSub);
|
|
580
|
+
this._updateCanScrollState();
|
|
402
581
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
type: Injectable,
|
|
408
|
-
args: [{ providedIn: 'root' }]
|
|
409
|
-
}] });
|
|
410
|
-
class ContentObserverService {
|
|
411
|
-
constructor(_mutationObserverFactory) {
|
|
412
|
-
this._mutationObserverFactory = _mutationObserverFactory;
|
|
413
|
-
this._observedElements = new Map();
|
|
582
|
+
_disableCursorDragScroll() {
|
|
583
|
+
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
584
|
+
this._subscriptions.length = 0;
|
|
585
|
+
this._elementRef.nativeElement.style.cursor = 'default';
|
|
414
586
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
587
|
+
_onMouseDown(e) {
|
|
588
|
+
var _a;
|
|
589
|
+
if (!((_a = this._elementRef) === null || _a === void 0 ? void 0 : _a.nativeElement) || !this._canScroll) {
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
const element = this._elementRef.nativeElement;
|
|
593
|
+
element.classList.add(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
|
|
594
|
+
this._elementRef.nativeElement.style.scrollSnapType = 'none';
|
|
595
|
+
this._elementRef.nativeElement.style.scrollBehavior = 'unset';
|
|
596
|
+
this._currentScrollState = {
|
|
597
|
+
left: this._elementRef.nativeElement.scrollLeft,
|
|
598
|
+
top: this._elementRef.nativeElement.scrollTop,
|
|
599
|
+
x: e.clientX,
|
|
600
|
+
y: e.clientY,
|
|
601
|
+
};
|
|
602
|
+
fromEvent(document, 'mousemove')
|
|
603
|
+
.pipe(tap((e) => this._mouseMoveHandler(e)), takeUntil(this._mouseUp$), takeUntil(this._destroy$))
|
|
604
|
+
.subscribe();
|
|
605
|
+
fromEvent(document, 'mouseup')
|
|
606
|
+
.pipe(tap(() => this._mouseUpHandler()), take(1), takeUntil(this._destroy$))
|
|
607
|
+
.subscribe();
|
|
428
608
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
609
|
+
_mouseMoveHandler(e) {
|
|
610
|
+
var _a;
|
|
611
|
+
e.preventDefault();
|
|
612
|
+
if (!((_a = this._elementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
const dx = e.clientX - this._currentScrollState.x;
|
|
616
|
+
const dy = e.clientY - this._currentScrollState.y;
|
|
617
|
+
if (Math.abs(dx) > this._bufferUntilScroll || Math.abs(dy) > this._bufferUntilScroll) {
|
|
618
|
+
const element = this._elementRef.nativeElement;
|
|
619
|
+
if (!this._isScrolling) {
|
|
620
|
+
this._isScrolling = true;
|
|
621
|
+
element.style.cursor = 'grabbing';
|
|
622
|
+
element.classList.add(CURSOR_DRAG_SCROLLING_CLASS);
|
|
623
|
+
element.scroll({
|
|
624
|
+
top: this._currentScrollState.top - dy,
|
|
625
|
+
left: this._currentScrollState.left - dx,
|
|
626
|
+
behavior: 'smooth',
|
|
438
627
|
});
|
|
439
628
|
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
629
|
+
else {
|
|
630
|
+
element.scrollTop = this._currentScrollState.top - dy;
|
|
631
|
+
element.scrollLeft = this._currentScrollState.left - dx;
|
|
632
|
+
}
|
|
444
633
|
}
|
|
445
|
-
return this._observedElements.get(element).stream;
|
|
446
634
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
635
|
+
_mouseUpHandler() {
|
|
636
|
+
var _a;
|
|
637
|
+
this._mouseUp$.next(true);
|
|
638
|
+
this._isScrolling = false;
|
|
639
|
+
if (!((_a = this._elementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
|
|
640
|
+
return;
|
|
453
641
|
}
|
|
642
|
+
this._elementRef.nativeElement.style.scrollSnapType = '';
|
|
643
|
+
this._elementRef.nativeElement.style.scrollBehavior = '';
|
|
644
|
+
this._elementRef.nativeElement.style.cursor = 'grab';
|
|
645
|
+
this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_CLASS);
|
|
646
|
+
this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
|
|
454
647
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
this._observedElements.delete(element);
|
|
648
|
+
_updateCanScrollState() {
|
|
649
|
+
this._canScroll = elementCanScroll(this._elementRef.nativeElement);
|
|
650
|
+
if (this._canScroll) {
|
|
651
|
+
this._elementRef.nativeElement.style.cursor = 'grab';
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
this._elementRef.nativeElement.style.cursor = 'default';
|
|
463
655
|
}
|
|
464
656
|
}
|
|
465
657
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
469
|
-
type:
|
|
470
|
-
args: [{
|
|
471
|
-
|
|
658
|
+
CursorDragScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CursorDragScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
659
|
+
CursorDragScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: CursorDragScrollDirective, isStandalone: true, selector: "[etCursorDragScroll]", inputs: { enabled: ["etCursorDragScroll", "enabled"] }, providers: [DestroyService], exportAs: ["etCursorDragScroll"], ngImport: i0 });
|
|
660
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: CursorDragScrollDirective, decorators: [{
|
|
661
|
+
type: Directive,
|
|
662
|
+
args: [{
|
|
663
|
+
selector: '[etCursorDragScroll]',
|
|
664
|
+
exportAs: 'etCursorDragScroll',
|
|
665
|
+
standalone: true,
|
|
666
|
+
providers: [DestroyService],
|
|
667
|
+
}]
|
|
668
|
+
}], propDecorators: { enabled: [{
|
|
669
|
+
type: Input,
|
|
670
|
+
args: ['etCursorDragScroll']
|
|
671
|
+
}] } });
|
|
472
672
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
ClickObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ClickObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
480
|
-
ClickObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ClickObserverFactory, providedIn: 'root' });
|
|
481
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ClickObserverFactory, decorators: [{
|
|
482
|
-
type: Injectable,
|
|
483
|
-
args: [{ providedIn: 'root' }]
|
|
484
|
-
}] });
|
|
485
|
-
class ClickObserverService {
|
|
486
|
-
constructor(_clickObserverFactory) {
|
|
487
|
-
this._clickObserverFactory = _clickObserverFactory;
|
|
488
|
-
this._observedElements = new Map();
|
|
673
|
+
class DestroyDirective {
|
|
674
|
+
constructor() {
|
|
675
|
+
this._destroy$ = new Subject();
|
|
676
|
+
this.destroy$ = this._destroy$.asObservable();
|
|
489
677
|
}
|
|
490
678
|
ngOnDestroy() {
|
|
491
|
-
this.
|
|
492
|
-
|
|
493
|
-
observe(elementOrRef) {
|
|
494
|
-
const element = coerceElement(elementOrRef);
|
|
495
|
-
return new Observable((observer) => {
|
|
496
|
-
const stream = this._observeElement(element);
|
|
497
|
-
const subscription = stream.subscribe(observer);
|
|
498
|
-
return () => {
|
|
499
|
-
subscription.unsubscribe();
|
|
500
|
-
this._unobserveElement(element);
|
|
501
|
-
};
|
|
502
|
-
});
|
|
503
|
-
}
|
|
504
|
-
_observeElement(element) {
|
|
505
|
-
if (!this._observedElements.has(element)) {
|
|
506
|
-
const stream = new Subject();
|
|
507
|
-
const observer = this._clickObserverFactory.create();
|
|
508
|
-
const sub = observer.subscribe((event) => stream.next(event));
|
|
509
|
-
this._observedElements.set(element, { observer: sub, stream, count: 1 });
|
|
510
|
-
}
|
|
511
|
-
else {
|
|
512
|
-
this._observedElements.get(element).count++;
|
|
513
|
-
}
|
|
514
|
-
return this._observedElements.get(element).stream;
|
|
679
|
+
this._destroy$.next(true);
|
|
680
|
+
this._destroy$.unsubscribe();
|
|
515
681
|
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
682
|
+
}
|
|
683
|
+
DestroyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DestroyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
684
|
+
DestroyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: DestroyDirective, isStandalone: true, ngImport: i0 });
|
|
685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: DestroyDirective, decorators: [{
|
|
686
|
+
type: Directive,
|
|
687
|
+
args: [{
|
|
688
|
+
standalone: true,
|
|
689
|
+
}]
|
|
690
|
+
}] });
|
|
691
|
+
|
|
692
|
+
class LetContext {
|
|
693
|
+
constructor() {
|
|
694
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
695
|
+
this.$implicit = null;
|
|
696
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
697
|
+
this.etLet = null;
|
|
523
698
|
}
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
class LetDirective {
|
|
702
|
+
constructor(_viewContainer, templateRef) {
|
|
703
|
+
this._viewContainer = _viewContainer;
|
|
704
|
+
this._context = new LetContext();
|
|
705
|
+
this._templateRef = null;
|
|
706
|
+
this._viewRef = null;
|
|
707
|
+
this._templateRef = templateRef;
|
|
533
708
|
}
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ClickObserverService, decorators: [{
|
|
538
|
-
type: Injectable,
|
|
539
|
-
args: [{ providedIn: 'root' }]
|
|
540
|
-
}], ctorParameters: function () { return [{ type: ClickObserverFactory }]; } });
|
|
541
|
-
|
|
542
|
-
class DestroyService {
|
|
543
|
-
constructor() {
|
|
544
|
-
this._destroy$ = new Subject();
|
|
709
|
+
set etLet(value) {
|
|
710
|
+
this._context.$implicit = this._context.etLet = value;
|
|
711
|
+
this._updateView();
|
|
545
712
|
}
|
|
546
|
-
|
|
547
|
-
|
|
713
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
714
|
+
static ngTemplateContextGuard(dir, ctx) {
|
|
715
|
+
return true;
|
|
548
716
|
}
|
|
549
|
-
|
|
550
|
-
this.
|
|
551
|
-
|
|
717
|
+
_updateView() {
|
|
718
|
+
if (!this._viewRef) {
|
|
719
|
+
this._viewContainer.clear();
|
|
720
|
+
if (this._templateRef) {
|
|
721
|
+
this._viewRef = this._viewContainer.createEmbeddedView(this._templateRef, this._context);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
552
724
|
}
|
|
553
725
|
}
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
557
|
-
type:
|
|
726
|
+
LetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LetDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
727
|
+
LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: LetDirective, isStandalone: true, selector: "[etLet]", inputs: { etLet: "etLet" }, ngImport: i0 });
|
|
728
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: LetDirective, decorators: [{
|
|
729
|
+
type: Directive,
|
|
558
730
|
args: [{
|
|
559
|
-
|
|
731
|
+
selector: '[etLet]',
|
|
732
|
+
standalone: true,
|
|
560
733
|
}]
|
|
561
|
-
}] }
|
|
734
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { etLet: [{
|
|
735
|
+
type: Input
|
|
736
|
+
}] } });
|
|
562
737
|
|
|
563
|
-
class
|
|
738
|
+
class ObserveContentDirective {
|
|
564
739
|
constructor() {
|
|
565
|
-
this.
|
|
740
|
+
this._contentObserver = inject(ContentObserverService);
|
|
566
741
|
this._elementRef = inject(ElementRef);
|
|
567
742
|
this._ngZone = inject(NgZone);
|
|
568
743
|
this.event = new EventEmitter();
|
|
@@ -594,9 +769,9 @@ class ObserveResizeDirective {
|
|
|
594
769
|
}
|
|
595
770
|
_subscribe() {
|
|
596
771
|
this._unsubscribe();
|
|
597
|
-
const stream = this.
|
|
772
|
+
const stream = this._contentObserver.observe(this._elementRef);
|
|
598
773
|
this._ngZone.runOutsideAngular(() => {
|
|
599
|
-
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.event);
|
|
774
|
+
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime$1(this.debounce)) : stream).subscribe(this.event);
|
|
600
775
|
});
|
|
601
776
|
}
|
|
602
777
|
_unsubscribe() {
|
|
@@ -604,29 +779,29 @@ class ObserveResizeDirective {
|
|
|
604
779
|
(_a = this._currentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
605
780
|
}
|
|
606
781
|
}
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
782
|
+
ObserveContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
783
|
+
ObserveContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ObserveContentDirective, isStandalone: true, selector: "[etObserveContent]", inputs: { disabled: ["etObserveContentDisabled", "disabled"], debounce: ["etObserveContentDebounce", "debounce"] }, outputs: { event: "etObserveContent" }, exportAs: ["etObserveContent"], ngImport: i0 });
|
|
784
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ObserveContentDirective, decorators: [{
|
|
610
785
|
type: Directive,
|
|
611
786
|
args: [{
|
|
612
|
-
selector: '[
|
|
613
|
-
exportAs: '
|
|
787
|
+
selector: '[etObserveContent]',
|
|
788
|
+
exportAs: 'etObserveContent',
|
|
614
789
|
standalone: true,
|
|
615
790
|
}]
|
|
616
791
|
}], propDecorators: { event: [{
|
|
617
792
|
type: Output,
|
|
618
|
-
args: ['
|
|
793
|
+
args: ['etObserveContent']
|
|
619
794
|
}], disabled: [{
|
|
620
795
|
type: Input,
|
|
621
|
-
args: ['
|
|
796
|
+
args: ['etObserveContentDisabled']
|
|
622
797
|
}], debounce: [{
|
|
623
798
|
type: Input,
|
|
624
|
-
args: ['
|
|
799
|
+
args: ['etObserveContentDebounce']
|
|
625
800
|
}] } });
|
|
626
801
|
|
|
627
|
-
class
|
|
802
|
+
class ObserveResizeDirective {
|
|
628
803
|
constructor() {
|
|
629
|
-
this.
|
|
804
|
+
this._resizeObserver = inject(ResizeObserverService);
|
|
630
805
|
this._elementRef = inject(ElementRef);
|
|
631
806
|
this._ngZone = inject(NgZone);
|
|
632
807
|
this.event = new EventEmitter();
|
|
@@ -658,9 +833,9 @@ class ObserveContentDirective {
|
|
|
658
833
|
}
|
|
659
834
|
_subscribe() {
|
|
660
835
|
this._unsubscribe();
|
|
661
|
-
const stream = this.
|
|
836
|
+
const stream = this._resizeObserver.observe(this._elementRef);
|
|
662
837
|
this._ngZone.runOutsideAngular(() => {
|
|
663
|
-
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime
|
|
838
|
+
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.event);
|
|
664
839
|
});
|
|
665
840
|
}
|
|
666
841
|
_unsubscribe() {
|
|
@@ -668,80 +843,60 @@ class ObserveContentDirective {
|
|
|
668
843
|
(_a = this._currentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
669
844
|
}
|
|
670
845
|
}
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
846
|
+
ObserveResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
847
|
+
ObserveResizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ObserveResizeDirective, isStandalone: true, selector: "[etObserveResize]", inputs: { disabled: ["etObserveResizeDisabled", "disabled"], debounce: ["etObserveResizeDebounce", "debounce"] }, outputs: { event: "etObserveResize" }, exportAs: ["etObserveResize"], ngImport: i0 });
|
|
848
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ObserveResizeDirective, decorators: [{
|
|
674
849
|
type: Directive,
|
|
675
850
|
args: [{
|
|
676
|
-
selector: '[
|
|
677
|
-
exportAs: '
|
|
851
|
+
selector: '[etObserveResize]',
|
|
852
|
+
exportAs: 'etObserveResize',
|
|
678
853
|
standalone: true,
|
|
679
854
|
}]
|
|
680
855
|
}], propDecorators: { event: [{
|
|
681
856
|
type: Output,
|
|
682
|
-
args: ['
|
|
857
|
+
args: ['etObserveResize']
|
|
683
858
|
}], disabled: [{
|
|
684
859
|
type: Input,
|
|
685
|
-
args: ['
|
|
860
|
+
args: ['etObserveResizeDisabled']
|
|
686
861
|
}], debounce: [{
|
|
687
862
|
type: Input,
|
|
688
|
-
args: ['
|
|
863
|
+
args: ['etObserveResizeDebounce']
|
|
689
864
|
}] } });
|
|
690
865
|
|
|
691
|
-
|
|
866
|
+
const SCROLL_OBSERVER_FIRST_ELEMENT_CLASS = 'et-scroll-observer-first-element';
|
|
867
|
+
class ScrollObserverFirstElementDirective {
|
|
692
868
|
constructor() {
|
|
693
|
-
this.
|
|
694
|
-
this._clickObserverService = inject(ClickObserverService);
|
|
695
|
-
this._subscription = null;
|
|
696
|
-
this.etClickOutside = new EventEmitter();
|
|
869
|
+
this._isFirstElement = false;
|
|
697
870
|
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
this._subscription = this._clickObserverService.observe(this._elementRef.nativeElement).subscribe((event) => {
|
|
701
|
-
const activeElement = event.target;
|
|
702
|
-
const isInside = this._elementRef.nativeElement.contains(activeElement);
|
|
703
|
-
if (!isInside) {
|
|
704
|
-
this.etClickOutside.emit(event);
|
|
705
|
-
}
|
|
706
|
-
});
|
|
707
|
-
});
|
|
871
|
+
get isFirstElement() {
|
|
872
|
+
return this._isFirstElement;
|
|
708
873
|
}
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
(_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
874
|
+
set isFirstElement(value) {
|
|
875
|
+
this._isFirstElement = coerceBooleanProperty(value);
|
|
712
876
|
}
|
|
713
877
|
}
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
878
|
+
ScrollObserverFirstElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ScrollObserverFirstElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
879
|
+
ScrollObserverFirstElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ScrollObserverFirstElementDirective, isStandalone: true, selector: "[etScrollObserverFirstElement]", inputs: { isFirstElement: ["etScrollObserverFirstElement", "isFirstElement"] }, host: { properties: { "class.et-scroll-observer-first-element": "this.isFirstElement" } }, ngImport: i0 });
|
|
880
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ScrollObserverFirstElementDirective, decorators: [{
|
|
717
881
|
type: Directive,
|
|
718
882
|
args: [{
|
|
719
|
-
selector: '[
|
|
883
|
+
selector: '[etScrollObserverFirstElement]',
|
|
720
884
|
standalone: true,
|
|
721
885
|
}]
|
|
722
|
-
}], propDecorators: {
|
|
723
|
-
type:
|
|
886
|
+
}], propDecorators: { isFirstElement: [{
|
|
887
|
+
type: Input,
|
|
888
|
+
args: ['etScrollObserverFirstElement']
|
|
889
|
+
}, {
|
|
890
|
+
type: HostBinding,
|
|
891
|
+
args: [`class.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`]
|
|
724
892
|
}] } });
|
|
725
893
|
|
|
726
|
-
const provideViewportConfig = (viewportConfig) => {
|
|
727
|
-
return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
|
|
728
|
-
};
|
|
729
|
-
|
|
730
|
-
const clamp = (value, min = 0, max = 100) => {
|
|
731
|
-
return Math.max(min, Math.min(max, value));
|
|
732
|
-
};
|
|
733
|
-
|
|
734
|
-
const elementCanScroll = (element) => {
|
|
735
|
-
const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
|
|
736
|
-
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
737
|
-
};
|
|
738
|
-
|
|
739
894
|
const SCROLL_OBSERVER_IGNORE_TARGET_CLASS = 'et-scroll-observer-ignore-target';
|
|
740
895
|
class ScrollObserverIgnoreTargetDirective {
|
|
741
896
|
}
|
|
742
|
-
ScrollObserverIgnoreTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
743
|
-
ScrollObserverIgnoreTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
744
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
897
|
+
ScrollObserverIgnoreTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
898
|
+
ScrollObserverIgnoreTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ScrollObserverIgnoreTargetDirective, isStandalone: true, selector: "[etScrollObserverIgnoreTarget]", host: { classAttribute: "et-scroll-observer-ignore-target" }, ngImport: i0 });
|
|
899
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, decorators: [{
|
|
745
900
|
type: Directive,
|
|
746
901
|
args: [{
|
|
747
902
|
selector: '[etScrollObserverIgnoreTarget]',
|
|
@@ -752,6 +907,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImpor
|
|
|
752
907
|
}]
|
|
753
908
|
}] });
|
|
754
909
|
|
|
910
|
+
const SCROLL_OBSERVER_LAST_ELEMENT_CLASS = 'et-scroll-observer-last-element';
|
|
911
|
+
class ScrollObserverLastElementDirective {
|
|
912
|
+
constructor() {
|
|
913
|
+
this._isLastElement = false;
|
|
914
|
+
}
|
|
915
|
+
get isLastElement() {
|
|
916
|
+
return this._isLastElement;
|
|
917
|
+
}
|
|
918
|
+
set isLastElement(value) {
|
|
919
|
+
this._isLastElement = coerceBooleanProperty(value);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
ScrollObserverLastElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ScrollObserverLastElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
923
|
+
ScrollObserverLastElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ScrollObserverLastElementDirective, isStandalone: true, selector: "[etScrollObserverLastElement]", inputs: { isLastElement: ["etScrollObserverLastElement", "isLastElement"] }, host: { properties: { "class.et-scroll-observer-last-element": "this.isLastElement" }, classAttribute: "et-scroll-observer-last-element" }, ngImport: i0 });
|
|
924
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ScrollObserverLastElementDirective, decorators: [{
|
|
925
|
+
type: Directive,
|
|
926
|
+
args: [{
|
|
927
|
+
selector: '[etScrollObserverLastElement]',
|
|
928
|
+
standalone: true,
|
|
929
|
+
host: {
|
|
930
|
+
class: SCROLL_OBSERVER_LAST_ELEMENT_CLASS,
|
|
931
|
+
},
|
|
932
|
+
}]
|
|
933
|
+
}], propDecorators: { isLastElement: [{
|
|
934
|
+
type: Input,
|
|
935
|
+
args: ['etScrollObserverLastElement']
|
|
936
|
+
}, {
|
|
937
|
+
type: HostBinding,
|
|
938
|
+
args: [`class.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`]
|
|
939
|
+
}] } });
|
|
940
|
+
|
|
755
941
|
const OBSERVE_SCROLL_STATE = new InjectionToken('OBSERVE_SCROLL_STATE');
|
|
756
942
|
|
|
757
943
|
class ObserveScrollStateDirective {
|
|
@@ -770,10 +956,18 @@ class ObserveScrollStateDirective {
|
|
|
770
956
|
this.etObserveScrollState = new EventEmitter();
|
|
771
957
|
}
|
|
772
958
|
get _firstCurrentChild() {
|
|
959
|
+
const explicitFirstElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`);
|
|
960
|
+
if (explicitFirstElement) {
|
|
961
|
+
return explicitFirstElement;
|
|
962
|
+
}
|
|
773
963
|
const element = this._elementRef.nativeElement.children[0];
|
|
774
964
|
return this._getNonIgnoredChild(element, 'next');
|
|
775
965
|
}
|
|
776
966
|
get _lastCurrentChild() {
|
|
967
|
+
const explicitLastElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`);
|
|
968
|
+
if (explicitLastElement) {
|
|
969
|
+
return explicitLastElement;
|
|
970
|
+
}
|
|
777
971
|
const element = this._elementRef.nativeElement.children[this._elementRef.nativeElement.children.length - 1];
|
|
778
972
|
return this._getNonIgnoredChild(element, 'previous');
|
|
779
973
|
}
|
|
@@ -797,7 +991,8 @@ class ObserveScrollStateDirective {
|
|
|
797
991
|
this._resizeObserverService
|
|
798
992
|
.observe(this._elementRef.nativeElement)
|
|
799
993
|
.pipe(debounceTime(25), tap(() => {
|
|
800
|
-
|
|
994
|
+
const canScroll = elementCanScroll(this._elementRef.nativeElement);
|
|
995
|
+
if ((!this._intersectionObserver && canScroll) || (this._intersectionObserver && !canScroll)) {
|
|
801
996
|
this._checkChildren();
|
|
802
997
|
}
|
|
803
998
|
}), takeUntil(this._destroy$))
|
|
@@ -849,6 +1044,7 @@ class ObserveScrollStateDirective {
|
|
|
849
1044
|
var _a;
|
|
850
1045
|
(_a = this._intersectionObserver) === null || _a === void 0 ? void 0 : _a.observe(element);
|
|
851
1046
|
this._observedChildren[child] = element;
|
|
1047
|
+
element.classList.add(`et-scroll-observer-observing-${child}-element`);
|
|
852
1048
|
}
|
|
853
1049
|
_unobserveChild(child) {
|
|
854
1050
|
var _a;
|
|
@@ -856,6 +1052,7 @@ class ObserveScrollStateDirective {
|
|
|
856
1052
|
if (!observedChild) {
|
|
857
1053
|
return;
|
|
858
1054
|
}
|
|
1055
|
+
observedChild.classList.remove('et-scroll-observer-observing-first-element', 'et-scroll-observer-observing-last-element');
|
|
859
1056
|
(_a = this._intersectionObserver) === null || _a === void 0 ? void 0 : _a.unobserve(observedChild);
|
|
860
1057
|
this._observedChildren[child] = null;
|
|
861
1058
|
}
|
|
@@ -878,14 +1075,15 @@ class ObserveScrollStateDirective {
|
|
|
878
1075
|
return element;
|
|
879
1076
|
}
|
|
880
1077
|
}
|
|
881
|
-
ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
882
|
-
ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
1078
|
+
ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1079
|
+
ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: ObserveScrollStateDirective, isStandalone: true, selector: "[etObserveScrollState]", inputs: { observerRootMargin: "observerRootMargin", observerThreshold: "observerThreshold" }, outputs: { etObserveScrollState: "etObserveScrollState" }, providers: [
|
|
883
1080
|
{
|
|
884
1081
|
provide: OBSERVE_SCROLL_STATE,
|
|
885
1082
|
useExisting: ObserveScrollStateDirective,
|
|
886
1083
|
},
|
|
1084
|
+
DestroyService,
|
|
887
1085
|
], exportAs: ["etObserveScrollState"], ngImport: i0 });
|
|
888
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1086
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ObserveScrollStateDirective, decorators: [{
|
|
889
1087
|
type: Directive,
|
|
890
1088
|
args: [{
|
|
891
1089
|
selector: '[etObserveScrollState]',
|
|
@@ -896,6 +1094,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImpor
|
|
|
896
1094
|
provide: OBSERVE_SCROLL_STATE,
|
|
897
1095
|
useExisting: ObserveScrollStateDirective,
|
|
898
1096
|
},
|
|
1097
|
+
DestroyService,
|
|
899
1098
|
],
|
|
900
1099
|
}]
|
|
901
1100
|
}], propDecorators: { observerRootMargin: [{
|
|
@@ -906,126 +1105,203 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImpor
|
|
|
906
1105
|
type: Output
|
|
907
1106
|
}] } });
|
|
908
1107
|
|
|
909
|
-
|
|
910
|
-
|
|
1108
|
+
class RepeatDirective {
|
|
1109
|
+
constructor(_mainTemplateRef, _viewContainerRef) {
|
|
1110
|
+
this._mainTemplateRef = _mainTemplateRef;
|
|
1111
|
+
this._viewContainerRef = _viewContainerRef;
|
|
1112
|
+
this._repeatCount = 2;
|
|
1113
|
+
}
|
|
1114
|
+
get repeatCount() {
|
|
1115
|
+
return this._repeatCount;
|
|
1116
|
+
}
|
|
1117
|
+
set repeatCount(value) {
|
|
1118
|
+
this._repeatCount = coerceNumberProperty(value);
|
|
1119
|
+
}
|
|
1120
|
+
ngOnInit() {
|
|
1121
|
+
this._render();
|
|
1122
|
+
}
|
|
1123
|
+
_render() {
|
|
1124
|
+
for (let i = 0; i < this.repeatCount; i++) {
|
|
1125
|
+
this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: RepeatDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1130
|
+
RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
|
|
1131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: RepeatDirective, decorators: [{
|
|
1132
|
+
type: Directive,
|
|
1133
|
+
args: [{
|
|
1134
|
+
selector: '[etRepeat]',
|
|
1135
|
+
standalone: true,
|
|
1136
|
+
}]
|
|
1137
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { repeatCount: [{
|
|
1138
|
+
type: Input,
|
|
1139
|
+
args: ['etRepeat']
|
|
1140
|
+
}] } });
|
|
911
1141
|
|
|
912
|
-
|
|
1142
|
+
const SEO_DIRECTIVE_TOKEN = new InjectionToken('SEO_DIRECTIVE_TOKEN');
|
|
1143
|
+
|
|
1144
|
+
const mergeSeoConfig = (config, parentConfig) => {
|
|
1145
|
+
return Object.assign(Object.assign({}, parentConfig), config);
|
|
1146
|
+
};
|
|
1147
|
+
|
|
1148
|
+
class SeoDirective {
|
|
913
1149
|
constructor() {
|
|
914
|
-
this.
|
|
915
|
-
this.
|
|
916
|
-
this.
|
|
917
|
-
this.
|
|
918
|
-
this.
|
|
919
|
-
this.
|
|
920
|
-
this._isScrolling = false;
|
|
921
|
-
this._canScroll = false;
|
|
922
|
-
this._currentScrollState = {
|
|
923
|
-
top: 0,
|
|
924
|
-
left: 0,
|
|
925
|
-
x: 0,
|
|
926
|
-
y: 0,
|
|
927
|
-
};
|
|
1150
|
+
this._metaService = inject(Meta);
|
|
1151
|
+
this._titleService = inject(Title);
|
|
1152
|
+
this._onDeactivate$ = new Subject();
|
|
1153
|
+
this._isDeactivated = false;
|
|
1154
|
+
this.parent = inject(SEO_DIRECTIVE_TOKEN, { optional: true, skipSelf: true });
|
|
1155
|
+
this._config = {};
|
|
928
1156
|
}
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
this._contentObserverService.observe(this._elementRef.nativeElement),
|
|
932
|
-
this._resizeObserverService.observe(this._elementRef.nativeElement),
|
|
933
|
-
])
|
|
934
|
-
.pipe(tap(() => this._updateCanScrollState()), takeUntil(this._destroy$))
|
|
935
|
-
.subscribe();
|
|
936
|
-
fromEvent(this._elementRef.nativeElement, 'mousedown')
|
|
937
|
-
.pipe(tap((e) => this._onMouseDown(e)), takeUntil(this._destroy$))
|
|
938
|
-
.subscribe();
|
|
939
|
-
this._updateCanScrollState();
|
|
1157
|
+
get config() {
|
|
1158
|
+
return this._config;
|
|
940
1159
|
}
|
|
941
|
-
|
|
1160
|
+
ngOnInit() {
|
|
942
1161
|
var _a;
|
|
943
|
-
|
|
944
|
-
return;
|
|
945
|
-
}
|
|
946
|
-
const element = this._elementRef.nativeElement;
|
|
947
|
-
element.classList.add(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
|
|
948
|
-
this._elementRef.nativeElement.style.scrollSnapType = 'none';
|
|
949
|
-
this._elementRef.nativeElement.style.scrollBehavior = 'unset';
|
|
950
|
-
this._currentScrollState = {
|
|
951
|
-
left: this._elementRef.nativeElement.scrollLeft,
|
|
952
|
-
top: this._elementRef.nativeElement.scrollTop,
|
|
953
|
-
x: e.clientX,
|
|
954
|
-
y: e.clientY,
|
|
955
|
-
};
|
|
956
|
-
fromEvent(document, 'mousemove')
|
|
957
|
-
.pipe(tap((e) => this._mouseMoveHandler(e)), takeUntil(this._mouseUp$), takeUntil(this._destroy$))
|
|
958
|
-
.subscribe();
|
|
959
|
-
fromEvent(document, 'mouseup')
|
|
960
|
-
.pipe(tap(() => this._mouseUpHandler()), take(1), takeUntil(this._destroy$))
|
|
961
|
-
.subscribe();
|
|
1162
|
+
(_a = this.parent) === null || _a === void 0 ? void 0 : _a._deactivate();
|
|
962
1163
|
}
|
|
963
|
-
|
|
1164
|
+
ngOnDestroy() {
|
|
964
1165
|
var _a;
|
|
965
|
-
|
|
966
|
-
|
|
1166
|
+
this._deactivate();
|
|
1167
|
+
this._cleanUp();
|
|
1168
|
+
(_a = this.parent) === null || _a === void 0 ? void 0 : _a._activate();
|
|
1169
|
+
}
|
|
1170
|
+
updateConfig(config) {
|
|
1171
|
+
var _a;
|
|
1172
|
+
this._config = mergeSeoConfig(config, ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.config) || {});
|
|
1173
|
+
if (this._isDeactivated) {
|
|
967
1174
|
return;
|
|
968
1175
|
}
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
1176
|
+
this._deactivate();
|
|
1177
|
+
this._activate();
|
|
1178
|
+
}
|
|
1179
|
+
_activate() {
|
|
1180
|
+
this._onDeactivate$.next(false);
|
|
1181
|
+
this._isDeactivated = false;
|
|
1182
|
+
for (const [key, value] of Object.entries(this._config)) {
|
|
1183
|
+
if (value instanceof Observable) {
|
|
1184
|
+
value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));
|
|
1185
|
+
}
|
|
1186
|
+
else if (Array.isArray(value)) {
|
|
1187
|
+
value.forEach((value) => {
|
|
1188
|
+
if (value instanceof Observable) {
|
|
1189
|
+
value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));
|
|
1190
|
+
}
|
|
1191
|
+
else {
|
|
1192
|
+
this._update(key, value);
|
|
1193
|
+
}
|
|
981
1194
|
});
|
|
982
1195
|
}
|
|
1196
|
+
else if (typeof value === 'object' && value !== null) {
|
|
1197
|
+
for (const [subKey, subValue] of Object.entries(value)) {
|
|
1198
|
+
if (subValue instanceof Observable) {
|
|
1199
|
+
subValue.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(`${key}:${subKey}`, value));
|
|
1200
|
+
}
|
|
1201
|
+
else {
|
|
1202
|
+
this._update(`${key}:${subKey}`, subValue);
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
983
1206
|
else {
|
|
984
|
-
|
|
985
|
-
element.scrollLeft = this._currentScrollState.left - dx;
|
|
1207
|
+
this._update(key, value);
|
|
986
1208
|
}
|
|
987
1209
|
}
|
|
988
1210
|
}
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
this.
|
|
992
|
-
this._isScrolling = false;
|
|
993
|
-
if (!((_a = this._elementRef) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
|
|
994
|
-
return;
|
|
995
|
-
}
|
|
996
|
-
this._elementRef.nativeElement.style.scrollSnapType = '';
|
|
997
|
-
this._elementRef.nativeElement.style.scrollBehavior = '';
|
|
998
|
-
this._elementRef.nativeElement.style.cursor = 'grab';
|
|
999
|
-
this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_CLASS);
|
|
1000
|
-
this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
|
|
1211
|
+
_deactivate() {
|
|
1212
|
+
this._onDeactivate$.next(true);
|
|
1213
|
+
this._isDeactivated = true;
|
|
1001
1214
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1215
|
+
_update(key, value) {
|
|
1216
|
+
switch (key) {
|
|
1217
|
+
case 'title':
|
|
1218
|
+
if (value && typeof value === 'string') {
|
|
1219
|
+
this._titleService.setTitle(value);
|
|
1220
|
+
}
|
|
1221
|
+
break;
|
|
1222
|
+
case 'canonical':
|
|
1223
|
+
{
|
|
1224
|
+
const link = document.querySelector(`link[rel="${key}"]`);
|
|
1225
|
+
if (link) {
|
|
1226
|
+
link.setAttribute('href', value);
|
|
1227
|
+
}
|
|
1228
|
+
else {
|
|
1229
|
+
const newLink = document.createElement('link');
|
|
1230
|
+
newLink.setAttribute('rel', key);
|
|
1231
|
+
newLink.setAttribute('href', value);
|
|
1232
|
+
document.head.appendChild(newLink);
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
break;
|
|
1236
|
+
case 'alternate':
|
|
1237
|
+
{
|
|
1238
|
+
const link = document.querySelector(`link[rel="${key}"][hreflang="${value.hreflang}"]`);
|
|
1239
|
+
if (link) {
|
|
1240
|
+
link.setAttribute('href', value.href);
|
|
1241
|
+
}
|
|
1242
|
+
else {
|
|
1243
|
+
const newLink = document.createElement('link');
|
|
1244
|
+
newLink.setAttribute('rel', key);
|
|
1245
|
+
newLink.setAttribute('hreflang', value.hreflang);
|
|
1246
|
+
newLink.setAttribute('href', value.href);
|
|
1247
|
+
document.head.appendChild(newLink);
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
break;
|
|
1251
|
+
default:
|
|
1252
|
+
if (value !== undefined && value !== null) {
|
|
1253
|
+
const val = Array.isArray(value) ? value.join(', ') : value;
|
|
1254
|
+
this._metaService.updateTag({ name: key, content: val });
|
|
1255
|
+
}
|
|
1256
|
+
else {
|
|
1257
|
+
this._metaService.removeTag(`name="${key}"`);
|
|
1258
|
+
}
|
|
1259
|
+
break;
|
|
1009
1260
|
}
|
|
1010
1261
|
}
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1262
|
+
_cleanUp() {
|
|
1263
|
+
var _a, _b, _c, _d, _e;
|
|
1264
|
+
for (const key in this._config) {
|
|
1265
|
+
if (key === 'alternate') {
|
|
1266
|
+
const links = document.querySelectorAll(`link[rel="${key}"]`);
|
|
1267
|
+
links.forEach((link) => {
|
|
1268
|
+
link.remove();
|
|
1269
|
+
});
|
|
1270
|
+
continue;
|
|
1271
|
+
}
|
|
1272
|
+
if (key === 'canonical') {
|
|
1273
|
+
const link = document.querySelector(`link[rel="${key}"]`);
|
|
1274
|
+
if (link) {
|
|
1275
|
+
link.remove();
|
|
1276
|
+
}
|
|
1277
|
+
continue;
|
|
1278
|
+
}
|
|
1279
|
+
if (typeof this._config[key] === 'object' &&
|
|
1280
|
+
this._config[key] !== null &&
|
|
1281
|
+
!(this._config[key] instanceof Observable)) {
|
|
1282
|
+
for (const subKey in this._config[key]) {
|
|
1283
|
+
const parentValue = (_c = (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b[key]) === null || _c === void 0 ? void 0 : _c[subKey];
|
|
1284
|
+
if (parentValue === undefined) {
|
|
1285
|
+
this._update(`${key}:${subKey}`, undefined);
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
else {
|
|
1290
|
+
const parentValue = (_e = (_d = this.parent) === null || _d === void 0 ? void 0 : _d.config) === null || _e === void 0 ? void 0 : _e[key];
|
|
1291
|
+
if (parentValue === undefined) {
|
|
1292
|
+
this._update(key, null);
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1017
1295
|
}
|
|
1018
|
-
return false;
|
|
1019
1296
|
}
|
|
1020
1297
|
}
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1298
|
+
SeoDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: SeoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1299
|
+
SeoDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: SeoDirective, isStandalone: true, providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }], ngImport: i0 });
|
|
1300
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: SeoDirective, decorators: [{
|
|
1024
1301
|
type: Directive,
|
|
1025
1302
|
args: [{
|
|
1026
|
-
selector: '[etCursorDragScroll]',
|
|
1027
|
-
exportAs: 'etCursorDragScroll',
|
|
1028
1303
|
standalone: true,
|
|
1304
|
+
providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }],
|
|
1029
1305
|
}]
|
|
1030
1306
|
}] });
|
|
1031
1307
|
|
|
@@ -1039,9 +1315,9 @@ class ToArrayPipe {
|
|
|
1039
1315
|
this.transform = toArray;
|
|
1040
1316
|
}
|
|
1041
1317
|
}
|
|
1042
|
-
ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1043
|
-
ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
1044
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1318
|
+
ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1319
|
+
ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" });
|
|
1320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ToArrayPipe, decorators: [{
|
|
1045
1321
|
type: Pipe,
|
|
1046
1322
|
args: [{ name: 'toArray', standalone: true }]
|
|
1047
1323
|
}] });
|
|
@@ -1050,5 +1326,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImpor
|
|
|
1050
1326
|
* Generated bundle index. Do not edit.
|
|
1051
1327
|
*/
|
|
1052
1328
|
|
|
1053
|
-
export { ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyService, FocusVisibleService, LetContext, LetDirective, Memo, MutationObserverFactory, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, ScrollObserverIgnoreTargetDirective, ToArrayPipe, VIEWPORT_CONFIG, ViewportService, clamp, elementCanScroll, provideViewportConfig, toArray, toArrayTrackByFn };
|
|
1329
|
+
export { ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyDirective, DestroyService, FocusVisibleService, LetContext, LetDirective, Memo, MutationObserverFactory, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SeoDirective, ToArrayPipe, VIEWPORT_CONFIG, ViewportService, clamp, elementCanScroll, mergeSeoConfig, provideViewportConfig, toArray, toArrayTrackByFn };
|
|
1054
1330
|
//# sourceMappingURL=ethlete-core.mjs.map
|