@ethlete/core 0.2.0-next.3 → 0.2.0-next.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +37 -0
  2. package/esm2020/lib/directives/click-outside/public-api.mjs +2 -0
  3. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.mjs +3 -0
  4. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +123 -0
  5. package/esm2020/lib/directives/cursor-drag-scroll/public-api.mjs +2 -0
  6. package/esm2020/lib/directives/let/let.directive.mjs +3 -3
  7. package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +3 -3
  8. package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +3 -3
  9. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.constants.mjs +3 -0
  10. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +156 -0
  11. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.types.mjs +2 -0
  12. package/esm2020/lib/directives/observe-scroll-state/public-api.mjs +3 -0
  13. package/esm2020/lib/directives/public-api.mjs +5 -1
  14. package/esm2020/lib/directives/repeat/repeat.directive.mjs +3 -3
  15. package/esm2020/lib/directives/scroll-observer-ignore-target/index.mjs +2 -0
  16. package/esm2020/lib/directives/scroll-observer-ignore-target/public-api.mjs +2 -0
  17. package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +18 -0
  18. package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +3 -3
  19. package/esm2020/lib/services/click-observer.service.mjs +73 -0
  20. package/esm2020/lib/services/content-observer.service.mjs +6 -6
  21. package/esm2020/lib/services/destroy.service.mjs +24 -0
  22. package/esm2020/lib/services/focus-visible.service.mjs +3 -3
  23. package/esm2020/lib/services/public-api.mjs +3 -1
  24. package/esm2020/lib/services/resize-observer.service.mjs +6 -6
  25. package/esm2020/lib/services/viewport.service.mjs +3 -3
  26. package/esm2020/lib/utils/index.mjs +2 -0
  27. package/esm2020/lib/utils/public-api.mjs +2 -1
  28. package/esm2020/lib/utils/scrollable.utils.mjs +5 -0
  29. package/fesm2015/ethlete-core.mjs +466 -43
  30. package/fesm2015/ethlete-core.mjs.map +1 -1
  31. package/fesm2020/ethlete-core.mjs +458 -43
  32. package/fesm2020/ethlete-core.mjs.map +1 -1
  33. package/lib/directives/click-outside/click-outside.directive.d.ts +12 -0
  34. package/lib/directives/click-outside/public-api.d.ts +1 -0
  35. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.d.ts +2 -0
  36. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +21 -0
  37. package/lib/directives/cursor-drag-scroll/public-api.d.ts +1 -0
  38. package/lib/directives/observe-scroll-state/observe-scroll-state.constants.d.ts +3 -0
  39. package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +31 -0
  40. package/lib/directives/observe-scroll-state/observe-scroll-state.types.d.ts +6 -0
  41. package/lib/directives/observe-scroll-state/public-api.d.ts +3 -0
  42. package/lib/directives/public-api.d.ts +4 -0
  43. package/lib/directives/scroll-observer-ignore-target/index.d.ts +1 -0
  44. package/lib/directives/scroll-observer-ignore-target/public-api.d.ts +1 -0
  45. package/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.d.ts +6 -0
  46. package/lib/services/click-observer.service.d.ts +21 -0
  47. package/lib/services/destroy.service.d.ts +9 -0
  48. package/lib/services/public-api.d.ts +2 -0
  49. package/lib/utils/index.d.ts +1 -0
  50. package/lib/utils/public-api.d.ts +1 -0
  51. package/lib/utils/scrollable.utils.d.ts +1 -0
  52. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Directive, Input, Injectable, Inject, Optional, inject, ElementRef, NgZone, EventEmitter, Output, Pipe } from '@angular/core';
3
3
  import { coerceNumberProperty, coerceElement, coerceBooleanProperty } from '@angular/cdk/coercion';
4
- import { BehaviorSubject, combineLatest, map, shareReplay, Observable, Subject, debounceTime } from 'rxjs';
4
+ import { BehaviorSubject, combineLatest, map, shareReplay, Observable, Subject, fromEvent, debounceTime, tap, takeUntil, take } from 'rxjs';
5
5
  import { __decorate, __metadata } from 'tslib';
6
6
  import * as i1 from '@angular/cdk/layout';
7
7
  import { DOCUMENT } from '@angular/common';
