@ethlete/core 0.2.0-next.1 → 0.2.0-next.3
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/decorators/index.mjs +2 -0
- package/esm2020/lib/decorators/memo/memo.decorator.mjs +2 -2
- package/esm2020/lib/directives/let/let.directive.mjs +3 -3
- package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +68 -0
- package/esm2020/lib/directives/observe-content/public-api.mjs +2 -0
- package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +68 -0
- package/esm2020/lib/directives/observe-resize/public-api.mjs +2 -0
- package/esm2020/lib/directives/public-api.mjs +3 -1
- package/esm2020/lib/directives/repeat/repeat.directive.mjs +3 -3
- package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +3 -3
- package/esm2020/lib/services/content-observer.service.mjs +79 -0
- package/esm2020/lib/services/focus-visible.service.mjs +3 -3
- package/esm2020/lib/services/index.mjs +2 -0
- package/esm2020/lib/services/public-api.mjs +3 -1
- package/esm2020/lib/services/resize-observer.service.mjs +75 -0
- package/esm2020/lib/services/viewport.service.mjs +32 -7
- package/fesm2015/ethlete-core.mjs +335 -35
- package/fesm2015/ethlete-core.mjs.map +1 -1
- package/fesm2020/ethlete-core.mjs +333 -35
- package/fesm2020/ethlete-core.mjs.map +1 -1
- package/lib/decorators/index.d.ts +1 -0
- package/lib/directives/observe-content/observe-content.directive.d.ts +22 -0
- package/lib/directives/observe-content/public-api.d.ts +1 -0
- package/lib/directives/observe-resize/observe-resize.directive.d.ts +22 -0
- package/lib/directives/observe-resize/public-api.d.ts +1 -0
- package/lib/directives/public-api.d.ts +2 -0
- package/lib/services/content-observer.service.d.ts +21 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/public-api.d.ts +2 -0
- package/lib/services/resize-observer.service.d.ts +21 -0
- package/lib/services/viewport.service.d.ts +3 -0
- package/package.json +2 -3
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Directive, Input,
|
|
3
|
-
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import { InjectionToken, Directive, Input, Injectable, Inject, Optional, inject, ElementRef, NgZone, EventEmitter, Output, Pipe } from '@angular/core';
|
|
3
|
+
import { coerceNumberProperty, coerceElement, coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
|
+
import { BehaviorSubject, combineLatest, map, shareReplay, Observable, Subject, debounceTime } from 'rxjs';
|
|
4
5
|
import { __decorate, __metadata } from 'tslib';
|
|
5
|
-
import { BehaviorSubject, map, shareReplay } from 'rxjs';
|
|
6
6
|
import * as i1 from '@angular/cdk/layout';
|
|
7
7
|
import { DOCUMENT } from '@angular/common';
|
|
8
|
+
import { debounceTime as debounceTime$1 } from 'rxjs/operators';
|
|
8
9
|
|
|
9
10
|
const VIEWPORT_CONFIG = new InjectionToken('ViewportConfig');
|
|
10
11
|
/**
|
|
@@ -37,7 +38,7 @@ function memoize(func, resolver, cache) {
|
|
|
37
38
|
memoized.cache = cache;
|
|
38
39
|
return memoized;
|
|
39
40
|
}
|
|
40
|
-
const defaultResolver = (...args) => args
|
|
41
|
+
const defaultResolver = (...args) => args.join('-');
|
|
41
42
|
const Memo = (config = {}) => (_, __, descriptor) => {
|
|
42
43
|
var _a, _b;
|
|
43
44
|
if (typeof descriptor.value !== 'function') {
|
|
@@ -83,9 +84,9 @@ class LetDirective {
|
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
|
-
LetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
87
|
-
LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
87
|
+
LetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: LetDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
88
|
+
LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: LetDirective, isStandalone: true, selector: "[etLet]", inputs: { etLet: "etLet" }, ngImport: i0 });
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: LetDirective, decorators: [{
|
|
89
90
|
type: Directive,
|
|
90
91
|
args: [{
|
|
91
92
|
selector: '[etLet]',
|
|
@@ -116,9 +117,9 @@ class RepeatDirective {
|
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
|
-
RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
120
|
-
RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
120
|
+
RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RepeatDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
121
|
+
RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RepeatDirective, decorators: [{
|
|
122
123
|
type: Directive,
|
|
123
124
|
args: [{
|
|
124
125
|
selector: '[etRepeat]',
|
|
@@ -129,23 +130,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImpor
|
|
|
129
130
|
args: ['etRepeat']
|
|
130
131
|
}] } });
|
|
131
132
|
|
|
132
|
-
const toArray = (value) => {
|
|
133
|
-
return Array.from({ length: value }, (_, i) => i);
|
|
134
|
-
};
|
|
135
|
-
const toArrayTrackByFn = (_, item) => item;
|
|
136
|
-
|
|
137
|
-
class ToArrayPipe {
|
|
138
|
-
constructor() {
|
|
139
|
-
this.transform = toArray;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
143
|
-
ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.6", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" });
|
|
144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: ToArrayPipe, decorators: [{
|
|
145
|
-
type: Pipe,
|
|
146
|
-
args: [{ name: 'toArray', standalone: true }]
|
|
147
|
-
}] });
|
|
148
|
-
|
|
149
133
|
class ViewportService {
|
|
150
134
|
constructor(_viewportConfig, _breakpointObserver) {
|
|
151
135
|
this._breakpointObserver = _breakpointObserver;
|
|
@@ -155,6 +139,7 @@ class ViewportService {
|
|
|
155
139
|
this._isLg$ = new BehaviorSubject(false);
|
|
156
140
|
this._isXl$ = new BehaviorSubject(false);
|
|
157
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());
|
|
158
143
|
this._viewportConfig = _viewportConfig || DEFAULT_VIEWPORT_CONFIG;
|
|
159
144
|
this._observeDefaultBreakpoints();
|
|
160
145
|
}
|
|
@@ -194,6 +179,9 @@ class ViewportService {
|
|
|
194
179
|
get is2Xl() {
|
|
195
180
|
return this._is2Xl$.value;
|
|
196
181
|
}
|
|
182
|
+
get currentViewport() {
|
|
183
|
+
return this.getCurrentViewport([this.isXs, this.isSm, this.isMd, this.isLg, this.isXl, this.is2Xl]);
|
|
184
|
+
}
|
|
197
185
|
observe(options) {
|
|
198
186
|
const mediaQuery = this._buildMediaQuery(options);
|
|
199
187
|
return this._breakpointObserver.observe(mediaQuery).pipe(map((x) => x.matches), shareReplay());
|
|
@@ -222,7 +210,7 @@ class ViewportService {
|
|
|
222
210
|
// Due to scaling, the actual size of the viewport may be a decimal number.
|
|
223
211
|
// Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px
|
|
224
212
|
// and thus not matching any of the default breakpoints.
|
|
225
|
-
return size + 0.
|
|
213
|
+
return size + 0.9;
|
|
226
214
|
}
|
|
227
215
|
_buildMediaQuery(options) {
|
|
228
216
|
if (!options.min && !options.max) {
|
|
@@ -250,9 +238,30 @@ class ViewportService {
|
|
|
250
238
|
}
|
|
251
239
|
return mediaQueryParts.join(' ');
|
|
252
240
|
}
|
|
241
|
+
getCurrentViewport([isXs, isSm, isMd, isLg, isXl, is2Xl]) {
|
|
242
|
+
if (isXs) {
|
|
243
|
+
return 'xs';
|
|
244
|
+
}
|
|
245
|
+
else if (isSm) {
|
|
246
|
+
return 'sm';
|
|
247
|
+
}
|
|
248
|
+
else if (isMd) {
|
|
249
|
+
return 'md';
|
|
250
|
+
}
|
|
251
|
+
else if (isLg) {
|
|
252
|
+
return 'lg';
|
|
253
|
+
}
|
|
254
|
+
else if (isXl) {
|
|
255
|
+
return 'xl';
|
|
256
|
+
}
|
|
257
|
+
else if (is2Xl) {
|
|
258
|
+
return '2xl';
|
|
259
|
+
}
|
|
260
|
+
return 'xs';
|
|
261
|
+
}
|
|
253
262
|
}
|
|
254
|
-
ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
255
|
-
ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
263
|
+
ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ViewportService, deps: [{ token: VIEWPORT_CONFIG, optional: true }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
264
|
+
ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ViewportService, providedIn: 'root' });
|
|
256
265
|
__decorate([
|
|
257
266
|
Memo(),
|
|
258
267
|
__metadata("design:type", Function),
|
|
@@ -270,7 +279,7 @@ __decorate([
|
|
|
270
279
|
__metadata("design:paramtypes", [Object]),
|
|
271
280
|
__metadata("design:returntype", void 0)
|
|
272
281
|
], ViewportService.prototype, "_buildMediaQuery", null);
|
|
273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ViewportService, decorators: [{
|
|
274
283
|
type: Injectable,
|
|
275
284
|
args: [{
|
|
276
285
|
providedIn: 'root',
|
|
@@ -306,15 +315,306 @@ class FocusVisibleService {
|
|
|
306
315
|
this._hadKeyboardEvent = false;
|
|
307
316
|
}
|
|
308
317
|
}
|
|
309
|
-
FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
310
|
-
FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.
|
|
311
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
318
|
+
FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
319
|
+
FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FocusVisibleService, providedIn: 'root' });
|
|
320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FocusVisibleService, decorators: [{
|
|
312
321
|
type: Injectable,
|
|
313
322
|
args: [{
|
|
314
323
|
providedIn: 'root',
|
|
315
324
|
}]
|
|
316
325
|
}], ctorParameters: function () { return []; } });
|
|
317
326
|
|
|
327
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
328
|
+
class ResizeObserverFactory {
|
|
329
|
+
create(callback) {
|
|
330
|
+
return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
ResizeObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
334
|
+
ResizeObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' });
|
|
335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverFactory, decorators: [{
|
|
336
|
+
type: Injectable,
|
|
337
|
+
args: [{ providedIn: 'root' }]
|
|
338
|
+
}] });
|
|
339
|
+
class ResizeObserverService {
|
|
340
|
+
constructor(_mutationObserverFactory) {
|
|
341
|
+
this._mutationObserverFactory = _mutationObserverFactory;
|
|
342
|
+
this._observedElements = new Map();
|
|
343
|
+
}
|
|
344
|
+
ngOnDestroy() {
|
|
345
|
+
this._observedElements.forEach((_, element) => this._cleanupObserver(element));
|
|
346
|
+
}
|
|
347
|
+
observe(elementOrRef) {
|
|
348
|
+
const element = coerceElement(elementOrRef);
|
|
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
|
+
});
|
|
357
|
+
}
|
|
358
|
+
_observeElement(element) {
|
|
359
|
+
if (!this._observedElements.has(element)) {
|
|
360
|
+
const stream = new Subject();
|
|
361
|
+
const observer = this._mutationObserverFactory.create((resizes) => stream.next(resizes));
|
|
362
|
+
if (observer) {
|
|
363
|
+
observer.observe(element);
|
|
364
|
+
}
|
|
365
|
+
this._observedElements.set(element, { observer, stream, count: 1 });
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
this._observedElements.get(element).count++;
|
|
369
|
+
}
|
|
370
|
+
return this._observedElements.get(element).stream;
|
|
371
|
+
}
|
|
372
|
+
_unobserveElement(element) {
|
|
373
|
+
if (this._observedElements.has(element)) {
|
|
374
|
+
this._observedElements.get(element).count--;
|
|
375
|
+
if (!this._observedElements.get(element).count) {
|
|
376
|
+
this._cleanupObserver(element);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
_cleanupObserver(element) {
|
|
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);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
392
|
+
ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
|
|
393
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverService, decorators: [{
|
|
394
|
+
type: Injectable,
|
|
395
|
+
args: [{ providedIn: 'root' }]
|
|
396
|
+
}], ctorParameters: function () { return [{ type: ResizeObserverFactory }]; } });
|
|
397
|
+
|
|
398
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
399
|
+
class MutationObserverFactory {
|
|
400
|
+
create(callback) {
|
|
401
|
+
return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
MutationObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
405
|
+
MutationObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' });
|
|
406
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MutationObserverFactory, decorators: [{
|
|
407
|
+
type: Injectable,
|
|
408
|
+
args: [{ providedIn: 'root' }]
|
|
409
|
+
}] });
|
|
410
|
+
class ContentObserverService {
|
|
411
|
+
constructor(_mutationObserverFactory) {
|
|
412
|
+
this._mutationObserverFactory = _mutationObserverFactory;
|
|
413
|
+
this._observedElements = new Map();
|
|
414
|
+
}
|
|
415
|
+
ngOnDestroy() {
|
|
416
|
+
this._observedElements.forEach((_, element) => this._cleanupObserver(element));
|
|
417
|
+
}
|
|
418
|
+
observe(elementOrRef) {
|
|
419
|
+
const element = coerceElement(elementOrRef);
|
|
420
|
+
return new Observable((observer) => {
|
|
421
|
+
const stream = this._observeElement(element);
|
|
422
|
+
const subscription = stream.subscribe(observer);
|
|
423
|
+
return () => {
|
|
424
|
+
subscription.unsubscribe();
|
|
425
|
+
this._unobserveElement(element);
|
|
426
|
+
};
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
_observeElement(element) {
|
|
430
|
+
if (!this._observedElements.has(element)) {
|
|
431
|
+
const stream = new Subject();
|
|
432
|
+
const observer = this._mutationObserverFactory.create((mutations) => stream.next(mutations));
|
|
433
|
+
if (observer) {
|
|
434
|
+
observer.observe(element, {
|
|
435
|
+
characterData: true,
|
|
436
|
+
childList: true,
|
|
437
|
+
subtree: true,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
this._observedElements.set(element, { observer, stream, count: 1 });
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
this._observedElements.get(element).count++;
|
|
444
|
+
}
|
|
445
|
+
return this._observedElements.get(element).stream;
|
|
446
|
+
}
|
|
447
|
+
_unobserveElement(element) {
|
|
448
|
+
if (this._observedElements.has(element)) {
|
|
449
|
+
this._observedElements.get(element).count--;
|
|
450
|
+
if (!this._observedElements.get(element).count) {
|
|
451
|
+
this._cleanupObserver(element);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
_cleanupObserver(element) {
|
|
456
|
+
if (this._observedElements.has(element)) {
|
|
457
|
+
const { observer, stream } = this._observedElements.get(element);
|
|
458
|
+
if (observer) {
|
|
459
|
+
observer.disconnect();
|
|
460
|
+
}
|
|
461
|
+
stream.complete();
|
|
462
|
+
this._observedElements.delete(element);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
ContentObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
467
|
+
ContentObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContentObserverService, providedIn: 'root' });
|
|
468
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContentObserverService, decorators: [{
|
|
469
|
+
type: Injectable,
|
|
470
|
+
args: [{ providedIn: 'root' }]
|
|
471
|
+
}], ctorParameters: function () { return [{ type: MutationObserverFactory }]; } });
|
|
472
|
+
|
|
473
|
+
class ObserveResizeDirective {
|
|
474
|
+
constructor() {
|
|
475
|
+
this._resizeObserver = inject(ResizeObserverService);
|
|
476
|
+
this._elementRef = inject(ElementRef);
|
|
477
|
+
this._ngZone = inject(NgZone);
|
|
478
|
+
this.event = new EventEmitter();
|
|
479
|
+
this._disabled = false;
|
|
480
|
+
this._debounce = null;
|
|
481
|
+
this._currentSubscription = null;
|
|
482
|
+
}
|
|
483
|
+
get disabled() {
|
|
484
|
+
return this._disabled;
|
|
485
|
+
}
|
|
486
|
+
set disabled(value) {
|
|
487
|
+
this._disabled = coerceBooleanProperty(value);
|
|
488
|
+
this._disabled ? this._unsubscribe() : this._subscribe();
|
|
489
|
+
}
|
|
490
|
+
get debounce() {
|
|
491
|
+
return this._debounce;
|
|
492
|
+
}
|
|
493
|
+
set debounce(value) {
|
|
494
|
+
this._debounce = coerceNumberProperty(value);
|
|
495
|
+
this._subscribe();
|
|
496
|
+
}
|
|
497
|
+
ngAfterContentInit() {
|
|
498
|
+
if (!this._currentSubscription && !this.disabled) {
|
|
499
|
+
this._subscribe();
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
ngOnDestroy() {
|
|
503
|
+
this._unsubscribe();
|
|
504
|
+
}
|
|
505
|
+
_subscribe() {
|
|
506
|
+
this._unsubscribe();
|
|
507
|
+
const stream = this._resizeObserver.observe(this._elementRef);
|
|
508
|
+
this._ngZone.runOutsideAngular(() => {
|
|
509
|
+
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.event);
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
_unsubscribe() {
|
|
513
|
+
var _a;
|
|
514
|
+
(_a = this._currentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
ObserveResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
518
|
+
ObserveResizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: ObserveResizeDirective, isStandalone: true, selector: "[etObserveResize]", inputs: { disabled: ["etObserveResizeDisabled", "disabled"], debounce: ["etObserveResizeDebounce", "debounce"] }, outputs: { event: "etObserveResize" }, exportAs: ["etObserveResize"], ngImport: i0 });
|
|
519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveResizeDirective, decorators: [{
|
|
520
|
+
type: Directive,
|
|
521
|
+
args: [{
|
|
522
|
+
selector: '[etObserveResize]',
|
|
523
|
+
exportAs: 'etObserveResize',
|
|
524
|
+
standalone: true,
|
|
525
|
+
}]
|
|
526
|
+
}], propDecorators: { event: [{
|
|
527
|
+
type: Output,
|
|
528
|
+
args: ['etObserveResize']
|
|
529
|
+
}], disabled: [{
|
|
530
|
+
type: Input,
|
|
531
|
+
args: ['etObserveResizeDisabled']
|
|
532
|
+
}], debounce: [{
|
|
533
|
+
type: Input,
|
|
534
|
+
args: ['etObserveResizeDebounce']
|
|
535
|
+
}] } });
|
|
536
|
+
|
|
537
|
+
class ObserveContentDirective {
|
|
538
|
+
constructor() {
|
|
539
|
+
this._contentObserver = inject(ContentObserverService);
|
|
540
|
+
this._elementRef = inject(ElementRef);
|
|
541
|
+
this._ngZone = inject(NgZone);
|
|
542
|
+
this.event = new EventEmitter();
|
|
543
|
+
this._disabled = false;
|
|
544
|
+
this._debounce = null;
|
|
545
|
+
this._currentSubscription = null;
|
|
546
|
+
}
|
|
547
|
+
get disabled() {
|
|
548
|
+
return this._disabled;
|
|
549
|
+
}
|
|
550
|
+
set disabled(value) {
|
|
551
|
+
this._disabled = coerceBooleanProperty(value);
|
|
552
|
+
this._disabled ? this._unsubscribe() : this._subscribe();
|
|
553
|
+
}
|
|
554
|
+
get debounce() {
|
|
555
|
+
return this._debounce;
|
|
556
|
+
}
|
|
557
|
+
set debounce(value) {
|
|
558
|
+
this._debounce = coerceNumberProperty(value);
|
|
559
|
+
this._subscribe();
|
|
560
|
+
}
|
|
561
|
+
ngAfterContentInit() {
|
|
562
|
+
if (!this._currentSubscription && !this.disabled) {
|
|
563
|
+
this._subscribe();
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
ngOnDestroy() {
|
|
567
|
+
this._unsubscribe();
|
|
568
|
+
}
|
|
569
|
+
_subscribe() {
|
|
570
|
+
this._unsubscribe();
|
|
571
|
+
const stream = this._contentObserver.observe(this._elementRef);
|
|
572
|
+
this._ngZone.runOutsideAngular(() => {
|
|
573
|
+
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime$1(this.debounce)) : stream).subscribe(this.event);
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
_unsubscribe() {
|
|
577
|
+
var _a;
|
|
578
|
+
(_a = this._currentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
ObserveContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
582
|
+
ObserveContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: ObserveContentDirective, isStandalone: true, selector: "[etObserveContent]", inputs: { disabled: ["etObserveContentDisabled", "disabled"], debounce: ["etObserveContentDebounce", "debounce"] }, outputs: { event: "etObserveContent" }, exportAs: ["etObserveContent"], ngImport: i0 });
|
|
583
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveContentDirective, decorators: [{
|
|
584
|
+
type: Directive,
|
|
585
|
+
args: [{
|
|
586
|
+
selector: '[etObserveContent]',
|
|
587
|
+
exportAs: 'etObserveContent',
|
|
588
|
+
standalone: true,
|
|
589
|
+
}]
|
|
590
|
+
}], propDecorators: { event: [{
|
|
591
|
+
type: Output,
|
|
592
|
+
args: ['etObserveContent']
|
|
593
|
+
}], disabled: [{
|
|
594
|
+
type: Input,
|
|
595
|
+
args: ['etObserveContentDisabled']
|
|
596
|
+
}], debounce: [{
|
|
597
|
+
type: Input,
|
|
598
|
+
args: ['etObserveContentDebounce']
|
|
599
|
+
}] } });
|
|
600
|
+
|
|
601
|
+
const toArray = (value) => {
|
|
602
|
+
return Array.from({ length: value }, (_, i) => i);
|
|
603
|
+
};
|
|
604
|
+
const toArrayTrackByFn = (_, item) => item;
|
|
605
|
+
|
|
606
|
+
class ToArrayPipe {
|
|
607
|
+
constructor() {
|
|
608
|
+
this.transform = toArray;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
612
|
+
ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" });
|
|
613
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ToArrayPipe, decorators: [{
|
|
614
|
+
type: Pipe,
|
|
615
|
+
args: [{ name: 'toArray', standalone: true }]
|
|
616
|
+
}] });
|
|
617
|
+
|
|
318
618
|
const provideViewportConfig = (viewportConfig) => {
|
|
319
619
|
return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
|
|
320
620
|
};
|
|
@@ -327,5 +627,5 @@ const clamp = (value, min = 0, max = 100) => {
|
|
|
327
627
|
* Generated bundle index. Do not edit.
|
|
328
628
|
*/
|
|
329
629
|
|
|
330
|
-
export { DEFAULT_VIEWPORT_CONFIG, FocusVisibleService, LetContext, LetDirective, Memo, RepeatDirective, ToArrayPipe, VIEWPORT_CONFIG, ViewportService, clamp, provideViewportConfig, toArray, toArrayTrackByFn };
|
|
630
|
+
export { ContentObserverService, DEFAULT_VIEWPORT_CONFIG, FocusVisibleService, LetContext, LetDirective, Memo, MutationObserverFactory, ObserveContentDirective, ObserveResizeDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, ToArrayPipe, VIEWPORT_CONFIG, ViewportService, clamp, provideViewportConfig, toArray, toArrayTrackByFn };
|
|
331
631
|
//# sourceMappingURL=ethlete-core.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethlete-core.mjs","sources":["../../../../libs/core/src/lib/constants/viewport.constants.ts","../../../../libs/core/src/lib/decorators/memo/memo.decorator.ts","../../../../libs/core/src/lib/directives/let/let.types.ts","../../../../libs/core/src/lib/directives/let/let.directive.ts","../../../../libs/core/src/lib/directives/repeat/repeat.directive.ts","../../../../libs/core/src/lib/pipes/to-array/to-array.util.ts","../../../../libs/core/src/lib/pipes/to-array/to-array.pipe.ts","../../../../libs/core/src/lib/services/viewport.service.ts","../../../../libs/core/src/lib/services/focus-visible.service.ts","../../../../libs/core/src/lib/utils/viewport.util.ts","../../../../libs/core/src/lib/utils/clamp.util.ts","../../../../libs/core/src/ethlete-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ViewportConfig } from '../types';\n\nexport const VIEWPORT_CONFIG = new InjectionToken<ViewportConfig>('ViewportConfig');\n\n/**\n * Default viewport config based on Tailwind CSS.\n * @see https://tailwindcss.com/docs/screens\n */\nexport const DEFAULT_VIEWPORT_CONFIG: ViewportConfig = {\n breakpoints: {\n xs: [0, 639],\n sm: [640, 767],\n md: [768, 1023],\n lg: [1024, 1279],\n xl: [1280, 1535],\n '2xl': [1536, Infinity],\n },\n};\n","export interface MemoResolver {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (...args: any[]): any;\n}\n\nexport interface MapLike<K = unknown, V = unknown> {\n set(key: K, v: V): MapLike<K, V>;\n get(key: K): V;\n has(key: K): boolean;\n}\n\nexport interface MemoConfig {\n resolver?: MemoResolver;\n cache?: MapLike;\n}\n\nfunction memoize(func: (..._args: unknown[]) => unknown, resolver: MemoResolver, cache: MapLike) {\n const memoized = function (this: unknown, ...args: unknown[]) {\n const key = resolver.apply(this, args);\n const cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n const result = func.apply(this, args);\n memoized.cache = cache.set(key, result) ?? cache;\n return result;\n };\n\n memoized.cache = cache;\n\n return memoized;\n}\n\nconst defaultResolver: MemoResolver = (...args: unknown[]) => args[0];\n\nexport const Memo =\n (config: MemoConfig = {}) =>\n (_: unknown, __: string, descriptor: PropertyDescriptor): PropertyDescriptor => {\n if (typeof descriptor.value !== 'function') {\n throw new Error('Memoization can be applied only to methods');\n }\n\n const resolver = config.resolver ?? defaultResolver;\n const cache = config.cache ?? new Map();\n\n descriptor.value = memoize(descriptor.value, resolver, cache);\n return descriptor;\n };\n","export class LetContext<T = unknown> {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n public $implicit: T = null!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n public etLet: T = null!;\n}\n","import { Directive, EmbeddedViewRef, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { LetContext } from './let.types';\n\n@Directive({\n selector: '[etLet]',\n standalone: true,\n})\nexport class LetDirective<T = unknown> {\n @Input()\n set etLet(value: T) {\n this._context.$implicit = this._context.etLet = value;\n this._updateView();\n }\n\n static ngTemplateGuard_ngLet: 'binding';\n\n private _context: LetContext<T> = new LetContext<T>();\n private _templateRef: TemplateRef<LetContext<T>> | null = null;\n private _viewRef: EmbeddedViewRef<LetContext<T>> | null = null;\n\n constructor(private _viewContainer: ViewContainerRef, templateRef: TemplateRef<LetContext<T>>) {\n this._templateRef = templateRef;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static ngTemplateContextGuard<T>(dir: LetDirective<T>, ctx: any): ctx is LetContext<T> {\n return true;\n }\n\n private _updateView() {\n if (!this._viewRef) {\n this._viewContainer.clear();\n if (this._templateRef) {\n this._viewRef = this._viewContainer.createEmbeddedView(this._templateRef, this._context);\n }\n }\n }\n}\n","import { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[etRepeat]',\n standalone: true,\n})\nexport class RepeatDirective implements OnInit {\n @Input('etRepeat')\n get repeatCount(): number {\n return this._repeatCount;\n }\n set repeatCount(value: NumberInput) {\n this._repeatCount = coerceNumberProperty(value);\n }\n private _repeatCount = 2;\n\n constructor(private _mainTemplateRef: TemplateRef<unknown>, private _viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this._render();\n }\n\n private _render() {\n for (let i = 0; i < this.repeatCount; i++) {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);\n }\n }\n}\n","import { TrackByFunction } from '@angular/core';\n\nexport const toArray = (value: number) => {\n return Array.from({ length: value }, (_, i) => i);\n};\n\nexport const toArrayTrackByFn: TrackByFunction<number> = (_, item) => item;\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { toArray } from './to-array.util';\n\n@Pipe({ name: 'toArray', standalone: true })\nexport class ToArrayPipe implements PipeTransform {\n transform = toArray;\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { BehaviorSubject, map, Observable, shareReplay } from 'rxjs';\nimport { DEFAULT_VIEWPORT_CONFIG, VIEWPORT_CONFIG } from '../constants';\nimport { Breakpoint, ViewportConfig } from '../types';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Memo } from '../public-api';\nimport { BuildMediaQueryOptions } from './viewport.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ViewportService {\n private _viewportConfig: ViewportConfig;\n\n private _isXs$ = new BehaviorSubject(false);\n private _isSm$ = new BehaviorSubject(false);\n private _isMd$ = new BehaviorSubject(false);\n private _isLg$ = new BehaviorSubject(false);\n private _isXl$ = new BehaviorSubject(false);\n private _is2Xl$ = new BehaviorSubject(false);\n\n get isXs$() {\n return this._isXs$.asObservable();\n }\n\n get isXs() {\n return this._isXs$.value;\n }\n\n get isSm$() {\n return this._isSm$.asObservable();\n }\n\n get isSm() {\n return this._isSm$.value;\n }\n\n get isMd$() {\n return this._isMd$.asObservable();\n }\n\n get isMd() {\n return this._isMd$.value;\n }\n\n get isLg$() {\n return this._isLg$.asObservable();\n }\n\n get isLg() {\n return this._isLg$.value;\n }\n\n get isXl$() {\n return this._isXl$.asObservable();\n }\n\n get isXl() {\n return this._isXl$.value;\n }\n\n get is2Xl$() {\n return this._is2Xl$.asObservable();\n }\n\n get is2Xl() {\n return this._is2Xl$.value;\n }\n\n constructor(\n @Inject(VIEWPORT_CONFIG) @Optional() _viewportConfig: ViewportConfig | null,\n private _breakpointObserver: BreakpointObserver,\n ) {\n this._viewportConfig = _viewportConfig || DEFAULT_VIEWPORT_CONFIG;\n this._observeDefaultBreakpoints();\n }\n\n observe(options: { min?: number | Breakpoint; max?: number | Breakpoint }): Observable<boolean> {\n const mediaQuery = this._buildMediaQuery(options);\n\n return this._breakpointObserver.observe(mediaQuery).pipe(\n map((x) => x.matches),\n shareReplay(),\n );\n }\n\n isMatched(options: { min?: number | Breakpoint; max?: number | Breakpoint }): boolean {\n const mediaQuery = this._buildMediaQuery(options);\n\n return this._breakpointObserver.isMatched(mediaQuery);\n }\n\n private _observeDefaultBreakpoints() {\n this.observe({ max: 'xs' }).subscribe(this._isXs$);\n this.observe({ min: 'sm', max: 'sm' }).subscribe(this._isSm$);\n this.observe({ min: 'md', max: 'md' }).subscribe(this._isMd$);\n this.observe({ min: 'lg', max: 'lg' }).subscribe(this._isLg$);\n this.observe({ min: 'xl', max: 'xl' }).subscribe(this._isXl$);\n this.observe({ min: '2xl' }).subscribe(this._is2Xl$);\n }\n\n @Memo()\n private _getViewportSize(type: Breakpoint, option: 'min' | 'max') {\n const index = option === 'min' ? 0 : 1;\n const size = this._viewportConfig.breakpoints[type][index];\n\n if (size === Infinity || size === 0) {\n return size;\n }\n\n if (option === 'min') {\n return size;\n }\n\n // Due to scaling, the actual size of the viewport may be a decimal number.\n // Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px\n // and thus not matching any of the default breakpoints.\n return size + 0.9999;\n }\n\n @Memo({\n resolver: (v: BuildMediaQueryOptions) => {\n return `${v.min ?? ''}-${v.max ?? ''}`;\n },\n })\n private _buildMediaQuery(options: BuildMediaQueryOptions) {\n if (!options.min && !options.max) {\n throw new Error('At least one of min or max must be defined');\n }\n\n const mediaQueryParts: string[] = [];\n\n if (options.min) {\n if (typeof options.min === 'number') {\n mediaQueryParts.push(`(min-width: ${options.min}px)`);\n } else {\n mediaQueryParts.push(`(min-width: ${this._getViewportSize(options.min, 'min')}px)`);\n }\n }\n\n if (options.min && options.max) {\n mediaQueryParts.push('and');\n }\n\n if (options.max) {\n if (typeof options.max === 'number') {\n mediaQueryParts.push(`(max-width: ${options.max}px)`);\n } else {\n mediaQueryParts.push(`(max-width: ${this._getViewportSize(options.max, 'max')}px)`);\n }\n }\n\n return mediaQueryParts.join(' ');\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FocusVisibleService {\n private readonly _document = inject<Document>(DOCUMENT);\n\n private _hadKeyboardEvent = false;\n\n get isFocusVisible() {\n return this._hadKeyboardEvent;\n }\n\n constructor() {\n this._document.addEventListener('keydown', this.onKeyDown.bind(this), true);\n this._document.addEventListener('mousedown', this.onPointerDown.bind(this), true);\n this._document.addEventListener('pointerdown', this.onPointerDown.bind(this), true);\n this._document.addEventListener('touchstart', this.onPointerDown.bind(this), true);\n }\n\n onKeyDown(e: KeyboardEvent) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n this._hadKeyboardEvent = true;\n }\n\n onPointerDown() {\n this._hadKeyboardEvent = false;\n }\n}\n","import { VIEWPORT_CONFIG } from '../constants';\nimport { ViewportConfig } from '../types';\n\nexport const provideViewportConfig = (\n viewportConfig: ViewportConfig,\n): { provide: typeof VIEWPORT_CONFIG; useValue: typeof viewportConfig } => {\n return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };\n};\n","export const clamp = (value: number, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ethlete-core.mjs","sources":["../../../../libs/core/src/lib/constants/viewport.constants.ts","../../../../libs/core/src/lib/decorators/memo/memo.decorator.ts","../../../../libs/core/src/lib/directives/let/let.types.ts","../../../../libs/core/src/lib/directives/let/let.directive.ts","../../../../libs/core/src/lib/directives/repeat/repeat.directive.ts","../../../../libs/core/src/lib/services/viewport.service.ts","../../../../libs/core/src/lib/services/focus-visible.service.ts","../../../../libs/core/src/lib/services/resize-observer.service.ts","../../../../libs/core/src/lib/services/content-observer.service.ts","../../../../libs/core/src/lib/directives/observe-resize/observe-resize.directive.ts","../../../../libs/core/src/lib/directives/observe-content/observe-content.directive.ts","../../../../libs/core/src/lib/pipes/to-array/to-array.util.ts","../../../../libs/core/src/lib/pipes/to-array/to-array.pipe.ts","../../../../libs/core/src/lib/utils/viewport.util.ts","../../../../libs/core/src/lib/utils/clamp.util.ts","../../../../libs/core/src/ethlete-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ViewportConfig } from '../types';\n\nexport const VIEWPORT_CONFIG = new InjectionToken<ViewportConfig>('ViewportConfig');\n\n/**\n * Default viewport config based on Tailwind CSS.\n * @see https://tailwindcss.com/docs/screens\n */\nexport const DEFAULT_VIEWPORT_CONFIG: ViewportConfig = {\n breakpoints: {\n xs: [0, 639],\n sm: [640, 767],\n md: [768, 1023],\n lg: [1024, 1279],\n xl: [1280, 1535],\n '2xl': [1536, Infinity],\n },\n};\n","export interface MemoResolver {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (...args: any[]): any;\n}\n\nexport interface MapLike<K = unknown, V = unknown> {\n set(key: K, v: V): MapLike<K, V>;\n get(key: K): V;\n has(key: K): boolean;\n}\n\nexport interface MemoConfig {\n resolver?: MemoResolver;\n cache?: MapLike;\n}\n\nfunction memoize(func: (..._args: unknown[]) => unknown, resolver: MemoResolver, cache: MapLike) {\n const memoized = function (this: unknown, ...args: unknown[]) {\n const key = resolver.apply(this, args);\n const cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n const result = func.apply(this, args);\n memoized.cache = cache.set(key, result) ?? cache;\n return result;\n };\n\n memoized.cache = cache;\n\n return memoized;\n}\n\nconst defaultResolver: MemoResolver = (...args: unknown[]) => args.join('-');\n\nexport const Memo =\n (config: MemoConfig = {}) =>\n (_: unknown, __: string, descriptor: PropertyDescriptor): PropertyDescriptor => {\n if (typeof descriptor.value !== 'function') {\n throw new Error('Memoization can be applied only to methods');\n }\n\n const resolver = config.resolver ?? defaultResolver;\n const cache = config.cache ?? new Map();\n\n descriptor.value = memoize(descriptor.value, resolver, cache);\n return descriptor;\n };\n","export class LetContext<T = unknown> {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n public $implicit: T = null!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n public etLet: T = null!;\n}\n","import { Directive, EmbeddedViewRef, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { LetContext } from './let.types';\n\n@Directive({\n selector: '[etLet]',\n standalone: true,\n})\nexport class LetDirective<T = unknown> {\n @Input()\n set etLet(value: T) {\n this._context.$implicit = this._context.etLet = value;\n this._updateView();\n }\n\n static ngTemplateGuard_ngLet: 'binding';\n\n private _context: LetContext<T> = new LetContext<T>();\n private _templateRef: TemplateRef<LetContext<T>> | null = null;\n private _viewRef: EmbeddedViewRef<LetContext<T>> | null = null;\n\n constructor(private _viewContainer: ViewContainerRef, templateRef: TemplateRef<LetContext<T>>) {\n this._templateRef = templateRef;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static ngTemplateContextGuard<T>(dir: LetDirective<T>, ctx: any): ctx is LetContext<T> {\n return true;\n }\n\n private _updateView() {\n if (!this._viewRef) {\n this._viewContainer.clear();\n if (this._templateRef) {\n this._viewRef = this._viewContainer.createEmbeddedView(this._templateRef, this._context);\n }\n }\n }\n}\n","import { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[etRepeat]',\n standalone: true,\n})\nexport class RepeatDirective implements OnInit {\n @Input('etRepeat')\n get repeatCount(): number {\n return this._repeatCount;\n }\n set repeatCount(value: NumberInput) {\n this._repeatCount = coerceNumberProperty(value);\n }\n private _repeatCount = 2;\n\n constructor(private _mainTemplateRef: TemplateRef<unknown>, private _viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this._render();\n }\n\n private _render() {\n for (let i = 0; i < this.repeatCount; i++) {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);\n }\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { BehaviorSubject, combineLatest, map, Observable, shareReplay } from 'rxjs';\nimport { DEFAULT_VIEWPORT_CONFIG, VIEWPORT_CONFIG } from '../constants';\nimport { Breakpoint, ViewportConfig } from '../types';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Memo } from '../decorators';\nimport { BuildMediaQueryOptions } from './viewport.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ViewportService {\n private _viewportConfig: ViewportConfig;\n\n private _isXs$ = new BehaviorSubject(false);\n private _isSm$ = new BehaviorSubject(false);\n private _isMd$ = new BehaviorSubject(false);\n private _isLg$ = new BehaviorSubject(false);\n private _isXl$ = new BehaviorSubject(false);\n private _is2Xl$ = new BehaviorSubject(false);\n\n get isXs$() {\n return this._isXs$.asObservable();\n }\n\n get isXs() {\n return this._isXs$.value;\n }\n\n get isSm$() {\n return this._isSm$.asObservable();\n }\n\n get isSm() {\n return this._isSm$.value;\n }\n\n get isMd$() {\n return this._isMd$.asObservable();\n }\n\n get isMd() {\n return this._isMd$.value;\n }\n\n get isLg$() {\n return this._isLg$.asObservable();\n }\n\n get isLg() {\n return this._isLg$.value;\n }\n\n get isXl$() {\n return this._isXl$.asObservable();\n }\n\n get isXl() {\n return this._isXl$.value;\n }\n\n get is2Xl$() {\n return this._is2Xl$.asObservable();\n }\n\n get is2Xl() {\n return this._is2Xl$.value;\n }\n\n currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(\n map((val) => this.getCurrentViewport(val)),\n shareReplay(),\n );\n\n get currentViewport() {\n return this.getCurrentViewport([this.isXs, this.isSm, this.isMd, this.isLg, this.isXl, this.is2Xl]);\n }\n\n constructor(\n @Inject(VIEWPORT_CONFIG) @Optional() _viewportConfig: ViewportConfig | null,\n private _breakpointObserver: BreakpointObserver,\n ) {\n this._viewportConfig = _viewportConfig || DEFAULT_VIEWPORT_CONFIG;\n this._observeDefaultBreakpoints();\n }\n\n observe(options: { min?: number | Breakpoint; max?: number | Breakpoint }): Observable<boolean> {\n const mediaQuery = this._buildMediaQuery(options);\n\n return this._breakpointObserver.observe(mediaQuery).pipe(\n map((x) => x.matches),\n shareReplay(),\n );\n }\n\n isMatched(options: { min?: number | Breakpoint; max?: number | Breakpoint }): boolean {\n const mediaQuery = this._buildMediaQuery(options);\n\n return this._breakpointObserver.isMatched(mediaQuery);\n }\n\n private _observeDefaultBreakpoints() {\n this.observe({ max: 'xs' }).subscribe(this._isXs$);\n this.observe({ min: 'sm', max: 'sm' }).subscribe(this._isSm$);\n this.observe({ min: 'md', max: 'md' }).subscribe(this._isMd$);\n this.observe({ min: 'lg', max: 'lg' }).subscribe(this._isLg$);\n this.observe({ min: 'xl', max: 'xl' }).subscribe(this._isXl$);\n this.observe({ min: '2xl' }).subscribe(this._is2Xl$);\n }\n\n @Memo()\n private _getViewportSize(type: Breakpoint, option: 'min' | 'max') {\n const index = option === 'min' ? 0 : 1;\n const size = this._viewportConfig.breakpoints[type][index];\n\n if (size === Infinity || size === 0) {\n return size;\n }\n\n if (option === 'min') {\n return size;\n }\n\n // Due to scaling, the actual size of the viewport may be a decimal number.\n // Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px\n // and thus not matching any of the default breakpoints.\n return size + 0.9;\n }\n\n @Memo({\n resolver: (v: BuildMediaQueryOptions) => {\n return `${v.min ?? ''}-${v.max ?? ''}`;\n },\n })\n private _buildMediaQuery(options: BuildMediaQueryOptions) {\n if (!options.min && !options.max) {\n throw new Error('At least one of min or max must be defined');\n }\n\n const mediaQueryParts: string[] = [];\n\n if (options.min) {\n if (typeof options.min === 'number') {\n mediaQueryParts.push(`(min-width: ${options.min}px)`);\n } else {\n mediaQueryParts.push(`(min-width: ${this._getViewportSize(options.min, 'min')}px)`);\n }\n }\n\n if (options.min && options.max) {\n mediaQueryParts.push('and');\n }\n\n if (options.max) {\n if (typeof options.max === 'number') {\n mediaQueryParts.push(`(max-width: ${options.max}px)`);\n } else {\n mediaQueryParts.push(`(max-width: ${this._getViewportSize(options.max, 'max')}px)`);\n }\n }\n\n return mediaQueryParts.join(' ');\n }\n\n private getCurrentViewport([isXs, isSm, isMd, isLg, isXl, is2Xl]: [\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n ]): Breakpoint {\n if (isXs) {\n return 'xs';\n } else if (isSm) {\n return 'sm';\n } else if (isMd) {\n return 'md';\n } else if (isLg) {\n return 'lg';\n } else if (isXl) {\n return 'xl';\n } else if (is2Xl) {\n return '2xl';\n }\n\n return 'xs';\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FocusVisibleService {\n private readonly _document = inject<Document>(DOCUMENT);\n\n private _hadKeyboardEvent = false;\n\n get isFocusVisible() {\n return this._hadKeyboardEvent;\n }\n\n constructor() {\n this._document.addEventListener('keydown', this.onKeyDown.bind(this), true);\n this._document.addEventListener('mousedown', this.onPointerDown.bind(this), true);\n this._document.addEventListener('pointerdown', this.onPointerDown.bind(this), true);\n this._document.addEventListener('touchstart', this.onPointerDown.bind(this), true);\n }\n\n onKeyDown(e: KeyboardEvent) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n this._hadKeyboardEvent = true;\n }\n\n onPointerDown() {\n this._hadKeyboardEvent = false;\n }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Injectable, OnDestroy, ElementRef } from '@angular/core';\nimport { Subject, Observable, Observer } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverFactory {\n create(callback: ResizeObserverCallback): ResizeObserver | null {\n return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverService implements OnDestroy {\n private _observedElements = new Map<\n Element,\n {\n observer: ResizeObserver | null;\n readonly stream: Subject<ResizeObserverEntry[]>;\n count: number;\n }\n >();\n\n constructor(private _mutationObserverFactory: ResizeObserverFactory) {}\n\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n\n observe(element: Element): Observable<ResizeObserverEntry[]>;\n observe(element: ElementRef<Element>): Observable<ResizeObserverEntry[]>;\n observe(elementOrRef: Element | ElementRef<Element>): Observable<ResizeObserverEntry[]> {\n const element = coerceElement(elementOrRef);\n\n return new Observable((observer: Observer<ResizeObserverEntry[]>) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n\n private _observeElement(element: Element): Subject<ResizeObserverEntry[]> {\n if (!this._observedElements.has(element)) {\n const stream = new Subject<ResizeObserverEntry[]>();\n const observer = this._mutationObserverFactory.create((resizes) => stream.next(resizes));\n if (observer) {\n observer.observe(element);\n }\n this._observedElements.set(element, { observer, stream, count: 1 });\n } else {\n this._observedElements.get(element)!.count++;\n }\n return this._observedElements.get(element)!.stream;\n }\n\n private _unobserveElement(element: Element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element)!.count--;\n if (!this._observedElements.get(element)!.count) {\n this._cleanupObserver(element);\n }\n }\n }\n\n private _cleanupObserver(element: Element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element)!;\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Injectable, OnDestroy, ElementRef } from '@angular/core';\nimport { Subject, Observable, Observer } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MutationObserverFactory {\n create(callback: MutationCallback): MutationObserver | null {\n return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ContentObserverService implements OnDestroy {\n private _observedElements = new Map<\n Element,\n {\n observer: MutationObserver | null;\n readonly stream: Subject<MutationRecord[]>;\n count: number;\n }\n >();\n\n constructor(private _mutationObserverFactory: MutationObserverFactory) {}\n\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n\n observe(element: Element): Observable<MutationRecord[]>;\n observe(element: ElementRef<Element>): Observable<MutationRecord[]>;\n observe(elementOrRef: Element | ElementRef<Element>): Observable<MutationRecord[]> {\n const element = coerceElement(elementOrRef);\n\n return new Observable((observer: Observer<MutationRecord[]>) => {\n const stream = this._observeElement(element);\n const subscription = stream.subscribe(observer);\n\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n\n private _observeElement(element: Element): Subject<MutationRecord[]> {\n if (!this._observedElements.has(element)) {\n const stream = new Subject<MutationRecord[]>();\n const observer = this._mutationObserverFactory.create((mutations) => stream.next(mutations));\n if (observer) {\n observer.observe(element, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n this._observedElements.set(element, { observer, stream, count: 1 });\n } else {\n this._observedElements.get(element)!.count++;\n }\n return this._observedElements.get(element)!.stream;\n }\n\n private _unobserveElement(element: Element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element)!.count--;\n if (!this._observedElements.get(element)!.count) {\n this._cleanupObserver(element);\n }\n }\n }\n\n private _cleanupObserver(element: Element) {\n if (this._observedElements.has(element)) {\n const { observer, stream } = this._observedElements.get(element)!;\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n}\n","import { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { Subscription, debounceTime } from 'rxjs';\nimport { ResizeObserverService } from '../../services';\n\n@Directive({\n selector: '[etObserveResize]',\n exportAs: 'etObserveResize',\n standalone: true,\n})\nexport class ObserveResizeDirective implements AfterContentInit, OnDestroy {\n private _resizeObserver = inject(ResizeObserverService);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n\n @Output('etObserveResize')\n readonly event = new EventEmitter<ResizeObserverEntry[]>();\n\n @Input('etObserveResizeDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this._unsubscribe() : this._subscribe();\n }\n private _disabled = false;\n\n @Input('etObserveResizeDebounce')\n get debounce(): number | null {\n return this._debounce;\n }\n set debounce(value: NumberInput) {\n this._debounce = coerceNumberProperty(value);\n this._subscribe();\n }\n private _debounce: number | null = null;\n\n private _currentSubscription: Subscription | null = null;\n\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n\n ngOnDestroy() {\n this._unsubscribe();\n }\n\n private _subscribe() {\n this._unsubscribe();\n const stream = this._resizeObserver.observe(this._elementRef);\n\n this._ngZone.runOutsideAngular(() => {\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(\n this.event,\n );\n });\n }\n\n private _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n}\n","import { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ContentObserverService } from '../../services';\n\n@Directive({\n selector: '[etObserveContent]',\n exportAs: 'etObserveContent',\n standalone: true,\n})\nexport class ObserveContentDirective implements AfterContentInit, OnDestroy {\n private _contentObserver = inject(ContentObserverService);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n\n @Output('etObserveContent')\n readonly event = new EventEmitter<MutationRecord[]>();\n\n @Input('etObserveContentDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this._unsubscribe() : this._subscribe();\n }\n private _disabled = false;\n\n @Input('etObserveContentDebounce')\n get debounce(): number | null {\n return this._debounce;\n }\n set debounce(value: NumberInput) {\n this._debounce = coerceNumberProperty(value);\n this._subscribe();\n }\n private _debounce: number | null = null;\n\n private _currentSubscription: Subscription | null = null;\n\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n\n ngOnDestroy() {\n this._unsubscribe();\n }\n\n private _subscribe() {\n this._unsubscribe();\n const stream = this._contentObserver.observe(this._elementRef);\n\n this._ngZone.runOutsideAngular(() => {\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(\n this.event,\n );\n });\n }\n\n private _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n}\n","import { TrackByFunction } from '@angular/core';\n\nexport const toArray = (value: number) => {\n return Array.from({ length: value }, (_, i) => i);\n};\n\nexport const toArrayTrackByFn: TrackByFunction<number> = (_, item) => item;\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { toArray } from './to-array.util';\n\n@Pipe({ name: 'toArray', standalone: true })\nexport class ToArrayPipe implements PipeTransform {\n transform = toArray;\n}\n","import { VIEWPORT_CONFIG } from '../constants';\nimport { ViewportConfig } from '../types';\n\nexport const provideViewportConfig = (\n viewportConfig: ViewportConfig,\n): { provide: typeof VIEWPORT_CONFIG; useValue: typeof viewportConfig } => {\n return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };\n};\n","export const clamp = (value: number, min = 0, max = 100) => {\n return Math.max(min, Math.min(max, value));\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["debounceTime"],"mappings":"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"}
|