@ethlete/cdk 5.0.0-next.4 → 5.0.0-next.6
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/CHANGELOG.md +28 -0
- package/fesm2022/ethlete-cdk.mjs +2415 -791
- package/fesm2022/ethlete-cdk.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-cdk.d.ts +767 -121
package/fesm2022/ethlete-cdk.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, TemplateRef, ViewContainerRef, Directive, input, booleanAttribute, computed, isDevMode, model, contentChild, effect, untracked, ChangeDetectionStrategy, ViewEncapsulation, Component, contentChildren, ElementRef, Injector, Input, numberAttribute, DOCUMENT, Injectable, ChangeDetectorRef, signal, forwardRef, ViewChild, ContentChildren, assertInInjectionContext, createComponent, EnvironmentInjector, createEnvironmentInjector, runInInjectionContext, linkedSignal,
|
|
2
|
+
import { InjectionToken, inject, TemplateRef, ViewContainerRef, Directive, input, booleanAttribute, computed, isDevMode, model, contentChild, effect, untracked, ChangeDetectionStrategy, ViewEncapsulation, Component, contentChildren, ElementRef, Injector, Input, numberAttribute, DOCUMENT, Injectable, ChangeDetectorRef, signal, forwardRef, ViewChild, ContentChildren, assertInInjectionContext, createComponent, EnvironmentInjector, createEnvironmentInjector, runInInjectionContext, linkedSignal, DestroyRef, isSignal, viewChild, viewChildren, provideEnvironmentInitializer, ApplicationRef, output, ContentChild, ViewChildren, EventEmitter, Output, Optional, SkipSelf, PLATFORM_ID, inputBinding, afterRenderEffect, IterableDiffers, ComponentFactoryResolver, NgZone, HostAttributeToken } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/cdk/portal';
|
|
4
4
|
import { CdkPortal, PortalModule, ComponentPortal, CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
|
|
5
5
|
import { DomSanitizer, Title } from '@angular/platform-browser';
|
|
6
6
|
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
7
|
-
import { toObservable, takeUntilDestroyed, toSignal, outputFromObservable, outputToObservable } from '@angular/core/rxjs-interop';
|
|
8
|
-
import { map, switchMap, combineLatest, pairwise, tap, BehaviorSubject, filter, Subject, Observable, of, takeUntil, startWith, debounceTime, withLatestFrom, take, merge, skipUntil, fromEvent, timer, distinctUntilChanged, from, finalize, skip, takeWhile, shareReplay, skipWhile, catchError, throwError, Subscription } from 'rxjs';
|
|
7
|
+
import { toObservable, takeUntilDestroyed, toSignal, outputFromObservable, outputToObservable, rxResource } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { map, switchMap, combineLatest, pairwise, tap, BehaviorSubject, filter, Subject, Observable, of, takeUntil, startWith, debounceTime, withLatestFrom, take, merge, skipUntil, fromEvent, timer, distinctUntilChanged, EMPTY, from, finalize, skip, takeWhile, shareReplay, skipWhile, catchError, throwError, Subscription } from 'rxjs';
|
|
9
9
|
import { __decorate, __metadata } from 'tslib';
|
|
10
|
-
import { AsyncPipe, NgComponentOutlet, Location, NgTemplateOutlet, NgClass, DOCUMENT as DOCUMENT$1, NgStyle } from '@angular/common';
|
|
10
|
+
import { AsyncPipe, NgComponentOutlet, Location, NgTemplateOutlet, NgClass, DOCUMENT as DOCUMENT$1, isPlatformBrowser, NgStyle } from '@angular/common';
|
|
11
11
|
import * as i1$1 from '@ethlete/core';
|
|
12
|
-
import { createComponentId, injectRenderer, IS_EMAIL, MUST_MATCH, IS_ARRAY_NOT_EMPTY, AT_LEAST_ONE_REQUIRED, createDestroy, equal, signalHostClasses, signalAttributes, signalHostAttributes, switchQueryListChanges, controlValueSignal, fromNextFrame, elementCanScroll, AnimatedLifecycleDirective, forceReflow, nextFrame, createRootProvider, injectBreakpointObserver, THEME_PROVIDER, ProvideThemeDirective, BOUNDARY_ELEMENT_TOKEN, signalElementScrollState,
|
|
12
|
+
import { createComponentId, injectRenderer, IS_EMAIL, MUST_MATCH, IS_ARRAY_NOT_EMPTY, AT_LEAST_ONE_REQUIRED, createDestroy, equal, signalHostClasses, signalAttributes, signalHostAttributes, switchQueryListChanges, controlValueSignal, fromNextFrame, elementCanScroll, AnimatedLifecycleDirective, forceReflow, nextFrame, createRootProvider, injectBreakpointObserver, THEME_PROVIDER, ProvideThemeDirective, BOUNDARY_ELEMENT_TOKEN, ScrollObserverDirective, signalElementScrollState, ScrollObserverStartDirective, ScrollObserverEndDirective, provideBoundaryElement, applyHostListener, injectBoundaryElement, ANIMATED_LIFECYCLE_TOKEN, cloneFormGroup, getFormGroupValue, injectQueryParam, injectRoute, AnimatedIfDirective, injectObserveBreakpoint, syncSignal, createDocumentElementSignal, createStaticRootProvider, AnimatedOverlayDirective, setInputSignal, typedBreakpointTransform, boolBreakpointTransform, numberBreakpointTransform, signalElementDimensions, createCanAnimateSignal, useCursorDragScroll, signalElementChildren, signalElementIntersection, signalClasses, signalHostStyles, signalStyles, getScrollSnapTarget, getScrollContainerTarget, getScrollItemTarget, getElementScrollCoordinates, provideBreakpointInstance, injectTemplateRef, signalHostElementScrollState, signalHostElementDimensions, createProvider, previousSignalValue, signalHostElementIntersection, injectHostElement, createFlipAnimation, isObject, getObjectProperty, RuntimeError, KeyPressManager, scrollToElement, ClickOutsideDirective, clamp, injectFocusVisibleTracker, inferMimeType, applyHostListeners, TypedQueryList } from '@ethlete/core';
|
|
13
13
|
import * as i1$5 from '@angular/cdk/a11y';
|
|
14
14
|
import { FocusMonitor, FocusKeyManager, AriaDescriber, A11yModule } from '@angular/cdk/a11y';
|
|
15
15
|
import { AutofillMonitor } from '@angular/cdk/text-field';
|
|
@@ -19,7 +19,7 @@ import { coerceCssPixelValue, coerceElement, _isNumberValue } from '@angular/cdk
|
|
|
19
19
|
import { Dialog, DialogConfig, CdkDialogContainer } from '@angular/cdk/dialog';
|
|
20
20
|
import { NoopScrollStrategy, OverlayRef as OverlayRef$1, Overlay } from '@angular/cdk/overlay';
|
|
21
21
|
import * as i1$2 from '@angular/router';
|
|
22
|
-
import {
|
|
22
|
+
import { Router, RouterLink, isActive, RouterLinkActive, NavigationEnd } from '@angular/router';
|
|
23
23
|
import { isQueryStateLoading, isQueryStateFailure, queryComputed, switchQueryState, isQueryStateSuccess, extractQuery, QueryDirective, injectInfinityQueryResponseDelay, v2ShouldRetryRequest, parseHttpErrorCodeToTitleEn, parseHttpErrorCodeToTitleDe, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToMessageDe, isClassValidatorError, isSymfonyFormViolationListError, isSymfonyListError } from '@ethlete/query';
|
|
24
24
|
import { format, parse } from 'date-fns';
|
|
25
25
|
import { Platform } from '@angular/cdk/platform';
|
|
@@ -4154,7 +4154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
4154
4154
|
}] } });
|
|
4155
4155
|
|
|
4156
4156
|
const INPUT_TOKEN = new InjectionToken('ET_INPUT_DIRECTIVE_TOKEN');
|
|
4157
|
-
let nextUniqueId$
|
|
4157
|
+
let nextUniqueId$5 = 0;
|
|
4158
4158
|
class InputDirective {
|
|
4159
4159
|
get control() {
|
|
4160
4160
|
if (!this._ngControl) {
|
|
@@ -4282,7 +4282,7 @@ class InputDirective {
|
|
|
4282
4282
|
this._focusMonitor = inject(FocusMonitor);
|
|
4283
4283
|
this._elementRef = inject(ElementRef);
|
|
4284
4284
|
this._neverEmptyInputs = ['date', 'datetime', 'datetime-local', 'month', 'time', 'week'];
|
|
4285
|
-
this._id = `et-input-${++nextUniqueId$
|
|
4285
|
+
this._id = `et-input-${++nextUniqueId$5}`;
|
|
4286
4286
|
this.autocomplete = input(null, ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
|
|
4287
4287
|
this.placeholder = input(null, ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
|
|
4288
4288
|
this.min = input(null, ...(ngDevMode ? [{ debugName: "min" }] : []));
|
|
@@ -4699,11 +4699,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
4699
4699
|
}] });
|
|
4700
4700
|
|
|
4701
4701
|
const LABEL_TOKEN = new InjectionToken('ET_LABEL_COMPONENT_TOKEN');
|
|
4702
|
-
let nextUniqueId$
|
|
4702
|
+
let nextUniqueId$4 = 0;
|
|
4703
4703
|
class LabelComponent {
|
|
4704
4704
|
constructor() {
|
|
4705
4705
|
this.formFieldStateService = inject(FormFieldStateService);
|
|
4706
|
-
this.id = `et-label-${++nextUniqueId$
|
|
4706
|
+
this.id = `et-label-${++nextUniqueId$4}`;
|
|
4707
4707
|
}
|
|
4708
4708
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: LabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4709
4709
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: LabelComponent, isStandalone: true, selector: "et-label", host: { classAttribute: "et-label" }, providers: [{ provide: LABEL_TOKEN, useExisting: LabelComponent }], exportAs: ["etLabel"], ngImport: i0, template: `
|
|
@@ -5265,7 +5265,131 @@ const mergeOverlayBreakpointConfigs = (...configs) => {
|
|
|
5265
5265
|
return combinedConfig;
|
|
5266
5266
|
};
|
|
5267
5267
|
|
|
5268
|
-
const
|
|
5268
|
+
const FLOATING_UI_PLACEMENTS = [
|
|
5269
|
+
'top',
|
|
5270
|
+
'left',
|
|
5271
|
+
'bottom',
|
|
5272
|
+
'right',
|
|
5273
|
+
'top-start',
|
|
5274
|
+
'top-end',
|
|
5275
|
+
'right-start',
|
|
5276
|
+
'right-end',
|
|
5277
|
+
'bottom-start',
|
|
5278
|
+
'bottom-end',
|
|
5279
|
+
'left-start',
|
|
5280
|
+
'left-end',
|
|
5281
|
+
];
|
|
5282
|
+
|
|
5283
|
+
/**
|
|
5284
|
+
* A utility function to enhance the ux of views containing forms.
|
|
5285
|
+
* It helps to prevent the user from accidentally losing unsaved form changes.
|
|
5286
|
+
*/
|
|
5287
|
+
const createNavigationDismissChecker = (config) => {
|
|
5288
|
+
assertInInjectionContext(createNavigationDismissChecker);
|
|
5289
|
+
const { form, compareFn, dismissCheckFn } = config;
|
|
5290
|
+
const currentFormValue = controlValueSignal(form);
|
|
5291
|
+
const hasChanges = computed(() => {
|
|
5292
|
+
const formValue = currentFormValue();
|
|
5293
|
+
if (!formValue)
|
|
5294
|
+
return false;
|
|
5295
|
+
return !(compareFn ? compareFn(formValue, defaultFormValue()) : equal(formValue, defaultFormValue()));
|
|
5296
|
+
}, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
|
|
5297
|
+
const defaultFormValue = signal(config.defaultValue ?? form.getRawValue(), ...(ngDevMode ? [{ debugName: "defaultFormValue" }] : []));
|
|
5298
|
+
const runCheck = () => {
|
|
5299
|
+
const isDefaultFormValue = !hasChanges();
|
|
5300
|
+
if (isDefaultFormValue)
|
|
5301
|
+
return of(true);
|
|
5302
|
+
return dismissCheckFn(form.getRawValue());
|
|
5303
|
+
};
|
|
5304
|
+
const refreshDefaultFormValue = () => {
|
|
5305
|
+
defaultFormValue.set(form.getRawValue());
|
|
5306
|
+
};
|
|
5307
|
+
const restoreDefaultFormValue = () => {
|
|
5308
|
+
form.setValue(defaultFormValue());
|
|
5309
|
+
refreshDefaultFormValue();
|
|
5310
|
+
};
|
|
5311
|
+
return {
|
|
5312
|
+
runCheck,
|
|
5313
|
+
refreshDefaultFormValue,
|
|
5314
|
+
restoreDefaultFormValue,
|
|
5315
|
+
hasChanges,
|
|
5316
|
+
defaultFormValue: defaultFormValue.asReadonly(),
|
|
5317
|
+
};
|
|
5318
|
+
};
|
|
5319
|
+
|
|
5320
|
+
const injectRouterNavigationState = () => {
|
|
5321
|
+
const router = inject(Router);
|
|
5322
|
+
const navState = router.getCurrentNavigation()?.extras.state;
|
|
5323
|
+
return (navState || null);
|
|
5324
|
+
};
|
|
5325
|
+
|
|
5326
|
+
const getClientXY = (event) => {
|
|
5327
|
+
if (event.type[0] === 't') {
|
|
5328
|
+
const touch = event.targetTouches[0] ?? event.changedTouches[0];
|
|
5329
|
+
return touch ? { clientX: touch.clientX, clientY: touch.clientY } : { clientX: 0, clientY: 0 };
|
|
5330
|
+
}
|
|
5331
|
+
return { clientX: event.clientX, clientY: event.clientY };
|
|
5332
|
+
};
|
|
5333
|
+
const createSwipeTracker = (startEvent) => {
|
|
5334
|
+
const { clientX: originClientX, clientY: originClientY } = getClientXY(startEvent);
|
|
5335
|
+
const startTime = Date.now();
|
|
5336
|
+
let movementX = 0;
|
|
5337
|
+
let movementY = 0;
|
|
5338
|
+
let isSwiping = false;
|
|
5339
|
+
let isScrolling = false;
|
|
5340
|
+
const update = (event) => {
|
|
5341
|
+
const { clientX, clientY } = getClientXY(event);
|
|
5342
|
+
movementX = clientX - originClientX;
|
|
5343
|
+
movementY = clientY - originClientY;
|
|
5344
|
+
const positiveMovementX = Math.abs(movementX);
|
|
5345
|
+
const positiveMovementY = Math.abs(movementY);
|
|
5346
|
+
if (!isSwiping && !isScrolling) {
|
|
5347
|
+
if (positiveMovementY > positiveMovementX) {
|
|
5348
|
+
isScrolling = true;
|
|
5349
|
+
}
|
|
5350
|
+
else {
|
|
5351
|
+
isSwiping = true;
|
|
5352
|
+
}
|
|
5353
|
+
}
|
|
5354
|
+
return {
|
|
5355
|
+
originClientX,
|
|
5356
|
+
originClientY,
|
|
5357
|
+
timestamp: startTime,
|
|
5358
|
+
movementX,
|
|
5359
|
+
movementY,
|
|
5360
|
+
positiveMovementX,
|
|
5361
|
+
positiveMovementY,
|
|
5362
|
+
isScrolling,
|
|
5363
|
+
isSwiping,
|
|
5364
|
+
};
|
|
5365
|
+
};
|
|
5366
|
+
const end = () => {
|
|
5367
|
+
const swipeTime = Math.max(1, Date.now() - startTime);
|
|
5368
|
+
const positiveMovementX = Math.abs(movementX);
|
|
5369
|
+
const positiveMovementY = Math.abs(movementY);
|
|
5370
|
+
const pixelPerSecondX = (movementX / swipeTime) * 1000;
|
|
5371
|
+
const pixelPerSecondY = (movementY / swipeTime) * 1000;
|
|
5372
|
+
return {
|
|
5373
|
+
movementX,
|
|
5374
|
+
movementY,
|
|
5375
|
+
positiveMovementX,
|
|
5376
|
+
positiveMovementY,
|
|
5377
|
+
pixelPerSecondX,
|
|
5378
|
+
pixelPerSecondY,
|
|
5379
|
+
positivePixelPerSecondX: Math.abs(pixelPerSecondX),
|
|
5380
|
+
positivePixelPerSecondY: Math.abs(pixelPerSecondY),
|
|
5381
|
+
originClientX,
|
|
5382
|
+
originClientY,
|
|
5383
|
+
};
|
|
5384
|
+
};
|
|
5385
|
+
const cancel = () => {
|
|
5386
|
+
movementX = 0;
|
|
5387
|
+
movementY = 0;
|
|
5388
|
+
};
|
|
5389
|
+
return { update, end, cancel };
|
|
5390
|
+
};
|
|
5391
|
+
|
|
5392
|
+
const isTouchEvent$2 = (event) => {
|
|
5269
5393
|
return event.type[0] === 't';
|
|
5270
5394
|
};
|
|
5271
5395
|
const defaultSwipeMoveStyleInterpolator = (event, config) => {
|
|
@@ -5384,15 +5508,29 @@ const shouldCancelDragForScrollableElement = (scrollableElement, direction) => {
|
|
|
5384
5508
|
* Returns a cleanup function to disable the feature.
|
|
5385
5509
|
*/
|
|
5386
5510
|
const enableDragToDismiss = (context) => {
|
|
5387
|
-
const { element: el, overlayRef,
|
|
5511
|
+
const { element: el, overlayRef, config } = context;
|
|
5388
5512
|
const stop$ = new Subject();
|
|
5389
|
-
let
|
|
5513
|
+
let tracker = null;
|
|
5390
5514
|
let isSelectionActive = false;
|
|
5515
|
+
let savedUserSelect = null;
|
|
5516
|
+
const unlockSelection = () => {
|
|
5517
|
+
if (savedUserSelect === null)
|
|
5518
|
+
return;
|
|
5519
|
+
document.body.style.userSelect = savedUserSelect;
|
|
5520
|
+
savedUserSelect = null;
|
|
5521
|
+
};
|
|
5522
|
+
const lockSelection = () => {
|
|
5523
|
+
if (savedUserSelect !== null)
|
|
5524
|
+
return;
|
|
5525
|
+
savedUserSelect = document.body.style.userSelect ?? '';
|
|
5526
|
+
document.body.style.userSelect = 'none';
|
|
5527
|
+
};
|
|
5391
5528
|
const cancelDrag = () => {
|
|
5529
|
+
unlockSelection();
|
|
5392
5530
|
el.style.setProperty('transition', 'transform 100ms var(--ease-out-1)');
|
|
5393
5531
|
el.style.transform =
|
|
5394
5532
|
config.direction === 'to-bottom' || config.direction === 'to-top' ? 'translateY(0)' : 'translateX(0)';
|
|
5395
|
-
|
|
5533
|
+
tracker = null;
|
|
5396
5534
|
setTimeout(() => {
|
|
5397
5535
|
el.style.removeProperty('transition');
|
|
5398
5536
|
el.style.removeProperty('transform');
|
|
@@ -5406,7 +5544,7 @@ const enableDragToDismiss = (context) => {
|
|
|
5406
5544
|
const tag = target.tagName.toLowerCase();
|
|
5407
5545
|
if (tag === 'input' || tag === 'textarea' || tag === 'select' || tag === 'button' || tag === 'a')
|
|
5408
5546
|
return;
|
|
5409
|
-
|
|
5547
|
+
tracker = createSwipeTracker(event);
|
|
5410
5548
|
}))
|
|
5411
5549
|
.subscribe();
|
|
5412
5550
|
fromEvent(document, 'selectionchange')
|
|
@@ -5420,21 +5558,35 @@ const enableDragToDismiss = (context) => {
|
|
|
5420
5558
|
isSelectionActive = true;
|
|
5421
5559
|
cancelDrag();
|
|
5422
5560
|
});
|
|
5423
|
-
merge(fromEvent(el, 'touchmove'), fromEvent(el, 'mousemove'))
|
|
5561
|
+
merge(fromEvent(el, 'touchmove', { passive: false }), fromEvent(el, 'mousemove'))
|
|
5424
5562
|
.pipe(takeUntil(stop$), takeUntil(overlayRef.afterClosed()), tap((event) => {
|
|
5425
|
-
if (
|
|
5563
|
+
if (tracker === null || isSelectionActive)
|
|
5426
5564
|
return;
|
|
5427
|
-
if (isTouchEvent$
|
|
5565
|
+
if (isTouchEvent$2(event)) {
|
|
5428
5566
|
const target = event.target;
|
|
5429
5567
|
const scrollableElement = recursiveFindScrollableParent(target, config.direction);
|
|
5430
5568
|
if (scrollableElement && shouldCancelDragForScrollableElement(scrollableElement, config.direction)) {
|
|
5431
5569
|
cancelDrag();
|
|
5432
5570
|
return;
|
|
5433
5571
|
}
|
|
5572
|
+
event.preventDefault();
|
|
5573
|
+
}
|
|
5574
|
+
const swipeData = tracker.update(event);
|
|
5575
|
+
if (!isTouchEvent$2(event)) {
|
|
5576
|
+
if (savedUserSelect === null) {
|
|
5577
|
+
const { movementX, movementY } = swipeData;
|
|
5578
|
+
const committed = config.direction === 'to-bottom'
|
|
5579
|
+
? movementY >= 8
|
|
5580
|
+
: config.direction === 'to-top'
|
|
5581
|
+
? movementY <= -8
|
|
5582
|
+
: config.direction === 'to-left'
|
|
5583
|
+
? movementX <= -8
|
|
5584
|
+
: movementX >= 8;
|
|
5585
|
+
if (!committed)
|
|
5586
|
+
return;
|
|
5587
|
+
lockSelection();
|
|
5588
|
+
}
|
|
5434
5589
|
}
|
|
5435
|
-
const swipeData = swipeHandlerService.updateSwipe(swipeId, event);
|
|
5436
|
-
if (!swipeData)
|
|
5437
|
-
return;
|
|
5438
5590
|
const css = defaultSwipeMoveStyleInterpolator(swipeData, config);
|
|
5439
5591
|
Object.entries(css).forEach(([key, value]) => {
|
|
5440
5592
|
el.style.setProperty(key, value);
|
|
@@ -5442,13 +5594,17 @@ const enableDragToDismiss = (context) => {
|
|
|
5442
5594
|
}))
|
|
5443
5595
|
.subscribe();
|
|
5444
5596
|
merge(fromEvent(el, 'touchend'), fromEvent(el, 'mouseup'))
|
|
5445
|
-
.pipe(takeUntil(stop$), takeUntil(overlayRef.afterClosed()), tap(() => {
|
|
5446
|
-
|
|
5597
|
+
.pipe(takeUntil(stop$), takeUntil(overlayRef.afterClosed()), tap((event) => {
|
|
5598
|
+
const wasMouseDrag = !isTouchEvent$2(event) && savedUserSelect !== null;
|
|
5599
|
+
unlockSelection();
|
|
5600
|
+
if (tracker === null || isSelectionActive)
|
|
5447
5601
|
return;
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
if (!swipeData)
|
|
5602
|
+
if (!isTouchEvent$2(event) && !wasMouseDrag) {
|
|
5603
|
+
tracker = null;
|
|
5451
5604
|
return;
|
|
5605
|
+
}
|
|
5606
|
+
const swipeData = tracker.end();
|
|
5607
|
+
tracker = null;
|
|
5452
5608
|
const css = defaultSwipeEndStyleInterpolator(swipeData, config);
|
|
5453
5609
|
if (!css) {
|
|
5454
5610
|
overlayRef._closeOverlayVia('touch');
|
|
@@ -5469,6 +5625,7 @@ const enableDragToDismiss = (context) => {
|
|
|
5469
5625
|
.subscribe();
|
|
5470
5626
|
return {
|
|
5471
5627
|
unsubscribe: () => {
|
|
5628
|
+
unlockSelection();
|
|
5472
5629
|
stop$.next();
|
|
5473
5630
|
stop$.complete();
|
|
5474
5631
|
},
|
|
@@ -5476,7 +5633,7 @@ const enableDragToDismiss = (context) => {
|
|
|
5476
5633
|
};
|
|
5477
5634
|
|
|
5478
5635
|
const isHtmlElement = (element) => element instanceof HTMLElement;
|
|
5479
|
-
const isTouchEvent$
|
|
5636
|
+
const isTouchEvent$1 = (event) => event.type[0] === 't';
|
|
5480
5637
|
const isPointerEvent = (event) => event.type[0] === 'c';
|
|
5481
5638
|
const findNextRelevantHtmlElement = (element, depth = 0) => {
|
|
5482
5639
|
if (!element || depth === 10)
|
|
@@ -5499,7 +5656,7 @@ const getOriginCoordinatesAndDimensions = (origin) => {
|
|
|
5499
5656
|
element: origin,
|
|
5500
5657
|
};
|
|
5501
5658
|
}
|
|
5502
|
-
if (isTouchEvent$
|
|
5659
|
+
if (isTouchEvent$1(origin) || isPointerEvent(origin)) {
|
|
5503
5660
|
const target = origin.target;
|
|
5504
5661
|
const relevantElement = findNextRelevantHtmlElement(target) ?? target;
|
|
5505
5662
|
const rect = relevantElement.getBoundingClientRect();
|
|
@@ -6357,42 +6514,21 @@ class OverlayBodyComponent {
|
|
|
6357
6514
|
this.overlayRef = inject(OverlayRef, { optional: true });
|
|
6358
6515
|
this.elementRef = inject(ElementRef);
|
|
6359
6516
|
this.overlayManager = injectOverlayManager();
|
|
6517
|
+
this.scrollObserver = inject(ScrollObserverDirective);
|
|
6360
6518
|
this.dividers = input(false, ...(ngDevMode ? [{ debugName: "dividers" }] : []));
|
|
6361
|
-
this.firstElement = viewChild('firstElement', ...(ngDevMode ? [{ debugName: "firstElement" }] : []));
|
|
6362
|
-
this.lastElement = viewChild('lastElement', ...(ngDevMode ? [{ debugName: "lastElement" }] : []));
|
|
6363
6519
|
this.dividersEnabled = computed(() => this.dividers() === 'dynamic' || this.dividers() === 'static', ...(ngDevMode ? [{ debugName: "dividersEnabled" }] : []));
|
|
6364
6520
|
this.dynamicDividersEnabled = computed(() => this.dividers() === 'dynamic', ...(ngDevMode ? [{ debugName: "dynamicDividersEnabled" }] : []));
|
|
6365
6521
|
this.containerScrollState = signalElementScrollState(this.elementRef);
|
|
6366
|
-
this.firstElementIntersection = signalElementIntersection(this.firstElement, {
|
|
6367
|
-
root: this.elementRef,
|
|
6368
|
-
enabled: this.dynamicDividersEnabled,
|
|
6369
|
-
});
|
|
6370
|
-
this.firstElementVisibility = signal(null, ...(ngDevMode ? [{ debugName: "firstElementVisibility" }] : []));
|
|
6371
|
-
this.lastElementIntersection = signalElementIntersection(this.lastElement, {
|
|
6372
|
-
root: this.elementRef,
|
|
6373
|
-
enabled: this.dynamicDividersEnabled,
|
|
6374
|
-
});
|
|
6375
|
-
this.lastElementVisibility = signal(null, ...(ngDevMode ? [{ debugName: "lastElementVisibility" }] : []));
|
|
6376
6522
|
this.canScroll = computed(() => this.containerScrollState().canScroll, ...(ngDevMode ? [{ debugName: "canScroll" }] : []));
|
|
6377
6523
|
this.isAtStart = computed(() => {
|
|
6378
|
-
if (!this.canScroll())
|
|
6524
|
+
if (!this.canScroll())
|
|
6379
6525
|
return true;
|
|
6380
|
-
|
|
6381
|
-
const intersection = this.firstElementIntersection()[0];
|
|
6382
|
-
if (!intersection) {
|
|
6383
|
-
return this.firstElementVisibility()?.inline ?? true;
|
|
6384
|
-
}
|
|
6385
|
-
return intersection.isIntersecting;
|
|
6526
|
+
return this.scrollObserver.isAtStart();
|
|
6386
6527
|
}, ...(ngDevMode ? [{ debugName: "isAtStart" }] : []));
|
|
6387
6528
|
this.isAtEnd = computed(() => {
|
|
6388
|
-
if (!this.canScroll())
|
|
6529
|
+
if (!this.canScroll())
|
|
6389
6530
|
return true;
|
|
6390
|
-
|
|
6391
|
-
const intersection = this.lastElementIntersection()[0];
|
|
6392
|
-
if (!intersection) {
|
|
6393
|
-
return this.lastElementVisibility()?.inline ?? true;
|
|
6394
|
-
}
|
|
6395
|
-
return intersection.isIntersecting;
|
|
6531
|
+
return this.scrollObserver.isAtEnd();
|
|
6396
6532
|
}, ...(ngDevMode ? [{ debugName: "isAtEnd" }] : []));
|
|
6397
6533
|
this.enableDividerAnimations = signal(false, ...(ngDevMode ? [{ debugName: "enableDividerAnimations" }] : []));
|
|
6398
6534
|
this.hostClassBindings = signalHostClasses({
|
|
@@ -6403,24 +6539,8 @@ class OverlayBodyComponent {
|
|
|
6403
6539
|
'et-scrollable-body--is-at-start': computed(() => (this.dynamicDividersEnabled() ? this.isAtStart() : false)),
|
|
6404
6540
|
'et-scrollable-body--is-at-end': computed(() => (this.dynamicDividersEnabled() ? this.isAtEnd() : false)),
|
|
6405
6541
|
});
|
|
6406
|
-
effect(() =>
|
|
6407
|
-
|
|
6408
|
-
const firstElement = this.firstElement()?.nativeElement;
|
|
6409
|
-
const lastElement = this.lastElement()?.nativeElement;
|
|
6410
|
-
if (!scrollable || !firstElement || !lastElement) {
|
|
6411
|
-
return;
|
|
6412
|
-
}
|
|
6413
|
-
this.firstElementVisibility.set(isElementVisible({
|
|
6414
|
-
container: scrollable,
|
|
6415
|
-
element: firstElement,
|
|
6416
|
-
}));
|
|
6417
|
-
this.lastElementVisibility.set(isElementVisible({
|
|
6418
|
-
container: scrollable,
|
|
6419
|
-
element: lastElement,
|
|
6420
|
-
}));
|
|
6421
|
-
// We need to wait one frame before enabling animations to prevent a animation from playing during initial render.
|
|
6422
|
-
nextFrame(() => this.enableDividerAnimations.set(true));
|
|
6423
|
-
});
|
|
6542
|
+
effect(() => this.scrollObserver.enabled.set(this.dynamicDividersEnabled()));
|
|
6543
|
+
nextFrame(() => this.enableDividerAnimations.set(true));
|
|
6424
6544
|
}
|
|
6425
6545
|
ngOnInit() {
|
|
6426
6546
|
if (!this.overlayRef) {
|
|
@@ -6435,19 +6555,19 @@ class OverlayBodyComponent {
|
|
|
6435
6555
|
this.elementRef.nativeElement.scrollTo({ top: 0, behavior });
|
|
6436
6556
|
}
|
|
6437
6557
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: OverlayBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6438
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
6558
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: OverlayBodyComponent, isStandalone: true, selector: "[et-overlay-body], et-overlay-body", inputs: { dividers: { classPropertyName: "dividers", publicName: "dividers", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-overlay-body" }, providers: [
|
|
6439
6559
|
{
|
|
6440
6560
|
provide: OVERLAY_BODY_TOKEN,
|
|
6441
6561
|
useExisting: OverlayBodyComponent,
|
|
6442
6562
|
},
|
|
6443
6563
|
provideBoundaryElement(),
|
|
6444
|
-
],
|
|
6564
|
+
], hostDirectives: [{ directive: i1$1.ScrollObserverDirective }], ngImport: i0, template: `
|
|
6445
6565
|
<div class="et-overlay-body-container">
|
|
6446
|
-
<div
|
|
6566
|
+
<div class="et-overlay-body-start-element" etScrollObserverStart></div>
|
|
6447
6567
|
<ng-content />
|
|
6448
|
-
<div
|
|
6568
|
+
<div class="et-overlay-body-end-element" etScrollObserverEnd></div>
|
|
6449
6569
|
</div>
|
|
6450
|
-
`, isInline: true }); }
|
|
6570
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: ScrollObserverStartDirective, selector: "[etScrollObserverStart]" }, { kind: "directive", type: ScrollObserverEndDirective, selector: "[etScrollObserverEnd]" }] }); }
|
|
6451
6571
|
}
|
|
6452
6572
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: OverlayBodyComponent, decorators: [{
|
|
6453
6573
|
type: Component,
|
|
@@ -6455,11 +6575,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
6455
6575
|
selector: '[et-overlay-body], et-overlay-body',
|
|
6456
6576
|
template: `
|
|
6457
6577
|
<div class="et-overlay-body-container">
|
|
6458
|
-
<div
|
|
6578
|
+
<div class="et-overlay-body-start-element" etScrollObserverStart></div>
|
|
6459
6579
|
<ng-content />
|
|
6460
|
-
<div
|
|
6580
|
+
<div class="et-overlay-body-end-element" etScrollObserverEnd></div>
|
|
6461
6581
|
</div>
|
|
6462
6582
|
`,
|
|
6583
|
+
imports: [ScrollObserverStartDirective, ScrollObserverEndDirective],
|
|
6584
|
+
hostDirectives: [ScrollObserverDirective],
|
|
6463
6585
|
providers: [
|
|
6464
6586
|
{
|
|
6465
6587
|
provide: OVERLAY_BODY_TOKEN,
|
|
@@ -6471,7 +6593,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
6471
6593
|
class: 'et-overlay-body',
|
|
6472
6594
|
},
|
|
6473
6595
|
}]
|
|
6474
|
-
}], ctorParameters: () => [], propDecorators: { dividers: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividers", required: false }] }]
|
|
6596
|
+
}], ctorParameters: () => [], propDecorators: { dividers: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividers", required: false }] }] } });
|
|
6475
6597
|
|
|
6476
6598
|
class OverlayCloseDirective {
|
|
6477
6599
|
constructor() {
|
|
@@ -7925,106 +8047,6 @@ const anchoredDialogOverlayStrategy = (config = {}) => {
|
|
|
7925
8047
|
};
|
|
7926
8048
|
};
|
|
7927
8049
|
|
|
7928
|
-
let nextUniqueId$4 = 0;
|
|
7929
|
-
const isTouchEvent$1 = (event) => {
|
|
7930
|
-
return event.type[0] === 't';
|
|
7931
|
-
};
|
|
7932
|
-
class SwipeHandlerService {
|
|
7933
|
-
constructor() {
|
|
7934
|
-
this._handlerMap = {};
|
|
7935
|
-
}
|
|
7936
|
-
startSwipe(event) {
|
|
7937
|
-
const handlerId = nextUniqueId$4++;
|
|
7938
|
-
const originClientX = isTouchEvent$1(event) ? event.targetTouches[0].clientX : event.clientX;
|
|
7939
|
-
const originClientY = isTouchEvent$1(event) ? event.targetTouches[0].clientY : event.clientY;
|
|
7940
|
-
const timestamp = Date.now();
|
|
7941
|
-
this._handlerMap[handlerId] = {
|
|
7942
|
-
originClientX,
|
|
7943
|
-
originClientY,
|
|
7944
|
-
timestamp,
|
|
7945
|
-
movementX: 0,
|
|
7946
|
-
movementY: 0,
|
|
7947
|
-
positiveMovementX: 0,
|
|
7948
|
-
positiveMovementY: 0,
|
|
7949
|
-
isScrolling: false,
|
|
7950
|
-
isSwiping: false,
|
|
7951
|
-
};
|
|
7952
|
-
return handlerId;
|
|
7953
|
-
}
|
|
7954
|
-
updateSwipe(handlerId, event) {
|
|
7955
|
-
const handler = this._getSwipeHandler(handlerId);
|
|
7956
|
-
if (!handler)
|
|
7957
|
-
return null;
|
|
7958
|
-
const { originClientX, originClientY, isSwiping, isScrolling } = handler;
|
|
7959
|
-
const currentClientX = isTouchEvent$1(event) ? event.targetTouches[0].clientX : event.clientX;
|
|
7960
|
-
const currentClientY = isTouchEvent$1(event) ? event.targetTouches[0].clientY : event.clientY;
|
|
7961
|
-
const movementX = (originClientX - currentClientX) * -1;
|
|
7962
|
-
const movementY = (originClientY - currentClientY) * -1;
|
|
7963
|
-
const positiveMovementX = Math.abs(movementX);
|
|
7964
|
-
const positiveMovementY = Math.abs(movementY);
|
|
7965
|
-
if (!isSwiping && !isScrolling) {
|
|
7966
|
-
if (positiveMovementY > positiveMovementX) {
|
|
7967
|
-
handler.isScrolling = true;
|
|
7968
|
-
}
|
|
7969
|
-
else {
|
|
7970
|
-
handler.isSwiping = true;
|
|
7971
|
-
}
|
|
7972
|
-
}
|
|
7973
|
-
handler.movementX = movementX;
|
|
7974
|
-
handler.movementY = movementY;
|
|
7975
|
-
handler.positiveMovementX = positiveMovementX;
|
|
7976
|
-
handler.positiveMovementY = positiveMovementY;
|
|
7977
|
-
return handler;
|
|
7978
|
-
}
|
|
7979
|
-
endSwipe(handlerId) {
|
|
7980
|
-
const handler = this._getSwipeHandler(handlerId);
|
|
7981
|
-
if (!handler)
|
|
7982
|
-
return null;
|
|
7983
|
-
const { movementX, movementY, timestamp, originClientX, originClientY, positiveMovementX, positiveMovementY } = handler;
|
|
7984
|
-
const timestampStart = timestamp;
|
|
7985
|
-
const timestampEnd = Date.now();
|
|
7986
|
-
const swipeTime = timestampEnd - timestampStart;
|
|
7987
|
-
const pixelPerMillisecondX = movementX ? movementX / swipeTime : 0;
|
|
7988
|
-
const pixelPerSecondX = pixelPerMillisecondX * 1000;
|
|
7989
|
-
const positivePixelPerSecondX = Math.abs(pixelPerSecondX);
|
|
7990
|
-
const pixelPerMillisecondY = movementY ? movementY / swipeTime : 0;
|
|
7991
|
-
const pixelPerSecondY = pixelPerMillisecondY * 1000;
|
|
7992
|
-
const positivePixelPerSecondY = Math.abs(pixelPerSecondY);
|
|
7993
|
-
delete this._handlerMap[handlerId];
|
|
7994
|
-
const swipeEnd = {
|
|
7995
|
-
positivePixelPerSecondX,
|
|
7996
|
-
positivePixelPerSecondY,
|
|
7997
|
-
pixelPerSecondX,
|
|
7998
|
-
pixelPerSecondY,
|
|
7999
|
-
movementX,
|
|
8000
|
-
movementY,
|
|
8001
|
-
originClientX,
|
|
8002
|
-
originClientY,
|
|
8003
|
-
positiveMovementX,
|
|
8004
|
-
positiveMovementY,
|
|
8005
|
-
};
|
|
8006
|
-
return swipeEnd;
|
|
8007
|
-
}
|
|
8008
|
-
cancelSwipe(handlerId) {
|
|
8009
|
-
delete this._handlerMap[handlerId];
|
|
8010
|
-
}
|
|
8011
|
-
_getSwipeHandler(handlerId) {
|
|
8012
|
-
const handler = this._handlerMap[handlerId];
|
|
8013
|
-
if (!handler) {
|
|
8014
|
-
return null;
|
|
8015
|
-
}
|
|
8016
|
-
return handler;
|
|
8017
|
-
}
|
|
8018
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SwipeHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8019
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SwipeHandlerService, providedIn: 'root' }); }
|
|
8020
|
-
}
|
|
8021
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SwipeHandlerService, decorators: [{
|
|
8022
|
-
type: Injectable,
|
|
8023
|
-
args: [{
|
|
8024
|
-
providedIn: 'root',
|
|
8025
|
-
}]
|
|
8026
|
-
}] });
|
|
8027
|
-
|
|
8028
8050
|
const [provideBottomSheetStrategyDefaults, injectBottomSheetStrategyDefaults] = createStaticRootProvider({
|
|
8029
8051
|
width: '100%',
|
|
8030
8052
|
height: undefined,
|
|
@@ -8042,7 +8064,6 @@ const [provideBottomSheetStrategyDefaults, injectBottomSheetStrategyDefaults] =
|
|
|
8042
8064
|
});
|
|
8043
8065
|
const [provideBottomSheetStrategy, injectBottomSheetStrategy] = createRootProvider(() => {
|
|
8044
8066
|
const defaults = injectBottomSheetStrategyDefaults();
|
|
8045
|
-
const swipeHandlerService = inject(SwipeHandlerService);
|
|
8046
8067
|
const build = (config = {}) => {
|
|
8047
8068
|
const cfg = mergeOverlayBreakpointConfigs(defaults, config);
|
|
8048
8069
|
let dragToDismissRef;
|
|
@@ -8053,7 +8074,6 @@ const [provideBottomSheetStrategy, injectBottomSheetStrategy] = createRootProvid
|
|
|
8053
8074
|
config: cfg.dragToDismiss,
|
|
8054
8075
|
element: context.containerEl,
|
|
8055
8076
|
overlayRef: context.overlayRef,
|
|
8056
|
-
swipeHandlerService,
|
|
8057
8077
|
});
|
|
8058
8078
|
};
|
|
8059
8079
|
const detachDragToDismiss = () => {
|
|
@@ -8221,7 +8241,6 @@ const [provideLeftSheetStrategyDefaults, injectLeftSheetStrategyDefaults] = crea
|
|
|
8221
8241
|
});
|
|
8222
8242
|
const [provideLeftSheetStrategy, injectLeftSheetStrategy] = createRootProvider(() => {
|
|
8223
8243
|
const defaults = injectLeftSheetStrategyDefaults();
|
|
8224
|
-
const swipeHandlerService = inject(SwipeHandlerService);
|
|
8225
8244
|
const build = (config = {}) => {
|
|
8226
8245
|
const cfg = mergeOverlayBreakpointConfigs(defaults, config);
|
|
8227
8246
|
let dragToDismissRef;
|
|
@@ -8232,7 +8251,6 @@ const [provideLeftSheetStrategy, injectLeftSheetStrategy] = createRootProvider((
|
|
|
8232
8251
|
config: cfg.dragToDismiss,
|
|
8233
8252
|
element: context.containerEl,
|
|
8234
8253
|
overlayRef: context.overlayRef,
|
|
8235
|
-
swipeHandlerService,
|
|
8236
8254
|
});
|
|
8237
8255
|
};
|
|
8238
8256
|
const detachDragToDismiss = () => {
|
|
@@ -8287,7 +8305,6 @@ const [provideRightSheetStrategyDefaults, injectRightSheetStrategyDefaults] = cr
|
|
|
8287
8305
|
});
|
|
8288
8306
|
const [provideRightSheetStrategy, injectRightSheetStrategy] = createRootProvider(() => {
|
|
8289
8307
|
const defaults = injectRightSheetStrategyDefaults();
|
|
8290
|
-
const swipeHandlerService = inject(SwipeHandlerService);
|
|
8291
8308
|
const build = (config = {}) => {
|
|
8292
8309
|
const cfg = mergeOverlayBreakpointConfigs(defaults, config);
|
|
8293
8310
|
let dragToDismissRef;
|
|
@@ -8298,7 +8315,6 @@ const [provideRightSheetStrategy, injectRightSheetStrategy] = createRootProvider
|
|
|
8298
8315
|
config: cfg.dragToDismiss,
|
|
8299
8316
|
element: context.containerEl,
|
|
8300
8317
|
overlayRef: context.overlayRef,
|
|
8301
|
-
swipeHandlerService,
|
|
8302
8318
|
});
|
|
8303
8319
|
};
|
|
8304
8320
|
const detachDragToDismiss = () => {
|
|
@@ -8399,7 +8415,6 @@ const [provideTopSheetStrategyDefaults, injectTopSheetStrategyDefaults] = create
|
|
|
8399
8415
|
});
|
|
8400
8416
|
const [provideTopSheetStrategy, injectTopSheetStrategy] = createRootProvider(() => {
|
|
8401
8417
|
const defaults = injectTopSheetStrategyDefaults();
|
|
8402
|
-
const swipeHandlerService = inject(SwipeHandlerService);
|
|
8403
8418
|
const build = (config = {}) => {
|
|
8404
8419
|
const cfg = mergeOverlayBreakpointConfigs(defaults, config);
|
|
8405
8420
|
let dragToDismissRef;
|
|
@@ -8410,7 +8425,6 @@ const [provideTopSheetStrategy, injectTopSheetStrategy] = createRootProvider(()
|
|
|
8410
8425
|
config: cfg.dragToDismiss,
|
|
8411
8426
|
element: context.containerEl,
|
|
8412
8427
|
overlayRef: context.overlayRef,
|
|
8413
|
-
swipeHandlerService,
|
|
8414
8428
|
});
|
|
8415
8429
|
};
|
|
8416
8430
|
const detachDragToDismiss = () => {
|
|
@@ -9026,71 +9040,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
9026
9040
|
}]
|
|
9027
9041
|
}], propDecorators: { repeatContentCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "repeatContentCount", required: false }] }] } });
|
|
9028
9042
|
|
|
9029
|
-
// TODO: This needs to be redone, it's a mess...
|
|
9030
|
-
const getIntersectionInfo = (intersections) => {
|
|
9031
|
-
const reverseIntersections = [...intersections].reverse();
|
|
9032
|
-
const firstIntersecting = intersections.find((i) => i.intersectionRatio > 0);
|
|
9033
|
-
const lastIntersecting = reverseIntersections.find((i) => i.intersectionRatio > 0);
|
|
9034
|
-
const firstIntersectingIndex = intersections.findIndex((i) => i === firstIntersecting);
|
|
9035
|
-
const lastIntersectingIndex = intersections.findIndex((i) => i === lastIntersecting);
|
|
9036
|
-
if (!firstIntersecting || !lastIntersecting)
|
|
9037
|
-
return null;
|
|
9038
|
-
const greaterIntersecting = firstIntersecting.intersectionRatio > lastIntersecting.intersectionRatio ? firstIntersecting : lastIntersecting;
|
|
9039
|
-
const greaterIntersectingIndex = firstIntersecting.intersectionRatio > lastIntersecting.intersectionRatio
|
|
9040
|
-
? firstIntersectingIndex
|
|
9041
|
-
: lastIntersectingIndex;
|
|
9042
|
-
const hasFullIntersection = intersections.some((i) => i.intersectionRatio === 1);
|
|
9043
|
-
const hasMultipleFullIntersections = intersections.filter((i) => i.intersectionRatio === 1).length > 1;
|
|
9044
|
-
const firstFullIntersectionIndex = intersections.findIndex((i) => i.intersectionRatio === 1);
|
|
9045
|
-
const firstFullIntersection = intersections.find((i) => i.intersectionRatio === 1);
|
|
9046
|
-
const lastFullIntersection = reverseIntersections.find((i) => i.intersectionRatio === 1);
|
|
9047
|
-
const lastFullIntersectionIndex = intersections.findIndex((i) => i === lastFullIntersection);
|
|
9048
|
-
const firstNonIntersectingIndex = intersections.findIndex((i) => i.intersectionRatio === 0);
|
|
9049
|
-
const firstNonIntersection = intersections.find((i) => i.intersectionRatio === 0);
|
|
9050
|
-
const lastNonIntersection = reverseIntersections.find((i) => i.intersectionRatio === 0);
|
|
9051
|
-
const lastNonIntersectingIndex = intersections.findIndex((i) => i === lastNonIntersection);
|
|
9052
|
-
return {
|
|
9053
|
-
partial: {
|
|
9054
|
-
hasAny: !!firstIntersecting || !!lastIntersecting,
|
|
9055
|
-
hasMultiple: !!firstIntersecting || (!!lastIntersecting && firstIntersecting !== lastIntersecting),
|
|
9056
|
-
first: {
|
|
9057
|
-
intersection: firstIntersecting,
|
|
9058
|
-
index: firstIntersectingIndex,
|
|
9059
|
-
},
|
|
9060
|
-
last: {
|
|
9061
|
-
intersection: lastIntersecting,
|
|
9062
|
-
index: lastIntersectingIndex,
|
|
9063
|
-
},
|
|
9064
|
-
biggest: {
|
|
9065
|
-
intersection: greaterIntersecting,
|
|
9066
|
-
index: greaterIntersectingIndex,
|
|
9067
|
-
},
|
|
9068
|
-
},
|
|
9069
|
-
full: {
|
|
9070
|
-
hasAny: hasFullIntersection,
|
|
9071
|
-
hasMultiple: hasMultipleFullIntersections,
|
|
9072
|
-
first: {
|
|
9073
|
-
index: firstFullIntersectionIndex,
|
|
9074
|
-
intersection: firstFullIntersection,
|
|
9075
|
-
},
|
|
9076
|
-
last: {
|
|
9077
|
-
index: lastFullIntersectionIndex,
|
|
9078
|
-
intersection: lastFullIntersection,
|
|
9079
|
-
},
|
|
9080
|
-
},
|
|
9081
|
-
none: {
|
|
9082
|
-
first: {
|
|
9083
|
-
index: firstNonIntersectingIndex,
|
|
9084
|
-
intersection: firstNonIntersection,
|
|
9085
|
-
},
|
|
9086
|
-
last: {
|
|
9087
|
-
index: lastNonIntersectingIndex,
|
|
9088
|
-
intersection: lastNonIntersection,
|
|
9089
|
-
},
|
|
9090
|
-
},
|
|
9091
|
-
};
|
|
9092
|
-
};
|
|
9093
|
-
|
|
9094
9043
|
// Thresholds for the intersection observer.
|
|
9095
9044
|
const ELEMENT_INTERSECTION_THRESHOLD = [
|
|
9096
9045
|
// 5% steps
|
|
@@ -9105,56 +9054,47 @@ const ELEMENT_INTERSECTION_THRESHOLD = [
|
|
|
9105
9054
|
];
|
|
9106
9055
|
class ScrollableComponent {
|
|
9107
9056
|
constructor() {
|
|
9108
|
-
this.
|
|
9109
|
-
this._manualActiveNavigationIndex = signal(null, ...(ngDevMode ? [{ debugName: "_manualActiveNavigationIndex" }] : []));
|
|
9057
|
+
this.manualActiveNavigationIndex = signal(null, ...(ngDevMode ? [{ debugName: "manualActiveNavigationIndex" }] : []));
|
|
9110
9058
|
this.elementRef = inject(ElementRef);
|
|
9111
|
-
this.itemSize = input('auto', ...(ngDevMode ?
|
|
9112
|
-
this.direction = input('horizontal', ...(ngDevMode ?
|
|
9059
|
+
this.itemSize = input('auto', { ...(ngDevMode ? { debugName: "itemSize" } : {}), transform: typedBreakpointTransform() });
|
|
9060
|
+
this.direction = input('horizontal', { ...(ngDevMode ? { debugName: "direction" } : {}), transform: typedBreakpointTransform() });
|
|
9113
9061
|
this.scrollableRole = input(null, ...(ngDevMode ? [{ debugName: "scrollableRole" }] : []));
|
|
9114
9062
|
this.scrollableClass = input(null, ...(ngDevMode ? [{ debugName: "scrollableClass" }] : []));
|
|
9115
|
-
this.renderNavigation = input(false, { ...(ngDevMode ? { debugName: "renderNavigation" } : {}), transform:
|
|
9116
|
-
this.renderMasks = input(true, { ...(ngDevMode ? { debugName: "renderMasks" } : {}), transform:
|
|
9117
|
-
this.renderButtons = input(true, { ...(ngDevMode ? { debugName: "renderButtons" } : {}), transform:
|
|
9118
|
-
this.buttonPosition = input('inside', ...(ngDevMode ?
|
|
9119
|
-
this.renderScrollbars = input(false, { ...(ngDevMode ? { debugName: "renderScrollbars" } : {}), transform:
|
|
9120
|
-
this.stickyButtons = input(false, { ...(ngDevMode ? { debugName: "stickyButtons" } : {}), transform:
|
|
9121
|
-
this.cursorDragScroll = input(true, { ...(ngDevMode ? { debugName: "cursorDragScroll" } : {}), transform:
|
|
9122
|
-
this.disableActiveElementScrolling = input(false, { ...(ngDevMode ? { debugName: "disableActiveElementScrolling" } : {}), transform:
|
|
9123
|
-
this.scrollMode = input('container', ...(ngDevMode ?
|
|
9124
|
-
this.snap = input(false, { ...(ngDevMode ? { debugName: "snap" } : {}), transform:
|
|
9125
|
-
this.scrollMargin = input(0, { ...(ngDevMode ? { debugName: "scrollMargin" } : {}), transform:
|
|
9126
|
-
this.scrollOrigin = input('auto', ...(ngDevMode ?
|
|
9127
|
-
this.darkenNonIntersectingItems = input(false, { ...(ngDevMode ? { debugName: "darkenNonIntersectingItems" } : {}), transform:
|
|
9128
|
-
this.showLoadingTemplate = input(false, { ...(ngDevMode ? { debugName: "showLoadingTemplate" } : {}), transform:
|
|
9129
|
-
this.loadingTemplatePosition = input('end', ...(ngDevMode ?
|
|
9063
|
+
this.renderNavigation = input(false, { ...(ngDevMode ? { debugName: "renderNavigation" } : {}), transform: boolBreakpointTransform() });
|
|
9064
|
+
this.renderMasks = input(true, { ...(ngDevMode ? { debugName: "renderMasks" } : {}), transform: boolBreakpointTransform() });
|
|
9065
|
+
this.renderButtons = input(true, { ...(ngDevMode ? { debugName: "renderButtons" } : {}), transform: boolBreakpointTransform() });
|
|
9066
|
+
this.buttonPosition = input('inside', { ...(ngDevMode ? { debugName: "buttonPosition" } : {}), transform: typedBreakpointTransform() });
|
|
9067
|
+
this.renderScrollbars = input(false, { ...(ngDevMode ? { debugName: "renderScrollbars" } : {}), transform: boolBreakpointTransform() });
|
|
9068
|
+
this.stickyButtons = input(false, { ...(ngDevMode ? { debugName: "stickyButtons" } : {}), transform: boolBreakpointTransform() });
|
|
9069
|
+
this.cursorDragScroll = input(true, { ...(ngDevMode ? { debugName: "cursorDragScroll" } : {}), transform: boolBreakpointTransform() });
|
|
9070
|
+
this.disableActiveElementScrolling = input(false, { ...(ngDevMode ? { debugName: "disableActiveElementScrolling" } : {}), transform: boolBreakpointTransform() });
|
|
9071
|
+
this.scrollMode = input('container', { ...(ngDevMode ? { debugName: "scrollMode" } : {}), transform: typedBreakpointTransform() });
|
|
9072
|
+
this.snap = input(false, { ...(ngDevMode ? { debugName: "snap" } : {}), transform: boolBreakpointTransform() });
|
|
9073
|
+
this.scrollMargin = input(0, { ...(ngDevMode ? { debugName: "scrollMargin" } : {}), transform: numberBreakpointTransform() });
|
|
9074
|
+
this.scrollOrigin = input('auto', { ...(ngDevMode ? { debugName: "scrollOrigin" } : {}), transform: typedBreakpointTransform() });
|
|
9075
|
+
this.darkenNonIntersectingItems = input(false, { ...(ngDevMode ? { debugName: "darkenNonIntersectingItems" } : {}), transform: boolBreakpointTransform() });
|
|
9076
|
+
this.showLoadingTemplate = input(false, { ...(ngDevMode ? { debugName: "showLoadingTemplate" } : {}), transform: boolBreakpointTransform() });
|
|
9077
|
+
this.loadingTemplatePosition = input('end', { ...(ngDevMode ? { debugName: "loadingTemplatePosition" } : {}), transform: typedBreakpointTransform() });
|
|
9130
9078
|
this.scrollable = viewChild('scrollable', ...(ngDevMode ? [{ debugName: "scrollable" }] : []));
|
|
9131
|
-
this.
|
|
9132
|
-
this.lastElement = viewChild('lastElement', ...(ngDevMode ? [{ debugName: "lastElement" }] : []));
|
|
9079
|
+
this.scrollObserver = viewChild.required(ScrollObserverDirective);
|
|
9133
9080
|
this.activeElementList = contentChildren(SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, { ...(ngDevMode ? { debugName: "activeElementList" } : {}), descendants: true });
|
|
9134
9081
|
this.navigationDotsContainer = viewChild('navigationDotsContainer', ...(ngDevMode ? [{ debugName: "navigationDotsContainer" }] : []));
|
|
9135
9082
|
this.firstNavigationDot = viewChild('navigationDot', ...(ngDevMode ? [{ debugName: "firstNavigationDot" }] : []));
|
|
9136
9083
|
this.loadingTemplate = contentChild(SCROLLABLE_LOADING_TEMPLATE_TOKEN, ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : []));
|
|
9137
|
-
this.scrollableAttributeMutations = signalElementMutations(this.scrollable, {
|
|
9138
|
-
attributes: true,
|
|
9139
|
-
childList: true,
|
|
9140
|
-
subtree: true,
|
|
9141
|
-
});
|
|
9142
9084
|
this.scrollableDimensions = signalElementDimensions(this.scrollable);
|
|
9143
9085
|
this.navigationDotDimensions = signalElementDimensions(this.firstNavigationDot);
|
|
9144
|
-
this.isRendered = createIsRenderedSignal();
|
|
9145
9086
|
this.canAnimate = createCanAnimateSignal();
|
|
9146
9087
|
this.cursorDragScrollState = useCursorDragScroll(this.scrollable, {
|
|
9147
9088
|
enabled: this.cursorDragScroll,
|
|
9148
9089
|
allowedDirection: this.direction,
|
|
9149
9090
|
});
|
|
9150
|
-
this.isCursorDragging$ = toObservable(this.cursorDragScrollState.isDragging);
|
|
9151
9091
|
this.renderButtonsInside = computed(() => this.buttonPosition() === 'inside' && this.renderButtons(), ...(ngDevMode ? [{ debugName: "renderButtonsInside" }] : []));
|
|
9152
9092
|
this.renderButtonsInFooter = computed(() => this.buttonPosition() === 'footer' && this.renderButtons(), ...(ngDevMode ? [{ debugName: "renderButtonsInFooter" }] : []));
|
|
9153
9093
|
this.containerScrollState = signalElementScrollState(this.scrollable, {
|
|
9154
9094
|
initialScrollPosition: computed(() => {
|
|
9155
9095
|
const scrollable = this.scrollable()?.nativeElement;
|
|
9156
9096
|
const activeElementList = this.activeElementList();
|
|
9157
|
-
if (!scrollable || !activeElementList.length
|
|
9097
|
+
if (!scrollable || !activeElementList.length)
|
|
9158
9098
|
return null;
|
|
9159
9099
|
const firstActive = activeElementList.find((a) => a.isActiveChildEnabled());
|
|
9160
9100
|
if (firstActive && !this.disableActiveElementScrolling()) {
|
|
@@ -9163,44 +9103,26 @@ class ScrollableComponent {
|
|
|
9163
9103
|
return null;
|
|
9164
9104
|
}),
|
|
9165
9105
|
});
|
|
9166
|
-
this.firstElementIntersection = signalElementIntersection(this.firstElement, {
|
|
9167
|
-
root: this.scrollable,
|
|
9168
|
-
enabled: this.isRendered.state,
|
|
9169
|
-
});
|
|
9170
|
-
this.lastElementIntersection = signalElementIntersection(this.lastElement, {
|
|
9171
|
-
root: this.scrollable,
|
|
9172
|
-
enabled: this.isRendered.state,
|
|
9173
|
-
});
|
|
9174
9106
|
this.allScrollableChildren = signalElementChildren(this.scrollable);
|
|
9175
9107
|
this.scrollableChildren = computed(() => this.allScrollableChildren().filter((c) => !isScrollableChildIgnored(c)), ...(ngDevMode ? [{ debugName: "scrollableChildren" }] : []));
|
|
9176
9108
|
this.scrollableContentIntersections = signalElementIntersection(this.scrollableChildren, {
|
|
9177
9109
|
root: this.scrollable,
|
|
9178
9110
|
threshold: ELEMENT_INTERSECTION_THRESHOLD,
|
|
9179
|
-
enabled: this.isRendered.state,
|
|
9180
9111
|
});
|
|
9181
9112
|
this.scrollableContentIntersections$ = toObservable(this.scrollableContentIntersections);
|
|
9113
|
+
this.maxVisibleItemCount = toSignal(this.scrollableContentIntersections$.pipe(takeUntilDestroyed(), debounceTime(150), map((entries) => entries.filter((i) => i.intersectionRatio > 0).length)), { initialValue: 0 });
|
|
9182
9114
|
this.nonScrollableIntersections = computed(() => {
|
|
9183
9115
|
const allIntersections = this.scrollableContentIntersections();
|
|
9184
9116
|
return allIntersections.filter((i) => i.intersectionRatio !== 1).map((i) => i.target);
|
|
9185
9117
|
}, { ...(ngDevMode ? { debugName: "nonScrollableIntersections" } : {}), equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) });
|
|
9186
|
-
this.isAtStart = computed(() => {
|
|
9187
|
-
|
|
9188
|
-
if (!intersection)
|
|
9189
|
-
return false;
|
|
9190
|
-
return intersection.isIntersecting;
|
|
9191
|
-
}, ...(ngDevMode ? [{ debugName: "isAtStart" }] : []));
|
|
9192
|
-
this.isAtEnd = computed(() => {
|
|
9193
|
-
const intersection = this.lastElementIntersection()[0];
|
|
9194
|
-
if (!intersection)
|
|
9195
|
-
return false;
|
|
9196
|
-
return intersection.isIntersecting;
|
|
9197
|
-
}, ...(ngDevMode ? [{ debugName: "isAtEnd" }] : []));
|
|
9118
|
+
this.isAtStart = computed(() => this.scrollObserver().isAtStart(), ...(ngDevMode ? [{ debugName: "isAtStart" }] : []));
|
|
9119
|
+
this.isAtEnd = computed(() => this.scrollObserver().isAtEnd(), ...(ngDevMode ? [{ debugName: "isAtEnd" }] : []));
|
|
9198
9120
|
this.canScroll = computed(() => this.direction() === 'horizontal'
|
|
9199
9121
|
? this.containerScrollState().canScrollHorizontally
|
|
9200
9122
|
: this.containerScrollState().canScrollVertically, ...(ngDevMode ? [{ debugName: "canScroll" }] : []));
|
|
9201
9123
|
this.scrollableNavigation = computed(() => {
|
|
9202
9124
|
const allIntersections = this.scrollableContentIntersections();
|
|
9203
|
-
const manualActiveNavigationIndex = this.
|
|
9125
|
+
const manualActiveNavigationIndex = this.manualActiveNavigationIndex();
|
|
9204
9126
|
const isAtStart = this.isAtStart();
|
|
9205
9127
|
const isAtEnd = this.isAtEnd();
|
|
9206
9128
|
const firstIntersection = allIntersections[0];
|
|
@@ -9216,26 +9138,24 @@ class ScrollableComponent {
|
|
|
9216
9138
|
return curr;
|
|
9217
9139
|
}, allIntersections[0]);
|
|
9218
9140
|
if (!highestIntersection) {
|
|
9219
|
-
return [];
|
|
9141
|
+
return { items: [], activeIndex: -1 };
|
|
9220
9142
|
}
|
|
9221
9143
|
const activeIndex = manualActiveNavigationIndex !== null
|
|
9222
9144
|
? manualActiveNavigationIndex
|
|
9223
9145
|
: allIntersections.findIndex((i) => i === highestIntersection);
|
|
9224
|
-
|
|
9146
|
+
const items = allIntersections.map((i, index) => ({
|
|
9225
9147
|
isActive: manualActiveNavigationIndex !== null
|
|
9226
9148
|
? manualActiveNavigationIndex === index
|
|
9227
9149
|
: i === highestIntersection && highestIntersection.intersectionRatio > 0,
|
|
9228
9150
|
activeOffset: index === activeIndex ? 0 : Math.abs(index - activeIndex),
|
|
9229
9151
|
element: i.target,
|
|
9230
9152
|
}));
|
|
9231
|
-
|
|
9232
|
-
|
|
9233
|
-
|
|
9234
|
-
|
|
9235
|
-
|
|
9236
|
-
}, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
|
|
9153
|
+
return { items, activeIndex };
|
|
9154
|
+
}, { ...(ngDevMode ? { debugName: "scrollableNavigation" } : {}), equal: (a, b) => a.activeIndex === b.activeIndex &&
|
|
9155
|
+
a.items.length === b.items.length &&
|
|
9156
|
+
a.items.every((v, i) => v.isActive === b.items[i]?.isActive && v.activeOffset === b.items[i]?.activeOffset) });
|
|
9157
|
+
this.activeIndex = computed(() => this.scrollableNavigation().activeIndex, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
|
|
9237
9158
|
this.gapValue = computed(() => {
|
|
9238
|
-
this.scrollableAttributeMutations();
|
|
9239
9159
|
this.scrollableDimensions();
|
|
9240
9160
|
const scrollable = this.scrollable()?.nativeElement;
|
|
9241
9161
|
if (!scrollable)
|
|
@@ -9247,22 +9167,17 @@ class ScrollableComponent {
|
|
|
9247
9167
|
return '0px';
|
|
9248
9168
|
return gap;
|
|
9249
9169
|
}, ...(ngDevMode ? [{ debugName: "gapValue" }] : []));
|
|
9250
|
-
this.intersectionChange = outputFromObservable(this.scrollableContentIntersections
|
|
9170
|
+
this.intersectionChange = outputFromObservable(toObservable(this.scrollableContentIntersections).pipe(takeUntilDestroyed(), debounceTime(50), map((entries) => entries.map((i, index) => ({
|
|
9251
9171
|
index,
|
|
9252
9172
|
element: i.target,
|
|
9253
9173
|
intersectionRatio: i.intersectionRatio,
|
|
9254
9174
|
isIntersecting: i.isIntersecting,
|
|
9255
9175
|
})))));
|
|
9256
|
-
this.scrollStateChange = outputFromObservable(toObservable(computed(() => {
|
|
9257
|
-
|
|
9258
|
-
|
|
9259
|
-
|
|
9260
|
-
|
|
9261
|
-
canScroll,
|
|
9262
|
-
isAtEnd: !!isAtEnd,
|
|
9263
|
-
isAtStart: !!isAtStart,
|
|
9264
|
-
};
|
|
9265
|
-
})));
|
|
9176
|
+
this.scrollStateChange = outputFromObservable(toObservable(computed(() => ({
|
|
9177
|
+
canScroll: this.canScroll(),
|
|
9178
|
+
isAtEnd: this.isAtEnd(),
|
|
9179
|
+
isAtStart: this.isAtStart(),
|
|
9180
|
+
}))));
|
|
9266
9181
|
this.allChildElementClassBindings = signalClasses(this.scrollableChildren, {
|
|
9267
9182
|
'et-scrollable-item': signal(true),
|
|
9268
9183
|
});
|
|
@@ -9280,7 +9195,8 @@ class ScrollableComponent {
|
|
|
9280
9195
|
'et-scrollable--is-at-start': this.isAtStart,
|
|
9281
9196
|
'et-scrollable--is-at-end': this.isAtEnd,
|
|
9282
9197
|
'et-scrollable--can-animate': this.canAnimate.state,
|
|
9283
|
-
'et-scrollable--
|
|
9198
|
+
'et-scrollable--has-partial-items': computed(() => this.scrollableContentIntersections().some((i) => i.intersectionRatio > 0 && i.intersectionRatio < 1)),
|
|
9199
|
+
'et-scrollable--darken-non-intersecting-items': computed(() => this.darkenNonIntersectingItems() && this.maxVisibleItemCount() > 1),
|
|
9284
9200
|
});
|
|
9285
9201
|
this.hostStyleBindings = signalHostStyles({
|
|
9286
9202
|
'--item-count': computed(() => this.scrollableChildren().length),
|
|
@@ -9289,32 +9205,40 @@ class ScrollableComponent {
|
|
|
9289
9205
|
this.scrollableDotsContainerStyleBindings = signalStyles(this.navigationDotsContainer, {
|
|
9290
9206
|
// Responsible for centering the active dot in navigation bar by using 'translate'
|
|
9291
9207
|
transform: computed(() => {
|
|
9292
|
-
const activeIndex = this.
|
|
9293
|
-
const childCount = this.
|
|
9208
|
+
const activeIndex = this.scrollableNavigation().activeIndex;
|
|
9209
|
+
const childCount = this.scrollableNavigation().items.length;
|
|
9294
9210
|
const offset = this.getNavigationDotsContainerTranslate(childCount, activeIndex);
|
|
9295
9211
|
const dir = this.direction() === 'horizontal' ? 'X' : 'Y';
|
|
9296
9212
|
return `translate${dir}(${offset})`;
|
|
9297
9213
|
}),
|
|
9298
9214
|
});
|
|
9299
|
-
|
|
9300
|
-
|
|
9301
|
-
|
|
9302
|
-
|
|
9303
|
-
|
|
9304
|
-
|
|
9305
|
-
|
|
9306
|
-
|
|
9307
|
-
|
|
9308
|
-
|
|
9309
|
-
|
|
9310
|
-
|
|
9311
|
-
|
|
9312
|
-
|
|
9313
|
-
|
|
9314
|
-
|
|
9315
|
-
|
|
9215
|
+
const isDragging$ = toObservable(this.cursorDragScrollState.isDragging);
|
|
9216
|
+
const scrollable$ = toObservable(this.scrollable);
|
|
9217
|
+
toObservable(this.snap)
|
|
9218
|
+
.pipe(takeUntilDestroyed(), switchMap((enabled) => {
|
|
9219
|
+
if (!enabled)
|
|
9220
|
+
return EMPTY;
|
|
9221
|
+
return combineLatest([this.scrollableContentIntersections$, isDragging$]).pipe(filter(([, isDragging]) => !isDragging), map(([intersections]) => intersections), debounceTime(150), tap((allIntersections) => {
|
|
9222
|
+
const scrollElement = this.scrollable()?.nativeElement;
|
|
9223
|
+
if (!scrollElement)
|
|
9224
|
+
return;
|
|
9225
|
+
const visibleItems = allIntersections
|
|
9226
|
+
.filter((i) => i.intersectionRatio > 0)
|
|
9227
|
+
.map((i) => i.target);
|
|
9228
|
+
const target = getScrollSnapTarget(visibleItems, scrollElement, this.direction(), this.scrollOrigin(), this.scrollMargin());
|
|
9229
|
+
if (target) {
|
|
9230
|
+
this.scrollToElement({ element: target.element, origin: target.origin, ignoreForcedOrigin: true });
|
|
9231
|
+
}
|
|
9232
|
+
}));
|
|
9233
|
+
}))
|
|
9234
|
+
.subscribe();
|
|
9235
|
+
toObservable(this.manualActiveNavigationIndex)
|
|
9236
|
+
.pipe(takeUntilDestroyed(), filter((i) => i !== null), switchMap(() => scrollable$.pipe(switchMap((ref) => {
|
|
9237
|
+
if (!ref)
|
|
9238
|
+
return EMPTY;
|
|
9239
|
+
return fromEvent(ref.nativeElement, 'scroll');
|
|
9240
|
+
}))), debounceTime(50), tap(() => this.manualActiveNavigationIndex.set(null)))
|
|
9316
9241
|
.subscribe();
|
|
9317
|
-
this.isRendered.bind();
|
|
9318
9242
|
}
|
|
9319
9243
|
getNavigationDotsContainerTranslate(navigationDotCount, activeIndex) {
|
|
9320
9244
|
if (navigationDotCount <= 5) {
|
|
@@ -9337,30 +9261,16 @@ class ScrollableComponent {
|
|
|
9337
9261
|
if (!scrollElement) {
|
|
9338
9262
|
return;
|
|
9339
9263
|
}
|
|
9340
|
-
const parent = this.elementRef.nativeElement;
|
|
9341
9264
|
const isSnappingEnabled = this.snap();
|
|
9342
9265
|
if (isSnappingEnabled) {
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
const relevantIntersection = direction === 'start' ? intersections?.partial.first : intersections?.partial.last;
|
|
9347
|
-
if (!relevantIntersection)
|
|
9348
|
-
return;
|
|
9349
|
-
const nextIndex = relevantIntersection.intersection.intersectionRatio !== 1
|
|
9350
|
-
? relevantIntersection.index
|
|
9351
|
-
: direction === 'start'
|
|
9352
|
-
? relevantIntersection.index - 1
|
|
9353
|
-
: relevantIntersection.index + 1;
|
|
9354
|
-
const element = allIntersections[nextIndex]?.target ||
|
|
9355
|
-
relevantIntersection.intersection.target;
|
|
9356
|
-
this.scrollToElement({
|
|
9357
|
-
element: element,
|
|
9358
|
-
origin: direction === 'end' ? 'start' : 'end',
|
|
9359
|
-
});
|
|
9266
|
+
const target = getScrollContainerTarget(this.scrollableContentIntersections(), direction);
|
|
9267
|
+
if (target)
|
|
9268
|
+
this.scrollToElement(target);
|
|
9360
9269
|
}
|
|
9361
9270
|
else {
|
|
9362
9271
|
// Just scroll one size of the scrollable container.
|
|
9363
|
-
const
|
|
9272
|
+
const dimensions = this.scrollableDimensions().client;
|
|
9273
|
+
const scrollableSize = this.direction() === 'horizontal' ? (dimensions?.width ?? 0) : (dimensions?.height ?? 0);
|
|
9364
9274
|
const currentScroll = this.direction() === 'horizontal' ? scrollElement.scrollLeft : scrollElement.scrollTop;
|
|
9365
9275
|
scrollElement.scrollTo({
|
|
9366
9276
|
[this.direction() === 'horizontal' ? 'left' : 'top']: currentScroll + (direction === 'start' ? -scrollableSize : scrollableSize),
|
|
@@ -9377,101 +9287,13 @@ class ScrollableComponent {
|
|
|
9377
9287
|
}
|
|
9378
9288
|
return;
|
|
9379
9289
|
}
|
|
9380
|
-
|
|
9381
|
-
if (!intersections || !scrollElement)
|
|
9290
|
+
if (!scrollElement)
|
|
9382
9291
|
return;
|
|
9383
|
-
|
|
9384
|
-
|
|
9385
|
-
// This applies to the other direction as well.
|
|
9386
|
-
const isFirstAndLastIntersectionEqual = intersections.partial.first.intersection === intersections.partial.last.intersection;
|
|
9387
|
-
const scrollableRect = scrollElement.getBoundingClientRect();
|
|
9388
|
-
if (isFirstAndLastIntersectionEqual) {
|
|
9389
|
-
const intersection = intersections.partial.first.intersection.target.getBoundingClientRect();
|
|
9390
|
-
const isStartOfElementVisible = this.direction() === 'horizontal'
|
|
9391
|
-
? Math.round(intersection.left) >= Math.round(scrollableRect.left)
|
|
9392
|
-
: Math.round(intersection.top) >= Math.round(scrollableRect.top);
|
|
9393
|
-
const isEndOfElementVisible = this.direction() === 'horizontal'
|
|
9394
|
-
? Math.round(intersection.right) <= Math.round(scrollableRect.right)
|
|
9395
|
-
: Math.round(intersection.bottom) <= Math.round(scrollableRect.bottom);
|
|
9396
|
-
if (!isStartOfElementVisible || !isEndOfElementVisible) {
|
|
9397
|
-
if (direction === 'start') {
|
|
9398
|
-
if (isStartOfElementVisible) {
|
|
9399
|
-
// to the end of the previous element
|
|
9400
|
-
const previousIndex = intersections.partial.first.index - 1;
|
|
9401
|
-
const elementToScrollTo = allIntersections[previousIndex]?.target;
|
|
9402
|
-
if (!elementToScrollTo)
|
|
9403
|
-
return;
|
|
9404
|
-
this.scrollToElement({
|
|
9405
|
-
element: elementToScrollTo,
|
|
9406
|
-
origin: 'end',
|
|
9407
|
-
});
|
|
9408
|
-
this._manualActiveNavigationIndex.set(previousIndex);
|
|
9409
|
-
}
|
|
9410
|
-
else {
|
|
9411
|
-
// to the start of the current element
|
|
9412
|
-
this.scrollToElement({
|
|
9413
|
-
element: intersections.partial.first.intersection.target,
|
|
9414
|
-
origin: 'start',
|
|
9415
|
-
});
|
|
9416
|
-
this._manualActiveNavigationIndex.set(intersections.partial.first.index);
|
|
9417
|
-
}
|
|
9418
|
-
}
|
|
9419
|
-
else {
|
|
9420
|
-
if (isEndOfElementVisible) {
|
|
9421
|
-
// to the start of the next element
|
|
9422
|
-
const nextIndex = intersections.partial.last.index + 1;
|
|
9423
|
-
const elementToScrollTo = allIntersections[nextIndex]?.target;
|
|
9424
|
-
if (!elementToScrollTo)
|
|
9425
|
-
return;
|
|
9426
|
-
this.scrollToElement({
|
|
9427
|
-
element: elementToScrollTo,
|
|
9428
|
-
origin: 'start',
|
|
9429
|
-
});
|
|
9430
|
-
this._manualActiveNavigationIndex.set(nextIndex);
|
|
9431
|
-
}
|
|
9432
|
-
else {
|
|
9433
|
-
// to the end of the current element
|
|
9434
|
-
this.scrollToElement({
|
|
9435
|
-
element: intersections.partial.last.intersection.target,
|
|
9436
|
-
origin: 'end',
|
|
9437
|
-
});
|
|
9438
|
-
this._manualActiveNavigationIndex.set(intersections.partial.last.index);
|
|
9439
|
-
}
|
|
9440
|
-
}
|
|
9441
|
-
return;
|
|
9442
|
-
}
|
|
9443
|
-
}
|
|
9444
|
-
else if (this.scrollOrigin() === 'center') {
|
|
9445
|
-
// If the scroll origin is forced to be center we should always snap to the center of the next partial intersection in the scroll direction.
|
|
9446
|
-
const nextPartialIntersection = direction === 'start' ? intersections.partial.first : intersections.partial.last;
|
|
9447
|
-
const nextIndex = nextPartialIntersection.index;
|
|
9448
|
-
this.scrollToElement({
|
|
9449
|
-
element: nextPartialIntersection.intersection.target,
|
|
9450
|
-
origin: 'center',
|
|
9451
|
-
});
|
|
9452
|
-
this._manualActiveNavigationIndex.set(nextIndex);
|
|
9292
|
+
const target = getScrollItemTarget(allIntersections, scrollElement, direction, this.scrollOrigin(), this.direction());
|
|
9293
|
+
if (!target)
|
|
9453
9294
|
return;
|
|
9454
|
-
|
|
9455
|
-
|
|
9456
|
-
let elementToScrollTo = data.intersection.target;
|
|
9457
|
-
let nextIndex = data.index;
|
|
9458
|
-
if (Math.round(data.intersection.intersectionRatio) === 1) {
|
|
9459
|
-
if (direction === 'start' && data.index === 0) {
|
|
9460
|
-
return;
|
|
9461
|
-
}
|
|
9462
|
-
if (direction === 'end' && data.index === allIntersections.length - 1) {
|
|
9463
|
-
return;
|
|
9464
|
-
}
|
|
9465
|
-
nextIndex = direction === 'start' ? data.index - 1 : data.index + 1;
|
|
9466
|
-
elementToScrollTo = allIntersections[nextIndex]?.target;
|
|
9467
|
-
if (!elementToScrollTo)
|
|
9468
|
-
return;
|
|
9469
|
-
}
|
|
9470
|
-
this.scrollToElement({
|
|
9471
|
-
element: elementToScrollTo,
|
|
9472
|
-
origin: direction,
|
|
9473
|
-
});
|
|
9474
|
-
this._manualActiveNavigationIndex.set(nextIndex);
|
|
9295
|
+
this.scrollToElement(target);
|
|
9296
|
+
this.manualActiveNavigationIndex.set(target.index);
|
|
9475
9297
|
}
|
|
9476
9298
|
getElementScrollCoordinates(options) {
|
|
9477
9299
|
const scrollElement = this.scrollable()?.nativeElement;
|
|
@@ -9502,7 +9324,7 @@ class ScrollableComponent {
|
|
|
9502
9324
|
}
|
|
9503
9325
|
scrollToElementViaNavigation(elementIndex) {
|
|
9504
9326
|
const element = this.scrollableChildren()[elementIndex];
|
|
9505
|
-
this.
|
|
9327
|
+
this.manualActiveNavigationIndex.set(elementIndex);
|
|
9506
9328
|
this.scrollToElement({
|
|
9507
9329
|
element,
|
|
9508
9330
|
});
|
|
@@ -9523,92 +9345,23 @@ class ScrollableComponent {
|
|
|
9523
9345
|
this.scrollOneItemSize('end');
|
|
9524
9346
|
}
|
|
9525
9347
|
}
|
|
9526
|
-
_enableSnapping() {
|
|
9527
|
-
combineLatest([this.scrollableContentIntersections$, this.isCursorDragging$])
|
|
9528
|
-
.pipe(filter(([, isDragging]) => !isDragging), map(([intersections]) => intersections), debounceTime(150), tap((allIntersections) => {
|
|
9529
|
-
const scrollElement = this.scrollable()?.nativeElement;
|
|
9530
|
-
if (!scrollElement)
|
|
9531
|
-
return;
|
|
9532
|
-
const intersections = getIntersectionInfo(allIntersections);
|
|
9533
|
-
if (!intersections)
|
|
9534
|
-
return;
|
|
9535
|
-
const isFirstAndLastIntersectionEqual = intersections.partial.first.intersection === intersections.partial.last.intersection;
|
|
9536
|
-
const scrollableRect = scrollElement.getBoundingClientRect();
|
|
9537
|
-
if (this.scrollOrigin() === 'center' && intersections.full.hasMultiple) {
|
|
9538
|
-
// If there is more than one fully visible element we should not snap at all.
|
|
9539
|
-
return;
|
|
9540
|
-
}
|
|
9541
|
-
else if (this.scrollOrigin() === 'center' && intersections.full.first.intersection) {
|
|
9542
|
-
// If there is already a fully visible element we should snap it to the center.
|
|
9543
|
-
this.scrollToElement({
|
|
9544
|
-
element: intersections.full.first.intersection.target,
|
|
9545
|
-
origin: 'center',
|
|
9546
|
-
});
|
|
9547
|
-
return;
|
|
9548
|
-
}
|
|
9549
|
-
else if (isFirstAndLastIntersectionEqual) {
|
|
9550
|
-
const intersection = intersections.partial.first.intersection.target.getBoundingClientRect();
|
|
9551
|
-
const isStartOfElementVisible = this.direction() === 'horizontal'
|
|
9552
|
-
? intersection.left >= scrollableRect.left
|
|
9553
|
-
: intersection.top >= scrollableRect.top;
|
|
9554
|
-
const isEndOfElementVisible = this.direction() === 'horizontal'
|
|
9555
|
-
? intersection.right <= scrollableRect.right
|
|
9556
|
-
: intersection.bottom <= scrollableRect.bottom;
|
|
9557
|
-
// Don't snap if neither the start nor the end of the current element is visible.
|
|
9558
|
-
// Otherwise this would result in parts of the element being inaccessible.
|
|
9559
|
-
if (!isStartOfElementVisible && !isEndOfElementVisible)
|
|
9560
|
-
return;
|
|
9561
|
-
// If the start of the element is visible we should snap to the start.
|
|
9562
|
-
if (isStartOfElementVisible) {
|
|
9563
|
-
this.scrollToElement({
|
|
9564
|
-
element: intersections.partial.first.intersection.target,
|
|
9565
|
-
origin: 'start',
|
|
9566
|
-
});
|
|
9567
|
-
return;
|
|
9568
|
-
}
|
|
9569
|
-
// If the end of the element is visible we should snap to the end.
|
|
9570
|
-
if (isEndOfElementVisible) {
|
|
9571
|
-
this.scrollToElement({
|
|
9572
|
-
element: intersections.partial.last.intersection.target,
|
|
9573
|
-
origin: 'end',
|
|
9574
|
-
});
|
|
9575
|
-
return;
|
|
9576
|
-
}
|
|
9577
|
-
}
|
|
9578
|
-
else if ((this.direction() === 'horizontal' &&
|
|
9579
|
-
intersections.partial.biggest.intersection.boundingClientRect.width > scrollableRect.width) ||
|
|
9580
|
-
(this.direction() === 'vertical' &&
|
|
9581
|
-
intersections.partial.biggest.intersection.boundingClientRect.height > scrollableRect.height)) {
|
|
9582
|
-
// If the current element is bigger than the scrollable container we should snap to the start of the current element if the scroll direction is forward
|
|
9583
|
-
// and to the end of the current element if the scroll direction is backwards.
|
|
9584
|
-
const origin = intersections.partial.biggest.index === intersections.partial.first.index ? 'end' : 'start';
|
|
9585
|
-
this.scrollToElement({
|
|
9586
|
-
element: intersections.partial.biggest.intersection.target,
|
|
9587
|
-
origin,
|
|
9588
|
-
ignoreForcedOrigin: true,
|
|
9589
|
-
});
|
|
9590
|
-
}
|
|
9591
|
-
else {
|
|
9592
|
-
// No special case. Just snap to the biggest intersection.
|
|
9593
|
-
this.scrollToElement({
|
|
9594
|
-
element: intersections.partial.biggest.intersection.target,
|
|
9595
|
-
});
|
|
9596
|
-
}
|
|
9597
|
-
}), takeUntil(this._disableSnapping$))
|
|
9598
|
-
.subscribe();
|
|
9599
|
-
}
|
|
9600
|
-
_disableSnapping() {
|
|
9601
|
-
this._disableSnapping$.next();
|
|
9602
|
-
}
|
|
9603
9348
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9604
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, scrollableRole: { classPropertyName: "scrollableRole", publicName: "scrollableRole", isSignal: true, isRequired: false, transformFunction: null }, scrollableClass: { classPropertyName: "scrollableClass", publicName: "scrollableClass", isSignal: true, isRequired: false, transformFunction: null }, renderNavigation: { classPropertyName: "renderNavigation", publicName: "renderNavigation", isSignal: true, isRequired: false, transformFunction: null }, renderMasks: { classPropertyName: "renderMasks", publicName: "renderMasks", isSignal: true, isRequired: false, transformFunction: null }, renderButtons: { classPropertyName: "renderButtons", publicName: "renderButtons", isSignal: true, isRequired: false, transformFunction: null }, buttonPosition: { classPropertyName: "buttonPosition", publicName: "buttonPosition", isSignal: true, isRequired: false, transformFunction: null }, renderScrollbars: { classPropertyName: "renderScrollbars", publicName: "renderScrollbars", isSignal: true, isRequired: false, transformFunction: null }, stickyButtons: { classPropertyName: "stickyButtons", publicName: "stickyButtons", isSignal: true, isRequired: false, transformFunction: null }, cursorDragScroll: { classPropertyName: "cursorDragScroll", publicName: "cursorDragScroll", isSignal: true, isRequired: false, transformFunction: null }, disableActiveElementScrolling: { classPropertyName: "disableActiveElementScrolling", publicName: "disableActiveElementScrolling", isSignal: true, isRequired: false, transformFunction: null }, scrollMode: { classPropertyName: "scrollMode", publicName: "scrollMode", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, scrollOrigin: { classPropertyName: "scrollOrigin", publicName: "scrollOrigin", isSignal: true, isRequired: false, transformFunction: null }, darkenNonIntersectingItems: { classPropertyName: "darkenNonIntersectingItems", publicName: "darkenNonIntersectingItems", isSignal: true, isRequired: false, transformFunction: null }, showLoadingTemplate: { classPropertyName: "showLoadingTemplate", publicName: "showLoadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplatePosition: { classPropertyName: "loadingTemplatePosition", publicName: "loadingTemplatePosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersectionChange: "intersectionChange", scrollStateChange: "scrollStateChange" }, host: { classAttribute: "et-scrollable" }, providers: [provideIcons(CHEVRON_ICON)], queries: [{ propertyName: "activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true, isSignal: true }, { propertyName: "loadingTemplate", first: true, predicate: SCROLLABLE_LOADING_TEMPLATE_TOKEN, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, isSignal: true }, { propertyName: "firstElement", first: true, predicate: ["firstElement"], descendants: true, isSignal: true }, { propertyName: "lastElement", first: true, predicate: ["lastElement"], descendants: true, isSignal: true }, { propertyName: "navigationDotsContainer", first: true, predicate: ["navigationDotsContainer"], descendants: true, isSignal: true }, { propertyName: "firstNavigationDot", first: true, predicate: ["navigationDot"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n <ng-content />\n @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter(),\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #loadingTpl>\n @if (loadingTemplate(); as tpl) {\n @for (\n _ of tpl.repeat();\n track index;\n let index = $index;\n let even = $even;\n let odd = $odd;\n let first = $first;\n let last = $last\n ) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n }\n }\n</ng-template>\n", styles: [":where(.et-scrollable){--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=half]{--_auto-size: calc((100% - var(--item-gap)) / 2)}.et-scrollable[item-size=third]{--_auto-size: calc((100% - (var(--item-gap) * 2)) / 3)}.et-scrollable[item-size=quarter]{--_auto-size: calc((100% - (var(--item-gap) * 3)) / 4)}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container,.et-scrollable:not([render-scrollbars]) .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar,.et-scrollable:not([render-scrollbars]) .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-icon--et-chevron{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container,.et-scrollable:not([direction]) .et-scrollable-container{grid-auto-flow:column;grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button,.et-scrollable:not([direction]) .et-scrollable-mask,.et-scrollable:not([direction]) .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-flow:row;grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-icon--et-chevron{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-footer .et-scrollable-button{width:30px;height:30px}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "allowHardcodedColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
9349
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, scrollableRole: { classPropertyName: "scrollableRole", publicName: "scrollableRole", isSignal: true, isRequired: false, transformFunction: null }, scrollableClass: { classPropertyName: "scrollableClass", publicName: "scrollableClass", isSignal: true, isRequired: false, transformFunction: null }, renderNavigation: { classPropertyName: "renderNavigation", publicName: "renderNavigation", isSignal: true, isRequired: false, transformFunction: null }, renderMasks: { classPropertyName: "renderMasks", publicName: "renderMasks", isSignal: true, isRequired: false, transformFunction: null }, renderButtons: { classPropertyName: "renderButtons", publicName: "renderButtons", isSignal: true, isRequired: false, transformFunction: null }, buttonPosition: { classPropertyName: "buttonPosition", publicName: "buttonPosition", isSignal: true, isRequired: false, transformFunction: null }, renderScrollbars: { classPropertyName: "renderScrollbars", publicName: "renderScrollbars", isSignal: true, isRequired: false, transformFunction: null }, stickyButtons: { classPropertyName: "stickyButtons", publicName: "stickyButtons", isSignal: true, isRequired: false, transformFunction: null }, cursorDragScroll: { classPropertyName: "cursorDragScroll", publicName: "cursorDragScroll", isSignal: true, isRequired: false, transformFunction: null }, disableActiveElementScrolling: { classPropertyName: "disableActiveElementScrolling", publicName: "disableActiveElementScrolling", isSignal: true, isRequired: false, transformFunction: null }, scrollMode: { classPropertyName: "scrollMode", publicName: "scrollMode", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, scrollMargin: { classPropertyName: "scrollMargin", publicName: "scrollMargin", isSignal: true, isRequired: false, transformFunction: null }, scrollOrigin: { classPropertyName: "scrollOrigin", publicName: "scrollOrigin", isSignal: true, isRequired: false, transformFunction: null }, darkenNonIntersectingItems: { classPropertyName: "darkenNonIntersectingItems", publicName: "darkenNonIntersectingItems", isSignal: true, isRequired: false, transformFunction: null }, showLoadingTemplate: { classPropertyName: "showLoadingTemplate", publicName: "showLoadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplatePosition: { classPropertyName: "loadingTemplatePosition", publicName: "loadingTemplatePosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersectionChange: "intersectionChange", scrollStateChange: "scrollStateChange" }, host: { classAttribute: "et-scrollable" }, providers: [provideIcons(CHEVRON_ICON), provideBreakpointInstance(ScrollableComponent)], queries: [{ propertyName: "activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true, isSignal: true }, { propertyName: "loadingTemplate", first: true, predicate: SCROLLABLE_LOADING_TEMPLATE_TOKEN, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, isSignal: true }, { propertyName: "scrollObserver", first: true, predicate: ScrollObserverDirective, descendants: true, isSignal: true }, { propertyName: "navigationDotsContainer", first: true, predicate: ["navigationDotsContainer"], descendants: true, isSignal: true }, { propertyName: "firstNavigationDot", first: true, predicate: ["navigationDot"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n etScrollObserver\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollObserverStart etScrollableIgnoreChild></div>\n @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n <ng-content />\n @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollObserverEnd etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().items.length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter(),\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation().items; track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation().items[i + 1]?.isActive || scrollableNavigation().items[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation().items[i + 1]?.isActive &&\n !scrollableNavigation().items[i - 1]?.isActive &&\n !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #loadingTpl>\n @if (loadingTemplate(); as tpl) {\n @for (\n _ of tpl.repeat();\n track index;\n let index = $index;\n let even = $even;\n let odd = $odd;\n let first = $first;\n let last = $last\n ) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n }\n }\n</ng-template>\n", styles: [":where(.et-scrollable){--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block;position:relative}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=half]{--_auto-size: calc((100% - var(--item-gap)) / 2)}.et-scrollable[item-size=third]{--_auto-size: calc((100% - (var(--item-gap) * 2)) / 3)}.et-scrollable[item-size=quarter]{--_auto-size: calc((100% - (var(--item-gap) * 3)) / 4)}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container,.et-scrollable:not([render-scrollbars]) .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar,.et-scrollable:not([render-scrollbars]) .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-icon--et-chevron{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container,.et-scrollable:not([direction]) .et-scrollable-container{grid-auto-flow:column;grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button,.et-scrollable:not([direction]) .et-scrollable-mask,.et-scrollable:not([direction]) .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-flow:row;grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable.et-scrollable--can-scroll:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0);pointer-events:all}.et-scrollable.et-scrollable--can-scroll.et-scrollable--has-partial-items:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start{opacity:1;transform:translate(0)}.et-scrollable.et-scrollable--can-scroll:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0);pointer-events:all}.et-scrollable.et-scrollable--can-scroll.et-scrollable--has-partial-items:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end{opacity:1;transform:translate(0)}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-icon--et-chevron{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-footer .et-scrollable-button{width:30px;height:30px}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "allowHardcodedColor"] }, { kind: "directive", type: ScrollObserverDirective, selector: "[etScrollObserver]", inputs: ["enabled"], outputs: ["enabledChange"], exportAs: ["etScrollObserver"] }, { kind: "directive", type: ScrollObserverStartDirective, selector: "[etScrollObserverStart]" }, { kind: "directive", type: ScrollObserverEndDirective, selector: "[etScrollObserverEnd]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
9605
9350
|
}
|
|
9606
9351
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScrollableComponent, decorators: [{
|
|
9607
9352
|
type: Component,
|
|
9608
|
-
args: [{ selector: 'et-scrollable', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
9353
|
+
args: [{ selector: 'et-scrollable', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
9354
|
+
NgClass,
|
|
9355
|
+
ScrollableIgnoreChildDirective,
|
|
9356
|
+
NgTemplateOutlet,
|
|
9357
|
+
IconDirective,
|
|
9358
|
+
ScrollObserverDirective,
|
|
9359
|
+
ScrollObserverStartDirective,
|
|
9360
|
+
ScrollObserverEndDirective,
|
|
9361
|
+
], host: {
|
|
9609
9362
|
class: 'et-scrollable',
|
|
9610
|
-
}, providers: [provideIcons(CHEVRON_ICON)], template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n <ng-content />\n @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter(),\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation()[i + 1]?.isActive || scrollableNavigation()[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation()[i + 1]?.isActive && !scrollableNavigation()[i - 1]?.isActive && !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #loadingTpl>\n @if (loadingTemplate(); as tpl) {\n @for (\n _ of tpl.repeat();\n track index;\n let index = $index;\n let even = $even;\n let odd = $odd;\n let first = $first;\n let last = $last\n ) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n }\n }\n</ng-template>\n", styles: [":where(.et-scrollable){--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=half]{--_auto-size: calc((100% - var(--item-gap)) / 2)}.et-scrollable[item-size=third]{--_auto-size: calc((100% - (var(--item-gap) * 2)) / 3)}.et-scrollable[item-size=quarter]{--_auto-size: calc((100% - (var(--item-gap) * 3)) / 4)}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container,.et-scrollable:not([render-scrollbars]) .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar,.et-scrollable:not([render-scrollbars]) .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-icon--et-chevron{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container,.et-scrollable:not([direction]) .et-scrollable-container{grid-auto-flow:column;grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button,.et-scrollable:not([direction]) .et-scrollable-mask,.et-scrollable:not([direction]) .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-flow:row;grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0)}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-icon--et-chevron{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-footer .et-scrollable-button{width:30px;height:30px}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"] }]
|
|
9611
|
-
}], ctorParameters: () => [], propDecorators: { itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], scrollableRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollableRole", required: false }] }], scrollableClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollableClass", required: false }] }], renderNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderNavigation", required: false }] }], renderMasks: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderMasks", required: false }] }], renderButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderButtons", required: false }] }], buttonPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonPosition", required: false }] }], renderScrollbars: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderScrollbars", required: false }] }], stickyButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyButtons", required: false }] }], cursorDragScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "cursorDragScroll", required: false }] }], disableActiveElementScrolling: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableActiveElementScrolling", required: false }] }], scrollMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollMode", required: false }] }], snap: [{ type: i0.Input, args: [{ isSignal: true, alias: "snap", required: false }] }], scrollMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollMargin", required: false }] }], scrollOrigin: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollOrigin", required: false }] }], darkenNonIntersectingItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "darkenNonIntersectingItems", required: false }] }], showLoadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLoadingTemplate", required: false }] }], loadingTemplatePosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplatePosition", required: false }] }], scrollable: [{ type: i0.ViewChild, args: ['scrollable', { isSignal: true }] }],
|
|
9363
|
+
}, providers: [provideIcons(CHEVRON_ICON), provideBreakpointInstance(ScrollableComponent)], template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [ngClass]=\"scrollableClass()\"\n class=\"et-scrollable-container\"\n etScrollObserver\n >\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollObserverStart etScrollableIgnoreChild></div>\n @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n <ng-content />\n @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n }\n\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollObserverEnd etScrollableIgnoreChild></div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtonsInside()) {\n <div class=\"et-scrollable-buttons\">\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n </div>\n }\n</div>\n\n@if ((renderButtonsInFooter() || (renderNavigation() && scrollableNavigation().items.length > 1)) && canScroll()) {\n <div\n [ngClass]=\"{\n 'et-scrollable-footer--with-navigation': renderNavigation(),\n 'et-scrollable-footer--with-buttons': renderButtonsInFooter(),\n }\"\n class=\"et-scrollable-footer\"\n aria-hidden=\"true\"\n >\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"forwardButtonTpl\" />\n }\n\n @if (renderNavigation()) {\n <div class=\"et-scrollable-progress-bar\">\n <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n @for (item of scrollableNavigation().items; track i; let i = $index) {\n <button\n #navigationDot\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n [class.et-scrollable-navigation-item--close]=\"\n scrollableNavigation().items[i + 1]?.isActive || scrollableNavigation().items[i - 1]?.isActive\n \"\n [class.et-scrollable-navigation-item--far]=\"\n !scrollableNavigation().items[i + 1]?.isActive &&\n !scrollableNavigation().items[i - 1]?.isActive &&\n !item.isActive\n \"\n [attr.active-offset]=\"item.activeOffset\"\n (click)=\"scrollToElementViaNavigation(i)\"\n class=\"et-scrollable-navigation-item\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n </div>\n }\n\n @if (renderButtonsInFooter()) {\n <ng-container *ngTemplateOutlet=\"backwardButtonTpl\" />\n }\n </div>\n}\n\n<ng-template #forwardButtonTpl>\n <button\n [disabled]=\"isAtStart()\"\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #backwardButtonTpl>\n <button\n [disabled]=\"isAtEnd()\"\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #loadingTpl>\n @if (loadingTemplate(); as tpl) {\n @for (\n _ of tpl.repeat();\n track index;\n let index = $index;\n let even = $even;\n let odd = $odd;\n let first = $first;\n let last = $last\n ) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n }\n }\n</ng-template>\n", styles: [":where(.et-scrollable){--mask: #121212 0, transparent 100%;--mask-size: 25px;--darken-non-intersecting-items-amount: .75;--_auto-size: min-content;display:block;position:relative}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative;block-size:100%;inline-size:100%}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=half]{--_auto-size: calc((100% - var(--item-gap)) / 2)}.et-scrollable[item-size=third]{--_auto-size: calc((100% - (var(--item-gap) * 2)) / 3)}.et-scrollable[item-size=quarter]{--_auto-size: calc((100% - (var(--item-gap) * 3)) / 4)}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container,.et-scrollable:not([render-scrollbars]) .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar,.et-scrollable:not([render-scrollbars]) .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable .et-scrollable-button .et-icon--et-chevron{display:block}.et-scrollable[direction=horizontal] .et-scrollable-container,.et-scrollable:not([direction]) .et-scrollable-container{grid-auto-flow:column;grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-child(2){grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-container>:nth-last-child(2),.et-scrollable:not([direction]) .et-scrollable-container>:nth-last-child(2){grid-column:var(--item-count)/var(--item-count);grid-row:1/1}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button,.et-scrollable:not([direction]) .et-scrollable-mask,.et-scrollable:not([direction]) .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable:not([direction]) .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable:not([direction]) .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start,.et-scrollable:not([direction]) .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:translate(-10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--start .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end,.et-scrollable:not([direction]) .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:translate(10px)}.et-scrollable[direction=horizontal] .et-scrollable-button--end .et-icon--et-chevron,.et-scrollable:not([direction]) .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable:not([direction]) .et-scroll-observer-first-element{margin-inline-start:3px;grid-column:1/1;grid-row:1/1}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element,.et-scrollable:not([direction]) .et-scroll-observer-last-element{margin-inline-end:3px;grid-column:var(--item-count)/var(--item-count);grid-row:1/1;justify-self:end}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-flow:row;grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-child(2){grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-container>:nth-last-child(2){grid-row:var(--item-count)/var(--item-count);grid-column:1/1}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:translateY(-10px)}.et-scrollable[direction=vertical] .et-scrollable-button--start .et-icon--et-chevron{transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:translateY(10px)}.et-scrollable[direction=vertical] .et-scrollable-button--end .et-icon--et-chevron{transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{margin-block-start:3px;grid-row:1/1;grid-column:1/1}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{margin-block-end:3px;grid-row:var(--item-count)/var(--item-count);grid-column:1/1;align-self:end}.et-scrollable[direction=vertical]:has(.et-scrollable-footer){display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(0,1fr);gap:10px}.et-scrollable[direction=vertical] .et-scrollable-footer{flex-direction:column;margin-block-start:0}.et-scrollable[direction=vertical] .et-scrollable-progress-bar{flex-direction:column;max-block-size:100px}.et-scrollable[direction=vertical] .et-scrollable-dots-container{flex-direction:column}.et-scrollable.et-scrollable--can-scroll:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1;transform:translate(0);pointer-events:all}.et-scrollable.et-scrollable--can-scroll.et-scrollable--has-partial-items:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start{opacity:1;transform:translate(0)}.et-scrollable.et-scrollable--can-scroll:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1;transform:translate(0);pointer-events:all}.et-scrollable.et-scrollable--can-scroll.et-scrollable--has-partial-items:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end{opacity:1;transform:translate(0)}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-animate .et-scrollable-dots-container{transition:transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate .et-scrollable-navigation-item:after{transition:background-color .2s linear,transform .2s linear}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-mask{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--can-scroll .et-scrollable-button{transition:opacity .3s var(--ease-5),transform .3s var(--ease-5)}.et-scrollable.et-scrollable--can-animate.et-scrollable--darken-non-intersecting-items .et-scrollable-item{transition:opacity .3s var(--ease-5)}.et-scrollable.et-scrollable--darken-non-intersecting-items .et-scrollable-item--not-intersecting{opacity:var(--darken-non-intersecting-items-amount)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-icon--et-chevron{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-footer{display:flex;justify-content:center;align-items:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-footer.et-scrollable-footer--with-buttons .et-scrollable-button{transform:none}.et-scrollable .et-scrollable-footer .et-scrollable-button{width:30px;height:30px}.et-scrollable .et-scrollable-navigation-item{display:flex;justify-content:center;align-items:center;border:none;padding:0;inline-size:20px;block-size:20px;border-radius:50%;cursor:pointer;background-color:transparent}.et-scrollable .et-scrollable-navigation-item.et-scrollable-navigation-item--active:after{background-color:#c6c6c6}.et-scrollable .et-scrollable-navigation-item:after{content:\"\";display:block;inline-size:50%;block-size:50%;border-radius:50%;background-color:#4b4b4b;transform:scale(0)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"0\"]:after{transform:scale(1)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"1\"]:after{transform:scale(.75)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"2\"]:after{transform:scale(.6)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"3\"]:after{transform:scale(.5)}.et-scrollable .et-scrollable-navigation-item[active-offset=\"4\"]:after{transform:scale(.4)}.et-scrollable .et-scrollable-progress-bar{overflow:hidden;max-inline-size:100px;display:flex;align-items:center}.et-scrollable .et-scrollable-progress-bar .et-scrollable-dots-container{display:flex;flex-wrap:nowrap}\n"] }]
|
|
9364
|
+
}], ctorParameters: () => [], propDecorators: { itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], scrollableRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollableRole", required: false }] }], scrollableClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollableClass", required: false }] }], renderNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderNavigation", required: false }] }], renderMasks: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderMasks", required: false }] }], renderButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderButtons", required: false }] }], buttonPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonPosition", required: false }] }], renderScrollbars: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderScrollbars", required: false }] }], stickyButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyButtons", required: false }] }], cursorDragScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "cursorDragScroll", required: false }] }], disableActiveElementScrolling: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableActiveElementScrolling", required: false }] }], scrollMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollMode", required: false }] }], snap: [{ type: i0.Input, args: [{ isSignal: true, alias: "snap", required: false }] }], scrollMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollMargin", required: false }] }], scrollOrigin: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollOrigin", required: false }] }], darkenNonIntersectingItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "darkenNonIntersectingItems", required: false }] }], showLoadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLoadingTemplate", required: false }] }], loadingTemplatePosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplatePosition", required: false }] }], scrollable: [{ type: i0.ViewChild, args: ['scrollable', { isSignal: true }] }], scrollObserver: [{ type: i0.ViewChild, args: [i0.forwardRef(() => ScrollObserverDirective), { isSignal: true }] }], activeElementList: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SCROLLABLE_IS_ACTIVE_CHILD_TOKEN), { ...{ descendants: true }, isSignal: true }] }], navigationDotsContainer: [{ type: i0.ViewChild, args: ['navigationDotsContainer', { isSignal: true }] }], firstNavigationDot: [{ type: i0.ViewChild, args: ['navigationDot', { isSignal: true }] }], loadingTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SCROLLABLE_LOADING_TEMPLATE_TOKEN), { isSignal: true }] }], intersectionChange: [{ type: i0.Output, args: ["intersectionChange"] }], scrollStateChange: [{ type: i0.Output, args: ["scrollStateChange"] }] } });
|
|
9612
9365
|
|
|
9613
9366
|
const [provideFocusRegistry, injectFocusRegistry] = createRootProvider(() => {
|
|
9614
9367
|
const registry = signal({}, ...(ngDevMode ? [{ debugName: "registry" }] : []));
|
|
@@ -10776,6 +10529,7 @@ class CarouselDirective {
|
|
|
10776
10529
|
this.autoPlayTime = input(5000, { ...(ngDevMode ? { debugName: "autoPlayTime" } : {}), transform: numberAttribute });
|
|
10777
10530
|
this.pauseAutoPlayOnHover = input(true, { ...(ngDevMode ? { debugName: "pauseAutoPlayOnHover" } : {}), transform: booleanAttribute });
|
|
10778
10531
|
this.pauseAutoPlayOnFocus = input(true, { ...(ngDevMode ? { debugName: "pauseAutoPlayOnFocus" } : {}), transform: booleanAttribute });
|
|
10532
|
+
this.pauseAutoPlayOnHidden = input(true, { ...(ngDevMode ? { debugName: "pauseAutoPlayOnHidden" } : {}), transform: booleanAttribute });
|
|
10779
10533
|
this.transitionType = input('mask-slide', ...(ngDevMode ? [{ debugName: "transitionType" }] : []));
|
|
10780
10534
|
this.transitionDuration = input(450, { ...(ngDevMode ? { debugName: "transitionDuration" } : {}), transform: numberAttribute });
|
|
10781
10535
|
this.activeIndex = signal(0, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
|
|
@@ -10785,6 +10539,8 @@ class CarouselDirective {
|
|
|
10785
10539
|
this.isAutoPlayPaused = signal(false, ...(ngDevMode ? [{ debugName: "isAutoPlayPaused" }] : []));
|
|
10786
10540
|
this.isAutoPlayPausedByInternalHover = signal(false, ...(ngDevMode ? [{ debugName: "isAutoPlayPausedByInternalHover" }] : []));
|
|
10787
10541
|
this.isAutoPlayPausedByInternalFocus = signal(false, ...(ngDevMode ? [{ debugName: "isAutoPlayPausedByInternalFocus" }] : []));
|
|
10542
|
+
this.isAutoPlayPausedByInternalVisibility = signal(false, ...(ngDevMode ? [{ debugName: "isAutoPlayPausedByInternalVisibility" }] : []));
|
|
10543
|
+
this.hostElementIntersection = signalHostElementIntersection();
|
|
10788
10544
|
this.isNavigationLocked = toSignal(toObservable(this.activeIndex).pipe(switchMap(() => merge(of(true), timer(this.transitionDuration()).pipe(map(() => false))))), {
|
|
10789
10545
|
initialValue: false,
|
|
10790
10546
|
});
|
|
@@ -10815,8 +10571,12 @@ class CarouselDirective {
|
|
|
10815
10571
|
toObservable(this.isAutoPlayPaused, { injector: this.injector }),
|
|
10816
10572
|
toObservable(this.isAutoPlayPausedByInternalHover, { injector: this.injector }),
|
|
10817
10573
|
toObservable(this.isAutoPlayPausedByInternalFocus, { injector: this.injector }),
|
|
10818
|
-
|
|
10819
|
-
|
|
10574
|
+
toObservable(this.isAutoPlayPausedByInternalVisibility, { injector: this.injector }),
|
|
10575
|
+
]).pipe(switchMap(([isPaused, internalIsPausedDueToHover, internalIsPausedDueToFocus, internalIsPausedDueToVisibility]) => {
|
|
10576
|
+
if (isPaused ||
|
|
10577
|
+
internalIsPausedDueToHover ||
|
|
10578
|
+
internalIsPausedDueToFocus ||
|
|
10579
|
+
internalIsPausedDueToVisibility)
|
|
10820
10580
|
return of(elapsed / duration);
|
|
10821
10581
|
return timer(0, 100).pipe(tap(() => (elapsed += 100)), map(() => elapsed / duration), takeWhile((progress) => progress < 1, true));
|
|
10822
10582
|
}));
|
|
@@ -10826,6 +10586,16 @@ class CarouselDirective {
|
|
|
10826
10586
|
return false;
|
|
10827
10587
|
return this.activeItemAutoPlayProgress() === 1;
|
|
10828
10588
|
}, ...(ngDevMode ? [{ debugName: "shouldPlayNextItem" }] : []));
|
|
10589
|
+
effect(() => {
|
|
10590
|
+
const entries = this.hostElementIntersection();
|
|
10591
|
+
if (!this.pauseAutoPlayOnHidden()) {
|
|
10592
|
+
this.isAutoPlayPausedByInternalVisibility.set(false);
|
|
10593
|
+
return;
|
|
10594
|
+
}
|
|
10595
|
+
if (entries.length === 0)
|
|
10596
|
+
return;
|
|
10597
|
+
this.isAutoPlayPausedByInternalVisibility.set(!(entries[0]?.isVisible ?? true));
|
|
10598
|
+
});
|
|
10829
10599
|
combineLatest([toObservable(this.activeItemAutoPlayProgress), toObservable(this.autoPlay)])
|
|
10830
10600
|
.pipe(filter(([progress, autoPlay]) => progress === 1 && autoPlay), tap(() => this.next()), takeUntilDestroyed())
|
|
10831
10601
|
.subscribe();
|
|
@@ -10891,7 +10661,7 @@ class CarouselDirective {
|
|
|
10891
10661
|
this.isAutoPlayPaused.set(false);
|
|
10892
10662
|
}
|
|
10893
10663
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CarouselDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
10894
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.1", type: CarouselDirective, isStandalone: true, inputs: { loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, autoPlayTime: { classPropertyName: "autoPlayTime", publicName: "autoPlayTime", isSignal: true, isRequired: false, transformFunction: null }, pauseAutoPlayOnHover: { classPropertyName: "pauseAutoPlayOnHover", publicName: "pauseAutoPlayOnHover", isSignal: true, isRequired: false, transformFunction: null }, pauseAutoPlayOnFocus: { classPropertyName: "pauseAutoPlayOnFocus", publicName: "pauseAutoPlayOnFocus", isSignal: true, isRequired: false, transformFunction: null }, transitionType: { classPropertyName: "transitionType", publicName: "transitionType", isSignal: true, isRequired: false, transformFunction: null }, transitionDuration: { classPropertyName: "transitionDuration", publicName: "transitionDuration", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
10664
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.1", type: CarouselDirective, isStandalone: true, inputs: { loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, autoPlayTime: { classPropertyName: "autoPlayTime", publicName: "autoPlayTime", isSignal: true, isRequired: false, transformFunction: null }, pauseAutoPlayOnHover: { classPropertyName: "pauseAutoPlayOnHover", publicName: "pauseAutoPlayOnHover", isSignal: true, isRequired: false, transformFunction: null }, pauseAutoPlayOnFocus: { classPropertyName: "pauseAutoPlayOnFocus", publicName: "pauseAutoPlayOnFocus", isSignal: true, isRequired: false, transformFunction: null }, pauseAutoPlayOnHidden: { classPropertyName: "pauseAutoPlayOnHidden", publicName: "pauseAutoPlayOnHidden", isSignal: true, isRequired: false, transformFunction: null }, transitionType: { classPropertyName: "transitionType", publicName: "transitionType", isSignal: true, isRequired: false, transformFunction: null }, transitionDuration: { classPropertyName: "transitionDuration", publicName: "transitionDuration", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
10895
10665
|
{
|
|
10896
10666
|
provide: CAROUSEL_TOKEN,
|
|
10897
10667
|
useExisting: CarouselDirective,
|
|
@@ -10908,7 +10678,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
10908
10678
|
},
|
|
10909
10679
|
],
|
|
10910
10680
|
}]
|
|
10911
|
-
}], ctorParameters: () => [], propDecorators: { loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], autoPlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlay", required: false }] }], autoPlayTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlayTime", required: false }] }], pauseAutoPlayOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseAutoPlayOnHover", required: false }] }], pauseAutoPlayOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseAutoPlayOnFocus", required: false }] }], transitionType: [{ type: i0.Input, args: [{ isSignal: true, alias: "transitionType", required: false }] }], transitionDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "transitionDuration", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CAROUSEL_ITEM_TOKEN), { isSignal: true }] }] } });
|
|
10681
|
+
}], ctorParameters: () => [], propDecorators: { loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], autoPlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlay", required: false }] }], autoPlayTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlayTime", required: false }] }], pauseAutoPlayOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseAutoPlayOnHover", required: false }] }], pauseAutoPlayOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseAutoPlayOnFocus", required: false }] }], pauseAutoPlayOnHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseAutoPlayOnHidden", required: false }] }], transitionType: [{ type: i0.Input, args: [{ isSignal: true, alias: "transitionType", required: false }] }], transitionDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "transitionDuration", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CAROUSEL_ITEM_TOKEN), { isSignal: true }] }] } });
|
|
10912
10682
|
|
|
10913
10683
|
class CarouselComponent {
|
|
10914
10684
|
constructor() {
|
|
@@ -10917,7 +10687,7 @@ class CarouselComponent {
|
|
|
10917
10687
|
syncSignal(this.carouselItemsWrapper, this.carousel.carouselItemsWrapper, { skipSyncRead: true });
|
|
10918
10688
|
}
|
|
10919
10689
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10920
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.1", type: CarouselComponent, isStandalone: true, selector: "et-carousel", host: { classAttribute: "et-carousel-host" }, viewQueries: [{ propertyName: "carouselItemsWrapper", first: true, predicate: ["carouselItemsWrapper"], descendants: true, isSignal: true }], hostDirectives: [{ directive: CarouselDirective, inputs: ["loop", "loop", "autoPlay", "autoPlay", "autoPlayTime", "autoPlayTime", "pauseAutoPlayOnHover", "pauseAutoPlayOnHover", "pauseAutoPlayOnFocus", "pauseAutoPlayOnFocus", "transitionType", "transitionType", "transitionDuration", "transitionDuration"] }], ngImport: i0, template: `
|
|
10690
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.1", type: CarouselComponent, isStandalone: true, selector: "et-carousel", host: { classAttribute: "et-carousel-host" }, viewQueries: [{ propertyName: "carouselItemsWrapper", first: true, predicate: ["carouselItemsWrapper"], descendants: true, isSignal: true }], hostDirectives: [{ directive: CarouselDirective, inputs: ["loop", "loop", "autoPlay", "autoPlay", "autoPlayTime", "autoPlayTime", "pauseAutoPlayOnHover", "pauseAutoPlayOnHover", "pauseAutoPlayOnFocus", "pauseAutoPlayOnFocus", "pauseAutoPlayOnHidden", "pauseAutoPlayOnHidden", "transitionType", "transitionType", "transitionDuration", "transitionDuration"] }], ngImport: i0, template: `
|
|
10921
10691
|
<div class="et-carousel">
|
|
10922
10692
|
<div #carouselItemsWrapper class="et-carousel-items">
|
|
10923
10693
|
<ng-content select="et-carousel-item, [etCarouselItem]" />
|
|
@@ -10948,6 +10718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
10948
10718
|
'autoPlayTime',
|
|
10949
10719
|
'pauseAutoPlayOnHover',
|
|
10950
10720
|
'pauseAutoPlayOnFocus',
|
|
10721
|
+
'pauseAutoPlayOnHidden',
|
|
10951
10722
|
'transitionType',
|
|
10952
10723
|
'transitionDuration',
|
|
10953
10724
|
],
|
|
@@ -14960,6 +14731,7 @@ class SelectDirective {
|
|
|
14960
14731
|
}
|
|
14961
14732
|
removeOptionFromSelection(option) {
|
|
14962
14733
|
this._selectionModel.removeSelectedOption(option);
|
|
14734
|
+
this.input._markAsTouched();
|
|
14963
14735
|
}
|
|
14964
14736
|
_controlTouched() {
|
|
14965
14737
|
this.input._markAsTouched();
|
|
@@ -17805,237 +17577,2149 @@ const provideSort = () => {
|
|
|
17805
17577
|
return [SORT_HEADER_INTL_PROVIDER];
|
|
17806
17578
|
};
|
|
17807
17579
|
|
|
17808
|
-
|
|
17580
|
+
const STREAM_CONSENT_TOKEN = new InjectionToken('STREAM_CONSENT_TOKEN');
|
|
17581
|
+
const STREAM_USER_CONSENT_PROVIDER_TOKEN = new InjectionToken('STREAM_USER_CONSENT_PROVIDER_TOKEN');
|
|
17582
|
+
const injectStreamUserConsentProvider = () => inject(STREAM_USER_CONSENT_PROVIDER_TOKEN, { optional: true });
|
|
17583
|
+
class StreamConsentDirective {
|
|
17809
17584
|
constructor() {
|
|
17810
|
-
this.
|
|
17811
|
-
this.
|
|
17585
|
+
this._handler = injectStreamUserConsentProvider();
|
|
17586
|
+
this._localGranted = signal(false, ...(ngDevMode ? [{ debugName: "_localGranted" }] : []));
|
|
17587
|
+
this.isGranted = this._handler
|
|
17588
|
+
? computed(() => this._handler.isGranted())
|
|
17589
|
+
: this._localGranted;
|
|
17812
17590
|
}
|
|
17813
|
-
|
|
17814
|
-
|
|
17591
|
+
grant() {
|
|
17592
|
+
if (this._handler) {
|
|
17593
|
+
this._handler.grant();
|
|
17594
|
+
}
|
|
17595
|
+
else {
|
|
17596
|
+
this._localGranted.set(true);
|
|
17597
|
+
}
|
|
17598
|
+
}
|
|
17599
|
+
revoke() {
|
|
17600
|
+
if (this._handler) {
|
|
17601
|
+
this._handler.revoke?.();
|
|
17602
|
+
}
|
|
17603
|
+
else {
|
|
17604
|
+
this._localGranted.set(false);
|
|
17605
|
+
}
|
|
17606
|
+
}
|
|
17607
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17608
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: StreamConsentDirective, isStandalone: true, providers: [{ provide: STREAM_CONSENT_TOKEN, useExisting: StreamConsentDirective }], ngImport: i0 }); }
|
|
17815
17609
|
}
|
|
17816
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentDirective, decorators: [{
|
|
17817
17611
|
type: Directive,
|
|
17818
17612
|
args: [{
|
|
17819
|
-
|
|
17613
|
+
providers: [{ provide: STREAM_CONSENT_TOKEN, useExisting: StreamConsentDirective }],
|
|
17820
17614
|
}]
|
|
17821
17615
|
}] });
|
|
17822
17616
|
|
|
17823
|
-
|
|
17824
|
-
class TableBusyOutletDirective {
|
|
17617
|
+
class StreamConsentAcceptDirective {
|
|
17825
17618
|
constructor() {
|
|
17826
|
-
this.
|
|
17827
|
-
this.elementRef = inject(ElementRef);
|
|
17619
|
+
this.consent = inject(STREAM_CONSENT_TOKEN);
|
|
17828
17620
|
}
|
|
17829
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17830
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type:
|
|
17621
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentAcceptDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17622
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: StreamConsentAcceptDirective, isStandalone: true, selector: "[etStreamConsentAccept]", host: { listeners: { "click": "consent.grant()" } }, ngImport: i0 }); }
|
|
17831
17623
|
}
|
|
17832
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentAcceptDirective, decorators: [{
|
|
17833
17625
|
type: Directive,
|
|
17834
|
-
args: [{
|
|
17626
|
+
args: [{
|
|
17627
|
+
selector: '[etStreamConsentAccept]',
|
|
17628
|
+
host: {
|
|
17629
|
+
'(click)': 'consent.grant()',
|
|
17630
|
+
},
|
|
17631
|
+
}]
|
|
17835
17632
|
}] });
|
|
17836
17633
|
|
|
17837
|
-
|
|
17634
|
+
const STREAM_CONSENT_CONTENT_TOKEN = new InjectionToken('STREAM_CONSENT_CONTENT_TOKEN');
|
|
17635
|
+
class StreamConsentContentDirective {
|
|
17838
17636
|
constructor() {
|
|
17839
|
-
|
|
17840
|
-
this._cdr = inject(ChangeDetectorRef);
|
|
17841
|
-
this.stickyCssClass = 'et-table-sticky';
|
|
17842
|
-
this.needsPositionStickyOnElement = false;
|
|
17843
|
-
this._tableBusyOutlet = viewChild(TableBusyOutletDirective, ...(ngDevMode ? [{ debugName: "_tableBusyOutlet" }] : []));
|
|
17844
|
-
this._tableBusyComponent = contentChild(TableBusyDirective, ...(ngDevMode ? [{ debugName: "_tableBusyComponent" }] : []));
|
|
17845
|
-
this._busy = false;
|
|
17846
|
-
this._isShowingTableBusy = false;
|
|
17847
|
-
}
|
|
17848
|
-
// TODO: Skipped for migration because:
|
|
17849
|
-
// Accessor inputs cannot be migrated as they are too complex.
|
|
17850
|
-
get busy() {
|
|
17851
|
-
return this._busy;
|
|
17852
|
-
}
|
|
17853
|
-
set busy(value) {
|
|
17854
|
-
this._busy = booleanAttribute(value);
|
|
17855
|
-
this._updateTableBusy();
|
|
17856
|
-
}
|
|
17857
|
-
ngAfterContentInit() {
|
|
17858
|
-
super.ngAfterContentInit();
|
|
17859
|
-
this._updateTableBusy();
|
|
17860
|
-
}
|
|
17861
|
-
_updateTableBusy() {
|
|
17862
|
-
const tableBusyComponent = this._tableBusyComponent();
|
|
17863
|
-
if (!tableBusyComponent) {
|
|
17864
|
-
return;
|
|
17865
|
-
}
|
|
17866
|
-
const shouldShow = this.busy;
|
|
17867
|
-
if (shouldShow === this._isShowingTableBusy) {
|
|
17868
|
-
return;
|
|
17869
|
-
}
|
|
17870
|
-
const container = this._tableBusyOutlet()?.viewContainer;
|
|
17871
|
-
if (!container) {
|
|
17872
|
-
return;
|
|
17873
|
-
}
|
|
17874
|
-
if (shouldShow) {
|
|
17875
|
-
const view = container.createEmbeddedView(tableBusyComponent.templateRef);
|
|
17876
|
-
const rootNode = view.rootNodes[0];
|
|
17877
|
-
if (view.rootNodes.length === 1 && rootNode?.nodeType === document.ELEMENT_NODE) {
|
|
17878
|
-
rootNode.classList.add(tableBusyComponent._contentClassName);
|
|
17879
|
-
}
|
|
17880
|
-
}
|
|
17881
|
-
else {
|
|
17882
|
-
container.clear();
|
|
17883
|
-
}
|
|
17884
|
-
this._isShowingTableBusy = shouldShow;
|
|
17885
|
-
this._cdr.markForCheck();
|
|
17886
|
-
}
|
|
17887
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
17888
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: TableComponent, isStandalone: true, selector: "et-table, table[et-table]", inputs: { busy: "busy" }, host: { properties: { "class.et-table-fixed-layout": "fixedLayout", "attr.aria-busy": "busy ? true : null" }, classAttribute: "et-table et-data-table__table" }, providers: [
|
|
17889
|
-
{ provide: CdkTable, useExisting: TableComponent },
|
|
17890
|
-
{ provide: CDK_TABLE, useExisting: TableComponent },
|
|
17891
|
-
{ provide: STICKY_POSITIONING_LISTENER, useValue: null },
|
|
17892
|
-
], queries: [{ propertyName: "_tableBusyComponent", first: true, predicate: TableBusyDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_tableBusyOutlet", first: true, predicate: TableBusyOutletDirective, descendants: true, isSignal: true }], exportAs: ["etTable"], usesInheritance: true, ngImport: i0, template: `
|
|
17893
|
-
<ng-content select="caption" />
|
|
17894
|
-
<ng-content select="colgroup, col" />
|
|
17895
|
-
|
|
17896
|
-
@if (_isServer) {
|
|
17897
|
-
<ng-content />
|
|
17898
|
-
}
|
|
17899
|
-
|
|
17900
|
-
@if (_isNativeHtmlTable) {
|
|
17901
|
-
<thead role="rowgroup">
|
|
17902
|
-
<ng-container headerRowOutlet />
|
|
17903
|
-
</thead>
|
|
17904
|
-
<tbody class="mdc-data-table__content" role="rowgroup">
|
|
17905
|
-
<ng-container rowOutlet />
|
|
17906
|
-
<ng-container noDataRowOutlet />
|
|
17907
|
-
</tbody>
|
|
17908
|
-
<tfoot role="rowgroup">
|
|
17909
|
-
<ng-container footerRowOutlet />
|
|
17910
|
-
</tfoot>
|
|
17911
|
-
} @else {
|
|
17912
|
-
<ng-container headerRowOutlet />
|
|
17913
|
-
<div class="et-table-body">
|
|
17914
|
-
<ng-container rowOutlet />
|
|
17915
|
-
<ng-container tableBusyOutlet />
|
|
17916
|
-
</div>
|
|
17917
|
-
<ng-container noDataRowOutlet />
|
|
17918
|
-
<ng-container footerRowOutlet />
|
|
17919
|
-
}
|
|
17920
|
-
`, isInline: true, styles: [":where(.et-table){--et-table-separator-color: #4c4c4c;--et-table-separator-width: 1px;--et-table-separator-style: solid;--et-table-header-row-min-height: 56px;--et-table-row-display: flex;--et-table-row-min-height: 48px;--et-table-row-inline-padding: 24px;--et-table-cell-display: flex;--et-table-cell-inline-padding: 0;--et-table-cell-block-padding: 0}.et-table{display:block;position:relative}.et-header-row{min-height:var(--et-table-header-row-min-height)}.et-row,.et-footer-row{min-height:var(--et-table-row-min-height)}.et-row,.et-header-row,.et-footer-row{display:var(--et-table-row-display);border-width:0;border-bottom-width:var(--et-table-separator-width);border-style:var(--et-table-separator-style);border-color:var(--et-table-separator-color);align-items:center;box-sizing:border-box}.et-cell,.et-header-cell,.et-footer-cell{padding-inline:var(--et-table-cell-inline-padding);padding-block:var(--et-table-cell-block-padding)}.et-cell:first-of-type,.et-header-cell:first-of-type,.et-footer-cell:first-of-type{padding-inline-start:var(--et-table-row-inline-padding)}.et-cell:last-of-type,.et-header-cell:last-of-type,.et-footer-cell:last-of-type{padding-inline-end:var(--et-table-row-inline-padding)}.et-cell,.et-header-cell,.et-footer-cell{flex:1;display:var(--et-table-cell-display);align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit;box-sizing:border-box}.et-table-sticky{position:sticky!important}.et-table{table-layout:auto;white-space:normal}.et-table tbody,.et-table tfoot,.et-table thead,.et-cell,.et-footer-cell,.et-header-row,.et-row,.et-footer-row,.et-table .et-header-cell{background:inherit}.et-table et-header-row.et-header-row,.et-table et-row.et-row,.et-table et-footer-row.et-footer-cell{height:unset}et-header-cell.et-header-cell,et-cell.et-cell,et-footer-cell.et-footer-cell{align-self:stretch}\n"], dependencies: [{ kind: "directive", type: HeaderRowOutlet, selector: "[headerRowOutlet]" }, { kind: "directive", type: DataRowOutlet, selector: "[rowOutlet]" }, { kind: "directive", type: NoDataRowOutlet, selector: "[noDataRowOutlet]" }, { kind: "directive", type: FooterRowOutlet, selector: "[footerRowOutlet]" }, { kind: "directive", type: TableBusyOutletDirective, selector: "[tableBusyOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
|
|
17921
|
-
}
|
|
17922
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableComponent, decorators: [{
|
|
17923
|
-
type: Component,
|
|
17924
|
-
args: [{ selector: 'et-table, table[et-table]', exportAs: 'etTable', template: `
|
|
17925
|
-
<ng-content select="caption" />
|
|
17926
|
-
<ng-content select="colgroup, col" />
|
|
17927
|
-
|
|
17928
|
-
@if (_isServer) {
|
|
17929
|
-
<ng-content />
|
|
17930
|
-
}
|
|
17931
|
-
|
|
17932
|
-
@if (_isNativeHtmlTable) {
|
|
17933
|
-
<thead role="rowgroup">
|
|
17934
|
-
<ng-container headerRowOutlet />
|
|
17935
|
-
</thead>
|
|
17936
|
-
<tbody class="mdc-data-table__content" role="rowgroup">
|
|
17937
|
-
<ng-container rowOutlet />
|
|
17938
|
-
<ng-container noDataRowOutlet />
|
|
17939
|
-
</tbody>
|
|
17940
|
-
<tfoot role="rowgroup">
|
|
17941
|
-
<ng-container footerRowOutlet />
|
|
17942
|
-
</tfoot>
|
|
17943
|
-
} @else {
|
|
17944
|
-
<ng-container headerRowOutlet />
|
|
17945
|
-
<div class="et-table-body">
|
|
17946
|
-
<ng-container rowOutlet />
|
|
17947
|
-
<ng-container tableBusyOutlet />
|
|
17948
|
-
</div>
|
|
17949
|
-
<ng-container noDataRowOutlet />
|
|
17950
|
-
<ng-container footerRowOutlet />
|
|
17637
|
+
this.templateRef = inject(TemplateRef);
|
|
17951
17638
|
}
|
|
17952
|
-
|
|
17953
|
-
|
|
17954
|
-
'[class.et-table-fixed-layout]': 'fixedLayout',
|
|
17955
|
-
'[attr.aria-busy]': 'busy ? true : null',
|
|
17956
|
-
}, providers: [
|
|
17957
|
-
{ provide: CdkTable, useExisting: TableComponent },
|
|
17958
|
-
{ provide: CDK_TABLE, useExisting: TableComponent },
|
|
17959
|
-
{ provide: STICKY_POSITIONING_LISTENER, useValue: null },
|
|
17960
|
-
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet, TableBusyOutletDirective], styles: [":where(.et-table){--et-table-separator-color: #4c4c4c;--et-table-separator-width: 1px;--et-table-separator-style: solid;--et-table-header-row-min-height: 56px;--et-table-row-display: flex;--et-table-row-min-height: 48px;--et-table-row-inline-padding: 24px;--et-table-cell-display: flex;--et-table-cell-inline-padding: 0;--et-table-cell-block-padding: 0}.et-table{display:block;position:relative}.et-header-row{min-height:var(--et-table-header-row-min-height)}.et-row,.et-footer-row{min-height:var(--et-table-row-min-height)}.et-row,.et-header-row,.et-footer-row{display:var(--et-table-row-display);border-width:0;border-bottom-width:var(--et-table-separator-width);border-style:var(--et-table-separator-style);border-color:var(--et-table-separator-color);align-items:center;box-sizing:border-box}.et-cell,.et-header-cell,.et-footer-cell{padding-inline:var(--et-table-cell-inline-padding);padding-block:var(--et-table-cell-block-padding)}.et-cell:first-of-type,.et-header-cell:first-of-type,.et-footer-cell:first-of-type{padding-inline-start:var(--et-table-row-inline-padding)}.et-cell:last-of-type,.et-header-cell:last-of-type,.et-footer-cell:last-of-type{padding-inline-end:var(--et-table-row-inline-padding)}.et-cell,.et-header-cell,.et-footer-cell{flex:1;display:var(--et-table-cell-display);align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit;box-sizing:border-box}.et-table-sticky{position:sticky!important}.et-table{table-layout:auto;white-space:normal}.et-table tbody,.et-table tfoot,.et-table thead,.et-cell,.et-footer-cell,.et-header-row,.et-row,.et-footer-row,.et-table .et-header-cell{background:inherit}.et-table et-header-row.et-header-row,.et-table et-row.et-row,.et-table et-footer-row.et-footer-cell{height:unset}et-header-cell.et-header-cell,et-cell.et-cell,et-footer-cell.et-footer-cell{align-self:stretch}\n"] }]
|
|
17961
|
-
}], propDecorators: { _tableBusyOutlet: [{ type: i0.ViewChild, args: [i0.forwardRef(() => TableBusyOutletDirective), { isSignal: true }] }], _tableBusyComponent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TableBusyDirective), { isSignal: true }] }], busy: [{
|
|
17962
|
-
type: Input
|
|
17963
|
-
}] } });
|
|
17964
|
-
|
|
17965
|
-
const MAX_SAFE_INTEGER = 9007199254740991;
|
|
17966
|
-
|
|
17967
|
-
class CellDirective extends CdkCell {
|
|
17968
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CellDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17969
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: CellDirective, isStandalone: true, selector: "et-cell, td[et-cell]", host: { classAttribute: "et-cell et-data-table__cell" }, usesInheritance: true, ngImport: i0 }); }
|
|
17639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17640
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: StreamConsentContentDirective, isStandalone: true, selector: "[etStreamConsentContent]", providers: [{ provide: STREAM_CONSENT_CONTENT_TOKEN, useExisting: StreamConsentContentDirective }], ngImport: i0 }); }
|
|
17970
17641
|
}
|
|
17971
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentContentDirective, decorators: [{
|
|
17972
17643
|
type: Directive,
|
|
17973
17644
|
args: [{
|
|
17974
|
-
|
|
17975
|
-
|
|
17976
|
-
host: {
|
|
17977
|
-
class: 'et-cell et-data-table__cell',
|
|
17978
|
-
},
|
|
17645
|
+
selector: '[etStreamConsentContent]',
|
|
17646
|
+
providers: [{ provide: STREAM_CONSENT_CONTENT_TOKEN, useExisting: StreamConsentContentDirective }],
|
|
17979
17647
|
}]
|
|
17980
17648
|
}] });
|
|
17981
17649
|
|
|
17982
|
-
|
|
17983
|
-
|
|
17984
|
-
|
|
17650
|
+
const STREAM_CONSENT_PLACEHOLDER_TOKEN = new InjectionToken('STREAM_CONSENT_PLACEHOLDER_TOKEN');
|
|
17651
|
+
class StreamConsentPlaceholderDirective {
|
|
17652
|
+
constructor() {
|
|
17653
|
+
this.templateRef = inject(TemplateRef);
|
|
17654
|
+
}
|
|
17655
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentPlaceholderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17656
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: StreamConsentPlaceholderDirective, isStandalone: true, selector: "[etStreamConsentPlaceholder]", providers: [{ provide: STREAM_CONSENT_PLACEHOLDER_TOKEN, useExisting: StreamConsentPlaceholderDirective }], ngImport: i0 }); }
|
|
17985
17657
|
}
|
|
17986
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17658
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentPlaceholderDirective, decorators: [{
|
|
17987
17659
|
type: Directive,
|
|
17988
17660
|
args: [{
|
|
17989
|
-
selector: '[
|
|
17990
|
-
providers: [{ provide:
|
|
17661
|
+
selector: '[etStreamConsentPlaceholder]',
|
|
17662
|
+
providers: [{ provide: STREAM_CONSENT_PLACEHOLDER_TOKEN, useExisting: StreamConsentPlaceholderDirective }],
|
|
17991
17663
|
}]
|
|
17992
17664
|
}] });
|
|
17993
17665
|
|
|
17994
|
-
class
|
|
17995
|
-
|
|
17996
|
-
|
|
17666
|
+
class StreamConsentComponent {
|
|
17667
|
+
constructor() {
|
|
17668
|
+
this.consent = inject(STREAM_CONSENT_TOKEN);
|
|
17669
|
+
this.contentSlot = contentChild(StreamConsentContentDirective, ...(ngDevMode ? [{ debugName: "contentSlot" }] : []));
|
|
17670
|
+
this.placeholderSlot = contentChild(StreamConsentPlaceholderDirective, ...(ngDevMode ? [{ debugName: "placeholderSlot" }] : []));
|
|
17671
|
+
}
|
|
17672
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17673
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: StreamConsentComponent, isStandalone: true, selector: "et-stream-consent", host: { classAttribute: "et-stream-consent" }, queries: [{ propertyName: "contentSlot", first: true, predicate: StreamConsentContentDirective, descendants: true, isSignal: true }, { propertyName: "placeholderSlot", first: true, predicate: StreamConsentPlaceholderDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: StreamConsentDirective }], ngImport: i0, template: `
|
|
17674
|
+
@if (consent.isGranted()) {
|
|
17675
|
+
<ng-container [ngTemplateOutlet]="contentSlot()?.templateRef ?? null" />
|
|
17676
|
+
} @else {
|
|
17677
|
+
<ng-container [ngTemplateOutlet]="placeholderSlot()?.templateRef ?? null" />
|
|
17678
|
+
}
|
|
17679
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
17997
17680
|
}
|
|
17998
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17999
|
-
type:
|
|
17681
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamConsentComponent, decorators: [{
|
|
17682
|
+
type: Component,
|
|
18000
17683
|
args: [{
|
|
18001
|
-
|
|
18002
|
-
|
|
17684
|
+
selector: 'et-stream-consent',
|
|
17685
|
+
template: `
|
|
17686
|
+
@if (consent.isGranted()) {
|
|
17687
|
+
<ng-container [ngTemplateOutlet]="contentSlot()?.templateRef ?? null" />
|
|
17688
|
+
} @else {
|
|
17689
|
+
<ng-container [ngTemplateOutlet]="placeholderSlot()?.templateRef ?? null" />
|
|
17690
|
+
}
|
|
17691
|
+
`,
|
|
17692
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
17693
|
+
encapsulation: ViewEncapsulation.None,
|
|
17694
|
+
hostDirectives: [{ directive: StreamConsentDirective }],
|
|
17695
|
+
imports: [NgTemplateOutlet],
|
|
18003
17696
|
host: {
|
|
18004
|
-
class: 'et-
|
|
17697
|
+
class: 'et-stream-consent',
|
|
18005
17698
|
},
|
|
18006
17699
|
}]
|
|
18007
|
-
}] });
|
|
18008
|
-
|
|
18009
|
-
|
|
18010
|
-
|
|
18011
|
-
|
|
17700
|
+
}], propDecorators: { contentSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StreamConsentContentDirective), { isSignal: true }] }], placeholderSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StreamConsentPlaceholderDirective), { isSignal: true }] }] } });
|
|
17701
|
+
|
|
17702
|
+
const STREAM_PLAYER_TOKEN = new InjectionToken('STREAM_PLAYER_TOKEN');
|
|
17703
|
+
|
|
17704
|
+
const DAILYMOTION_PLAYER_TOKEN = new InjectionToken('DAILYMOTION_PLAYER_TOKEN');
|
|
17705
|
+
const DEFAULT_STATE$7 = {
|
|
17706
|
+
isReady: false,
|
|
17707
|
+
isPlaying: false,
|
|
17708
|
+
isMuted: false,
|
|
17709
|
+
isEnded: false,
|
|
17710
|
+
duration: null,
|
|
17711
|
+
currentTime: null,
|
|
17712
|
+
};
|
|
17713
|
+
class DailymotionPlayerDirective {
|
|
17714
|
+
constructor() {
|
|
17715
|
+
this.el = injectHostElement();
|
|
17716
|
+
this.platformId = inject(PLATFORM_ID);
|
|
17717
|
+
this.CAPABILITIES = {
|
|
17718
|
+
canPlay: false,
|
|
17719
|
+
canPause: false,
|
|
17720
|
+
canMute: false,
|
|
17721
|
+
canSeek: false,
|
|
17722
|
+
canGetDuration: false,
|
|
17723
|
+
isLiveCapable: true,
|
|
17724
|
+
};
|
|
17725
|
+
this.state = signal({ ...DEFAULT_STATE$7 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
17726
|
+
this.videoId = input.required(...(ngDevMode ? [{ debugName: "videoId" }] : []));
|
|
17727
|
+
this.startTime = input(0, { ...(ngDevMode ? { debugName: "startTime" } : {}), transform: numberAttribute });
|
|
17728
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
17729
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
17730
|
+
this.playerResource = rxResource({
|
|
17731
|
+
params: () => (isPlatformBrowser(this.platformId) ? this.videoId() : null),
|
|
17732
|
+
stream: ({ params: videoId }) => {
|
|
17733
|
+
if (!videoId)
|
|
17734
|
+
return EMPTY;
|
|
17735
|
+
return new Observable((subscriber) => {
|
|
17736
|
+
const iframe = document.createElement('iframe');
|
|
17737
|
+
const qs = new URLSearchParams({ autoplay: '0' });
|
|
17738
|
+
const startTime = this.startTime();
|
|
17739
|
+
if (startTime > 0)
|
|
17740
|
+
qs.set('start', String(startTime));
|
|
17741
|
+
const w = this.width();
|
|
17742
|
+
const h = this.height();
|
|
17743
|
+
iframe.src = `https://www.dailymotion.com/embed/video/${videoId}?${qs}`;
|
|
17744
|
+
iframe.width = typeof w === 'number' ? String(w) : w;
|
|
17745
|
+
iframe.height = typeof h === 'number' ? String(h) : h;
|
|
17746
|
+
iframe.style.border = 'none';
|
|
17747
|
+
iframe.allow = 'autoplay; encrypted-media';
|
|
17748
|
+
iframe.allowFullscreen = true;
|
|
17749
|
+
iframe.scrolling = 'no';
|
|
17750
|
+
iframe.addEventListener('load', () => {
|
|
17751
|
+
this.state.set({ ...DEFAULT_STATE$7, isReady: true });
|
|
17752
|
+
subscriber.next();
|
|
17753
|
+
});
|
|
17754
|
+
this.el.appendChild(iframe);
|
|
17755
|
+
return () => {
|
|
17756
|
+
if (this.el.contains(iframe))
|
|
17757
|
+
this.el.removeChild(iframe);
|
|
17758
|
+
this.state.set({ ...DEFAULT_STATE$7 });
|
|
17759
|
+
};
|
|
17760
|
+
});
|
|
17761
|
+
},
|
|
17762
|
+
});
|
|
17763
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
17764
|
+
}
|
|
17765
|
+
// Dailymotion embeds have no programmatic control API without a dashboard-created player ID
|
|
17766
|
+
play() {
|
|
17767
|
+
// no-op
|
|
17768
|
+
}
|
|
17769
|
+
pause() {
|
|
17770
|
+
// no-op
|
|
17771
|
+
}
|
|
17772
|
+
mute() {
|
|
17773
|
+
// no-op
|
|
17774
|
+
}
|
|
17775
|
+
unmute() {
|
|
17776
|
+
// no-op
|
|
17777
|
+
}
|
|
17778
|
+
seek() {
|
|
17779
|
+
// no-op
|
|
17780
|
+
}
|
|
17781
|
+
retry() {
|
|
17782
|
+
this.playerResource.reload();
|
|
17783
|
+
}
|
|
17784
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DailymotionPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17785
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: DailymotionPlayerDirective, isStandalone: true, inputs: { videoId: { classPropertyName: "videoId", publicName: "videoId", isSignal: true, isRequired: true, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
17786
|
+
{ provide: DAILYMOTION_PLAYER_TOKEN, useExisting: DailymotionPlayerDirective },
|
|
17787
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: DailymotionPlayerDirective },
|
|
17788
|
+
], ngImport: i0 }); }
|
|
18012
17789
|
}
|
|
18013
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
17790
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DailymotionPlayerDirective, decorators: [{
|
|
18014
17791
|
type: Directive,
|
|
18015
17792
|
args: [{
|
|
18016
|
-
|
|
18017
|
-
|
|
17793
|
+
providers: [
|
|
17794
|
+
{ provide: DAILYMOTION_PLAYER_TOKEN, useExisting: DailymotionPlayerDirective },
|
|
17795
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: DailymotionPlayerDirective },
|
|
17796
|
+
],
|
|
18018
17797
|
}]
|
|
18019
|
-
}] });
|
|
17798
|
+
}], propDecorators: { videoId: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoId", required: true }] }], startTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "startTime", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
18020
17799
|
|
|
18021
|
-
class
|
|
18022
|
-
|
|
18023
|
-
|
|
17800
|
+
class DailymotionPlayerComponent {
|
|
17801
|
+
constructor() {
|
|
17802
|
+
this.player = inject(DAILYMOTION_PLAYER_TOKEN);
|
|
17803
|
+
this.state = this.player.state;
|
|
17804
|
+
this.error = this.player.error;
|
|
17805
|
+
}
|
|
17806
|
+
retry() {
|
|
17807
|
+
this.player.retry();
|
|
17808
|
+
}
|
|
17809
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DailymotionPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17810
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DailymotionPlayerComponent, isStandalone: true, selector: "et-dailymotion-player", host: { classAttribute: "et-dailymotion-player" }, hostDirectives: [{ directive: DailymotionPlayerDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18024
17811
|
}
|
|
18025
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type:
|
|
18026
|
-
type:
|
|
17812
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DailymotionPlayerComponent, decorators: [{
|
|
17813
|
+
type: Component,
|
|
18027
17814
|
args: [{
|
|
18028
|
-
|
|
18029
|
-
|
|
17815
|
+
selector: 'et-dailymotion-player',
|
|
17816
|
+
template: '',
|
|
17817
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
17818
|
+
encapsulation: ViewEncapsulation.None,
|
|
17819
|
+
hostDirectives: [
|
|
17820
|
+
{
|
|
17821
|
+
directive: DailymotionPlayerDirective,
|
|
17822
|
+
inputs: ['videoId', 'startTime', 'width', 'height'],
|
|
17823
|
+
},
|
|
17824
|
+
],
|
|
18030
17825
|
host: {
|
|
18031
|
-
class: 'et-
|
|
18032
|
-
role: 'columnheader',
|
|
17826
|
+
class: 'et-dailymotion-player',
|
|
18033
17827
|
},
|
|
18034
17828
|
}]
|
|
18035
17829
|
}] });
|
|
18036
17830
|
|
|
18037
|
-
|
|
18038
|
-
|
|
17831
|
+
const [, injectStreamScriptLoader] = createRootProvider(() => {
|
|
17832
|
+
const document = inject(DOCUMENT);
|
|
17833
|
+
const cache = new Map();
|
|
17834
|
+
const mountedScripts = new Set();
|
|
17835
|
+
const renderer = injectRenderer();
|
|
17836
|
+
const load = (src) => {
|
|
17837
|
+
const cached = cache.get(src);
|
|
17838
|
+
if (cached)
|
|
17839
|
+
return cached;
|
|
17840
|
+
const obs = new Observable((subscriber) => {
|
|
17841
|
+
const isMounted = mountedScripts.has(src);
|
|
17842
|
+
if (isMounted) {
|
|
17843
|
+
subscriber.next();
|
|
17844
|
+
subscriber.complete();
|
|
17845
|
+
return;
|
|
17846
|
+
}
|
|
17847
|
+
const script = renderer.createElement('script');
|
|
17848
|
+
script.src = src;
|
|
17849
|
+
script.async = true;
|
|
17850
|
+
renderer.listen(script, 'load', () => {
|
|
17851
|
+
subscriber.next();
|
|
17852
|
+
subscriber.complete();
|
|
17853
|
+
mountedScripts.add(src);
|
|
17854
|
+
});
|
|
17855
|
+
renderer.listen(script, 'error', () => {
|
|
17856
|
+
cache.delete(src);
|
|
17857
|
+
script.remove();
|
|
17858
|
+
mountedScripts.delete(src);
|
|
17859
|
+
subscriber.error(new Error(`Failed to load script: ${src}`));
|
|
17860
|
+
});
|
|
17861
|
+
renderer.appendChild(document.head, script);
|
|
17862
|
+
}).pipe(shareReplay(1));
|
|
17863
|
+
cache.set(src, obs);
|
|
17864
|
+
return obs;
|
|
17865
|
+
};
|
|
17866
|
+
return { load };
|
|
17867
|
+
}, { name: 'Stream Script Loader' });
|
|
17868
|
+
|
|
17869
|
+
const FB_SDK_URL = 'https://connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v3.2';
|
|
17870
|
+
const FACEBOOK_PLAYER_TOKEN = new InjectionToken('FACEBOOK_PLAYER_TOKEN');
|
|
17871
|
+
const DEFAULT_STATE$6 = {
|
|
17872
|
+
isReady: false,
|
|
17873
|
+
isPlaying: false,
|
|
17874
|
+
isMuted: false,
|
|
17875
|
+
isEnded: false,
|
|
17876
|
+
duration: null,
|
|
17877
|
+
currentTime: null,
|
|
17878
|
+
};
|
|
17879
|
+
class FacebookPlayerDirective {
|
|
17880
|
+
constructor() {
|
|
17881
|
+
this.el = injectHostElement();
|
|
17882
|
+
this.scriptLoader = injectStreamScriptLoader();
|
|
17883
|
+
this.platformId = inject(PLATFORM_ID);
|
|
17884
|
+
this.CAPABILITIES = {
|
|
17885
|
+
canPlay: true,
|
|
17886
|
+
canPause: true,
|
|
17887
|
+
canMute: true,
|
|
17888
|
+
canSeek: true,
|
|
17889
|
+
canGetDuration: true,
|
|
17890
|
+
isLiveCapable: false,
|
|
17891
|
+
};
|
|
17892
|
+
this.state = signal({ ...DEFAULT_STATE$6 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
17893
|
+
/** Numeric Facebook video ID from the video URL. */
|
|
17894
|
+
this.videoId = input.required(...(ngDevMode ? [{ debugName: "videoId" }] : []));
|
|
17895
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
17896
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
17897
|
+
this.playerResource = rxResource({
|
|
17898
|
+
params: () => (isPlatformBrowser(this.platformId) ? this.videoId() : null),
|
|
17899
|
+
stream: ({ params: videoId }) => {
|
|
17900
|
+
if (!videoId)
|
|
17901
|
+
return EMPTY;
|
|
17902
|
+
const videoUrl = `https://www.facebook.com/video/${videoId}`;
|
|
17903
|
+
return new Observable((subscriber) => {
|
|
17904
|
+
const win = window;
|
|
17905
|
+
const playerSubscriptions = [];
|
|
17906
|
+
let active = true;
|
|
17907
|
+
let loaderSub = null;
|
|
17908
|
+
let xfbmlReadyHandler = null;
|
|
17909
|
+
const createEmbed = () => {
|
|
17910
|
+
if (!active)
|
|
17911
|
+
return;
|
|
17912
|
+
const containerId = `et-fb-${Math.random().toString(36).slice(2)}`;
|
|
17913
|
+
xfbmlReadyHandler = (rawMsg) => {
|
|
17914
|
+
const msg = rawMsg;
|
|
17915
|
+
if (msg.type !== 'video' || msg.id !== containerId)
|
|
17916
|
+
return;
|
|
17917
|
+
const player = msg.instance;
|
|
17918
|
+
this.state.update((s) => ({ ...s, isReady: true }));
|
|
17919
|
+
subscriber.next(player);
|
|
17920
|
+
playerSubscriptions.push(player.subscribe('startedPlaying', () => {
|
|
17921
|
+
this.state.update((s) => ({ ...s, isPlaying: true, isEnded: false }));
|
|
17922
|
+
}));
|
|
17923
|
+
playerSubscriptions.push(player.subscribe('paused', () => {
|
|
17924
|
+
this.state.update((s) => ({ ...s, isPlaying: false }));
|
|
17925
|
+
}));
|
|
17926
|
+
playerSubscriptions.push(player.subscribe('finishedPlaying', () => {
|
|
17927
|
+
this.state.update((s) => ({ ...s, isPlaying: false, isEnded: true }));
|
|
17928
|
+
}));
|
|
17929
|
+
};
|
|
17930
|
+
win.FB.Event.subscribe('xfbml.ready', xfbmlReadyHandler);
|
|
17931
|
+
const w = this.width();
|
|
17932
|
+
const h = this.height();
|
|
17933
|
+
const container = document.createElement('div');
|
|
17934
|
+
container.id = containerId;
|
|
17935
|
+
container.className = 'fb-video';
|
|
17936
|
+
container.dataset['href'] = videoUrl;
|
|
17937
|
+
container.dataset['width'] = typeof w === 'number' ? String(w) : 'auto';
|
|
17938
|
+
container.dataset['showText'] = 'false';
|
|
17939
|
+
this.el.style.display = 'block';
|
|
17940
|
+
this.el.style.width = typeof w === 'number' ? `${w}px` : w;
|
|
17941
|
+
if (typeof h === 'number')
|
|
17942
|
+
this.el.style.height = `${h}px`;
|
|
17943
|
+
this.el.appendChild(container);
|
|
17944
|
+
win.FB.XFBML.parse(this.el);
|
|
17945
|
+
};
|
|
17946
|
+
if (win.FB) {
|
|
17947
|
+
createEmbed();
|
|
17948
|
+
}
|
|
17949
|
+
else {
|
|
17950
|
+
const prev = win.fbAsyncInit;
|
|
17951
|
+
win.fbAsyncInit = () => {
|
|
17952
|
+
prev?.();
|
|
17953
|
+
createEmbed();
|
|
17954
|
+
};
|
|
17955
|
+
loaderSub = this.scriptLoader.load(FB_SDK_URL).subscribe({
|
|
17956
|
+
error: (e) => subscriber.error(e),
|
|
17957
|
+
});
|
|
17958
|
+
}
|
|
17959
|
+
return () => {
|
|
17960
|
+
active = false;
|
|
17961
|
+
loaderSub?.unsubscribe();
|
|
17962
|
+
if (xfbmlReadyHandler)
|
|
17963
|
+
win.FB?.Event.unsubscribe('xfbml.ready', xfbmlReadyHandler);
|
|
17964
|
+
for (const sub of playerSubscriptions)
|
|
17965
|
+
sub.release();
|
|
17966
|
+
this.el.innerHTML = '';
|
|
17967
|
+
this.state.set({ ...DEFAULT_STATE$6 });
|
|
17968
|
+
};
|
|
17969
|
+
});
|
|
17970
|
+
},
|
|
17971
|
+
});
|
|
17972
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
17973
|
+
}
|
|
17974
|
+
play() {
|
|
17975
|
+
this.playerResource.value()?.play();
|
|
17976
|
+
}
|
|
17977
|
+
pause() {
|
|
17978
|
+
this.playerResource.value()?.pause();
|
|
17979
|
+
}
|
|
17980
|
+
mute() {
|
|
17981
|
+
this.playerResource.value()?.mute();
|
|
17982
|
+
this.state.update((s) => ({ ...s, isMuted: true }));
|
|
17983
|
+
}
|
|
17984
|
+
unmute() {
|
|
17985
|
+
this.playerResource.value()?.unmute();
|
|
17986
|
+
this.state.update((s) => ({ ...s, isMuted: false }));
|
|
17987
|
+
}
|
|
17988
|
+
seek(seconds) {
|
|
17989
|
+
this.playerResource.value()?.seek(seconds);
|
|
17990
|
+
}
|
|
17991
|
+
retry() {
|
|
17992
|
+
this.playerResource.reload();
|
|
17993
|
+
}
|
|
17994
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FacebookPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17995
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: FacebookPlayerDirective, isStandalone: true, inputs: { videoId: { classPropertyName: "videoId", publicName: "videoId", isSignal: true, isRequired: true, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
17996
|
+
{ provide: FACEBOOK_PLAYER_TOKEN, useExisting: FacebookPlayerDirective },
|
|
17997
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: FacebookPlayerDirective },
|
|
17998
|
+
], ngImport: i0 }); }
|
|
17999
|
+
}
|
|
18000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FacebookPlayerDirective, decorators: [{
|
|
18001
|
+
type: Directive,
|
|
18002
|
+
args: [{
|
|
18003
|
+
providers: [
|
|
18004
|
+
{ provide: FACEBOOK_PLAYER_TOKEN, useExisting: FacebookPlayerDirective },
|
|
18005
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: FacebookPlayerDirective },
|
|
18006
|
+
],
|
|
18007
|
+
}]
|
|
18008
|
+
}], propDecorators: { videoId: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoId", required: true }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
18009
|
+
|
|
18010
|
+
class FacebookPlayerComponent {
|
|
18011
|
+
constructor() {
|
|
18012
|
+
this.player = inject(FACEBOOK_PLAYER_TOKEN);
|
|
18013
|
+
this.state = this.player.state;
|
|
18014
|
+
this.error = this.player.error;
|
|
18015
|
+
}
|
|
18016
|
+
retry() {
|
|
18017
|
+
this.player.retry();
|
|
18018
|
+
}
|
|
18019
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FacebookPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18020
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: FacebookPlayerComponent, isStandalone: true, selector: "et-facebook-player", host: { classAttribute: "et-facebook-player" }, hostDirectives: [{ directive: FacebookPlayerDirective, inputs: ["videoId", "videoId", "width", "width", "height", "height"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18021
|
+
}
|
|
18022
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FacebookPlayerComponent, decorators: [{
|
|
18023
|
+
type: Component,
|
|
18024
|
+
args: [{
|
|
18025
|
+
selector: 'et-facebook-player',
|
|
18026
|
+
template: '',
|
|
18027
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18028
|
+
encapsulation: ViewEncapsulation.None,
|
|
18029
|
+
hostDirectives: [
|
|
18030
|
+
{
|
|
18031
|
+
directive: FacebookPlayerDirective,
|
|
18032
|
+
inputs: ['videoId', 'width', 'height'],
|
|
18033
|
+
},
|
|
18034
|
+
],
|
|
18035
|
+
host: {
|
|
18036
|
+
class: 'et-facebook-player',
|
|
18037
|
+
},
|
|
18038
|
+
}]
|
|
18039
|
+
}] });
|
|
18040
|
+
|
|
18041
|
+
const KICK_PLAYER_TOKEN = new InjectionToken('KICK_PLAYER_TOKEN');
|
|
18042
|
+
const DEFAULT_STATE$5 = {
|
|
18043
|
+
isReady: false,
|
|
18044
|
+
isPlaying: false,
|
|
18045
|
+
isMuted: false,
|
|
18046
|
+
isEnded: false,
|
|
18047
|
+
duration: null,
|
|
18048
|
+
currentTime: null,
|
|
18049
|
+
};
|
|
18050
|
+
class KickPlayerDirective {
|
|
18051
|
+
constructor() {
|
|
18052
|
+
this.el = injectHostElement();
|
|
18053
|
+
this.platformId = inject(PLATFORM_ID);
|
|
18054
|
+
this.CAPABILITIES = {
|
|
18055
|
+
canPlay: false,
|
|
18056
|
+
canPause: false,
|
|
18057
|
+
canMute: false,
|
|
18058
|
+
canSeek: false,
|
|
18059
|
+
canGetDuration: false,
|
|
18060
|
+
isLiveCapable: true,
|
|
18061
|
+
};
|
|
18062
|
+
this.state = signal({ ...DEFAULT_STATE$5 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
18063
|
+
this.channel = input.required(...(ngDevMode ? [{ debugName: "channel" }] : []));
|
|
18064
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
18065
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
18066
|
+
this.muted = input(false, { ...(ngDevMode ? { debugName: "muted" } : {}), transform: booleanAttribute });
|
|
18067
|
+
this.playerResource = rxResource({
|
|
18068
|
+
params: () => (isPlatformBrowser(this.platformId) ? this.channel() : null),
|
|
18069
|
+
stream: ({ params: channel }) => {
|
|
18070
|
+
if (!channel)
|
|
18071
|
+
return EMPTY;
|
|
18072
|
+
return new Observable((subscriber) => {
|
|
18073
|
+
const iframe = document.createElement('iframe');
|
|
18074
|
+
const qs = new URLSearchParams({ parent: window.location.hostname });
|
|
18075
|
+
if (this.muted())
|
|
18076
|
+
qs.set('muted', 'true');
|
|
18077
|
+
iframe.src = `https://player.kick.com/${channel}?${qs}`;
|
|
18078
|
+
iframe.width = String(this.width());
|
|
18079
|
+
iframe.height = String(this.height());
|
|
18080
|
+
iframe.style.border = 'none';
|
|
18081
|
+
iframe.scrolling = 'no';
|
|
18082
|
+
iframe.allowFullscreen = true;
|
|
18083
|
+
iframe.allow = 'autoplay; encrypted-media';
|
|
18084
|
+
iframe.addEventListener('load', () => {
|
|
18085
|
+
this.state.set({ ...DEFAULT_STATE$5, isReady: true });
|
|
18086
|
+
subscriber.next();
|
|
18087
|
+
});
|
|
18088
|
+
this.el.appendChild(iframe);
|
|
18089
|
+
return () => {
|
|
18090
|
+
if (this.el.contains(iframe)) {
|
|
18091
|
+
this.el.removeChild(iframe);
|
|
18092
|
+
}
|
|
18093
|
+
this.state.set({ ...DEFAULT_STATE$5 });
|
|
18094
|
+
};
|
|
18095
|
+
});
|
|
18096
|
+
},
|
|
18097
|
+
});
|
|
18098
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
18099
|
+
}
|
|
18100
|
+
// Kick embeds have no programmatic control API — these are intentional no-ops.
|
|
18101
|
+
play() {
|
|
18102
|
+
// no-op
|
|
18103
|
+
}
|
|
18104
|
+
pause() {
|
|
18105
|
+
// no-op
|
|
18106
|
+
}
|
|
18107
|
+
mute() {
|
|
18108
|
+
// no-op
|
|
18109
|
+
}
|
|
18110
|
+
unmute() {
|
|
18111
|
+
// no-op
|
|
18112
|
+
}
|
|
18113
|
+
seek() {
|
|
18114
|
+
// no-op
|
|
18115
|
+
}
|
|
18116
|
+
retry() {
|
|
18117
|
+
this.playerResource.reload();
|
|
18118
|
+
}
|
|
18119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: KickPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18120
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: KickPlayerDirective, isStandalone: true, inputs: { channel: { classPropertyName: "channel", publicName: "channel", isSignal: true, isRequired: true, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, muted: { classPropertyName: "muted", publicName: "muted", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
18121
|
+
{ provide: KICK_PLAYER_TOKEN, useExisting: KickPlayerDirective },
|
|
18122
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: KickPlayerDirective },
|
|
18123
|
+
], ngImport: i0 }); }
|
|
18124
|
+
}
|
|
18125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: KickPlayerDirective, decorators: [{
|
|
18126
|
+
type: Directive,
|
|
18127
|
+
args: [{
|
|
18128
|
+
providers: [
|
|
18129
|
+
{ provide: KICK_PLAYER_TOKEN, useExisting: KickPlayerDirective },
|
|
18130
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: KickPlayerDirective },
|
|
18131
|
+
],
|
|
18132
|
+
}]
|
|
18133
|
+
}], propDecorators: { channel: [{ type: i0.Input, args: [{ isSignal: true, alias: "channel", required: true }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], muted: [{ type: i0.Input, args: [{ isSignal: true, alias: "muted", required: false }] }] } });
|
|
18134
|
+
|
|
18135
|
+
class KickPlayerComponent {
|
|
18136
|
+
constructor() {
|
|
18137
|
+
this.player = inject(KICK_PLAYER_TOKEN);
|
|
18138
|
+
this.state = this.player.state;
|
|
18139
|
+
this.error = this.player.error;
|
|
18140
|
+
}
|
|
18141
|
+
retry() {
|
|
18142
|
+
this.player.retry();
|
|
18143
|
+
}
|
|
18144
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: KickPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18145
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: KickPlayerComponent, isStandalone: true, selector: "et-kick-player", host: { classAttribute: "et-kick-player" }, hostDirectives: [{ directive: KickPlayerDirective, inputs: ["channel", "channel", "width", "width", "height", "height", "muted", "muted"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18146
|
+
}
|
|
18147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: KickPlayerComponent, decorators: [{
|
|
18148
|
+
type: Component,
|
|
18149
|
+
args: [{
|
|
18150
|
+
selector: 'et-kick-player',
|
|
18151
|
+
template: '',
|
|
18152
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18153
|
+
encapsulation: ViewEncapsulation.None,
|
|
18154
|
+
hostDirectives: [
|
|
18155
|
+
{
|
|
18156
|
+
directive: KickPlayerDirective,
|
|
18157
|
+
inputs: ['channel', 'width', 'height', 'muted'],
|
|
18158
|
+
},
|
|
18159
|
+
],
|
|
18160
|
+
host: {
|
|
18161
|
+
class: 'et-kick-player',
|
|
18162
|
+
},
|
|
18163
|
+
}]
|
|
18164
|
+
}] });
|
|
18165
|
+
|
|
18166
|
+
const SOOP_PLAYER_TOKEN = new InjectionToken('SOOP_PLAYER_TOKEN');
|
|
18167
|
+
const DEFAULT_STATE$4 = {
|
|
18168
|
+
isReady: false,
|
|
18169
|
+
isPlaying: false,
|
|
18170
|
+
isMuted: false,
|
|
18171
|
+
isEnded: false,
|
|
18172
|
+
duration: null,
|
|
18173
|
+
currentTime: null,
|
|
18174
|
+
};
|
|
18175
|
+
class SoopPlayerDirective {
|
|
18176
|
+
constructor() {
|
|
18177
|
+
this.el = injectHostElement();
|
|
18178
|
+
this.platformId = inject(PLATFORM_ID);
|
|
18179
|
+
this.CAPABILITIES = {
|
|
18180
|
+
canPlay: false,
|
|
18181
|
+
canPause: false,
|
|
18182
|
+
canMute: false,
|
|
18183
|
+
canSeek: false,
|
|
18184
|
+
canGetDuration: false,
|
|
18185
|
+
isLiveCapable: true,
|
|
18186
|
+
};
|
|
18187
|
+
this.state = signal({ ...DEFAULT_STATE$4 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
18188
|
+
/** Streamer user ID — used for live streams (play.afreecatv.com/{userId}/embed). */
|
|
18189
|
+
this.userId = input(null, ...(ngDevMode ? [{ debugName: "userId" }] : []));
|
|
18190
|
+
/** VOD number — used for recorded broadcasts (vod.afreecatv.com/player/{videoId}). */
|
|
18191
|
+
this.videoId = input(null, ...(ngDevMode ? [{ debugName: "videoId" }] : []));
|
|
18192
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
18193
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
18194
|
+
this.playerResource = rxResource({
|
|
18195
|
+
params: () => {
|
|
18196
|
+
if (!isPlatformBrowser(this.platformId))
|
|
18197
|
+
return null;
|
|
18198
|
+
const userId = this.userId();
|
|
18199
|
+
const videoId = this.videoId();
|
|
18200
|
+
if (!userId && !videoId)
|
|
18201
|
+
return null;
|
|
18202
|
+
return { userId, videoId };
|
|
18203
|
+
},
|
|
18204
|
+
stream: ({ params }) => {
|
|
18205
|
+
if (!params)
|
|
18206
|
+
return EMPTY;
|
|
18207
|
+
return new Observable((subscriber) => {
|
|
18208
|
+
const iframe = document.createElement('iframe');
|
|
18209
|
+
const w = this.width();
|
|
18210
|
+
const h = this.height();
|
|
18211
|
+
if (params.userId) {
|
|
18212
|
+
iframe.src = `https://play.afreecatv.com/${params.userId}/embed`;
|
|
18213
|
+
}
|
|
18214
|
+
else {
|
|
18215
|
+
iframe.src = `https://vod.afreecatv.com/player/${params.videoId}`;
|
|
18216
|
+
}
|
|
18217
|
+
iframe.width = typeof w === 'number' ? String(w) : w;
|
|
18218
|
+
iframe.height = typeof h === 'number' ? String(h) : h;
|
|
18219
|
+
iframe.style.border = 'none';
|
|
18220
|
+
iframe.scrolling = 'no';
|
|
18221
|
+
iframe.allowFullscreen = true;
|
|
18222
|
+
iframe.allow = 'autoplay; encrypted-media';
|
|
18223
|
+
iframe.addEventListener('load', () => {
|
|
18224
|
+
this.state.set({ ...DEFAULT_STATE$4, isReady: true });
|
|
18225
|
+
subscriber.next();
|
|
18226
|
+
});
|
|
18227
|
+
this.el.appendChild(iframe);
|
|
18228
|
+
return () => {
|
|
18229
|
+
if (this.el.contains(iframe)) {
|
|
18230
|
+
this.el.removeChild(iframe);
|
|
18231
|
+
}
|
|
18232
|
+
this.state.set({ ...DEFAULT_STATE$4 });
|
|
18233
|
+
};
|
|
18234
|
+
});
|
|
18235
|
+
},
|
|
18236
|
+
});
|
|
18237
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
18238
|
+
}
|
|
18239
|
+
// SOOP embeds have no programmatic control API — these are intentional no-ops.
|
|
18240
|
+
play() {
|
|
18241
|
+
// no-op
|
|
18242
|
+
}
|
|
18243
|
+
pause() {
|
|
18244
|
+
// no-op
|
|
18245
|
+
}
|
|
18246
|
+
mute() {
|
|
18247
|
+
// no-op
|
|
18248
|
+
}
|
|
18249
|
+
unmute() {
|
|
18250
|
+
// no-op
|
|
18251
|
+
}
|
|
18252
|
+
seek() {
|
|
18253
|
+
// no-op
|
|
18254
|
+
}
|
|
18255
|
+
retry() {
|
|
18256
|
+
this.playerResource.reload();
|
|
18257
|
+
}
|
|
18258
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SoopPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18259
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: SoopPlayerDirective, isStandalone: true, inputs: { userId: { classPropertyName: "userId", publicName: "userId", isSignal: true, isRequired: false, transformFunction: null }, videoId: { classPropertyName: "videoId", publicName: "videoId", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
18260
|
+
{ provide: SOOP_PLAYER_TOKEN, useExisting: SoopPlayerDirective },
|
|
18261
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: SoopPlayerDirective },
|
|
18262
|
+
], ngImport: i0 }); }
|
|
18263
|
+
}
|
|
18264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SoopPlayerDirective, decorators: [{
|
|
18265
|
+
type: Directive,
|
|
18266
|
+
args: [{
|
|
18267
|
+
providers: [
|
|
18268
|
+
{ provide: SOOP_PLAYER_TOKEN, useExisting: SoopPlayerDirective },
|
|
18269
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: SoopPlayerDirective },
|
|
18270
|
+
],
|
|
18271
|
+
}]
|
|
18272
|
+
}], propDecorators: { userId: [{ type: i0.Input, args: [{ isSignal: true, alias: "userId", required: false }] }], videoId: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoId", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
18273
|
+
|
|
18274
|
+
class SoopPlayerComponent {
|
|
18275
|
+
constructor() {
|
|
18276
|
+
this.player = inject(SOOP_PLAYER_TOKEN);
|
|
18277
|
+
this.state = this.player.state;
|
|
18278
|
+
this.error = this.player.error;
|
|
18279
|
+
}
|
|
18280
|
+
retry() {
|
|
18281
|
+
this.player.retry();
|
|
18282
|
+
}
|
|
18283
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SoopPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18284
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: SoopPlayerComponent, isStandalone: true, selector: "et-soop-player", host: { classAttribute: "et-soop-player" }, hostDirectives: [{ directive: SoopPlayerDirective, inputs: ["userId", "userId", "videoId", "videoId", "width", "width", "height", "height"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18285
|
+
}
|
|
18286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: SoopPlayerComponent, decorators: [{
|
|
18287
|
+
type: Component,
|
|
18288
|
+
args: [{
|
|
18289
|
+
selector: 'et-soop-player',
|
|
18290
|
+
template: '',
|
|
18291
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18292
|
+
encapsulation: ViewEncapsulation.None,
|
|
18293
|
+
hostDirectives: [
|
|
18294
|
+
{
|
|
18295
|
+
directive: SoopPlayerDirective,
|
|
18296
|
+
inputs: ['userId', 'videoId', 'width', 'height'],
|
|
18297
|
+
},
|
|
18298
|
+
],
|
|
18299
|
+
host: {
|
|
18300
|
+
class: 'et-soop-player',
|
|
18301
|
+
},
|
|
18302
|
+
}]
|
|
18303
|
+
}] });
|
|
18304
|
+
|
|
18305
|
+
const TIKTOK_PLAYER_TOKEN = new InjectionToken('TIKTOK_PLAYER_TOKEN');
|
|
18306
|
+
const DEFAULT_STATE$3 = {
|
|
18307
|
+
isReady: false,
|
|
18308
|
+
isPlaying: false,
|
|
18309
|
+
isMuted: false,
|
|
18310
|
+
isEnded: false,
|
|
18311
|
+
duration: null,
|
|
18312
|
+
currentTime: null,
|
|
18313
|
+
};
|
|
18314
|
+
class TikTokPlayerDirective {
|
|
18315
|
+
constructor() {
|
|
18316
|
+
this.el = injectHostElement();
|
|
18317
|
+
this.platformId = inject(PLATFORM_ID);
|
|
18318
|
+
this.CAPABILITIES = {
|
|
18319
|
+
canPlay: false,
|
|
18320
|
+
canPause: false,
|
|
18321
|
+
canMute: false,
|
|
18322
|
+
canSeek: false,
|
|
18323
|
+
canGetDuration: false,
|
|
18324
|
+
isLiveCapable: false,
|
|
18325
|
+
};
|
|
18326
|
+
this.state = signal({ ...DEFAULT_STATE$3 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
18327
|
+
/** Numeric TikTok video ID from the post URL. */
|
|
18328
|
+
this.videoId = input.required(...(ngDevMode ? [{ debugName: "videoId" }] : []));
|
|
18329
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
18330
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
18331
|
+
this.playerResource = rxResource({
|
|
18332
|
+
params: () => (isPlatformBrowser(this.platformId) ? this.videoId() : null),
|
|
18333
|
+
stream: ({ params: videoId }) => {
|
|
18334
|
+
if (!videoId)
|
|
18335
|
+
return EMPTY;
|
|
18336
|
+
return new Observable((subscriber) => {
|
|
18337
|
+
const iframe = document.createElement('iframe');
|
|
18338
|
+
const w = this.width();
|
|
18339
|
+
const h = this.height();
|
|
18340
|
+
iframe.src = `https://www.tiktok.com/embed/v2/${videoId}`;
|
|
18341
|
+
iframe.width = typeof w === 'number' ? String(w) : w;
|
|
18342
|
+
iframe.height = typeof h === 'number' ? String(h) : h;
|
|
18343
|
+
iframe.style.border = 'none';
|
|
18344
|
+
iframe.scrolling = 'no';
|
|
18345
|
+
iframe.allowFullscreen = true;
|
|
18346
|
+
iframe.allow = 'autoplay; encrypted-media';
|
|
18347
|
+
iframe.addEventListener('load', () => {
|
|
18348
|
+
this.state.set({ ...DEFAULT_STATE$3, isReady: true });
|
|
18349
|
+
subscriber.next();
|
|
18350
|
+
});
|
|
18351
|
+
this.el.appendChild(iframe);
|
|
18352
|
+
return () => {
|
|
18353
|
+
if (this.el.contains(iframe)) {
|
|
18354
|
+
this.el.removeChild(iframe);
|
|
18355
|
+
}
|
|
18356
|
+
this.state.set({ ...DEFAULT_STATE$3 });
|
|
18357
|
+
};
|
|
18358
|
+
});
|
|
18359
|
+
},
|
|
18360
|
+
});
|
|
18361
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
18362
|
+
}
|
|
18363
|
+
// TikTok embeds have no programmatic control API — these are intentional no-ops.
|
|
18364
|
+
play() {
|
|
18365
|
+
// no-op
|
|
18366
|
+
}
|
|
18367
|
+
pause() {
|
|
18368
|
+
// no-op
|
|
18369
|
+
}
|
|
18370
|
+
mute() {
|
|
18371
|
+
// no-op
|
|
18372
|
+
}
|
|
18373
|
+
unmute() {
|
|
18374
|
+
// no-op
|
|
18375
|
+
}
|
|
18376
|
+
seek() {
|
|
18377
|
+
// no-op
|
|
18378
|
+
}
|
|
18379
|
+
retry() {
|
|
18380
|
+
this.playerResource.reload();
|
|
18381
|
+
}
|
|
18382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TikTokPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18383
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: TikTokPlayerDirective, isStandalone: true, inputs: { videoId: { classPropertyName: "videoId", publicName: "videoId", isSignal: true, isRequired: true, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
18384
|
+
{ provide: TIKTOK_PLAYER_TOKEN, useExisting: TikTokPlayerDirective },
|
|
18385
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: TikTokPlayerDirective },
|
|
18386
|
+
], ngImport: i0 }); }
|
|
18387
|
+
}
|
|
18388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TikTokPlayerDirective, decorators: [{
|
|
18389
|
+
type: Directive,
|
|
18390
|
+
args: [{
|
|
18391
|
+
providers: [
|
|
18392
|
+
{ provide: TIKTOK_PLAYER_TOKEN, useExisting: TikTokPlayerDirective },
|
|
18393
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: TikTokPlayerDirective },
|
|
18394
|
+
],
|
|
18395
|
+
}]
|
|
18396
|
+
}], propDecorators: { videoId: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoId", required: true }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
18397
|
+
|
|
18398
|
+
class TikTokPlayerComponent {
|
|
18399
|
+
constructor() {
|
|
18400
|
+
this.player = inject(TIKTOK_PLAYER_TOKEN);
|
|
18401
|
+
this.state = this.player.state;
|
|
18402
|
+
this.error = this.player.error;
|
|
18403
|
+
}
|
|
18404
|
+
retry() {
|
|
18405
|
+
this.player.retry();
|
|
18406
|
+
}
|
|
18407
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TikTokPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18408
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: TikTokPlayerComponent, isStandalone: true, selector: "et-tiktok-player", host: { classAttribute: "et-tiktok-player" }, hostDirectives: [{ directive: TikTokPlayerDirective, inputs: ["videoId", "videoId", "width", "width", "height", "height"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18409
|
+
}
|
|
18410
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TikTokPlayerComponent, decorators: [{
|
|
18411
|
+
type: Component,
|
|
18412
|
+
args: [{
|
|
18413
|
+
selector: 'et-tiktok-player',
|
|
18414
|
+
template: '',
|
|
18415
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18416
|
+
encapsulation: ViewEncapsulation.None,
|
|
18417
|
+
hostDirectives: [
|
|
18418
|
+
{
|
|
18419
|
+
directive: TikTokPlayerDirective,
|
|
18420
|
+
inputs: ['videoId', 'width', 'height'],
|
|
18421
|
+
},
|
|
18422
|
+
],
|
|
18423
|
+
host: {
|
|
18424
|
+
class: 'et-tiktok-player',
|
|
18425
|
+
},
|
|
18426
|
+
}]
|
|
18427
|
+
}] });
|
|
18428
|
+
|
|
18429
|
+
const TWITCH_EMBED_URL = 'https://embed.twitch.tv/embed/v1.js';
|
|
18430
|
+
const TWITCH_PLAYER_TOKEN = new InjectionToken('TWITCH_PLAYER_TOKEN');
|
|
18431
|
+
const DEFAULT_STATE$2 = {
|
|
18432
|
+
isReady: false,
|
|
18433
|
+
isPlaying: false,
|
|
18434
|
+
isMuted: false,
|
|
18435
|
+
isEnded: false,
|
|
18436
|
+
duration: null,
|
|
18437
|
+
currentTime: null,
|
|
18438
|
+
};
|
|
18439
|
+
class TwitchPlayerDirective {
|
|
18440
|
+
constructor() {
|
|
18441
|
+
this.el = injectHostElement();
|
|
18442
|
+
this.scriptLoader = injectStreamScriptLoader();
|
|
18443
|
+
this.platformId = inject(PLATFORM_ID);
|
|
18444
|
+
this.CAPABILITIES = {
|
|
18445
|
+
canPlay: true,
|
|
18446
|
+
canPause: true,
|
|
18447
|
+
canMute: true,
|
|
18448
|
+
canSeek: true,
|
|
18449
|
+
canGetDuration: true,
|
|
18450
|
+
isLiveCapable: true,
|
|
18451
|
+
};
|
|
18452
|
+
this.state = signal({ ...DEFAULT_STATE$2 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
18453
|
+
/** Live channel name. Use either `channel` (live) or `video` (VOD), not both. */
|
|
18454
|
+
this.channel = input(null, ...(ngDevMode ? [{ debugName: "channel" }] : []));
|
|
18455
|
+
/** VOD video ID. Use either `channel` (live) or `video` (VOD), not both. */
|
|
18456
|
+
this.video = input(null, ...(ngDevMode ? [{ debugName: "video" }] : []));
|
|
18457
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
18458
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
18459
|
+
this.autoplay = input(false, { ...(ngDevMode ? { debugName: "autoplay" } : {}), transform: booleanAttribute });
|
|
18460
|
+
this.startTime = input(0, { ...(ngDevMode ? { debugName: "startTime" } : {}), transform: numberAttribute });
|
|
18461
|
+
this.playerResource = rxResource({
|
|
18462
|
+
params: () => {
|
|
18463
|
+
if (!isPlatformBrowser(this.platformId))
|
|
18464
|
+
return null;
|
|
18465
|
+
const channel = this.channel();
|
|
18466
|
+
const video = this.video();
|
|
18467
|
+
if (!channel && !video) {
|
|
18468
|
+
if (isDevMode())
|
|
18469
|
+
console.warn('[et-twitch-player] Either `channel` or `video` input is required.');
|
|
18470
|
+
return null;
|
|
18471
|
+
}
|
|
18472
|
+
return { channel, video };
|
|
18473
|
+
},
|
|
18474
|
+
stream: ({ params }) => {
|
|
18475
|
+
if (!params)
|
|
18476
|
+
return EMPTY;
|
|
18477
|
+
return this.scriptLoader.load(TWITCH_EMBED_URL).pipe(switchMap(() => new Observable((subscriber) => {
|
|
18478
|
+
const win = window;
|
|
18479
|
+
const TwitchEmbed = win.Twitch?.Embed;
|
|
18480
|
+
if (!TwitchEmbed) {
|
|
18481
|
+
if (isDevMode())
|
|
18482
|
+
console.error('[et-twitch-player] Twitch Embed SDK not available after script load.');
|
|
18483
|
+
subscriber.error(new Error('Twitch Embed SDK not available'));
|
|
18484
|
+
return;
|
|
18485
|
+
}
|
|
18486
|
+
let active = true;
|
|
18487
|
+
const startSeconds = this.startTime();
|
|
18488
|
+
const embed = new TwitchEmbed(this.el, {
|
|
18489
|
+
width: this.width(),
|
|
18490
|
+
height: this.height(),
|
|
18491
|
+
parent: [window.location.hostname],
|
|
18492
|
+
autoplay: this.autoplay(),
|
|
18493
|
+
...(params.channel ? { channel: params.channel } : {}),
|
|
18494
|
+
...(params.video ? { video: params.video } : {}),
|
|
18495
|
+
...(startSeconds ? { time: secondsToTimestamp(startSeconds) } : {}),
|
|
18496
|
+
});
|
|
18497
|
+
embed.addEventListener(TwitchEmbed.READY, () => {
|
|
18498
|
+
if (!active)
|
|
18499
|
+
return;
|
|
18500
|
+
const player = embed.getPlayer();
|
|
18501
|
+
this.state.set({ ...DEFAULT_STATE$2, isReady: true });
|
|
18502
|
+
subscriber.next(player);
|
|
18503
|
+
});
|
|
18504
|
+
embed.addEventListener(TwitchEmbed.PLAY, () => {
|
|
18505
|
+
if (!active)
|
|
18506
|
+
return;
|
|
18507
|
+
const player = embed.getPlayer();
|
|
18508
|
+
this.state.update((s) => ({
|
|
18509
|
+
...s,
|
|
18510
|
+
isPlaying: true,
|
|
18511
|
+
isEnded: false,
|
|
18512
|
+
duration: player.getDuration(),
|
|
18513
|
+
currentTime: player.getCurrentTime(),
|
|
18514
|
+
}));
|
|
18515
|
+
});
|
|
18516
|
+
embed.addEventListener(TwitchEmbed.PAUSE, () => {
|
|
18517
|
+
if (!active)
|
|
18518
|
+
return;
|
|
18519
|
+
this.state.update((s) => ({ ...s, isPlaying: false }));
|
|
18520
|
+
});
|
|
18521
|
+
embed.addEventListener(TwitchEmbed.ENDED, () => {
|
|
18522
|
+
if (!active)
|
|
18523
|
+
return;
|
|
18524
|
+
this.state.update((s) => ({ ...s, isPlaying: false, isEnded: true }));
|
|
18525
|
+
});
|
|
18526
|
+
return () => {
|
|
18527
|
+
active = false;
|
|
18528
|
+
this.el.innerHTML = '';
|
|
18529
|
+
this.state.set({ ...DEFAULT_STATE$2 });
|
|
18530
|
+
};
|
|
18531
|
+
})));
|
|
18532
|
+
},
|
|
18533
|
+
});
|
|
18534
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
18535
|
+
}
|
|
18536
|
+
play() {
|
|
18537
|
+
this.playerResource.value()?.play();
|
|
18538
|
+
}
|
|
18539
|
+
pause() {
|
|
18540
|
+
this.playerResource.value()?.pause();
|
|
18541
|
+
}
|
|
18542
|
+
mute() {
|
|
18543
|
+
this.playerResource.value()?.setMuted(true);
|
|
18544
|
+
this.state.update((s) => ({ ...s, isMuted: true }));
|
|
18545
|
+
}
|
|
18546
|
+
unmute() {
|
|
18547
|
+
this.playerResource.value()?.setMuted(false);
|
|
18548
|
+
this.state.update((s) => ({ ...s, isMuted: false }));
|
|
18549
|
+
}
|
|
18550
|
+
seek(seconds) {
|
|
18551
|
+
this.playerResource.value()?.seek(seconds);
|
|
18552
|
+
}
|
|
18553
|
+
retry() {
|
|
18554
|
+
this.playerResource.reload();
|
|
18555
|
+
}
|
|
18556
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TwitchPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18557
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: TwitchPlayerDirective, isStandalone: true, inputs: { channel: { classPropertyName: "channel", publicName: "channel", isSignal: true, isRequired: false, transformFunction: null }, video: { classPropertyName: "video", publicName: "video", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
18558
|
+
{ provide: TWITCH_PLAYER_TOKEN, useExisting: TwitchPlayerDirective },
|
|
18559
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: TwitchPlayerDirective },
|
|
18560
|
+
], ngImport: i0 }); }
|
|
18561
|
+
}
|
|
18562
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TwitchPlayerDirective, decorators: [{
|
|
18563
|
+
type: Directive,
|
|
18564
|
+
args: [{
|
|
18565
|
+
providers: [
|
|
18566
|
+
{ provide: TWITCH_PLAYER_TOKEN, useExisting: TwitchPlayerDirective },
|
|
18567
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: TwitchPlayerDirective },
|
|
18568
|
+
],
|
|
18569
|
+
}]
|
|
18570
|
+
}], propDecorators: { channel: [{ type: i0.Input, args: [{ isSignal: true, alias: "channel", required: false }] }], video: [{ type: i0.Input, args: [{ isSignal: true, alias: "video", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], startTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "startTime", required: false }] }] } });
|
|
18571
|
+
const secondsToTimestamp = (seconds) => {
|
|
18572
|
+
const h = Math.floor(seconds / 3600);
|
|
18573
|
+
const m = Math.floor((seconds % 3600) / 60);
|
|
18574
|
+
const s = Math.floor(seconds % 60);
|
|
18575
|
+
return `${h}h${m}m${s}s`;
|
|
18576
|
+
};
|
|
18577
|
+
|
|
18578
|
+
class TwitchPlayerComponent {
|
|
18579
|
+
constructor() {
|
|
18580
|
+
this.player = inject(TWITCH_PLAYER_TOKEN);
|
|
18581
|
+
this.state = this.player.state;
|
|
18582
|
+
this.error = this.player.error;
|
|
18583
|
+
}
|
|
18584
|
+
retry() {
|
|
18585
|
+
this.player.retry();
|
|
18586
|
+
}
|
|
18587
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TwitchPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18588
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: TwitchPlayerComponent, isStandalone: true, selector: "et-twitch-player", host: { classAttribute: "et-twitch-player" }, hostDirectives: [{ directive: TwitchPlayerDirective, inputs: ["channel", "channel", "video", "video", "width", "width", "height", "height", "autoplay", "autoplay", "startTime", "startTime"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18589
|
+
}
|
|
18590
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TwitchPlayerComponent, decorators: [{
|
|
18591
|
+
type: Component,
|
|
18592
|
+
args: [{
|
|
18593
|
+
selector: 'et-twitch-player',
|
|
18594
|
+
template: '',
|
|
18595
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18596
|
+
encapsulation: ViewEncapsulation.None,
|
|
18597
|
+
hostDirectives: [
|
|
18598
|
+
{
|
|
18599
|
+
directive: TwitchPlayerDirective,
|
|
18600
|
+
inputs: ['channel', 'video', 'width', 'height', 'autoplay', 'startTime'],
|
|
18601
|
+
},
|
|
18602
|
+
],
|
|
18603
|
+
host: {
|
|
18604
|
+
class: 'et-twitch-player',
|
|
18605
|
+
},
|
|
18606
|
+
}]
|
|
18607
|
+
}] });
|
|
18608
|
+
|
|
18609
|
+
const VIMEO_SDK_URL = 'https://player.vimeo.com/api/player.js';
|
|
18610
|
+
const VIMEO_PLAYER_TOKEN = new InjectionToken('VIMEO_PLAYER_TOKEN');
|
|
18611
|
+
const DEFAULT_STATE$1 = {
|
|
18612
|
+
isReady: false,
|
|
18613
|
+
isPlaying: false,
|
|
18614
|
+
isMuted: false,
|
|
18615
|
+
isEnded: false,
|
|
18616
|
+
duration: null,
|
|
18617
|
+
currentTime: null,
|
|
18618
|
+
};
|
|
18619
|
+
class VimeoPlayerDirective {
|
|
18620
|
+
constructor() {
|
|
18621
|
+
this.el = injectHostElement();
|
|
18622
|
+
this.scriptLoader = injectStreamScriptLoader();
|
|
18623
|
+
this.platformId = inject(PLATFORM_ID);
|
|
18624
|
+
this.CAPABILITIES = {
|
|
18625
|
+
canPlay: true,
|
|
18626
|
+
canPause: true,
|
|
18627
|
+
canMute: true,
|
|
18628
|
+
canSeek: true,
|
|
18629
|
+
canGetDuration: true,
|
|
18630
|
+
isLiveCapable: true,
|
|
18631
|
+
};
|
|
18632
|
+
this.state = signal({ ...DEFAULT_STATE$1 }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
18633
|
+
this.videoId = input.required(...(ngDevMode ? [{ debugName: "videoId" }] : []));
|
|
18634
|
+
this.startTime = input(0, { ...(ngDevMode ? { debugName: "startTime" } : {}), transform: numberAttribute });
|
|
18635
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
18636
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
18637
|
+
this.playerResource = rxResource({
|
|
18638
|
+
params: () => (isPlatformBrowser(this.platformId) ? this.videoId() : null),
|
|
18639
|
+
stream: ({ params: videoId }) => {
|
|
18640
|
+
if (!videoId)
|
|
18641
|
+
return EMPTY;
|
|
18642
|
+
return this.scriptLoader.load(VIMEO_SDK_URL).pipe(switchMap(() => new Observable((subscriber) => {
|
|
18643
|
+
const win = window;
|
|
18644
|
+
const startTime = this.startTime();
|
|
18645
|
+
let active = true;
|
|
18646
|
+
// Vimeo width/height options only accept numbers (pixels).
|
|
18647
|
+
// Apply %/px sizing to the host element and let the iframe fill it.
|
|
18648
|
+
const w = this.width();
|
|
18649
|
+
const h = this.height();
|
|
18650
|
+
this.el.style.display = 'block';
|
|
18651
|
+
this.el.style.width = typeof w === 'number' ? `${w}px` : w;
|
|
18652
|
+
this.el.style.height = typeof h === 'number' ? `${h}px` : h;
|
|
18653
|
+
// responsive: true makes the iframe fill 100% of the host element.
|
|
18654
|
+
// Dimensions are applied to the host element via CSS above.
|
|
18655
|
+
const player = new win.Vimeo.Player(this.el, { id: videoId, responsive: true });
|
|
18656
|
+
const onPlay = (data) => {
|
|
18657
|
+
const e = data;
|
|
18658
|
+
this.state.update((s) => ({
|
|
18659
|
+
...s,
|
|
18660
|
+
isPlaying: true,
|
|
18661
|
+
isEnded: false,
|
|
18662
|
+
duration: e.duration,
|
|
18663
|
+
currentTime: e.seconds,
|
|
18664
|
+
}));
|
|
18665
|
+
};
|
|
18666
|
+
const onPause = (data) => {
|
|
18667
|
+
const e = data;
|
|
18668
|
+
this.state.update((s) => ({ ...s, isPlaying: false, currentTime: e.seconds }));
|
|
18669
|
+
};
|
|
18670
|
+
const onEnded = (data) => {
|
|
18671
|
+
const e = data;
|
|
18672
|
+
this.state.update((s) => ({ ...s, isPlaying: false, isEnded: true, currentTime: e.seconds }));
|
|
18673
|
+
};
|
|
18674
|
+
const onTimeUpdate = (data) => {
|
|
18675
|
+
const e = data;
|
|
18676
|
+
this.state.update((s) => ({ ...s, duration: e.duration, currentTime: e.seconds }));
|
|
18677
|
+
};
|
|
18678
|
+
player.on('play', onPlay);
|
|
18679
|
+
player.on('pause', onPause);
|
|
18680
|
+
player.on('ended', onEnded);
|
|
18681
|
+
player.on('timeupdate', onTimeUpdate);
|
|
18682
|
+
player
|
|
18683
|
+
.ready()
|
|
18684
|
+
.then(() => player.getMuted())
|
|
18685
|
+
.then((isMuted) => {
|
|
18686
|
+
if (!active)
|
|
18687
|
+
return;
|
|
18688
|
+
this.state.set({ ...DEFAULT_STATE$1, isReady: true, isMuted });
|
|
18689
|
+
if (startTime > 0)
|
|
18690
|
+
player.setCurrentTime(startTime);
|
|
18691
|
+
subscriber.next(player);
|
|
18692
|
+
});
|
|
18693
|
+
return () => {
|
|
18694
|
+
active = false;
|
|
18695
|
+
player.off('play', onPlay);
|
|
18696
|
+
player.off('pause', onPause);
|
|
18697
|
+
player.off('ended', onEnded);
|
|
18698
|
+
player.off('timeupdate', onTimeUpdate);
|
|
18699
|
+
player.destroy();
|
|
18700
|
+
this.state.set({ ...DEFAULT_STATE$1 });
|
|
18701
|
+
};
|
|
18702
|
+
})));
|
|
18703
|
+
},
|
|
18704
|
+
});
|
|
18705
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
18706
|
+
}
|
|
18707
|
+
play() {
|
|
18708
|
+
this.playerResource.value()?.play();
|
|
18709
|
+
}
|
|
18710
|
+
pause() {
|
|
18711
|
+
this.playerResource.value()?.pause();
|
|
18712
|
+
}
|
|
18713
|
+
mute() {
|
|
18714
|
+
this.playerResource
|
|
18715
|
+
.value()
|
|
18716
|
+
?.setMuted(true)
|
|
18717
|
+
.then(() => this.state.update((s) => ({ ...s, isMuted: true })));
|
|
18718
|
+
}
|
|
18719
|
+
unmute() {
|
|
18720
|
+
this.playerResource
|
|
18721
|
+
.value()
|
|
18722
|
+
?.setMuted(false)
|
|
18723
|
+
.then(() => this.state.update((s) => ({ ...s, isMuted: false })));
|
|
18724
|
+
}
|
|
18725
|
+
seek(seconds) {
|
|
18726
|
+
this.playerResource.value()?.setCurrentTime(seconds);
|
|
18727
|
+
}
|
|
18728
|
+
retry() {
|
|
18729
|
+
this.playerResource.reload();
|
|
18730
|
+
}
|
|
18731
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: VimeoPlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18732
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: VimeoPlayerDirective, isStandalone: true, inputs: { videoId: { classPropertyName: "videoId", publicName: "videoId", isSignal: true, isRequired: true, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
18733
|
+
{ provide: VIMEO_PLAYER_TOKEN, useExisting: VimeoPlayerDirective },
|
|
18734
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: VimeoPlayerDirective },
|
|
18735
|
+
], ngImport: i0 }); }
|
|
18736
|
+
}
|
|
18737
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: VimeoPlayerDirective, decorators: [{
|
|
18738
|
+
type: Directive,
|
|
18739
|
+
args: [{
|
|
18740
|
+
providers: [
|
|
18741
|
+
{ provide: VIMEO_PLAYER_TOKEN, useExisting: VimeoPlayerDirective },
|
|
18742
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: VimeoPlayerDirective },
|
|
18743
|
+
],
|
|
18744
|
+
}]
|
|
18745
|
+
}], propDecorators: { videoId: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoId", required: true }] }], startTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "startTime", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
18746
|
+
|
|
18747
|
+
class VimeoPlayerComponent {
|
|
18748
|
+
constructor() {
|
|
18749
|
+
this.player = inject(VIMEO_PLAYER_TOKEN);
|
|
18750
|
+
this.state = this.player.state;
|
|
18751
|
+
this.error = this.player.error;
|
|
18752
|
+
}
|
|
18753
|
+
retry() {
|
|
18754
|
+
this.player.retry();
|
|
18755
|
+
}
|
|
18756
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: VimeoPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18757
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: VimeoPlayerComponent, isStandalone: true, selector: "et-vimeo-player", host: { classAttribute: "et-vimeo-player" }, hostDirectives: [{ directive: VimeoPlayerDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
18758
|
+
}
|
|
18759
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: VimeoPlayerComponent, decorators: [{
|
|
18760
|
+
type: Component,
|
|
18761
|
+
args: [{
|
|
18762
|
+
selector: 'et-vimeo-player',
|
|
18763
|
+
template: '',
|
|
18764
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18765
|
+
encapsulation: ViewEncapsulation.None,
|
|
18766
|
+
hostDirectives: [
|
|
18767
|
+
{
|
|
18768
|
+
directive: VimeoPlayerDirective,
|
|
18769
|
+
inputs: ['videoId', 'startTime', 'width', 'height'],
|
|
18770
|
+
},
|
|
18771
|
+
],
|
|
18772
|
+
host: {
|
|
18773
|
+
class: 'et-vimeo-player',
|
|
18774
|
+
},
|
|
18775
|
+
}]
|
|
18776
|
+
}] });
|
|
18777
|
+
|
|
18778
|
+
class YoutubePlayerParamsDirective {
|
|
18779
|
+
constructor() {
|
|
18780
|
+
this.videoId = input.required(...(ngDevMode ? [{ debugName: "videoId" }] : []));
|
|
18781
|
+
this.startTime = input(0, { ...(ngDevMode ? { debugName: "startTime" } : {}), transform: numberAttribute });
|
|
18782
|
+
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
18783
|
+
this.height = input('100%', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
18784
|
+
}
|
|
18785
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerParamsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18786
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: YoutubePlayerParamsDirective, isStandalone: true, inputs: { videoId: { classPropertyName: "videoId", publicName: "videoId", isSignal: true, isRequired: true, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
18787
|
+
}
|
|
18788
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerParamsDirective, decorators: [{
|
|
18789
|
+
type: Directive,
|
|
18790
|
+
args: [{}]
|
|
18791
|
+
}], propDecorators: { videoId: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoId", required: true }] }], startTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "startTime", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
18792
|
+
|
|
18793
|
+
const pipMoveBefore = (newParent, child, before = null) => {
|
|
18794
|
+
if ('moveBefore' in newParent) {
|
|
18795
|
+
try {
|
|
18796
|
+
newParent.moveBefore(child, before);
|
|
18797
|
+
}
|
|
18798
|
+
catch {
|
|
18799
|
+
newParent.insertBefore(child, before);
|
|
18800
|
+
}
|
|
18801
|
+
}
|
|
18802
|
+
else {
|
|
18803
|
+
newParent.insertBefore(child, before);
|
|
18804
|
+
}
|
|
18805
|
+
};
|
|
18806
|
+
const animateWithFixedWrapper = (config) => {
|
|
18807
|
+
const { playerEl, fromRect, toRect, document, onFinish, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)', } = config;
|
|
18808
|
+
const wrapper = document.createElement('div');
|
|
18809
|
+
wrapper.style.cssText = `
|
|
18810
|
+
position: fixed;
|
|
18811
|
+
left: ${fromRect.left}px;
|
|
18812
|
+
top: ${fromRect.top}px;
|
|
18813
|
+
width: ${fromRect.width}px;
|
|
18814
|
+
height: ${fromRect.height}px;
|
|
18815
|
+
overflow: visible;
|
|
18816
|
+
pointer-events: none;
|
|
18817
|
+
z-index: 2147483647;
|
|
18818
|
+
`;
|
|
18819
|
+
document.body.appendChild(wrapper);
|
|
18820
|
+
pipMoveBefore(wrapper, playerEl);
|
|
18821
|
+
const dx = toRect.left - fromRect.left;
|
|
18822
|
+
const dy = toRect.top - fromRect.top;
|
|
18823
|
+
const sx = fromRect.width > 0 ? toRect.width / fromRect.width : 1;
|
|
18824
|
+
const sy = fromRect.height > 0 ? toRect.height / fromRect.height : 1;
|
|
18825
|
+
const anim = wrapper.animate([
|
|
18826
|
+
{ transformOrigin: 'top left', transform: 'none' },
|
|
18827
|
+
{ transformOrigin: 'top left', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` },
|
|
18828
|
+
], { duration, easing, fill: 'both' });
|
|
18829
|
+
const cleanup = () => {
|
|
18830
|
+
onFinish();
|
|
18831
|
+
wrapper.remove();
|
|
18832
|
+
};
|
|
18833
|
+
anim.addEventListener('finish', cleanup, { once: true });
|
|
18834
|
+
anim.addEventListener('cancel', cleanup, { once: true });
|
|
18835
|
+
};
|
|
18836
|
+
const [provideStreamPipManager, injectStreamPipManager] = createRootProvider(() => {
|
|
18837
|
+
const document = inject(DOCUMENT);
|
|
18838
|
+
const container = document.createElement('div');
|
|
18839
|
+
container.className = 'et-stream-pip';
|
|
18840
|
+
document.body.appendChild(container);
|
|
18841
|
+
const _entry = signal(null, ...(ngDevMode ? [{ debugName: "_entry" }] : []));
|
|
18842
|
+
const isActive = computed(() => _entry() !== null, ...(ngDevMode ? [{ debugName: "isActive" }] : []));
|
|
18843
|
+
const activate = (element) => {
|
|
18844
|
+
if (_entry())
|
|
18845
|
+
return;
|
|
18846
|
+
const originalParent = element.parentElement;
|
|
18847
|
+
if (!originalParent) {
|
|
18848
|
+
console.warn('[StreamPipManager] activate() called on a detached element.');
|
|
18849
|
+
return;
|
|
18850
|
+
}
|
|
18851
|
+
const originalNextSibling = element.nextSibling;
|
|
18852
|
+
pipMoveBefore(container, element);
|
|
18853
|
+
_entry.set({ element, originalParent, originalNextSibling });
|
|
18854
|
+
};
|
|
18855
|
+
const deactivate = () => {
|
|
18856
|
+
const entry = _entry();
|
|
18857
|
+
if (!entry)
|
|
18858
|
+
return;
|
|
18859
|
+
const { element, originalParent, originalNextSibling } = entry;
|
|
18860
|
+
if (originalParent.isConnected) {
|
|
18861
|
+
pipMoveBefore(originalParent, element, originalNextSibling);
|
|
18862
|
+
}
|
|
18863
|
+
else {
|
|
18864
|
+
element.remove();
|
|
18865
|
+
}
|
|
18866
|
+
_entry.set(null);
|
|
18867
|
+
};
|
|
18868
|
+
return { activate, deactivate, isActive, container };
|
|
18869
|
+
}, { name: 'Stream PIP Manager' });
|
|
18870
|
+
|
|
18871
|
+
const [provideStreamManager, injectStreamManager] = createRootProvider(() => {
|
|
18872
|
+
const document = inject(DOCUMENT);
|
|
18873
|
+
const renderer = injectRenderer();
|
|
18874
|
+
const container = renderer.createElement('div');
|
|
18875
|
+
renderer.addClass(container, 'et-stream-manager');
|
|
18876
|
+
renderer.appendChild(document.body, container);
|
|
18877
|
+
const players = new Map();
|
|
18878
|
+
const slots = new Map();
|
|
18879
|
+
const pips = signal([], ...(ngDevMode ? [{ debugName: "pips" }] : []));
|
|
18880
|
+
const pipInitialRects = new Map();
|
|
18881
|
+
const resolveBestSlot = (playerId) => {
|
|
18882
|
+
let best = null;
|
|
18883
|
+
for (const slot of slots.values()) {
|
|
18884
|
+
if (slot.playerId !== playerId)
|
|
18885
|
+
continue;
|
|
18886
|
+
if (!best) {
|
|
18887
|
+
best = slot;
|
|
18888
|
+
continue;
|
|
18889
|
+
}
|
|
18890
|
+
if (!best.priority) {
|
|
18891
|
+
best = slot;
|
|
18892
|
+
continue;
|
|
18893
|
+
}
|
|
18894
|
+
if (slot.priority) {
|
|
18895
|
+
best = slot;
|
|
18896
|
+
}
|
|
18897
|
+
}
|
|
18898
|
+
return best;
|
|
18899
|
+
};
|
|
18900
|
+
const moveWithFlip = (element, targetParent) => {
|
|
18901
|
+
const initialRect = element.getBoundingClientRect();
|
|
18902
|
+
if (initialRect.width === 0 && initialRect.height === 0) {
|
|
18903
|
+
pipMoveBefore(targetParent, element);
|
|
18904
|
+
return;
|
|
18905
|
+
}
|
|
18906
|
+
const flip = createFlipAnimation({ element });
|
|
18907
|
+
flip.updateInit();
|
|
18908
|
+
pipMoveBefore(targetParent, element);
|
|
18909
|
+
flip.play();
|
|
18910
|
+
};
|
|
18911
|
+
const hasSlotFor = (playerId) => {
|
|
18912
|
+
for (const slot of slots.values()) {
|
|
18913
|
+
if (slot.playerId === playerId)
|
|
18914
|
+
return true;
|
|
18915
|
+
}
|
|
18916
|
+
return false;
|
|
18917
|
+
};
|
|
18918
|
+
const isInPip = (playerId) => pips().some((p) => p.playerId === playerId);
|
|
18919
|
+
const reassignPlayer = (playerId) => {
|
|
18920
|
+
const player = players.get(playerId);
|
|
18921
|
+
if (!player || isInPip(playerId))
|
|
18922
|
+
return;
|
|
18923
|
+
const bestSlot = resolveBestSlot(playerId);
|
|
18924
|
+
const targetParent = bestSlot?.element ?? container;
|
|
18925
|
+
if (player.element.parentElement !== targetParent) {
|
|
18926
|
+
moveWithFlip(player.element, targetParent);
|
|
18927
|
+
player.currentSlotElement = bestSlot?.element ?? null;
|
|
18928
|
+
}
|
|
18929
|
+
};
|
|
18930
|
+
const registerPlayer = (entry) => {
|
|
18931
|
+
const internal = {
|
|
18932
|
+
...entry,
|
|
18933
|
+
currentSlotElement: null,
|
|
18934
|
+
isOrphaned: false,
|
|
18935
|
+
isAnimatingOut: false,
|
|
18936
|
+
};
|
|
18937
|
+
players.set(entry.id, internal);
|
|
18938
|
+
renderer.appendChild(container, entry.element);
|
|
18939
|
+
reassignPlayer(entry.id);
|
|
18940
|
+
};
|
|
18941
|
+
const unregisterPlayer = (playerId) => {
|
|
18942
|
+
const entry = players.get(playerId);
|
|
18943
|
+
if (!entry)
|
|
18944
|
+
return;
|
|
18945
|
+
entry.element.remove();
|
|
18946
|
+
players.delete(playerId);
|
|
18947
|
+
pips.update((pips) => pips.filter((p) => p.playerId !== playerId));
|
|
18948
|
+
entry.onDestroy?.();
|
|
18949
|
+
};
|
|
18950
|
+
const registerSlot = (entry) => {
|
|
18951
|
+
slots.set(entry.element, entry);
|
|
18952
|
+
const player = players.get(entry.playerId);
|
|
18953
|
+
if (player?.isOrphaned)
|
|
18954
|
+
player.isOrphaned = false;
|
|
18955
|
+
reassignPlayer(entry.playerId);
|
|
18956
|
+
};
|
|
18957
|
+
const unregisterSlot = (element) => {
|
|
18958
|
+
const slot = slots.get(element);
|
|
18959
|
+
if (!slot)
|
|
18960
|
+
return;
|
|
18961
|
+
slots.delete(element);
|
|
18962
|
+
const player = players.get(slot.playerId);
|
|
18963
|
+
if (!player)
|
|
18964
|
+
return;
|
|
18965
|
+
const hasOtherSlot = hasSlotFor(slot.playerId);
|
|
18966
|
+
if (isInPip(slot.playerId)) {
|
|
18967
|
+
if (!hasOtherSlot)
|
|
18968
|
+
player.isOrphaned = true;
|
|
18969
|
+
return;
|
|
18970
|
+
}
|
|
18971
|
+
if (player.currentSlotElement === element) {
|
|
18972
|
+
if (hasOtherSlot) {
|
|
18973
|
+
reassignPlayer(slot.playerId);
|
|
18974
|
+
}
|
|
18975
|
+
else {
|
|
18976
|
+
unregisterPlayer(slot.playerId);
|
|
18977
|
+
}
|
|
18978
|
+
}
|
|
18979
|
+
};
|
|
18980
|
+
const pipActivate = (element, onBack) => {
|
|
18981
|
+
const slot = slots.get(element);
|
|
18982
|
+
if (!slot)
|
|
18983
|
+
return;
|
|
18984
|
+
const player = players.get(slot.playerId);
|
|
18985
|
+
if (!player || isInPip(slot.playerId))
|
|
18986
|
+
return;
|
|
18987
|
+
const initialRect = player.element.getBoundingClientRect();
|
|
18988
|
+
if (initialRect.width > 0 || initialRect.height > 0) {
|
|
18989
|
+
pipInitialRects.set(slot.playerId, initialRect);
|
|
18990
|
+
}
|
|
18991
|
+
pipMoveBefore(container, player.element);
|
|
18992
|
+
player.currentSlotElement = null;
|
|
18993
|
+
pips.update((pips) => [...pips, { playerId: slot.playerId, onBack: onBack ?? slot.onPipBack }]);
|
|
18994
|
+
};
|
|
18995
|
+
const pipDeactivate = (playerId) => {
|
|
18996
|
+
if (!isInPip(playerId))
|
|
18997
|
+
return;
|
|
18998
|
+
pipInitialRects.delete(playerId);
|
|
18999
|
+
const player = players.get(playerId);
|
|
19000
|
+
if (!player) {
|
|
19001
|
+
pips.update((pips) => pips.filter((p) => p.playerId !== playerId));
|
|
19002
|
+
return;
|
|
19003
|
+
}
|
|
19004
|
+
if (player.isOrphaned) {
|
|
19005
|
+
pips.update((pips) => pips.filter((p) => p.playerId !== playerId));
|
|
19006
|
+
unregisterPlayer(playerId);
|
|
19007
|
+
return;
|
|
19008
|
+
}
|
|
19009
|
+
const fromRect = player.element.getBoundingClientRect();
|
|
19010
|
+
const bestSlot = resolveBestSlot(playerId);
|
|
19011
|
+
const targetParent = bestSlot?.element ?? container;
|
|
19012
|
+
const toRect = targetParent.getBoundingClientRect();
|
|
19013
|
+
if (fromRect.width > 0 && fromRect.height > 0 && toRect.width > 0 && toRect.height > 0) {
|
|
19014
|
+
player.isAnimatingOut = true;
|
|
19015
|
+
animateWithFixedWrapper({
|
|
19016
|
+
playerEl: player.element,
|
|
19017
|
+
fromRect,
|
|
19018
|
+
toRect,
|
|
19019
|
+
document,
|
|
19020
|
+
onFinish: () => {
|
|
19021
|
+
player.isAnimatingOut = false;
|
|
19022
|
+
pipMoveBefore(targetParent, player.element);
|
|
19023
|
+
player.currentSlotElement = bestSlot?.element ?? null;
|
|
19024
|
+
},
|
|
19025
|
+
});
|
|
19026
|
+
}
|
|
19027
|
+
else {
|
|
19028
|
+
pipMoveBefore(targetParent, player.element);
|
|
19029
|
+
player.currentSlotElement = bestSlot?.element ?? null;
|
|
19030
|
+
}
|
|
19031
|
+
pips.update((pips) => pips.filter((p) => p.playerId !== playerId));
|
|
19032
|
+
};
|
|
19033
|
+
const transferPlayer = (oldId, newId) => {
|
|
19034
|
+
const entry = players.get(oldId);
|
|
19035
|
+
if (!entry || oldId === newId)
|
|
19036
|
+
return;
|
|
19037
|
+
players.delete(oldId);
|
|
19038
|
+
players.set(newId, { ...entry, id: newId });
|
|
19039
|
+
pips.update((pips) => pips.map((p) => (p.playerId === oldId ? { ...p, playerId: newId } : p)));
|
|
19040
|
+
};
|
|
19041
|
+
const getPlayerElement = (playerId) => players.get(playerId)?.element ?? null;
|
|
19042
|
+
const getInitialRect = (playerId) => {
|
|
19043
|
+
const rect = pipInitialRects.get(playerId) ?? null;
|
|
19044
|
+
pipInitialRects.delete(playerId);
|
|
19045
|
+
return rect;
|
|
19046
|
+
};
|
|
19047
|
+
const parkPlayerElement = (playerId) => {
|
|
19048
|
+
const player = players.get(playerId);
|
|
19049
|
+
if (!player)
|
|
19050
|
+
return;
|
|
19051
|
+
if (player.isAnimatingOut)
|
|
19052
|
+
return;
|
|
19053
|
+
if (player.element.parentElement === container)
|
|
19054
|
+
return;
|
|
19055
|
+
pipMoveBefore(container, player.element);
|
|
19056
|
+
};
|
|
19057
|
+
return {
|
|
19058
|
+
pips: pips.asReadonly(),
|
|
19059
|
+
registerPlayer,
|
|
19060
|
+
unregisterPlayer,
|
|
19061
|
+
registerSlot,
|
|
19062
|
+
unregisterSlot,
|
|
19063
|
+
pipActivate,
|
|
19064
|
+
pipDeactivate,
|
|
19065
|
+
transferPlayer,
|
|
19066
|
+
getPlayerElement,
|
|
19067
|
+
getInitialRect,
|
|
19068
|
+
parkPlayerElement,
|
|
19069
|
+
};
|
|
19070
|
+
}, { name: 'Stream Manager' });
|
|
19071
|
+
|
|
19072
|
+
const YT_API_URL = 'https://www.youtube.com/iframe_api';
|
|
19073
|
+
const YOUTUBE_PLAYER_TOKEN = new InjectionToken('YOUTUBE_PLAYER_TOKEN');
|
|
19074
|
+
const DEFAULT_STATE = {
|
|
19075
|
+
isReady: false,
|
|
19076
|
+
isPlaying: false,
|
|
19077
|
+
isMuted: false,
|
|
19078
|
+
isEnded: false,
|
|
19079
|
+
duration: null,
|
|
19080
|
+
currentTime: null,
|
|
19081
|
+
};
|
|
19082
|
+
const waitForYtReady = () => {
|
|
19083
|
+
const win = window;
|
|
19084
|
+
if (win.YT?.Player)
|
|
19085
|
+
return of(undefined);
|
|
19086
|
+
return new Observable((subscriber) => {
|
|
19087
|
+
const prev = win.onYouTubeIframeAPIReady;
|
|
19088
|
+
win.onYouTubeIframeAPIReady = () => {
|
|
19089
|
+
prev?.();
|
|
19090
|
+
subscriber.next();
|
|
19091
|
+
subscriber.complete();
|
|
19092
|
+
};
|
|
19093
|
+
});
|
|
19094
|
+
};
|
|
19095
|
+
class YoutubePlayerDirective {
|
|
19096
|
+
constructor() {
|
|
19097
|
+
this.el = injectHostElement();
|
|
19098
|
+
this.scriptLoader = injectStreamScriptLoader();
|
|
19099
|
+
this.platformId = inject(PLATFORM_ID);
|
|
19100
|
+
this.renderer = injectRenderer();
|
|
19101
|
+
this.params = inject(YoutubePlayerParamsDirective);
|
|
19102
|
+
this.CAPABILITIES = {
|
|
19103
|
+
canPlay: true,
|
|
19104
|
+
canPause: true,
|
|
19105
|
+
canMute: true,
|
|
19106
|
+
canSeek: true,
|
|
19107
|
+
canGetDuration: true,
|
|
19108
|
+
isLiveCapable: true,
|
|
19109
|
+
};
|
|
19110
|
+
this.state = signal({ ...DEFAULT_STATE }, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
19111
|
+
this.playerResource = rxResource({
|
|
19112
|
+
params: () => (isPlatformBrowser(this.platformId) ? this.params.videoId() : null),
|
|
19113
|
+
stream: ({ params: videoId }) => {
|
|
19114
|
+
if (!videoId)
|
|
19115
|
+
return EMPTY;
|
|
19116
|
+
return this.scriptLoader.load(YT_API_URL).pipe(switchMap(() => waitForYtReady()), switchMap(() => new Observable((subscriber) => {
|
|
19117
|
+
const win = window;
|
|
19118
|
+
if (isDevMode() && !win.YT?.Player) {
|
|
19119
|
+
console.error('[et-youtube-player] YT.Player not available after SDK load.');
|
|
19120
|
+
}
|
|
19121
|
+
let currentTimeInterval = null;
|
|
19122
|
+
const clearCurrentTimeInterval = () => {
|
|
19123
|
+
if (currentTimeInterval !== null) {
|
|
19124
|
+
clearInterval(currentTimeInterval);
|
|
19125
|
+
currentTimeInterval = null;
|
|
19126
|
+
}
|
|
19127
|
+
};
|
|
19128
|
+
const placeholder = this.renderer.createElement('div');
|
|
19129
|
+
this.renderer.appendChild(this.el, placeholder);
|
|
19130
|
+
const player = new win.YT.Player(placeholder, {
|
|
19131
|
+
videoId,
|
|
19132
|
+
width: this.params.width(),
|
|
19133
|
+
height: this.params.height(),
|
|
19134
|
+
playerVars: {
|
|
19135
|
+
enablejsapi: 1,
|
|
19136
|
+
origin: window.location.origin,
|
|
19137
|
+
start: this.params.startTime() || undefined,
|
|
19138
|
+
rel: 0,
|
|
19139
|
+
},
|
|
19140
|
+
events: {
|
|
19141
|
+
onReady: () => {
|
|
19142
|
+
this.state.set({ ...DEFAULT_STATE, isReady: true });
|
|
19143
|
+
subscriber.next(player);
|
|
19144
|
+
},
|
|
19145
|
+
onStateChange: (event) => {
|
|
19146
|
+
const YT = win.YT;
|
|
19147
|
+
const s = event.data;
|
|
19148
|
+
const isPlaying = s === YT.PlayerState.PLAYING;
|
|
19149
|
+
clearCurrentTimeInterval();
|
|
19150
|
+
if (isPlaying) {
|
|
19151
|
+
currentTimeInterval = setInterval(() => {
|
|
19152
|
+
this.state.update((prev) => ({
|
|
19153
|
+
...prev,
|
|
19154
|
+
currentTime: player.getCurrentTime() ?? null,
|
|
19155
|
+
}));
|
|
19156
|
+
}, 250);
|
|
19157
|
+
}
|
|
19158
|
+
this.state.update((prev) => ({
|
|
19159
|
+
...prev,
|
|
19160
|
+
isPlaying,
|
|
19161
|
+
isEnded: s === YT.PlayerState.ENDED,
|
|
19162
|
+
duration: player.getDuration() ?? null,
|
|
19163
|
+
currentTime: player.getCurrentTime() ?? null,
|
|
19164
|
+
isMuted: player.isMuted(),
|
|
19165
|
+
}));
|
|
19166
|
+
},
|
|
19167
|
+
},
|
|
19168
|
+
});
|
|
19169
|
+
return () => {
|
|
19170
|
+
clearCurrentTimeInterval();
|
|
19171
|
+
player.destroy();
|
|
19172
|
+
this.state.set({ ...DEFAULT_STATE });
|
|
19173
|
+
};
|
|
19174
|
+
})));
|
|
19175
|
+
},
|
|
19176
|
+
});
|
|
19177
|
+
this.error = computed(() => (this.playerResource.isLoading() ? undefined : this.playerResource.error()), ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
19178
|
+
}
|
|
19179
|
+
play() {
|
|
19180
|
+
this.playerResource.value()?.playVideo();
|
|
19181
|
+
}
|
|
19182
|
+
pause() {
|
|
19183
|
+
this.playerResource.value()?.pauseVideo();
|
|
19184
|
+
}
|
|
19185
|
+
mute() {
|
|
19186
|
+
this.playerResource.value()?.mute();
|
|
19187
|
+
this.state.update((s) => ({ ...s, isMuted: true }));
|
|
19188
|
+
}
|
|
19189
|
+
unmute() {
|
|
19190
|
+
this.playerResource.value()?.unMute();
|
|
19191
|
+
this.state.update((s) => ({ ...s, isMuted: false }));
|
|
19192
|
+
}
|
|
19193
|
+
seek(seconds) {
|
|
19194
|
+
this.playerResource.value()?.seekTo(seconds, true);
|
|
19195
|
+
}
|
|
19196
|
+
retry() {
|
|
19197
|
+
this.playerResource.reload();
|
|
19198
|
+
}
|
|
19199
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19200
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: YoutubePlayerDirective, isStandalone: true, providers: [
|
|
19201
|
+
{ provide: YOUTUBE_PLAYER_TOKEN, useExisting: YoutubePlayerDirective },
|
|
19202
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: YoutubePlayerDirective },
|
|
19203
|
+
], ngImport: i0 }); }
|
|
19204
|
+
}
|
|
19205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerDirective, decorators: [{
|
|
19206
|
+
type: Directive,
|
|
19207
|
+
args: [{
|
|
19208
|
+
providers: [
|
|
19209
|
+
{ provide: YOUTUBE_PLAYER_TOKEN, useExisting: YoutubePlayerDirective },
|
|
19210
|
+
{ provide: STREAM_PLAYER_TOKEN, useExisting: YoutubePlayerDirective },
|
|
19211
|
+
],
|
|
19212
|
+
}]
|
|
19213
|
+
}] });
|
|
19214
|
+
|
|
19215
|
+
class YoutubePlayerComponent {
|
|
19216
|
+
constructor() {
|
|
19217
|
+
this.player = inject(YOUTUBE_PLAYER_TOKEN);
|
|
19218
|
+
this.state = this.player.state;
|
|
19219
|
+
this.error = this.player.error;
|
|
19220
|
+
}
|
|
19221
|
+
retry() {
|
|
19222
|
+
this.player.retry();
|
|
19223
|
+
}
|
|
19224
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19225
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: YoutubePlayerComponent, isStandalone: true, selector: "et-youtube-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-youtube-player" }, hostDirectives: [{ directive: YoutubePlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: YoutubePlayerDirective }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
19226
|
+
}
|
|
19227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerComponent, decorators: [{
|
|
19228
|
+
type: Component,
|
|
19229
|
+
args: [{
|
|
19230
|
+
selector: 'et-youtube-player',
|
|
19231
|
+
template: '',
|
|
19232
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
19233
|
+
encapsulation: ViewEncapsulation.None,
|
|
19234
|
+
hostDirectives: [
|
|
19235
|
+
{
|
|
19236
|
+
directive: YoutubePlayerParamsDirective,
|
|
19237
|
+
inputs: ['videoId', 'startTime', 'width', 'height'],
|
|
19238
|
+
},
|
|
19239
|
+
YoutubePlayerDirective,
|
|
19240
|
+
],
|
|
19241
|
+
host: {
|
|
19242
|
+
class: 'et-youtube-player',
|
|
19243
|
+
style: 'display: block; width: 100%; height: 100%',
|
|
19244
|
+
},
|
|
19245
|
+
}]
|
|
19246
|
+
}] });
|
|
19247
|
+
|
|
19248
|
+
const YOUTUBE_PLAYER_SLOT_TOKEN = new InjectionToken('YOUTUBE_PLAYER_SLOT_TOKEN');
|
|
19249
|
+
class YoutubePlayerSlotDirective {
|
|
19250
|
+
constructor() {
|
|
19251
|
+
this.manager = injectStreamManager();
|
|
19252
|
+
this.el = injectHostElement();
|
|
19253
|
+
this.appRef = inject(ApplicationRef);
|
|
19254
|
+
this.envInjector = inject(EnvironmentInjector);
|
|
19255
|
+
this.params = inject(YoutubePlayerParamsDirective);
|
|
19256
|
+
this.streamSlotPriority = input(false, { ...(ngDevMode ? { debugName: "streamSlotPriority" } : {}), transform: booleanAttribute });
|
|
19257
|
+
this.streamSlotOnPipBack = input(...(ngDevMode ? [undefined, { debugName: "streamSlotOnPipBack" }] : []));
|
|
19258
|
+
this.currentPlayerId = null;
|
|
19259
|
+
effect(() => {
|
|
19260
|
+
const newPlayerId = `youtube-${this.params.videoId()}`;
|
|
19261
|
+
const oldPlayerId = this.currentPlayerId;
|
|
19262
|
+
if (!oldPlayerId || oldPlayerId === newPlayerId)
|
|
19263
|
+
return;
|
|
19264
|
+
this.manager.transferPlayer(oldPlayerId, newPlayerId);
|
|
19265
|
+
this.manager.unregisterSlot(this.el);
|
|
19266
|
+
this.manager.registerSlot({
|
|
19267
|
+
playerId: newPlayerId,
|
|
19268
|
+
priority: this.streamSlotPriority(),
|
|
19269
|
+
element: this.el,
|
|
19270
|
+
onPipBack: this.streamSlotOnPipBack(),
|
|
19271
|
+
});
|
|
19272
|
+
this.currentPlayerId = newPlayerId;
|
|
19273
|
+
});
|
|
19274
|
+
}
|
|
19275
|
+
ngOnInit() {
|
|
19276
|
+
const videoId = this.params.videoId();
|
|
19277
|
+
this.currentPlayerId = `youtube-${videoId}`;
|
|
19278
|
+
if (this.manager.getPlayerElement(this.currentPlayerId)) {
|
|
19279
|
+
this.manager.registerSlot({
|
|
19280
|
+
playerId: this.currentPlayerId,
|
|
19281
|
+
priority: this.streamSlotPriority(),
|
|
19282
|
+
element: this.el,
|
|
19283
|
+
onPipBack: this.streamSlotOnPipBack(),
|
|
19284
|
+
});
|
|
19285
|
+
return;
|
|
19286
|
+
}
|
|
19287
|
+
const componentRef = createComponent(YoutubePlayerComponent, {
|
|
19288
|
+
environmentInjector: this.envInjector,
|
|
19289
|
+
bindings: [
|
|
19290
|
+
inputBinding('videoId', () => this.params.videoId()),
|
|
19291
|
+
inputBinding('startTime', () => this.params.startTime()),
|
|
19292
|
+
inputBinding('width', () => this.params.width()),
|
|
19293
|
+
inputBinding('height', () => this.params.height()),
|
|
19294
|
+
],
|
|
19295
|
+
});
|
|
19296
|
+
this.appRef.attachView(componentRef.hostView);
|
|
19297
|
+
const playerElement = componentRef.location.nativeElement;
|
|
19298
|
+
this.manager.registerPlayer({
|
|
19299
|
+
id: this.currentPlayerId,
|
|
19300
|
+
element: playerElement,
|
|
19301
|
+
onDestroy: () => {
|
|
19302
|
+
this.appRef.detachView(componentRef.hostView);
|
|
19303
|
+
componentRef.destroy();
|
|
19304
|
+
},
|
|
19305
|
+
});
|
|
19306
|
+
this.manager.registerSlot({
|
|
19307
|
+
playerId: this.currentPlayerId,
|
|
19308
|
+
priority: this.streamSlotPriority(),
|
|
19309
|
+
element: this.el,
|
|
19310
|
+
onPipBack: this.streamSlotOnPipBack(),
|
|
19311
|
+
});
|
|
19312
|
+
}
|
|
19313
|
+
ngOnDestroy() {
|
|
19314
|
+
if (this.currentPlayerId) {
|
|
19315
|
+
this.manager.unregisterSlot(this.el);
|
|
19316
|
+
}
|
|
19317
|
+
}
|
|
19318
|
+
pipActivate(onBack) {
|
|
19319
|
+
this.manager.pipActivate(this.el, onBack);
|
|
19320
|
+
}
|
|
19321
|
+
pipDeactivate() {
|
|
19322
|
+
if (this.currentPlayerId) {
|
|
19323
|
+
this.manager.pipDeactivate(this.currentPlayerId);
|
|
19324
|
+
}
|
|
19325
|
+
}
|
|
19326
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19327
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: YoutubePlayerSlotDirective, isStandalone: true, inputs: { streamSlotPriority: { classPropertyName: "streamSlotPriority", publicName: "streamSlotPriority", isSignal: true, isRequired: false, transformFunction: null }, streamSlotOnPipBack: { classPropertyName: "streamSlotOnPipBack", publicName: "streamSlotOnPipBack", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: YOUTUBE_PLAYER_SLOT_TOKEN, useExisting: YoutubePlayerSlotDirective }], ngImport: i0 }); }
|
|
19328
|
+
}
|
|
19329
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerSlotDirective, decorators: [{
|
|
19330
|
+
type: Directive,
|
|
19331
|
+
args: [{
|
|
19332
|
+
providers: [{ provide: YOUTUBE_PLAYER_SLOT_TOKEN, useExisting: YoutubePlayerSlotDirective }],
|
|
19333
|
+
}]
|
|
19334
|
+
}], ctorParameters: () => [], propDecorators: { streamSlotPriority: [{ type: i0.Input, args: [{ isSignal: true, alias: "streamSlotPriority", required: false }] }], streamSlotOnPipBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "streamSlotOnPipBack", required: false }] }] } });
|
|
19335
|
+
|
|
19336
|
+
class YoutubePlayerSlotComponent {
|
|
19337
|
+
constructor() {
|
|
19338
|
+
this.slot = inject(YOUTUBE_PLAYER_SLOT_TOKEN);
|
|
19339
|
+
}
|
|
19340
|
+
pipActivate(onBack) {
|
|
19341
|
+
this.slot.pipActivate(onBack);
|
|
19342
|
+
}
|
|
19343
|
+
pipDeactivate() {
|
|
19344
|
+
this.slot.pipDeactivate();
|
|
19345
|
+
}
|
|
19346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19347
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: YoutubePlayerSlotComponent, isStandalone: true, selector: "et-youtube-player-slot", host: { classAttribute: "et-youtube-player-slot" }, hostDirectives: [{ directive: YoutubePlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: YoutubePlayerSlotDirective, inputs: ["streamSlotPriority", "streamSlotPriority", "streamSlotOnPipBack", "streamSlotOnPipBack"] }], ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
19348
|
+
}
|
|
19349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: YoutubePlayerSlotComponent, decorators: [{
|
|
19350
|
+
type: Component,
|
|
19351
|
+
args: [{
|
|
19352
|
+
selector: 'et-youtube-player-slot',
|
|
19353
|
+
template: '<ng-content />',
|
|
19354
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
19355
|
+
encapsulation: ViewEncapsulation.None,
|
|
19356
|
+
hostDirectives: [
|
|
19357
|
+
{
|
|
19358
|
+
directive: YoutubePlayerParamsDirective,
|
|
19359
|
+
inputs: ['videoId', 'startTime', 'width', 'height'],
|
|
19360
|
+
},
|
|
19361
|
+
{
|
|
19362
|
+
directive: YoutubePlayerSlotDirective,
|
|
19363
|
+
inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],
|
|
19364
|
+
},
|
|
19365
|
+
],
|
|
19366
|
+
host: {
|
|
19367
|
+
class: 'et-youtube-player-slot',
|
|
19368
|
+
},
|
|
19369
|
+
}]
|
|
19370
|
+
}] });
|
|
19371
|
+
|
|
19372
|
+
class StreamPipChromeComponent {
|
|
19373
|
+
constructor() {
|
|
19374
|
+
this.document = inject(DOCUMENT);
|
|
19375
|
+
this.pipEntries = viewChildren('pipEntry', ...(ngDevMode ? [{ debugName: "pipEntries" }] : []));
|
|
19376
|
+
this.manager = injectStreamManager();
|
|
19377
|
+
afterRenderEffect(() => {
|
|
19378
|
+
for (const { nativeElement: entryEl } of this.pipEntries()) {
|
|
19379
|
+
const playerId = entryEl.dataset['playerId'];
|
|
19380
|
+
if (!playerId)
|
|
19381
|
+
continue;
|
|
19382
|
+
const playerEl = this.manager.getPlayerElement(playerId);
|
|
19383
|
+
if (!playerEl || playerEl.parentElement === entryEl)
|
|
19384
|
+
continue;
|
|
19385
|
+
const controlsEl = entryEl.querySelector('.et-stream-pip-chrome__controls');
|
|
19386
|
+
const fromRect = this.manager.getInitialRect(playerId);
|
|
19387
|
+
const toRect = entryEl.getBoundingClientRect();
|
|
19388
|
+
if (fromRect && fromRect.width > 0 && fromRect.height > 0 && toRect.width > 0 && toRect.height > 0) {
|
|
19389
|
+
entryEl.style.visibility = 'hidden';
|
|
19390
|
+
animateWithFixedWrapper({
|
|
19391
|
+
playerEl,
|
|
19392
|
+
fromRect,
|
|
19393
|
+
toRect,
|
|
19394
|
+
document: this.document,
|
|
19395
|
+
onFinish: () => {
|
|
19396
|
+
pipMoveBefore(entryEl, playerEl, controlsEl);
|
|
19397
|
+
entryEl.style.visibility = '';
|
|
19398
|
+
},
|
|
19399
|
+
});
|
|
19400
|
+
}
|
|
19401
|
+
else {
|
|
19402
|
+
pipMoveBefore(entryEl, playerEl, controlsEl);
|
|
19403
|
+
}
|
|
19404
|
+
}
|
|
19405
|
+
});
|
|
19406
|
+
}
|
|
19407
|
+
onBack(pip) {
|
|
19408
|
+
pip.onBack?.();
|
|
19409
|
+
}
|
|
19410
|
+
onClose(pip) {
|
|
19411
|
+
this.manager.pipDeactivate(pip.playerId);
|
|
19412
|
+
}
|
|
19413
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamPipChromeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19414
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: StreamPipChromeComponent, isStandalone: true, selector: "et-stream-pip-chrome", host: { classAttribute: "et-stream-pip-chrome" }, viewQueries: [{ propertyName: "pipEntries", predicate: ["pipEntry"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
19415
|
+
@for (pip of manager.pips(); track pip.playerId) {
|
|
19416
|
+
<div #pipEntry [attr.data-player-id]="pip.playerId" class="et-stream-pip-chrome__entry">
|
|
19417
|
+
<div class="et-stream-pip-chrome__controls">
|
|
19418
|
+
@if (pip.onBack) {
|
|
19419
|
+
<button (click)="onBack(pip)" class="et-stream-pip-chrome__back" type="button" aria-label="Back">‹</button>
|
|
19420
|
+
}
|
|
19421
|
+
<button
|
|
19422
|
+
(click)="onClose(pip)"
|
|
19423
|
+
class="et-stream-pip-chrome__close"
|
|
19424
|
+
type="button"
|
|
19425
|
+
aria-label="Close picture-in-picture"
|
|
19426
|
+
>
|
|
19427
|
+
✕
|
|
19428
|
+
</button>
|
|
19429
|
+
</div>
|
|
19430
|
+
</div>
|
|
19431
|
+
}
|
|
19432
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
19433
|
+
}
|
|
19434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: StreamPipChromeComponent, decorators: [{
|
|
19435
|
+
type: Component,
|
|
19436
|
+
args: [{
|
|
19437
|
+
selector: 'et-stream-pip-chrome',
|
|
19438
|
+
template: `
|
|
19439
|
+
@for (pip of manager.pips(); track pip.playerId) {
|
|
19440
|
+
<div #pipEntry [attr.data-player-id]="pip.playerId" class="et-stream-pip-chrome__entry">
|
|
19441
|
+
<div class="et-stream-pip-chrome__controls">
|
|
19442
|
+
@if (pip.onBack) {
|
|
19443
|
+
<button (click)="onBack(pip)" class="et-stream-pip-chrome__back" type="button" aria-label="Back">‹</button>
|
|
19444
|
+
}
|
|
19445
|
+
<button
|
|
19446
|
+
(click)="onClose(pip)"
|
|
19447
|
+
class="et-stream-pip-chrome__close"
|
|
19448
|
+
type="button"
|
|
19449
|
+
aria-label="Close picture-in-picture"
|
|
19450
|
+
>
|
|
19451
|
+
✕
|
|
19452
|
+
</button>
|
|
19453
|
+
</div>
|
|
19454
|
+
</div>
|
|
19455
|
+
}
|
|
19456
|
+
`,
|
|
19457
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
19458
|
+
encapsulation: ViewEncapsulation.None,
|
|
19459
|
+
host: {
|
|
19460
|
+
class: 'et-stream-pip-chrome',
|
|
19461
|
+
},
|
|
19462
|
+
}]
|
|
19463
|
+
}], ctorParameters: () => [], propDecorators: { pipEntries: [{ type: i0.ViewChildren, args: ['pipEntry', { isSignal: true }] }] } });
|
|
19464
|
+
|
|
19465
|
+
const StreamImports = [
|
|
19466
|
+
StreamConsentComponent,
|
|
19467
|
+
StreamConsentContentDirective,
|
|
19468
|
+
StreamConsentPlaceholderDirective,
|
|
19469
|
+
StreamConsentAcceptDirective,
|
|
19470
|
+
YoutubePlayerComponent,
|
|
19471
|
+
YoutubePlayerDirective,
|
|
19472
|
+
YoutubePlayerParamsDirective,
|
|
19473
|
+
YoutubePlayerSlotComponent,
|
|
19474
|
+
YoutubePlayerSlotDirective,
|
|
19475
|
+
TwitchPlayerComponent,
|
|
19476
|
+
TwitchPlayerDirective,
|
|
19477
|
+
VimeoPlayerComponent,
|
|
19478
|
+
VimeoPlayerDirective,
|
|
19479
|
+
DailymotionPlayerComponent,
|
|
19480
|
+
DailymotionPlayerDirective,
|
|
19481
|
+
KickPlayerComponent,
|
|
19482
|
+
KickPlayerDirective,
|
|
19483
|
+
FacebookPlayerComponent,
|
|
19484
|
+
FacebookPlayerDirective,
|
|
19485
|
+
TikTokPlayerComponent,
|
|
19486
|
+
TikTokPlayerDirective,
|
|
19487
|
+
SoopPlayerComponent,
|
|
19488
|
+
SoopPlayerDirective,
|
|
19489
|
+
StreamPipChromeComponent,
|
|
19490
|
+
];
|
|
19491
|
+
|
|
19492
|
+
class TableBusyDirective {
|
|
19493
|
+
constructor() {
|
|
19494
|
+
this.templateRef = inject(TemplateRef);
|
|
19495
|
+
this._contentClassName = 'et-table-busy';
|
|
19496
|
+
}
|
|
19497
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableBusyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19498
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: TableBusyDirective, isStandalone: true, selector: "ng-template[etTableBusy]", ngImport: i0 }); }
|
|
19499
|
+
}
|
|
19500
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableBusyDirective, decorators: [{
|
|
19501
|
+
type: Directive,
|
|
19502
|
+
args: [{
|
|
19503
|
+
selector: 'ng-template[etTableBusy]',
|
|
19504
|
+
}]
|
|
19505
|
+
}] });
|
|
19506
|
+
|
|
19507
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
19508
|
+
class TableBusyOutletDirective {
|
|
19509
|
+
constructor() {
|
|
19510
|
+
this.viewContainer = inject(ViewContainerRef);
|
|
19511
|
+
this.elementRef = inject(ElementRef);
|
|
19512
|
+
}
|
|
19513
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableBusyOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19514
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: TableBusyOutletDirective, isStandalone: true, selector: "[tableBusyOutlet]", ngImport: i0 }); }
|
|
19515
|
+
}
|
|
19516
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableBusyOutletDirective, decorators: [{
|
|
19517
|
+
type: Directive,
|
|
19518
|
+
args: [{ selector: '[tableBusyOutlet]' }]
|
|
19519
|
+
}] });
|
|
19520
|
+
|
|
19521
|
+
class TableComponent extends CdkTable {
|
|
19522
|
+
constructor() {
|
|
19523
|
+
super(...arguments);
|
|
19524
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
19525
|
+
this.stickyCssClass = 'et-table-sticky';
|
|
19526
|
+
this.needsPositionStickyOnElement = false;
|
|
19527
|
+
this._tableBusyOutlet = viewChild(TableBusyOutletDirective, ...(ngDevMode ? [{ debugName: "_tableBusyOutlet" }] : []));
|
|
19528
|
+
this._tableBusyComponent = contentChild(TableBusyDirective, ...(ngDevMode ? [{ debugName: "_tableBusyComponent" }] : []));
|
|
19529
|
+
this._busy = false;
|
|
19530
|
+
this._isShowingTableBusy = false;
|
|
19531
|
+
}
|
|
19532
|
+
// TODO: Skipped for migration because:
|
|
19533
|
+
// Accessor inputs cannot be migrated as they are too complex.
|
|
19534
|
+
get busy() {
|
|
19535
|
+
return this._busy;
|
|
19536
|
+
}
|
|
19537
|
+
set busy(value) {
|
|
19538
|
+
this._busy = booleanAttribute(value);
|
|
19539
|
+
this._updateTableBusy();
|
|
19540
|
+
}
|
|
19541
|
+
ngAfterContentInit() {
|
|
19542
|
+
super.ngAfterContentInit();
|
|
19543
|
+
this._updateTableBusy();
|
|
19544
|
+
}
|
|
19545
|
+
_updateTableBusy() {
|
|
19546
|
+
const tableBusyComponent = this._tableBusyComponent();
|
|
19547
|
+
if (!tableBusyComponent) {
|
|
19548
|
+
return;
|
|
19549
|
+
}
|
|
19550
|
+
const shouldShow = this.busy;
|
|
19551
|
+
if (shouldShow === this._isShowingTableBusy) {
|
|
19552
|
+
return;
|
|
19553
|
+
}
|
|
19554
|
+
const container = this._tableBusyOutlet()?.viewContainer;
|
|
19555
|
+
if (!container) {
|
|
19556
|
+
return;
|
|
19557
|
+
}
|
|
19558
|
+
if (shouldShow) {
|
|
19559
|
+
const view = container.createEmbeddedView(tableBusyComponent.templateRef);
|
|
19560
|
+
const rootNode = view.rootNodes[0];
|
|
19561
|
+
if (view.rootNodes.length === 1 && rootNode?.nodeType === document.ELEMENT_NODE) {
|
|
19562
|
+
rootNode.classList.add(tableBusyComponent._contentClassName);
|
|
19563
|
+
}
|
|
19564
|
+
}
|
|
19565
|
+
else {
|
|
19566
|
+
container.clear();
|
|
19567
|
+
}
|
|
19568
|
+
this._isShowingTableBusy = shouldShow;
|
|
19569
|
+
this._cdr.markForCheck();
|
|
19570
|
+
}
|
|
19571
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
19572
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: TableComponent, isStandalone: true, selector: "et-table, table[et-table]", inputs: { busy: "busy" }, host: { properties: { "class.et-table-fixed-layout": "fixedLayout", "attr.aria-busy": "busy ? true : null" }, classAttribute: "et-table et-data-table__table" }, providers: [
|
|
19573
|
+
{ provide: CdkTable, useExisting: TableComponent },
|
|
19574
|
+
{ provide: CDK_TABLE, useExisting: TableComponent },
|
|
19575
|
+
{ provide: STICKY_POSITIONING_LISTENER, useValue: null },
|
|
19576
|
+
], queries: [{ propertyName: "_tableBusyComponent", first: true, predicate: TableBusyDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_tableBusyOutlet", first: true, predicate: TableBusyOutletDirective, descendants: true, isSignal: true }], exportAs: ["etTable"], usesInheritance: true, ngImport: i0, template: `
|
|
19577
|
+
<ng-content select="caption" />
|
|
19578
|
+
<ng-content select="colgroup, col" />
|
|
19579
|
+
|
|
19580
|
+
@if (_isServer) {
|
|
19581
|
+
<ng-content />
|
|
19582
|
+
}
|
|
19583
|
+
|
|
19584
|
+
@if (_isNativeHtmlTable) {
|
|
19585
|
+
<thead role="rowgroup">
|
|
19586
|
+
<ng-container headerRowOutlet />
|
|
19587
|
+
</thead>
|
|
19588
|
+
<tbody class="mdc-data-table__content" role="rowgroup">
|
|
19589
|
+
<ng-container rowOutlet />
|
|
19590
|
+
<ng-container noDataRowOutlet />
|
|
19591
|
+
</tbody>
|
|
19592
|
+
<tfoot role="rowgroup">
|
|
19593
|
+
<ng-container footerRowOutlet />
|
|
19594
|
+
</tfoot>
|
|
19595
|
+
} @else {
|
|
19596
|
+
<ng-container headerRowOutlet />
|
|
19597
|
+
<div class="et-table-body">
|
|
19598
|
+
<ng-container rowOutlet />
|
|
19599
|
+
<ng-container tableBusyOutlet />
|
|
19600
|
+
</div>
|
|
19601
|
+
<ng-container noDataRowOutlet />
|
|
19602
|
+
<ng-container footerRowOutlet />
|
|
19603
|
+
}
|
|
19604
|
+
`, isInline: true, styles: [":where(.et-table){--et-table-separator-color: #4c4c4c;--et-table-separator-width: 1px;--et-table-separator-style: solid;--et-table-header-row-min-height: 56px;--et-table-row-display: flex;--et-table-row-min-height: 48px;--et-table-row-inline-padding: 24px;--et-table-cell-display: flex;--et-table-cell-inline-padding: 0;--et-table-cell-block-padding: 0}.et-table{display:block;position:relative}.et-header-row{min-height:var(--et-table-header-row-min-height)}.et-row,.et-footer-row{min-height:var(--et-table-row-min-height)}.et-row,.et-header-row,.et-footer-row{display:var(--et-table-row-display);border-width:0;border-bottom-width:var(--et-table-separator-width);border-style:var(--et-table-separator-style);border-color:var(--et-table-separator-color);align-items:center;box-sizing:border-box}.et-cell,.et-header-cell,.et-footer-cell{padding-inline:var(--et-table-cell-inline-padding);padding-block:var(--et-table-cell-block-padding)}.et-cell:first-of-type,.et-header-cell:first-of-type,.et-footer-cell:first-of-type{padding-inline-start:var(--et-table-row-inline-padding)}.et-cell:last-of-type,.et-header-cell:last-of-type,.et-footer-cell:last-of-type{padding-inline-end:var(--et-table-row-inline-padding)}.et-cell,.et-header-cell,.et-footer-cell{flex:1;display:var(--et-table-cell-display);align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit;box-sizing:border-box}.et-table-sticky{position:sticky!important}.et-table{table-layout:auto;white-space:normal}.et-table tbody,.et-table tfoot,.et-table thead,.et-cell,.et-footer-cell,.et-header-row,.et-row,.et-footer-row,.et-table .et-header-cell{background:inherit}.et-table et-header-row.et-header-row,.et-table et-row.et-row,.et-table et-footer-row.et-footer-cell{height:unset}et-header-cell.et-header-cell,et-cell.et-cell,et-footer-cell.et-footer-cell{align-self:stretch}\n"], dependencies: [{ kind: "directive", type: HeaderRowOutlet, selector: "[headerRowOutlet]" }, { kind: "directive", type: DataRowOutlet, selector: "[rowOutlet]" }, { kind: "directive", type: NoDataRowOutlet, selector: "[noDataRowOutlet]" }, { kind: "directive", type: FooterRowOutlet, selector: "[footerRowOutlet]" }, { kind: "directive", type: TableBusyOutletDirective, selector: "[tableBusyOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
|
|
19605
|
+
}
|
|
19606
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: TableComponent, decorators: [{
|
|
19607
|
+
type: Component,
|
|
19608
|
+
args: [{ selector: 'et-table, table[et-table]', exportAs: 'etTable', template: `
|
|
19609
|
+
<ng-content select="caption" />
|
|
19610
|
+
<ng-content select="colgroup, col" />
|
|
19611
|
+
|
|
19612
|
+
@if (_isServer) {
|
|
19613
|
+
<ng-content />
|
|
19614
|
+
}
|
|
19615
|
+
|
|
19616
|
+
@if (_isNativeHtmlTable) {
|
|
19617
|
+
<thead role="rowgroup">
|
|
19618
|
+
<ng-container headerRowOutlet />
|
|
19619
|
+
</thead>
|
|
19620
|
+
<tbody class="mdc-data-table__content" role="rowgroup">
|
|
19621
|
+
<ng-container rowOutlet />
|
|
19622
|
+
<ng-container noDataRowOutlet />
|
|
19623
|
+
</tbody>
|
|
19624
|
+
<tfoot role="rowgroup">
|
|
19625
|
+
<ng-container footerRowOutlet />
|
|
19626
|
+
</tfoot>
|
|
19627
|
+
} @else {
|
|
19628
|
+
<ng-container headerRowOutlet />
|
|
19629
|
+
<div class="et-table-body">
|
|
19630
|
+
<ng-container rowOutlet />
|
|
19631
|
+
<ng-container tableBusyOutlet />
|
|
19632
|
+
</div>
|
|
19633
|
+
<ng-container noDataRowOutlet />
|
|
19634
|
+
<ng-container footerRowOutlet />
|
|
19635
|
+
}
|
|
19636
|
+
`, host: {
|
|
19637
|
+
class: 'et-table et-data-table__table',
|
|
19638
|
+
'[class.et-table-fixed-layout]': 'fixedLayout',
|
|
19639
|
+
'[attr.aria-busy]': 'busy ? true : null',
|
|
19640
|
+
}, providers: [
|
|
19641
|
+
{ provide: CdkTable, useExisting: TableComponent },
|
|
19642
|
+
{ provide: CDK_TABLE, useExisting: TableComponent },
|
|
19643
|
+
{ provide: STICKY_POSITIONING_LISTENER, useValue: null },
|
|
19644
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet, TableBusyOutletDirective], styles: [":where(.et-table){--et-table-separator-color: #4c4c4c;--et-table-separator-width: 1px;--et-table-separator-style: solid;--et-table-header-row-min-height: 56px;--et-table-row-display: flex;--et-table-row-min-height: 48px;--et-table-row-inline-padding: 24px;--et-table-cell-display: flex;--et-table-cell-inline-padding: 0;--et-table-cell-block-padding: 0}.et-table{display:block;position:relative}.et-header-row{min-height:var(--et-table-header-row-min-height)}.et-row,.et-footer-row{min-height:var(--et-table-row-min-height)}.et-row,.et-header-row,.et-footer-row{display:var(--et-table-row-display);border-width:0;border-bottom-width:var(--et-table-separator-width);border-style:var(--et-table-separator-style);border-color:var(--et-table-separator-color);align-items:center;box-sizing:border-box}.et-cell,.et-header-cell,.et-footer-cell{padding-inline:var(--et-table-cell-inline-padding);padding-block:var(--et-table-cell-block-padding)}.et-cell:first-of-type,.et-header-cell:first-of-type,.et-footer-cell:first-of-type{padding-inline-start:var(--et-table-row-inline-padding)}.et-cell:last-of-type,.et-header-cell:last-of-type,.et-footer-cell:last-of-type{padding-inline-end:var(--et-table-row-inline-padding)}.et-cell,.et-header-cell,.et-footer-cell{flex:1;display:var(--et-table-cell-display);align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit;box-sizing:border-box}.et-table-sticky{position:sticky!important}.et-table{table-layout:auto;white-space:normal}.et-table tbody,.et-table tfoot,.et-table thead,.et-cell,.et-footer-cell,.et-header-row,.et-row,.et-footer-row,.et-table .et-header-cell{background:inherit}.et-table et-header-row.et-header-row,.et-table et-row.et-row,.et-table et-footer-row.et-footer-cell{height:unset}et-header-cell.et-header-cell,et-cell.et-cell,et-footer-cell.et-footer-cell{align-self:stretch}\n"] }]
|
|
19645
|
+
}], propDecorators: { _tableBusyOutlet: [{ type: i0.ViewChild, args: [i0.forwardRef(() => TableBusyOutletDirective), { isSignal: true }] }], _tableBusyComponent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TableBusyDirective), { isSignal: true }] }], busy: [{
|
|
19646
|
+
type: Input
|
|
19647
|
+
}] } });
|
|
19648
|
+
|
|
19649
|
+
const MAX_SAFE_INTEGER = 9007199254740991;
|
|
19650
|
+
|
|
19651
|
+
class CellDirective extends CdkCell {
|
|
19652
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CellDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19653
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: CellDirective, isStandalone: true, selector: "et-cell, td[et-cell]", host: { classAttribute: "et-cell et-data-table__cell" }, usesInheritance: true, ngImport: i0 }); }
|
|
19654
|
+
}
|
|
19655
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CellDirective, decorators: [{
|
|
19656
|
+
type: Directive,
|
|
19657
|
+
args: [{
|
|
19658
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
19659
|
+
selector: 'et-cell, td[et-cell]',
|
|
19660
|
+
host: {
|
|
19661
|
+
class: 'et-cell et-data-table__cell',
|
|
19662
|
+
},
|
|
19663
|
+
}]
|
|
19664
|
+
}] });
|
|
19665
|
+
|
|
19666
|
+
class CellDefDirective extends CdkCellDef {
|
|
19667
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CellDefDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19668
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: CellDefDirective, isStandalone: true, selector: "[etCellDef]", providers: [{ provide: CdkCellDef, useExisting: CellDefDirective }], usesInheritance: true, ngImport: i0 }); }
|
|
19669
|
+
}
|
|
19670
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: CellDefDirective, decorators: [{
|
|
19671
|
+
type: Directive,
|
|
19672
|
+
args: [{
|
|
19673
|
+
selector: '[etCellDef]',
|
|
19674
|
+
providers: [{ provide: CdkCellDef, useExisting: CellDefDirective }],
|
|
19675
|
+
}]
|
|
19676
|
+
}] });
|
|
19677
|
+
|
|
19678
|
+
class FooterCellDirective extends CdkFooterCell {
|
|
19679
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FooterCellDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19680
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: FooterCellDirective, isStandalone: true, selector: "et-footer-cell, td[et-footer-cell]", host: { classAttribute: "et-footer-cell et-data-table__cell" }, usesInheritance: true, ngImport: i0 }); }
|
|
19681
|
+
}
|
|
19682
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FooterCellDirective, decorators: [{
|
|
19683
|
+
type: Directive,
|
|
19684
|
+
args: [{
|
|
19685
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
19686
|
+
selector: 'et-footer-cell, td[et-footer-cell]',
|
|
19687
|
+
host: {
|
|
19688
|
+
class: 'et-footer-cell et-data-table__cell',
|
|
19689
|
+
},
|
|
19690
|
+
}]
|
|
19691
|
+
}] });
|
|
19692
|
+
|
|
19693
|
+
class FooterCellDefDirective extends CdkFooterCellDef {
|
|
19694
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FooterCellDefDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19695
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: FooterCellDefDirective, isStandalone: true, selector: "[etFooterCellDef]", providers: [{ provide: CdkFooterCellDef, useExisting: FooterCellDefDirective }], usesInheritance: true, ngImport: i0 }); }
|
|
19696
|
+
}
|
|
19697
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FooterCellDefDirective, decorators: [{
|
|
19698
|
+
type: Directive,
|
|
19699
|
+
args: [{
|
|
19700
|
+
selector: '[etFooterCellDef]',
|
|
19701
|
+
providers: [{ provide: CdkFooterCellDef, useExisting: FooterCellDefDirective }],
|
|
19702
|
+
}]
|
|
19703
|
+
}] });
|
|
19704
|
+
|
|
19705
|
+
class HeaderCellDirective extends CdkHeaderCell {
|
|
19706
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: HeaderCellDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19707
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: HeaderCellDirective, isStandalone: true, selector: "et-header-cell, th[et-header-cell]", host: { attributes: { "role": "columnheader" }, classAttribute: "et-header-cell et-data-table__header-cell" }, usesInheritance: true, ngImport: i0 }); }
|
|
19708
|
+
}
|
|
19709
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: HeaderCellDirective, decorators: [{
|
|
19710
|
+
type: Directive,
|
|
19711
|
+
args: [{
|
|
19712
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
19713
|
+
selector: 'et-header-cell, th[et-header-cell]',
|
|
19714
|
+
host: {
|
|
19715
|
+
class: 'et-header-cell et-data-table__header-cell',
|
|
19716
|
+
role: 'columnheader',
|
|
19717
|
+
},
|
|
19718
|
+
}]
|
|
19719
|
+
}] });
|
|
19720
|
+
|
|
19721
|
+
class HeaderCellDefDirective extends CdkHeaderCellDef {
|
|
19722
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: HeaderCellDefDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
18039
19723
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: HeaderCellDefDirective, isStandalone: true, selector: "[etHeaderCellDef]", providers: [{ provide: CdkHeaderCellDef, useExisting: HeaderCellDefDirective }], usesInheritance: true, ngImport: i0 }); }
|
|
18040
19724
|
}
|
|
18041
19725
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: HeaderCellDefDirective, decorators: [{
|
|
@@ -19626,69 +21310,9 @@ const TabImports = [
|
|
|
19626
21310
|
|
|
19627
21311
|
const TABS_CONFIG = new InjectionToken('TABS_CONFIG');
|
|
19628
21312
|
|
|
19629
|
-
const FLOATING_UI_PLACEMENTS = [
|
|
19630
|
-
'top',
|
|
19631
|
-
'left',
|
|
19632
|
-
'bottom',
|
|
19633
|
-
'right',
|
|
19634
|
-
'top-start',
|
|
19635
|
-
'top-end',
|
|
19636
|
-
'right-start',
|
|
19637
|
-
'right-end',
|
|
19638
|
-
'bottom-start',
|
|
19639
|
-
'bottom-end',
|
|
19640
|
-
'left-start',
|
|
19641
|
-
'left-end',
|
|
19642
|
-
];
|
|
19643
|
-
|
|
19644
|
-
/**
|
|
19645
|
-
* A utility function to enhance the ux of views containing forms.
|
|
19646
|
-
* It helps to prevent the user from accidentally losing unsaved form changes.
|
|
19647
|
-
*/
|
|
19648
|
-
const createNavigationDismissChecker = (config) => {
|
|
19649
|
-
assertInInjectionContext(createNavigationDismissChecker);
|
|
19650
|
-
const { form, compareFn, dismissCheckFn } = config;
|
|
19651
|
-
const currentFormValue = controlValueSignal(form);
|
|
19652
|
-
const hasChanges = computed(() => {
|
|
19653
|
-
const formValue = currentFormValue();
|
|
19654
|
-
if (!formValue)
|
|
19655
|
-
return false;
|
|
19656
|
-
return !(compareFn ? compareFn(formValue, defaultFormValue()) : equal(formValue, defaultFormValue()));
|
|
19657
|
-
}, ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
|
|
19658
|
-
const defaultFormValue = signal(config.defaultValue ?? form.getRawValue(), ...(ngDevMode ? [{ debugName: "defaultFormValue" }] : []));
|
|
19659
|
-
const runCheck = () => {
|
|
19660
|
-
const isDefaultFormValue = !hasChanges();
|
|
19661
|
-
if (isDefaultFormValue)
|
|
19662
|
-
return of(true);
|
|
19663
|
-
return dismissCheckFn(form.getRawValue());
|
|
19664
|
-
};
|
|
19665
|
-
const refreshDefaultFormValue = () => {
|
|
19666
|
-
defaultFormValue.set(form.getRawValue());
|
|
19667
|
-
};
|
|
19668
|
-
const restoreDefaultFormValue = () => {
|
|
19669
|
-
form.setValue(defaultFormValue());
|
|
19670
|
-
refreshDefaultFormValue();
|
|
19671
|
-
};
|
|
19672
|
-
return {
|
|
19673
|
-
runCheck,
|
|
19674
|
-
refreshDefaultFormValue,
|
|
19675
|
-
restoreDefaultFormValue,
|
|
19676
|
-
hasChanges,
|
|
19677
|
-
defaultFormValue: defaultFormValue.asReadonly(),
|
|
19678
|
-
};
|
|
19679
|
-
};
|
|
19680
|
-
|
|
19681
|
-
const injectRouterNavigationState = () => {
|
|
19682
|
-
const router = inject(Router);
|
|
19683
|
-
const navState = router.getCurrentNavigation()?.extras.state;
|
|
19684
|
-
return (navState || null);
|
|
19685
|
-
};
|
|
19686
|
-
|
|
19687
|
-
// Burst cache
|
|
19688
|
-
|
|
19689
21313
|
/**
|
|
19690
21314
|
* Generated bundle index. Do not edit.
|
|
19691
21315
|
*/
|
|
19692
21316
|
|
|
19693
|
-
export { ACCORDION_COMPONENT, ACCORDION_HINT_WRAPPER_DIRECTIVE, ACCORDION_LABEL_WRAPPER_DIRECTIVE, AccordionComponent, AccordionGroupComponent, AccordionHintDirective, AccordionHintWrapperDirective, AccordionImports, AccordionLabelDirective, AccordionLabelWrapperDirective, ActiveTabUnderlineBarManager, ActiveTabUnderlineDirective, AutosizeTextareaDirective, BRACKET_CONFIG_TOKEN, BRACKET_DEFAULT_CONFIG, BRACKET_MATCH_ID_TOKEN, BRACKET_ROUND_ID_TOKEN, BRACKET_TOKEN, Bracket, BracketComponent, BracketImports, BracketMatchComponent, BracketMatchDirective, index as BracketNew, BracketRoundDirective, BracketRoundHeaderComponent, BreadcrumbComponent, BreadcrumbImports, BreadcrumbItemDirective, BreadcrumbItemTemplateDirective, BreadcrumbOutletComponent, BreadcrumbTemplateDirective, ButtonComponent, ButtonDirective, ButtonImports, CAROUSEL_ITEM_NAV_TOKEN, CAROUSEL_ITEM_TOKEN, CAROUSEL_NEXT_BUTTON_TOKEN, CAROUSEL_PREVIOUS_BUTTON_TOKEN, CAROUSEL_TOGGLE_AUTO_PLAY_BUTTON_TOKEN, CAROUSEL_TOKEN, CHECKBOX_FIELD_TOKEN, CHECKBOX_GROUP_CONTROL_TOKEN, CHECKBOX_GROUP_TOKEN, CHECKBOX_TOKEN, CHEVRON_ICON, COLOR_INPUT_TOKEN, COMBOBOX_BODY_EMPTY_TEMPLATE_TOKEN, COMBOBOX_BODY_ERROR_TEMPLATE_TOKEN, COMBOBOX_BODY_LOADING_TEMPLATE_TOKEN, COMBOBOX_BODY_MORE_ITEMS_HINT_TEMPLATE_TOKEN, COMBOBOX_BODY_TOKEN, COMBOBOX_CONFIG_TOKEN, COMBOBOX_DEFAULT_CONFIG, COMBOBOX_OPTION_TEMPLATE_TOKEN, COMBOBOX_OPTION_TOKEN, COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, COMBOBOX_TOKEN, CarouselComponent, CarouselDirective, CarouselImports, CarouselItemComponent, CarouselItemDirective, CarouselItemNavComponent, CarouselItemNavDirective, CarouselNextButtonDirective, CarouselPreviousButtonDirective, CarouselToggleAutoPlayButtonDirective, CellDefDirective, CellDirective, CheckboxComponent, CheckboxDirective, CheckboxFieldComponent, CheckboxFieldDirective, CheckboxGroupComponent, CheckboxGroupControlDirective, CheckboxGroupDirective, CheckboxImports, ColorInputComponent, ColorInputDirective, ColumnDefDirective, ComboboxBodyComponent, ComboboxBodyEmptyTemplateDirective, ComboboxBodyErrorTemplateDirective, ComboboxBodyLoadingTemplateDirective, ComboboxBodyMoreItemsHintTemplateDirective, ComboboxComponent, ComboboxDirective, ComboboxImports, ComboboxOptionComponent, ComboboxOptionTemplateDirective, ComboboxSelectedOptionTemplateDirective, DATE_INPUT_FORMAT_TOKEN, DATE_INPUT_TOKEN, DATE_TIME_INPUT_FORMAT_TOKEN, DATE_TIME_INPUT_TOKEN, DEFAULT_DATE_INPUT_FORMAT, DEFAULT_DATE_TIME_INPUT_FORMAT, DEFAULT_TIME_INPUT_FORMAT, DYNAMIC_FORM_FIELD_TOKEN, DYNAMIC_FORM_GROUP_TOKEN, DateInputComponent, DateInputDirective, DateTimeInputComponent, DateTimeInputDirective, DecoratedFormFieldBase, DecoratedInputBase, DefaultValidatorErrorsService, DynamicFormFieldDirective, DynamicFormGroupDirective, EMAIL_INPUT_TOKEN, ET_OVERLAY_CONFIG_CLASS_KEYS, EXPOSE_INPUT_VARS_TOKEN, EmailInputComponent, EmailInputDirective, ErrorComponent, ExposeInputVarsDirective, FILTER_OVERLAY_CONFIG, FLOATING_UI_PLACEMENTS, FilterOverlayService, FooterCellDefDirective, FooterCellDirective, FooterRowComponent, FooterRowDefDirective, FormFieldStateService, FormGroupStateService, HeaderCellDefDirective, HeaderCellDirective, HeaderRowComponent, HeaderRowDefDirective, ICONS_TOKEN, ICON_DIRECTIVE_TOKEN, IMAGE_CONFIG_TOKEN, INPUT_PREFIX_TOKEN, INPUT_SUFFIX_TOKEN, INPUT_TOKEN, IconDirective, IconImports, IfInputEmptyDirective, IfInputFilledDirective, IfSupportsShowPickerDirective, InlineTabBodyComponent, InlineTabBodyHostDirective, InlineTabChangeEvent, InlineTabComponent, InlineTabContentDirective, InlineTabHeaderComponent, InlineTabLabelDirective, InlineTabLabelWrapperDirective, InlineTabsComponent, InputBase, InputDirective, InputFieldComponent, InputImports, InputPrefixDirective, InputStateService, InputSuffixDirective, LABEL_TOKEN, LabelComponent, LabelImports, LabelSuffixDirective, MASONRY_ITEM_TOKEN, MAX_SAFE_INTEGER, MENU, MENU_CHECKBOX_GROUP_TOKEN, MENU_CONTAINER, MENU_GROUP_TITLE_TOKEN, MENU_GROUP_TOKEN, MENU_ITEM_TOKEN, MENU_RADIO_GROUP_TOKEN, MENU_SEARCH_TEMPLATE_TOKEN, MENU_TEMPLATE, MENU_TRIGGER_TOKEN, MasonryComponent, MasonryImports, MasonryItemComponent, MenuCheckboxGroupDirective, MenuCheckboxItemComponent, MenuComponent, MenuContainerComponent, MenuGroupDirective, MenuGroupTitleDirective, MenuImports, MenuItemDirective, MenuRadioGroupDirective, MenuRadioItemComponent, MenuSearchTemplateDirective, MenuTriggerDirective, NATIVE_INPUT_REF_TOKEN, NATIVE_SELECT_INPUT_TOKEN, NATIVE_SELECT_OPTION_TOKEN, NUMBER_INPUT_TOKEN, NativeInputRefDirective, NativeSelectImports, NativeSelectInputComponent, NativeSelectInputDirective, NativeSelectOptionComponent, NativeSelectOptionDirective, NavTabLinkComponent, NavTabsComponent, NavTabsOutletComponent, NewBracketComponent, NewBracketDefaultMatchComponent, NewBracketDefaultRoundHeaderComponent, NoDataRowDirective, NumberInputComponent, NumberInputDirective, OVERLAY_BACK_OR_CLOSE_TOKEN, OVERLAY_BODY_TOKEN, OVERLAY_CLOSE_BLOCKER_TOKEN, OVERLAY_CONFIG, OVERLAY_DATA, OVERLAY_FOOTER_TOKEN, OVERLAY_HEADER_TEMPLATE_TOKEN, OVERLAY_HEADER_TOKEN, OVERLAY_MAIN_TOKEN, OVERLAY_QUERY_PARAM_INPUT_NAME, OVERLAY_ROUTER_CONFIG_TOKEN, OVERLAY_ROUTER_LINK_TOKEN, OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN, OVERLAY_ROUTER_OUTLET_TOKEN, OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN, OverlayBackOrCloseDirective, OverlayBodyComponent, OverlayCloseBlockerDirective, OverlayCloseDirective, OverlayContainerComponent, OverlayFooterDirective, OverlayHandlerLinkDirective, OverlayHeaderDirective, OverlayHeaderTemplateDirective, OverlayImports, OverlayMainDirective, OverlayOriginCloneComponent, OverlayRef, OverlayRouteHeaderTemplateOutletComponent, OverlayRouterLinkDirective, OverlayRouterOutletComponent, OverlayRouterOutletDisabledTemplateDirective, OverlayRouterService, OverlaySharedRouteTemplateDirective, OverlaySharedRouteTemplateOutletComponent, OverlaySidebarComponent, OverlaySidebarPageComponent, OverlayTitleDirective, OverlayWithRoutingImports, OverlayWithSidebarImports, PASSWORD_INPUT_TOKEN, PROGRESS_SPINNER_DEFAULT_OPTIONS, PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, PaginatedTabHeaderDirective, PaginationComponent, PaginationHeadService, PaginationImports, PaginationLinkDirective, PasswordInputComponent, PasswordInputDirective, PasswordInputToggleComponent, PictureComponent, ProgressSpinnerComponent, QUERY_ERROR_TOKEN, QueryButtonComponent, QueryButtonDirective, QueryErrorComponent, QueryErrorDirective, RADIO_FIELD_TOKEN, RADIO_GROUP_TOKEN, RADIO_TOKEN, RICH_FILTER_BUTTON_SLOT_TOKEN, RICH_FILTER_BUTTON_TOKEN, RICH_FILTER_CONTENT_TOKEN, RICH_FILTER_TOP_TOKEN, RadioComponent, RadioDirective, RadioFieldComponent, RadioFieldDirective, RadioGroupComponent, RadioGroupDirective, RadioImports, RichFilterButtonDirective, RichFilterButtonSlotDirective, RichFilterContentDirective, RichFilterHostComponent, RichFilterImports, RichFilterTopDirective, RowComponent, RowDefDirective, SCROLLABLE_IGNORE_CHILD_ATTRIBUTE, SCROLLABLE_IGNORE_CHILD_TOKEN, SCROLLABLE_IS_ACTIVE_CHILD_ATTRIBUTE, SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, SCROLLABLE_LOADING_TEMPLATE_TOKEN, SCROLLABLE_PLACEHOLDER_ITEM_TEMPLATE_TOKEN, SCROLLABLE_PLACEHOLDER_OVERLAY_TEMPLATE_TOKEN, SEARCH_INPUT_TOKEN, SEGMENTED_BUTTON_FIELD_TOKEN, SEGMENTED_BUTTON_GROUP_TOKEN, SEGMENTED_BUTTON_TOKEN, SELECTION_LIST_FIELD, SELECTION_LIST_OPTION, SELECT_BODY_TOKEN, SELECT_FIELD_TOKEN, SELECT_OPTION_TOKEN, SELECT_TOKEN, SHOW_PICKER_TRIGGER_TOKEN, SIDEBAR_OVERLAY_CONFIG, SLIDER_THUMB_CONTENT_TEMPLATE_TOKEN, SLIDE_TOGGLE_TOKEN, SORT_DEFAULT_OPTIONS, SORT_HEADER_COLUMN_DEF, SORT_HEADER_INTL_PROVIDER, SORT_HEADER_INTL_PROVIDER_FACTORY, STATIC_FORM_FIELD_TOKEN, STATIC_FORM_GROUP_TOKEN, ScrollableComponent, ScrollableIgnoreChildDirective, ScrollableImports, ScrollableIsActiveChildDirective, ScrollableLoadingTemplateDirective, ScrollablePlaceholderComponent, ScrollablePlaceholderItemTemplateDirective, ScrollablePlaceholderOverlayTemplateDirective, SearchInputClearComponent, SearchInputComponent, SearchInputDirective, SegmentedButtonComponent, SegmentedButtonDirective, SegmentedButtonFieldComponent, SegmentedButtonFieldDirective, SegmentedButtonGroupComponent, SegmentedButtonGroupDirective, SegmentedButtonImports, SelectBodyComponent, SelectBodyDirective, SelectComponent, SelectDirective, SelectFieldComponent, SelectFieldDirective, SelectImports, SelectOptionComponent, SelectOptionDirective, SelectionListFieldComponent, SelectionListFieldDirective, SelectionListImports, SelectionListOptionComponent, SelectionListOptionDirective, ShowPickerTriggerDirective, SidebarOverlayService, SkeletonComponent, SkeletonImports, SkeletonItemComponent, SlideToggleComponent, SlideToggleDirective, SlideToggleFieldComponent, SlideToggleImports, SliderComponent, SliderFieldComponent, SliderImports, SliderThumbContentTemplateDirective, SortDirective, SortHeaderComponent, SortHeaderIntl, SortImports, StaticFormFieldDirective, StaticFormGroupDirective, SwipeHandlerService, TAB, TABS_CONFIG, TAB_CONTENT, TAB_GROUP, TAB_LABEL, TEL_INPUT_TOKEN, TEXTAREA_INPUT_TOKEN, TEXT_INPUT_TOKEN, TIMES_ICON, TIME_INPUT_FORMAT_TOKEN, TIME_INPUT_TOKEN, TOGGLETIP, TOGGLETIP_CONFIG, TOGGLETIP_DEFAULT_CONFIG, TOGGLETIP_DIRECTIVE, TOGGLETIP_TEMPLATE, TOGGLETIP_TEXT, TOOLTIP, TOOLTIP_CONFIG, TOOLTIP_DEFAULT_CONFIG, TOOLTIP_DIRECTIVE, TOOLTIP_TEMPLATE, TOOLTIP_TEXT, TabImports, TableBusyDirective, TableBusyOutletDirective, TableComponent, TableDataSource, TableImports, TelInputComponent, TelInputDirective, TextColumnComponent, TextInputComponent, TextInputDirective, TextareaInputComponent, TextareaInputDirective, TimeInputComponent, TimeInputDirective, ToggletipCloseDirective, ToggletipComponent, ToggletipDirective, ToggletipImports, TooltipComponent, TooltipDirective, TooltipImports, VALIDATOR_ERROR_SERVICE_TOKEN, WRITEABLE_INPUT_TOKEN, WRITEABLE_INPUT_VALUE_ACCESSOR, WriteableInputDirective, _MAT_INK_BAR_POSITIONER, _MAT_INK_BAR_POSITIONER_FACTORY, abortFullscreenAnimation, accordionAnimations, anchoredDialogOverlayStrategy, bottomSheetOverlayStrategy, cleanupFullscreenAnimation, cleanupFullscreenAnimationStyles, createBracketConfig, createComboboxConfig, createFormChangesTracker, createNavigationDismissChecker, createOverlayDismissChecker, createOverlayHandler, createOverlayHandlerWithQueryParamLifecycle, createToggletipConfig, createTooltipConfig, defaultSubmitButtonConfigFn, dialogOverlayStrategy, enableDragToDismiss, exactMatchOptions, extractFirstImageUrl, findNextRelevantHtmlElement, fullScreenDialogOverlayStrategy, getClosestOverlay, getIntersectionInfo, getOriginCoordinatesAndDimensions, injectAnchoredDialogStrategy, injectAnchoredDialogStrategyDefaults, injectBottomSheetStrategy, injectBottomSheetStrategyDefaults, injectBreadcrumbManager, injectDialogStrategy, injectDialogStrategyDefaults, injectFocusRegistry, injectFullscreenDialogStrategy, injectFullscreenDialogStrategyDefaults, injectLeftSheetStrategy, injectLeftSheetStrategyDefaults, injectOverlayManager, injectOverlayScrollBlocker, injectRightSheetStrategy, injectRightSheetStrategyDefaults, injectRouterNavigationState, injectTopSheetStrategy, injectTopSheetStrategyDefaults, isEmptyArray, isHtmlElement, isObjectArray, isPointerEvent, isPrimitiveArray, isScrollableChildActive, isScrollableChildIgnored, isTouchEvent$2 as isTouchEvent, isUpperBracketMatch, leftSheetOverlayStrategy, mergeOverlayBreakpointConfigs, normalizePictureSizes, normalizePictureSource, normalizeRoundType, orderRounds, orderRoundsByRoundNumber, paginate, provideAnchoredDialogStrategy, provideAnchoredDialogStrategyDefaults, provideBottomSheetStrategy, provideBottomSheetStrategyDefaults, provideBracketConfig, provideBreadcrumbManager, provideComboboxConfig, provideDateFormat, provideDateTimeFormat, provideDialogStrategy, provideDialogStrategyDefaults, provideFilterOverlayConfig, provideFocusRegistry, provideFullscreenDialogStrategy, provideFullscreenDialogStrategyDefaults, provideIcons, provideImageConfig, provideLeftSheetStrategy, provideLeftSheetStrategyDefaults, provideOverlay, provideOverlayManager, provideOverlayRouterConfig, provideOverlayScrollBlocker, provideRightSheetStrategy, provideRightSheetStrategyDefaults, provideSidebarOverlayConfig, provideSort, provideTimeFormat, provideToggletipConfig, provideTooltipConfig, provideTopSheetStrategy, provideTopSheetStrategyDefaults, provideValidatorErrorsService, rightSheetOverlayStrategy, signalVisibilityChangeClasses, startFullscreenEnterAnimation, startFullscreenLeaveAnimation, subsetMatchOptions, tabAnimations, topSheetOverlayStrategy, transformingBottomSheetToDialogOverlayStrategy, transformingFullScreenDialogToDialogOverlayStrategy, transformingFullScreenDialogToRightSheetOverlayStrategy };
|
|
21317
|
+
export { ACCORDION_COMPONENT, ACCORDION_HINT_WRAPPER_DIRECTIVE, ACCORDION_LABEL_WRAPPER_DIRECTIVE, AccordionComponent, AccordionGroupComponent, AccordionHintDirective, AccordionHintWrapperDirective, AccordionImports, AccordionLabelDirective, AccordionLabelWrapperDirective, ActiveTabUnderlineBarManager, ActiveTabUnderlineDirective, AutosizeTextareaDirective, BRACKET_CONFIG_TOKEN, BRACKET_DEFAULT_CONFIG, BRACKET_MATCH_ID_TOKEN, BRACKET_ROUND_ID_TOKEN, BRACKET_TOKEN, Bracket, BracketComponent, BracketImports, BracketMatchComponent, BracketMatchDirective, index as BracketNew, BracketRoundDirective, BracketRoundHeaderComponent, BreadcrumbComponent, BreadcrumbImports, BreadcrumbItemDirective, BreadcrumbItemTemplateDirective, BreadcrumbOutletComponent, BreadcrumbTemplateDirective, ButtonComponent, ButtonDirective, ButtonImports, CAROUSEL_ITEM_NAV_TOKEN, CAROUSEL_ITEM_TOKEN, CAROUSEL_NEXT_BUTTON_TOKEN, CAROUSEL_PREVIOUS_BUTTON_TOKEN, CAROUSEL_TOGGLE_AUTO_PLAY_BUTTON_TOKEN, CAROUSEL_TOKEN, CHECKBOX_FIELD_TOKEN, CHECKBOX_GROUP_CONTROL_TOKEN, CHECKBOX_GROUP_TOKEN, CHECKBOX_TOKEN, CHEVRON_ICON, COLOR_INPUT_TOKEN, COMBOBOX_BODY_EMPTY_TEMPLATE_TOKEN, COMBOBOX_BODY_ERROR_TEMPLATE_TOKEN, COMBOBOX_BODY_LOADING_TEMPLATE_TOKEN, COMBOBOX_BODY_MORE_ITEMS_HINT_TEMPLATE_TOKEN, COMBOBOX_BODY_TOKEN, COMBOBOX_CONFIG_TOKEN, COMBOBOX_DEFAULT_CONFIG, COMBOBOX_OPTION_TEMPLATE_TOKEN, COMBOBOX_OPTION_TOKEN, COMBOBOX_SELECTED_OPTION_TEMPLATE_TOKEN, COMBOBOX_TOKEN, CarouselComponent, CarouselDirective, CarouselImports, CarouselItemComponent, CarouselItemDirective, CarouselItemNavComponent, CarouselItemNavDirective, CarouselNextButtonDirective, CarouselPreviousButtonDirective, CarouselToggleAutoPlayButtonDirective, CellDefDirective, CellDirective, CheckboxComponent, CheckboxDirective, CheckboxFieldComponent, CheckboxFieldDirective, CheckboxGroupComponent, CheckboxGroupControlDirective, CheckboxGroupDirective, CheckboxImports, ColorInputComponent, ColorInputDirective, ColumnDefDirective, ComboboxBodyComponent, ComboboxBodyEmptyTemplateDirective, ComboboxBodyErrorTemplateDirective, ComboboxBodyLoadingTemplateDirective, ComboboxBodyMoreItemsHintTemplateDirective, ComboboxComponent, ComboboxDirective, ComboboxImports, ComboboxOptionComponent, ComboboxOptionTemplateDirective, ComboboxSelectedOptionTemplateDirective, DAILYMOTION_PLAYER_TOKEN, DATE_INPUT_FORMAT_TOKEN, DATE_INPUT_TOKEN, DATE_TIME_INPUT_FORMAT_TOKEN, DATE_TIME_INPUT_TOKEN, DEFAULT_DATE_INPUT_FORMAT, DEFAULT_DATE_TIME_INPUT_FORMAT, DEFAULT_TIME_INPUT_FORMAT, DYNAMIC_FORM_FIELD_TOKEN, DYNAMIC_FORM_GROUP_TOKEN, DailymotionPlayerComponent, DailymotionPlayerDirective, DateInputComponent, DateInputDirective, DateTimeInputComponent, DateTimeInputDirective, DecoratedFormFieldBase, DecoratedInputBase, DefaultValidatorErrorsService, DynamicFormFieldDirective, DynamicFormGroupDirective, EMAIL_INPUT_TOKEN, ET_OVERLAY_CONFIG_CLASS_KEYS, EXPOSE_INPUT_VARS_TOKEN, EmailInputComponent, EmailInputDirective, ErrorComponent, ExposeInputVarsDirective, FACEBOOK_PLAYER_TOKEN, FILTER_OVERLAY_CONFIG, FLOATING_UI_PLACEMENTS, FacebookPlayerComponent, FacebookPlayerDirective, FilterOverlayService, FooterCellDefDirective, FooterCellDirective, FooterRowComponent, FooterRowDefDirective, FormFieldStateService, FormGroupStateService, HeaderCellDefDirective, HeaderCellDirective, HeaderRowComponent, HeaderRowDefDirective, ICONS_TOKEN, ICON_DIRECTIVE_TOKEN, IMAGE_CONFIG_TOKEN, INPUT_PREFIX_TOKEN, INPUT_SUFFIX_TOKEN, INPUT_TOKEN, IconDirective, IconImports, IfInputEmptyDirective, IfInputFilledDirective, IfSupportsShowPickerDirective, InlineTabBodyComponent, InlineTabBodyHostDirective, InlineTabChangeEvent, InlineTabComponent, InlineTabContentDirective, InlineTabHeaderComponent, InlineTabLabelDirective, InlineTabLabelWrapperDirective, InlineTabsComponent, InputBase, InputDirective, InputFieldComponent, InputImports, InputPrefixDirective, InputStateService, InputSuffixDirective, KICK_PLAYER_TOKEN, KickPlayerComponent, KickPlayerDirective, LABEL_TOKEN, LabelComponent, LabelImports, LabelSuffixDirective, MASONRY_ITEM_TOKEN, MAX_SAFE_INTEGER, MENU, MENU_CHECKBOX_GROUP_TOKEN, MENU_CONTAINER, MENU_GROUP_TITLE_TOKEN, MENU_GROUP_TOKEN, MENU_ITEM_TOKEN, MENU_RADIO_GROUP_TOKEN, MENU_SEARCH_TEMPLATE_TOKEN, MENU_TEMPLATE, MENU_TRIGGER_TOKEN, MasonryComponent, MasonryImports, MasonryItemComponent, MenuCheckboxGroupDirective, MenuCheckboxItemComponent, MenuComponent, MenuContainerComponent, MenuGroupDirective, MenuGroupTitleDirective, MenuImports, MenuItemDirective, MenuRadioGroupDirective, MenuRadioItemComponent, MenuSearchTemplateDirective, MenuTriggerDirective, NATIVE_INPUT_REF_TOKEN, NATIVE_SELECT_INPUT_TOKEN, NATIVE_SELECT_OPTION_TOKEN, NUMBER_INPUT_TOKEN, NativeInputRefDirective, NativeSelectImports, NativeSelectInputComponent, NativeSelectInputDirective, NativeSelectOptionComponent, NativeSelectOptionDirective, NavTabLinkComponent, NavTabsComponent, NavTabsOutletComponent, NewBracketComponent, NewBracketDefaultMatchComponent, NewBracketDefaultRoundHeaderComponent, NoDataRowDirective, NumberInputComponent, NumberInputDirective, OVERLAY_BACK_OR_CLOSE_TOKEN, OVERLAY_BODY_TOKEN, OVERLAY_CLOSE_BLOCKER_TOKEN, OVERLAY_CONFIG, OVERLAY_DATA, OVERLAY_FOOTER_TOKEN, OVERLAY_HEADER_TEMPLATE_TOKEN, OVERLAY_HEADER_TOKEN, OVERLAY_MAIN_TOKEN, OVERLAY_QUERY_PARAM_INPUT_NAME, OVERLAY_ROUTER_CONFIG_TOKEN, OVERLAY_ROUTER_LINK_TOKEN, OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN, OVERLAY_ROUTER_OUTLET_TOKEN, OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN, OverlayBackOrCloseDirective, OverlayBodyComponent, OverlayCloseBlockerDirective, OverlayCloseDirective, OverlayContainerComponent, OverlayFooterDirective, OverlayHandlerLinkDirective, OverlayHeaderDirective, OverlayHeaderTemplateDirective, OverlayImports, OverlayMainDirective, OverlayOriginCloneComponent, OverlayRef, OverlayRouteHeaderTemplateOutletComponent, OverlayRouterLinkDirective, OverlayRouterOutletComponent, OverlayRouterOutletDisabledTemplateDirective, OverlayRouterService, OverlaySharedRouteTemplateDirective, OverlaySharedRouteTemplateOutletComponent, OverlaySidebarComponent, OverlaySidebarPageComponent, OverlayTitleDirective, OverlayWithRoutingImports, OverlayWithSidebarImports, PASSWORD_INPUT_TOKEN, PROGRESS_SPINNER_DEFAULT_OPTIONS, PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, PaginatedTabHeaderDirective, PaginationComponent, PaginationHeadService, PaginationImports, PaginationLinkDirective, PasswordInputComponent, PasswordInputDirective, PasswordInputToggleComponent, PictureComponent, ProgressSpinnerComponent, QUERY_ERROR_TOKEN, QueryButtonComponent, QueryButtonDirective, QueryErrorComponent, QueryErrorDirective, RADIO_FIELD_TOKEN, RADIO_GROUP_TOKEN, RADIO_TOKEN, RICH_FILTER_BUTTON_SLOT_TOKEN, RICH_FILTER_BUTTON_TOKEN, RICH_FILTER_CONTENT_TOKEN, RICH_FILTER_TOP_TOKEN, RadioComponent, RadioDirective, RadioFieldComponent, RadioFieldDirective, RadioGroupComponent, RadioGroupDirective, RadioImports, RichFilterButtonDirective, RichFilterButtonSlotDirective, RichFilterContentDirective, RichFilterHostComponent, RichFilterImports, RichFilterTopDirective, RowComponent, RowDefDirective, SCROLLABLE_IGNORE_CHILD_ATTRIBUTE, SCROLLABLE_IGNORE_CHILD_TOKEN, SCROLLABLE_IS_ACTIVE_CHILD_ATTRIBUTE, SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, SCROLLABLE_LOADING_TEMPLATE_TOKEN, SCROLLABLE_PLACEHOLDER_ITEM_TEMPLATE_TOKEN, SCROLLABLE_PLACEHOLDER_OVERLAY_TEMPLATE_TOKEN, SEARCH_INPUT_TOKEN, SEGMENTED_BUTTON_FIELD_TOKEN, SEGMENTED_BUTTON_GROUP_TOKEN, SEGMENTED_BUTTON_TOKEN, SELECTION_LIST_FIELD, SELECTION_LIST_OPTION, SELECT_BODY_TOKEN, SELECT_FIELD_TOKEN, SELECT_OPTION_TOKEN, SELECT_TOKEN, SHOW_PICKER_TRIGGER_TOKEN, SIDEBAR_OVERLAY_CONFIG, SLIDER_THUMB_CONTENT_TEMPLATE_TOKEN, SLIDE_TOGGLE_TOKEN, SOOP_PLAYER_TOKEN, SORT_DEFAULT_OPTIONS, SORT_HEADER_COLUMN_DEF, SORT_HEADER_INTL_PROVIDER, SORT_HEADER_INTL_PROVIDER_FACTORY, STATIC_FORM_FIELD_TOKEN, STATIC_FORM_GROUP_TOKEN, STREAM_CONSENT_CONTENT_TOKEN, STREAM_CONSENT_PLACEHOLDER_TOKEN, STREAM_CONSENT_TOKEN, STREAM_PLAYER_TOKEN, STREAM_USER_CONSENT_PROVIDER_TOKEN, ScrollableComponent, ScrollableIgnoreChildDirective, ScrollableImports, ScrollableIsActiveChildDirective, ScrollableLoadingTemplateDirective, ScrollablePlaceholderComponent, ScrollablePlaceholderItemTemplateDirective, ScrollablePlaceholderOverlayTemplateDirective, SearchInputClearComponent, SearchInputComponent, SearchInputDirective, SegmentedButtonComponent, SegmentedButtonDirective, SegmentedButtonFieldComponent, SegmentedButtonFieldDirective, SegmentedButtonGroupComponent, SegmentedButtonGroupDirective, SegmentedButtonImports, SelectBodyComponent, SelectBodyDirective, SelectComponent, SelectDirective, SelectFieldComponent, SelectFieldDirective, SelectImports, SelectOptionComponent, SelectOptionDirective, SelectionListFieldComponent, SelectionListFieldDirective, SelectionListImports, SelectionListOptionComponent, SelectionListOptionDirective, ShowPickerTriggerDirective, SidebarOverlayService, SkeletonComponent, SkeletonImports, SkeletonItemComponent, SlideToggleComponent, SlideToggleDirective, SlideToggleFieldComponent, SlideToggleImports, SliderComponent, SliderFieldComponent, SliderImports, SliderThumbContentTemplateDirective, SoopPlayerComponent, SoopPlayerDirective, SortDirective, SortHeaderComponent, SortHeaderIntl, SortImports, StaticFormFieldDirective, StaticFormGroupDirective, StreamConsentAcceptDirective, StreamConsentComponent, StreamConsentContentDirective, StreamConsentDirective, StreamConsentPlaceholderDirective, StreamImports, StreamPipChromeComponent, TAB, TABS_CONFIG, TAB_CONTENT, TAB_GROUP, TAB_LABEL, TEL_INPUT_TOKEN, TEXTAREA_INPUT_TOKEN, TEXT_INPUT_TOKEN, TIKTOK_PLAYER_TOKEN, TIMES_ICON, TIME_INPUT_FORMAT_TOKEN, TIME_INPUT_TOKEN, TOGGLETIP, TOGGLETIP_CONFIG, TOGGLETIP_DEFAULT_CONFIG, TOGGLETIP_DIRECTIVE, TOGGLETIP_TEMPLATE, TOGGLETIP_TEXT, TOOLTIP, TOOLTIP_CONFIG, TOOLTIP_DEFAULT_CONFIG, TOOLTIP_DIRECTIVE, TOOLTIP_TEMPLATE, TOOLTIP_TEXT, TWITCH_PLAYER_TOKEN, TabImports, TableBusyDirective, TableBusyOutletDirective, TableComponent, TableDataSource, TableImports, TelInputComponent, TelInputDirective, TextColumnComponent, TextInputComponent, TextInputDirective, TextareaInputComponent, TextareaInputDirective, TikTokPlayerComponent, TikTokPlayerDirective, TimeInputComponent, TimeInputDirective, ToggletipCloseDirective, ToggletipComponent, ToggletipDirective, ToggletipImports, TooltipComponent, TooltipDirective, TooltipImports, TwitchPlayerComponent, TwitchPlayerDirective, VALIDATOR_ERROR_SERVICE_TOKEN, VIMEO_PLAYER_TOKEN, VimeoPlayerComponent, VimeoPlayerDirective, WRITEABLE_INPUT_TOKEN, WRITEABLE_INPUT_VALUE_ACCESSOR, WriteableInputDirective, YOUTUBE_PLAYER_SLOT_TOKEN, YOUTUBE_PLAYER_TOKEN, YoutubePlayerComponent, YoutubePlayerDirective, YoutubePlayerParamsDirective, YoutubePlayerSlotComponent, YoutubePlayerSlotDirective, _MAT_INK_BAR_POSITIONER, _MAT_INK_BAR_POSITIONER_FACTORY, abortFullscreenAnimation, accordionAnimations, anchoredDialogOverlayStrategy, animateWithFixedWrapper, bottomSheetOverlayStrategy, cleanupFullscreenAnimation, cleanupFullscreenAnimationStyles, createBracketConfig, createComboboxConfig, createFormChangesTracker, createNavigationDismissChecker, createOverlayDismissChecker, createOverlayHandler, createOverlayHandlerWithQueryParamLifecycle, createSwipeTracker, createToggletipConfig, createTooltipConfig, defaultSubmitButtonConfigFn, dialogOverlayStrategy, enableDragToDismiss, exactMatchOptions, extractFirstImageUrl, findNextRelevantHtmlElement, fullScreenDialogOverlayStrategy, getClosestOverlay, getOriginCoordinatesAndDimensions, injectAnchoredDialogStrategy, injectAnchoredDialogStrategyDefaults, injectBottomSheetStrategy, injectBottomSheetStrategyDefaults, injectBreadcrumbManager, injectDialogStrategy, injectDialogStrategyDefaults, injectFocusRegistry, injectFullscreenDialogStrategy, injectFullscreenDialogStrategyDefaults, injectLeftSheetStrategy, injectLeftSheetStrategyDefaults, injectOverlayManager, injectOverlayScrollBlocker, injectRightSheetStrategy, injectRightSheetStrategyDefaults, injectRouterNavigationState, injectStreamManager, injectStreamPipManager, injectStreamScriptLoader, injectStreamUserConsentProvider, injectTopSheetStrategy, injectTopSheetStrategyDefaults, isEmptyArray, isHtmlElement, isObjectArray, isPointerEvent, isPrimitiveArray, isScrollableChildActive, isScrollableChildIgnored, isTouchEvent$1 as isTouchEvent, isUpperBracketMatch, leftSheetOverlayStrategy, mergeOverlayBreakpointConfigs, normalizePictureSizes, normalizePictureSource, normalizeRoundType, orderRounds, orderRoundsByRoundNumber, paginate, pipMoveBefore, provideAnchoredDialogStrategy, provideAnchoredDialogStrategyDefaults, provideBottomSheetStrategy, provideBottomSheetStrategyDefaults, provideBracketConfig, provideBreadcrumbManager, provideComboboxConfig, provideDateFormat, provideDateTimeFormat, provideDialogStrategy, provideDialogStrategyDefaults, provideFilterOverlayConfig, provideFocusRegistry, provideFullscreenDialogStrategy, provideFullscreenDialogStrategyDefaults, provideIcons, provideImageConfig, provideLeftSheetStrategy, provideLeftSheetStrategyDefaults, provideOverlay, provideOverlayManager, provideOverlayRouterConfig, provideOverlayScrollBlocker, provideRightSheetStrategy, provideRightSheetStrategyDefaults, provideSidebarOverlayConfig, provideSort, provideStreamManager, provideStreamPipManager, provideTimeFormat, provideToggletipConfig, provideTooltipConfig, provideTopSheetStrategy, provideTopSheetStrategyDefaults, provideValidatorErrorsService, rightSheetOverlayStrategy, signalVisibilityChangeClasses, startFullscreenEnterAnimation, startFullscreenLeaveAnimation, subsetMatchOptions, tabAnimations, topSheetOverlayStrategy, transformingBottomSheetToDialogOverlayStrategy, transformingFullScreenDialogToDialogOverlayStrategy, transformingFullScreenDialogToRightSheetOverlayStrategy };
|
|
19694
21318
|
//# sourceMappingURL=ethlete-cdk.mjs.map
|