@@ -82,9 +82,9 @@ class LetDirective {
82
82
  }
83
83
  }
84
84
  }
85
- 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 });
86
- LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: LetDirective, isStandalone: true, selector: "[etLet]", inputs: { etLet: "etLet" }, ngImport: i0 });
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: LetDirective, decorators: [{
85
+ LetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: LetDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
86
+ LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: LetDirective, isStandalone: true, selector: "[etLet]", inputs: { etLet: "etLet" }, ngImport: i0 });
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: LetDirective, decorators: [{
88
88
  type: Directive,
89
89
  args: [{
90
90
  selector: '[etLet]',
@@ -115,9 +115,9 @@ class RepeatDirective {
115
115
  }
116
116
  }
117
117
  }
118
- 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 });
119
- RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RepeatDirective, decorators: [{
118
+ RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: RepeatDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
119
+ RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: RepeatDirective, decorators: [{
121
121
  type: Directive,
122
122
  args: [{
123
123
  selector: '[etRepeat]',
@@ -258,8 +258,8 @@ class ViewportService {
258
258
  return 'xs';
259
259
  }
260
260
  }
261
- 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 });
262
- ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ViewportService, providedIn: 'root' });
261
+ ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ViewportService, deps: [{ token: VIEWPORT_CONFIG, optional: true }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
262
+ ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ViewportService, providedIn: 'root' });
263
263
  __decorate([
264
264
  Memo(),
265
265
  __metadata("design:type", Function),
@@ -276,7 +276,7 @@ __decorate([
276
276
  __metadata("design:paramtypes", [Object]),
277
277
  __metadata("design:returntype", void 0)
278
278
  ], ViewportService.prototype, "_buildMediaQuery", null);
279
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ViewportService, decorators: [{
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ViewportService, decorators: [{
280
280
  type: Injectable,
281
281
  args: [{
282
282
  providedIn: 'root',
@@ -310,9 +310,9 @@ class FocusVisibleService {
310
310
  this._hadKeyboardEvent = false;
311
311
  }
312
312
  }
313
- FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
314
- FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FocusVisibleService, providedIn: 'root' });
315
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FocusVisibleService, decorators: [{
313
+ FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
314
+ FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: FocusVisibleService, providedIn: 'root' });
315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: FocusVisibleService, decorators: [{
316
316
  type: Injectable,
317
317
  args: [{
318
318
  providedIn: 'root',
@@ -325,9 +325,9 @@ class ResizeObserverFactory {
325
325
  return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);
326
326
  }
327
327
  }
328
- ResizeObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
329
- ResizeObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' });
330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverFactory, decorators: [{
328
+ ResizeObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
329
+ ResizeObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' });
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ResizeObserverFactory, decorators: [{
331
331
  type: Injectable,
332
332
  args: [{ providedIn: 'root' }]
333
333
  }] });
@@ -383,9 +383,9 @@ class ResizeObserverService {
383
383
  }
384
384
  }
385
385
  }
386
- ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
387
- ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
388
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ResizeObserverService, decorators: [{
386
+ ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
387
+ ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ResizeObserverService, decorators: [{
389
389
  type: Injectable,
390
390
  args: [{ providedIn: 'root' }]
391
391
  }], ctorParameters: function () { return [{ type: ResizeObserverFactory }]; } });
@@ -396,9 +396,9 @@ class MutationObserverFactory {
396
396
  return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);
397
397
  }
398
398
  }
399
- MutationObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
400
- MutationObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' });
401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MutationObserverFactory, decorators: [{
399
+ MutationObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
400
+ MutationObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' });
401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: MutationObserverFactory, decorators: [{
402
402
  type: Injectable,
403
403
  args: [{ providedIn: 'root' }]
404
404
  }] });
@@ -458,13 +458,103 @@ class ContentObserverService {
458
458
  }
459
459
  }
460
460
  }
461
- ContentObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
462
- ContentObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContentObserverService, providedIn: 'root' });
463
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ContentObserverService, decorators: [{
461
+ ContentObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
462
+ ContentObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ContentObserverService, providedIn: 'root' });
463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ContentObserverService, decorators: [{
464
464
  type: Injectable,
465
465
  args: [{ providedIn: 'root' }]
466
466
  }], ctorParameters: function () { return [{ type: MutationObserverFactory }]; } });
467
467
 
468
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
469
+ class ClickObserverFactory {
470
+ create() {
471
+ return fromEvent(document, 'click');
472
+ }
473
+ }
474
+ ClickObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
475
+ ClickObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickObserverFactory, providedIn: 'root' });
476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickObserverFactory, decorators: [{
477
+ type: Injectable,
478
+ args: [{ providedIn: 'root' }]
479
+ }] });
480
+ class ClickObserverService {
481
+ constructor(_clickObserverFactory) {
482
+ this._clickObserverFactory = _clickObserverFactory;
483
+ this._observedElements = new Map();
484
+ }
485
+ ngOnDestroy() {
486
+ this._observedElements.forEach((_, element) => this._cleanupObserver(element));
487
+ }
488
+ observe(elementOrRef) {
489
+ const element = coerceElement(elementOrRef);
490
+ return new Observable((observer) => {
491
+ const stream = this._observeElement(element);
492
+ const subscription = stream.subscribe(observer);
493
+ return () => {
494
+ subscription.unsubscribe();
495
+ this._unobserveElement(element);
496
+ };
497
+ });
498
+ }
499
+ _observeElement(element) {
500
+ if (!this._observedElements.has(element)) {
501
+ const stream = new Subject();
502
+ const observer = this._clickObserverFactory.create();
503
+ const sub = observer.subscribe((event) => stream.next(event));
504
+ this._observedElements.set(element, { observer: sub, stream, count: 1 });
505
+ }
506
+ else {
507
+ this._observedElements.get(element).count++;
508
+ }
509
+ return this._observedElements.get(element).stream;
510
+ }
511
+ _unobserveElement(element) {
512
+ if (this._observedElements.has(element)) {
513
+ this._observedElements.get(element).count--;
514
+ if (!this._observedElements.get(element).count) {
515
+ this._cleanupObserver(element);
516
+ }
517
+ }
518
+ }
519
+ _cleanupObserver(element) {
520
+ if (this._observedElements.has(element)) {
521
+ const { observer, stream } = this._observedElements.get(element);
522
+ if (observer) {
523
+ observer.unsubscribe();
524
+ }
525
+ stream.complete();
526
+ this._observedElements.delete(element);
527
+ }
528
+ }
529
+ }
530
+ ClickObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickObserverService, deps: [{ token: ClickObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
531
+ ClickObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickObserverService, providedIn: 'root' });
532
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickObserverService, decorators: [{
533
+ type: Injectable,
534
+ args: [{ providedIn: 'root' }]
535
+ }], ctorParameters: function () { return [{ type: ClickObserverFactory }]; } });
536
+
537
+ class DestroyService {
538
+ constructor() {
539
+ this._destroy$ = new Subject();
540
+ }
541
+ get destroy$() {
542
+ return this._destroy$.asObservable();
543
+ }
544
+ ngOnDestroy() {
545
+ this._destroy$.next(true);
546
+ this._destroy$.unsubscribe();
547
+ }
548
+ }
549
+ DestroyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DestroyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
550
+ DestroyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DestroyService, providedIn: 'any' });
551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DestroyService, decorators: [{
552
+ type: Injectable,
553
+ args: [{
554
+ providedIn: 'any',
555
+ }]
556
+ }] });
557
+
468
558
  class ObserveResizeDirective {
469
559
  constructor() {
470
560
  this._resizeObserver = inject(ResizeObserverService);
@@ -508,9 +598,9 @@ class ObserveResizeDirective {
508
598
  this._currentSubscription?.unsubscribe();
509
599
  }
510
600
  }
511
- ObserveResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
512
- 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 });
513
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveResizeDirective, decorators: [{
601
+ ObserveResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
602
+ ObserveResizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: ObserveResizeDirective, isStandalone: true, selector: "[etObserveResize]", inputs: { disabled: ["etObserveResizeDisabled", "disabled"], debounce: ["etObserveResizeDebounce", "debounce"] }, outputs: { event: "etObserveResize" }, exportAs: ["etObserveResize"], ngImport: i0 });
603
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ObserveResizeDirective, decorators: [{
514
604
  type: Directive,
515
605
  args: [{
516
606
  selector: '[etObserveResize]',
@@ -571,9 +661,9 @@ class ObserveContentDirective {
571
661
  this._currentSubscription?.unsubscribe();
572
662
  }
573
663
  }
574
- ObserveContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
575
- 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 });
576
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ObserveContentDirective, decorators: [{
664
+ ObserveContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
665
+ ObserveContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: ObserveContentDirective, isStandalone: true, selector: "[etObserveContent]", inputs: { disabled: ["etObserveContentDisabled", "disabled"], debounce: ["etObserveContentDebounce", "debounce"] }, outputs: { event: "etObserveContent" }, exportAs: ["etObserveContent"], ngImport: i0 });
666
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ObserveContentDirective, decorators: [{
577
667
  type: Directive,
578
668
  args: [{
579
669
  selector: '[etObserveContent]',
@@ -591,6 +681,339 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
591
681
  args: ['etObserveContentDebounce']
592
682
  }] } });
593
683
 
684
+ class ClickOutsideDirective {
685
+ constructor() {
686
+ this._elementRef = inject(ElementRef);
687
+ this._clickObserverService = inject(ClickObserverService);
688
+ this._subscription = null;
689
+ this.etClickOutside = new EventEmitter();
690
+ }
691
+ ngOnInit() {
692
+ setTimeout(() => {
693
+ this._subscription = this._clickObserverService.observe(this._elementRef.nativeElement).subscribe((event) => {
694
+ const activeElement = event.target;
695
+ const isInside = this._elementRef.nativeElement.contains(activeElement);
696
+ if (!isInside) {
697
+ this.etClickOutside.emit(event);
698
+ }
699
+ });
700
+ });
701
+ }
702
+ ngOnDestroy() {
703
+ this._subscription?.unsubscribe();
704
+ }
705
+ }
706
+ ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
707
+ ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: ClickOutsideDirective, isStandalone: true, selector: "[etClickOutside]", outputs: { etClickOutside: "etClickOutside" }, ngImport: i0 });
708
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ClickOutsideDirective, decorators: [{
709
+ type: Directive,
710
+ args: [{
711
+ selector: '[etClickOutside]',
712
+ standalone: true,
713
+ }]
714
+ }], propDecorators: { etClickOutside: [{
715
+ type: Output
716
+ }] } });
717
+
718
+ const OBSERVE_SCROLL_STATE = new InjectionToken('OBSERVE_SCROLL_STATE');
719
+
720
+ const SCROLL_OBSERVER_IGNORE_TARGET_CLASS = 'et-scroll-observer-ignore-target';
721
+ class ScrollObserverIgnoreTargetDirective {
722
+ }
723
+ ScrollObserverIgnoreTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
724
+ ScrollObserverIgnoreTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: ScrollObserverIgnoreTargetDirective, isStandalone: true, selector: "[etScrollObserverIgnoreTarget]", host: { classAttribute: "et-scroll-observer-ignore-target" }, ngImport: i0 });
725
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, decorators: [{
726
+ type: Directive,
727
+ args: [{
728
+ selector: '[etScrollObserverIgnoreTarget]',
729
+ standalone: true,
730
+ host: {
731
+ class: SCROLL_OBSERVER_IGNORE_TARGET_CLASS,
732
+ },
733
+ }]
734
+ }] });
735
+
736
+ const provideViewportConfig = (viewportConfig) => {
737
+ return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
738
+ };
739
+
740
+ const clamp = (value, min = 0, max = 100) => {
741
+ return Math.max(min, Math.min(max, value));
742
+ };
743
+
744
+ const elementCanScroll = (element) => {
745
+ const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
746
+ return scrollHeight > clientHeight || scrollWidth > clientWidth;
747
+ };
748
+
749
+ class ObserveScrollStateDirective {
750
+ constructor() {
751
+ this._destroy$ = inject(DestroyService).destroy$;
752
+ this._elementRef = inject(ElementRef);
753
+ this._contentObserverService = inject(ContentObserverService);
754
+ this._resizeObserverService = inject(ResizeObserverService);
755
+ this._observedChildren = {
756
+ first: this._firstCurrentChild,
757
+ last: this._lastCurrentChild,
758
+ };
759
+ this._rootMargin = 0;
760
+ this._threshold = 1;
761
+ this._intersectionObserver = null;
762
+ this.etObserveScrollState = new EventEmitter();
763
+ }
764
+ get _firstCurrentChild() {
765
+ const element = this._elementRef.nativeElement.querySelector(`:first-child`);
766
+ return this._getNonIgnoredChild(element, 'next');
767
+ }
768
+ get _lastCurrentChild() {
769
+ const element = this._elementRef.nativeElement.querySelector(`:last-child`);
770
+ return this._getNonIgnoredChild(element, 'previous');
771
+ }
772
+ get observerRootMargin() {
773
+ return this._rootMargin;
774
+ }
775
+ set observerRootMargin(value) {
776
+ this._rootMargin = coerceNumberProperty(value);
777
+ }
778
+ get observerThreshold() {
779
+ return this._threshold;
780
+ }
781
+ set observerThreshold(value) {
782
+ this._threshold = coerceNumberProperty(value);
783
+ }
784
+ ngOnInit() {
785
+ this._contentObserverService
786
+ .observe(this._elementRef.nativeElement)
787
+ .pipe(tap(() => this._checkChildren()), takeUntil(this._destroy$))
788
+ .subscribe();
789
+ this._resizeObserverService
790
+ .observe(this._elementRef.nativeElement)
791
+ .pipe(debounceTime(25), tap(() => {
792
+ if (!this._intersectionObserver && elementCanScroll(this._elementRef.nativeElement)) {
793
+ this._checkChildren();
794
+ }
795
+ }), takeUntil(this._destroy$))
796
+ .subscribe();
797
+ this._checkChildren();
798
+ }
799
+ ngOnDestroy() {
800
+ this._clearIntersectionObserver();
801
+ }
802
+ _checkChildren() {
803
+ this._clearIntersectionObserver();
804
+ if (this._firstCurrentChild === this._lastCurrentChild ||
805
+ !this._firstCurrentChild ||
806
+ !this._lastCurrentChild ||
807
+ !elementCanScroll(this._elementRef.nativeElement)) {
808
+ this._unobserveChild('first');
809
+ this._unobserveChild('last');
810
+ this.etObserveScrollState.emit({
811
+ isAtStart: true,
812
+ isAtEnd: true,
813
+ canScroll: false,
814
+ });
815
+ }
816
+ else {
817
+ this._intersectionObserver = this._initiateIntersectionObserver();
818
+ this._observeChild('first', this._firstCurrentChild);
819
+ this._observeChild('last', this._lastCurrentChild);
820
+ }
821
+ }
822
+ _initiateIntersectionObserver() {
823
+ const observer = new IntersectionObserver((entries) => {
824
+ const { first, last } = this._observedChildren;
825
+ const isAtStart = entries.find((entry) => entry.target === first)?.isIntersecting ?? false;
826
+ const isAtEnd = entries.find((entry) => entry.target === last)?.isIntersecting ?? false;
827
+ this.etObserveScrollState.emit({
828
+ isAtStart,
829
+ isAtEnd,
830
+ canScroll: !isAtStart || !isAtEnd,
831
+ });
832
+ }, {
833
+ root: this._elementRef.nativeElement,
834
+ rootMargin: `${this._rootMargin}px`,
835
+ threshold: this._threshold,
836
+ });
837
+ return observer;
838
+ }
839
+ _observeChild(child, element) {
840
+ this._intersectionObserver?.observe(element);
841
+ this._observedChildren[child] = element;
842
+ }
843
+ _unobserveChild(child) {
844
+ const observedChild = this._observedChildren[child];
845
+ if (!observedChild) {
846
+ return;
847
+ }
848
+ this._intersectionObserver?.unobserve(observedChild);
849
+ this._observedChildren[child] = null;
850
+ }
851
+ _clearIntersectionObserver() {
852
+ this._intersectionObserver?.disconnect();
853
+ this._intersectionObserver = null;
854
+ }
855
+ _getNonIgnoredChild(element, direction) {
856
+ if (!element) {
857
+ return null;
858
+ }
859
+ if (element?.classList.contains(SCROLL_OBSERVER_IGNORE_TARGET_CLASS)) {
860
+ const nextElement = element[`${direction}ElementSibling`];
861
+ if (!nextElement) {
862
+ return null;
863
+ }
864
+ return this._getNonIgnoredChild(nextElement, direction);
865
+ }
866
+ return element;
867
+ }
868
+ }
869
+ ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
870
+ ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: ObserveScrollStateDirective, isStandalone: true, selector: "[etObserveScrollState]", inputs: { observerRootMargin: "observerRootMargin", observerThreshold: "observerThreshold" }, outputs: { etObserveScrollState: "etObserveScrollState" }, providers: [
871
+ {
872
+ provide: OBSERVE_SCROLL_STATE,
873
+ useExisting: ObserveScrollStateDirective,
874
+ },
875
+ ], exportAs: ["etObserveScrollState"], ngImport: i0 });
876
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ObserveScrollStateDirective, decorators: [{
877
+ type: Directive,
878
+ args: [{
879
+ selector: '[etObserveScrollState]',
880
+ exportAs: 'etObserveScrollState',
881
+ standalone: true,
882
+ providers: [
883
+ {
884
+ provide: OBSERVE_SCROLL_STATE,
885
+ useExisting: ObserveScrollStateDirective,
886
+ },
887
+ ],
888
+ }]
889
+ }], propDecorators: { observerRootMargin: [{
890
+ type: Input
891
+ }], observerThreshold: [{
892
+ type: Input
893
+ }], etObserveScrollState: [{
894
+ type: Output
895
+ }] } });
896
+
897
+ const CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';
898
+ const CURSOR_DRAG_SCROLLING_PREPARED_CLASS = 'et-cursor-drag-scroll--prepared';
899
+
900
+ class CursorDragScrollDirective {
901
+ constructor() {
902
+ this._destroy$ = inject(DestroyService).destroy$;
903
+ this._elementRef = inject(ElementRef);
904
+ this._contentObserverService = inject(ContentObserverService);
905
+ this._resizeObserverService = inject(ResizeObserverService);
906
+ this._bufferUntilScroll = 5;
907
+ this._mouseUp$ = new Subject();
908
+ this._isScrolling = false;
909
+ this._canScroll = false;
910
+ this._currentScrollState = {
911
+ top: 0,
912
+ left: 0,
913
+ x: 0,
914
+ y: 0,
915
+ };
916
+ }
917
+ ngAfterViewInit() {
918
+ combineLatest([
919
+ this._contentObserverService.observe(this._elementRef.nativeElement),
920
+ this._resizeObserverService.observe(this._elementRef.nativeElement),
921
+ ])
922
+ .pipe(tap(() => this._updateCanScrollState()), takeUntil(this._destroy$))
923
+ .subscribe();
924
+ fromEvent(this._elementRef.nativeElement, 'mousedown')
925
+ .pipe(tap((e) => this._onMouseDown(e)), takeUntil(this._destroy$))
926
+ .subscribe();
927
+ this._updateCanScrollState();
928
+ }
929
+ _onMouseDown(e) {
930
+ if (!this._elementRef?.nativeElement || !this._canScroll) {
931
+ return;
932
+ }
933
+ const element = this._elementRef.nativeElement;
934
+ element.classList.add(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
935
+ this._elementRef.nativeElement.style.scrollSnapType = 'none';
936
+ this._elementRef.nativeElement.style.scrollBehavior = 'unset';
937
+ this._currentScrollState = {
938
+ left: this._elementRef.nativeElement.scrollLeft,
939
+ top: this._elementRef.nativeElement.scrollTop,
940
+ x: e.clientX,
941
+ y: e.clientY,
942
+ };
943
+ fromEvent(document, 'mousemove')
944
+ .pipe(tap((e) => this._mouseMoveHandler(e)), takeUntil(this._mouseUp$), takeUntil(this._destroy$))
945
+ .subscribe();
946
+ fromEvent(document, 'mouseup')
947
+ .pipe(tap(() => this._mouseUpHandler()), take(1), takeUntil(this._destroy$))
948
+ .subscribe();
949
+ }
950
+ _mouseMoveHandler(e) {
951
+ e.preventDefault();
952
+ if (!this._elementRef?.nativeElement) {
953
+ return;
954
+ }
955
+ const dx = e.clientX - this._currentScrollState.x;
956
+ const dy = e.clientY - this._currentScrollState.y;
957
+ if (Math.abs(dx) > this._bufferUntilScroll || Math.abs(dy) > this._bufferUntilScroll) {
958
+ const element = this._elementRef.nativeElement;
959
+ if (!this._isScrolling) {
960
+ this._isScrolling = true;
961
+ element.style.cursor = 'grabbing';
962
+ element.classList.add(CURSOR_DRAG_SCROLLING_CLASS);
963
+ element.scroll({
964
+ top: this._currentScrollState.top - dy,
965
+ left: this._currentScrollState.left - dx,
966
+ behavior: 'smooth',
967
+ });
968
+ }
969
+ else {
970
+ element.scrollTop = this._currentScrollState.top - dy;
971
+ element.scrollLeft = this._currentScrollState.left - dx;
972
+ }
973
+ }
974
+ }
975
+ _mouseUpHandler() {
976
+ this._mouseUp$.next(true);
977
+ this._isScrolling = false;
978
+ if (!this._elementRef?.nativeElement) {
979
+ return;
980
+ }
981
+ this._elementRef.nativeElement.style.scrollSnapType = '';
982
+ this._elementRef.nativeElement.style.scrollBehavior = '';
983
+ this._elementRef.nativeElement.style.cursor = 'grab';
984
+ this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_CLASS);
985
+ this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
986
+ }
987
+ _updateCanScrollState() {
988
+ this._canScroll = elementCanScroll(this._elementRef.nativeElement);
989
+ if (this._canScroll) {
990
+ this._elementRef.nativeElement.style.cursor = 'grab';
991
+ }
992
+ else {
993
+ this._elementRef.nativeElement.style.cursor = 'default';
994
+ }
995
+ }
996
+ _checkCanScroll() {
997
+ if (this._elementRef.nativeElement.scrollWidth > this._elementRef.nativeElement.clientWidth) {
998
+ return true;
999
+ }
1000
+ if (this._elementRef.nativeElement.scrollHeight > this._elementRef.nativeElement.clientHeight) {
1001
+ return true;
1002
+ }
1003
+ return false;
1004
+ }
1005
+ }
1006
+ CursorDragScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CursorDragScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1007
+ CursorDragScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.8", type: CursorDragScrollDirective, isStandalone: true, selector: "[etCursorDragScroll]", exportAs: ["etCursorDragScroll"], ngImport: i0 });
1008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CursorDragScrollDirective, decorators: [{
1009
+ type: Directive,
1010
+ args: [{
1011
+ selector: '[etCursorDragScroll]',
1012
+ exportAs: 'etCursorDragScroll',
1013
+ standalone: true,
1014
+ }]
1015
+ }] });
1016
+
594
1017
  const toArray = (value) => {
595
1018
  return Array.from({ length: value }, (_, i) => i);
596
1019
  };
@@ -601,24 +1024,16 @@ class ToArrayPipe {
601
1024
  this.transform = toArray;
602
1025
  }
603
1026
  }
604
- ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
605
- ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" });
606
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ToArrayPipe, decorators: [{
1027
+ ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1028
+ ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.8", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" });
1029
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ToArrayPipe, decorators: [{
607
1030
  type: Pipe,
608
1031
  args: [{ name: 'toArray', standalone: true }]
609
1032
  }] });
610
1033
 
611
- const provideViewportConfig = (viewportConfig) => {
612
- return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
613
- };
614
-
615
- const clamp = (value, min = 0, max = 100) => {
616
- return Math.max(min, Math.min(max, value));
617
- };
618
-
619
1034
  /**
620
1035
  * Generated bundle index. Do not edit.
621
1036
  */
622
1037
 
623
- export { ContentObserverService, DEFAULT_VIEWPORT_CONFIG, FocusVisibleService, LetContext, LetDirective, Memo, MutationObserverFactory, ObserveContentDirective, ObserveResizeDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, ToArrayPipe, VIEWPORT_CONFIG, ViewportService, clamp, provideViewportConfig, toArray, toArrayTrackByFn };
1038
+ 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 };
624
1039
  //# sourceMappingURL=ethlete-core.mjs.map