@ethlete/components 1.0.0-next.37 → 1.0.0-next.39
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 +35 -0
- package/fesm2022/ethlete-components.mjs +1953 -124
- package/fesm2022/ethlete-components.mjs.map +1 -1
- package/generators/component/component-names.js +19 -0
- package/generators/component/component-templates.js +211 -0
- package/generators/component/generator.js +144 -0
- package/generators/component/schema.json +74 -0
- package/generators/component/workspace-edits.js +92 -0
- package/generators/generators.json +5 -0
- package/package.json +1 -1
- package/types/ethlete-components.d.ts +970 -70
|
@@ -4,9 +4,9 @@ import * as i1 from '@ethlete/core';
|
|
|
4
4
|
import { injectHostElement, RuntimeError, createComponentId, ProvideColorDirective, defineLabels, toProvideFn, toInjectFn, toToken, injectStyleManager, SurfaceInteractiveDirective, createCanAnimateSignal, ColorInteractiveDirective, injectSuccessTheme, injectWarningTheme, injectErrorTheme, injectLocale, defineStaticRootProvider, inferMimeType, injectColorThemes, injectRenderer, ProvideSurfaceDirective, COLOR_PROVIDER, SURFACE_PROVIDER, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceContextTracker, injectBoundaryElement, ANIMATED_LIFECYCLE_TOKEN, resolveAppRootColorProvider, resolveSurfaceByElevation, createCssSurfaceName, provideBoundaryElement, AnimatedLifecycleDirective, injectBreakpointObserver, isHTMLElement, equal, animationDebugLog, defineRootProvider, injectOverlayRuntime, anchoredOverlayPosition, enableAnchoredOverlayPositionExtras, randomId, forceReflow, nextFrame, elementCanScroll, matchesReducedMotion, createSwipeTracker, ScrollObserverDirective, signalElementScrollState, ScrollObserverStartDirective, ScrollObserverEndDirective, applyHostListener, injectQueryParam, createUnsavedChangesTracker, createDocumentElementSignal, defineProvider, fromNextFrame, injectRoute, AnimatedIfDirective, signalElementDimensions, applyInitialFocus, syncSignal, AutoSurfaceDirective, setInputSignal, injectTemplateRef, signalHostElementScrollState, applyStructuredDataBinding, typedBreakpointTransform, signalElementChildren, signalElementIntersection, signalHostAttributes, signalHostClasses, signalHostStyles, getScrollContainerTarget, getScrollItemTarget, getElementScrollCoordinates, provideBreakpointInstance, signalClasses, useCursorDragScroll, signalStyles, getScrollSnapTarget, injectPrefersReducedMotion, injectIsDocumentVisible, signalHostElementIntersection, clamp as clamp$1, copyToClipboard, injectAnimatedBlockSize, injectObserveBreakpoint, AnimatableDirective, ColorInteractiveContainerDirective, ColorInteractiveExcludeDirective, createFlipAnimation, createFlipAnimationGroup, ColorInteractiveHasFocusDirective, htmlToMarkdown, markdownToHtml, injectHasTouchInput, signalHostElementDimensions, DragHandleDirective, ResizeHandlesComponent, numberBreakpointTransform, applyLinkBinding, applyHeadTitleBinding, injectViewportSize, injectFocusVisibleTracker, getFocusableElements, dragGestureFrom, injectRouterEvent, canUseSessionMemory, createAutoSessionMemoryKey, createSessionMemory } from '@ethlete/core';
|
|
5
5
|
import { NgTemplateOutlet, NgComponentOutlet, Location, DOCUMENT as DOCUMENT$1, isPlatformBrowser } from '@angular/common';
|
|
6
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
-
import { format, startOfWeek, startOfDay, endOfWeek, isBefore, addDays, endOfMonth, startOfMonth, isSameYear, isSameMonth, isSameDay, startOfYear, isAfter, addYears, addMonths, setMonth, setYear, getDate, setDate, lastDayOfMonth, getWeek, endOfYear, parse, isValid, setSeconds, setMinutes, setHours, setMilliseconds, endOfDay, eachDayOfInterval } from 'date-fns';
|
|
7
|
+
import { format, startOfWeek, startOfDay, endOfWeek, isBefore, addDays, endOfMonth, startOfMonth, isSameYear, isSameMonth, isSameDay, startOfYear, isAfter, addYears, addMonths, setMonth, setYear, getDate, setDate, lastDayOfMonth, getWeek, endOfYear, parse, isValid, setSeconds, setMinutes, setHours, setMilliseconds, endOfDay, eachDayOfInterval, addHours } from 'date-fns';
|
|
8
8
|
import { takeUntilDestroyed, toObservable, toSignal, outputFromObservable, outputToObservable, rxResource } from '@angular/core/rxjs-interop';
|
|
9
|
-
import { Subject, take, tap, timer, takeUntil, fromEvent, filter, combineLatest, switchMap, map, distinctUntilChanged, EMPTY, debounceTime, merge, defer, finalize, of, isObservable, from, catchError, firstValueFrom, concat, scan, interval, animationFrameScheduler, EmptyError, exhaustMap, Observable, shareReplay, defaultIfEmpty, expand, toArray } from 'rxjs';
|
|
9
|
+
import { Subject, take, tap, timer, takeUntil, fromEvent, filter, combineLatest, switchMap, map, distinctUntilChanged, EMPTY, debounceTime, merge, defer, finalize, of, isObservable, from, catchError, firstValueFrom, concat, scan, interval, animationFrameScheduler, EmptyError, exhaustMap, Observable, shareReplay, defaultIfEmpty, expand, toArray, mergeMap } from 'rxjs';
|
|
10
10
|
import * as i1$1 from '@angular/router';
|
|
11
11
|
import { Router, RouterLink, RouterLinkActive, NavigationEnd } from '@angular/router';
|
|
12
12
|
import { withArgs, queryStateSignal, isQueryStateSuccess, isQueryStateFailure, isQueryStateLoading, executeUntilSettled, extractQuery, queryComputed, detectPaginationShape, isDateShapedLeaf, collectLeafPaths, QUERY_DEVTOOLS_FAULT_STATUSES, clearQueryDevtoolsFaults, setQueryDevtoolsFault, queryDevtoolsEntries, queryDevtoolsFaults, EMPTY_QUERY_DEVTOOLS_FAULT, isQueryDevtoolsFaultArmed, measureQueryDevtoolsPayload, createQueryErrorResponse, sumQueryDevtoolsStats, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe, queryErrorMessages } from '@ethlete/query';
|
|
@@ -1108,6 +1108,7 @@ const ET_BUILT_IN_ICON_NAMES = [
|
|
|
1108
1108
|
'et-strikethrough',
|
|
1109
1109
|
'et-table',
|
|
1110
1110
|
'et-times',
|
|
1111
|
+
'et-trash',
|
|
1111
1112
|
'et-triangle-exclamation',
|
|
1112
1113
|
'et-trophy',
|
|
1113
1114
|
'et-underline',
|
|
@@ -1535,6 +1536,29 @@ const TIMES_ICON = {
|
|
|
1535
1536
|
`,
|
|
1536
1537
|
};
|
|
1537
1538
|
|
|
1539
|
+
const TRASH_ICON = {
|
|
1540
|
+
name: 'et-trash',
|
|
1541
|
+
data: `
|
|
1542
|
+
<svg
|
|
1543
|
+
width="100%"
|
|
1544
|
+
height="100%"
|
|
1545
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
1546
|
+
viewBox="0 0 24 24"
|
|
1547
|
+
fill="none"
|
|
1548
|
+
stroke="currentColor"
|
|
1549
|
+
stroke-width="1.8"
|
|
1550
|
+
stroke-linecap="round"
|
|
1551
|
+
stroke-linejoin="round"
|
|
1552
|
+
>
|
|
1553
|
+
<path d="M4 7h16" />
|
|
1554
|
+
<path d="M9 7V4.5A1.5 1.5 0 0 1 10.5 3h3A1.5 1.5 0 0 1 15 4.5V7" />
|
|
1555
|
+
<path d="M6 7l1 13a2 2 0 0 0 2 1.9h6a2 2 0 0 0 2-1.9l1-13" />
|
|
1556
|
+
<path d="M10 11v6" />
|
|
1557
|
+
<path d="M14 11v6" />
|
|
1558
|
+
</svg>
|
|
1559
|
+
`,
|
|
1560
|
+
};
|
|
1561
|
+
|
|
1538
1562
|
// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.
|
|
1539
1563
|
const TRIANGLE_EXCLAMATION_ICON = {
|
|
1540
1564
|
name: 'et-triangle-exclamation',
|
|
@@ -8488,11 +8512,6 @@ const swissBracketLayout = (options = {}) => ({
|
|
|
8488
8512
|
styles: [BracketSwissStylesComponent],
|
|
8489
8513
|
});
|
|
8490
8514
|
|
|
8491
|
-
// TODO(bracket): curate the public surface once the default cards are built - `./core` and
|
|
8492
|
-
// `./linked` currently re-export internal engine builders (createBracket, relations, base
|
|
8493
|
-
// map/round/match builders) alongside the public data types. Narrow to the types consumers
|
|
8494
|
-
// actually need (data source, round/match/participant, swiss group, enums) at that point.
|
|
8495
|
-
|
|
8496
8515
|
class FabComponent {
|
|
8497
8516
|
constructor() {
|
|
8498
8517
|
this.buttonDir = inject(ButtonDirective);
|
|
@@ -9626,6 +9645,7 @@ const buildAnchoredRuntimePositionStrategy = (options = {}) => (origin) => {
|
|
|
9626
9645
|
viewportPadding: options.viewportPadding,
|
|
9627
9646
|
shift: options.shift,
|
|
9628
9647
|
autoResize: options.autoResize,
|
|
9648
|
+
minAvailableSpace: options.minAvailableSpace,
|
|
9629
9649
|
autoHide: options.autoHide,
|
|
9630
9650
|
autoCloseIfReferenceHidden: options.autoCloseIfReferenceHidden,
|
|
9631
9651
|
mirrorWidth: options.mirrorWidth,
|
|
@@ -9825,7 +9845,7 @@ const injectAnchoredDialogStrategy = /* @__PURE__ */ toInjectFn(ANCHORED_DIALOG_
|
|
|
9825
9845
|
const anchoredDialogOverlayStrategy = (options = {}) => {
|
|
9826
9846
|
return () => {
|
|
9827
9847
|
const strategyProvider = injectAnchoredDialogStrategy();
|
|
9828
|
-
const { placement, fallbackPlacements, offset, arrowPadding, viewportPadding, shift, autoResize, autoHide, autoCloseIfReferenceHidden, mirrorWidth, positionStrategy, ...breakpointConfig } = options;
|
|
9848
|
+
const { placement, fallbackPlacements, offset, arrowPadding, viewportPadding, shift, autoResize, minAvailableSpace, autoHide, autoCloseIfReferenceHidden, mirrorWidth, positionStrategy, ...breakpointConfig } = options;
|
|
9829
9849
|
const config = {
|
|
9830
9850
|
...breakpointConfig,
|
|
9831
9851
|
positionStrategy: positionStrategy ??
|
|
@@ -9837,6 +9857,7 @@ const anchoredDialogOverlayStrategy = (options = {}) => {
|
|
|
9837
9857
|
viewportPadding,
|
|
9838
9858
|
shift: shift ?? DEFAULT_ANCHORED_DIALOG_POSITION.shift,
|
|
9839
9859
|
autoResize: autoResize ?? DEFAULT_ANCHORED_DIALOG_POSITION.autoResize,
|
|
9860
|
+
minAvailableSpace,
|
|
9840
9861
|
autoHide,
|
|
9841
9862
|
autoCloseIfReferenceHidden,
|
|
9842
9863
|
mirrorWidth,
|
|
@@ -11159,6 +11180,8 @@ class OverlayDirective {
|
|
|
11159
11180
|
this.viewportPadding = input(8, /* @ts-ignore */
|
|
11160
11181
|
...(ngDevMode ? [{ debugName: "viewportPadding" }] : /* istanbul ignore next */ []));
|
|
11161
11182
|
this.autoResize = input(false, { ...(ngDevMode ? { debugName: "autoResize" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
11183
|
+
this.minAvailableSpace = input(undefined, /* @ts-ignore */
|
|
11184
|
+
...(ngDevMode ? [{ debugName: "minAvailableSpace" }] : /* istanbul ignore next */ []));
|
|
11162
11185
|
this.shift = input(true, { ...(ngDevMode ? { debugName: "shift" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
11163
11186
|
this.autoHide = input(false, { ...(ngDevMode ? { debugName: "autoHide" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
11164
11187
|
this.autoCloseIfReferenceHidden = input(false, { ...(ngDevMode ? { debugName: "autoCloseIfReferenceHidden" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
@@ -11287,6 +11310,7 @@ class OverlayDirective {
|
|
|
11287
11310
|
offset: this.offset(),
|
|
11288
11311
|
viewportPadding: this.viewportPadding(),
|
|
11289
11312
|
autoResize: this.autoResize(),
|
|
11313
|
+
minAvailableSpace: this.minAvailableSpace(),
|
|
11290
11314
|
shift: this.shift(),
|
|
11291
11315
|
autoHide: this.autoHide(),
|
|
11292
11316
|
autoCloseIfReferenceHidden: this.autoCloseIfReferenceHidden(),
|
|
@@ -11311,7 +11335,7 @@ class OverlayDirective {
|
|
|
11311
11335
|
.subscribe();
|
|
11312
11336
|
}
|
|
11313
11337
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
11314
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: OverlayDirective, isStandalone: true, selector: "[etOverlay]", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disableClose: { classPropertyName: "disableClose", publicName: "disableClose", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, restoreFocus: { classPropertyName: "restoreFocus", publicName: "restoreFocus", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsidePointer: { classPropertyName: "closeOnOutsidePointer", publicName: "closeOnOutsidePointer", isSignal: true, isRequired: false, transformFunction: null }, hostClass: { classPropertyName: "hostClass", publicName: "hostClass", isSignal: true, isRequired: false, transformFunction: null }, backdropClass: { classPropertyName: "backdropClass", publicName: "backdropClass", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, fallbackPlacements: { classPropertyName: "fallbackPlacements", publicName: "fallbackPlacements", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, viewportPadding: { classPropertyName: "viewportPadding", publicName: "viewportPadding", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "shift", isSignal: true, isRequired: false, transformFunction: null }, autoHide: { classPropertyName: "autoHide", publicName: "autoHide", isSignal: true, isRequired: false, transformFunction: null }, autoCloseIfReferenceHidden: { classPropertyName: "autoCloseIfReferenceHidden", publicName: "autoCloseIfReferenceHidden", isSignal: true, isRequired: false, transformFunction: null }, mirrorWidth: { classPropertyName: "mirrorWidth", publicName: "mirrorWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { properties: { "attr.data-overlay-open": "open() || null", "attr.data-overlay-mode": "mode()" } }, exportAs: ["etOverlay"], ngImport: i0 }); }
|
|
11338
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: OverlayDirective, isStandalone: true, selector: "[etOverlay]", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disableClose: { classPropertyName: "disableClose", publicName: "disableClose", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, restoreFocus: { classPropertyName: "restoreFocus", publicName: "restoreFocus", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsidePointer: { classPropertyName: "closeOnOutsidePointer", publicName: "closeOnOutsidePointer", isSignal: true, isRequired: false, transformFunction: null }, hostClass: { classPropertyName: "hostClass", publicName: "hostClass", isSignal: true, isRequired: false, transformFunction: null }, backdropClass: { classPropertyName: "backdropClass", publicName: "backdropClass", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, fallbackPlacements: { classPropertyName: "fallbackPlacements", publicName: "fallbackPlacements", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, viewportPadding: { classPropertyName: "viewportPadding", publicName: "viewportPadding", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, minAvailableSpace: { classPropertyName: "minAvailableSpace", publicName: "minAvailableSpace", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "shift", isSignal: true, isRequired: false, transformFunction: null }, autoHide: { classPropertyName: "autoHide", publicName: "autoHide", isSignal: true, isRequired: false, transformFunction: null }, autoCloseIfReferenceHidden: { classPropertyName: "autoCloseIfReferenceHidden", publicName: "autoCloseIfReferenceHidden", isSignal: true, isRequired: false, transformFunction: null }, mirrorWidth: { classPropertyName: "mirrorWidth", publicName: "mirrorWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { properties: { "attr.data-overlay-open": "open() || null", "attr.data-overlay-mode": "mode()" } }, exportAs: ["etOverlay"], ngImport: i0 }); }
|
|
11315
11339
|
}
|
|
11316
11340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayDirective, decorators: [{
|
|
11317
11341
|
type: Directive,
|
|
@@ -11323,7 +11347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
11323
11347
|
'[attr.data-overlay-mode]': 'mode()',
|
|
11324
11348
|
},
|
|
11325
11349
|
}]
|
|
11326
|
-
}], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], disableClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableClose", required: false }] }], autoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoFocus", required: false }] }], restoreFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "restoreFocus", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], closeOnOutsidePointer: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnOutsidePointer", required: false }] }], hostClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "hostClass", required: false }] }], backdropClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropClass", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], fallbackPlacements: [{ type: i0.Input, args: [{ isSignal: true, alias: "fallbackPlacements", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], viewportPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportPadding", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "shift", required: false }] }], autoHide: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoHide", required: false }] }], autoCloseIfReferenceHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoCloseIfReferenceHidden", required: false }] }], mirrorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "mirrorWidth", required: false }] }] } });
|
|
11350
|
+
}], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], disableClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableClose", required: false }] }], autoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoFocus", required: false }] }], restoreFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "restoreFocus", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], closeOnOutsidePointer: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnOutsidePointer", required: false }] }], hostClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "hostClass", required: false }] }], backdropClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropClass", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], fallbackPlacements: [{ type: i0.Input, args: [{ isSignal: true, alias: "fallbackPlacements", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], viewportPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportPadding", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], minAvailableSpace: [{ type: i0.Input, args: [{ isSignal: true, alias: "minAvailableSpace", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "shift", required: false }] }], autoHide: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoHide", required: false }] }], autoCloseIfReferenceHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoCloseIfReferenceHidden", required: false }] }], mirrorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "mirrorWidth", required: false }] }] } });
|
|
11327
11351
|
|
|
11328
11352
|
class OverlayAnchorDirective {
|
|
11329
11353
|
constructor() {
|
|
@@ -18266,6 +18290,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
18266
18290
|
|
|
18267
18291
|
const DESCRIPTION_LIST_IMPORTS = [DescriptionListComponent];
|
|
18268
18292
|
|
|
18293
|
+
/**
|
|
18294
|
+
* A thin rule between two groups of content or controls, announced as a separator.
|
|
18295
|
+
*
|
|
18296
|
+
* A `vertical` divider sizes itself from its parent's cross axis, so it needs a flex or grid parent
|
|
18297
|
+
* (or an explicit `block-size`) to be visible. Set `decorative` when the grouping is already clear
|
|
18298
|
+
* from the surrounding markup - the rule then carries no semantics at all.
|
|
18299
|
+
*
|
|
18300
|
+
* @example
|
|
18301
|
+
* <et-divider />
|
|
18302
|
+
*
|
|
18303
|
+
* @example
|
|
18304
|
+
* <div class="flex items-center">
|
|
18305
|
+
* <button et-button>Save</button>
|
|
18306
|
+
* <et-divider orientation="vertical" decorative />
|
|
18307
|
+
* <button et-button>Discard</button>
|
|
18308
|
+
* </div>
|
|
18309
|
+
*/
|
|
18310
|
+
class DividerComponent {
|
|
18311
|
+
constructor() {
|
|
18312
|
+
this.orientation = input('horizontal', /* @ts-ignore */
|
|
18313
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
18314
|
+
this.decorative = input(false, { ...(ngDevMode ? { debugName: "decorative" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
18315
|
+
}
|
|
18316
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18317
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: DividerComponent, isStandalone: true, selector: "et-divider", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, decorative: { classPropertyName: "decorative", publicName: "decorative", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-orientation": "orientation()", "attr.role": "decorative() ? \"presentation\" : \"separator\"", "attr.aria-orientation": "decorative() ? null : orientation()", "attr.aria-hidden": "decorative() ? \"true\" : null" }, classAttribute: "et-divider" }, ngImport: i0, template: ``, isInline: true, styles: ["@layer components{@property --et-divider-thickness{syntax: \"<length>\"; inherits: true; initial-value: 1px;}@property --et-divider-spacing{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-divider-inset{syntax: \"<length>\"; inherits: true; initial-value: 0px;}.et-divider{display:block;flex:none;background:var(--et-divider-color, var(--et-surface-border-solid, rgb(255 255 255 / .1)));block-size:var(--et-divider-thickness);margin-block:var(--et-divider-spacing);margin-inline:var(--et-divider-inset)}.et-divider:where([data-orientation=vertical]){align-self:stretch;block-size:auto;inline-size:var(--et-divider-thickness);margin-block:var(--et-divider-inset);margin-inline:var(--et-divider-spacing)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
18318
|
+
}
|
|
18319
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DividerComponent, decorators: [{
|
|
18320
|
+
type: Component,
|
|
18321
|
+
args: [{ selector: 'et-divider', template: ``, encapsulation: ViewEncapsulation.None, host: {
|
|
18322
|
+
class: 'et-divider',
|
|
18323
|
+
'[attr.data-orientation]': 'orientation()',
|
|
18324
|
+
'[attr.role]': 'decorative() ? "presentation" : "separator"',
|
|
18325
|
+
'[attr.aria-orientation]': 'decorative() ? null : orientation()',
|
|
18326
|
+
'[attr.aria-hidden]': 'decorative() ? "true" : null',
|
|
18327
|
+
}, styles: ["@layer components{@property --et-divider-thickness{syntax: \"<length>\"; inherits: true; initial-value: 1px;}@property --et-divider-spacing{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-divider-inset{syntax: \"<length>\"; inherits: true; initial-value: 0px;}.et-divider{display:block;flex:none;background:var(--et-divider-color, var(--et-surface-border-solid, rgb(255 255 255 / .1)));block-size:var(--et-divider-thickness);margin-block:var(--et-divider-spacing);margin-inline:var(--et-divider-inset)}.et-divider:where([data-orientation=vertical]){align-self:stretch;block-size:auto;inline-size:var(--et-divider-thickness);margin-block:var(--et-divider-inset);margin-inline:var(--et-divider-spacing)}}\n"] }]
|
|
18328
|
+
}], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], decorative: [{ type: i0.Input, args: [{ isSignal: true, alias: "decorative", required: false }] }] } });
|
|
18329
|
+
|
|
18330
|
+
const DIVIDER_IMPORTS = [DividerComponent];
|
|
18331
|
+
|
|
18269
18332
|
/**
|
|
18270
18333
|
* A placeholder for a section or page that currently has nothing to show - no results, an empty
|
|
18271
18334
|
* list, a not-yet-configured feature. Project an icon via `[etIcon]`, set `title`/`description`,
|
|
@@ -18463,7 +18526,7 @@ const provideFilterOverlay = (config) => [{ provide: FILTER_OVERLAY_TOKEN, useFa
|
|
|
18463
18526
|
* The filter overlay provided above this component, typed to your filters' **value** shape:
|
|
18464
18527
|
*
|
|
18465
18528
|
* ```ts
|
|
18466
|
-
* const createTeamFilters = () =>
|
|
18529
|
+
* const createTeamFilters = () => defineQueryForm({ fields: TEAM_FILTER_FIELDS });
|
|
18467
18530
|
* type TeamFilterValue = FilterOverlayValueOf<ReturnType<typeof createTeamFilters>>;
|
|
18468
18531
|
*
|
|
18469
18532
|
* protected filters = injectFilterOverlay<TeamFilterValue>();
|
|
@@ -19892,9 +19955,9 @@ const createTypeahead = (resetDelay = 500) => {
|
|
|
19892
19955
|
|
|
19893
19956
|
/** Whether a node can be drilled into - false for explicit leaves and `hasChildren: false`. */
|
|
19894
19957
|
const canHaveChildren = (node) => node.isLeaf !== true && node.hasChildren !== false;
|
|
19895
|
-
const defaultCompareWith = (a, b) => a === b;
|
|
19958
|
+
const defaultCompareWith$1 = (a, b) => a === b;
|
|
19896
19959
|
/** Value equality between two nodes via the configured comparator. */
|
|
19897
|
-
const nodesEqual = (options) => {
|
|
19960
|
+
const nodesEqual$1 = (options) => {
|
|
19898
19961
|
const { a, b, compareWith } = options;
|
|
19899
19962
|
return a !== null && b !== null && compareWith(a.value, b.value);
|
|
19900
19963
|
};
|
|
@@ -19904,7 +19967,7 @@ const indexOfNode = (options) => {
|
|
|
19904
19967
|
return node === null ? -1 : nodes.findIndex((candidate) => compareWith(candidate.value, node.value));
|
|
19905
19968
|
};
|
|
19906
19969
|
/** Normalizes a `loadChildren` result (array | Promise | Observable) into an Observable. */
|
|
19907
|
-
const toChildrenObservable = (result) => {
|
|
19970
|
+
const toChildrenObservable$1 = (result) => {
|
|
19908
19971
|
if (Array.isArray(result)) {
|
|
19909
19972
|
return of(result);
|
|
19910
19973
|
}
|
|
@@ -19983,7 +20046,7 @@ class CascaderDirective {
|
|
|
19983
20046
|
this.selectableLevels = input(CASCADER_SELECTABLE_LEVELS.LEAF, /* @ts-ignore */
|
|
19984
20047
|
...(ngDevMode ? [{ debugName: "selectableLevels" }] : /* istanbul ignore next */ []));
|
|
19985
20048
|
/** Value equality - override when values are objects. */
|
|
19986
|
-
this.compareWith = input(defaultCompareWith, /* @ts-ignore */
|
|
20049
|
+
this.compareWith = input(defaultCompareWith$1, /* @ts-ignore */
|
|
19987
20050
|
...(ngDevMode ? [{ debugName: "compareWith" }] : /* istanbul ignore next */ []));
|
|
19988
20051
|
/**
|
|
19989
20052
|
* Turns a `loadChildren` / `search` failure into the error text shown in the panel. The default
|
|
@@ -20199,13 +20262,10 @@ class CascaderDirective {
|
|
|
20199
20262
|
...anchoredOverlayStrategy({
|
|
20200
20263
|
containerClass: ['et-overlay--anchored', 'et-overlay--cascader'],
|
|
20201
20264
|
placement: 'bottom-start',
|
|
20202
|
-
// prefer flipping the alignment on the same side (right-align under the field) before
|
|
20203
|
-
// flipping up, so a field near the right viewport edge opens bottom-end, not shifted
|
|
20204
|
-
fallbackPlacements: ['bottom-end', 'top-start', 'top-end'],
|
|
20205
20265
|
offset: 4,
|
|
20206
20266
|
viewportPadding: 8,
|
|
20207
20267
|
autoResize: true,
|
|
20208
|
-
|
|
20268
|
+
minAvailableSpace: 160,
|
|
20209
20269
|
mirrorWidth: this.mirrorPanelWidth(),
|
|
20210
20270
|
})().map((entry) => ({ ...entry, breakpoint: 'md' })),
|
|
20211
20271
|
],
|
|
@@ -20463,7 +20523,7 @@ class CascaderDirective {
|
|
|
20463
20523
|
}
|
|
20464
20524
|
/** Whether a node is expanded (its children fill the next column). */
|
|
20465
20525
|
isExpanded(node, columnIndex) {
|
|
20466
|
-
return nodesEqual({ a: this.openPath()[columnIndex] ?? null, b: node, compareWith: this.compareWith() });
|
|
20526
|
+
return nodesEqual$1({ a: this.openPath()[columnIndex] ?? null, b: node, compareWith: this.compareWith() });
|
|
20467
20527
|
}
|
|
20468
20528
|
/**
|
|
20469
20529
|
* Activates a node from a pointer/keyboard interaction: drills into branches, commits leaves.
|
|
@@ -20786,7 +20846,7 @@ class CascaderDirective {
|
|
|
20786
20846
|
if (!canHaveChildren(node) || visited.some((seen) => compareWith(seen.value, node.value))) {
|
|
20787
20847
|
return false;
|
|
20788
20848
|
}
|
|
20789
|
-
const children = this.knownChildren().find((entry) => nodesEqual({ a: entry.parent, b: node, compareWith }))?.children;
|
|
20849
|
+
const children = this.knownChildren().find((entry) => nodesEqual$1({ a: entry.parent, b: node, compareWith }))?.children;
|
|
20790
20850
|
const selectable = children?.filter((child) => !child.disabled) ?? [];
|
|
20791
20851
|
return selectable.length > 0 && selectable.every((child) => this.isFullySelected(child, [...visited, node]));
|
|
20792
20852
|
}
|
|
@@ -20887,7 +20947,7 @@ class CascaderDirective {
|
|
|
20887
20947
|
}
|
|
20888
20948
|
this.loadSubscriptions.get(columnIndex)?.unsubscribe();
|
|
20889
20949
|
this.setColumn(columnIndex, { parent, status: 'loading', nodes: [], error: null });
|
|
20890
|
-
const subscription = toChildrenObservable(source.loadChildren(parent))
|
|
20950
|
+
const subscription = toChildrenObservable$1(source.loadChildren(parent))
|
|
20891
20951
|
.pipe(take(1), tap({
|
|
20892
20952
|
next: (nodes) => {
|
|
20893
20953
|
this.setColumn(columnIndex, { parent, status: 'loaded', nodes, error: null });
|
|
@@ -20905,7 +20965,7 @@ class CascaderDirective {
|
|
|
20905
20965
|
rememberChildren(parent, children) {
|
|
20906
20966
|
const compareWith = this.compareWith();
|
|
20907
20967
|
this.knownChildren.update((entries) => [
|
|
20908
|
-
...entries.filter((entry) => parent === null ? entry.parent !== null : !nodesEqual({ a: entry.parent, b: parent, compareWith })),
|
|
20968
|
+
...entries.filter((entry) => parent === null ? entry.parent !== null : !nodesEqual$1({ a: entry.parent, b: parent, compareWith })),
|
|
20909
20969
|
{ parent, children },
|
|
20910
20970
|
]);
|
|
20911
20971
|
}
|
|
@@ -21066,7 +21126,7 @@ class CascaderNodeDirective {
|
|
|
21066
21126
|
...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
21067
21127
|
this.expanded = computed(() => this.cascader?.isExpanded(this.node(), this.column.columnIndex()) ?? false, /* @ts-ignore */
|
|
21068
21128
|
...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
|
|
21069
|
-
this.focused = computed(() => nodesEqual({
|
|
21129
|
+
this.focused = computed(() => nodesEqual$1({
|
|
21070
21130
|
a: this.cascader?.focusedNode() ?? null,
|
|
21071
21131
|
b: this.node(),
|
|
21072
21132
|
compareWith: this.cascader?.compareWith() ?? ((a, b) => a === b),
|
|
@@ -21479,7 +21539,7 @@ class CascaderPanelComponent {
|
|
|
21479
21539
|
<div #panelBody class="et-cascader-panel-body">
|
|
21480
21540
|
<ng-content />
|
|
21481
21541
|
</div>
|
|
21482
|
-
`, isInline: true, styles: ["@layer components{@property --et-cascader-column-inline-size{syntax: \"<length>\"; inherits: true; initial-value: 220px;}@property --et-cascader-panel-max-block-size{syntax: \"<length-percentage>\"; inherits: false; initial-value: 320px;}@property --et-cascader-node-height{syntax: \"<length>\"; inherits: true; initial-value: 36px;}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--cascader[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--cascader[data-overlay-placement].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-cascader-panel{display:block;box-sizing:border-box;border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:14px;box-shadow:0 10px 24px #00000029;overflow:hidden}.et-cascader-panel.et-cascader-panel--resizing{overflow:clip}.et-cascader-panel:not([data-sheet])>.et-cascader-panel-body{inline-size:max-content}.et-cascader-panel .et-cascader-sheet-header{position:relative;display:flex;align-items:center;flex:none;box-sizing:border-box;block-size:var(--et-cascader-node-height);padding-block:4px;padding-inline:20px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-back{position:absolute;inset-block:0;inset-inline-start:20px;display:inline-flex;align-items:center;transition:opacity .18s ease,transform .18s ease}.et-cascader-panel .et-cascader-back.et-cascader-back--hidden{opacity:0;transform:translate(-6px);pointer-events:none}.et-cascader-panel .et-cascader-back-icon{rotate:-90deg}.et-cascader-panel .et-cascader-sheet-title-slot{position:relative;flex:1;min-inline-size:0;align-self:stretch;overflow:hidden;pointer-events:none}.et-cascader-panel .et-cascader-sheet-title-shift{position:absolute;inset:0;transform:translate(0);transition:transform .18s ease}.et-cascader-panel .et-cascader-sheet-header[data-back] .et-cascader-sheet-title-shift{transform:translate(var(--et-cascader-back-slot, 4em))}.et-cascader-panel .et-cascader-sheet-title{position:absolute;inset:0;display:flex;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:600;color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-forward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-backward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-forward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-backward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--enter{animation:et-cascader-title-fade-in .18s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--leave{animation:et-cascader-title-fade-out .18s ease forwards}.et-cascader-panel .et-cascader-breadcrumbs{display:flex;align-items:center;gap:2px;box-sizing:border-box;inline-size:0;min-inline-size:100%;padding:6px;border-block-start:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));overflow:hidden}.et-cascader-panel .et-cascader-crumb{display:flex;align-items:center;gap:2px;min-inline-size:0}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--enter{animation:et-cascader-crumb-in .2s ease}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--leave{animation:et-cascader-crumb-out .16s ease forwards}.et-cascader-panel .et-cascader-breadcrumb{display:block;min-inline-size:0;padding:4px 8px;border:none;border-radius:6px;background:transparent;font:inherit;font-size:12px;color:var(--et-surface-color-muted-solid, currentColor);text-align:start;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;appearance:none;outline:none;transition:background .12s ease,color .12s ease}@media(hover:hover){.et-cascader-panel .et-cascader-breadcrumb:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}.et-cascader-panel .et-cascader-breadcrumb:focus-visible{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent);color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb[data-current]{color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb-chevron{flex:none;inline-size:10px;block-size:10px;color:var(--et-surface-color-subtle-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-columns{display:flex;max-block-size:var(--et-cascader-panel-max-block-size)}.et-cascader-panel .et-cascader-columns:not([data-sheet]){display:block;inline-size:calc(var(--_et-cascader-visible-columns, 1) * var(--et-cascader-column-inline-size));overflow:clip}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column{box-sizing:border-box}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column--offstage{contain:size}.et-cascader-panel .et-cascader-columns[data-sheet]{display:block;flex:1;min-block-size:0;max-block-size:none;overflow-y:auto;overflow-x:clip;overscroll-behavior:contain}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column{inline-size:100%;block-size:100%;max-block-size:none;overflow:visible;border-inline-end:none}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:has(.et-cascader-state){display:flex;align-items:center;justify-content:center}.et-cascader-panel .et-cascader-columns-track{display:flex;max-block-size:inherit;transform:translate(calc(var(--_et-cascader-column-window-start, 0) * -1 * var(--et-cascader-column-inline-size)));transition:transform .24s ease}.et-cascader-panel .et-cascader-sheet-body{display:flex;flex-direction:column;block-size:min(60vh,480px)}.et-cascader-panel .et-cascader-search{padding:6px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-search input[etcascadersearch]{inline-size:100%;block-size:36px;box-sizing:border-box;padding-inline:10px;border-radius:6px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;caret-color:var(--et-theme-color-primary-solid, currentColor);transition:border-color .12s ease,background .12s ease}.et-cascader-panel .et-cascader-search input[etcascadersearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-cascader-panel .et-cascader-search input[etcascadersearch]::placeholder{color:var(--et-surface-color-muted-solid, rgb(255 255 255 / .55))}.et-cascader-panel .et-cascader-results{display:block;box-sizing:border-box;inline-size:min(320px,calc(100vw - 24px));max-block-size:var(--et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-sheet-body .et-cascader-results{flex:1;min-block-size:0;inline-size:100%;max-block-size:none}.et-cascader-panel .et-cascader-column{display:block;flex:none;inline-size:var(--et-cascader-column-inline-size);max-block-size:var(--et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-column:not(:last-child){border-inline-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-in-forward .2s ease}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=backward]){animation:et-cascader-column-in-backward .2s ease}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-grow-in .18s ease}.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option{display:flex;align-items:center;gap:8px;inline-size:100%;min-block-size:var(--et-cascader-node-height);padding-inline:10px;border:none;border-radius:6px;background:transparent;font:inherit;text-align:start;color:inherit;cursor:pointer;appearance:none;outline:none;transition:background .12s ease}@media(hover:hover){:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):focus-visible,:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-focused]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-expanded]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-selected]{color:var(--et-theme-color-ink-solid, currentColor);font-weight:500}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-disabled]{cursor:default;opacity:.4}.et-cascader-panel .et-cascader-node-label,.et-cascader-panel .et-cascader-search-option-label{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.et-cascader-panel .et-cascader-search-option-ancestor{color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-check{position:relative;flex:none;inline-size:16px;block-size:16px;box-sizing:border-box;border:2px solid var(--et-surface-border-solid, rgb(255 255 255 / .3));border-radius:4px;transition:background .12s ease,border-color .12s ease}.et-cascader-panel .et-cascader-check:after{content:\"\";position:absolute;opacity:0}.et-cascader-panel [data-selected]>.et-cascader-check,.et-cascader-panel [data-indeterminate]>.et-cascader-check{border-color:var(--et-theme-color-primary-solid, currentColor);background:var(--et-theme-color-primary-solid, currentColor)}.et-cascader-panel [data-selected]>.et-cascader-check:after{inset-inline-start:4px;inset-block-start:1px;inline-size:4px;block-size:8px;border:solid var(--et-theme-color-on-primary, rgb(0 0 0));border-width:0 2px 2px 0;rotate:45deg;opacity:1}.et-cascader-panel [data-indeterminate]>.et-cascader-check:after{inset-inline-start:2px;inset-block-start:5px;inline-size:8px;block-size:2px;background:var(--et-theme-color-on-primary, rgb(0 0 0));opacity:1}.et-cascader-panel .et-cascader-node-chevron{flex:none;inline-size:12px;block-size:12px;color:var(--et-surface-color-muted-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-state{display:flex;align-items:center;justify-content:center;gap:8px;min-block-size:var(--et-cascader-node-height);padding:12px 16px;text-align:center;color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-state.et-cascader-state--error{flex-direction:column;gap:8px;font-size:12px}.et-cascader-panel .et-cascader-state-error-message{color:var(--et-theme-color-primary-solid, rgb(248 113 113))}@keyframes et-cascader-title-enter-forward{0%{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-enter-backward{0%{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-forward{to{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-backward{to{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-fade-in{0%{opacity:0}}@keyframes et-cascader-title-fade-out{to{opacity:0}}@keyframes et-cascader-column-in-forward{0%{opacity:0;transform:translate(14px)}}@keyframes et-cascader-column-in-backward{0%{opacity:0;transform:translate(-14px)}}@keyframes et-cascader-column-grow-in{0%{opacity:0;transform:translate(-10px)}}@keyframes et-cascader-crumb-in{0%{opacity:0;transform:translate(8px)}}@keyframes et-cascader-crumb-out{to{opacity:0;transform:translate(8px)}}@media(prefers-reduced-motion:reduce){.et-cascader-panel .et-cascader-column,.et-cascader-panel .et-cascader-sheet-title,.et-cascader-panel .et-cascader-crumb{animation:none}.et-cascader-panel .et-cascader-back,.et-cascader-panel .et-cascader-sheet-title-shift,.et-cascader-panel .et-cascader-columns-track{transition:none}}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
21542
|
+
`, isInline: true, styles: ["@layer components{@property --et-cascader-column-inline-size{syntax: \"<length>\"; inherits: true; initial-value: 220px;}@property --et-cascader-panel-max-block-size{syntax: \"<length-percentage>\"; inherits: false; initial-value: 320px;}@property --et-cascader-node-height{syntax: \"<length>\"; inherits: true; initial-value: 36px;}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--cascader[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--cascader[data-overlay-placement].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-cascader-panel{display:block;box-sizing:border-box;--_et-cascader-panel-max-block-size: min( var(--et-cascader-panel-max-block-size), var(--et-overlay-max-height, 100vh) );border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:14px;box-shadow:0 10px 24px #00000029;overflow:hidden}.et-cascader-panel.et-cascader-panel--resizing{overflow:clip}.et-cascader-panel:not([data-sheet])>.et-cascader-panel-body{inline-size:max-content}.et-cascader-panel .et-cascader-sheet-header{position:relative;display:flex;align-items:center;flex:none;box-sizing:border-box;block-size:var(--et-cascader-node-height);padding-block:4px;padding-inline:20px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-back{position:absolute;inset-block:0;inset-inline-start:20px;display:inline-flex;align-items:center;transition:opacity .18s ease,transform .18s ease}.et-cascader-panel .et-cascader-back.et-cascader-back--hidden{opacity:0;transform:translate(-6px);pointer-events:none}.et-cascader-panel .et-cascader-back-icon{rotate:-90deg}.et-cascader-panel .et-cascader-sheet-title-slot{position:relative;flex:1;min-inline-size:0;align-self:stretch;overflow:hidden;pointer-events:none}.et-cascader-panel .et-cascader-sheet-title-shift{position:absolute;inset:0;transform:translate(0);transition:transform .18s ease}.et-cascader-panel .et-cascader-sheet-header[data-back] .et-cascader-sheet-title-shift{transform:translate(var(--et-cascader-back-slot, 4em))}.et-cascader-panel .et-cascader-sheet-title{position:absolute;inset:0;display:flex;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:600;color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-forward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-backward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-forward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-backward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--enter{animation:et-cascader-title-fade-in .18s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--leave{animation:et-cascader-title-fade-out .18s ease forwards}.et-cascader-panel .et-cascader-breadcrumbs{display:flex;align-items:center;gap:2px;box-sizing:border-box;inline-size:0;min-inline-size:100%;padding:6px;border-block-start:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));overflow:hidden}.et-cascader-panel .et-cascader-crumb{display:flex;align-items:center;gap:2px;min-inline-size:0}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--enter{animation:et-cascader-crumb-in .2s ease}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--leave{animation:et-cascader-crumb-out .16s ease forwards}.et-cascader-panel .et-cascader-breadcrumb{display:block;min-inline-size:0;padding:4px 8px;border:none;border-radius:6px;background:transparent;font:inherit;font-size:12px;color:var(--et-surface-color-muted-solid, currentColor);text-align:start;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;appearance:none;outline:none;transition:background .12s ease,color .12s ease}@media(hover:hover){.et-cascader-panel .et-cascader-breadcrumb:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}.et-cascader-panel .et-cascader-breadcrumb:focus-visible{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent);color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb[data-current]{color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb-chevron{flex:none;inline-size:10px;block-size:10px;color:var(--et-surface-color-subtle-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-columns{display:flex;max-block-size:var(--_et-cascader-panel-max-block-size)}.et-cascader-panel .et-cascader-columns:not([data-sheet]){display:block;inline-size:calc(var(--_et-cascader-visible-columns, 1) * var(--et-cascader-column-inline-size));overflow:clip}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column{box-sizing:border-box}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column--offstage{contain:size}.et-cascader-panel .et-cascader-columns[data-sheet]{display:block;flex:1;min-block-size:0;max-block-size:none;overflow-y:auto;overflow-x:clip;overscroll-behavior:contain}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column{inline-size:100%;block-size:100%;max-block-size:none;overflow:visible;border-inline-end:none}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:has(.et-cascader-state){display:flex;align-items:center;justify-content:center}.et-cascader-panel .et-cascader-columns-track{display:flex;max-block-size:inherit;transform:translate(calc(var(--_et-cascader-column-window-start, 0) * -1 * var(--et-cascader-column-inline-size)));transition:transform .24s ease}.et-cascader-panel .et-cascader-sheet-body{display:flex;flex-direction:column;block-size:min(60vh,480px)}.et-cascader-panel .et-cascader-search{padding:6px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-search input[etcascadersearch]{inline-size:100%;block-size:36px;box-sizing:border-box;padding-inline:10px;border-radius:6px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;caret-color:var(--et-theme-color-primary-solid, currentColor);transition:border-color .12s ease,background .12s ease}.et-cascader-panel .et-cascader-search input[etcascadersearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-cascader-panel .et-cascader-search input[etcascadersearch]::placeholder{color:var(--et-surface-color-muted-solid, rgb(255 255 255 / .55))}.et-cascader-panel .et-cascader-results{display:block;box-sizing:border-box;inline-size:min(320px,calc(100vw - 24px));max-block-size:var(--_et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-sheet-body .et-cascader-results{flex:1;min-block-size:0;inline-size:100%;max-block-size:none}.et-cascader-panel .et-cascader-column{display:block;flex:none;inline-size:var(--et-cascader-column-inline-size);max-block-size:var(--_et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-column:not(:last-child){border-inline-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-in-forward .2s ease}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=backward]){animation:et-cascader-column-in-backward .2s ease}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-grow-in .18s ease}.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option{display:flex;align-items:center;gap:8px;inline-size:100%;min-block-size:var(--et-cascader-node-height);padding-inline:10px;border:none;border-radius:6px;background:transparent;font:inherit;text-align:start;color:inherit;cursor:pointer;appearance:none;outline:none;transition:background .12s ease}@media(hover:hover){:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):focus-visible,:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-focused]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-expanded]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-selected]{color:var(--et-theme-color-ink-solid, currentColor);font-weight:500}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-disabled]{cursor:default;opacity:.4}.et-cascader-panel .et-cascader-node-label,.et-cascader-panel .et-cascader-search-option-label{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.et-cascader-panel .et-cascader-search-option-ancestor{color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-check{position:relative;flex:none;inline-size:16px;block-size:16px;box-sizing:border-box;border:2px solid var(--et-surface-border-solid, rgb(255 255 255 / .3));border-radius:4px;transition:background .12s ease,border-color .12s ease}.et-cascader-panel .et-cascader-check:after{content:\"\";position:absolute;opacity:0}.et-cascader-panel [data-selected]>.et-cascader-check,.et-cascader-panel [data-indeterminate]>.et-cascader-check{border-color:var(--et-theme-color-primary-solid, currentColor);background:var(--et-theme-color-primary-solid, currentColor)}.et-cascader-panel [data-selected]>.et-cascader-check:after{inset-inline-start:4px;inset-block-start:1px;inline-size:4px;block-size:8px;border:solid var(--et-theme-color-on-primary, rgb(0 0 0));border-width:0 2px 2px 0;rotate:45deg;opacity:1}.et-cascader-panel [data-indeterminate]>.et-cascader-check:after{inset-inline-start:2px;inset-block-start:5px;inline-size:8px;block-size:2px;background:var(--et-theme-color-on-primary, rgb(0 0 0));opacity:1}.et-cascader-panel .et-cascader-node-chevron{flex:none;inline-size:12px;block-size:12px;color:var(--et-surface-color-muted-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-state{display:flex;align-items:center;justify-content:center;gap:8px;min-block-size:var(--et-cascader-node-height);padding:12px 16px;text-align:center;color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-state.et-cascader-state--error{flex-direction:column;gap:8px;font-size:12px}.et-cascader-panel .et-cascader-state-error-message{color:var(--et-theme-color-primary-solid, rgb(248 113 113))}@keyframes et-cascader-title-enter-forward{0%{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-enter-backward{0%{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-forward{to{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-backward{to{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-fade-in{0%{opacity:0}}@keyframes et-cascader-title-fade-out{to{opacity:0}}@keyframes et-cascader-column-in-forward{0%{opacity:0;transform:translate(14px)}}@keyframes et-cascader-column-in-backward{0%{opacity:0;transform:translate(-14px)}}@keyframes et-cascader-column-grow-in{0%{opacity:0;transform:translate(-10px)}}@keyframes et-cascader-crumb-in{0%{opacity:0;transform:translate(8px)}}@keyframes et-cascader-crumb-out{to{opacity:0;transform:translate(8px)}}@media(prefers-reduced-motion:reduce){.et-cascader-panel .et-cascader-column,.et-cascader-panel .et-cascader-sheet-title,.et-cascader-panel .et-cascader-crumb{animation:none}.et-cascader-panel .et-cascader-back,.et-cascader-panel .et-cascader-sheet-title-shift,.et-cascader-panel .et-cascader-columns-track{transition:none}}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
21483
21543
|
}
|
|
21484
21544
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CascaderPanelComponent, decorators: [{
|
|
21485
21545
|
type: Component,
|
|
@@ -21499,7 +21559,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
21499
21559
|
'[attr.data-sheet]': 'isSheet() || null',
|
|
21500
21560
|
'(focusin)': 'handleFocusIn()',
|
|
21501
21561
|
'(focusout)': 'handleFocusOut($event)',
|
|
21502
|
-
}, styles: ["@layer components{@property --et-cascader-column-inline-size{syntax: \"<length>\"; inherits: true; initial-value: 220px;}@property --et-cascader-panel-max-block-size{syntax: \"<length-percentage>\"; inherits: false; initial-value: 320px;}@property --et-cascader-node-height{syntax: \"<length>\"; inherits: true; initial-value: 36px;}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--cascader[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--cascader[data-overlay-placement].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-cascader-panel{display:block;box-sizing:border-box;border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:14px;box-shadow:0 10px 24px #00000029;overflow:hidden}.et-cascader-panel.et-cascader-panel--resizing{overflow:clip}.et-cascader-panel:not([data-sheet])>.et-cascader-panel-body{inline-size:max-content}.et-cascader-panel .et-cascader-sheet-header{position:relative;display:flex;align-items:center;flex:none;box-sizing:border-box;block-size:var(--et-cascader-node-height);padding-block:4px;padding-inline:20px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-back{position:absolute;inset-block:0;inset-inline-start:20px;display:inline-flex;align-items:center;transition:opacity .18s ease,transform .18s ease}.et-cascader-panel .et-cascader-back.et-cascader-back--hidden{opacity:0;transform:translate(-6px);pointer-events:none}.et-cascader-panel .et-cascader-back-icon{rotate:-90deg}.et-cascader-panel .et-cascader-sheet-title-slot{position:relative;flex:1;min-inline-size:0;align-self:stretch;overflow:hidden;pointer-events:none}.et-cascader-panel .et-cascader-sheet-title-shift{position:absolute;inset:0;transform:translate(0);transition:transform .18s ease}.et-cascader-panel .et-cascader-sheet-header[data-back] .et-cascader-sheet-title-shift{transform:translate(var(--et-cascader-back-slot, 4em))}.et-cascader-panel .et-cascader-sheet-title{position:absolute;inset:0;display:flex;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:600;color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-forward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-backward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-forward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-backward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--enter{animation:et-cascader-title-fade-in .18s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--leave{animation:et-cascader-title-fade-out .18s ease forwards}.et-cascader-panel .et-cascader-breadcrumbs{display:flex;align-items:center;gap:2px;box-sizing:border-box;inline-size:0;min-inline-size:100%;padding:6px;border-block-start:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));overflow:hidden}.et-cascader-panel .et-cascader-crumb{display:flex;align-items:center;gap:2px;min-inline-size:0}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--enter{animation:et-cascader-crumb-in .2s ease}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--leave{animation:et-cascader-crumb-out .16s ease forwards}.et-cascader-panel .et-cascader-breadcrumb{display:block;min-inline-size:0;padding:4px 8px;border:none;border-radius:6px;background:transparent;font:inherit;font-size:12px;color:var(--et-surface-color-muted-solid, currentColor);text-align:start;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;appearance:none;outline:none;transition:background .12s ease,color .12s ease}@media(hover:hover){.et-cascader-panel .et-cascader-breadcrumb:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}.et-cascader-panel .et-cascader-breadcrumb:focus-visible{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent);color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb[data-current]{color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb-chevron{flex:none;inline-size:10px;block-size:10px;color:var(--et-surface-color-subtle-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-columns{display:flex;max-block-size:var(--et-cascader-panel-max-block-size)}.et-cascader-panel .et-cascader-columns:not([data-sheet]){display:block;inline-size:calc(var(--_et-cascader-visible-columns, 1) * var(--et-cascader-column-inline-size));overflow:clip}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column{box-sizing:border-box}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column--offstage{contain:size}.et-cascader-panel .et-cascader-columns[data-sheet]{display:block;flex:1;min-block-size:0;max-block-size:none;overflow-y:auto;overflow-x:clip;overscroll-behavior:contain}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column{inline-size:100%;block-size:100%;max-block-size:none;overflow:visible;border-inline-end:none}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:has(.et-cascader-state){display:flex;align-items:center;justify-content:center}.et-cascader-panel .et-cascader-columns-track{display:flex;max-block-size:inherit;transform:translate(calc(var(--_et-cascader-column-window-start, 0) * -1 * var(--et-cascader-column-inline-size)));transition:transform .24s ease}.et-cascader-panel .et-cascader-sheet-body{display:flex;flex-direction:column;block-size:min(60vh,480px)}.et-cascader-panel .et-cascader-search{padding:6px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-search input[etcascadersearch]{inline-size:100%;block-size:36px;box-sizing:border-box;padding-inline:10px;border-radius:6px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;caret-color:var(--et-theme-color-primary-solid, currentColor);transition:border-color .12s ease,background .12s ease}.et-cascader-panel .et-cascader-search input[etcascadersearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-cascader-panel .et-cascader-search input[etcascadersearch]::placeholder{color:var(--et-surface-color-muted-solid, rgb(255 255 255 / .55))}.et-cascader-panel .et-cascader-results{display:block;box-sizing:border-box;inline-size:min(320px,calc(100vw - 24px));max-block-size:var(--et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-sheet-body .et-cascader-results{flex:1;min-block-size:0;inline-size:100%;max-block-size:none}.et-cascader-panel .et-cascader-column{display:block;flex:none;inline-size:var(--et-cascader-column-inline-size);max-block-size:var(--et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-column:not(:last-child){border-inline-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-in-forward .2s ease}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=backward]){animation:et-cascader-column-in-backward .2s ease}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-grow-in .18s ease}.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option{display:flex;align-items:center;gap:8px;inline-size:100%;min-block-size:var(--et-cascader-node-height);padding-inline:10px;border:none;border-radius:6px;background:transparent;font:inherit;text-align:start;color:inherit;cursor:pointer;appearance:none;outline:none;transition:background .12s ease}@media(hover:hover){:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):focus-visible,:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-focused]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-expanded]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-selected]{color:var(--et-theme-color-ink-solid, currentColor);font-weight:500}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-disabled]{cursor:default;opacity:.4}.et-cascader-panel .et-cascader-node-label,.et-cascader-panel .et-cascader-search-option-label{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.et-cascader-panel .et-cascader-search-option-ancestor{color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-check{position:relative;flex:none;inline-size:16px;block-size:16px;box-sizing:border-box;border:2px solid var(--et-surface-border-solid, rgb(255 255 255 / .3));border-radius:4px;transition:background .12s ease,border-color .12s ease}.et-cascader-panel .et-cascader-check:after{content:\"\";position:absolute;opacity:0}.et-cascader-panel [data-selected]>.et-cascader-check,.et-cascader-panel [data-indeterminate]>.et-cascader-check{border-color:var(--et-theme-color-primary-solid, currentColor);background:var(--et-theme-color-primary-solid, currentColor)}.et-cascader-panel [data-selected]>.et-cascader-check:after{inset-inline-start:4px;inset-block-start:1px;inline-size:4px;block-size:8px;border:solid var(--et-theme-color-on-primary, rgb(0 0 0));border-width:0 2px 2px 0;rotate:45deg;opacity:1}.et-cascader-panel [data-indeterminate]>.et-cascader-check:after{inset-inline-start:2px;inset-block-start:5px;inline-size:8px;block-size:2px;background:var(--et-theme-color-on-primary, rgb(0 0 0));opacity:1}.et-cascader-panel .et-cascader-node-chevron{flex:none;inline-size:12px;block-size:12px;color:var(--et-surface-color-muted-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-state{display:flex;align-items:center;justify-content:center;gap:8px;min-block-size:var(--et-cascader-node-height);padding:12px 16px;text-align:center;color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-state.et-cascader-state--error{flex-direction:column;gap:8px;font-size:12px}.et-cascader-panel .et-cascader-state-error-message{color:var(--et-theme-color-primary-solid, rgb(248 113 113))}@keyframes et-cascader-title-enter-forward{0%{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-enter-backward{0%{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-forward{to{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-backward{to{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-fade-in{0%{opacity:0}}@keyframes et-cascader-title-fade-out{to{opacity:0}}@keyframes et-cascader-column-in-forward{0%{opacity:0;transform:translate(14px)}}@keyframes et-cascader-column-in-backward{0%{opacity:0;transform:translate(-14px)}}@keyframes et-cascader-column-grow-in{0%{opacity:0;transform:translate(-10px)}}@keyframes et-cascader-crumb-in{0%{opacity:0;transform:translate(8px)}}@keyframes et-cascader-crumb-out{to{opacity:0;transform:translate(8px)}}@media(prefers-reduced-motion:reduce){.et-cascader-panel .et-cascader-column,.et-cascader-panel .et-cascader-sheet-title,.et-cascader-panel .et-cascader-crumb{animation:none}.et-cascader-panel .et-cascader-back,.et-cascader-panel .et-cascader-sheet-title-shift,.et-cascader-panel .et-cascader-columns-track{transition:none}}}\n"] }]
|
|
21562
|
+
}, styles: ["@layer components{@property --et-cascader-column-inline-size{syntax: \"<length>\"; inherits: true; initial-value: 220px;}@property --et-cascader-panel-max-block-size{syntax: \"<length-percentage>\"; inherits: false; initial-value: 320px;}@property --et-cascader-node-height{syntax: \"<length>\"; inherits: true; initial-value: 36px;}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--cascader[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--cascader.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--cascader[data-overlay-placement].et-animation-enter-from,.et-overlay--cascader[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-cascader-panel{display:block;box-sizing:border-box;--_et-cascader-panel-max-block-size: min( var(--et-cascader-panel-max-block-size), var(--et-overlay-max-height, 100vh) );border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:14px;box-shadow:0 10px 24px #00000029;overflow:hidden}.et-cascader-panel.et-cascader-panel--resizing{overflow:clip}.et-cascader-panel:not([data-sheet])>.et-cascader-panel-body{inline-size:max-content}.et-cascader-panel .et-cascader-sheet-header{position:relative;display:flex;align-items:center;flex:none;box-sizing:border-box;block-size:var(--et-cascader-node-height);padding-block:4px;padding-inline:20px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-back{position:absolute;inset-block:0;inset-inline-start:20px;display:inline-flex;align-items:center;transition:opacity .18s ease,transform .18s ease}.et-cascader-panel .et-cascader-back.et-cascader-back--hidden{opacity:0;transform:translate(-6px);pointer-events:none}.et-cascader-panel .et-cascader-back-icon{rotate:-90deg}.et-cascader-panel .et-cascader-sheet-title-slot{position:relative;flex:1;min-inline-size:0;align-self:stretch;overflow:hidden;pointer-events:none}.et-cascader-panel .et-cascader-sheet-title-shift{position:absolute;inset:0;transform:translate(0);transition:transform .18s ease}.et-cascader-panel .et-cascader-sheet-header[data-back] .et-cascader-sheet-title-shift{transform:translate(var(--et-cascader-back-slot, 4em))}.et-cascader-panel .et-cascader-sheet-title{position:absolute;inset:0;display:flex;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:600;color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-forward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--enter{animation:et-cascader-title-enter-backward .2s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=forward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-forward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=slide][data-nav=backward] .et-cascader-sheet-title--leave{animation:et-cascader-title-leave-backward .18s ease forwards}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--enter{animation:et-cascader-title-fade-in .18s ease}.et-cascader-panel .et-cascader-sheet-title-slot[data-anim=fade] .et-cascader-sheet-title--leave{animation:et-cascader-title-fade-out .18s ease forwards}.et-cascader-panel .et-cascader-breadcrumbs{display:flex;align-items:center;gap:2px;box-sizing:border-box;inline-size:0;min-inline-size:100%;padding:6px;border-block-start:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));overflow:hidden}.et-cascader-panel .et-cascader-crumb{display:flex;align-items:center;gap:2px;min-inline-size:0}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--enter{animation:et-cascader-crumb-in .2s ease}.et-cascader-panel .et-cascader-crumb.et-cascader-crumb--leave{animation:et-cascader-crumb-out .16s ease forwards}.et-cascader-panel .et-cascader-breadcrumb{display:block;min-inline-size:0;padding:4px 8px;border:none;border-radius:6px;background:transparent;font:inherit;font-size:12px;color:var(--et-surface-color-muted-solid, currentColor);text-align:start;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;appearance:none;outline:none;transition:background .12s ease,color .12s ease}@media(hover:hover){.et-cascader-panel .et-cascader-breadcrumb:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}.et-cascader-panel .et-cascader-breadcrumb:focus-visible{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent);color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb[data-current]{color:var(--et-surface-color-solid, currentColor)}.et-cascader-panel .et-cascader-breadcrumb-chevron{flex:none;inline-size:10px;block-size:10px;color:var(--et-surface-color-subtle-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-columns{display:flex;max-block-size:var(--_et-cascader-panel-max-block-size)}.et-cascader-panel .et-cascader-columns:not([data-sheet]){display:block;inline-size:calc(var(--_et-cascader-visible-columns, 1) * var(--et-cascader-column-inline-size));overflow:clip}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column{box-sizing:border-box}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column--offstage{contain:size}.et-cascader-panel .et-cascader-columns[data-sheet]{display:block;flex:1;min-block-size:0;max-block-size:none;overflow-y:auto;overflow-x:clip;overscroll-behavior:contain}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column{inline-size:100%;block-size:100%;max-block-size:none;overflow:visible;border-inline-end:none}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:has(.et-cascader-state){display:flex;align-items:center;justify-content:center}.et-cascader-panel .et-cascader-columns-track{display:flex;max-block-size:inherit;transform:translate(calc(var(--_et-cascader-column-window-start, 0) * -1 * var(--et-cascader-column-inline-size)));transition:transform .24s ease}.et-cascader-panel .et-cascader-sheet-body{display:flex;flex-direction:column;block-size:min(60vh,480px)}.et-cascader-panel .et-cascader-search{padding:6px;border-block-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-search input[etcascadersearch]{inline-size:100%;block-size:36px;box-sizing:border-box;padding-inline:10px;border-radius:6px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;caret-color:var(--et-theme-color-primary-solid, currentColor);transition:border-color .12s ease,background .12s ease}.et-cascader-panel .et-cascader-search input[etcascadersearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-cascader-panel .et-cascader-search input[etcascadersearch]::placeholder{color:var(--et-surface-color-muted-solid, rgb(255 255 255 / .55))}.et-cascader-panel .et-cascader-results{display:block;box-sizing:border-box;inline-size:min(320px,calc(100vw - 24px));max-block-size:var(--_et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-sheet-body .et-cascader-results{flex:1;min-block-size:0;inline-size:100%;max-block-size:none}.et-cascader-panel .et-cascader-column{display:block;flex:none;inline-size:var(--et-cascader-column-inline-size);max-block-size:var(--_et-cascader-panel-max-block-size);overflow-y:auto;overflow-x:clip;overscroll-behavior:contain;padding:6px}.et-cascader-panel .et-cascader-column:not(:last-child){border-inline-end:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1))}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-in-forward .2s ease}.et-cascader-panel .et-cascader-columns[data-sheet] .et-cascader-column:where([data-nav=backward]){animation:et-cascader-column-in-backward .2s ease}.et-cascader-panel .et-cascader-columns:not([data-sheet]) .et-cascader-column:where([data-nav=forward]){animation:et-cascader-column-grow-in .18s ease}.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option{display:flex;align-items:center;gap:8px;inline-size:100%;min-block-size:var(--et-cascader-node-height);padding-inline:10px;border:none;border-radius:6px;background:transparent;font:inherit;text-align:start;color:inherit;cursor:pointer;appearance:none;outline:none;transition:background .12s ease}@media(hover:hover){:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option):focus-visible,:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-focused]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 16%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-expanded]{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent)}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-selected]{color:var(--et-theme-color-ink-solid, currentColor);font-weight:500}:is(.et-cascader-panel .et-cascader-node,.et-cascader-panel .et-cascader-search-option)[data-disabled]{cursor:default;opacity:.4}.et-cascader-panel .et-cascader-node-label,.et-cascader-panel .et-cascader-search-option-label{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.et-cascader-panel .et-cascader-search-option-ancestor{color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-check{position:relative;flex:none;inline-size:16px;block-size:16px;box-sizing:border-box;border:2px solid var(--et-surface-border-solid, rgb(255 255 255 / .3));border-radius:4px;transition:background .12s ease,border-color .12s ease}.et-cascader-panel .et-cascader-check:after{content:\"\";position:absolute;opacity:0}.et-cascader-panel [data-selected]>.et-cascader-check,.et-cascader-panel [data-indeterminate]>.et-cascader-check{border-color:var(--et-theme-color-primary-solid, currentColor);background:var(--et-theme-color-primary-solid, currentColor)}.et-cascader-panel [data-selected]>.et-cascader-check:after{inset-inline-start:4px;inset-block-start:1px;inline-size:4px;block-size:8px;border:solid var(--et-theme-color-on-primary, rgb(0 0 0));border-width:0 2px 2px 0;rotate:45deg;opacity:1}.et-cascader-panel [data-indeterminate]>.et-cascader-check:after{inset-inline-start:2px;inset-block-start:5px;inline-size:8px;block-size:2px;background:var(--et-theme-color-on-primary, rgb(0 0 0));opacity:1}.et-cascader-panel .et-cascader-node-chevron{flex:none;inline-size:12px;block-size:12px;color:var(--et-surface-color-muted-solid, currentColor);rotate:90deg}.et-cascader-panel .et-cascader-state{display:flex;align-items:center;justify-content:center;gap:8px;min-block-size:var(--et-cascader-node-height);padding:12px 16px;text-align:center;color:var(--et-surface-color-muted-solid, currentColor)}.et-cascader-panel .et-cascader-state.et-cascader-state--error{flex-direction:column;gap:8px;font-size:12px}.et-cascader-panel .et-cascader-state-error-message{color:var(--et-theme-color-primary-solid, rgb(248 113 113))}@keyframes et-cascader-title-enter-forward{0%{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-enter-backward{0%{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-forward{to{opacity:0;transform:translate(-12px)}}@keyframes et-cascader-title-leave-backward{to{opacity:0;transform:translate(12px)}}@keyframes et-cascader-title-fade-in{0%{opacity:0}}@keyframes et-cascader-title-fade-out{to{opacity:0}}@keyframes et-cascader-column-in-forward{0%{opacity:0;transform:translate(14px)}}@keyframes et-cascader-column-in-backward{0%{opacity:0;transform:translate(-14px)}}@keyframes et-cascader-column-grow-in{0%{opacity:0;transform:translate(-10px)}}@keyframes et-cascader-crumb-in{0%{opacity:0;transform:translate(8px)}}@keyframes et-cascader-crumb-out{to{opacity:0;transform:translate(8px)}}@media(prefers-reduced-motion:reduce){.et-cascader-panel .et-cascader-column,.et-cascader-panel .et-cascader-sheet-title,.et-cascader-panel .et-cascader-crumb{animation:none}.et-cascader-panel .et-cascader-back,.et-cascader-panel .et-cascader-sheet-title-shift,.et-cascader-panel .et-cascader-columns-track{transition:none}}}\n"] }]
|
|
21503
21563
|
}], ctorParameters: () => [], propDecorators: { panelBody: [{ type: i0.ViewChild, args: ['panelBody', { isSignal: true }] }] } });
|
|
21504
21564
|
|
|
21505
21565
|
class CascaderComponent {
|
|
@@ -28900,17 +28960,17 @@ class RichTextEditorFloatingToolbarComponent {
|
|
|
28900
28960
|
return richTextEditorToolLabel(this.labels(), tool);
|
|
28901
28961
|
}
|
|
28902
28962
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RichTextEditorFloatingToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28903
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RichTextEditorFloatingToolbarComponent, isStandalone: true, selector: "et-rich-text-editor-floating-toolbar", inputs: { editor: { classPropertyName: "editor", publicName: "editor", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "toolbar" }, listeners: { "mousedown": "$event.preventDefault()" }, properties: { "attr.aria-label": "labels().selectionToolbar" }, classAttribute: "et-rte-floating-toolbar" }, providers: [provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LINK_ICON)], hostDirectives: [{ directive: i1.ProvideColorDirective }, { directive: i1.AutoSurfaceDirective }], ngImport: i0, template: "@for (def of inlineTools(); track def.token; let first = $first) {\n @if (def.token === TOOLS.LINK && !first) {\n <
|
|
28963
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RichTextEditorFloatingToolbarComponent, isStandalone: true, selector: "et-rich-text-editor-floating-toolbar", inputs: { editor: { classPropertyName: "editor", publicName: "editor", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "toolbar" }, listeners: { "mousedown": "$event.preventDefault()" }, properties: { "attr.aria-label": "labels().selectionToolbar" }, classAttribute: "et-rte-floating-toolbar" }, providers: [provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LINK_ICON)], hostDirectives: [{ directive: i1.ProvideColorDirective }, { directive: i1.AutoSurfaceDirective }], ngImport: i0, template: "@for (def of inlineTools(); track def.token; let first = $first) {\n @if (def.token === TOOLS.LINK && !first) {\n <et-divider orientation=\"vertical\" decorative />\n }\n\n <!-- Icon tools only: this bar has no room for a custom control, and every inline tool is a toggle. -->\n @if (def.icon; as icon) {\n <button\n [pressed]=\"def.isActive?.(editor()) ?? false\"\n [disabled]=\"def.isDisabled?.(editor()) ?? false\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(editor())\"\n mutedUntilPressed\n et-icon-button\n size=\"sm\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"icon\"></i>\n </button>\n }\n}\n", styles: ["@layer components{.et-overlay.et-rte-floating-toolbar-overlay{overflow:visible;background:transparent;box-shadow:none;border-radius:10px}.et-overlay.et-rte-floating-toolbar-overlay>.et-rte-floating-toolbar{display:flex}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-enter-from,.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-rte-floating-toolbar-overlay[data-overlay-placement^=top].et-animation-enter-from,.et-rte-floating-toolbar-overlay[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-rte-floating-toolbar-overlay[data-overlay-placement^=bottom].et-animation-enter-from,.et-rte-floating-toolbar-overlay[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-leave-active{transition:opacity .1s ease}.et-rte-floating-toolbar-overlay[data-overlay-placement].et-animation-enter-from,.et-rte-floating-toolbar-overlay[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-rte-floating-toolbar{display:flex;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap, 2px);padding:var(--et-rich-text-editor-toolbar-padding, 4px);border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(38 38 38)));color:var(--et-surface-color-solid, var(--et-color-main-contrast, rgb(244 244 245)));box-shadow:0 10px 24px #00000029;--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius, 4px)}.et-rte-floating-toolbar .et-divider{--et-divider-color: color-mix(in srgb, currentColor 20%, transparent);--et-divider-spacing: 2px;--et-divider-inset: 4px}}\n"], dependencies: [{ kind: "component", type: DividerComponent, selector: "et-divider", inputs: ["orientation", "decorative"] }, { kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
28904
28964
|
}
|
|
28905
28965
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RichTextEditorFloatingToolbarComponent, decorators: [{
|
|
28906
28966
|
type: Component,
|
|
28907
|
-
args: [{ selector: 'et-rich-text-editor-floating-toolbar', encapsulation: ViewEncapsulation.None, imports: [IconButtonComponent, IconDirective], providers: [provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LINK_ICON)], hostDirectives: [ProvideColorDirective, AutoSurfaceDirective], host: {
|
|
28967
|
+
args: [{ selector: 'et-rich-text-editor-floating-toolbar', encapsulation: ViewEncapsulation.None, imports: [DividerComponent, IconButtonComponent, IconDirective], providers: [provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LINK_ICON)], hostDirectives: [ProvideColorDirective, AutoSurfaceDirective], host: {
|
|
28908
28968
|
class: 'et-rte-floating-toolbar',
|
|
28909
28969
|
role: 'toolbar',
|
|
28910
28970
|
'[attr.aria-label]': 'labels().selectionToolbar',
|
|
28911
28971
|
// keep the caret/selection in the editor when the user clicks a button
|
|
28912
28972
|
'(mousedown)': '$event.preventDefault()',
|
|
28913
|
-
}, template: "@for (def of inlineTools(); track def.token; let first = $first) {\n @if (def.token === TOOLS.LINK && !first) {\n <
|
|
28973
|
+
}, template: "@for (def of inlineTools(); track def.token; let first = $first) {\n @if (def.token === TOOLS.LINK && !first) {\n <et-divider orientation=\"vertical\" decorative />\n }\n\n <!-- Icon tools only: this bar has no room for a custom control, and every inline tool is a toggle. -->\n @if (def.icon; as icon) {\n <button\n [pressed]=\"def.isActive?.(editor()) ?? false\"\n [disabled]=\"def.isDisabled?.(editor()) ?? false\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(editor())\"\n mutedUntilPressed\n et-icon-button\n size=\"sm\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"icon\"></i>\n </button>\n }\n}\n", styles: ["@layer components{.et-overlay.et-rte-floating-toolbar-overlay{overflow:visible;background:transparent;box-shadow:none;border-radius:10px}.et-overlay.et-rte-floating-toolbar-overlay>.et-rte-floating-toolbar{display:flex}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-enter-from,.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-rte-floating-toolbar-overlay[data-overlay-placement^=top].et-animation-enter-from,.et-rte-floating-toolbar-overlay[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-rte-floating-toolbar-overlay[data-overlay-placement^=bottom].et-animation-enter-from,.et-rte-floating-toolbar-overlay[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-rte-floating-toolbar-overlay.et-animation-leave-active{transition:opacity .1s ease}.et-rte-floating-toolbar-overlay[data-overlay-placement].et-animation-enter-from,.et-rte-floating-toolbar-overlay[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-rte-floating-toolbar{display:flex;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap, 2px);padding:var(--et-rich-text-editor-toolbar-padding, 4px);border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(38 38 38)));color:var(--et-surface-color-solid, var(--et-color-main-contrast, rgb(244 244 245)));box-shadow:0 10px 24px #00000029;--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius, 4px)}.et-rte-floating-toolbar .et-divider{--et-divider-color: color-mix(in srgb, currentColor 20%, transparent);--et-divider-spacing: 2px;--et-divider-inset: 4px}}\n"] }]
|
|
28914
28974
|
}], ctorParameters: () => [], propDecorators: { editor: [{ type: i0.Input, args: [{ isSignal: true, alias: "editor", required: true }] }] } });
|
|
28915
28975
|
|
|
28916
28976
|
const HEADING_SELECTOR = 'h1, h2, h3, h4, h5, h6';
|
|
@@ -32430,6 +32490,7 @@ const createMenuHoverIntent = () => {
|
|
|
32430
32490
|
};
|
|
32431
32491
|
};
|
|
32432
32492
|
|
|
32493
|
+
const MENU_MIN_AVAILABLE_SPACE = 160;
|
|
32433
32494
|
class MenuDirective {
|
|
32434
32495
|
constructor() {
|
|
32435
32496
|
this.destroyRef = inject(DestroyRef);
|
|
@@ -33005,6 +33066,7 @@ class MenuDirective {
|
|
|
33005
33066
|
const positionOptions = {
|
|
33006
33067
|
placement: this.resolvedPlacement(),
|
|
33007
33068
|
fallbackPlacements: this.resolvedFallbackPlacements(),
|
|
33069
|
+
minAvailableSpace: this.resolvedMinAvailableSpace(),
|
|
33008
33070
|
offset: this.resolvedOffset(),
|
|
33009
33071
|
arrowPadding: this.arrowPadding(),
|
|
33010
33072
|
viewportPadding: this.viewportPadding(),
|
|
@@ -33066,6 +33128,18 @@ class MenuDirective {
|
|
|
33066
33128
|
}
|
|
33067
33129
|
return ['left-start', 'right-end', 'left-end'];
|
|
33068
33130
|
}
|
|
33131
|
+
/**
|
|
33132
|
+
* `minAvailableSpace` replaces `flip` outright, so it may only kick in where no consumer has
|
|
33133
|
+
* expressed a placement preference of their own. It is also vertical-only: a submenu opens on the
|
|
33134
|
+
* x axis, where shrinking to the space beside the parent means a narrower - not a shorter - panel.
|
|
33135
|
+
*/
|
|
33136
|
+
resolvedMinAvailableSpace() {
|
|
33137
|
+
if (this.fallbackPlacements() || this.anchorPoint() || !this.isRoot) {
|
|
33138
|
+
return undefined;
|
|
33139
|
+
}
|
|
33140
|
+
const side = this.resolvedPlacement().split('-')[0];
|
|
33141
|
+
return side === 'top' || side === 'bottom' ? MENU_MIN_AVAILABLE_SPACE : undefined;
|
|
33142
|
+
}
|
|
33069
33143
|
resolvedArrow() {
|
|
33070
33144
|
// a point anchor (context menu) has no element the arrow could meaningfully point at
|
|
33071
33145
|
return this.arrow() && this.isRoot && !this.anchorPoint();
|
|
@@ -34022,12 +34096,12 @@ class MenuComponent {
|
|
|
34022
34096
|
this.contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });
|
|
34023
34097
|
this.menu = inject(MenuDirective, { optional: true });
|
|
34024
34098
|
this.errorColorTheme = injectErrorTheme();
|
|
34025
|
-
//
|
|
34026
|
-
//
|
|
34099
|
+
// both must stay content-sized: the host's used size is overridden by the resize animation and
|
|
34100
|
+
// the scroller is sized by the host, so observing either would feed the animation back in
|
|
34027
34101
|
this.headerElement = viewChild('menuHeader', /* @ts-ignore */
|
|
34028
34102
|
...(ngDevMode ? [{ debugName: "headerElement" }] : /* istanbul ignore next */ []));
|
|
34029
|
-
this.
|
|
34030
|
-
...(ngDevMode ? [{ debugName: "
|
|
34103
|
+
this.bodyContentElement = viewChild('menuBodyContent', /* @ts-ignore */
|
|
34104
|
+
...(ngDevMode ? [{ debugName: "bodyContentElement" }] : /* istanbul ignore next */ []));
|
|
34031
34105
|
this.search = computed(() => this.menu?.registeredSearch() ?? null, /* @ts-ignore */
|
|
34032
34106
|
...(ngDevMode ? [{ debugName: "search" }] : /* istanbul ignore next */ []));
|
|
34033
34107
|
this.searchLoading = computed(() => this.search()?.loading() ?? false, /* @ts-ignore */
|
|
@@ -34053,19 +34127,19 @@ class MenuComponent {
|
|
|
34053
34127
|
// animate the menu's block size when its content changes while open
|
|
34054
34128
|
// (e.g. search filtering items away or the search error line appearing)
|
|
34055
34129
|
injectAnimatedBlockSize({
|
|
34056
|
-
observe: [this.headerElement, this.
|
|
34130
|
+
observe: [this.headerElement, this.bodyContentElement],
|
|
34057
34131
|
resizingClass: RESIZE_ANIMATION_CLASS,
|
|
34058
34132
|
});
|
|
34059
34133
|
}
|
|
34060
34134
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34061
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MenuComponent, isStandalone: true, selector: "et-menu", host: { classAttribute: "et-menu" }, viewQueries: [{ propertyName: "headerElement", first: true, predicate: ["menuHeader"], descendants: true, isSignal: true }, { propertyName: "
|
|
34135
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MenuComponent, isStandalone: true, selector: "et-menu", host: { classAttribute: "et-menu" }, viewQueries: [{ propertyName: "headerElement", first: true, predicate: ["menuHeader"], descendants: true, isSignal: true }, { propertyName: "bodyContentElement", first: true, predicate: ["menuBodyContent"], descendants: true, isSignal: true }], hostDirectives: [{ directive: MenuPanelDirective }, { directive: i1.ProvideColorDirective }, { directive: i1.AutoSurfaceDirective }], ngImport: i0, template: "<div #menuHeader class=\"et-menu-header\">\n <div class=\"et-menu-search-field\">\n <ng-content select=\"input[etMenuSearch]\" />\n\n @if (searchLoading()) {\n <et-spinner class=\"et-menu-search-spinner\" diameter=\"16\" />\n }\n </div>\n\n @if (searchError(); as error) {\n <p [id]=\"searchErrorId\" [etProvideColor]=\"errorColorTheme\" class=\"et-menu-search-error\" role=\"alert\">\n {{ error }}\n </p>\n }\n</div>\n\n<div class=\"et-menu-body\">\n <div #menuBodyContent class=\"et-menu-body-content\">\n <ng-content />\n </div>\n</div>\n", styles: ["@layer components{@property --et-menu-min-width{syntax: \"<length>\"; inherits: false; initial-value: 180px;}@property --et-menu-max-height{syntax: \"<length-percentage>\"; inherits: false; initial-value: 40vh;}@property --et-menu-padding-block{syntax: \"<length>\"; inherits: false; initial-value: 6px;}@property --et-menu-padding-inline{syntax: \"<length>\"; inherits: false; initial-value: 6px;}@property --et-menu-item-height{syntax: \"<length>\"; inherits: true; initial-value: 36px;}@property --et-menu-item-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-menu-item-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-menu-item-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-menu-item-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-menu-item-icon-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-menu-separator-margin-block{syntax: \"<length>\"; inherits: false; initial-value: 6px;}@property --et-menu-group-label-font-size{syntax: \"<length>\"; inherits: false; initial-value: 12px;}@property --et-menu-search-height{syntax: \"<length>\"; inherits: false; initial-value: 36px;}.et-overlay.et-overlay--menu{overflow:visible;background:transparent;box-shadow:none}.et-menu{--_et-menu-background: var(--et-surface-background-solid, var(--et-surface-2, rgb(32 32 32)));--_et-menu-color: var(--et-surface-color-solid, var(--et-color-main-contrast, rgb(244 244 245)));--_et-menu-border: var(--et-surface-border-solid, rgb(255 255 255 / .1));--_et-menu-shadow: 0 10px 24px rgb(0 0 0 / .16);--_et-menu-radius: 10px;--_et-menu-item-active-background: color-mix( in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 12%, transparent );--_et-menu-item-pressed-background: color-mix( in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 20%, transparent );--_et-menu-muted-color: var(--et-surface-color-muted-solid, rgb(255 255 255 / .55));--_et-menu-separator-color: var(--et-surface-border-solid, rgb(255 255 255 / .1));display:flex;flex-direction:column;min-inline-size:var(--et-menu-min-width);max-inline-size:min(320px,calc(100vw - 24px));max-block-size:min(var(--et-menu-max-height),var(--et-overlay-max-height, 100vh));border-radius:var(--_et-menu-radius);border:1px solid var(--_et-menu-border);background:var(--_et-menu-background);color:var(--_et-menu-color);font-family:var(--et-font-family, inherit);font-size:var(--et-menu-item-font-size);box-shadow:var(--_et-menu-shadow);outline:none}.et-menu.et-menu--resizing{overflow:clip}.et-menu.et-menu--resizing .et-menu-body{overflow:clip}.et-menu .et-menu-header{flex:none;padding:var(--et-menu-padding-block) var(--et-menu-padding-inline) 0;contain:inline-size}.et-menu .et-menu-header:not(:has(input[etmenusearch])){display:none}.et-menu .et-menu-header .et-menu-search-field{position:relative}.et-menu .et-menu-header .et-menu-search-field:has(.et-menu-search-spinner) input[etmenusearch]{padding-inline-end:calc(var(--et-menu-item-padding-inline) + 22px)}.et-menu .et-menu-header .et-menu-search-spinner{position:absolute;inset-block-start:50%;inset-inline-end:10px;translate:0 -50%;color:var(--_et-menu-muted-color)}.et-menu .et-menu-header .et-menu-search-error{margin:6px 2px 0;font-size:12px;color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-menu .et-menu-header input[etmenusearch]{inline-size:100%;block-size:var(--et-menu-search-height);padding-inline:var(--et-menu-item-padding-inline);border-radius:var(--et-menu-item-border-radius);border:1px solid var(--_et-menu-border);background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;box-sizing:border-box;transition:border-color .12s ease,background .12s ease}.et-menu .et-menu-header input[etmenusearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-menu .et-menu-header input[etmenusearch]::placeholder{color:var(--_et-menu-muted-color)}.et-menu .et-menu-body{flex:1;min-block-size:0;padding:var(--et-menu-padding-block) var(--et-menu-padding-inline);overflow-y:auto;overscroll-behavior:contain}.et-menu .et-menu-group{display:block}.et-menu .et-menu-item{display:flex;align-items:center;gap:var(--et-menu-item-gap);inline-size:100%;min-block-size:var(--et-menu-item-height);padding-inline:var(--et-menu-item-padding-inline);border:none;border-radius:var(--et-menu-item-border-radius);background:transparent;color:inherit;font:inherit;text-align:start;text-decoration:none;cursor:pointer;outline:none;box-sizing:border-box;-webkit-tap-highlight-color:transparent;transition:background .12s ease,color .12s ease,opacity .12s ease}.et-menu .et-menu-item[data-active]:where(:focus-visible),.et-menu .et-menu-item[data-menu-open]{background:var(--_et-menu-item-active-background)}@media(hover:hover){.et-menu .et-menu-item[data-active]:where(:hover){background:var(--_et-menu-item-active-background)}}.et-menu .et-menu-item:active:not([aria-disabled=true]){background:var(--_et-menu-item-pressed-background)}.et-menu .et-menu-item[aria-disabled=true]{opacity:.4;cursor:default}.et-menu .et-menu-item[data-variant=destructive]{color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-menu .et-menu-item .et-menu-item-content{flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--menu[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--menu[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}.et-overlay--menu[data-overlay-placement^=right].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=right].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translate(-.3rem)!important}.et-overlay--menu[data-overlay-placement^=left].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=left].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translate(.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--menu[data-overlay-placement].et-animation-enter-from,.et-overlay--menu[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}}\n"], dependencies: [{ kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
34062
34136
|
}
|
|
34063
34137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MenuComponent, decorators: [{
|
|
34064
34138
|
type: Component,
|
|
34065
34139
|
args: [{ selector: 'et-menu', encapsulation: ViewEncapsulation.None, imports: [ProvideColorDirective, SpinnerComponent], hostDirectives: [MenuPanelDirective, ProvideColorDirective, AutoSurfaceDirective], host: {
|
|
34066
34140
|
class: 'et-menu',
|
|
34067
|
-
}, template: "<div #menuHeader class=\"et-menu-header\">\n <div class=\"et-menu-search-field\">\n <ng-content select=\"input[etMenuSearch]\" />\n\n @if (searchLoading()) {\n <et-spinner class=\"et-menu-search-spinner\" diameter=\"16\" />\n }\n </div>\n\n @if (searchError(); as error) {\n <p [id]=\"searchErrorId\" [etProvideColor]=\"errorColorTheme\" class=\"et-menu-search-error\" role=\"alert\">\n {{ error }}\n </p>\n }\n</div>\n\n<div #
|
|
34068
|
-
}], ctorParameters: () => [], propDecorators: { headerElement: [{ type: i0.ViewChild, args: ['menuHeader', { isSignal: true }] }],
|
|
34141
|
+
}, template: "<div #menuHeader class=\"et-menu-header\">\n <div class=\"et-menu-search-field\">\n <ng-content select=\"input[etMenuSearch]\" />\n\n @if (searchLoading()) {\n <et-spinner class=\"et-menu-search-spinner\" diameter=\"16\" />\n }\n </div>\n\n @if (searchError(); as error) {\n <p [id]=\"searchErrorId\" [etProvideColor]=\"errorColorTheme\" class=\"et-menu-search-error\" role=\"alert\">\n {{ error }}\n </p>\n }\n</div>\n\n<div class=\"et-menu-body\">\n <div #menuBodyContent class=\"et-menu-body-content\">\n <ng-content />\n </div>\n</div>\n", styles: ["@layer components{@property --et-menu-min-width{syntax: \"<length>\"; inherits: false; initial-value: 180px;}@property --et-menu-max-height{syntax: \"<length-percentage>\"; inherits: false; initial-value: 40vh;}@property --et-menu-padding-block{syntax: \"<length>\"; inherits: false; initial-value: 6px;}@property --et-menu-padding-inline{syntax: \"<length>\"; inherits: false; initial-value: 6px;}@property --et-menu-item-height{syntax: \"<length>\"; inherits: true; initial-value: 36px;}@property --et-menu-item-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-menu-item-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-menu-item-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-menu-item-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-menu-item-icon-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-menu-separator-margin-block{syntax: \"<length>\"; inherits: false; initial-value: 6px;}@property --et-menu-group-label-font-size{syntax: \"<length>\"; inherits: false; initial-value: 12px;}@property --et-menu-search-height{syntax: \"<length>\"; inherits: false; initial-value: 36px;}.et-overlay.et-overlay--menu{overflow:visible;background:transparent;box-shadow:none}.et-menu{--_et-menu-background: var(--et-surface-background-solid, var(--et-surface-2, rgb(32 32 32)));--_et-menu-color: var(--et-surface-color-solid, var(--et-color-main-contrast, rgb(244 244 245)));--_et-menu-border: var(--et-surface-border-solid, rgb(255 255 255 / .1));--_et-menu-shadow: 0 10px 24px rgb(0 0 0 / .16);--_et-menu-radius: 10px;--_et-menu-item-active-background: color-mix( in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 12%, transparent );--_et-menu-item-pressed-background: color-mix( in srgb, var(--et-surface-interaction-solid, rgb(255 255 255)) 20%, transparent );--_et-menu-muted-color: var(--et-surface-color-muted-solid, rgb(255 255 255 / .55));--_et-menu-separator-color: var(--et-surface-border-solid, rgb(255 255 255 / .1));display:flex;flex-direction:column;min-inline-size:var(--et-menu-min-width);max-inline-size:min(320px,calc(100vw - 24px));max-block-size:min(var(--et-menu-max-height),var(--et-overlay-max-height, 100vh));border-radius:var(--_et-menu-radius);border:1px solid var(--_et-menu-border);background:var(--_et-menu-background);color:var(--_et-menu-color);font-family:var(--et-font-family, inherit);font-size:var(--et-menu-item-font-size);box-shadow:var(--_et-menu-shadow);outline:none}.et-menu.et-menu--resizing{overflow:clip}.et-menu.et-menu--resizing .et-menu-body{overflow:clip}.et-menu .et-menu-header{flex:none;padding:var(--et-menu-padding-block) var(--et-menu-padding-inline) 0;contain:inline-size}.et-menu .et-menu-header:not(:has(input[etmenusearch])){display:none}.et-menu .et-menu-header .et-menu-search-field{position:relative}.et-menu .et-menu-header .et-menu-search-field:has(.et-menu-search-spinner) input[etmenusearch]{padding-inline-end:calc(var(--et-menu-item-padding-inline) + 22px)}.et-menu .et-menu-header .et-menu-search-spinner{position:absolute;inset-block-start:50%;inset-inline-end:10px;translate:0 -50%;color:var(--_et-menu-muted-color)}.et-menu .et-menu-header .et-menu-search-error{margin:6px 2px 0;font-size:12px;color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-menu .et-menu-header input[etmenusearch]{inline-size:100%;block-size:var(--et-menu-search-height);padding-inline:var(--et-menu-item-padding-inline);border-radius:var(--et-menu-item-border-radius);border:1px solid var(--_et-menu-border);background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;box-sizing:border-box;transition:border-color .12s ease,background .12s ease}.et-menu .et-menu-header input[etmenusearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-menu .et-menu-header input[etmenusearch]::placeholder{color:var(--_et-menu-muted-color)}.et-menu .et-menu-body{flex:1;min-block-size:0;padding:var(--et-menu-padding-block) var(--et-menu-padding-inline);overflow-y:auto;overscroll-behavior:contain}.et-menu .et-menu-group{display:block}.et-menu .et-menu-item{display:flex;align-items:center;gap:var(--et-menu-item-gap);inline-size:100%;min-block-size:var(--et-menu-item-height);padding-inline:var(--et-menu-item-padding-inline);border:none;border-radius:var(--et-menu-item-border-radius);background:transparent;color:inherit;font:inherit;text-align:start;text-decoration:none;cursor:pointer;outline:none;box-sizing:border-box;-webkit-tap-highlight-color:transparent;transition:background .12s ease,color .12s ease,opacity .12s ease}.et-menu .et-menu-item[data-active]:where(:focus-visible),.et-menu .et-menu-item[data-menu-open]{background:var(--_et-menu-item-active-background)}@media(hover:hover){.et-menu .et-menu-item[data-active]:where(:hover){background:var(--_et-menu-item-active-background)}}.et-menu .et-menu-item:active:not([aria-disabled=true]){background:var(--_et-menu-item-pressed-background)}.et-menu .et-menu-item[aria-disabled=true]{opacity:.4;cursor:default}.et-menu .et-menu-item[data-variant=destructive]{color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-menu .et-menu-item .et-menu-item-content{flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--menu[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--menu[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}.et-overlay--menu[data-overlay-placement^=right].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=right].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translate(-.3rem)!important}.et-overlay--menu[data-overlay-placement^=left].et-animation-enter-from,.et-overlay--menu[data-overlay-placement^=left].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translate(.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--menu.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--menu[data-overlay-placement].et-animation-enter-from,.et-overlay--menu[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}}\n"] }]
|
|
34142
|
+
}], ctorParameters: () => [], propDecorators: { headerElement: [{ type: i0.ViewChild, args: ['menuHeader', { isSignal: true }] }], bodyContentElement: [{ type: i0.ViewChild, args: ['menuBodyContent', { isSignal: true }] }] } });
|
|
34069
34143
|
|
|
34070
34144
|
const MENU_IMPORTS = [
|
|
34071
34145
|
MenuDirective,
|
|
@@ -36630,6 +36704,160 @@ const createRichTextEditorTriggerWithQuery = (config) => {
|
|
|
36630
36704
|
*/
|
|
36631
36705
|
const RICH_TEXT_EDITOR_TRIGGERS_IMPORTS = [RichTextEditorTriggersDirective];
|
|
36632
36706
|
|
|
36707
|
+
const TOOLBAR_ORIENTATIONS = {
|
|
36708
|
+
HORIZONTAL: 'horizontal',
|
|
36709
|
+
VERTICAL: 'vertical',
|
|
36710
|
+
};
|
|
36711
|
+
|
|
36712
|
+
const CONTROL_SELECTOR = 'button, [href], input, select, textarea';
|
|
36713
|
+
const TOOLBAR_SELECTOR = '[role="toolbar"]';
|
|
36714
|
+
/**
|
|
36715
|
+
* Turns its host into an ARIA toolbar: a single tab stop that Tab enters and leaves, with the arrow
|
|
36716
|
+
* keys moving focus between the controls inside it. `Home`/`End` jump to the first/last control and
|
|
36717
|
+
* arrow navigation wraps around; in a horizontal toolbar the left/right keys follow the writing
|
|
36718
|
+
* direction.
|
|
36719
|
+
*
|
|
36720
|
+
* Every focusable control rendered inside the host is a toolbar control - projected content,
|
|
36721
|
+
* `@for` output and components that own their own button templates included - so nothing has to be
|
|
36722
|
+
* marked up per item. Natively disabled controls are skipped; controls belonging to a nested
|
|
36723
|
+
* toolbar stay with that toolbar.
|
|
36724
|
+
*
|
|
36725
|
+
* Pair it with an accessible name (`aria-label`, or `aria-labelledby` pointing at a visible
|
|
36726
|
+
* heading), which is what tells the user what the toolbar is for.
|
|
36727
|
+
*
|
|
36728
|
+
* @example
|
|
36729
|
+
* <div [attr.aria-label]="'Text formatting'" etToolbar>
|
|
36730
|
+
* <button et-icon-button type="button">…</button>
|
|
36731
|
+
* <button et-icon-button type="button">…</button>
|
|
36732
|
+
* </div>
|
|
36733
|
+
*/
|
|
36734
|
+
class ToolbarDirective {
|
|
36735
|
+
constructor() {
|
|
36736
|
+
this.elementRef = inject(ElementRef);
|
|
36737
|
+
this.document = inject(DOCUMENT$1);
|
|
36738
|
+
this.orientation = input(TOOLBAR_ORIENTATIONS.HORIZONTAL, /* @ts-ignore */
|
|
36739
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
36740
|
+
this.tabStop = null;
|
|
36741
|
+
afterEveryRender(() => this.syncTabStops());
|
|
36742
|
+
}
|
|
36743
|
+
/** Moves focus to the toolbar's first control, the tab stop a fresh Tab would land on. */
|
|
36744
|
+
focusFirst() {
|
|
36745
|
+
this.focusableControls()[0]?.focus();
|
|
36746
|
+
}
|
|
36747
|
+
handleKeydown(event) {
|
|
36748
|
+
const horizontal = this.orientation() === TOOLBAR_ORIENTATIONS.HORIZONTAL;
|
|
36749
|
+
const rtl = horizontal && getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';
|
|
36750
|
+
const nextKey = horizontal ? (rtl ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';
|
|
36751
|
+
const previousKey = horizontal ? (rtl ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';
|
|
36752
|
+
let target;
|
|
36753
|
+
const controls = this.focusableControls();
|
|
36754
|
+
if (!controls.length)
|
|
36755
|
+
return;
|
|
36756
|
+
const current = controls.indexOf(this.document.activeElement);
|
|
36757
|
+
switch (event.key) {
|
|
36758
|
+
case nextKey:
|
|
36759
|
+
target = controls[(current + 1) % controls.length];
|
|
36760
|
+
break;
|
|
36761
|
+
case previousKey:
|
|
36762
|
+
target = controls[current <= 0 ? controls.length - 1 : current - 1];
|
|
36763
|
+
break;
|
|
36764
|
+
case 'Home':
|
|
36765
|
+
target = controls[0];
|
|
36766
|
+
break;
|
|
36767
|
+
case 'End':
|
|
36768
|
+
target = controls[controls.length - 1];
|
|
36769
|
+
break;
|
|
36770
|
+
default:
|
|
36771
|
+
return;
|
|
36772
|
+
}
|
|
36773
|
+
if (!target)
|
|
36774
|
+
return;
|
|
36775
|
+
event.preventDefault();
|
|
36776
|
+
target.focus();
|
|
36777
|
+
}
|
|
36778
|
+
/** The last focused control keeps the tab stop, so Shift+Tab back re-enters where the user left. */
|
|
36779
|
+
handleFocusIn(event) {
|
|
36780
|
+
const target = event.target;
|
|
36781
|
+
if (!(target instanceof HTMLElement) || !this.focusableControls().includes(target))
|
|
36782
|
+
return;
|
|
36783
|
+
this.tabStop = target;
|
|
36784
|
+
this.syncTabStops();
|
|
36785
|
+
}
|
|
36786
|
+
/** Every control this toolbar owns. Disabled ones are included: they must lose their tab stop too,
|
|
36787
|
+
* or re-enabling one would leave the toolbar with two. */
|
|
36788
|
+
controls() {
|
|
36789
|
+
const host = this.elementRef.nativeElement;
|
|
36790
|
+
// eslint-disable-next-line ethlete/no-dom-query -- any focusable descendant is a toolbar control, including those inside components that own their own button templates, which no directive token could reach
|
|
36791
|
+
const found = Array.from(host.querySelectorAll(`${CONTROL_SELECTOR}, ${TOOLBAR_SELECTOR}`));
|
|
36792
|
+
const nested = found.filter((element) => element.matches(TOOLBAR_SELECTOR));
|
|
36793
|
+
return found.filter((control) => !nested.includes(control) && !nested.some((toolbar) => toolbar.contains(control)));
|
|
36794
|
+
}
|
|
36795
|
+
focusableControls() {
|
|
36796
|
+
return this.controls().filter((control) => !control.disabled);
|
|
36797
|
+
}
|
|
36798
|
+
syncTabStops() {
|
|
36799
|
+
const focusable = this.focusableControls();
|
|
36800
|
+
if (!this.tabStop || !focusable.includes(this.tabStop)) {
|
|
36801
|
+
this.tabStop = focusable[0] ?? null;
|
|
36802
|
+
}
|
|
36803
|
+
for (const control of this.controls()) {
|
|
36804
|
+
const tabIndex = control === this.tabStop ? 0 : -1;
|
|
36805
|
+
// written imperatively rather than as a binding: the controls are arbitrary projected content,
|
|
36806
|
+
// so only touch the DOM when the value changed to keep the per-render pass free
|
|
36807
|
+
if (control.tabIndex !== tabIndex)
|
|
36808
|
+
control.tabIndex = tabIndex;
|
|
36809
|
+
}
|
|
36810
|
+
}
|
|
36811
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToolbarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
36812
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: ToolbarDirective, isStandalone: true, selector: "[etToolbar]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "toolbar" }, listeners: { "keydown": "handleKeydown($event)", "focusin": "handleFocusIn($event)" }, properties: { "attr.aria-orientation": "orientation()" } }, ngImport: i0 }); }
|
|
36813
|
+
}
|
|
36814
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToolbarDirective, decorators: [{
|
|
36815
|
+
type: Directive,
|
|
36816
|
+
args: [{
|
|
36817
|
+
selector: '[etToolbar]',
|
|
36818
|
+
host: {
|
|
36819
|
+
role: 'toolbar',
|
|
36820
|
+
'[attr.aria-orientation]': 'orientation()',
|
|
36821
|
+
'(keydown)': 'handleKeydown($event)',
|
|
36822
|
+
'(focusin)': 'handleFocusIn($event)',
|
|
36823
|
+
},
|
|
36824
|
+
}]
|
|
36825
|
+
}], ctorParameters: () => [], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }] } });
|
|
36826
|
+
|
|
36827
|
+
/**
|
|
36828
|
+
* A bar of related controls that share one tab stop, laid out in a row (or a column with
|
|
36829
|
+
* `orientation="vertical"`) and navigated with the arrow keys - see `[etToolbar]` for the keyboard
|
|
36830
|
+
* model. Group the controls inside it with `et-divider`.
|
|
36831
|
+
*
|
|
36832
|
+
* Pass an `aria-label` naming what the toolbar acts on; without one a screen reader announces only
|
|
36833
|
+
* that a toolbar is present.
|
|
36834
|
+
*
|
|
36835
|
+
* @example
|
|
36836
|
+
* <et-toolbar aria-label="Text formatting">
|
|
36837
|
+
* <button et-icon-button type="button"><i etIcon="et-bold"></i></button>
|
|
36838
|
+
* <button et-icon-button type="button"><i etIcon="et-italic"></i></button>
|
|
36839
|
+
* <et-divider orientation="vertical" decorative />
|
|
36840
|
+
* <button et-icon-button type="button"><i etIcon="et-link"></i></button>
|
|
36841
|
+
* </et-toolbar>
|
|
36842
|
+
*/
|
|
36843
|
+
class ToolbarComponent {
|
|
36844
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
36845
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: ToolbarComponent, isStandalone: true, selector: "et-toolbar, [et-toolbar]", host: { classAttribute: "et-toolbar" }, hostDirectives: [{ directive: ToolbarDirective, inputs: ["orientation", "orientation"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["@layer components{@property --et-toolbar-gap{syntax: \"<length>\"; inherits: false; initial-value: 4px;}@property --et-toolbar-padding{syntax: \"<length>\"; inherits: false; initial-value: 4px;}@property --et-toolbar-border-radius{syntax: \"<length>\"; inherits: false; initial-value: 8px;}@property --et-toolbar-background{syntax: \"<color>\"; inherits: false; initial-value: transparent;}.et-toolbar{display:flex;align-items:center;gap:var(--et-toolbar-gap);padding:var(--et-toolbar-padding);border-radius:var(--et-toolbar-border-radius);background:var(--et-toolbar-background);box-sizing:border-box}.et-toolbar:where([aria-orientation=vertical]){flex-direction:column;align-items:stretch}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
36846
|
+
}
|
|
36847
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToolbarComponent, decorators: [{
|
|
36848
|
+
type: Component,
|
|
36849
|
+
args: [{ selector: 'et-toolbar, [et-toolbar]', template: `<ng-content />`, encapsulation: ViewEncapsulation.None, hostDirectives: [
|
|
36850
|
+
{
|
|
36851
|
+
directive: ToolbarDirective,
|
|
36852
|
+
inputs: ['orientation'],
|
|
36853
|
+
},
|
|
36854
|
+
], host: {
|
|
36855
|
+
class: 'et-toolbar',
|
|
36856
|
+
}, styles: ["@layer components{@property --et-toolbar-gap{syntax: \"<length>\"; inherits: false; initial-value: 4px;}@property --et-toolbar-padding{syntax: \"<length>\"; inherits: false; initial-value: 4px;}@property --et-toolbar-border-radius{syntax: \"<length>\"; inherits: false; initial-value: 8px;}@property --et-toolbar-background{syntax: \"<color>\"; inherits: false; initial-value: transparent;}.et-toolbar{display:flex;align-items:center;gap:var(--et-toolbar-gap);padding:var(--et-toolbar-padding);border-radius:var(--et-toolbar-border-radius);background:var(--et-toolbar-background);box-sizing:border-box}.et-toolbar:where([aria-orientation=vertical]){flex-direction:column;align-items:stretch}}\n"] }]
|
|
36857
|
+
}] });
|
|
36858
|
+
|
|
36859
|
+
const TOOLBAR_IMPORTS = [ToolbarComponent, ToolbarDirective];
|
|
36860
|
+
|
|
36633
36861
|
/** How often the docked toolbar re-checks where the keyboard is, to recover a missed viewport event. */
|
|
36634
36862
|
const DOCKED_TOOLBAR_POLL_MS = 500;
|
|
36635
36863
|
/** Caret-navigation / deletion keys that should drop any pending stored-mark toggle. */
|
|
@@ -36664,8 +36892,6 @@ class RichTextEditorComponent {
|
|
|
36664
36892
|
this.floatingToolbarSetup = inject(RICH_TEXT_EDITOR_FLOATING_TOOLBAR, { optional: true });
|
|
36665
36893
|
this.editable = viewChild.required('editable', /* @ts-ignore */
|
|
36666
36894
|
...(ngDevMode ? [{ debugName: "editable" }] : /* istanbul ignore next */ []));
|
|
36667
|
-
this.toolbar = viewChild.required('toolbar', /* @ts-ignore */
|
|
36668
|
-
...(ngDevMode ? [{ debugName: "toolbar" }] : /* istanbul ignore next */ []));
|
|
36669
36895
|
this.TOOLS = RICH_TEXT_EDITOR_TOOLS;
|
|
36670
36896
|
/** The strings in effect, owned by the directive so the opt-in tools read the same set. */
|
|
36671
36897
|
this.labels = computed(() => this.dir.resolvedLabels(), /* @ts-ignore */
|
|
@@ -36679,14 +36905,10 @@ class RichTextEditorComponent {
|
|
|
36679
36905
|
/** Dock the toolbar above the keyboard only on touch while editing. */
|
|
36680
36906
|
this.dockedToolbar = computed(() => this.hasTouchInput() && this.editingActive(), /* @ts-ignore */
|
|
36681
36907
|
...(ngDevMode ? [{ debugName: "dockedToolbar" }] : /* istanbul ignore next */ []));
|
|
36682
|
-
/** The toolbar button currently holding the single roving tab stop (ARIA toolbar pattern). */
|
|
36683
|
-
this.toolbarTabStop = null;
|
|
36684
36908
|
this.linkEditorSetup?.(this.dir, this.host.nativeElement);
|
|
36685
36909
|
this.floatingToolbarSetup?.(this.dir);
|
|
36686
36910
|
this.trackKeyboardInset();
|
|
36687
36911
|
this.trackEditingActive();
|
|
36688
|
-
// keep the roving tab stop valid as tools are added/removed or become disabled
|
|
36689
|
-
afterEveryRender(() => this.updateToolbarTabStops());
|
|
36690
36912
|
afterNextRender(() => {
|
|
36691
36913
|
this.dir.editorDom.root.set(this.editable().nativeElement ?? null);
|
|
36692
36914
|
this.dir.renderExternalValue();
|
|
@@ -36713,48 +36935,6 @@ class RichTextEditorComponent {
|
|
|
36713
36935
|
syncValueFromDom() {
|
|
36714
36936
|
this.dir.syncFromDom();
|
|
36715
36937
|
}
|
|
36716
|
-
/**
|
|
36717
|
-
* The toolbar is a single tab stop (ARIA toolbar pattern): Tab enters on one button, the arrow
|
|
36718
|
-
* keys move focus between the buttons, and the next Tab leaves the toolbar. Menu surfaces render
|
|
36719
|
-
* into an overlay, so every `button` inside the toolbar element is a toolbar control - including
|
|
36720
|
-
* the custom tool controls (`ngComponentOutlet`), which template bindings couldn't reach.
|
|
36721
|
-
*/
|
|
36722
|
-
handleToolbarKeydown(event) {
|
|
36723
|
-
if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight' && event.key !== 'Home' && event.key !== 'End') {
|
|
36724
|
-
return;
|
|
36725
|
-
}
|
|
36726
|
-
const buttons = this.toolbarButtons().filter((button) => !button.disabled);
|
|
36727
|
-
if (!buttons.length)
|
|
36728
|
-
return;
|
|
36729
|
-
const currentIndex = buttons.indexOf(this.document.activeElement);
|
|
36730
|
-
let next;
|
|
36731
|
-
switch (event.key) {
|
|
36732
|
-
case 'ArrowLeft':
|
|
36733
|
-
next = buttons[currentIndex <= 0 ? buttons.length - 1 : currentIndex - 1];
|
|
36734
|
-
break;
|
|
36735
|
-
case 'ArrowRight':
|
|
36736
|
-
next = buttons[(currentIndex + 1) % buttons.length];
|
|
36737
|
-
break;
|
|
36738
|
-
case 'Home':
|
|
36739
|
-
next = buttons[0];
|
|
36740
|
-
break;
|
|
36741
|
-
case 'End':
|
|
36742
|
-
next = buttons[buttons.length - 1];
|
|
36743
|
-
break;
|
|
36744
|
-
}
|
|
36745
|
-
if (!next)
|
|
36746
|
-
return;
|
|
36747
|
-
event.preventDefault();
|
|
36748
|
-
next.focus();
|
|
36749
|
-
}
|
|
36750
|
-
/** The last focused button keeps the tab stop, so Shift+Tab back re-enters where the user left. */
|
|
36751
|
-
handleToolbarFocusIn(event) {
|
|
36752
|
-
const target = event.target;
|
|
36753
|
-
if (!(target instanceof HTMLButtonElement) || target.disabled)
|
|
36754
|
-
return;
|
|
36755
|
-
this.toolbarTabStop = target;
|
|
36756
|
-
this.updateToolbarTabStops();
|
|
36757
|
-
}
|
|
36758
36938
|
interceptEditorKeydown(event) {
|
|
36759
36939
|
// History first, and always prevented: the native contenteditable undo stack must never run,
|
|
36760
36940
|
// since paste normalization and autoformat rewrite the DOM behind its back and it would restore
|
|
@@ -36924,24 +37104,6 @@ class RichTextEditorComponent {
|
|
|
36924
37104
|
break;
|
|
36925
37105
|
}
|
|
36926
37106
|
}
|
|
36927
|
-
toolbarButtons() {
|
|
36928
|
-
// eslint-disable-next-line ethlete/no-dom-query -- custom tool controls (ngComponentOutlet) own their button templates, so no directive token could reach them
|
|
36929
|
-
return Array.from(this.toolbar().nativeElement.querySelectorAll('button'));
|
|
36930
|
-
}
|
|
36931
|
-
updateToolbarTabStops() {
|
|
36932
|
-
const buttons = this.toolbarButtons();
|
|
36933
|
-
const enabled = buttons.filter((button) => !button.disabled);
|
|
36934
|
-
if (!this.toolbarTabStop || !enabled.includes(this.toolbarTabStop)) {
|
|
36935
|
-
this.toolbarTabStop = enabled[0] ?? null;
|
|
36936
|
-
}
|
|
36937
|
-
for (const button of buttons) {
|
|
36938
|
-
const tabIndex = button === this.toolbarTabStop ? 0 : -1;
|
|
36939
|
-
// written imperatively (not a binding) since custom tool controls own their button templates;
|
|
36940
|
-
// only touch the DOM when the value changed so the per-render pass stays free
|
|
36941
|
-
if (button.tabIndex !== tabIndex)
|
|
36942
|
-
button.tabIndex = tabIndex;
|
|
36943
|
-
}
|
|
36944
|
-
}
|
|
36945
37107
|
/** Track the visual viewport so the docked (fixed) toolbar sits right above the on-screen
|
|
36946
37108
|
* keyboard: the inset is the gap from where `position: fixed; bottom: 0` actually renders (a
|
|
36947
37109
|
* measured probe - see below) down past the keyboard's top edge
|
|
@@ -37088,11 +37250,11 @@ class RichTextEditorComponent {
|
|
|
37088
37250
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RichTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37089
37251
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RichTextEditorComponent, isStandalone: true, selector: "et-rich-text-editor", host: { listeners: { "click": "dir.activate()" }, properties: { "class.et-rich-text-editor--touch": "hasTouchInput()", "class.et-rich-text-editor--docked-toolbar": "dockedToolbar()" }, classAttribute: "et-rich-text-editor" }, providers: [
|
|
37090
37252
|
provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LIST_BULLETED_ICON, LIST_NUMBERED_ICON, LINK_ICON, QUOTE_ICON, CODE_BLOCK_ICON, UNDO_ICON, REDO_ICON),
|
|
37091
|
-
], viewQueries: [{ propertyName: "editable", first: true, predicate: ["editable"], descendants: true, isSignal: true }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true, isSignal: true }], hostDirectives: [{ directive: RichTextEditorDirective, inputs: ["value", "value", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "tools", "tools", "autoformat", "autoformat", "labels", "labels"], outputs: ["valueChange", "valueChange", "touchedChange", "touchedChange"] }], ngImport: i0, template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- ARIA toolbar pattern: the container only relays keys/focus for its roving tab stop; the buttons inside are the focusable controls -->\n<div\n #toolbar\n [attr.aria-label]=\"labels().toolbar\"\n (keydown)=\"handleToolbarKeydown($event)\"\n (focusin)=\"handleToolbarFocusIn($event)\"\n class=\"et-rte-toolbar\"\n role=\"toolbar\"\n>\n @for (tool of dir.resolvedTools(); track $index) {\n @switch (tool) {\n @case (TOOLS.DIVIDER) {\n <span class=\"et-rte-toolbar-divider\" aria-hidden=\"true\"></span>\n }\n @default {\n @if (dir.toolDefs.get(tool); as def) {\n @if (def.control; as control) {\n <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n } @else {\n <button\n [pressed]=\"def.isActive?.(dir) ?? false\"\n [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(dir)\"\n mutedUntilPressed\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n </button>\n }\n }\n }\n }\n }\n</div>\n\n<div\n #editable\n [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n [attr.data-placeholder]=\"dir.placeholder() || null\"\n [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"dir.describedBy() || null\"\n [attr.aria-labelledby]=\"dir.labelId() || null\"\n [attr.aria-disabled]=\"dir.disabled() || null\"\n [attr.aria-readonly]=\"dir.readonly() || null\"\n (input)=\"syncValueFromDom()\"\n (beforeinput)=\"interceptFormattingCommand($event)\"\n (keydown)=\"interceptEditorKeydown($event)\"\n (paste)=\"interceptPaste($event)\"\n (drop)=\"interceptDrop($event)\"\n (click)=\"interceptClick($event)\"\n (pointerdown)=\"dir.clearPendingMarks()\"\n (focus)=\"dir.focused.set(true)\"\n (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n class=\"et-rte-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n></div>\n", styles: ["@layer components{@property --et-rich-text-editor-toolbar-gap{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-toolbar-padding{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-button-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-min-height{syntax: \"<length>\"; inherits: true; initial-value: 96px;}@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0;color:inherit}et-rich-text-editor .et-rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap);padding:var(--et-rich-text-editor-toolbar-padding);padding-inline:calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));border-block-end:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius)}et-rich-text-editor .et-rte-toolbar .et-icon-button{--_et-focus-ring-offset: -1px}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{position:fixed;inset-inline:0;inset-block-end:0;z-index:60;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;padding-inline:8px;padding-block-start:6px;padding-block-end:calc(6px + max(var(--_et-rte-keyboard-inset, 0px),env(keyboard-inset-height,0px)));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(24 24 24)));border-block-end:none;border-block-start:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);box-shadow:0 -6px 20px #0000003d;scrollbar-width:none;opacity:0;transform:translateY(100%);pointer-events:none;transition:opacity .16s var(--ease-out-5, ease),transform .26s var(--ease-out-5, ease)}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar::-webkit-scrollbar{display:none}et-rich-text-editor.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar{opacity:1;transform:translateY(0);pointer-events:auto}et-rich-text-editor.et-rich-text-editor--touch .et-rte-content{font-size:max(1em,16px)}@media(prefers-reduced-motion:reduce){et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{transition:opacity .16s var(--ease-out-5, ease)}}et-rich-text-editor .et-rte-toolbar-divider{inline-size:1px;align-self:stretch;margin-block:4px;margin-inline:2px;background:color-mix(in srgb,currentColor 12%,transparent)}et-rich-text-editor .et-rte-content{--et-theme-color-primary-rgb: var(--et-color-primary);--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));display:block;flex:1;min-inline-size:0;padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);min-block-size:var(--et-rich-text-editor-min-height);outline:none;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);overflow-wrap:anywhere}et-rich-text-editor .et-rte-content:empty:before{content:attr(data-placeholder);color:color-mix(in srgb,currentColor 46%,transparent);pointer-events:none}et-rich-text-editor .et-rte-content>:first-child{margin-block-start:0}et-rich-text-editor .et-rte-content>:last-child{margin-block-end:0}et-rich-text-editor .et-rte-content p{margin-block:0}et-rich-text-editor .et-rte-content p+p,et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol,et-rich-text-editor .et-rte-content blockquote,et-rich-text-editor .et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1,et-rich-text-editor .et-rte-content h2,et-rich-text-editor .et-rte-content h3,et-rich-text-editor .et-rte-content h4,et-rich-text-editor .et-rte-content h5,et-rich-text-editor .et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}et-rich-text-editor .et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,et-rich-text-editor .et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1{font-size:2.4rem}et-rich-text-editor .et-rte-content h2{font-size:2rem}et-rich-text-editor .et-rte-content h3{font-size:1.6rem}et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}et-rich-text-editor .et-rte-content ul{list-style-type:disc}et-rich-text-editor .et-rte-content ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul{list-style-type:circle}et-rich-text-editor .et-rte-content ul ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul ul{list-style-type:square}et-rich-text-editor .et-rte-content ul ul ul ul{list-style-type:disc}et-rich-text-editor .et-rte-content ol{list-style-type:decimal}et-rich-text-editor .et-rte-content ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}et-rich-text-editor .et-rte-content ol ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}et-rich-text-editor .et-rte-content ol ol ol ol{list-style-type:decimal}et-rich-text-editor .et-rte-content li{margin-block:0}et-rich-text-editor .et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}et-rich-text-editor .et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}et-rich-text-editor .et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}et-rich-text-editor .et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}et-rich-text-editor .et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}et-rich-text-editor .et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}et-rich-text-editor .et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}et-rich-text-editor .et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"], dependencies: [{ kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
37253
|
+
], viewQueries: [{ propertyName: "editable", first: true, predicate: ["editable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: RichTextEditorDirective, inputs: ["value", "value", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "tools", "tools", "autoformat", "autoformat", "labels", "labels"], outputs: ["valueChange", "valueChange", "touchedChange", "touchedChange"] }], ngImport: i0, template: "<div [attr.aria-label]=\"labels().toolbar\" class=\"et-rte-toolbar\" etToolbar>\n @for (tool of dir.resolvedTools(); track $index) {\n @switch (tool) {\n @case (TOOLS.DIVIDER) {\n <et-divider orientation=\"vertical\" decorative />\n }\n @default {\n @if (dir.toolDefs.get(tool); as def) {\n @if (def.control; as control) {\n <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n } @else {\n <button\n [pressed]=\"def.isActive?.(dir) ?? false\"\n [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(dir)\"\n mutedUntilPressed\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n </button>\n }\n }\n }\n }\n }\n</div>\n\n<div\n #editable\n [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n [attr.data-placeholder]=\"dir.placeholder() || null\"\n [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"dir.describedBy() || null\"\n [attr.aria-labelledby]=\"dir.labelId() || null\"\n [attr.aria-disabled]=\"dir.disabled() || null\"\n [attr.aria-readonly]=\"dir.readonly() || null\"\n (input)=\"syncValueFromDom()\"\n (beforeinput)=\"interceptFormattingCommand($event)\"\n (keydown)=\"interceptEditorKeydown($event)\"\n (paste)=\"interceptPaste($event)\"\n (drop)=\"interceptDrop($event)\"\n (click)=\"interceptClick($event)\"\n (pointerdown)=\"dir.clearPendingMarks()\"\n (focus)=\"dir.focused.set(true)\"\n (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n class=\"et-rte-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n></div>\n", styles: ["@layer components{@property --et-rich-text-editor-toolbar-gap{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-toolbar-padding{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-button-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-min-height{syntax: \"<length>\"; inherits: true; initial-value: 96px;}@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0;color:inherit}et-rich-text-editor .et-rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap);padding:var(--et-rich-text-editor-toolbar-padding);padding-inline:calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));border-block-end:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius)}et-rich-text-editor .et-rte-toolbar .et-icon-button{--_et-focus-ring-offset: -1px}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{position:fixed;inset-inline:0;inset-block-end:0;z-index:60;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;padding-inline:8px;padding-block-start:6px;padding-block-end:calc(6px + max(var(--_et-rte-keyboard-inset, 0px),env(keyboard-inset-height,0px)));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(24 24 24)));border-block-end:none;border-block-start:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);box-shadow:0 -6px 20px #0000003d;scrollbar-width:none;opacity:0;transform:translateY(100%);pointer-events:none;transition:opacity .16s var(--ease-out-5, ease),transform .26s var(--ease-out-5, ease)}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar::-webkit-scrollbar{display:none}et-rich-text-editor.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar{opacity:1;transform:translateY(0);pointer-events:auto}et-rich-text-editor.et-rich-text-editor--touch .et-rte-content{font-size:max(1em,16px)}@media(prefers-reduced-motion:reduce){et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{transition:opacity .16s var(--ease-out-5, ease)}}et-rich-text-editor .et-rte-toolbar .et-divider{--et-divider-color: color-mix(in srgb, currentColor 12%, transparent);--et-divider-spacing: 2px;--et-divider-inset: 4px}et-rich-text-editor .et-rte-content{--et-theme-color-primary-rgb: var(--et-color-primary);--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));display:block;flex:1;min-inline-size:0;padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);min-block-size:var(--et-rich-text-editor-min-height);outline:none;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);overflow-wrap:anywhere}et-rich-text-editor .et-rte-content:empty:before{content:attr(data-placeholder);color:color-mix(in srgb,currentColor 46%,transparent);pointer-events:none}et-rich-text-editor .et-rte-content>:first-child{margin-block-start:0}et-rich-text-editor .et-rte-content>:last-child{margin-block-end:0}et-rich-text-editor .et-rte-content p{margin-block:0}et-rich-text-editor .et-rte-content p+p,et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol,et-rich-text-editor .et-rte-content blockquote,et-rich-text-editor .et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1,et-rich-text-editor .et-rte-content h2,et-rich-text-editor .et-rte-content h3,et-rich-text-editor .et-rte-content h4,et-rich-text-editor .et-rte-content h5,et-rich-text-editor .et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}et-rich-text-editor .et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,et-rich-text-editor .et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1{font-size:2.4rem}et-rich-text-editor .et-rte-content h2{font-size:2rem}et-rich-text-editor .et-rte-content h3{font-size:1.6rem}et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}et-rich-text-editor .et-rte-content ul{list-style-type:disc}et-rich-text-editor .et-rte-content ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul{list-style-type:circle}et-rich-text-editor .et-rte-content ul ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul ul{list-style-type:square}et-rich-text-editor .et-rte-content ul ul ul ul{list-style-type:disc}et-rich-text-editor .et-rte-content ol{list-style-type:decimal}et-rich-text-editor .et-rte-content ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}et-rich-text-editor .et-rte-content ol ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}et-rich-text-editor .et-rte-content ol ol ol ol{list-style-type:decimal}et-rich-text-editor .et-rte-content li{margin-block:0}et-rich-text-editor .et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}et-rich-text-editor .et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}et-rich-text-editor .et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}et-rich-text-editor .et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}et-rich-text-editor .et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}et-rich-text-editor .et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}et-rich-text-editor .et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}et-rich-text-editor .et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"], dependencies: [{ kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "component", type: DividerComponent, selector: "et-divider", inputs: ["orientation", "decorative"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: ToolbarDirective, selector: "[etToolbar]", inputs: ["orientation"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
37092
37254
|
}
|
|
37093
37255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RichTextEditorComponent, decorators: [{
|
|
37094
37256
|
type: Component,
|
|
37095
|
-
args: [{ selector: 'et-rich-text-editor', encapsulation: ViewEncapsulation.None, imports: [...BUTTON_IMPORTS, IconDirective, NgComponentOutlet], providers: [
|
|
37257
|
+
args: [{ selector: 'et-rich-text-editor', encapsulation: ViewEncapsulation.None, imports: [...BUTTON_IMPORTS, DividerComponent, IconDirective, NgComponentOutlet, ToolbarDirective], providers: [
|
|
37096
37258
|
provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LIST_BULLETED_ICON, LIST_NUMBERED_ICON, LINK_ICON, QUOTE_ICON, CODE_BLOCK_ICON, UNDO_ICON, REDO_ICON),
|
|
37097
37259
|
], hostDirectives: [
|
|
37098
37260
|
{
|
|
@@ -37121,8 +37283,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
37121
37283
|
'[class.et-rich-text-editor--touch]': 'hasTouchInput()',
|
|
37122
37284
|
'[class.et-rich-text-editor--docked-toolbar]': 'dockedToolbar()',
|
|
37123
37285
|
'(click)': 'dir.activate()',
|
|
37124
|
-
}, template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -- ARIA toolbar pattern: the container only relays keys/focus for its roving tab stop; the buttons inside are the focusable controls -->\n<div\n #toolbar\n [attr.aria-label]=\"labels().toolbar\"\n (keydown)=\"handleToolbarKeydown($event)\"\n (focusin)=\"handleToolbarFocusIn($event)\"\n class=\"et-rte-toolbar\"\n role=\"toolbar\"\n>\n @for (tool of dir.resolvedTools(); track $index) {\n @switch (tool) {\n @case (TOOLS.DIVIDER) {\n <span class=\"et-rte-toolbar-divider\" aria-hidden=\"true\"></span>\n }\n @default {\n @if (dir.toolDefs.get(tool); as def) {\n @if (def.control; as control) {\n <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n } @else {\n <button\n [pressed]=\"def.isActive?.(dir) ?? false\"\n [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(dir)\"\n mutedUntilPressed\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n </button>\n }\n }\n }\n }\n }\n</div>\n\n<div\n #editable\n [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n [attr.data-placeholder]=\"dir.placeholder() || null\"\n [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"dir.describedBy() || null\"\n [attr.aria-labelledby]=\"dir.labelId() || null\"\n [attr.aria-disabled]=\"dir.disabled() || null\"\n [attr.aria-readonly]=\"dir.readonly() || null\"\n (input)=\"syncValueFromDom()\"\n (beforeinput)=\"interceptFormattingCommand($event)\"\n (keydown)=\"interceptEditorKeydown($event)\"\n (paste)=\"interceptPaste($event)\"\n (drop)=\"interceptDrop($event)\"\n (click)=\"interceptClick($event)\"\n (pointerdown)=\"dir.clearPendingMarks()\"\n (focus)=\"dir.focused.set(true)\"\n (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n class=\"et-rte-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n></div>\n", styles: ["@layer components{@property --et-rich-text-editor-toolbar-gap{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-toolbar-padding{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-button-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-min-height{syntax: \"<length>\"; inherits: true; initial-value: 96px;}@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0;color:inherit}et-rich-text-editor .et-rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap);padding:var(--et-rich-text-editor-toolbar-padding);padding-inline:calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));border-block-end:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius)}et-rich-text-editor .et-rte-toolbar .et-icon-button{--_et-focus-ring-offset: -1px}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{position:fixed;inset-inline:0;inset-block-end:0;z-index:60;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;padding-inline:8px;padding-block-start:6px;padding-block-end:calc(6px + max(var(--_et-rte-keyboard-inset, 0px),env(keyboard-inset-height,0px)));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(24 24 24)));border-block-end:none;border-block-start:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);box-shadow:0 -6px 20px #0000003d;scrollbar-width:none;opacity:0;transform:translateY(100%);pointer-events:none;transition:opacity .16s var(--ease-out-5, ease),transform .26s var(--ease-out-5, ease)}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar::-webkit-scrollbar{display:none}et-rich-text-editor.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar{opacity:1;transform:translateY(0);pointer-events:auto}et-rich-text-editor.et-rich-text-editor--touch .et-rte-content{font-size:max(1em,16px)}@media(prefers-reduced-motion:reduce){et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{transition:opacity .16s var(--ease-out-5, ease)}}et-rich-text-editor .et-rte-toolbar-divider{inline-size:1px;align-self:stretch;margin-block:4px;margin-inline:2px;background:color-mix(in srgb,currentColor 12%,transparent)}et-rich-text-editor .et-rte-content{--et-theme-color-primary-rgb: var(--et-color-primary);--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));display:block;flex:1;min-inline-size:0;padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);min-block-size:var(--et-rich-text-editor-min-height);outline:none;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);overflow-wrap:anywhere}et-rich-text-editor .et-rte-content:empty:before{content:attr(data-placeholder);color:color-mix(in srgb,currentColor 46%,transparent);pointer-events:none}et-rich-text-editor .et-rte-content>:first-child{margin-block-start:0}et-rich-text-editor .et-rte-content>:last-child{margin-block-end:0}et-rich-text-editor .et-rte-content p{margin-block:0}et-rich-text-editor .et-rte-content p+p,et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol,et-rich-text-editor .et-rte-content blockquote,et-rich-text-editor .et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1,et-rich-text-editor .et-rte-content h2,et-rich-text-editor .et-rte-content h3,et-rich-text-editor .et-rte-content h4,et-rich-text-editor .et-rte-content h5,et-rich-text-editor .et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}et-rich-text-editor .et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,et-rich-text-editor .et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1{font-size:2.4rem}et-rich-text-editor .et-rte-content h2{font-size:2rem}et-rich-text-editor .et-rte-content h3{font-size:1.6rem}et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}et-rich-text-editor .et-rte-content ul{list-style-type:disc}et-rich-text-editor .et-rte-content ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul{list-style-type:circle}et-rich-text-editor .et-rte-content ul ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul ul{list-style-type:square}et-rich-text-editor .et-rte-content ul ul ul ul{list-style-type:disc}et-rich-text-editor .et-rte-content ol{list-style-type:decimal}et-rich-text-editor .et-rte-content ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}et-rich-text-editor .et-rte-content ol ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}et-rich-text-editor .et-rte-content ol ol ol ol{list-style-type:decimal}et-rich-text-editor .et-rte-content li{margin-block:0}et-rich-text-editor .et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}et-rich-text-editor .et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}et-rich-text-editor .et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}et-rich-text-editor .et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}et-rich-text-editor .et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}et-rich-text-editor .et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}et-rich-text-editor .et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}et-rich-text-editor .et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"] }]
|
|
37125
|
-
}], ctorParameters: () => [], propDecorators: { editable: [{ type: i0.ViewChild, args: ['editable', { isSignal: true }] }]
|
|
37286
|
+
}, template: "<div [attr.aria-label]=\"labels().toolbar\" class=\"et-rte-toolbar\" etToolbar>\n @for (tool of dir.resolvedTools(); track $index) {\n @switch (tool) {\n @case (TOOLS.DIVIDER) {\n <et-divider orientation=\"vertical\" decorative />\n }\n @default {\n @if (dir.toolDefs.get(tool); as def) {\n @if (def.control; as control) {\n <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n } @else {\n <button\n [pressed]=\"def.isActive?.(dir) ?? false\"\n [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(dir)\"\n mutedUntilPressed\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n </button>\n }\n }\n }\n }\n }\n</div>\n\n<div\n #editable\n [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n [attr.data-placeholder]=\"dir.placeholder() || null\"\n [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"dir.describedBy() || null\"\n [attr.aria-labelledby]=\"dir.labelId() || null\"\n [attr.aria-disabled]=\"dir.disabled() || null\"\n [attr.aria-readonly]=\"dir.readonly() || null\"\n (input)=\"syncValueFromDom()\"\n (beforeinput)=\"interceptFormattingCommand($event)\"\n (keydown)=\"interceptEditorKeydown($event)\"\n (paste)=\"interceptPaste($event)\"\n (drop)=\"interceptDrop($event)\"\n (click)=\"interceptClick($event)\"\n (pointerdown)=\"dir.clearPendingMarks()\"\n (focus)=\"dir.focused.set(true)\"\n (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n class=\"et-rte-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n></div>\n", styles: ["@layer components{@property --et-rich-text-editor-toolbar-gap{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-toolbar-padding{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-button-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-min-height{syntax: \"<length>\"; inherits: true; initial-value: 96px;}@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0;color:inherit}et-rich-text-editor .et-rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap);padding:var(--et-rich-text-editor-toolbar-padding);padding-inline:calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));border-block-end:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius)}et-rich-text-editor .et-rte-toolbar .et-icon-button{--_et-focus-ring-offset: -1px}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{position:fixed;inset-inline:0;inset-block-end:0;z-index:60;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;padding-inline:8px;padding-block-start:6px;padding-block-end:calc(6px + max(var(--_et-rte-keyboard-inset, 0px),env(keyboard-inset-height,0px)));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(24 24 24)));border-block-end:none;border-block-start:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);box-shadow:0 -6px 20px #0000003d;scrollbar-width:none;opacity:0;transform:translateY(100%);pointer-events:none;transition:opacity .16s var(--ease-out-5, ease),transform .26s var(--ease-out-5, ease)}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar::-webkit-scrollbar{display:none}et-rich-text-editor.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar{opacity:1;transform:translateY(0);pointer-events:auto}et-rich-text-editor.et-rich-text-editor--touch .et-rte-content{font-size:max(1em,16px)}@media(prefers-reduced-motion:reduce){et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{transition:opacity .16s var(--ease-out-5, ease)}}et-rich-text-editor .et-rte-toolbar .et-divider{--et-divider-color: color-mix(in srgb, currentColor 12%, transparent);--et-divider-spacing: 2px;--et-divider-inset: 4px}et-rich-text-editor .et-rte-content{--et-theme-color-primary-rgb: var(--et-color-primary);--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));display:block;flex:1;min-inline-size:0;padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);min-block-size:var(--et-rich-text-editor-min-height);outline:none;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);overflow-wrap:anywhere}et-rich-text-editor .et-rte-content:empty:before{content:attr(data-placeholder);color:color-mix(in srgb,currentColor 46%,transparent);pointer-events:none}et-rich-text-editor .et-rte-content>:first-child{margin-block-start:0}et-rich-text-editor .et-rte-content>:last-child{margin-block-end:0}et-rich-text-editor .et-rte-content p{margin-block:0}et-rich-text-editor .et-rte-content p+p,et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol,et-rich-text-editor .et-rte-content blockquote,et-rich-text-editor .et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1,et-rich-text-editor .et-rte-content h2,et-rich-text-editor .et-rte-content h3,et-rich-text-editor .et-rte-content h4,et-rich-text-editor .et-rte-content h5,et-rich-text-editor .et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}et-rich-text-editor .et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,et-rich-text-editor .et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1{font-size:2.4rem}et-rich-text-editor .et-rte-content h2{font-size:2rem}et-rich-text-editor .et-rte-content h3{font-size:1.6rem}et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}et-rich-text-editor .et-rte-content ul{list-style-type:disc}et-rich-text-editor .et-rte-content ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul{list-style-type:circle}et-rich-text-editor .et-rte-content ul ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul ul{list-style-type:square}et-rich-text-editor .et-rte-content ul ul ul ul{list-style-type:disc}et-rich-text-editor .et-rte-content ol{list-style-type:decimal}et-rich-text-editor .et-rte-content ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}et-rich-text-editor .et-rte-content ol ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}et-rich-text-editor .et-rte-content ol ol ol ol{list-style-type:decimal}et-rich-text-editor .et-rte-content li{margin-block:0}et-rich-text-editor .et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}et-rich-text-editor .et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}et-rich-text-editor .et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}et-rich-text-editor .et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}et-rich-text-editor .et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}et-rich-text-editor .et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}et-rich-text-editor .et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}et-rich-text-editor .et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"] }]
|
|
37287
|
+
}], ctorParameters: () => [], propDecorators: { editable: [{ type: i0.ViewChild, args: ['editable', { isSignal: true }] }] } });
|
|
37126
37288
|
|
|
37127
37289
|
const RICH_TEXT_EDITOR_IMPORTS = [RichTextEditorComponent, RichTextEditorDirective];
|
|
37128
37290
|
|
|
@@ -38377,13 +38539,10 @@ class SelectDirective {
|
|
|
38377
38539
|
...(this.mirrorPanelWidth() ? [] : ['et-overlay--select-content-width']),
|
|
38378
38540
|
],
|
|
38379
38541
|
placement: 'bottom-start',
|
|
38380
|
-
// prefer flipping the alignment on the same side (right-align under the field) before
|
|
38381
|
-
// flipping up, so a field near the right viewport edge opens bottom-end, not shifted
|
|
38382
|
-
fallbackPlacements: ['bottom-end', 'top-start', 'top-end'],
|
|
38383
38542
|
offset: 4,
|
|
38384
38543
|
viewportPadding: 8,
|
|
38385
38544
|
autoResize: true,
|
|
38386
|
-
|
|
38545
|
+
minAvailableSpace: 160,
|
|
38387
38546
|
mirrorWidth: this.mirrorPanelWidth(),
|
|
38388
38547
|
}),
|
|
38389
38548
|
};
|
|
@@ -40543,7 +40702,7 @@ class SelectPanelComponent {
|
|
|
40543
40702
|
<ng-content select="[etSelectPanelExtras]" />
|
|
40544
40703
|
</div>
|
|
40545
40704
|
</div>
|
|
40546
|
-
`, isInline: true, styles: ["@layer components{@property --et-select-panel-max-height{syntax: \"<length-percentage>\"; inherits: false; initial-value: 40vh;}@property --et-select-panel-padding{syntax: \"<length>\"; inherits: false; initial-value: 6px;}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--select[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--select[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--select[data-overlay-placement].et-animation-enter-from,.et-overlay--select[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-select-panel{display:grid;grid-template-rows:minmax(0,1fr);box-sizing:border-box;max-block-size:var(--et-select-panel-max-height);overflow:hidden;--_et-select-panel-padding: var(--et-select-panel-padding);border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:var(--et-select-option-font-size, 14px);box-shadow:0 10px 24px #00000029}.et-select-panel .et-select-panel-scroller{box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;padding:var(--_et-select-panel-padding)}.et-select-panel.et-select-panel--resizing .et-select-panel-scroller{overflow:clip}.et-select-panel .et-select-listbox,.et-select-panel .et-select-panel-extras{display:contents}.et-select-panel .et-select-state{display:flex;align-items:center;gap:8px;min-block-size:var(--et-select-option-height, 36px);padding-inline:var(--et-select-option-padding-inline, 10px);font-size:var(--et-select-option-font-size, 14px);color:var(--et-surface-color-muted-solid, currentColor)}.et-select-panel .et-select-state.et-select-state--error{font-size:12px;color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new{position:relative;display:flex;align-items:center;gap:var(--et-select-option-gap, 8px);inline-size:100%;min-block-size:var(--et-select-option-height, 36px);margin-block-start:7px;padding-inline:var(--et-select-option-padding-inline, 10px);border:none;border-radius:var(--et-select-option-border-radius, 6px);background:transparent;font:inherit;font-size:var(--et-select-option-font-size, 14px);text-align:start;color:var(--et-theme-color-ink-solid, currentColor);cursor:pointer;appearance:none;transition:background .12s ease}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):before{content:\"\";position:absolute;inset-inline:calc(var(--et-select-panel-padding, 6px) * -1);inset-block-start:-4px;block-size:1px;background:var(--et-surface-border-solid, rgb(255 255 255 / .1))}@media(hover:hover){:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 12%,transparent)}}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):active{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 20%,transparent)}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new) .et-icon{flex:none;inline-size:16px;block-size:16px}.et-select-panel .et-select-load-more+.et-select-add-new{margin-block-start:2px}.et-select-panel .et-select-load-more+.et-select-add-new:before{content:none}.et-select-panel .et-select-load-more-icon{rotate:180deg}.et-overlay--select-content-width .et-select-panel{max-inline-size:min(400px,calc(100vw - 24px))}}\n"], dependencies: [{ kind: "directive", type: SelectListboxDirective, selector: "[etSelectListbox]", exportAs: ["etSelectListbox"] }, { kind: "directive", type: SelectViewportDirective, selector: "[etSelectViewport]", exportAs: ["etSelectViewport"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
40705
|
+
`, isInline: true, styles: ["@layer components{@property --et-select-panel-max-height{syntax: \"<length-percentage>\"; inherits: false; initial-value: 40vh;}@property --et-select-panel-padding{syntax: \"<length>\"; inherits: false; initial-value: 6px;}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--select[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--select[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--select[data-overlay-placement].et-animation-enter-from,.et-overlay--select[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-select-panel{display:grid;grid-template-rows:minmax(0,1fr);box-sizing:border-box;max-block-size:min(var(--et-select-panel-max-height),var(--et-overlay-max-height, 100vh));overflow:hidden;--_et-select-panel-padding: var(--et-select-panel-padding);border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:var(--et-select-option-font-size, 14px);box-shadow:0 10px 24px #00000029}.et-select-panel .et-select-panel-scroller{box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;padding:var(--_et-select-panel-padding)}.et-select-panel.et-select-panel--resizing .et-select-panel-scroller{overflow:clip}.et-select-panel .et-select-listbox,.et-select-panel .et-select-panel-extras{display:contents}.et-select-panel .et-select-state{display:flex;align-items:center;gap:8px;min-block-size:var(--et-select-option-height, 36px);padding-inline:var(--et-select-option-padding-inline, 10px);font-size:var(--et-select-option-font-size, 14px);color:var(--et-surface-color-muted-solid, currentColor)}.et-select-panel .et-select-state.et-select-state--error{font-size:12px;color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new{position:relative;display:flex;align-items:center;gap:var(--et-select-option-gap, 8px);inline-size:100%;min-block-size:var(--et-select-option-height, 36px);margin-block-start:7px;padding-inline:var(--et-select-option-padding-inline, 10px);border:none;border-radius:var(--et-select-option-border-radius, 6px);background:transparent;font:inherit;font-size:var(--et-select-option-font-size, 14px);text-align:start;color:var(--et-theme-color-ink-solid, currentColor);cursor:pointer;appearance:none;transition:background .12s ease}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):before{content:\"\";position:absolute;inset-inline:calc(var(--et-select-panel-padding, 6px) * -1);inset-block-start:-4px;block-size:1px;background:var(--et-surface-border-solid, rgb(255 255 255 / .1))}@media(hover:hover){:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 12%,transparent)}}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):active{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 20%,transparent)}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new) .et-icon{flex:none;inline-size:16px;block-size:16px}.et-select-panel .et-select-load-more+.et-select-add-new{margin-block-start:2px}.et-select-panel .et-select-load-more+.et-select-add-new:before{content:none}.et-select-panel .et-select-load-more-icon{rotate:180deg}.et-overlay--select-content-width .et-select-panel{max-inline-size:min(400px,calc(100vw - 24px))}}\n"], dependencies: [{ kind: "directive", type: SelectListboxDirective, selector: "[etSelectListbox]", exportAs: ["etSelectListbox"] }, { kind: "directive", type: SelectViewportDirective, selector: "[etSelectViewport]", exportAs: ["etSelectViewport"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
40547
40706
|
}
|
|
40548
40707
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SelectPanelComponent, decorators: [{
|
|
40549
40708
|
type: Component,
|
|
@@ -40558,7 +40717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
40558
40717
|
</div>
|
|
40559
40718
|
`, encapsulation: ViewEncapsulation.None, imports: [SelectListboxDirective, SelectViewportDirective], hostDirectives: [ProvideColorDirective, AutoSurfaceDirective], host: {
|
|
40560
40719
|
class: 'et-select-panel',
|
|
40561
|
-
}, styles: ["@layer components{@property --et-select-panel-max-height{syntax: \"<length-percentage>\"; inherits: false; initial-value: 40vh;}@property --et-select-panel-padding{syntax: \"<length>\"; inherits: false; initial-value: 6px;}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--select[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--select[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--select[data-overlay-placement].et-animation-enter-from,.et-overlay--select[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-select-panel{display:grid;grid-template-rows:minmax(0,1fr);box-sizing:border-box;max-block-size:var(--et-select-panel-max-height);overflow:hidden;--_et-select-panel-padding: var(--et-select-panel-padding);border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:var(--et-select-option-font-size, 14px);box-shadow:0 10px 24px #00000029}.et-select-panel .et-select-panel-scroller{box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;padding:var(--_et-select-panel-padding)}.et-select-panel.et-select-panel--resizing .et-select-panel-scroller{overflow:clip}.et-select-panel .et-select-listbox,.et-select-panel .et-select-panel-extras{display:contents}.et-select-panel .et-select-state{display:flex;align-items:center;gap:8px;min-block-size:var(--et-select-option-height, 36px);padding-inline:var(--et-select-option-padding-inline, 10px);font-size:var(--et-select-option-font-size, 14px);color:var(--et-surface-color-muted-solid, currentColor)}.et-select-panel .et-select-state.et-select-state--error{font-size:12px;color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new{position:relative;display:flex;align-items:center;gap:var(--et-select-option-gap, 8px);inline-size:100%;min-block-size:var(--et-select-option-height, 36px);margin-block-start:7px;padding-inline:var(--et-select-option-padding-inline, 10px);border:none;border-radius:var(--et-select-option-border-radius, 6px);background:transparent;font:inherit;font-size:var(--et-select-option-font-size, 14px);text-align:start;color:var(--et-theme-color-ink-solid, currentColor);cursor:pointer;appearance:none;transition:background .12s ease}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):before{content:\"\";position:absolute;inset-inline:calc(var(--et-select-panel-padding, 6px) * -1);inset-block-start:-4px;block-size:1px;background:var(--et-surface-border-solid, rgb(255 255 255 / .1))}@media(hover:hover){:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 12%,transparent)}}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):active{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 20%,transparent)}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new) .et-icon{flex:none;inline-size:16px;block-size:16px}.et-select-panel .et-select-load-more+.et-select-add-new{margin-block-start:2px}.et-select-panel .et-select-load-more+.et-select-add-new:before{content:none}.et-select-panel .et-select-load-more-icon{rotate:180deg}.et-overlay--select-content-width .et-select-panel{max-inline-size:min(400px,calc(100vw - 24px))}}\n"] }]
|
|
40720
|
+
}, styles: ["@layer components{@property --et-select-panel-max-height{syntax: \"<length-percentage>\"; inherits: false; initial-value: 40vh;}@property --et-select-panel-padding{syntax: \"<length>\"; inherits: false; initial-value: 6px;}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-to{opacity:0}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:transform .14s ease,opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:transform .1s ease,opacity .1s ease}.et-overlay--select[data-overlay-placement^=top].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=top].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(.3rem)!important}.et-overlay--select[data-overlay-placement^=bottom].et-animation-enter-from,.et-overlay--select[data-overlay-placement^=bottom].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0) translateY(-.3rem)!important}@media(prefers-reduced-motion:reduce){.et-overlay.et-with-default-animation.et-overlay--select.et-animation-enter-active{transition:opacity .14s ease}.et-overlay.et-with-default-animation.et-overlay--select.et-animation-leave-active{transition:opacity .1s ease}.et-overlay--select[data-overlay-placement].et-animation-enter-from,.et-overlay--select[data-overlay-placement].et-animation-leave-to{transform:translate3d(var(--et-overlay-anchored-x, 0px),var(--et-overlay-anchored-y, 0px),0)!important}}.et-select-panel{display:grid;grid-template-rows:minmax(0,1fr);box-sizing:border-box;max-block-size:min(var(--et-select-panel-max-height),var(--et-overlay-max-height, 100vh));overflow:hidden;--_et-select-panel-padding: var(--et-select-panel-padding);border-radius:10px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:var(--et-surface-background-solid, rgb(32 32 32));color:var(--et-surface-color-solid, rgb(244 244 245));font-size:var(--et-select-option-font-size, 14px);box-shadow:0 10px 24px #00000029}.et-select-panel .et-select-panel-scroller{box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;padding:var(--_et-select-panel-padding)}.et-select-panel.et-select-panel--resizing .et-select-panel-scroller{overflow:clip}.et-select-panel .et-select-listbox,.et-select-panel .et-select-panel-extras{display:contents}.et-select-panel .et-select-state{display:flex;align-items:center;gap:8px;min-block-size:var(--et-select-option-height, 36px);padding-inline:var(--et-select-option-padding-inline, 10px);font-size:var(--et-select-option-font-size, 14px);color:var(--et-surface-color-muted-solid, currentColor)}.et-select-panel .et-select-state.et-select-state--error{font-size:12px;color:var(--et-theme-color-primary-solid, rgb(248 113 113))}.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new{position:relative;display:flex;align-items:center;gap:var(--et-select-option-gap, 8px);inline-size:100%;min-block-size:var(--et-select-option-height, 36px);margin-block-start:7px;padding-inline:var(--et-select-option-padding-inline, 10px);border:none;border-radius:var(--et-select-option-border-radius, 6px);background:transparent;font:inherit;font-size:var(--et-select-option-font-size, 14px);text-align:start;color:var(--et-theme-color-ink-solid, currentColor);cursor:pointer;appearance:none;transition:background .12s ease}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):before{content:\"\";position:absolute;inset-inline:calc(var(--et-select-panel-padding, 6px) * -1);inset-block-start:-4px;block-size:1px;background:var(--et-surface-border-solid, rgb(255 255 255 / .1))}@media(hover:hover){:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 12%,transparent)}}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new):active{background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 20%,transparent)}:is(.et-select-panel .et-select-load-more,.et-select-panel .et-select-add-new) .et-icon{flex:none;inline-size:16px;block-size:16px}.et-select-panel .et-select-load-more+.et-select-add-new{margin-block-start:2px}.et-select-panel .et-select-load-more+.et-select-add-new:before{content:none}.et-select-panel .et-select-load-more-icon{rotate:180deg}.et-overlay--select-content-width .et-select-panel{max-inline-size:min(400px,calc(100vw - 24px))}}\n"] }]
|
|
40562
40721
|
}], ctorParameters: () => [], propDecorators: { panelBody: [{ type: i0.ViewChild, args: ['panelBody', { isSignal: true }] }] } });
|
|
40563
40722
|
|
|
40564
40723
|
/**
|
|
@@ -49019,17 +49178,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
49019
49178
|
args: [{ selector: 'et-query-devtools-faults-tab', encapsulation: ViewEncapsulation.None, template: "<div class=\"et-query-devtools-scroll\">\n <div class=\"et-query-devtools-toolbar\">\n <p class=\"et-query-devtools-hint\">\n Faults are injected into the request pipeline, so retries, error handling features and the cache see them exactly\n as they would see a real one. Unlike the rest of the panel, what you arm here is not persisted - a page reload\n disarms every client.\n </p>\n </div>\n\n @for (client of host.faultClients(); track client.name) {\n @let fault = client.fault;\n <div [class.et-query-devtools-card--armed]=\"client.armed\" class=\"et-query-devtools-card\">\n <div class=\"et-query-devtools-card-head\">\n <strong class=\"et-query-devtools-mono\">{{ client.name }}</strong>\n <span class=\"et-query-devtools-url\">{{ client.baseUrl }}</span>\n @if (client.armed) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--error\">armed</span>\n <button (click)=\"CLEAR_FAULTS(client.name)\" class=\"et-query-devtools-btn\" type=\"button\">Disarm</button>\n }\n </div>\n\n <div class=\"et-query-devtools-faults\">\n <label class=\"et-query-devtools-field\">\n <span>Latency</span>\n <input\n #latencyInput\n [value]=\"fault.latencyMs\"\n (change)=\"armFaultValue({ clientName: client.name, field: 'latencyMs', value: latencyInput.value })\"\n class=\"et-query-devtools-input et-query-devtools-input--number\"\n type=\"number\"\n min=\"0\"\n max=\"60000\"\n step=\"100\"\n />\n <small>ms before every attempt starts</small>\n </label>\n\n <label class=\"et-query-devtools-field\">\n <span>Fail next</span>\n <input\n #failNextInput\n [value]=\"fault.failNext\"\n (change)=\"armFaultValue({ clientName: client.name, field: 'failNext', value: failNextInput.value })\"\n class=\"et-query-devtools-input et-query-devtools-input--number\"\n type=\"number\"\n min=\"0\"\n max=\"99\"\n step=\"1\"\n />\n <small>attempts, counted down as they are spent</small>\n </label>\n\n <label class=\"et-query-devtools-field\">\n <span>Fail rate</span>\n <input\n #failRateInput\n [value]=\"fault.failRate\"\n (change)=\"armFaultValue({ clientName: client.name, field: 'failRate', value: failRateInput.value })\"\n class=\"et-query-devtools-input et-query-devtools-input--number\"\n type=\"number\"\n min=\"0\"\n max=\"100\"\n step=\"5\"\n />\n <small>% of attempts, rolled per attempt</small>\n </label>\n\n <label class=\"et-query-devtools-field\">\n <span>Status</span>\n <select\n #statusSelect\n (change)=\"armFaultStatus({ clientName: client.name, value: statusSelect.value })\"\n class=\"et-query-devtools-select\"\n >\n @for (option of FAULT_STATUSES; track option.status) {\n <!-- `selected` on the option, not `value` on the select: the select's value is\n applied before its options exist, so it would fall back to the first one. -->\n <option [value]=\"option.status\" [selected]=\"option.status === fault.status\">\n {{ option.status }} \u00B7 {{ option.label }}\n </option>\n }\n </select>\n <small>\n @if (isFaultStatusRetryable(fault.status)) {\n the default retry policy retries this\n } @else {\n the default retry policy gives up on this\n }\n </small>\n </label>\n </div>\n </div>\n } @empty {\n <p class=\"et-query-devtools-empty\">No query clients registered yet.</p>\n }\n</div>\n" }]
|
|
49020
49179
|
}] });
|
|
49021
49180
|
|
|
49022
|
-
/** The Forms tab: registered `
|
|
49181
|
+
/** The Forms tab: registered `defineQueryForm()` handles, each expandable to its field table. */
|
|
49023
49182
|
class QueryDevtoolsFormsTabComponent {
|
|
49024
49183
|
constructor() {
|
|
49025
49184
|
this.host = injectQueryDevtoolsHost();
|
|
49026
49185
|
}
|
|
49027
49186
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: QueryDevtoolsFormsTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49028
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: QueryDevtoolsFormsTabComponent, isStandalone: true, selector: "et-query-devtools-forms-tab", ngImport: i0, template: "<div #panes class=\"et-query-devtools-split\">\n <div class=\"et-query-devtools-scroll\">\n @for (entry of host.formEntries(); track entry.id) {\n @let form = host.asForm(entry);\n @let expanded = host.selectedFormId() === entry.id;\n <div class=\"et-query-devtools-card\">\n <div class=\"et-query-devtools-card-head\">\n <button\n [attr.aria-expanded]=\"expanded\"\n (click)=\"host.selectedFormId.set(expanded ? null : entry.id)\"\n class=\"et-query-devtools-row-link\"\n type=\"button\"\n >\n <span class=\"et-query-devtools-caret\">{{ expanded ? '\u25BE' : '\u25B8' }}</span>\n <strong>{{ entry.meta.name || 'query form' }}</strong>\n </button>\n @if (form.activeFilterCount(); as count) {\n <span class=\"et-query-devtools-chip\">{{ count }} active</span>\n } @else {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">at defaults</span>\n }\n @if (form.isCommitPending()) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--loading\">debouncing</span>\n }\n @if (!form.isObserving()) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"observe() has not been called, so nothing syncs with the URL\"\n >\n not observing\n </span>\n }\n <button\n [disabled]=\"form.isAtDefaults()\"\n (click)=\"form.resetAll()\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2 Reset all\n </button>\n </div>\n\n @let driven = host.queriesDrivenByForm(entry);\n <dl class=\"et-query-devtools-meta\">\n <dt>Drives</dt>\n <dd>\n @if (driven.length) {\n <div class=\"et-query-devtools-inner-queries\">\n @for (link of driven; track link.id) {\n <button\n [class.et-query-devtools-inner-row--active]=\"host.formSelectedQueryId() === link.id\"\n [disabled]=\"!link.id\"\n (click)=\"host.formSelectedQueryId.set(link.id)\"\n class=\"et-query-devtools-inner-row\"\n type=\"button\"\n >\n <span [attr.data-status]=\"host.queryStatus(link.query)\" class=\"et-query-devtools-status\"></span>\n <span class=\"et-query-devtools-method\">{{ link.method }}</span>\n <span class=\"et-query-devtools-route\">\n <et-query-devtools-route [segments]=\"link.segments\" [fallback]=\"link.query.id() || 'query'\" />\n </span>\n </button>\n }\n </div>\n } @else {\n <span class=\"et-query-devtools-hint\">\n No query has read this form's value yet. A query picks it up the first time its\n <code>withArgs</code> reads <code>value()</code>.\n </span>\n }\n </dd>\n </dl>\n\n @if (expanded) {\n <table class=\"et-query-devtools-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th>Value</th>\n <th>Default</th>\n <th>URL param</th>\n <th>Rules</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (field of form.fields(); track field.key) {\n <tr [attr.data-status]=\"field.isDefault ? null : 'success'\">\n <td class=\"et-query-devtools-mono\">{{ field.key }}</td>\n <td class=\"et-query-devtools-mono\">\n {{ host.inlineValue(field.value) }}\n <!-- The live value only differs while a debounce is pending, which is exactly\n when \"the input says X but the query asked for Y\" needs explaining. -->\n @if (field.liveValue !== field.value) {\n <span class=\"et-query-devtools-stat-sub\">typing {{ host.inlineValue(field.liveValue) }}</span>\n }\n </td>\n <td class=\"et-query-devtools-mono\">{{ host.inlineValue(field.defaultValue) }}</td>\n <td class=\"et-query-devtools-mono\">\n @if (field.queryParam === undefined) {\n <span class=\"et-query-devtools-hint\">\u2014</span>\n } @else {\n {{ field.paramKey }}={{ host.inlineValue(field.queryParam) }}\n }\n </td>\n <td>\n <div class=\"et-query-devtools-chips\">\n @if (field.debounceMs !== null) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">\n {{ field.debounceMs }}ms\n </span>\n }\n @if (field.isResetBy.length) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Reset to its default whenever one of these changes\"\n >\n reset by {{ field.isResetBy.join(', ') }}\n </span>\n }\n @if (!field.countsAsFilter) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Not counted by activeFilterCount\"\n >\n not a filter\n </span>\n }\n </div>\n </td>\n <td>\n <button\n [disabled]=\"field.isDefault\"\n (click)=\"form.resetField(field.key)\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <h4 class=\"et-query-devtools-section\">Committed value</h4>\n <et-query-devtools-json [value]=\"form.value()\" />\n }\n </div>\n } @empty {\n <p class=\"et-query-devtools-empty\">\n No query forms registered. A form created with <code>
|
|
49187
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: QueryDevtoolsFormsTabComponent, isStandalone: true, selector: "et-query-devtools-forms-tab", ngImport: i0, template: "<div #panes class=\"et-query-devtools-split\">\n <div class=\"et-query-devtools-scroll\">\n @for (entry of host.formEntries(); track entry.id) {\n @let form = host.asForm(entry);\n @let expanded = host.selectedFormId() === entry.id;\n <div class=\"et-query-devtools-card\">\n <div class=\"et-query-devtools-card-head\">\n <button\n [attr.aria-expanded]=\"expanded\"\n (click)=\"host.selectedFormId.set(expanded ? null : entry.id)\"\n class=\"et-query-devtools-row-link\"\n type=\"button\"\n >\n <span class=\"et-query-devtools-caret\">{{ expanded ? '\u25BE' : '\u25B8' }}</span>\n <strong>{{ entry.meta.name || 'query form' }}</strong>\n </button>\n @if (form.activeFilterCount(); as count) {\n <span class=\"et-query-devtools-chip\">{{ count }} active</span>\n } @else {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">at defaults</span>\n }\n @if (form.isCommitPending()) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--loading\">debouncing</span>\n }\n @if (!form.isObserving()) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"observe() has not been called, so nothing syncs with the URL\"\n >\n not observing\n </span>\n }\n <button\n [disabled]=\"form.isAtDefaults()\"\n (click)=\"form.resetAll()\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2 Reset all\n </button>\n </div>\n\n @let driven = host.queriesDrivenByForm(entry);\n <dl class=\"et-query-devtools-meta\">\n <dt>Drives</dt>\n <dd>\n @if (driven.length) {\n <div class=\"et-query-devtools-inner-queries\">\n @for (link of driven; track link.id) {\n <button\n [class.et-query-devtools-inner-row--active]=\"host.formSelectedQueryId() === link.id\"\n [disabled]=\"!link.id\"\n (click)=\"host.formSelectedQueryId.set(link.id)\"\n class=\"et-query-devtools-inner-row\"\n type=\"button\"\n >\n <span [attr.data-status]=\"host.queryStatus(link.query)\" class=\"et-query-devtools-status\"></span>\n <span class=\"et-query-devtools-method\">{{ link.method }}</span>\n <span class=\"et-query-devtools-route\">\n <et-query-devtools-route [segments]=\"link.segments\" [fallback]=\"link.query.id() || 'query'\" />\n </span>\n </button>\n }\n </div>\n } @else {\n <span class=\"et-query-devtools-hint\">\n No query has read this form's value yet. A query picks it up the first time its\n <code>withArgs</code> reads <code>value()</code>.\n </span>\n }\n </dd>\n </dl>\n\n @if (expanded) {\n <table class=\"et-query-devtools-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th>Value</th>\n <th>Default</th>\n <th>URL param</th>\n <th>Rules</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (field of form.fields(); track field.key) {\n <tr [attr.data-status]=\"field.isDefault ? null : 'success'\">\n <td class=\"et-query-devtools-mono\">{{ field.key }}</td>\n <td class=\"et-query-devtools-mono\">\n {{ host.inlineValue(field.value) }}\n <!-- The live value only differs while a debounce is pending, which is exactly\n when \"the input says X but the query asked for Y\" needs explaining. -->\n @if (field.liveValue !== field.value) {\n <span class=\"et-query-devtools-stat-sub\">typing {{ host.inlineValue(field.liveValue) }}</span>\n }\n </td>\n <td class=\"et-query-devtools-mono\">{{ host.inlineValue(field.defaultValue) }}</td>\n <td class=\"et-query-devtools-mono\">\n @if (field.queryParam === undefined) {\n <span class=\"et-query-devtools-hint\">\u2014</span>\n } @else {\n {{ field.paramKey }}={{ host.inlineValue(field.queryParam) }}\n }\n </td>\n <td>\n <div class=\"et-query-devtools-chips\">\n @if (field.debounceMs !== null) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">\n {{ field.debounceMs }}ms\n </span>\n }\n @if (field.isResetBy.length) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Reset to its default whenever one of these changes\"\n >\n reset by {{ field.isResetBy.join(', ') }}\n </span>\n }\n @if (!field.countsAsFilter) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Not counted by activeFilterCount\"\n >\n not a filter\n </span>\n }\n </div>\n </td>\n <td>\n <button\n [disabled]=\"field.isDefault\"\n (click)=\"form.resetField(field.key)\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <h4 class=\"et-query-devtools-section\">Committed value</h4>\n <et-query-devtools-json [value]=\"form.value()\" />\n }\n </div>\n } @empty {\n <p class=\"et-query-devtools-empty\">\n No query forms registered. A form created with <code>defineQueryForm()</code> registers itself.\n </p>\n }\n </div>\n\n <et-query-devtools-drawer\n [sel]=\"host.formSelectedQuery()\"\n [container]=\"panes\"\n (dismiss)=\"host.formSelectedQueryId.set(null)\"\n />\n</div>\n", dependencies: [{ kind: "component", type: QueryDevtoolsDrawerComponent, selector: "et-query-devtools-drawer", inputs: ["sel", "container"], outputs: ["dismiss"] }, { kind: "component", type: QueryDevtoolsJsonComponent, selector: "et-query-devtools-json", inputs: ["value", "nodeKey", "depth", "search", "chunk", "path", "expandedPaths", "collapsedPaths", "toggleFn", "jsonPath", "parentKind", "overrides"] }, { kind: "component", type: QueryDevtoolsRouteComponent, selector: "et-query-devtools-route", inputs: ["segments", "fallback"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
49029
49188
|
}
|
|
49030
49189
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: QueryDevtoolsFormsTabComponent, decorators: [{
|
|
49031
49190
|
type: Component,
|
|
49032
|
-
args: [{ selector: 'et-query-devtools-forms-tab', encapsulation: ViewEncapsulation.None, imports: [QueryDevtoolsDrawerComponent, QueryDevtoolsJsonComponent, QueryDevtoolsRouteComponent], template: "<div #panes class=\"et-query-devtools-split\">\n <div class=\"et-query-devtools-scroll\">\n @for (entry of host.formEntries(); track entry.id) {\n @let form = host.asForm(entry);\n @let expanded = host.selectedFormId() === entry.id;\n <div class=\"et-query-devtools-card\">\n <div class=\"et-query-devtools-card-head\">\n <button\n [attr.aria-expanded]=\"expanded\"\n (click)=\"host.selectedFormId.set(expanded ? null : entry.id)\"\n class=\"et-query-devtools-row-link\"\n type=\"button\"\n >\n <span class=\"et-query-devtools-caret\">{{ expanded ? '\u25BE' : '\u25B8' }}</span>\n <strong>{{ entry.meta.name || 'query form' }}</strong>\n </button>\n @if (form.activeFilterCount(); as count) {\n <span class=\"et-query-devtools-chip\">{{ count }} active</span>\n } @else {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">at defaults</span>\n }\n @if (form.isCommitPending()) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--loading\">debouncing</span>\n }\n @if (!form.isObserving()) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"observe() has not been called, so nothing syncs with the URL\"\n >\n not observing\n </span>\n }\n <button\n [disabled]=\"form.isAtDefaults()\"\n (click)=\"form.resetAll()\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2 Reset all\n </button>\n </div>\n\n @let driven = host.queriesDrivenByForm(entry);\n <dl class=\"et-query-devtools-meta\">\n <dt>Drives</dt>\n <dd>\n @if (driven.length) {\n <div class=\"et-query-devtools-inner-queries\">\n @for (link of driven; track link.id) {\n <button\n [class.et-query-devtools-inner-row--active]=\"host.formSelectedQueryId() === link.id\"\n [disabled]=\"!link.id\"\n (click)=\"host.formSelectedQueryId.set(link.id)\"\n class=\"et-query-devtools-inner-row\"\n type=\"button\"\n >\n <span [attr.data-status]=\"host.queryStatus(link.query)\" class=\"et-query-devtools-status\"></span>\n <span class=\"et-query-devtools-method\">{{ link.method }}</span>\n <span class=\"et-query-devtools-route\">\n <et-query-devtools-route [segments]=\"link.segments\" [fallback]=\"link.query.id() || 'query'\" />\n </span>\n </button>\n }\n </div>\n } @else {\n <span class=\"et-query-devtools-hint\">\n No query has read this form's value yet. A query picks it up the first time its\n <code>withArgs</code> reads <code>value()</code>.\n </span>\n }\n </dd>\n </dl>\n\n @if (expanded) {\n <table class=\"et-query-devtools-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th>Value</th>\n <th>Default</th>\n <th>URL param</th>\n <th>Rules</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (field of form.fields(); track field.key) {\n <tr [attr.data-status]=\"field.isDefault ? null : 'success'\">\n <td class=\"et-query-devtools-mono\">{{ field.key }}</td>\n <td class=\"et-query-devtools-mono\">\n {{ host.inlineValue(field.value) }}\n <!-- The live value only differs while a debounce is pending, which is exactly\n when \"the input says X but the query asked for Y\" needs explaining. -->\n @if (field.liveValue !== field.value) {\n <span class=\"et-query-devtools-stat-sub\">typing {{ host.inlineValue(field.liveValue) }}</span>\n }\n </td>\n <td class=\"et-query-devtools-mono\">{{ host.inlineValue(field.defaultValue) }}</td>\n <td class=\"et-query-devtools-mono\">\n @if (field.queryParam === undefined) {\n <span class=\"et-query-devtools-hint\">\u2014</span>\n } @else {\n {{ field.paramKey }}={{ host.inlineValue(field.queryParam) }}\n }\n </td>\n <td>\n <div class=\"et-query-devtools-chips\">\n @if (field.debounceMs !== null) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">\n {{ field.debounceMs }}ms\n </span>\n }\n @if (field.isResetBy.length) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Reset to its default whenever one of these changes\"\n >\n reset by {{ field.isResetBy.join(', ') }}\n </span>\n }\n @if (!field.countsAsFilter) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Not counted by activeFilterCount\"\n >\n not a filter\n </span>\n }\n </div>\n </td>\n <td>\n <button\n [disabled]=\"field.isDefault\"\n (click)=\"form.resetField(field.key)\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <h4 class=\"et-query-devtools-section\">Committed value</h4>\n <et-query-devtools-json [value]=\"form.value()\" />\n }\n </div>\n } @empty {\n <p class=\"et-query-devtools-empty\">\n No query forms registered. A form created with <code>
|
|
49191
|
+
args: [{ selector: 'et-query-devtools-forms-tab', encapsulation: ViewEncapsulation.None, imports: [QueryDevtoolsDrawerComponent, QueryDevtoolsJsonComponent, QueryDevtoolsRouteComponent], template: "<div #panes class=\"et-query-devtools-split\">\n <div class=\"et-query-devtools-scroll\">\n @for (entry of host.formEntries(); track entry.id) {\n @let form = host.asForm(entry);\n @let expanded = host.selectedFormId() === entry.id;\n <div class=\"et-query-devtools-card\">\n <div class=\"et-query-devtools-card-head\">\n <button\n [attr.aria-expanded]=\"expanded\"\n (click)=\"host.selectedFormId.set(expanded ? null : entry.id)\"\n class=\"et-query-devtools-row-link\"\n type=\"button\"\n >\n <span class=\"et-query-devtools-caret\">{{ expanded ? '\u25BE' : '\u25B8' }}</span>\n <strong>{{ entry.meta.name || 'query form' }}</strong>\n </button>\n @if (form.activeFilterCount(); as count) {\n <span class=\"et-query-devtools-chip\">{{ count }} active</span>\n } @else {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">at defaults</span>\n }\n @if (form.isCommitPending()) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--loading\">debouncing</span>\n }\n @if (!form.isObserving()) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"observe() has not been called, so nothing syncs with the URL\"\n >\n not observing\n </span>\n }\n <button\n [disabled]=\"form.isAtDefaults()\"\n (click)=\"form.resetAll()\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2 Reset all\n </button>\n </div>\n\n @let driven = host.queriesDrivenByForm(entry);\n <dl class=\"et-query-devtools-meta\">\n <dt>Drives</dt>\n <dd>\n @if (driven.length) {\n <div class=\"et-query-devtools-inner-queries\">\n @for (link of driven; track link.id) {\n <button\n [class.et-query-devtools-inner-row--active]=\"host.formSelectedQueryId() === link.id\"\n [disabled]=\"!link.id\"\n (click)=\"host.formSelectedQueryId.set(link.id)\"\n class=\"et-query-devtools-inner-row\"\n type=\"button\"\n >\n <span [attr.data-status]=\"host.queryStatus(link.query)\" class=\"et-query-devtools-status\"></span>\n <span class=\"et-query-devtools-method\">{{ link.method }}</span>\n <span class=\"et-query-devtools-route\">\n <et-query-devtools-route [segments]=\"link.segments\" [fallback]=\"link.query.id() || 'query'\" />\n </span>\n </button>\n }\n </div>\n } @else {\n <span class=\"et-query-devtools-hint\">\n No query has read this form's value yet. A query picks it up the first time its\n <code>withArgs</code> reads <code>value()</code>.\n </span>\n }\n </dd>\n </dl>\n\n @if (expanded) {\n <table class=\"et-query-devtools-table\">\n <thead>\n <tr>\n <th>Field</th>\n <th>Value</th>\n <th>Default</th>\n <th>URL param</th>\n <th>Rules</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (field of form.fields(); track field.key) {\n <tr [attr.data-status]=\"field.isDefault ? null : 'success'\">\n <td class=\"et-query-devtools-mono\">{{ field.key }}</td>\n <td class=\"et-query-devtools-mono\">\n {{ host.inlineValue(field.value) }}\n <!-- The live value only differs while a debounce is pending, which is exactly\n when \"the input says X but the query asked for Y\" needs explaining. -->\n @if (field.liveValue !== field.value) {\n <span class=\"et-query-devtools-stat-sub\">typing {{ host.inlineValue(field.liveValue) }}</span>\n }\n </td>\n <td class=\"et-query-devtools-mono\">{{ host.inlineValue(field.defaultValue) }}</td>\n <td class=\"et-query-devtools-mono\">\n @if (field.queryParam === undefined) {\n <span class=\"et-query-devtools-hint\">\u2014</span>\n } @else {\n {{ field.paramKey }}={{ host.inlineValue(field.queryParam) }}\n }\n </td>\n <td>\n <div class=\"et-query-devtools-chips\">\n @if (field.debounceMs !== null) {\n <span class=\"et-query-devtools-chip et-query-devtools-chip--muted\">\n {{ field.debounceMs }}ms\n </span>\n }\n @if (field.isResetBy.length) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Reset to its default whenever one of these changes\"\n >\n reset by {{ field.isResetBy.join(', ') }}\n </span>\n }\n @if (!field.countsAsFilter) {\n <span\n class=\"et-query-devtools-chip et-query-devtools-chip--muted\"\n title=\"Not counted by activeFilterCount\"\n >\n not a filter\n </span>\n }\n </div>\n </td>\n <td>\n <button\n [disabled]=\"field.isDefault\"\n (click)=\"form.resetField(field.key)\"\n class=\"et-query-devtools-btn\"\n type=\"button\"\n >\n \u27F2\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <h4 class=\"et-query-devtools-section\">Committed value</h4>\n <et-query-devtools-json [value]=\"form.value()\" />\n }\n </div>\n } @empty {\n <p class=\"et-query-devtools-empty\">\n No query forms registered. A form created with <code>defineQueryForm()</code> registers itself.\n </p>\n }\n </div>\n\n <et-query-devtools-drawer\n [sel]=\"host.formSelectedQuery()\"\n [container]=\"panes\"\n (dismiss)=\"host.formSelectedQueryId.set(null)\"\n />\n</div>\n" }]
|
|
49033
49192
|
}] });
|
|
49034
49193
|
|
|
49035
49194
|
/* eslint-disable @typescript-eslint/naming-convention -- the `__export_*` keys are Insomnia's file format */
|
|
@@ -51776,6 +51935,8 @@ const SCHEDULER_ERROR_CODES = {
|
|
|
51776
51935
|
FEATURE_OUTSIDE_SCHEDULER: 4500,
|
|
51777
51936
|
/** A view layout directive (e.g. `[etSchedulerMonth]`) was placed outside an `[etScheduler]`. */
|
|
51778
51937
|
VIEW_OUTSIDE_SCHEDULER: 4501,
|
|
51938
|
+
/** An edit-surface feature (e.g. an edit field or appointment action) was used outside an `<et-scheduler-edit-surface>`. */
|
|
51939
|
+
EDIT_SURFACE_FEATURE_OUTSIDE_SURFACE: 4502,
|
|
51779
51940
|
};
|
|
51780
51941
|
|
|
51781
51942
|
/** The built-in English labels. */
|
|
@@ -51789,6 +51950,21 @@ const DEFAULT_SCHEDULER_LABELS = {
|
|
|
51789
51950
|
week: 'Week',
|
|
51790
51951
|
day: 'Day',
|
|
51791
51952
|
agenda: 'Agenda',
|
|
51953
|
+
addAppointment: 'Add appointment',
|
|
51954
|
+
untitledAppointment: 'Untitled appointment',
|
|
51955
|
+
ancestors: 'Ancestor chain',
|
|
51956
|
+
subAppointments: 'Sub-appointments',
|
|
51957
|
+
moreActions: 'More actions',
|
|
51958
|
+
save: 'Save',
|
|
51959
|
+
cancel: 'Cancel',
|
|
51960
|
+
addSubAppointment: 'Add sub-appointment',
|
|
51961
|
+
deleteWithDescendants: 'Delete (with descendants)',
|
|
51962
|
+
titleField: 'Title',
|
|
51963
|
+
startField: 'Starts',
|
|
51964
|
+
endField: 'Ends',
|
|
51965
|
+
locationField: 'Location',
|
|
51966
|
+
descriptionField: 'Description',
|
|
51967
|
+
colorField: 'Color',
|
|
51792
51968
|
};
|
|
51793
51969
|
const SCHEDULER_LABELS_DEF = /* @__PURE__ */ defineLabels('SCHEDULER_LABELS', DEFAULT_SCHEDULER_LABELS);
|
|
51794
51970
|
const provideSchedulerLabels = /* @__PURE__ */ toProvideFn(SCHEDULER_LABELS_DEF);
|
|
@@ -51825,6 +52001,21 @@ const buildAppointmentTree = (appointments) => {
|
|
|
51825
52001
|
const flattenAppointmentTree = (nodes) => nodes.flatMap((node) => [node, ...flattenAppointmentTree(node.children)]);
|
|
51826
52002
|
/** Every descendant a node has, at any depth - what the chain-count badge adornment shows. */
|
|
51827
52003
|
const countDescendants = (node) => node.children.reduce((count, child) => count + 1 + countDescendants(child), 0);
|
|
52004
|
+
/** Finds the tree node for an appointment id, searching every chain at any depth. */
|
|
52005
|
+
const findAppointmentNode = (nodes, id) => {
|
|
52006
|
+
for (const node of nodes) {
|
|
52007
|
+
if (node.appointment.id === id) {
|
|
52008
|
+
return node;
|
|
52009
|
+
}
|
|
52010
|
+
const found = findAppointmentNode(node.children, id);
|
|
52011
|
+
if (found) {
|
|
52012
|
+
return found;
|
|
52013
|
+
}
|
|
52014
|
+
}
|
|
52015
|
+
return null;
|
|
52016
|
+
};
|
|
52017
|
+
/** Every descendant id a node has, at any depth - what "delete (with descendants)" removes in one pass. */
|
|
52018
|
+
const collectDescendantIds = (node) => node.children.flatMap((child) => [child.appointment.id, ...collectDescendantIds(child)]);
|
|
51828
52019
|
|
|
51829
52020
|
/**
|
|
51830
52021
|
* Headless scheduler state: the active view, the focused date, the visible date range each view
|
|
@@ -52001,6 +52192,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52001
52192
|
}]
|
|
52002
52193
|
}], ctorParameters: () => [] });
|
|
52003
52194
|
|
|
52195
|
+
/**
|
|
52196
|
+
* Headless edit-surface state: which appointment is open, the live draft every field reads and
|
|
52197
|
+
* writes, and navigation across the sub-appointment chain (ancestors, children, "add
|
|
52198
|
+
* sub-appointment") - all without any template structure. `<et-scheduler-edit-surface>` applies
|
|
52199
|
+
* this via `hostDirectives` and renders the registered fields/actions on top (see
|
|
52200
|
+
* `SCHEDULER_EDIT_SURFACE_HOST`).
|
|
52201
|
+
*/
|
|
52202
|
+
class SchedulerEditSurfaceDirective {
|
|
52203
|
+
constructor() {
|
|
52204
|
+
/** The appointment to open the surface for - a freshly-synthesized blank one (with `id` already assigned) for "add". */
|
|
52205
|
+
this.appointment = input.required(/* @ts-ignore */
|
|
52206
|
+
...(ngDevMode ? [{ debugName: "appointment" }] : /* istanbul ignore next */ []));
|
|
52207
|
+
/** Every appointment the scheduler knows about - for the ancestor breadcrumb, the children list, and chain-aware actions. */
|
|
52208
|
+
this.appointments = input([], /* @ts-ignore */
|
|
52209
|
+
...(ngDevMode ? [{ debugName: "appointments" }] : /* istanbul ignore next */ []));
|
|
52210
|
+
/** Emits the draft when the surface commits an edit or a new sub-appointment. */
|
|
52211
|
+
this.save = output();
|
|
52212
|
+
/** Emits every id to remove - the current appointment plus, for "delete with descendants", its whole chain. */
|
|
52213
|
+
this.deleteAppointments = output();
|
|
52214
|
+
this.appointmentTree = computed(() => buildAppointmentTree(this.appointments()), /* @ts-ignore */
|
|
52215
|
+
...(ngDevMode ? [{ debugName: "appointmentTree" }] : /* istanbul ignore next */ []));
|
|
52216
|
+
/** A synthesized appointment not yet in `appointments()` - set while "add sub-appointment" is in progress. */
|
|
52217
|
+
this.pendingAppointment = signal(null, /* @ts-ignore */
|
|
52218
|
+
...(ngDevMode ? [{ debugName: "pendingAppointment" }] : /* istanbul ignore next */ []));
|
|
52219
|
+
/**
|
|
52220
|
+
* Which appointment id the surface is currently showing. Starts at `appointment()`'s id;
|
|
52221
|
+
* breadcrumb/children navigation and "add sub-appointment" move it without opening a new dialog.
|
|
52222
|
+
*/
|
|
52223
|
+
this.currentAppointmentId = linkedSignal(() => this.appointment().id, /* @ts-ignore */
|
|
52224
|
+
...(ngDevMode ? [{ debugName: "currentAppointmentId" }] : /* istanbul ignore next */ []));
|
|
52225
|
+
/** The pre-edit snapshot of whichever appointment is currently shown. */
|
|
52226
|
+
this.currentAppointment = computed(() => this.pendingAppointment() ??
|
|
52227
|
+
this.appointments().find((candidate) => candidate.id === this.currentAppointmentId()) ??
|
|
52228
|
+
this.appointment(), /* @ts-ignore */
|
|
52229
|
+
...(ngDevMode ? [{ debugName: "currentAppointment" }] : /* istanbul ignore next */ []));
|
|
52230
|
+
/**
|
|
52231
|
+
* The live draft every edit field reads and writes. Resets to `currentAppointment()` whenever
|
|
52232
|
+
* the surface navigates - unsaved edits are discarded on navigation, the same "edit a copy"
|
|
52233
|
+
* tradeoff the filter overlay makes.
|
|
52234
|
+
*/
|
|
52235
|
+
this.draft = linkedSignal(() => this.currentAppointment(), /* @ts-ignore */
|
|
52236
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
52237
|
+
/** `currentAppointment()`'s ancestor chain, root first - what the breadcrumb renders. */
|
|
52238
|
+
this.ancestors = computed(() => {
|
|
52239
|
+
const byId = new Map(this.appointments().map((candidate) => [candidate.id, candidate]));
|
|
52240
|
+
const chain = [];
|
|
52241
|
+
const seen = new Set();
|
|
52242
|
+
let parentId = this.currentAppointment().parentId;
|
|
52243
|
+
while (parentId !== null && !seen.has(parentId)) {
|
|
52244
|
+
seen.add(parentId);
|
|
52245
|
+
const parent = byId.get(parentId);
|
|
52246
|
+
if (!parent) {
|
|
52247
|
+
break;
|
|
52248
|
+
}
|
|
52249
|
+
chain.unshift(parent);
|
|
52250
|
+
parentId = parent.parentId;
|
|
52251
|
+
}
|
|
52252
|
+
return chain;
|
|
52253
|
+
}, /* @ts-ignore */
|
|
52254
|
+
...(ngDevMode ? [{ debugName: "ancestors" }] : /* istanbul ignore next */ []));
|
|
52255
|
+
this.currentNode = computed(() => findAppointmentNode(this.appointmentTree(), this.currentAppointmentId()), /* @ts-ignore */
|
|
52256
|
+
...(ngDevMode ? [{ debugName: "currentNode" }] : /* istanbul ignore next */ []));
|
|
52257
|
+
/** `currentAppointment()`'s direct children - what the children list renders, each navigable via `navigateTo`. */
|
|
52258
|
+
this.children = computed(() => this.currentNode()?.children ?? [], /* @ts-ignore */
|
|
52259
|
+
...(ngDevMode ? [{ debugName: "children" }] : /* istanbul ignore next */ []));
|
|
52260
|
+
}
|
|
52261
|
+
/**
|
|
52262
|
+
* Navigates to a different appointment already in `appointments()` - a breadcrumb ancestor or a
|
|
52263
|
+
* child in the list. Discards any unsaved draft edits for the appointment navigated away from.
|
|
52264
|
+
*/
|
|
52265
|
+
navigateTo(id) {
|
|
52266
|
+
this.pendingAppointment.set(null);
|
|
52267
|
+
this.currentAppointmentId.set(id);
|
|
52268
|
+
}
|
|
52269
|
+
/** Starts "add sub-appointment": synthesizes a blank child of `currentAppointment()` and navigates to it. */
|
|
52270
|
+
startAddSubAppointment() {
|
|
52271
|
+
const parent = this.currentAppointment();
|
|
52272
|
+
const blank = {
|
|
52273
|
+
id: randomId(),
|
|
52274
|
+
parentId: parent.id,
|
|
52275
|
+
title: '',
|
|
52276
|
+
start: parent.start,
|
|
52277
|
+
end: parent.end,
|
|
52278
|
+
};
|
|
52279
|
+
this.pendingAppointment.set(blank);
|
|
52280
|
+
this.currentAppointmentId.set(blank.id);
|
|
52281
|
+
}
|
|
52282
|
+
/** Commits the current draft via `save` - the component closes the dialog on this. */
|
|
52283
|
+
commit() {
|
|
52284
|
+
this.save.emit(this.draft());
|
|
52285
|
+
}
|
|
52286
|
+
/** Emits `deleteAppointments` for the current appointment and every descendant - the component closes the dialog on this. */
|
|
52287
|
+
requestDelete() {
|
|
52288
|
+
const node = this.currentNode();
|
|
52289
|
+
const ids = node ? [node.appointment.id, ...collectDescendantIds(node)] : [this.currentAppointment().id];
|
|
52290
|
+
this.deleteAppointments.emit(ids);
|
|
52291
|
+
}
|
|
52292
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditSurfaceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
52293
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditSurfaceDirective, isStandalone: true, selector: "[etSchedulerEditSurface]", inputs: { appointment: { classPropertyName: "appointment", publicName: "appointment", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", deleteAppointments: "deleteAppointments" }, exportAs: ["etSchedulerEditSurface"], ngImport: i0 }); }
|
|
52294
|
+
}
|
|
52295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditSurfaceDirective, decorators: [{
|
|
52296
|
+
type: Directive,
|
|
52297
|
+
args: [{
|
|
52298
|
+
selector: '[etSchedulerEditSurface]',
|
|
52299
|
+
exportAs: 'etSchedulerEditSurface',
|
|
52300
|
+
}]
|
|
52301
|
+
}], propDecorators: { appointment: [{ type: i0.Input, args: [{ isSignal: true, alias: "appointment", required: true }] }], appointments: [{ type: i0.Input, args: [{ isSignal: true, alias: "appointments", required: false }] }], save: [{ type: i0.Output, args: ["save"] }], deleteAppointments: [{ type: i0.Output, args: ["deleteAppointments"] }] } });
|
|
52302
|
+
|
|
52004
52303
|
const SCHEDULER_FEATURE_HOST = new InjectionToken('SCHEDULER_FEATURE_HOST');
|
|
52005
52304
|
/**
|
|
52006
52305
|
* Read a feature's config input. A feature directive is usually written bare
|
|
@@ -52019,6 +52318,18 @@ const injectSchedulerFeatureHost = (feature) => {
|
|
|
52019
52318
|
}
|
|
52020
52319
|
return host;
|
|
52021
52320
|
};
|
|
52321
|
+
const SCHEDULER_EDIT_SURFACE_HOST = new InjectionToken('SCHEDULER_EDIT_SURFACE_HOST');
|
|
52322
|
+
/**
|
|
52323
|
+
* Inject the host edit surface from inside a feature. Throws a labelled error when the feature was
|
|
52324
|
+
* placed outside an `<et-scheduler-edit-surface>`, where it could only ever silently do nothing.
|
|
52325
|
+
*/
|
|
52326
|
+
const injectSchedulerEditSurfaceHost = (feature) => {
|
|
52327
|
+
const host = inject(SCHEDULER_EDIT_SURFACE_HOST, { optional: true });
|
|
52328
|
+
if (!host) {
|
|
52329
|
+
throw new RuntimeError(SCHEDULER_ERROR_CODES.EDIT_SURFACE_FEATURE_OUTSIDE_SURFACE, `[${feature}] must be used inside an <et-scheduler-edit-surface>.`);
|
|
52330
|
+
}
|
|
52331
|
+
return host;
|
|
52332
|
+
};
|
|
52022
52333
|
|
|
52023
52334
|
const appointmentCoversDay = (appointment, day) => appointment.start <= day.end && appointment.end >= day.start;
|
|
52024
52335
|
/**
|
|
@@ -52224,6 +52535,22 @@ const buildSchedulerTimeGrid = (options) => {
|
|
|
52224
52535
|
}));
|
|
52225
52536
|
return { days: dayColumns, allDay, allDayRowCount: rowCount };
|
|
52226
52537
|
};
|
|
52538
|
+
/**
|
|
52539
|
+
* Which hour the time grid's scrollable body should open scrolled to, so day/week view never
|
|
52540
|
+
* starts on an empty screen scrolled to midnight: the current hour (with an hour of lead-in) when
|
|
52541
|
+
* today is one of the visible days, else the earliest timed appointment's hour (same lead-in),
|
|
52542
|
+
* else a business-hours default.
|
|
52543
|
+
*/
|
|
52544
|
+
const computeInitialScrollHour = (grid, now) => {
|
|
52545
|
+
if (grid.days.some((day) => day.today)) {
|
|
52546
|
+
return Math.max(0, now.getHours() - 1);
|
|
52547
|
+
}
|
|
52548
|
+
const offsets = grid.days.flatMap((day) => day.blocks.map((block) => block.offset));
|
|
52549
|
+
if (offsets.length === 0) {
|
|
52550
|
+
return 8;
|
|
52551
|
+
}
|
|
52552
|
+
return Math.max(0, Math.floor((Math.min(...offsets) / 100) * 24) - 1);
|
|
52553
|
+
};
|
|
52227
52554
|
|
|
52228
52555
|
/**
|
|
52229
52556
|
* Lays the host `[etScheduler]`'s appointments onto an hour-axis time grid: one day column per day
|
|
@@ -52257,6 +52584,14 @@ class SchedulerTimeGridDirective {
|
|
|
52257
52584
|
/** How many stacking rows {@link allDay} needs - sizes the all-day lane's reserved space. */
|
|
52258
52585
|
this.allDayRowCount = computed(() => this.grid().allDayRowCount, /* @ts-ignore */
|
|
52259
52586
|
...(ngDevMode ? [{ debugName: "allDayRowCount" }] : /* istanbul ignore next */ []));
|
|
52587
|
+
/**
|
|
52588
|
+
* Which hour the body's scrollable region should open scrolled to - the current hour when today
|
|
52589
|
+
* is visible, else the earliest appointment's hour, else a business-hours default. See
|
|
52590
|
+
* `SchedulerTimeGridViewComponent`, which reads this once on mount rather than reactively, so
|
|
52591
|
+
* navigating days/weeks afterwards never yanks the user's own scroll position back.
|
|
52592
|
+
*/
|
|
52593
|
+
this.initialScrollHour = computed(() => computeInitialScrollHour(this.grid(), new Date()), /* @ts-ignore */
|
|
52594
|
+
...(ngDevMode ? [{ debugName: "initialScrollHour" }] : /* istanbul ignore next */ []));
|
|
52260
52595
|
if (ngDevMode) {
|
|
52261
52596
|
afterNextRender(() => {
|
|
52262
52597
|
if (!this.scheduler) {
|
|
@@ -52276,6 +52611,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52276
52611
|
}]
|
|
52277
52612
|
}], ctorParameters: () => [] });
|
|
52278
52613
|
|
|
52614
|
+
/**
|
|
52615
|
+
* Built-in toolbar action: opens the default edit surface for a brand-new, blank top-level
|
|
52616
|
+
* appointment - see `SchedulerFeatureHost.addAppointment`. One of the default pieces
|
|
52617
|
+
* `<et-scheduler>` bundles - see `registerToolbarAction`. Depends on the default edit surface
|
|
52618
|
+
* (it's what the dialog it opens is), so unlike `etSchedulerActionAddSubAppointment` it has no
|
|
52619
|
+
* bare-`[etScheduler]` equivalent - a headless-only composition needs its own "new appointment"
|
|
52620
|
+
* affordance.
|
|
52621
|
+
*
|
|
52622
|
+
* @example
|
|
52623
|
+
* <et-scheduler [etSchedulerActionAddAppointment]="{ enabled: false }" … />
|
|
52624
|
+
*/
|
|
52625
|
+
class SchedulerActionAddAppointmentDirective {
|
|
52626
|
+
constructor() {
|
|
52627
|
+
this.host = injectSchedulerFeatureHost('etSchedulerActionAddAppointment');
|
|
52628
|
+
this.labels = injectSchedulerLabels();
|
|
52629
|
+
/** See {@link SchedulerActionAddAppointmentConfig}. */
|
|
52630
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerActionAddAppointment',
|
|
52631
|
+
transform: (schedulerFeatureConfig) });
|
|
52632
|
+
this.host.registerToolbarAction({
|
|
52633
|
+
label: computed(() => this.labels().addAppointment),
|
|
52634
|
+
icon: 'et-plus',
|
|
52635
|
+
order: 0,
|
|
52636
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
52637
|
+
run: () => this.host.addAppointment(),
|
|
52638
|
+
});
|
|
52639
|
+
}
|
|
52640
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerActionAddAppointmentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
52641
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerActionAddAppointmentDirective, isStandalone: true, selector: "[etSchedulerActionAddAppointment]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerActionAddAppointment", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerActionAddAppointment"], ngImport: i0 }); }
|
|
52642
|
+
}
|
|
52643
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerActionAddAppointmentDirective, decorators: [{
|
|
52644
|
+
type: Directive,
|
|
52645
|
+
args: [{
|
|
52646
|
+
selector: '[etSchedulerActionAddAppointment]',
|
|
52647
|
+
exportAs: 'etSchedulerActionAddAppointment',
|
|
52648
|
+
}]
|
|
52649
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerActionAddAppointment", required: false }] }] } });
|
|
52650
|
+
|
|
52651
|
+
/**
|
|
52652
|
+
* Built-in appointment action: starts adding a sub-appointment of the surface's current
|
|
52653
|
+
* appointment - see `SchedulerEditSurfaceDirective.startAddSubAppointment`. One of the default
|
|
52654
|
+
* pieces `<et-scheduler-edit-surface>` bundles - see `registerAppointmentAction`.
|
|
52655
|
+
*
|
|
52656
|
+
* @example
|
|
52657
|
+
* <et-scheduler-edit-surface [etSchedulerActionAddSubAppointment]="{ enabled: false }" … />
|
|
52658
|
+
*/
|
|
52659
|
+
class SchedulerActionAddSubAppointmentDirective {
|
|
52660
|
+
constructor() {
|
|
52661
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerActionAddSubAppointment');
|
|
52662
|
+
this.surface = inject(SchedulerEditSurfaceDirective);
|
|
52663
|
+
this.labels = injectSchedulerLabels();
|
|
52664
|
+
/** See {@link SchedulerActionAddSubAppointmentConfig}. */
|
|
52665
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerActionAddSubAppointment',
|
|
52666
|
+
transform: (schedulerFeatureConfig) });
|
|
52667
|
+
this.host.registerAppointmentAction({
|
|
52668
|
+
label: computed(() => this.labels().addSubAppointment),
|
|
52669
|
+
icon: 'et-plus',
|
|
52670
|
+
order: 0,
|
|
52671
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
52672
|
+
run: () => this.surface.startAddSubAppointment(),
|
|
52673
|
+
});
|
|
52674
|
+
}
|
|
52675
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerActionAddSubAppointmentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
52676
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerActionAddSubAppointmentDirective, isStandalone: true, selector: "[etSchedulerActionAddSubAppointment]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerActionAddSubAppointment", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerActionAddSubAppointment"], ngImport: i0 }); }
|
|
52677
|
+
}
|
|
52678
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerActionAddSubAppointmentDirective, decorators: [{
|
|
52679
|
+
type: Directive,
|
|
52680
|
+
args: [{
|
|
52681
|
+
selector: '[etSchedulerActionAddSubAppointment]',
|
|
52682
|
+
exportAs: 'etSchedulerActionAddSubAppointment',
|
|
52683
|
+
}]
|
|
52684
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerActionAddSubAppointment", required: false }] }] } });
|
|
52685
|
+
|
|
52686
|
+
/**
|
|
52687
|
+
* Built-in appointment action: deletes the surface's current appointment together with every
|
|
52688
|
+
* descendant - see `SchedulerEditSurfaceDirective.requestDelete`. One of the default pieces
|
|
52689
|
+
* `<et-scheduler-edit-surface>` bundles - see `registerAppointmentAction`.
|
|
52690
|
+
*
|
|
52691
|
+
* @example
|
|
52692
|
+
* <et-scheduler-edit-surface [etSchedulerActionDelete]="{ enabled: false }" … />
|
|
52693
|
+
*/
|
|
52694
|
+
class SchedulerActionDeleteDirective {
|
|
52695
|
+
constructor() {
|
|
52696
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerActionDelete');
|
|
52697
|
+
this.surface = inject(SchedulerEditSurfaceDirective);
|
|
52698
|
+
this.labels = injectSchedulerLabels();
|
|
52699
|
+
/** See {@link SchedulerActionDeleteConfig}. */
|
|
52700
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerActionDelete',
|
|
52701
|
+
transform: (schedulerFeatureConfig) });
|
|
52702
|
+
this.host.registerAppointmentAction({
|
|
52703
|
+
label: computed(() => this.labels().deleteWithDescendants),
|
|
52704
|
+
icon: 'et-trash',
|
|
52705
|
+
order: 100,
|
|
52706
|
+
destructive: true,
|
|
52707
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
52708
|
+
run: () => this.surface.requestDelete(),
|
|
52709
|
+
});
|
|
52710
|
+
}
|
|
52711
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerActionDeleteDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
52712
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerActionDeleteDirective, isStandalone: true, selector: "[etSchedulerActionDelete]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerActionDelete", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerActionDelete"], ngImport: i0 }); }
|
|
52713
|
+
}
|
|
52714
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerActionDeleteDirective, decorators: [{
|
|
52715
|
+
type: Directive,
|
|
52716
|
+
args: [{
|
|
52717
|
+
selector: '[etSchedulerActionDelete]',
|
|
52718
|
+
exportAs: 'etSchedulerActionDelete',
|
|
52719
|
+
}]
|
|
52720
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerActionDelete", required: false }] }] } });
|
|
52721
|
+
|
|
52279
52722
|
/**
|
|
52280
52723
|
* The `.et-scheduler-appointment` badge rule, as a styles-only component mounted by every
|
|
52281
52724
|
* scheduler view that renders a plain (non-time-grid) appointment badge - see
|
|
@@ -52654,6 +53097,524 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52654
53097
|
}]
|
|
52655
53098
|
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerBadgeTitle", required: false }] }] } });
|
|
52656
53099
|
|
|
53100
|
+
/**
|
|
53101
|
+
* The color piece of the edit surface, stamped by `etSchedulerEditColor`. A plain text field for
|
|
53102
|
+
* `colorToken` rather than a swatch picker - theme names are app-registered (see `theming`), so
|
|
53103
|
+
* the SDK has no fixed set of tokens to offer as choices.
|
|
53104
|
+
*
|
|
53105
|
+
* @internal
|
|
53106
|
+
*/
|
|
53107
|
+
class SchedulerEditColorComponent {
|
|
53108
|
+
constructor() {
|
|
53109
|
+
this.labels = injectSchedulerLabels();
|
|
53110
|
+
this.draft = input.required(/* @ts-ignore */
|
|
53111
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
53112
|
+
this.label = computed(() => this.labels().colorField, /* @ts-ignore */
|
|
53113
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
53114
|
+
this.value = computed(() => this.draft()().colorToken ?? '', /* @ts-ignore */
|
|
53115
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
53116
|
+
}
|
|
53117
|
+
updateColorToken(value) {
|
|
53118
|
+
this.draft().update((appointment) => ({ ...appointment, colorToken: value || undefined }));
|
|
53119
|
+
}
|
|
53120
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditColorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53121
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditColorComponent, isStandalone: true, selector: "et-scheduler-edit-color", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
53122
|
+
<et-form-field>
|
|
53123
|
+
<et-label>{{ label() }}</et-label>
|
|
53124
|
+
<et-input [value]="value()" (valueChange)="updateColorToken($event)" />
|
|
53125
|
+
</et-form-field>
|
|
53126
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FormFieldComponent, selector: "et-form-field", inputs: ["appearance", "fill", "labelMode", "size", "busy"] }, { kind: "component", type: LabelDirective, selector: "et-label" }, { kind: "component", type: InputComponent, selector: "et-input" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53127
|
+
}
|
|
53128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditColorComponent, decorators: [{
|
|
53129
|
+
type: Component,
|
|
53130
|
+
args: [{
|
|
53131
|
+
selector: 'et-scheduler-edit-color',
|
|
53132
|
+
template: `
|
|
53133
|
+
<et-form-field>
|
|
53134
|
+
<et-label>{{ label() }}</et-label>
|
|
53135
|
+
<et-input [value]="value()" (valueChange)="updateColorToken($event)" />
|
|
53136
|
+
</et-form-field>
|
|
53137
|
+
`,
|
|
53138
|
+
encapsulation: ViewEncapsulation.None,
|
|
53139
|
+
imports: [...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS],
|
|
53140
|
+
}]
|
|
53141
|
+
}], propDecorators: { draft: [{ type: i0.Input, args: [{ isSignal: true, alias: "draft", required: true }] }] } });
|
|
53142
|
+
|
|
53143
|
+
/**
|
|
53144
|
+
* Built-in edit-surface field: the appointment's `colorToken`. One of the default pieces
|
|
53145
|
+
* `<et-scheduler-edit-surface>` bundles - see `registerEditField`.
|
|
53146
|
+
*
|
|
53147
|
+
* @example
|
|
53148
|
+
* <et-scheduler-edit-surface [etSchedulerEditColor]="{ enabled: false }" … />
|
|
53149
|
+
*/
|
|
53150
|
+
class SchedulerEditColorDirective {
|
|
53151
|
+
constructor() {
|
|
53152
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerEditColor');
|
|
53153
|
+
/** See {@link SchedulerEditColorConfig}. */
|
|
53154
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerEditColor',
|
|
53155
|
+
transform: (schedulerFeatureConfig) });
|
|
53156
|
+
this.host.registerEditField({
|
|
53157
|
+
component: SchedulerEditColorComponent,
|
|
53158
|
+
injector: inject(Injector),
|
|
53159
|
+
order: 40,
|
|
53160
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
53161
|
+
});
|
|
53162
|
+
}
|
|
53163
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditColorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53164
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditColorDirective, isStandalone: true, selector: "[etSchedulerEditColor]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerEditColor", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerEditColor"], ngImport: i0 }); }
|
|
53165
|
+
}
|
|
53166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditColorDirective, decorators: [{
|
|
53167
|
+
type: Directive,
|
|
53168
|
+
args: [{
|
|
53169
|
+
selector: '[etSchedulerEditColor]',
|
|
53170
|
+
exportAs: 'etSchedulerEditColor',
|
|
53171
|
+
}]
|
|
53172
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerEditColor", required: false }] }] } });
|
|
53173
|
+
|
|
53174
|
+
/**
|
|
53175
|
+
* The description piece of the edit surface, stamped by `etSchedulerEditDescription`.
|
|
53176
|
+
*
|
|
53177
|
+
* @internal
|
|
53178
|
+
*/
|
|
53179
|
+
class SchedulerEditDescriptionComponent {
|
|
53180
|
+
constructor() {
|
|
53181
|
+
this.labels = injectSchedulerLabels();
|
|
53182
|
+
this.draft = input.required(/* @ts-ignore */
|
|
53183
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
53184
|
+
this.label = computed(() => this.labels().descriptionField, /* @ts-ignore */
|
|
53185
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
53186
|
+
this.value = computed(() => this.draft()().description ?? '', /* @ts-ignore */
|
|
53187
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
53188
|
+
}
|
|
53189
|
+
updateDescription(value) {
|
|
53190
|
+
this.draft().update((appointment) => ({ ...appointment, description: value || undefined }));
|
|
53191
|
+
}
|
|
53192
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditDescriptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditDescriptionComponent, isStandalone: true, selector: "et-scheduler-edit-description", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
53194
|
+
<et-form-field>
|
|
53195
|
+
<et-label>{{ label() }}</et-label>
|
|
53196
|
+
<et-textarea [value]="value()" (valueChange)="updateDescription($event)" />
|
|
53197
|
+
</et-form-field>
|
|
53198
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FormFieldComponent, selector: "et-form-field", inputs: ["appearance", "fill", "labelMode", "size", "busy"] }, { kind: "component", type: LabelDirective, selector: "et-label" }, { kind: "component", type: TextareaComponent, selector: "et-textarea" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53199
|
+
}
|
|
53200
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditDescriptionComponent, decorators: [{
|
|
53201
|
+
type: Component,
|
|
53202
|
+
args: [{
|
|
53203
|
+
selector: 'et-scheduler-edit-description',
|
|
53204
|
+
template: `
|
|
53205
|
+
<et-form-field>
|
|
53206
|
+
<et-label>{{ label() }}</et-label>
|
|
53207
|
+
<et-textarea [value]="value()" (valueChange)="updateDescription($event)" />
|
|
53208
|
+
</et-form-field>
|
|
53209
|
+
`,
|
|
53210
|
+
encapsulation: ViewEncapsulation.None,
|
|
53211
|
+
imports: [...FORM_FIELD_IMPORTS, ...TEXTAREA_IMPORTS],
|
|
53212
|
+
}]
|
|
53213
|
+
}], propDecorators: { draft: [{ type: i0.Input, args: [{ isSignal: true, alias: "draft", required: true }] }] } });
|
|
53214
|
+
|
|
53215
|
+
/**
|
|
53216
|
+
* Built-in edit-surface field: the appointment's `description`. One of the default pieces
|
|
53217
|
+
* `<et-scheduler-edit-surface>` bundles - see `registerEditField`.
|
|
53218
|
+
*
|
|
53219
|
+
* @example
|
|
53220
|
+
* <et-scheduler-edit-surface [etSchedulerEditDescription]="{ enabled: false }" … />
|
|
53221
|
+
*/
|
|
53222
|
+
class SchedulerEditDescriptionDirective {
|
|
53223
|
+
constructor() {
|
|
53224
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerEditDescription');
|
|
53225
|
+
/** See {@link SchedulerEditDescriptionConfig}. */
|
|
53226
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerEditDescription',
|
|
53227
|
+
transform: (schedulerFeatureConfig) });
|
|
53228
|
+
this.host.registerEditField({
|
|
53229
|
+
component: SchedulerEditDescriptionComponent,
|
|
53230
|
+
injector: inject(Injector),
|
|
53231
|
+
order: 30,
|
|
53232
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
53233
|
+
});
|
|
53234
|
+
}
|
|
53235
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditDescriptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53236
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditDescriptionDirective, isStandalone: true, selector: "[etSchedulerEditDescription]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerEditDescription", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerEditDescription"], ngImport: i0 }); }
|
|
53237
|
+
}
|
|
53238
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditDescriptionDirective, decorators: [{
|
|
53239
|
+
type: Directive,
|
|
53240
|
+
args: [{
|
|
53241
|
+
selector: '[etSchedulerEditDescription]',
|
|
53242
|
+
exportAs: 'etSchedulerEditDescription',
|
|
53243
|
+
}]
|
|
53244
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerEditDescription", required: false }] }] } });
|
|
53245
|
+
|
|
53246
|
+
/**
|
|
53247
|
+
* The location piece of the edit surface, stamped by `etSchedulerEditLocation`.
|
|
53248
|
+
*
|
|
53249
|
+
* @internal
|
|
53250
|
+
*/
|
|
53251
|
+
class SchedulerEditLocationComponent {
|
|
53252
|
+
constructor() {
|
|
53253
|
+
this.labels = injectSchedulerLabels();
|
|
53254
|
+
this.draft = input.required(/* @ts-ignore */
|
|
53255
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
53256
|
+
this.label = computed(() => this.labels().locationField, /* @ts-ignore */
|
|
53257
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
53258
|
+
this.value = computed(() => this.draft()().location ?? '', /* @ts-ignore */
|
|
53259
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
53260
|
+
}
|
|
53261
|
+
updateLocation(value) {
|
|
53262
|
+
this.draft().update((appointment) => ({ ...appointment, location: value || undefined }));
|
|
53263
|
+
}
|
|
53264
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditLocationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53265
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditLocationComponent, isStandalone: true, selector: "et-scheduler-edit-location", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
53266
|
+
<et-form-field>
|
|
53267
|
+
<et-label>{{ label() }}</et-label>
|
|
53268
|
+
<et-input [value]="value()" (valueChange)="updateLocation($event)" />
|
|
53269
|
+
</et-form-field>
|
|
53270
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FormFieldComponent, selector: "et-form-field", inputs: ["appearance", "fill", "labelMode", "size", "busy"] }, { kind: "component", type: LabelDirective, selector: "et-label" }, { kind: "component", type: InputComponent, selector: "et-input" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53271
|
+
}
|
|
53272
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditLocationComponent, decorators: [{
|
|
53273
|
+
type: Component,
|
|
53274
|
+
args: [{
|
|
53275
|
+
selector: 'et-scheduler-edit-location',
|
|
53276
|
+
template: `
|
|
53277
|
+
<et-form-field>
|
|
53278
|
+
<et-label>{{ label() }}</et-label>
|
|
53279
|
+
<et-input [value]="value()" (valueChange)="updateLocation($event)" />
|
|
53280
|
+
</et-form-field>
|
|
53281
|
+
`,
|
|
53282
|
+
encapsulation: ViewEncapsulation.None,
|
|
53283
|
+
imports: [...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS],
|
|
53284
|
+
}]
|
|
53285
|
+
}], propDecorators: { draft: [{ type: i0.Input, args: [{ isSignal: true, alias: "draft", required: true }] }] } });
|
|
53286
|
+
|
|
53287
|
+
/**
|
|
53288
|
+
* Built-in edit-surface field: the appointment's `location`. One of the default pieces
|
|
53289
|
+
* `<et-scheduler-edit-surface>` bundles - see `registerEditField`.
|
|
53290
|
+
*
|
|
53291
|
+
* @example
|
|
53292
|
+
* <et-scheduler-edit-surface [etSchedulerEditLocation]="{ enabled: false }" … />
|
|
53293
|
+
*/
|
|
53294
|
+
class SchedulerEditLocationDirective {
|
|
53295
|
+
constructor() {
|
|
53296
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerEditLocation');
|
|
53297
|
+
/** See {@link SchedulerEditLocationConfig}. */
|
|
53298
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerEditLocation',
|
|
53299
|
+
transform: (schedulerFeatureConfig) });
|
|
53300
|
+
this.host.registerEditField({
|
|
53301
|
+
component: SchedulerEditLocationComponent,
|
|
53302
|
+
injector: inject(Injector),
|
|
53303
|
+
order: 20,
|
|
53304
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
53305
|
+
});
|
|
53306
|
+
}
|
|
53307
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditLocationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53308
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditLocationDirective, isStandalone: true, selector: "[etSchedulerEditLocation]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerEditLocation", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerEditLocation"], ngImport: i0 }); }
|
|
53309
|
+
}
|
|
53310
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditLocationDirective, decorators: [{
|
|
53311
|
+
type: Directive,
|
|
53312
|
+
args: [{
|
|
53313
|
+
selector: '[etSchedulerEditLocation]',
|
|
53314
|
+
exportAs: 'etSchedulerEditLocation',
|
|
53315
|
+
}]
|
|
53316
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerEditLocation", required: false }] }] } });
|
|
53317
|
+
|
|
53318
|
+
/**
|
|
53319
|
+
* The start/end piece of the edit surface, stamped by `etSchedulerEditTimeRange`.
|
|
53320
|
+
*
|
|
53321
|
+
* @internal
|
|
53322
|
+
*/
|
|
53323
|
+
class SchedulerEditTimeRangeComponent {
|
|
53324
|
+
constructor() {
|
|
53325
|
+
this.labels = injectSchedulerLabels();
|
|
53326
|
+
this.dateFormat = injectDateFormat();
|
|
53327
|
+
this.draft = input.required(/* @ts-ignore */
|
|
53328
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
53329
|
+
this.startLabel = computed(() => this.labels().startField, /* @ts-ignore */
|
|
53330
|
+
...(ngDevMode ? [{ debugName: "startLabel" }] : /* istanbul ignore next */ []));
|
|
53331
|
+
this.endLabel = computed(() => this.labels().endField, /* @ts-ignore */
|
|
53332
|
+
...(ngDevMode ? [{ debugName: "endLabel" }] : /* istanbul ignore next */ []));
|
|
53333
|
+
this.startValue = computed(() => format(this.draft()().start, this.dateFormat), /* @ts-ignore */
|
|
53334
|
+
...(ngDevMode ? [{ debugName: "startValue" }] : /* istanbul ignore next */ []));
|
|
53335
|
+
this.endValue = computed(() => format(this.draft()().end, this.dateFormat), /* @ts-ignore */
|
|
53336
|
+
...(ngDevMode ? [{ debugName: "endValue" }] : /* istanbul ignore next */ []));
|
|
53337
|
+
}
|
|
53338
|
+
updateStart(value) {
|
|
53339
|
+
if (!value) {
|
|
53340
|
+
return;
|
|
53341
|
+
}
|
|
53342
|
+
const start = parse(value, this.dateFormat, this.draft()().start);
|
|
53343
|
+
this.draft().update((appointment) => ({ ...appointment, start }));
|
|
53344
|
+
}
|
|
53345
|
+
updateEnd(value) {
|
|
53346
|
+
if (!value) {
|
|
53347
|
+
return;
|
|
53348
|
+
}
|
|
53349
|
+
const end = parse(value, this.dateFormat, this.draft()().end);
|
|
53350
|
+
this.draft().update((appointment) => ({ ...appointment, end }));
|
|
53351
|
+
}
|
|
53352
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTimeRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53353
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditTimeRangeComponent, isStandalone: true, selector: "et-scheduler-edit-time-range", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "et-scheduler-edit-time-range" }, ngImport: i0, template: `
|
|
53354
|
+
<et-form-field class="et-scheduler-edit-time-range-field">
|
|
53355
|
+
<et-label>{{ startLabel() }}</et-label>
|
|
53356
|
+
<et-date-time-input [value]="startValue()" (valueChange)="updateStart($event)" />
|
|
53357
|
+
</et-form-field>
|
|
53358
|
+
|
|
53359
|
+
<et-form-field class="et-scheduler-edit-time-range-field">
|
|
53360
|
+
<et-label>{{ endLabel() }}</et-label>
|
|
53361
|
+
<et-date-time-input [value]="endValue()" (valueChange)="updateEnd($event)" />
|
|
53362
|
+
</et-form-field>
|
|
53363
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FormFieldComponent, selector: "et-form-field", inputs: ["appearance", "fill", "labelMode", "size", "busy"] }, { kind: "component", type: LabelDirective, selector: "et-label" }, { kind: "component", type: DateTimeInputComponent, selector: "et-date-time-input", inputs: ["pickerTriggerLabel", "minuteStep", "secondStep", "dateTabLabel", "timeTabLabel", "clearable", "clearLabel"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53364
|
+
}
|
|
53365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTimeRangeComponent, decorators: [{
|
|
53366
|
+
type: Component,
|
|
53367
|
+
args: [{
|
|
53368
|
+
selector: 'et-scheduler-edit-time-range',
|
|
53369
|
+
template: `
|
|
53370
|
+
<et-form-field class="et-scheduler-edit-time-range-field">
|
|
53371
|
+
<et-label>{{ startLabel() }}</et-label>
|
|
53372
|
+
<et-date-time-input [value]="startValue()" (valueChange)="updateStart($event)" />
|
|
53373
|
+
</et-form-field>
|
|
53374
|
+
|
|
53375
|
+
<et-form-field class="et-scheduler-edit-time-range-field">
|
|
53376
|
+
<et-label>{{ endLabel() }}</et-label>
|
|
53377
|
+
<et-date-time-input [value]="endValue()" (valueChange)="updateEnd($event)" />
|
|
53378
|
+
</et-form-field>
|
|
53379
|
+
`,
|
|
53380
|
+
encapsulation: ViewEncapsulation.None,
|
|
53381
|
+
imports: [...FORM_FIELD_IMPORTS, ...DATE_TIME_INPUT_IMPORTS],
|
|
53382
|
+
host: {
|
|
53383
|
+
class: 'et-scheduler-edit-time-range',
|
|
53384
|
+
},
|
|
53385
|
+
}]
|
|
53386
|
+
}], propDecorators: { draft: [{ type: i0.Input, args: [{ isSignal: true, alias: "draft", required: true }] }] } });
|
|
53387
|
+
|
|
53388
|
+
/**
|
|
53389
|
+
* Built-in edit-surface field: the appointment's `start`/`end`. One of the default pieces
|
|
53390
|
+
* `<et-scheduler-edit-surface>` bundles - see `registerEditField`. Invalid while `end` is before
|
|
53391
|
+
* `start`, which gates the surface's save button.
|
|
53392
|
+
*
|
|
53393
|
+
* @example
|
|
53394
|
+
* <et-scheduler-edit-surface [etSchedulerEditTimeRange]="{ enabled: false }" … />
|
|
53395
|
+
*/
|
|
53396
|
+
class SchedulerEditTimeRangeDirective {
|
|
53397
|
+
constructor() {
|
|
53398
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerEditTimeRange');
|
|
53399
|
+
this.surface = inject(SchedulerEditSurfaceDirective);
|
|
53400
|
+
/** See {@link SchedulerEditTimeRangeConfig}. */
|
|
53401
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerEditTimeRange',
|
|
53402
|
+
transform: (schedulerFeatureConfig) });
|
|
53403
|
+
this.host.registerEditField({
|
|
53404
|
+
component: SchedulerEditTimeRangeComponent,
|
|
53405
|
+
injector: inject(Injector),
|
|
53406
|
+
order: 10,
|
|
53407
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
53408
|
+
valid: computed(() => this.surface.draft().end >= this.surface.draft().start),
|
|
53409
|
+
});
|
|
53410
|
+
}
|
|
53411
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTimeRangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53412
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditTimeRangeDirective, isStandalone: true, selector: "[etSchedulerEditTimeRange]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerEditTimeRange", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerEditTimeRange"], ngImport: i0 }); }
|
|
53413
|
+
}
|
|
53414
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTimeRangeDirective, decorators: [{
|
|
53415
|
+
type: Directive,
|
|
53416
|
+
args: [{
|
|
53417
|
+
selector: '[etSchedulerEditTimeRange]',
|
|
53418
|
+
exportAs: 'etSchedulerEditTimeRange',
|
|
53419
|
+
}]
|
|
53420
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerEditTimeRange", required: false }] }] } });
|
|
53421
|
+
|
|
53422
|
+
/**
|
|
53423
|
+
* The title piece of the edit surface, stamped by `etSchedulerEditTitle`.
|
|
53424
|
+
*
|
|
53425
|
+
* @internal
|
|
53426
|
+
*/
|
|
53427
|
+
class SchedulerEditTitleComponent {
|
|
53428
|
+
constructor() {
|
|
53429
|
+
this.labels = injectSchedulerLabels();
|
|
53430
|
+
this.draft = input.required(/* @ts-ignore */
|
|
53431
|
+
...(ngDevMode ? [{ debugName: "draft" }] : /* istanbul ignore next */ []));
|
|
53432
|
+
this.label = computed(() => this.labels().titleField, /* @ts-ignore */
|
|
53433
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
53434
|
+
this.value = computed(() => this.draft()().title, /* @ts-ignore */
|
|
53435
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
53436
|
+
}
|
|
53437
|
+
updateTitle(value) {
|
|
53438
|
+
this.draft().update((appointment) => ({ ...appointment, title: value }));
|
|
53439
|
+
}
|
|
53440
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53441
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditTitleComponent, isStandalone: true, selector: "et-scheduler-edit-title", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
53442
|
+
<et-form-field>
|
|
53443
|
+
<et-label>{{ label() }}</et-label>
|
|
53444
|
+
<et-input [value]="value()" (valueChange)="updateTitle($event)" />
|
|
53445
|
+
</et-form-field>
|
|
53446
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FormFieldComponent, selector: "et-form-field", inputs: ["appearance", "fill", "labelMode", "size", "busy"] }, { kind: "component", type: LabelDirective, selector: "et-label" }, { kind: "component", type: InputComponent, selector: "et-input" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53447
|
+
}
|
|
53448
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTitleComponent, decorators: [{
|
|
53449
|
+
type: Component,
|
|
53450
|
+
args: [{
|
|
53451
|
+
selector: 'et-scheduler-edit-title',
|
|
53452
|
+
template: `
|
|
53453
|
+
<et-form-field>
|
|
53454
|
+
<et-label>{{ label() }}</et-label>
|
|
53455
|
+
<et-input [value]="value()" (valueChange)="updateTitle($event)" />
|
|
53456
|
+
</et-form-field>
|
|
53457
|
+
`,
|
|
53458
|
+
encapsulation: ViewEncapsulation.None,
|
|
53459
|
+
imports: [...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS],
|
|
53460
|
+
}]
|
|
53461
|
+
}], propDecorators: { draft: [{ type: i0.Input, args: [{ isSignal: true, alias: "draft", required: true }] }] } });
|
|
53462
|
+
|
|
53463
|
+
/**
|
|
53464
|
+
* Built-in edit-surface field: the appointment's title. One of the default pieces
|
|
53465
|
+
* `<et-scheduler-edit-surface>` bundles - see `registerEditField`. Required - the field is
|
|
53466
|
+
* invalid while the draft's title is blank, which gates the surface's save button.
|
|
53467
|
+
*
|
|
53468
|
+
* @example
|
|
53469
|
+
* <et-scheduler-edit-surface [etSchedulerEditTitle]="{ enabled: false }" … />
|
|
53470
|
+
*/
|
|
53471
|
+
class SchedulerEditTitleDirective {
|
|
53472
|
+
constructor() {
|
|
53473
|
+
this.host = injectSchedulerEditSurfaceHost('etSchedulerEditTitle');
|
|
53474
|
+
this.surface = inject(SchedulerEditSurfaceDirective);
|
|
53475
|
+
/** See {@link SchedulerEditTitleConfig}. */
|
|
53476
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerEditTitle',
|
|
53477
|
+
transform: (schedulerFeatureConfig) });
|
|
53478
|
+
this.host.registerEditField({
|
|
53479
|
+
component: SchedulerEditTitleComponent,
|
|
53480
|
+
injector: inject(Injector),
|
|
53481
|
+
order: 0,
|
|
53482
|
+
enabled: computed(() => this.config().enabled ?? true),
|
|
53483
|
+
valid: computed(() => this.surface.draft().title.trim().length > 0),
|
|
53484
|
+
});
|
|
53485
|
+
}
|
|
53486
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53487
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerEditTitleDirective, isStandalone: true, selector: "[etSchedulerEditTitle]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerEditTitle", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerEditTitle"], ngImport: i0 }); }
|
|
53488
|
+
}
|
|
53489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditTitleDirective, decorators: [{
|
|
53490
|
+
type: Directive,
|
|
53491
|
+
args: [{
|
|
53492
|
+
selector: '[etSchedulerEditTitle]',
|
|
53493
|
+
exportAs: 'etSchedulerEditTitle',
|
|
53494
|
+
}]
|
|
53495
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerEditTitle", required: false }] }] } });
|
|
53496
|
+
|
|
53497
|
+
/**
|
|
53498
|
+
* The default edit surface: a dialog for one appointment, its fields, its ancestor breadcrumb and
|
|
53499
|
+
* children list, and an action menu - built on the overlay system. Orchestrates the active fields
|
|
53500
|
+
* + actions via `hostDirectives: [SchedulerEditSurfaceDirective]`, bakes the built-in fields and
|
|
53501
|
+
* actions in by default (each forwarding its own config input, same pattern as `<et-scheduler>`'s
|
|
53502
|
+
* badge adornments), and applies `SCHEDULER_EDIT_SURFACE_HOST` so they can register.
|
|
53503
|
+
*/
|
|
53504
|
+
class SchedulerEditSurfaceComponent {
|
|
53505
|
+
constructor() {
|
|
53506
|
+
this.labels = injectSchedulerLabels();
|
|
53507
|
+
this.elementRef = inject(ElementRef);
|
|
53508
|
+
this.overlayRef = inject(OVERLAY_REF, { optional: true });
|
|
53509
|
+
/** The headless directive behind this surface - field/action registration, draft state and navigation. */
|
|
53510
|
+
this.surface = inject(SchedulerEditSurfaceDirective);
|
|
53511
|
+
this.cancelLabel = computed(() => this.labels().cancel, /* @ts-ignore */
|
|
53512
|
+
...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
|
|
53513
|
+
this.saveLabel = computed(() => this.labels().save, /* @ts-ignore */
|
|
53514
|
+
...(ngDevMode ? [{ debugName: "saveLabel" }] : /* istanbul ignore next */ []));
|
|
53515
|
+
this.moreActionsLabel = computed(() => this.labels().moreActions, /* @ts-ignore */
|
|
53516
|
+
...(ngDevMode ? [{ debugName: "moreActionsLabel" }] : /* istanbul ignore next */ []));
|
|
53517
|
+
this.ancestorsLabel = computed(() => this.labels().ancestors, /* @ts-ignore */
|
|
53518
|
+
...(ngDevMode ? [{ debugName: "ancestorsLabel" }] : /* istanbul ignore next */ []));
|
|
53519
|
+
this.subAppointmentsLabel = computed(() => this.labels().subAppointments, /* @ts-ignore */
|
|
53520
|
+
...(ngDevMode ? [{ debugName: "subAppointmentsLabel" }] : /* istanbul ignore next */ []));
|
|
53521
|
+
this.untitledLabel = computed(() => this.labels().untitledAppointment, /* @ts-ignore */
|
|
53522
|
+
...(ngDevMode ? [{ debugName: "untitledLabel" }] : /* istanbul ignore next */ []));
|
|
53523
|
+
this.headerLabel = computed(() => this.surface.currentAppointment().title || this.untitledLabel(), /* @ts-ignore */
|
|
53524
|
+
...(ngDevMode ? [{ debugName: "headerLabel" }] : /* istanbul ignore next */ []));
|
|
53525
|
+
// UI contributed by edit-field/action features - see SCHEDULER_EDIT_SURFACE_HOST. The built-ins
|
|
53526
|
+
// above are features too, registering the same way a consumer's own field/action would.
|
|
53527
|
+
this.editFieldList = signal([], /* @ts-ignore */
|
|
53528
|
+
...(ngDevMode ? [{ debugName: "editFieldList" }] : /* istanbul ignore next */ []));
|
|
53529
|
+
this.appointmentActionList = signal([], /* @ts-ignore */
|
|
53530
|
+
...(ngDevMode ? [{ debugName: "appointmentActionList" }] : /* istanbul ignore next */ []));
|
|
53531
|
+
this.editFields = computed(() => this.editFieldList()
|
|
53532
|
+
.filter((field) => field.enabled?.() ?? true)
|
|
53533
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
|
|
53534
|
+
...(ngDevMode ? [{ debugName: "editFields" }] : /* istanbul ignore next */ []));
|
|
53535
|
+
this.appointmentActions = computed(() => this.appointmentActionList()
|
|
53536
|
+
.filter((action) => action.enabled?.() ?? true)
|
|
53537
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
|
|
53538
|
+
...(ngDevMode ? [{ debugName: "appointmentActions" }] : /* istanbul ignore next */ []));
|
|
53539
|
+
/** Gates the save button - every currently-enabled field must report itself valid. */
|
|
53540
|
+
this.canSave = computed(() => this.editFields().every((field) => field.valid?.() ?? true), /* @ts-ignore */
|
|
53541
|
+
...(ngDevMode ? [{ debugName: "canSave" }] : /* istanbul ignore next */ []));
|
|
53542
|
+
outputToObservable(this.surface.save)
|
|
53543
|
+
.pipe(takeUntilDestroyed(), tap((appointment) => this.overlayRef?.close({ kind: 'save', appointment })))
|
|
53544
|
+
.subscribe();
|
|
53545
|
+
outputToObservable(this.surface.deleteAppointments)
|
|
53546
|
+
.pipe(takeUntilDestroyed(), tap((ids) => this.overlayRef?.close({ kind: 'delete', ids })))
|
|
53547
|
+
.subscribe();
|
|
53548
|
+
}
|
|
53549
|
+
/** Part of the feature contract - see `SchedulerEditSurfaceHost`. */
|
|
53550
|
+
get element() {
|
|
53551
|
+
return this.elementRef.nativeElement;
|
|
53552
|
+
}
|
|
53553
|
+
/** Part of the feature contract - see `SchedulerEditSurfaceHost`. */
|
|
53554
|
+
get appointment() {
|
|
53555
|
+
return this.surface.currentAppointment;
|
|
53556
|
+
}
|
|
53557
|
+
/** Part of the feature contract - see `SchedulerEditSurfaceHost`. */
|
|
53558
|
+
get appointmentTree() {
|
|
53559
|
+
return this.surface.appointmentTree;
|
|
53560
|
+
}
|
|
53561
|
+
/** Part of the feature contract - see `SchedulerEditSurfaceHost`. */
|
|
53562
|
+
registerEditField(field) {
|
|
53563
|
+
this.editFieldList.update((list) => [...list, field]);
|
|
53564
|
+
}
|
|
53565
|
+
/** Part of the feature contract - see `SchedulerEditSurfaceHost`. */
|
|
53566
|
+
registerAppointmentAction(action) {
|
|
53567
|
+
this.appointmentActionList.update((list) => [...list, action]);
|
|
53568
|
+
}
|
|
53569
|
+
save() {
|
|
53570
|
+
this.surface.commit();
|
|
53571
|
+
}
|
|
53572
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditSurfaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53573
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerEditSurfaceComponent, isStandalone: true, selector: "et-scheduler-edit-surface", host: { classAttribute: "et-scheduler-edit-surface" }, providers: [
|
|
53574
|
+
provideIcons(PLUS_ICON, TRASH_ICON, ELLIPSIS_VERTICAL_ICON),
|
|
53575
|
+
{ provide: SCHEDULER_EDIT_SURFACE_HOST, useExisting: SchedulerEditSurfaceComponent },
|
|
53576
|
+
], hostDirectives: [{ directive: OverlayMainDirective }, { directive: SchedulerEditSurfaceDirective, inputs: ["appointment", "appointment", "appointments", "appointments"] }, { directive: SchedulerEditTitleDirective, inputs: ["etSchedulerEditTitle", "etSchedulerEditTitle"] }, { directive: SchedulerEditTimeRangeDirective, inputs: ["etSchedulerEditTimeRange", "etSchedulerEditTimeRange"] }, { directive: SchedulerEditLocationDirective, inputs: ["etSchedulerEditLocation", "etSchedulerEditLocation"] }, { directive: SchedulerEditDescriptionDirective, inputs: ["etSchedulerEditDescription", "etSchedulerEditDescription"] }, { directive: SchedulerEditColorDirective, inputs: ["etSchedulerEditColor", "etSchedulerEditColor"] }, { directive: SchedulerActionAddSubAppointmentDirective, inputs: ["etSchedulerActionAddSubAppointment", "etSchedulerActionAddSubAppointment"] }, { directive: SchedulerActionDeleteDirective, inputs: ["etSchedulerActionDelete", "etSchedulerActionDelete"] }], ngImport: i0, template: "<div class=\"et-scheduler-edit-surface-header\" etOverlayHeader>\n <h2 class=\"et-scheduler-edit-surface-title\" etOverlayTitle>{{ headerLabel() }}</h2>\n\n @if (appointmentActions().length > 0) {\n <div class=\"et-scheduler-edit-surface-actions\" etMenu>\n <button [attr.aria-label]=\"moreActionsLabel()\" et-icon-button etMenuTrigger size=\"sm\" type=\"button\">\n <i etIcon=\"et-ellipsis-vertical\"></i>\n </button>\n\n <ng-template etMenuSurface>\n <et-menu>\n @for (action of appointmentActions(); track $index) {\n <button\n [variant]=\"action.destructive ? 'destructive' : 'default'\"\n (click)=\"action.run()\"\n et-menu-item\n type=\"button\"\n >\n @if (action.icon) {\n <i [etIcon]=\"action.icon\" aria-hidden=\"true\"></i>\n }\n {{ action.label() }}\n </button>\n }\n </et-menu>\n </ng-template>\n </div>\n }\n</div>\n\n<et-overlay-body>\n @if (surface.ancestors().length > 0) {\n <nav [attr.aria-label]=\"ancestorsLabel()\" class=\"et-scheduler-edit-surface-breadcrumb\">\n @for (ancestor of surface.ancestors(); track ancestor.id) {\n <button\n (click)=\"surface.navigateTo(ancestor.id)\"\n class=\"et-scheduler-edit-surface-breadcrumb-item\"\n type=\"button\"\n >\n {{ ancestor.title || untitledLabel() }}\n </button>\n <span class=\"et-scheduler-edit-surface-breadcrumb-separator\" aria-hidden=\"true\">/</span>\n }\n <span class=\"et-scheduler-edit-surface-breadcrumb-current\" aria-current=\"page\">{{ headerLabel() }}</span>\n </nav>\n }\n\n <div class=\"et-scheduler-edit-surface-fields\">\n @for (field of editFields(); track $index) {\n <ng-container *ngComponentOutlet=\"field.component; inputs: { draft: surface.draft }; injector: field.injector\" />\n }\n </div>\n\n @if (surface.children().length > 0) {\n <div class=\"et-scheduler-edit-surface-children\">\n <h3 class=\"et-scheduler-edit-surface-children-heading\">{{ subAppointmentsLabel() }}</h3>\n\n <ul class=\"et-scheduler-edit-surface-children-list\">\n @for (child of surface.children(); track child.appointment.id) {\n <li>\n <button\n (click)=\"surface.navigateTo(child.appointment.id)\"\n class=\"et-scheduler-edit-surface-children-item\"\n type=\"button\"\n >\n {{ child.appointment.title || untitledLabel() }}\n </button>\n </li>\n }\n </ul>\n </div>\n }\n</et-overlay-body>\n\n<div class=\"et-scheduler-edit-surface-footer\" etOverlayFooter>\n <button et-button etOverlayClose type=\"button\" variant=\"outline\">{{ cancelLabel() }}</button>\n <button [disabled]=\"!canSave()\" (click)=\"save()\" et-button type=\"button\">{{ saveLabel() }}</button>\n</div>\n", styles: ["@layer components{.et-scheduler-edit-surface-header{display:flex;align-items:center;gap:12px}.et-scheduler-edit-surface-title{flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-edit-surface-actions{flex-shrink:0;margin-inline-start:auto}.et-scheduler-edit-surface-footer{display:flex;justify-content:flex-end;gap:12px}.et-scheduler-edit-surface-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-block-end:16px;font-size:13px;color:var(--et-surface-color-muted-solid)}.et-scheduler-edit-surface-breadcrumb-item{color:inherit;text-decoration:underline;text-underline-offset:2px}.et-scheduler-edit-surface-breadcrumb-current{color:var(--et-surface-color-solid);font-weight:600}.et-scheduler-edit-surface-fields{display:flex;flex-direction:column;gap:16px}.et-scheduler-edit-time-range{display:flex;gap:12px}.et-scheduler-edit-time-range-field{flex:1;min-inline-size:0}.et-scheduler-edit-surface-children{margin-block-start:20px}.et-scheduler-edit-surface-children-heading{margin:0 0 8px;font-size:13px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-edit-surface-children-list{display:flex;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none}.et-scheduler-edit-surface-children-item{color:var(--et-theme-color-ink-solid, var(--et-surface-color-solid));text-decoration:underline;text-underline-offset:2px}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "[et-button]", inputs: ["variant", "size", "iconAlignment"] }, { kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "directive", type: MenuDirective, selector: "[etMenu]", inputs: ["placement", "fallbackPlacements", "offset", "viewportPadding", "arrow", "arrowPadding", "autoFocus", "hoverOpen", "loop", "hoverOpenDelay", "hoverCloseDelay", "disabled", "open"], outputs: ["openChange"], exportAs: ["etMenu"] }, { kind: "directive", type: MenuTriggerDirective, selector: "[etMenuTrigger]", exportAs: ["etMenuTrigger"] }, { kind: "directive", type: MenuSurfaceDirective, selector: "ng-template[etMenuSurface]", exportAs: ["etMenuSurface"] }, { kind: "component", type: MenuComponent, selector: "et-menu" }, { kind: "component", type: MenuItemComponent, selector: "button[et-menu-item], a[et-menu-item]", inputs: ["variant"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: OverlayBodyComponent, selector: "[et-overlay-body], et-overlay-body", inputs: ["dividers"] }, { kind: "directive", type: OverlayCloseDirective, selector: "[et-overlay-close], [etOverlayClose]", inputs: ["aria-label", "type", "etOverlayClose", "et-overlay-close"], exportAs: ["etOverlayClose"] }, { kind: "directive", type: OverlayFooterDirective, selector: "[etOverlayFooter], et-overlay-footer" }, { kind: "directive", type: OverlayHeaderDirective, selector: "[etOverlayHeader], et-overlay-header" }, { kind: "directive", type: OverlayTitleDirective, selector: "[et-overlay-title], [etOverlayTitle]", inputs: ["id"], exportAs: ["etOverlayTitle"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53577
|
+
}
|
|
53578
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerEditSurfaceComponent, decorators: [{
|
|
53579
|
+
type: Component,
|
|
53580
|
+
args: [{ selector: 'et-scheduler-edit-surface', encapsulation: ViewEncapsulation.None, imports: [
|
|
53581
|
+
...BUTTON_IMPORTS,
|
|
53582
|
+
...MENU_IMPORTS,
|
|
53583
|
+
IconDirective,
|
|
53584
|
+
NgComponentOutlet,
|
|
53585
|
+
OverlayBodyComponent,
|
|
53586
|
+
OverlayCloseDirective,
|
|
53587
|
+
OverlayFooterDirective,
|
|
53588
|
+
OverlayHeaderDirective,
|
|
53589
|
+
OverlayTitleDirective,
|
|
53590
|
+
], providers: [
|
|
53591
|
+
provideIcons(PLUS_ICON, TRASH_ICON, ELLIPSIS_VERTICAL_ICON),
|
|
53592
|
+
{ provide: SCHEDULER_EDIT_SURFACE_HOST, useExisting: SchedulerEditSurfaceComponent },
|
|
53593
|
+
], hostDirectives: [
|
|
53594
|
+
OverlayMainDirective,
|
|
53595
|
+
{ directive: SchedulerEditSurfaceDirective, inputs: ['appointment', 'appointments'] },
|
|
53596
|
+
// The built-in edit fields and appointment actions, bundled by default so
|
|
53597
|
+
// `<et-scheduler-edit-surface>` renders a full surface zero-config - each forwards its own
|
|
53598
|
+
// config input, so e.g. `[etSchedulerEditLocation]="{ enabled: false }"` disables just that
|
|
53599
|
+
// one piece without dropping to headless composition.
|
|
53600
|
+
{ directive: SchedulerEditTitleDirective, inputs: ['etSchedulerEditTitle'] },
|
|
53601
|
+
{ directive: SchedulerEditTimeRangeDirective, inputs: ['etSchedulerEditTimeRange'] },
|
|
53602
|
+
{ directive: SchedulerEditLocationDirective, inputs: ['etSchedulerEditLocation'] },
|
|
53603
|
+
{ directive: SchedulerEditDescriptionDirective, inputs: ['etSchedulerEditDescription'] },
|
|
53604
|
+
{ directive: SchedulerEditColorDirective, inputs: ['etSchedulerEditColor'] },
|
|
53605
|
+
{ directive: SchedulerActionAddSubAppointmentDirective, inputs: ['etSchedulerActionAddSubAppointment'] },
|
|
53606
|
+
{ directive: SchedulerActionDeleteDirective, inputs: ['etSchedulerActionDelete'] },
|
|
53607
|
+
], host: {
|
|
53608
|
+
class: 'et-scheduler-edit-surface',
|
|
53609
|
+
}, template: "<div class=\"et-scheduler-edit-surface-header\" etOverlayHeader>\n <h2 class=\"et-scheduler-edit-surface-title\" etOverlayTitle>{{ headerLabel() }}</h2>\n\n @if (appointmentActions().length > 0) {\n <div class=\"et-scheduler-edit-surface-actions\" etMenu>\n <button [attr.aria-label]=\"moreActionsLabel()\" et-icon-button etMenuTrigger size=\"sm\" type=\"button\">\n <i etIcon=\"et-ellipsis-vertical\"></i>\n </button>\n\n <ng-template etMenuSurface>\n <et-menu>\n @for (action of appointmentActions(); track $index) {\n <button\n [variant]=\"action.destructive ? 'destructive' : 'default'\"\n (click)=\"action.run()\"\n et-menu-item\n type=\"button\"\n >\n @if (action.icon) {\n <i [etIcon]=\"action.icon\" aria-hidden=\"true\"></i>\n }\n {{ action.label() }}\n </button>\n }\n </et-menu>\n </ng-template>\n </div>\n }\n</div>\n\n<et-overlay-body>\n @if (surface.ancestors().length > 0) {\n <nav [attr.aria-label]=\"ancestorsLabel()\" class=\"et-scheduler-edit-surface-breadcrumb\">\n @for (ancestor of surface.ancestors(); track ancestor.id) {\n <button\n (click)=\"surface.navigateTo(ancestor.id)\"\n class=\"et-scheduler-edit-surface-breadcrumb-item\"\n type=\"button\"\n >\n {{ ancestor.title || untitledLabel() }}\n </button>\n <span class=\"et-scheduler-edit-surface-breadcrumb-separator\" aria-hidden=\"true\">/</span>\n }\n <span class=\"et-scheduler-edit-surface-breadcrumb-current\" aria-current=\"page\">{{ headerLabel() }}</span>\n </nav>\n }\n\n <div class=\"et-scheduler-edit-surface-fields\">\n @for (field of editFields(); track $index) {\n <ng-container *ngComponentOutlet=\"field.component; inputs: { draft: surface.draft }; injector: field.injector\" />\n }\n </div>\n\n @if (surface.children().length > 0) {\n <div class=\"et-scheduler-edit-surface-children\">\n <h3 class=\"et-scheduler-edit-surface-children-heading\">{{ subAppointmentsLabel() }}</h3>\n\n <ul class=\"et-scheduler-edit-surface-children-list\">\n @for (child of surface.children(); track child.appointment.id) {\n <li>\n <button\n (click)=\"surface.navigateTo(child.appointment.id)\"\n class=\"et-scheduler-edit-surface-children-item\"\n type=\"button\"\n >\n {{ child.appointment.title || untitledLabel() }}\n </button>\n </li>\n }\n </ul>\n </div>\n }\n</et-overlay-body>\n\n<div class=\"et-scheduler-edit-surface-footer\" etOverlayFooter>\n <button et-button etOverlayClose type=\"button\" variant=\"outline\">{{ cancelLabel() }}</button>\n <button [disabled]=\"!canSave()\" (click)=\"save()\" et-button type=\"button\">{{ saveLabel() }}</button>\n</div>\n", styles: ["@layer components{.et-scheduler-edit-surface-header{display:flex;align-items:center;gap:12px}.et-scheduler-edit-surface-title{flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-edit-surface-actions{flex-shrink:0;margin-inline-start:auto}.et-scheduler-edit-surface-footer{display:flex;justify-content:flex-end;gap:12px}.et-scheduler-edit-surface-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-block-end:16px;font-size:13px;color:var(--et-surface-color-muted-solid)}.et-scheduler-edit-surface-breadcrumb-item{color:inherit;text-decoration:underline;text-underline-offset:2px}.et-scheduler-edit-surface-breadcrumb-current{color:var(--et-surface-color-solid);font-weight:600}.et-scheduler-edit-surface-fields{display:flex;flex-direction:column;gap:16px}.et-scheduler-edit-time-range{display:flex;gap:12px}.et-scheduler-edit-time-range-field{flex:1;min-inline-size:0}.et-scheduler-edit-surface-children{margin-block-start:20px}.et-scheduler-edit-surface-children-heading{margin:0 0 8px;font-size:13px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-edit-surface-children-list{display:flex;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none}.et-scheduler-edit-surface-children-item{color:var(--et-theme-color-ink-solid, var(--et-surface-color-solid));text-decoration:underline;text-underline-offset:2px}}\n"] }]
|
|
53610
|
+
}], ctorParameters: () => [] });
|
|
53611
|
+
/** Opens `<et-scheduler-edit-surface>` as a dialog - what `<et-scheduler>` uses to auto-open on selection. */
|
|
53612
|
+
const SCHEDULER_EDIT_SURFACE_OVERLAY = /* @__PURE__ */ defineOverlay({
|
|
53613
|
+
component: SchedulerEditSurfaceComponent,
|
|
53614
|
+
strategies: /* @__PURE__ */ dialogOverlayStrategy({ maxWidth: '520px' }),
|
|
53615
|
+
panelClass: 'et-scheduler-edit-surface-panel',
|
|
53616
|
+
});
|
|
53617
|
+
|
|
52657
53618
|
/** The default month grid: one day cell per day, appointments as one-line badges with a "+N more" overflow. */
|
|
52658
53619
|
class SchedulerMonthViewComponent {
|
|
52659
53620
|
constructor() {
|
|
@@ -52697,6 +53658,10 @@ class SchedulerTimeGridViewComponent {
|
|
|
52697
53658
|
this.scheduler = inject(SchedulerDirective, { optional: true });
|
|
52698
53659
|
this.grid = inject(SchedulerTimeGridDirective);
|
|
52699
53660
|
this.featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });
|
|
53661
|
+
this.timeGridBody = viewChild('timeGridBody', /* @ts-ignore */
|
|
53662
|
+
...(ngDevMode ? [{ debugName: "timeGridBody" }] : /* istanbul ignore next */ []));
|
|
53663
|
+
this.firstHourRow = viewChild('hourRow', /* @ts-ignore */
|
|
53664
|
+
...(ngDevMode ? [{ debugName: "firstHourRow" }] : /* istanbul ignore next */ []));
|
|
52700
53665
|
this.hours = computed(() => {
|
|
52701
53666
|
const locale = this.scheduler?.effectiveLocale();
|
|
52702
53667
|
const reference = startOfDay(new Date());
|
|
@@ -52707,6 +53672,16 @@ class SchedulerTimeGridViewComponent {
|
|
|
52707
53672
|
}, /* @ts-ignore */
|
|
52708
53673
|
...(ngDevMode ? [{ debugName: "hours" }] : /* istanbul ignore next */ []));
|
|
52709
53674
|
injectStyleManager().mount(SchedulerAppointmentStylesComponent);
|
|
53675
|
+
// Once per mount, not reactively - re-scrolling on every `focusedDate` change would yank a
|
|
53676
|
+
// user's own scroll position back every time they step to the next day/week.
|
|
53677
|
+
afterNextRender(() => {
|
|
53678
|
+
const body = this.timeGridBody()?.nativeElement;
|
|
53679
|
+
const hourRow = this.firstHourRow()?.nativeElement;
|
|
53680
|
+
if (!body || !hourRow) {
|
|
53681
|
+
return;
|
|
53682
|
+
}
|
|
53683
|
+
body.scrollTop = this.grid.initialScrollHour() * hourRow.offsetHeight;
|
|
53684
|
+
});
|
|
52710
53685
|
}
|
|
52711
53686
|
/** UI contributed by badge features (title, time range, …) - see `registerBadgeAdornment`. */
|
|
52712
53687
|
badgeAdornments() {
|
|
@@ -52723,14 +53698,14 @@ class SchedulerTimeGridViewComponent {
|
|
|
52723
53698
|
this.scheduler?.selectedAppointmentId.set(appointment.id);
|
|
52724
53699
|
}
|
|
52725
53700
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerTimeGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52726
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerTimeGridViewComponent, isStandalone: true, selector: "et-scheduler-time-grid-view", host: { classAttribute: "et-scheduler-time-grid-view" }, hostDirectives: [{ directive: SchedulerTimeGridDirective }], ngImport: i0, template: "<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-header\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-header-day\" role=\"columnheader\">\n <span class=\"et-scheduler-time-grid-header-weekday\">{{ weekdayLabel(day.date) }}</span>\n <span class=\"et-scheduler-time-grid-header-date\">{{ day.date.getDate() }}</span>\n </div>\n }\n </div>\n</div>\n\n@if (grid.allDayRowCount() > 0) {\n <div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-all-day\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div\n [style.--_et-scheduler-time-grid-all-day-row-count]=\"grid.allDayRowCount()\"\n class=\"et-scheduler-time-grid-all-day-lane\"\n role=\"gridcell\"\n >\n @for (entry of grid.allDay(); track entry.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-all-day-offset]=\"entry.inlineOffset\"\n [style.--_et-scheduler-time-grid-all-day-size]=\"entry.inlineSize\"\n [style.--_et-scheduler-time-grid-all-day-row]=\"entry.row\"\n [attr.data-selected]=\"isSelected(entry.node.appointment) ? '' : null\"\n [attr.title]=\"entry.node.appointment.title\"\n [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n (click)=\"select(entry.node.appointment)\"\n class=\"et-scheduler-appointment et-scheduler-time-grid-all-day-entry\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: entry.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n </div>\n}\n\n<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-body\">\n <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\">\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\">\n <span class=\"et-scheduler-time-grid-hour-label\">{{ hour.label }}</span>\n </div>\n }\n </div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-day\" role=\"gridcell\">\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-block-offset]=\"block.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"block.span\"\n [style.--_et-scheduler-time-grid-block-inline-offset]=\"block.inlineOffset\"\n [style.--_et-scheduler-time-grid-block-inline-size]=\"block.inlineSize\"\n [style.--_et-scheduler-time-grid-block-depth]=\"block.node.depth\"\n [attr.data-selected]=\"isSelected(block.node.appointment) ? '' : null\"\n [attr.data-nested]=\"block.node.depth > 0 ? '' : null\"\n [attr.title]=\"block.node.appointment.title\"\n [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n (click)=\"select(block.node.appointment)\"\n class=\"et-scheduler-time-grid-block\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: block.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["@layer components{@property --et-scheduler-time-grid-hour-size{syntax: \"<length>\"; inherits: true; initial-value: 48px;}@property --et-scheduler-time-grid-gutter-size{syntax: \"<length>\"; inherits: true; initial-value: 56px;}@property --et-scheduler-time-grid-all-day-row-size{syntax: \"<length>\"; inherits: true; initial-value: 24px;}.et-scheduler-time-grid-view{display:flex;flex-direction:column}.et-scheduler-time-grid-row{display:flex}.et-scheduler-time-grid-gutter{flex-shrink:0;inline-size:var(--et-scheduler-time-grid-gutter-size)}.et-scheduler-time-grid-days{display:grid;flex:1;grid-auto-flow:column;grid-auto-columns:1fr}.et-scheduler-time-grid-header{padding-block-end:6px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-header-day{display:flex;flex-direction:column;align-items:center;gap:2px;padding-block:4px}.et-scheduler-time-grid-header-day:where([data-today]) .et-scheduler-time-grid-header-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-time-grid-header-weekday{font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-header-date{display:inline-flex;align-items:center;justify-content:center;inline-size:22px;block-size:22px;border-radius:999px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-solid)}.et-scheduler-time-grid-all-day{padding-block:4px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-all-day-lane{position:relative;flex:1;min-block-size:calc(var(--_et-scheduler-time-grid-all-day-row-count, 0) * var(--et-scheduler-time-grid-all-day-row-size))}.et-scheduler-time-grid-all-day-entry{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-all-day-row, 0) * var(--et-scheduler-time-grid-all-day-row-size));inset-inline-start:calc(var(--_et-scheduler-time-grid-all-day-offset, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-all-day-size, 100) * 1% - 4px);block-size:calc(var(--et-scheduler-time-grid-all-day-row-size) - 2px)}.et-scheduler-time-grid-hour-row{box-sizing:border-box;block-size:var(--et-scheduler-time-grid-hour-size);border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-gutter .et-scheduler-time-grid-hour-row{display:flex;align-items:flex-start;justify-content:flex-end;padding-inline-end:8px;border-block-end:none}.et-scheduler-time-grid-hour-label{inline-size:max-content;transform:translateY(-50%);font-size:11px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-days{border-inline-start:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day{position:relative;border-inline-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day:where([data-today]){background:color-mix(in srgb,var(--et-theme-color-primary-solid) 6%,transparent)}.et-scheduler-time-grid-block{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline-start:calc(var(--_et-scheduler-time-grid-block-inline-offset, 0) * 1%);block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-block-inline-size, 100) * 1% - 2px);min-block-size:16px;display:flex;align-items:flex-start;gap:6px;overflow:hidden;padding:2px 6px;padding-inline-start:calc(min(var(--_et-scheduler-time-grid-block-depth, 0),4)*6px + 6px);border:none;border-radius:4px;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 14%,transparent);color:var(--et-theme-color-ink-solid);font:inherit;font-size:12px;text-align:start;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.et-scheduler-time-grid-block .et-scheduler-appointment-dot{margin-block-start:4px}@media(hover:hover){.et-scheduler-time-grid-block:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-time-grid-block:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-time-grid-block:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}}\n"], dependencies: [{ kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
53701
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerTimeGridViewComponent, isStandalone: true, selector: "et-scheduler-time-grid-view", host: { classAttribute: "et-scheduler-time-grid-view" }, viewQueries: [{ propertyName: "timeGridBody", first: true, predicate: ["timeGridBody"], descendants: true, isSignal: true }, { propertyName: "firstHourRow", first: true, predicate: ["hourRow"], descendants: true, isSignal: true }], hostDirectives: [{ directive: SchedulerTimeGridDirective }], ngImport: i0, template: "<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-header\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-header-day\" role=\"columnheader\">\n <span class=\"et-scheduler-time-grid-header-weekday\">{{ weekdayLabel(day.date) }}</span>\n <span class=\"et-scheduler-time-grid-header-date\">{{ day.date.getDate() }}</span>\n </div>\n }\n </div>\n</div>\n\n@if (grid.allDayRowCount() > 0) {\n <div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-all-day\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div\n [style.--_et-scheduler-time-grid-all-day-row-count]=\"grid.allDayRowCount()\"\n class=\"et-scheduler-time-grid-all-day-lane\"\n role=\"gridcell\"\n >\n @for (entry of grid.allDay(); track entry.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-all-day-offset]=\"entry.inlineOffset\"\n [style.--_et-scheduler-time-grid-all-day-size]=\"entry.inlineSize\"\n [style.--_et-scheduler-time-grid-all-day-row]=\"entry.row\"\n [attr.data-selected]=\"isSelected(entry.node.appointment) ? '' : null\"\n [attr.title]=\"entry.node.appointment.title\"\n [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n (click)=\"select(entry.node.appointment)\"\n class=\"et-scheduler-appointment et-scheduler-time-grid-all-day-entry\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: entry.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n </div>\n}\n\n<div #timeGridBody class=\"et-scheduler-time-grid-row et-scheduler-time-grid-body\">\n <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\">\n @for (hour of hours(); track hour.hour) {\n <div #hourRow class=\"et-scheduler-time-grid-hour-row\">\n <span class=\"et-scheduler-time-grid-hour-label\">{{ hour.label }}</span>\n </div>\n }\n </div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-day\" role=\"gridcell\">\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-block-offset]=\"block.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"block.span\"\n [style.--_et-scheduler-time-grid-block-inline-offset]=\"block.inlineOffset\"\n [style.--_et-scheduler-time-grid-block-inline-size]=\"block.inlineSize\"\n [style.--_et-scheduler-time-grid-block-depth]=\"block.node.depth\"\n [attr.data-selected]=\"isSelected(block.node.appointment) ? '' : null\"\n [attr.data-nested]=\"block.node.depth > 0 ? '' : null\"\n [attr.title]=\"block.node.appointment.title\"\n [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n (click)=\"select(block.node.appointment)\"\n class=\"et-scheduler-time-grid-block\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: block.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["@layer components{@property --et-scheduler-time-grid-hour-size{syntax: \"<length>\"; inherits: true; initial-value: 48px;}@property --et-scheduler-time-grid-gutter-size{syntax: \"<length>\"; inherits: true; initial-value: 56px;}@property --et-scheduler-time-grid-all-day-row-size{syntax: \"<length>\"; inherits: true; initial-value: 24px;}@property --et-scheduler-time-grid-body-max-height{syntax: \"<length>\"; inherits: true; initial-value: 600px;}.et-scheduler-time-grid-view{display:flex;flex-direction:column}.et-scheduler-time-grid-row{display:flex}.et-scheduler-time-grid-body{overflow-y:auto;max-block-size:var(--et-scheduler-time-grid-body-max-height)}.et-scheduler-time-grid-gutter{flex-shrink:0;inline-size:var(--et-scheduler-time-grid-gutter-size)}.et-scheduler-time-grid-days{display:grid;flex:1;grid-auto-flow:column;grid-auto-columns:1fr}.et-scheduler-time-grid-header{padding-block-end:6px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-header-day{display:flex;flex-direction:column;align-items:center;gap:2px;padding-block:4px}.et-scheduler-time-grid-header-day:where([data-today]) .et-scheduler-time-grid-header-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-time-grid-header-weekday{font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-header-date{display:inline-flex;align-items:center;justify-content:center;inline-size:22px;block-size:22px;border-radius:999px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-solid)}.et-scheduler-time-grid-all-day{padding-block:4px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-all-day-lane{position:relative;flex:1;min-block-size:calc(var(--_et-scheduler-time-grid-all-day-row-count, 0) * var(--et-scheduler-time-grid-all-day-row-size))}.et-scheduler-time-grid-all-day-entry{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-all-day-row, 0) * var(--et-scheduler-time-grid-all-day-row-size));inset-inline-start:calc(var(--_et-scheduler-time-grid-all-day-offset, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-all-day-size, 100) * 1% - 4px);block-size:calc(var(--et-scheduler-time-grid-all-day-row-size) - 2px)}.et-scheduler-time-grid-hour-row{box-sizing:border-box;block-size:var(--et-scheduler-time-grid-hour-size);border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-gutter .et-scheduler-time-grid-hour-row{display:flex;align-items:flex-start;justify-content:flex-end;padding-inline-end:8px;border-block-end:none}.et-scheduler-time-grid-hour-label{inline-size:max-content;transform:translateY(-50%);font-size:11px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-days{border-inline-start:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day{position:relative;border-inline-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day:where([data-today]){background:color-mix(in srgb,var(--et-theme-color-primary-solid) 6%,transparent)}.et-scheduler-time-grid-block{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline-start:calc(var(--_et-scheduler-time-grid-block-inline-offset, 0) * 1%);block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-block-inline-size, 100) * 1% - 2px);min-block-size:16px;display:flex;align-items:flex-start;gap:6px;overflow:hidden;padding:2px 6px;padding-inline-start:calc(min(var(--_et-scheduler-time-grid-block-depth, 0),4)*6px + 6px);border:none;border-radius:4px;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 14%,transparent);color:var(--et-theme-color-ink-solid);font:inherit;font-size:12px;text-align:start;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.et-scheduler-time-grid-block .et-scheduler-appointment-dot{margin-block-start:4px}@media(hover:hover){.et-scheduler-time-grid-block:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-time-grid-block:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-time-grid-block:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}}\n"], dependencies: [{ kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
52727
53702
|
}
|
|
52728
53703
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerTimeGridViewComponent, decorators: [{
|
|
52729
53704
|
type: Component,
|
|
52730
53705
|
args: [{ selector: 'et-scheduler-time-grid-view', encapsulation: ViewEncapsulation.None, imports: [ProvideColorDirective, NgComponentOutlet], hostDirectives: [SchedulerTimeGridDirective], host: {
|
|
52731
53706
|
class: 'et-scheduler-time-grid-view',
|
|
52732
|
-
}, template: "<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-header\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-header-day\" role=\"columnheader\">\n <span class=\"et-scheduler-time-grid-header-weekday\">{{ weekdayLabel(day.date) }}</span>\n <span class=\"et-scheduler-time-grid-header-date\">{{ day.date.getDate() }}</span>\n </div>\n }\n </div>\n</div>\n\n@if (grid.allDayRowCount() > 0) {\n <div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-all-day\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div\n [style.--_et-scheduler-time-grid-all-day-row-count]=\"grid.allDayRowCount()\"\n class=\"et-scheduler-time-grid-all-day-lane\"\n role=\"gridcell\"\n >\n @for (entry of grid.allDay(); track entry.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-all-day-offset]=\"entry.inlineOffset\"\n [style.--_et-scheduler-time-grid-all-day-size]=\"entry.inlineSize\"\n [style.--_et-scheduler-time-grid-all-day-row]=\"entry.row\"\n [attr.data-selected]=\"isSelected(entry.node.appointment) ? '' : null\"\n [attr.title]=\"entry.node.appointment.title\"\n [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n (click)=\"select(entry.node.appointment)\"\n class=\"et-scheduler-appointment et-scheduler-time-grid-all-day-entry\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: entry.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n </div>\n}\n\n<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-body\">\n <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\">\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\">\n <span class=\"et-scheduler-time-grid-hour-label\">{{ hour.label }}</span>\n </div>\n }\n </div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-day\" role=\"gridcell\">\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-block-offset]=\"block.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"block.span\"\n [style.--_et-scheduler-time-grid-block-inline-offset]=\"block.inlineOffset\"\n [style.--_et-scheduler-time-grid-block-inline-size]=\"block.inlineSize\"\n [style.--_et-scheduler-time-grid-block-depth]=\"block.node.depth\"\n [attr.data-selected]=\"isSelected(block.node.appointment) ? '' : null\"\n [attr.data-nested]=\"block.node.depth > 0 ? '' : null\"\n [attr.title]=\"block.node.appointment.title\"\n [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n (click)=\"select(block.node.appointment)\"\n class=\"et-scheduler-time-grid-block\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: block.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["@layer components{@property --et-scheduler-time-grid-hour-size{syntax: \"<length>\"; inherits: true; initial-value: 48px;}@property --et-scheduler-time-grid-gutter-size{syntax: \"<length>\"; inherits: true; initial-value: 56px;}@property --et-scheduler-time-grid-all-day-row-size{syntax: \"<length>\"; inherits: true; initial-value: 24px;}.et-scheduler-time-grid-view{display:flex;flex-direction:column}.et-scheduler-time-grid-row{display:flex}.et-scheduler-time-grid-gutter{flex-shrink:0;inline-size:var(--et-scheduler-time-grid-gutter-size)}.et-scheduler-time-grid-days{display:grid;flex:1;grid-auto-flow:column;grid-auto-columns:1fr}.et-scheduler-time-grid-header{padding-block-end:6px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-header-day{display:flex;flex-direction:column;align-items:center;gap:2px;padding-block:4px}.et-scheduler-time-grid-header-day:where([data-today]) .et-scheduler-time-grid-header-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-time-grid-header-weekday{font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-header-date{display:inline-flex;align-items:center;justify-content:center;inline-size:22px;block-size:22px;border-radius:999px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-solid)}.et-scheduler-time-grid-all-day{padding-block:4px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-all-day-lane{position:relative;flex:1;min-block-size:calc(var(--_et-scheduler-time-grid-all-day-row-count, 0) * var(--et-scheduler-time-grid-all-day-row-size))}.et-scheduler-time-grid-all-day-entry{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-all-day-row, 0) * var(--et-scheduler-time-grid-all-day-row-size));inset-inline-start:calc(var(--_et-scheduler-time-grid-all-day-offset, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-all-day-size, 100) * 1% - 4px);block-size:calc(var(--et-scheduler-time-grid-all-day-row-size) - 2px)}.et-scheduler-time-grid-hour-row{box-sizing:border-box;block-size:var(--et-scheduler-time-grid-hour-size);border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-gutter .et-scheduler-time-grid-hour-row{display:flex;align-items:flex-start;justify-content:flex-end;padding-inline-end:8px;border-block-end:none}.et-scheduler-time-grid-hour-label{inline-size:max-content;transform:translateY(-50%);font-size:11px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-days{border-inline-start:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day{position:relative;border-inline-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day:where([data-today]){background:color-mix(in srgb,var(--et-theme-color-primary-solid) 6%,transparent)}.et-scheduler-time-grid-block{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline-start:calc(var(--_et-scheduler-time-grid-block-inline-offset, 0) * 1%);block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-block-inline-size, 100) * 1% - 2px);min-block-size:16px;display:flex;align-items:flex-start;gap:6px;overflow:hidden;padding:2px 6px;padding-inline-start:calc(min(var(--_et-scheduler-time-grid-block-depth, 0),4)*6px + 6px);border:none;border-radius:4px;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 14%,transparent);color:var(--et-theme-color-ink-solid);font:inherit;font-size:12px;text-align:start;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.et-scheduler-time-grid-block .et-scheduler-appointment-dot{margin-block-start:4px}@media(hover:hover){.et-scheduler-time-grid-block:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-time-grid-block:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-time-grid-block:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}}\n"] }]
|
|
52733
|
-
}], ctorParameters: () => [] });
|
|
53707
|
+
}, template: "<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-header\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-header-day\" role=\"columnheader\">\n <span class=\"et-scheduler-time-grid-header-weekday\">{{ weekdayLabel(day.date) }}</span>\n <span class=\"et-scheduler-time-grid-header-date\">{{ day.date.getDate() }}</span>\n </div>\n }\n </div>\n</div>\n\n@if (grid.allDayRowCount() > 0) {\n <div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-all-day\" role=\"row\">\n <div class=\"et-scheduler-time-grid-gutter\"></div>\n\n <div\n [style.--_et-scheduler-time-grid-all-day-row-count]=\"grid.allDayRowCount()\"\n class=\"et-scheduler-time-grid-all-day-lane\"\n role=\"gridcell\"\n >\n @for (entry of grid.allDay(); track entry.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-all-day-offset]=\"entry.inlineOffset\"\n [style.--_et-scheduler-time-grid-all-day-size]=\"entry.inlineSize\"\n [style.--_et-scheduler-time-grid-all-day-row]=\"entry.row\"\n [attr.data-selected]=\"isSelected(entry.node.appointment) ? '' : null\"\n [attr.title]=\"entry.node.appointment.title\"\n [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n (click)=\"select(entry.node.appointment)\"\n class=\"et-scheduler-appointment et-scheduler-time-grid-all-day-entry\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: entry.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n </div>\n}\n\n<div #timeGridBody class=\"et-scheduler-time-grid-row et-scheduler-time-grid-body\">\n <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\">\n @for (hour of hours(); track hour.hour) {\n <div #hourRow class=\"et-scheduler-time-grid-hour-row\">\n <span class=\"et-scheduler-time-grid-hour-label\">{{ hour.label }}</span>\n </div>\n }\n </div>\n\n <div class=\"et-scheduler-time-grid-days\">\n @for (day of grid.days(); track day.date.getTime()) {\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-day\" role=\"gridcell\">\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n [style.--_et-scheduler-time-grid-block-offset]=\"block.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"block.span\"\n [style.--_et-scheduler-time-grid-block-inline-offset]=\"block.inlineOffset\"\n [style.--_et-scheduler-time-grid-block-inline-size]=\"block.inlineSize\"\n [style.--_et-scheduler-time-grid-block-depth]=\"block.node.depth\"\n [attr.data-selected]=\"isSelected(block.node.appointment) ? '' : null\"\n [attr.data-nested]=\"block.node.depth > 0 ? '' : null\"\n [attr.title]=\"block.node.appointment.title\"\n [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n (click)=\"select(block.node.appointment)\"\n class=\"et-scheduler-time-grid-block\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: block.node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["@layer components{@property --et-scheduler-time-grid-hour-size{syntax: \"<length>\"; inherits: true; initial-value: 48px;}@property --et-scheduler-time-grid-gutter-size{syntax: \"<length>\"; inherits: true; initial-value: 56px;}@property --et-scheduler-time-grid-all-day-row-size{syntax: \"<length>\"; inherits: true; initial-value: 24px;}@property --et-scheduler-time-grid-body-max-height{syntax: \"<length>\"; inherits: true; initial-value: 600px;}.et-scheduler-time-grid-view{display:flex;flex-direction:column}.et-scheduler-time-grid-row{display:flex}.et-scheduler-time-grid-body{overflow-y:auto;max-block-size:var(--et-scheduler-time-grid-body-max-height)}.et-scheduler-time-grid-gutter{flex-shrink:0;inline-size:var(--et-scheduler-time-grid-gutter-size)}.et-scheduler-time-grid-days{display:grid;flex:1;grid-auto-flow:column;grid-auto-columns:1fr}.et-scheduler-time-grid-header{padding-block-end:6px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-header-day{display:flex;flex-direction:column;align-items:center;gap:2px;padding-block:4px}.et-scheduler-time-grid-header-day:where([data-today]) .et-scheduler-time-grid-header-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-time-grid-header-weekday{font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-header-date{display:inline-flex;align-items:center;justify-content:center;inline-size:22px;block-size:22px;border-radius:999px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-solid)}.et-scheduler-time-grid-all-day{padding-block:4px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-all-day-lane{position:relative;flex:1;min-block-size:calc(var(--_et-scheduler-time-grid-all-day-row-count, 0) * var(--et-scheduler-time-grid-all-day-row-size))}.et-scheduler-time-grid-all-day-entry{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-all-day-row, 0) * var(--et-scheduler-time-grid-all-day-row-size));inset-inline-start:calc(var(--_et-scheduler-time-grid-all-day-offset, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-all-day-size, 100) * 1% - 4px);block-size:calc(var(--et-scheduler-time-grid-all-day-row-size) - 2px)}.et-scheduler-time-grid-hour-row{box-sizing:border-box;block-size:var(--et-scheduler-time-grid-hour-size);border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-gutter .et-scheduler-time-grid-hour-row{display:flex;align-items:flex-start;justify-content:flex-end;padding-inline-end:8px;border-block-end:none}.et-scheduler-time-grid-hour-label{inline-size:max-content;transform:translateY(-50%);font-size:11px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-muted-solid)}.et-scheduler-time-grid-body .et-scheduler-time-grid-days{border-inline-start:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day{position:relative;border-inline-end:1px solid var(--et-surface-border-solid)}.et-scheduler-time-grid-day:where([data-today]){background:color-mix(in srgb,var(--et-theme-color-primary-solid) 6%,transparent)}.et-scheduler-time-grid-block{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline-start:calc(var(--_et-scheduler-time-grid-block-inline-offset, 0) * 1%);block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);inline-size:calc(var(--_et-scheduler-time-grid-block-inline-size, 100) * 1% - 2px);min-block-size:16px;display:flex;align-items:flex-start;gap:6px;overflow:hidden;padding:2px 6px;padding-inline-start:calc(min(var(--_et-scheduler-time-grid-block-depth, 0),4)*6px + 6px);border:none;border-radius:4px;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 14%,transparent);color:var(--et-theme-color-ink-solid);font:inherit;font-size:12px;text-align:start;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.et-scheduler-time-grid-block .et-scheduler-appointment-dot{margin-block-start:4px}@media(hover:hover){.et-scheduler-time-grid-block:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-time-grid-block:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-time-grid-block:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}}\n"] }]
|
|
53708
|
+
}], ctorParameters: () => [], propDecorators: { timeGridBody: [{ type: i0.ViewChild, args: ['timeGridBody', { isSignal: true }] }], firstHourRow: [{ type: i0.ViewChild, args: ['hourRow', { isSignal: true }] }] } });
|
|
52734
53709
|
|
|
52735
53710
|
class SchedulerComponent {
|
|
52736
53711
|
constructor() {
|
|
@@ -52741,6 +53716,10 @@ class SchedulerComponent {
|
|
|
52741
53716
|
*/
|
|
52742
53717
|
this.headless = inject(SchedulerDirective);
|
|
52743
53718
|
this.elementRef = inject(ElementRef);
|
|
53719
|
+
/** Emits the edited or newly-added appointment once the default edit surface saves. */
|
|
53720
|
+
this.appointmentSave = output();
|
|
53721
|
+
/** Emits every id to remove once the default edit surface deletes a chain. */
|
|
53722
|
+
this.appointmentsDelete = output();
|
|
52744
53723
|
this.previousLabel = computed(() => this.labels().previous, /* @ts-ignore */
|
|
52745
53724
|
...(ngDevMode ? [{ debugName: "previousLabel" }] : /* istanbul ignore next */ []));
|
|
52746
53725
|
this.nextLabel = computed(() => this.labels().next, /* @ts-ignore */
|
|
@@ -52786,11 +53765,56 @@ class SchedulerComponent {
|
|
|
52786
53765
|
.filter((adornment) => adornment.enabled?.() ?? true)
|
|
52787
53766
|
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
|
|
52788
53767
|
...(ngDevMode ? [{ debugName: "badgeAdornments" }] : /* istanbul ignore next */ []));
|
|
53768
|
+
// UI contributed by toolbar features (just "Add appointment" today) - rendered in the header
|
|
53769
|
+
// alongside the built-in nav controls. Same registration story as the badge adornments above.
|
|
53770
|
+
this.toolbarActionList = signal([], /* @ts-ignore */
|
|
53771
|
+
...(ngDevMode ? [{ debugName: "toolbarActionList" }] : /* istanbul ignore next */ []));
|
|
53772
|
+
this.toolbarActions = computed(() => this.toolbarActionList()
|
|
53773
|
+
.filter((action) => action.enabled?.() ?? true)
|
|
53774
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
|
|
53775
|
+
...(ngDevMode ? [{ debugName: "toolbarActions" }] : /* istanbul ignore next */ []));
|
|
53776
|
+
/**
|
|
53777
|
+
* Opens `<et-scheduler-edit-surface>` for the selected appointment - covers the zero-config
|
|
53778
|
+
* case (no feature directives applied) per the plan. Its result bubbles as `appointmentSave` /
|
|
53779
|
+
* `appointmentsDelete`, and closing always clears `selectedAppointmentId` back to `null` so
|
|
53780
|
+
* clicking the same appointment again reopens a fresh surface.
|
|
53781
|
+
*/
|
|
53782
|
+
this.editSurfaceOpener = createOverlayOpener(SCHEDULER_EDIT_SURFACE_OVERLAY, {
|
|
53783
|
+
afterClosed: (result) => {
|
|
53784
|
+
if (result?.kind === 'save') {
|
|
53785
|
+
this.appointmentSave.emit(result.appointment);
|
|
53786
|
+
}
|
|
53787
|
+
else if (result?.kind === 'delete') {
|
|
53788
|
+
this.appointmentsDelete.emit(result.ids);
|
|
53789
|
+
}
|
|
53790
|
+
this.headless.selectedAppointmentId.set(null);
|
|
53791
|
+
},
|
|
53792
|
+
});
|
|
53793
|
+
effect(() => {
|
|
53794
|
+
const appointment = this.headless.selectedAppointment();
|
|
53795
|
+
if (!appointment) {
|
|
53796
|
+
return;
|
|
53797
|
+
}
|
|
53798
|
+
untracked(() => this.openEditSurface(appointment));
|
|
53799
|
+
});
|
|
52789
53800
|
}
|
|
52790
53801
|
/** Bound to the view-switch's `(valueChange)` - safe to cast since every `<et-segmented-button>` below carries a `SchedulerView` literal. */
|
|
52791
53802
|
setView(value) {
|
|
52792
53803
|
this.headless.view.set(value);
|
|
52793
53804
|
}
|
|
53805
|
+
/**
|
|
53806
|
+
* Synthesizes a brand-new, blank top-level appointment - anchored to `focusedDate` so it lands
|
|
53807
|
+
* in whatever period is currently in view, defaulting to the next hour if that's today, else a
|
|
53808
|
+
* business-hours 9am - and opens the edit surface for it. Run by the built-in
|
|
53809
|
+
* `etSchedulerActionAddAppointment` toolbar action; call directly to trigger the same flow from
|
|
53810
|
+
* your own UI (`<et-scheduler #s>` then `s.addAppointment()`).
|
|
53811
|
+
*/
|
|
53812
|
+
addAppointment() {
|
|
53813
|
+
const day = startOfDay(this.headless.focusedDate());
|
|
53814
|
+
const hour = isSameDay(day, new Date()) ? Math.min(23, new Date().getHours() + 1) : 9;
|
|
53815
|
+
const start = setMinutes(setHours(day, hour), 0);
|
|
53816
|
+
this.openEditSurface({ id: randomId(), parentId: null, title: '', start, end: addHours(start, 1) });
|
|
53817
|
+
}
|
|
52794
53818
|
/** The scheduler's own element. Part of the feature contract (a feature is a directive on it). */
|
|
52795
53819
|
get element() {
|
|
52796
53820
|
return this.elementRef.nativeElement;
|
|
@@ -52810,8 +53834,23 @@ class SchedulerComponent {
|
|
|
52810
53834
|
registerBadgeAdornment(adornment) {
|
|
52811
53835
|
this.badgeAdornmentList.update((list) => [...list, adornment]);
|
|
52812
53836
|
}
|
|
53837
|
+
/** Part of the feature contract - see `SchedulerFeatureHost`. */
|
|
53838
|
+
registerToolbarAction(action) {
|
|
53839
|
+
this.toolbarActionList.update((list) => [...list, action]);
|
|
53840
|
+
}
|
|
53841
|
+
openEditSurface(appointment) {
|
|
53842
|
+
this.editSurfaceOpener.open({
|
|
53843
|
+
bindings: [
|
|
53844
|
+
inputBinding('appointment', () => appointment),
|
|
53845
|
+
inputBinding('appointments', () => this.headless.appointments()),
|
|
53846
|
+
],
|
|
53847
|
+
});
|
|
53848
|
+
}
|
|
52813
53849
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52814
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerComponent, isStandalone: true, selector: "et-scheduler",
|
|
53850
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerComponent, isStandalone: true, selector: "et-scheduler", outputs: { appointmentSave: "appointmentSave", appointmentsDelete: "appointmentsDelete" }, host: { classAttribute: "et-scheduler" }, providers: [
|
|
53851
|
+
provideIcons(CHEVRON_ICON, PLUS_ICON),
|
|
53852
|
+
{ provide: SCHEDULER_FEATURE_HOST, useExisting: SchedulerComponent },
|
|
53853
|
+
], hostDirectives: [{ directive: SchedulerDirective, inputs: ["appointments", "appointments", "view", "view", "focusedDate", "focusedDate", "selectedAppointmentId", "selectedAppointmentId", "locale", "locale", "firstDayOfWeek", "firstDayOfWeek"], outputs: ["viewChange", "viewChange", "focusedDateChange", "focusedDateChange", "selectedAppointmentIdChange", "selectedAppointmentIdChange"] }, { directive: SchedulerBadgeColorDotDirective, inputs: ["etSchedulerBadgeColorDot", "etSchedulerBadgeColorDot"] }, { directive: SchedulerBadgeTitleDirective, inputs: ["etSchedulerBadgeTitle", "etSchedulerBadgeTitle"] }, { directive: SchedulerBadgeTimeRangeDirective, inputs: ["etSchedulerBadgeTimeRange", "etSchedulerBadgeTimeRange"] }, { directive: SchedulerBadgeLocationDirective, inputs: ["etSchedulerBadgeLocation", "etSchedulerBadgeLocation"] }, { directive: SchedulerBadgeChainCountDirective, inputs: ["etSchedulerBadgeChainCount", "etSchedulerBadgeChainCount"] }, { directive: SchedulerActionAddAppointmentDirective, inputs: ["etSchedulerActionAddAppointment", "etSchedulerActionAddAppointment"] }], ngImport: i0, template: "<div class=\"et-scheduler-header\">\n <button\n (click)=\"headless.goToToday()\"\n class=\"et-scheduler-today-button\"\n et-button\n size=\"sm\"\n variant=\"outline\"\n type=\"button\"\n >\n {{ todayLabel() }}\n </button>\n\n @for (action of toolbarActions(); track $index) {\n <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-button size=\"sm\" type=\"button\">\n @if (action.icon) {\n <i [etIcon]=\"action.icon\" aria-hidden=\"true\"></i>\n }\n {{ action.label() }}\n </button>\n }\n\n <div class=\"et-scheduler-nav-buttons\">\n <button\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"headless.previous()\"\n class=\"et-scheduler-nav-button et-scheduler-nav-button--previous\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n\n <button\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"headless.next()\"\n class=\"et-scheduler-nav-button et-scheduler-nav-button--next\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n </div>\n\n <span class=\"et-scheduler-header-label\">{{ headerLabel() }}</span>\n\n <div class=\"et-scheduler-header-spacer\"></div>\n\n <et-segmented-button-group\n [value]=\"headless.view()\"\n (valueChange)=\"setView($event)\"\n class=\"et-scheduler-view-switch\"\n size=\"sm\"\n variant=\"tabs\"\n >\n <et-label class=\"et-scheduler-view-switch-label\">{{ switchViewLabel() }}</et-label>\n\n <et-segmented-button value=\"month\">{{ monthViewLabel() }}</et-segmented-button>\n <et-segmented-button value=\"week\">{{ weekViewLabel() }}</et-segmented-button>\n <et-segmented-button value=\"day\">{{ dayViewLabel() }}</et-segmented-button>\n <et-segmented-button value=\"agenda\">{{ agendaViewLabel() }}</et-segmented-button>\n </et-segmented-button-group>\n</div>\n\n<div class=\"et-scheduler-body\">\n @switch (headless.view()) {\n @case ('week') {\n <et-scheduler-time-grid-view />\n }\n @case ('day') {\n <et-scheduler-time-grid-view />\n }\n @case ('agenda') {\n <et-scheduler-agenda-view />\n }\n @default {\n <et-scheduler-month-view />\n }\n }\n</div>\n", styles: ["@layer components{.et-scheduler{container-type:inline-size;container-name:et-scheduler;display:flex;flex-direction:column;gap:12px}.et-scheduler-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.et-scheduler-view-switch{flex-basis:100%}@container et-scheduler (min-inline-size: 480px){.et-scheduler-header-spacer{display:block}.et-scheduler-view-switch{flex-basis:auto}}.et-scheduler-nav-buttons{display:flex;gap:2px}.et-scheduler-nav-button--previous .et-icon{rotate:-90deg}.et-scheduler-nav-button--next .et-icon{rotate:90deg}.et-scheduler-header-label{flex:1 1 auto;min-inline-size:0;overflow:hidden;font-size:15px;font-weight:600;color:var(--et-surface-color-solid);white-space:nowrap;text-overflow:ellipsis}.et-scheduler-header-spacer{display:none;flex:1}.et-scheduler-view-switch-label{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.et-scheduler-body{display:flex;flex:1;flex-direction:column}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "[et-button]", inputs: ["variant", "size", "iconAlignment"] }, { kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "component", type: SegmentedButtonGroupComponent, selector: "et-segmented-button-group", inputs: ["size", "variant"] }, { kind: "component", type: SegmentedButtonComponent, selector: "et-segmented-button" }, { kind: "component", type: LabelDirective, selector: "et-label" }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "component", type: SchedulerAgendaViewComponent, selector: "et-scheduler-agenda-view" }, { kind: "component", type: SchedulerMonthViewComponent, selector: "et-scheduler-month-view" }, { kind: "component", type: SchedulerTimeGridViewComponent, selector: "et-scheduler-time-grid-view" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
52815
53854
|
}
|
|
52816
53855
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerComponent, decorators: [{
|
|
52817
53856
|
type: Component,
|
|
@@ -52823,7 +53862,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52823
53862
|
SchedulerAgendaViewComponent,
|
|
52824
53863
|
SchedulerMonthViewComponent,
|
|
52825
53864
|
SchedulerTimeGridViewComponent,
|
|
52826
|
-
], providers: [
|
|
53865
|
+
], providers: [
|
|
53866
|
+
provideIcons(CHEVRON_ICON, PLUS_ICON),
|
|
53867
|
+
{ provide: SCHEDULER_FEATURE_HOST, useExisting: SchedulerComponent },
|
|
53868
|
+
], hostDirectives: [
|
|
52827
53869
|
{
|
|
52828
53870
|
directive: SchedulerDirective,
|
|
52829
53871
|
inputs: ['appointments', 'view', 'focusedDate', 'selectedAppointmentId', 'locale', 'firstDayOfWeek'],
|
|
@@ -52837,16 +53879,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52837
53879
|
{ directive: SchedulerBadgeTimeRangeDirective, inputs: ['etSchedulerBadgeTimeRange'] },
|
|
52838
53880
|
{ directive: SchedulerBadgeLocationDirective, inputs: ['etSchedulerBadgeLocation'] },
|
|
52839
53881
|
{ directive: SchedulerBadgeChainCountDirective, inputs: ['etSchedulerBadgeChainCount'] },
|
|
53882
|
+
{ directive: SchedulerActionAddAppointmentDirective, inputs: ['etSchedulerActionAddAppointment'] },
|
|
52840
53883
|
], host: {
|
|
52841
53884
|
class: 'et-scheduler',
|
|
52842
|
-
}, template: "<div class=\"et-scheduler-header\">\n <button\n (click)=\"headless.goToToday()\"\n class=\"et-scheduler-today-button\"\n et-button\n size=\"sm\"\n variant=\"outline\"\n type=\"button\"\n >\n {{ todayLabel() }}\n </button>\n\n <div class=\"et-scheduler-nav-buttons\">\n <button\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"headless.previous()\"\n class=\"et-scheduler-nav-button et-scheduler-nav-button--previous\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n\n <button\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"headless.next()\"\n class=\"et-scheduler-nav-button et-scheduler-nav-button--next\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n </div>\n\n <span class=\"et-scheduler-header-label\">{{ headerLabel() }}</span>\n\n <div class=\"et-scheduler-header-spacer\"></div>\n\n <et-segmented-button-group
|
|
52843
|
-
}] });
|
|
53885
|
+
}, template: "<div class=\"et-scheduler-header\">\n <button\n (click)=\"headless.goToToday()\"\n class=\"et-scheduler-today-button\"\n et-button\n size=\"sm\"\n variant=\"outline\"\n type=\"button\"\n >\n {{ todayLabel() }}\n </button>\n\n @for (action of toolbarActions(); track $index) {\n <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-button size=\"sm\" type=\"button\">\n @if (action.icon) {\n <i [etIcon]=\"action.icon\" aria-hidden=\"true\"></i>\n }\n {{ action.label() }}\n </button>\n }\n\n <div class=\"et-scheduler-nav-buttons\">\n <button\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"headless.previous()\"\n class=\"et-scheduler-nav-button et-scheduler-nav-button--previous\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n\n <button\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"headless.next()\"\n class=\"et-scheduler-nav-button et-scheduler-nav-button--next\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n </div>\n\n <span class=\"et-scheduler-header-label\">{{ headerLabel() }}</span>\n\n <div class=\"et-scheduler-header-spacer\"></div>\n\n <et-segmented-button-group\n [value]=\"headless.view()\"\n (valueChange)=\"setView($event)\"\n class=\"et-scheduler-view-switch\"\n size=\"sm\"\n variant=\"tabs\"\n >\n <et-label class=\"et-scheduler-view-switch-label\">{{ switchViewLabel() }}</et-label>\n\n <et-segmented-button value=\"month\">{{ monthViewLabel() }}</et-segmented-button>\n <et-segmented-button value=\"week\">{{ weekViewLabel() }}</et-segmented-button>\n <et-segmented-button value=\"day\">{{ dayViewLabel() }}</et-segmented-button>\n <et-segmented-button value=\"agenda\">{{ agendaViewLabel() }}</et-segmented-button>\n </et-segmented-button-group>\n</div>\n\n<div class=\"et-scheduler-body\">\n @switch (headless.view()) {\n @case ('week') {\n <et-scheduler-time-grid-view />\n }\n @case ('day') {\n <et-scheduler-time-grid-view />\n }\n @case ('agenda') {\n <et-scheduler-agenda-view />\n }\n @default {\n <et-scheduler-month-view />\n }\n }\n</div>\n", styles: ["@layer components{.et-scheduler{container-type:inline-size;container-name:et-scheduler;display:flex;flex-direction:column;gap:12px}.et-scheduler-header{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.et-scheduler-view-switch{flex-basis:100%}@container et-scheduler (min-inline-size: 480px){.et-scheduler-header-spacer{display:block}.et-scheduler-view-switch{flex-basis:auto}}.et-scheduler-nav-buttons{display:flex;gap:2px}.et-scheduler-nav-button--previous .et-icon{rotate:-90deg}.et-scheduler-nav-button--next .et-icon{rotate:90deg}.et-scheduler-header-label{flex:1 1 auto;min-inline-size:0;overflow:hidden;font-size:15px;font-weight:600;color:var(--et-surface-color-solid);white-space:nowrap;text-overflow:ellipsis}.et-scheduler-header-spacer{display:none;flex:1}.et-scheduler-view-switch-label{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.et-scheduler-body{display:flex;flex:1;flex-direction:column}}\n"] }]
|
|
53886
|
+
}], ctorParameters: () => [], propDecorators: { appointmentSave: [{ type: i0.Output, args: ["appointmentSave"] }], appointmentsDelete: [{ type: i0.Output, args: ["appointmentsDelete"] }] } });
|
|
52844
53887
|
|
|
52845
53888
|
const SCHEDULER_IMPORTS = [
|
|
52846
53889
|
SchedulerDirective,
|
|
52847
53890
|
SchedulerAgendaDirective,
|
|
52848
53891
|
SchedulerMonthDirective,
|
|
52849
53892
|
SchedulerTimeGridDirective,
|
|
53893
|
+
SchedulerEditSurfaceDirective,
|
|
52850
53894
|
SchedulerComponent,
|
|
52851
53895
|
SchedulerAgendaViewComponent,
|
|
52852
53896
|
SchedulerMonthViewComponent,
|
|
@@ -52856,6 +53900,15 @@ const SCHEDULER_IMPORTS = [
|
|
|
52856
53900
|
SchedulerBadgeTimeRangeDirective,
|
|
52857
53901
|
SchedulerBadgeLocationDirective,
|
|
52858
53902
|
SchedulerBadgeChainCountDirective,
|
|
53903
|
+
SchedulerEditSurfaceComponent,
|
|
53904
|
+
SchedulerEditTitleDirective,
|
|
53905
|
+
SchedulerEditTimeRangeDirective,
|
|
53906
|
+
SchedulerEditLocationDirective,
|
|
53907
|
+
SchedulerEditDescriptionDirective,
|
|
53908
|
+
SchedulerEditColorDirective,
|
|
53909
|
+
SchedulerActionAddSubAppointmentDirective,
|
|
53910
|
+
SchedulerActionDeleteDirective,
|
|
53911
|
+
SchedulerActionAddAppointmentDirective,
|
|
52859
53912
|
];
|
|
52860
53913
|
|
|
52861
53914
|
/** The built-in English labels. */
|
|
@@ -63750,9 +64803,785 @@ const TAB_IMPORTS = [TabGroupComponent, TabComponent, TabLabelDirective];
|
|
|
63750
64803
|
|
|
63751
64804
|
const TOOLTIP_IMPORTS = [TooltipDirective, TooltipComponent];
|
|
63752
64805
|
|
|
64806
|
+
// codes 4600-4699
|
|
64807
|
+
const TREE_ERROR_CODES = {
|
|
64808
|
+
/** An `[etTree]` was rendered without a `[dataSource]`, so it has nothing to show. */
|
|
64809
|
+
MISSING_DATA_SOURCE: 4600,
|
|
64810
|
+
/** A tree part (`etTreeNode`, `etTreeNodeDef`) was used outside an `[etTree]`. */
|
|
64811
|
+
PART_OUTSIDE_TREE: 4601,
|
|
64812
|
+
};
|
|
64813
|
+
|
|
64814
|
+
/** Whether a node can be expanded - false for explicit leaves and `hasChildren: false`. */
|
|
64815
|
+
const canExpand = (node) => node.isLeaf !== true && node.hasChildren !== false;
|
|
64816
|
+
const defaultCompareWith = (a, b) => a === b;
|
|
64817
|
+
/** Value equality between two nodes via the configured comparator. `null` matches only `null`. */
|
|
64818
|
+
const nodesEqual = (options) => {
|
|
64819
|
+
const { a, b, compareWith } = options;
|
|
64820
|
+
if (a === null || b === null) {
|
|
64821
|
+
return a === b;
|
|
64822
|
+
}
|
|
64823
|
+
return compareWith(a.value, b.value);
|
|
64824
|
+
};
|
|
64825
|
+
/** Normalizes a `loadChildren` result (array | Promise | Observable) into an Observable. */
|
|
64826
|
+
const toChildrenObservable = (result) => {
|
|
64827
|
+
if (Array.isArray(result)) {
|
|
64828
|
+
return of(result);
|
|
64829
|
+
}
|
|
64830
|
+
if (isObservable(result)) {
|
|
64831
|
+
return result;
|
|
64832
|
+
}
|
|
64833
|
+
return from(result);
|
|
64834
|
+
};
|
|
64835
|
+
|
|
64836
|
+
const TREE_SELECTION_MODES = {
|
|
64837
|
+
/** Rows never select. Expansion, focus and `activated` still work - a pure navigation tree. */
|
|
64838
|
+
NONE: 'none',
|
|
64839
|
+
/** At most one selected node; `value` is `T | null`. */
|
|
64840
|
+
SINGLE: 'single',
|
|
64841
|
+
/** Any number of selected nodes; `value` is `T[]`, and activating a row toggles it. */
|
|
64842
|
+
MULTIPLE: 'multiple',
|
|
64843
|
+
};
|
|
64844
|
+
const TREE_LEVEL_STATUSES = {
|
|
64845
|
+
/** Not requested yet - a collapsed branch's children start here. */
|
|
64846
|
+
IDLE: 'idle',
|
|
64847
|
+
LOADING: 'loading',
|
|
64848
|
+
LOADED: 'loaded',
|
|
64849
|
+
ERROR: 'error',
|
|
64850
|
+
};
|
|
64851
|
+
|
|
64852
|
+
/**
|
|
64853
|
+
* An ARIA tree over a lazily loaded hierarchy: owns the expansion state, the selection, roving focus
|
|
64854
|
+
* and the keyboard model, and flattens the whole thing into the list of rows a template renders
|
|
64855
|
+
* ({@link visibleRows}). No visual opinion - bring your own template, or use the default `et-tree`.
|
|
64856
|
+
*
|
|
64857
|
+
* Children are loaded per branch through the {@link TreeDataSource}, the first time that branch is
|
|
64858
|
+
* expanded, so a deep or remote hierarchy costs only what the user actually opens. Every node is
|
|
64859
|
+
* identified by its `value`, which therefore has to be unique across the tree.
|
|
64860
|
+
*
|
|
64861
|
+
* Rows are rendered flat rather than nested, which is why each one carries `level`, `posInSet` and
|
|
64862
|
+
* `setSize` - a flat DOM has to state those for assistive tech.
|
|
64863
|
+
*
|
|
64864
|
+
* @example
|
|
64865
|
+
* <div [dataSource]="source" [(value)]="selected" etTree #tree="etTree">
|
|
64866
|
+
* @for (row of tree.visibleRows(); track row.node) {
|
|
64867
|
+
* <div [row]="row" etTreeNode>{{ row.node.label }}</div>
|
|
64868
|
+
* }
|
|
64869
|
+
* </div>
|
|
64870
|
+
*/
|
|
64871
|
+
class TreeDirective {
|
|
64872
|
+
constructor() {
|
|
64873
|
+
this.hostElement = injectHostElement();
|
|
64874
|
+
/** The hierarchical source the tree renders. Required. */
|
|
64875
|
+
this.dataSource = input(null, /* @ts-ignore */
|
|
64876
|
+
...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
64877
|
+
/** Value equality - override when node values are objects. */
|
|
64878
|
+
this.compareWith = input(defaultCompareWith, /* @ts-ignore */
|
|
64879
|
+
...(ngDevMode ? [{ debugName: "compareWith" }] : /* istanbul ignore next */ []));
|
|
64880
|
+
/** Whether rows select, and how many at a time. @default 'single' */
|
|
64881
|
+
this.selectionMode = input(TREE_SELECTION_MODES.SINGLE, /* @ts-ignore */
|
|
64882
|
+
...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
|
|
64883
|
+
/** The selected value: `T | null` in single mode, `T[]` in multiple. Two-way bindable. */
|
|
64884
|
+
this.value = model(null, /* @ts-ignore */
|
|
64885
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
64886
|
+
/**
|
|
64887
|
+
* The values of the expanded branches. Two-way bindable, and the tree's only expansion state - nothing
|
|
64888
|
+
* is inferred from the data, so an expansion set can be persisted and restored as-is.
|
|
64889
|
+
*
|
|
64890
|
+
* Values that match no node are ignored rather than pruned, so a set restored before its branch has
|
|
64891
|
+
* loaded still opens once the node arrives.
|
|
64892
|
+
*/
|
|
64893
|
+
this.expandedValues = model([], /* @ts-ignore */
|
|
64894
|
+
...(ngDevMode ? [{ debugName: "expandedValues" }] : /* istanbul ignore next */ []));
|
|
64895
|
+
/** Refuse to expand, select or move focus. Rows are marked `aria-disabled` and keep their DOM order. */
|
|
64896
|
+
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
64897
|
+
/**
|
|
64898
|
+
* Turns a `loadChildren` failure into the message shown on the branch that failed. The default shows an
|
|
64899
|
+
* `Error`'s `message` verbatim and a generic fallback for anything else.
|
|
64900
|
+
*/
|
|
64901
|
+
this.toErrorMessage = input((error) => (error instanceof Error && error.message) || 'Something went wrong', /* @ts-ignore */
|
|
64902
|
+
...(ngDevMode ? [{ debugName: "toErrorMessage" }] : /* istanbul ignore next */ []));
|
|
64903
|
+
/** A row was activated - clicked, or Enter'd. Fires for branches and leaves alike. */
|
|
64904
|
+
this.nodeActivate = output();
|
|
64905
|
+
this.levels = signal([], /* @ts-ignore */
|
|
64906
|
+
...(ngDevMode ? [{ debugName: "levels" }] : /* istanbul ignore next */ []));
|
|
64907
|
+
this.registeredNodes = signal([], /* @ts-ignore */
|
|
64908
|
+
...(ngDevMode ? [{ debugName: "registeredNodes" }] : /* istanbul ignore next */ []));
|
|
64909
|
+
/** @internal The `etTreeNodeDef` row template, when one is projected. */
|
|
64910
|
+
this.nodeTemplate = signal(null, /* @ts-ignore */
|
|
64911
|
+
...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
|
|
64912
|
+
/**
|
|
64913
|
+
* The node holding roving focus, once the user has moved it. A row writes it on `focusin`, so the tab
|
|
64914
|
+
* stop stays where the user left it and Shift+Tab re-enters there.
|
|
64915
|
+
*/
|
|
64916
|
+
this.focusedNode = signal(null, /* @ts-ignore */
|
|
64917
|
+
...(ngDevMode ? [{ debugName: "focusedNode" }] : /* istanbul ignore next */ []));
|
|
64918
|
+
/**
|
|
64919
|
+
* The flattened tree: every row that is currently visible, in DOM order - the root's children plus
|
|
64920
|
+
* the loaded children of every expanded branch below them.
|
|
64921
|
+
*/
|
|
64922
|
+
this.visibleRows = computed(() => {
|
|
64923
|
+
const compareWith = this.compareWith();
|
|
64924
|
+
const levels = this.levels();
|
|
64925
|
+
const expanded = this.expandedValues();
|
|
64926
|
+
const rows = [];
|
|
64927
|
+
const levelOf = (parent) => levels.find((level) => nodesEqual({ a: level.parent, b: parent, compareWith })) ?? null;
|
|
64928
|
+
// `seen` guards against a malformed source whose branch contains its own value, which would
|
|
64929
|
+
// otherwise recurse until the stack gives out
|
|
64930
|
+
const walk = (options) => {
|
|
64931
|
+
const { parent, level, path, seen } = options;
|
|
64932
|
+
const entry = levelOf(parent);
|
|
64933
|
+
if (!entry)
|
|
64934
|
+
return;
|
|
64935
|
+
entry.nodes.forEach((node, index) => {
|
|
64936
|
+
const isExpandable = canExpand(node);
|
|
64937
|
+
const children = isExpandable ? levelOf(node) : null;
|
|
64938
|
+
const isExpanded = isExpandable && expanded.some((value) => compareWith(value, node.value));
|
|
64939
|
+
const nodePath = [...path, node];
|
|
64940
|
+
rows.push({
|
|
64941
|
+
node,
|
|
64942
|
+
level,
|
|
64943
|
+
path: nodePath,
|
|
64944
|
+
isExpandable,
|
|
64945
|
+
isExpanded,
|
|
64946
|
+
isDisabled: node.disabled === true,
|
|
64947
|
+
childrenStatus: children?.status ?? TREE_LEVEL_STATUSES.IDLE,
|
|
64948
|
+
childrenError: children?.error ?? null,
|
|
64949
|
+
posInSet: index + 1,
|
|
64950
|
+
setSize: entry.nodes.length,
|
|
64951
|
+
});
|
|
64952
|
+
if (isExpanded && !seen.some((value) => compareWith(value, node.value))) {
|
|
64953
|
+
walk({ parent: node, level: level + 1, path: nodePath, seen: [...seen, node.value] });
|
|
64954
|
+
}
|
|
64955
|
+
});
|
|
64956
|
+
};
|
|
64957
|
+
walk({ parent: null, level: 1, path: [], seen: [] });
|
|
64958
|
+
return rows;
|
|
64959
|
+
}, /* @ts-ignore */
|
|
64960
|
+
...(ngDevMode ? [{ debugName: "visibleRows" }] : /* istanbul ignore next */ []));
|
|
64961
|
+
/** Load state of the root level - what a tree shows a loading or empty state for. */
|
|
64962
|
+
this.rootStatus = computed(() => this.levelOf(null)?.status ?? TREE_LEVEL_STATUSES.IDLE, /* @ts-ignore */
|
|
64963
|
+
...(ngDevMode ? [{ debugName: "rootStatus" }] : /* istanbul ignore next */ []));
|
|
64964
|
+
/** The message from a failed root load, or `null`. */
|
|
64965
|
+
this.rootError = computed(() => this.levelOf(null)?.error ?? null, /* @ts-ignore */
|
|
64966
|
+
...(ngDevMode ? [{ debugName: "rootError" }] : /* istanbul ignore next */ []));
|
|
64967
|
+
/** The selected values, normalized to an array (empty for no selection). */
|
|
64968
|
+
this.values = computed(() => {
|
|
64969
|
+
const value = this.value();
|
|
64970
|
+
if (Array.isArray(value)) {
|
|
64971
|
+
return value;
|
|
64972
|
+
}
|
|
64973
|
+
return value === null || value === undefined ? [] : [value];
|
|
64974
|
+
}, /* @ts-ignore */
|
|
64975
|
+
...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
64976
|
+
/**
|
|
64977
|
+
* The row that owns the tree's single tab stop: the focused node while it is still visible, else the
|
|
64978
|
+
* first row. A tree is one tab stop with the arrow keys moving inside it, so exactly one row is
|
|
64979
|
+
* tabbable at any time.
|
|
64980
|
+
*/
|
|
64981
|
+
this.activeNode = computed(() => {
|
|
64982
|
+
const rows = this.visibleRows();
|
|
64983
|
+
const focused = this.focusedNode();
|
|
64984
|
+
const compareWith = this.compareWith();
|
|
64985
|
+
if (focused && rows.some((row) => compareWith(row.node.value, focused.value))) {
|
|
64986
|
+
return focused;
|
|
64987
|
+
}
|
|
64988
|
+
return rows[0]?.node ?? null;
|
|
64989
|
+
}, /* @ts-ignore */
|
|
64990
|
+
...(ngDevMode ? [{ debugName: "activeNode" }] : /* istanbul ignore next */ []));
|
|
64991
|
+
// type-to-focus by label across the visible rows - a deep tree cannot be navigated by name otherwise
|
|
64992
|
+
this.typeahead = createTypeahead();
|
|
64993
|
+
// Every branch that needs loading right now: the root, plus each expanded branch whose children
|
|
64994
|
+
// have not been requested yet. Expansion is therefore the only trigger a load ever needs - an
|
|
64995
|
+
// `expandedValues` set that was restored from storage loads its branches exactly like a click does.
|
|
64996
|
+
const idleParents = computed(() => {
|
|
64997
|
+
if (!this.dataSource())
|
|
64998
|
+
return [];
|
|
64999
|
+
const parents = [];
|
|
65000
|
+
if (this.rootStatus() === TREE_LEVEL_STATUSES.IDLE) {
|
|
65001
|
+
parents.push(null);
|
|
65002
|
+
}
|
|
65003
|
+
for (const row of this.visibleRows()) {
|
|
65004
|
+
if (row.isExpanded && row.childrenStatus === TREE_LEVEL_STATUSES.IDLE) {
|
|
65005
|
+
parents.push(row.node);
|
|
65006
|
+
}
|
|
65007
|
+
}
|
|
65008
|
+
return parents;
|
|
65009
|
+
}, /* @ts-ignore */
|
|
65010
|
+
...(ngDevMode ? [{ debugName: "idleParents" }] : /* istanbul ignore next */ []));
|
|
65011
|
+
// created here rather than inside the switchMap below, which is not an injection context
|
|
65012
|
+
const idleParents$ = toObservable(idleParents);
|
|
65013
|
+
toObservable(this.dataSource)
|
|
65014
|
+
.pipe(switchMap((source) => {
|
|
65015
|
+
// a swapped source describes a different tree - drop what was learned from the old one, and
|
|
65016
|
+
// let switchMap cancel its in-flight loads so a late response cannot write into the new tree
|
|
65017
|
+
untracked(() => {
|
|
65018
|
+
this.levels.set([]);
|
|
65019
|
+
this.focusedNode.set(null);
|
|
65020
|
+
});
|
|
65021
|
+
if (!source)
|
|
65022
|
+
return EMPTY;
|
|
65023
|
+
// mergeMap, not switchMap: sibling branches expanded in quick succession all load
|
|
65024
|
+
return idleParents$.pipe(mergeMap((parents) => merge(...parents.map((parent) => this.load(source, parent)))));
|
|
65025
|
+
}), takeUntilDestroyed())
|
|
65026
|
+
.subscribe();
|
|
65027
|
+
inject(DestroyRef).onDestroy(() => this.typeahead.destroy());
|
|
65028
|
+
if (ngDevMode) {
|
|
65029
|
+
afterNextRender(() => {
|
|
65030
|
+
if (!this.dataSource()) {
|
|
65031
|
+
throw new RuntimeError(TREE_ERROR_CODES.MISSING_DATA_SOURCE, '[TreeDirective] A [dataSource] is required - without one the tree has nothing to load. ' +
|
|
65032
|
+
'Bind an object with a loadChildren(parent) method.', { element: this.hostElement });
|
|
65033
|
+
}
|
|
65034
|
+
});
|
|
65035
|
+
}
|
|
65036
|
+
}
|
|
65037
|
+
/** Whether a node is expanded. */
|
|
65038
|
+
isExpanded(node) {
|
|
65039
|
+
const compareWith = this.compareWith();
|
|
65040
|
+
return this.expandedValues().some((value) => compareWith(value, node.value));
|
|
65041
|
+
}
|
|
65042
|
+
/** Whether a node is selected. */
|
|
65043
|
+
isSelected(node) {
|
|
65044
|
+
const compareWith = this.compareWith();
|
|
65045
|
+
return this.values().some((value) => compareWith(value, node.value));
|
|
65046
|
+
}
|
|
65047
|
+
/** Expand a branch, loading its children if this is the first time. No-op on leaves and disabled nodes. */
|
|
65048
|
+
expand(node) {
|
|
65049
|
+
if (this.disabled() || node.disabled || !canExpand(node) || this.isExpanded(node))
|
|
65050
|
+
return;
|
|
65051
|
+
this.expandedValues.update((values) => [...values, node.value]);
|
|
65052
|
+
}
|
|
65053
|
+
/** Collapse a branch. Its children stay loaded, so re-expanding it is instant. */
|
|
65054
|
+
collapse(node) {
|
|
65055
|
+
if (this.disabled())
|
|
65056
|
+
return;
|
|
65057
|
+
const compareWith = this.compareWith();
|
|
65058
|
+
this.expandedValues.update((values) => values.filter((value) => !compareWith(value, node.value)));
|
|
65059
|
+
}
|
|
65060
|
+
toggleExpansion(node) {
|
|
65061
|
+
if (this.isExpanded(node)) {
|
|
65062
|
+
this.collapse(node);
|
|
65063
|
+
}
|
|
65064
|
+
else {
|
|
65065
|
+
this.expand(node);
|
|
65066
|
+
}
|
|
65067
|
+
}
|
|
65068
|
+
/**
|
|
65069
|
+
* Expand every branch loaded so far. On a lazy source that is one level deeper than what is currently
|
|
65070
|
+
* visible: call it again once the newly loaded branches arrive to keep going.
|
|
65071
|
+
*/
|
|
65072
|
+
expandAll() {
|
|
65073
|
+
if (this.disabled())
|
|
65074
|
+
return;
|
|
65075
|
+
const compareWith = this.compareWith();
|
|
65076
|
+
const expandable = this.levels()
|
|
65077
|
+
.flatMap((level) => level.nodes)
|
|
65078
|
+
.filter((node) => canExpand(node) && !node.disabled);
|
|
65079
|
+
this.expandedValues.update((values) => [
|
|
65080
|
+
...values,
|
|
65081
|
+
...expandable.filter((node) => !values.some((value) => compareWith(value, node.value))).map((node) => node.value),
|
|
65082
|
+
]);
|
|
65083
|
+
}
|
|
65084
|
+
collapseAll() {
|
|
65085
|
+
if (this.disabled())
|
|
65086
|
+
return;
|
|
65087
|
+
this.expandedValues.set([]);
|
|
65088
|
+
}
|
|
65089
|
+
/** Reload a branch's children - what a failed load is retried with. Pass `null` for the root. */
|
|
65090
|
+
retry(parent) {
|
|
65091
|
+
this.setLevel(parent, { status: TREE_LEVEL_STATUSES.IDLE, nodes: [], error: null });
|
|
65092
|
+
}
|
|
65093
|
+
/** Select a node. No-op while `selectionMode` is `'none'`. */
|
|
65094
|
+
select(node) {
|
|
65095
|
+
if (this.disabled() || node.disabled || this.selectionMode() === TREE_SELECTION_MODES.NONE)
|
|
65096
|
+
return;
|
|
65097
|
+
if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {
|
|
65098
|
+
if (this.isSelected(node))
|
|
65099
|
+
return;
|
|
65100
|
+
this.value.set([...this.values(), node.value]);
|
|
65101
|
+
return;
|
|
65102
|
+
}
|
|
65103
|
+
this.value.set(node.value);
|
|
65104
|
+
}
|
|
65105
|
+
deselect(node) {
|
|
65106
|
+
if (this.disabled() || !this.isSelected(node))
|
|
65107
|
+
return;
|
|
65108
|
+
const compareWith = this.compareWith();
|
|
65109
|
+
if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {
|
|
65110
|
+
this.value.set(this.values().filter((value) => !compareWith(value, node.value)));
|
|
65111
|
+
return;
|
|
65112
|
+
}
|
|
65113
|
+
this.value.set(null);
|
|
65114
|
+
}
|
|
65115
|
+
/** Multiple mode: add the node to the selection, or remove it when already selected. */
|
|
65116
|
+
toggleSelection(node) {
|
|
65117
|
+
if (this.isSelected(node)) {
|
|
65118
|
+
this.deselect(node);
|
|
65119
|
+
}
|
|
65120
|
+
else {
|
|
65121
|
+
this.select(node);
|
|
65122
|
+
}
|
|
65123
|
+
}
|
|
65124
|
+
clearSelection() {
|
|
65125
|
+
this.value.set(this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE ? [] : null);
|
|
65126
|
+
}
|
|
65127
|
+
/**
|
|
65128
|
+
* What a click or Enter on a row does: move roving focus there, retry a branch whose children failed to
|
|
65129
|
+
* load, otherwise expand/collapse it, and apply the selection for the current mode. Always emits
|
|
65130
|
+
* {@link nodeActivate}, so a leaf can be "opened" without being selected.
|
|
65131
|
+
*/
|
|
65132
|
+
activate(node) {
|
|
65133
|
+
if (this.disabled() || node.disabled)
|
|
65134
|
+
return;
|
|
65135
|
+
this.focusNode(node);
|
|
65136
|
+
const row = this.rowOf(node);
|
|
65137
|
+
if (row?.childrenError) {
|
|
65138
|
+
this.retry(node);
|
|
65139
|
+
}
|
|
65140
|
+
else if (canExpand(node)) {
|
|
65141
|
+
this.toggleExpansion(node);
|
|
65142
|
+
}
|
|
65143
|
+
if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {
|
|
65144
|
+
this.toggleSelection(node);
|
|
65145
|
+
}
|
|
65146
|
+
else {
|
|
65147
|
+
this.select(node);
|
|
65148
|
+
}
|
|
65149
|
+
this.nodeActivate.emit(node);
|
|
65150
|
+
}
|
|
65151
|
+
/** Move roving focus - and DOM focus, when the row is rendered - to a node. */
|
|
65152
|
+
focusNode(node) {
|
|
65153
|
+
this.focusedNode.set(node);
|
|
65154
|
+
const compareWith = this.compareWith();
|
|
65155
|
+
const element = this.registeredNodes().find((registered) => compareWith(registered.row().node.value, node.value))
|
|
65156
|
+
?.elementRef.nativeElement;
|
|
65157
|
+
if (!element)
|
|
65158
|
+
return;
|
|
65159
|
+
element.focus({ preventScroll: true });
|
|
65160
|
+
element.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });
|
|
65161
|
+
}
|
|
65162
|
+
/** Move focus to the tree's first row - where a fresh Tab lands. */
|
|
65163
|
+
focusFirst() {
|
|
65164
|
+
const first = this.visibleRows()[0]?.node;
|
|
65165
|
+
if (first) {
|
|
65166
|
+
this.focusNode(first);
|
|
65167
|
+
}
|
|
65168
|
+
}
|
|
65169
|
+
/** @internal Called from a node's constructor; the registration is undone when the row is destroyed. */
|
|
65170
|
+
registerNode(node) {
|
|
65171
|
+
this.registeredNodes.update((nodes) => [...nodes, node]);
|
|
65172
|
+
inject(DestroyRef).onDestroy(() => this.registeredNodes.update((nodes) => nodes.filter((candidate) => candidate !== node)));
|
|
65173
|
+
}
|
|
65174
|
+
/** @internal Routes a row's keydown through the tree navigation model. */
|
|
65175
|
+
handleNodeKeydown(event, node) {
|
|
65176
|
+
if (event.ctrlKey || event.metaKey || event.altKey || this.disabled())
|
|
65177
|
+
return;
|
|
65178
|
+
const rows = this.visibleRows();
|
|
65179
|
+
const compareWith = this.compareWith();
|
|
65180
|
+
const index = rows.findIndex((row) => compareWith(row.node.value, node.value));
|
|
65181
|
+
const row = rows[index];
|
|
65182
|
+
if (!row)
|
|
65183
|
+
return;
|
|
65184
|
+
// ArrowRight/ArrowLeft expand and collapse, which means they follow the writing direction
|
|
65185
|
+
const rtl = getComputedStyle(this.hostElement).direction === 'rtl';
|
|
65186
|
+
const expandKey = rtl ? 'ArrowLeft' : 'ArrowRight';
|
|
65187
|
+
const collapseKey = rtl ? 'ArrowRight' : 'ArrowLeft';
|
|
65188
|
+
switch (event.key) {
|
|
65189
|
+
case 'ArrowDown':
|
|
65190
|
+
event.preventDefault();
|
|
65191
|
+
this.focusRow(rows, index + 1);
|
|
65192
|
+
return;
|
|
65193
|
+
case 'ArrowUp':
|
|
65194
|
+
event.preventDefault();
|
|
65195
|
+
this.focusRow(rows, index - 1);
|
|
65196
|
+
return;
|
|
65197
|
+
case 'Home':
|
|
65198
|
+
event.preventDefault();
|
|
65199
|
+
this.focusRow(rows, 0);
|
|
65200
|
+
return;
|
|
65201
|
+
case 'End':
|
|
65202
|
+
event.preventDefault();
|
|
65203
|
+
this.focusRow(rows, rows.length - 1);
|
|
65204
|
+
return;
|
|
65205
|
+
case expandKey:
|
|
65206
|
+
event.preventDefault();
|
|
65207
|
+
if (row.isExpandable && !row.isExpanded) {
|
|
65208
|
+
this.expand(node);
|
|
65209
|
+
}
|
|
65210
|
+
else if (row.isExpanded && rows[index + 1]?.level === row.level + 1) {
|
|
65211
|
+
this.focusRow(rows, index + 1);
|
|
65212
|
+
}
|
|
65213
|
+
return;
|
|
65214
|
+
case collapseKey:
|
|
65215
|
+
event.preventDefault();
|
|
65216
|
+
if (row.isExpanded) {
|
|
65217
|
+
this.collapse(node);
|
|
65218
|
+
return;
|
|
65219
|
+
}
|
|
65220
|
+
// to the parent - the closest row above that sits one level up
|
|
65221
|
+
for (let candidate = index - 1; candidate >= 0; candidate--) {
|
|
65222
|
+
if (rows[candidate]?.level === row.level - 1) {
|
|
65223
|
+
this.focusRow(rows, candidate);
|
|
65224
|
+
return;
|
|
65225
|
+
}
|
|
65226
|
+
}
|
|
65227
|
+
return;
|
|
65228
|
+
case 'Enter':
|
|
65229
|
+
event.preventDefault();
|
|
65230
|
+
this.activate(node);
|
|
65231
|
+
return;
|
|
65232
|
+
case ' ':
|
|
65233
|
+
if (this.selectionMode() === TREE_SELECTION_MODES.NONE)
|
|
65234
|
+
return;
|
|
65235
|
+
event.preventDefault();
|
|
65236
|
+
if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {
|
|
65237
|
+
this.toggleSelection(node);
|
|
65238
|
+
}
|
|
65239
|
+
else {
|
|
65240
|
+
this.select(node);
|
|
65241
|
+
}
|
|
65242
|
+
return;
|
|
65243
|
+
case '*':
|
|
65244
|
+
event.preventDefault();
|
|
65245
|
+
this.expandSiblings(rows, row);
|
|
65246
|
+
return;
|
|
65247
|
+
}
|
|
65248
|
+
if (event.key.length !== 1)
|
|
65249
|
+
return;
|
|
65250
|
+
const query = this.typeahead.append(event.key);
|
|
65251
|
+
// start after the focused row and wrap, so repeating a letter walks through the matches
|
|
65252
|
+
const match = rows
|
|
65253
|
+
.slice(index + 1)
|
|
65254
|
+
.concat(rows.slice(0, index + 1))
|
|
65255
|
+
.find((candidate) => !candidate.isDisabled && candidate.node.label.toLowerCase().startsWith(query));
|
|
65256
|
+
if (match) {
|
|
65257
|
+
event.preventDefault();
|
|
65258
|
+
this.focusNode(match.node);
|
|
65259
|
+
}
|
|
65260
|
+
}
|
|
65261
|
+
levelOf(parent) {
|
|
65262
|
+
const compareWith = this.compareWith();
|
|
65263
|
+
return this.levels().find((level) => nodesEqual({ a: level.parent, b: parent, compareWith })) ?? null;
|
|
65264
|
+
}
|
|
65265
|
+
rowOf(node) {
|
|
65266
|
+
const compareWith = this.compareWith();
|
|
65267
|
+
return this.visibleRows().find((row) => compareWith(row.node.value, node.value)) ?? null;
|
|
65268
|
+
}
|
|
65269
|
+
focusRow(rows, index) {
|
|
65270
|
+
const row = rows[Math.max(0, Math.min(rows.length - 1, index))];
|
|
65271
|
+
if (row) {
|
|
65272
|
+
this.focusNode(row.node);
|
|
65273
|
+
}
|
|
65274
|
+
}
|
|
65275
|
+
/** `*` expands every branch at the focused row's level that shares its parent. */
|
|
65276
|
+
expandSiblings(rows, row) {
|
|
65277
|
+
const compareWith = this.compareWith();
|
|
65278
|
+
const parent = row.path[row.path.length - 2] ?? null;
|
|
65279
|
+
for (const candidate of rows) {
|
|
65280
|
+
if (candidate.level === row.level &&
|
|
65281
|
+
nodesEqual({ a: candidate.path[candidate.path.length - 2] ?? null, b: parent, compareWith })) {
|
|
65282
|
+
this.expand(candidate.node);
|
|
65283
|
+
}
|
|
65284
|
+
}
|
|
65285
|
+
}
|
|
65286
|
+
load(source, parent) {
|
|
65287
|
+
// The request was queued from a state that has since changed - the source was swapped, or the
|
|
65288
|
+
// branch collapsed again while `toObservable` was still holding this list. Reading the current
|
|
65289
|
+
// set is what keeps a re-emission from loading the same branch twice.
|
|
65290
|
+
if (!this.isIdle(parent))
|
|
65291
|
+
return EMPTY;
|
|
65292
|
+
this.setLevel(parent, { status: TREE_LEVEL_STATUSES.LOADING, nodes: [], error: null });
|
|
65293
|
+
// defer, so a `loadChildren` that throws on the spot fails the branch like a rejected load
|
|
65294
|
+
// rather than tearing down the whole pipeline
|
|
65295
|
+
return defer(() => toChildrenObservable(source.loadChildren(parent))).pipe(take(1), tap({
|
|
65296
|
+
next: (nodes) => this.setLevel(parent, { status: TREE_LEVEL_STATUSES.LOADED, nodes, error: null }),
|
|
65297
|
+
error: (error) => this.setLevel(parent, {
|
|
65298
|
+
status: TREE_LEVEL_STATUSES.ERROR,
|
|
65299
|
+
nodes: [],
|
|
65300
|
+
error: this.toErrorMessage()(error),
|
|
65301
|
+
}),
|
|
65302
|
+
}), catchError(() => EMPTY));
|
|
65303
|
+
}
|
|
65304
|
+
isIdle(parent) {
|
|
65305
|
+
const level = this.levelOf(parent);
|
|
65306
|
+
if (level !== null && level.status !== TREE_LEVEL_STATUSES.IDLE) {
|
|
65307
|
+
return false;
|
|
65308
|
+
}
|
|
65309
|
+
return parent === null || this.isExpanded(parent);
|
|
65310
|
+
}
|
|
65311
|
+
setLevel(parent, state) {
|
|
65312
|
+
const compareWith = this.compareWith();
|
|
65313
|
+
this.levels.update((levels) => [
|
|
65314
|
+
...levels.filter((level) => !nodesEqual({ a: level.parent, b: parent, compareWith })),
|
|
65315
|
+
{ parent, ...state },
|
|
65316
|
+
]);
|
|
65317
|
+
}
|
|
65318
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
65319
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: TreeDirective, isStandalone: true, selector: "[etTree]", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, expandedValues: { classPropertyName: "expandedValues", publicName: "expandedValues", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, toErrorMessage: { classPropertyName: "toErrorMessage", publicName: "toErrorMessage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", expandedValues: "expandedValuesChange", nodeActivate: "nodeActivate" }, host: { attributes: { "role": "tree" }, properties: { "attr.aria-multiselectable": "selectionMode() === \"multiple\" ? \"true\" : null", "attr.aria-busy": "rootStatus() === \"loading\" ? \"true\" : null", "attr.data-disabled": "disabled() || null" } }, exportAs: ["etTree"], ngImport: i0 }); }
|
|
65320
|
+
}
|
|
65321
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeDirective, decorators: [{
|
|
65322
|
+
type: Directive,
|
|
65323
|
+
args: [{
|
|
65324
|
+
selector: '[etTree]',
|
|
65325
|
+
exportAs: 'etTree',
|
|
65326
|
+
host: {
|
|
65327
|
+
role: 'tree',
|
|
65328
|
+
'[attr.aria-multiselectable]': 'selectionMode() === "multiple" ? "true" : null',
|
|
65329
|
+
'[attr.aria-busy]': 'rootStatus() === "loading" ? "true" : null',
|
|
65330
|
+
'[attr.data-disabled]': 'disabled() || null',
|
|
65331
|
+
},
|
|
65332
|
+
}]
|
|
65333
|
+
}], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], compareWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareWith", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], expandedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedValues", required: false }] }, { type: i0.Output, args: ["expandedValuesChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], toErrorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "toErrorMessage", required: false }] }], nodeActivate: [{ type: i0.Output, args: ["nodeActivate"] }] } });
|
|
65334
|
+
|
|
65335
|
+
/**
|
|
65336
|
+
* A single row of a tree. Bind the {@link TreeRow} it represents; the directive wires the ARIA tree
|
|
65337
|
+
* semantics (including the position values a flat DOM has to state), the roving tab stop and the
|
|
65338
|
+
* interaction, and mirrors the row's state as `data-*` attributes for styling.
|
|
65339
|
+
*
|
|
65340
|
+
* @example
|
|
65341
|
+
* @for (row of tree.visibleRows(); track row.node) {
|
|
65342
|
+
* <div [row]="row" etTreeNode>{{ row.node.label }}</div>
|
|
65343
|
+
* }
|
|
65344
|
+
*/
|
|
65345
|
+
class TreeNodeDirective {
|
|
65346
|
+
constructor() {
|
|
65347
|
+
this.tree = inject(TreeDirective, { optional: true });
|
|
65348
|
+
/** @internal The element the tree moves DOM focus to when roving focus lands on this row. */
|
|
65349
|
+
this.elementRef = inject(ElementRef);
|
|
65350
|
+
/** The row this element renders - one entry of the tree's `visibleRows()`. */
|
|
65351
|
+
this.row = input.required(/* @ts-ignore */
|
|
65352
|
+
...(ngDevMode ? [{ debugName: "row" }] : /* istanbul ignore next */ []));
|
|
65353
|
+
this.selectionMode = computed(() => this.tree?.selectionMode() ?? 'none', /* @ts-ignore */
|
|
65354
|
+
...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
|
|
65355
|
+
this.selected = computed(() => this.tree?.isSelected(this.row().node) ?? false, /* @ts-ignore */
|
|
65356
|
+
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
65357
|
+
this.disabled = computed(() => this.row().isDisabled || (this.tree?.disabled() ?? false), /* @ts-ignore */
|
|
65358
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
65359
|
+
this.active = computed(() => {
|
|
65360
|
+
const active = this.tree?.activeNode();
|
|
65361
|
+
if (!active || !this.tree)
|
|
65362
|
+
return false;
|
|
65363
|
+
return this.tree.compareWith()(active.value, this.row().node.value);
|
|
65364
|
+
}, /* @ts-ignore */
|
|
65365
|
+
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
65366
|
+
this.tree?.registerNode(this);
|
|
65367
|
+
if (ngDevMode) {
|
|
65368
|
+
afterNextRender(() => {
|
|
65369
|
+
if (!this.tree) {
|
|
65370
|
+
throw new RuntimeError(TREE_ERROR_CODES.PART_OUTSIDE_TREE, '[TreeNodeDirective] etTreeNode must be placed inside an [etTree] element (e.g. <et-tree>).', { element: this.elementRef.nativeElement });
|
|
65371
|
+
}
|
|
65372
|
+
});
|
|
65373
|
+
}
|
|
65374
|
+
}
|
|
65375
|
+
handleClick() {
|
|
65376
|
+
this.tree?.activate(this.row().node);
|
|
65377
|
+
}
|
|
65378
|
+
handleKeydown(event) {
|
|
65379
|
+
this.tree?.handleNodeKeydown(event, this.row().node);
|
|
65380
|
+
}
|
|
65381
|
+
handleFocusIn() {
|
|
65382
|
+
this.tree?.focusedNode.set(this.row().node);
|
|
65383
|
+
}
|
|
65384
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeNodeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
65385
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: TreeNodeDirective, isStandalone: true, selector: "[etTreeNode]", inputs: { row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "treeitem" }, listeners: { "click": "handleClick()", "keydown": "handleKeydown($event)", "focusin": "handleFocusIn()" }, properties: { "attr.aria-level": "row().level", "attr.aria-posinset": "row().posInSet", "attr.aria-setsize": "row().setSize", "attr.aria-expanded": "row().isExpandable ? row().isExpanded : null", "attr.aria-selected": "selectionMode() === \"none\" ? null : selected()", "attr.aria-disabled": "disabled() || null", "attr.aria-busy": "row().childrenStatus === \"loading\" ? \"true\" : null", "attr.tabindex": "active() ? 0 : -1", "attr.data-selected": "selected() || null", "attr.data-expanded": "row().isExpanded || null", "attr.data-branch": "row().isExpandable || null", "attr.data-disabled": "disabled() || null", "attr.data-error": "row().childrenError !== null || null" } }, exportAs: ["etTreeNode"], ngImport: i0 }); }
|
|
65386
|
+
}
|
|
65387
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeNodeDirective, decorators: [{
|
|
65388
|
+
type: Directive,
|
|
65389
|
+
args: [{
|
|
65390
|
+
selector: '[etTreeNode]',
|
|
65391
|
+
exportAs: 'etTreeNode',
|
|
65392
|
+
host: {
|
|
65393
|
+
role: 'treeitem',
|
|
65394
|
+
'[attr.aria-level]': 'row().level',
|
|
65395
|
+
'[attr.aria-posinset]': 'row().posInSet',
|
|
65396
|
+
'[attr.aria-setsize]': 'row().setSize',
|
|
65397
|
+
'[attr.aria-expanded]': 'row().isExpandable ? row().isExpanded : null',
|
|
65398
|
+
'[attr.aria-selected]': 'selectionMode() === "none" ? null : selected()',
|
|
65399
|
+
'[attr.aria-disabled]': 'disabled() || null',
|
|
65400
|
+
'[attr.aria-busy]': 'row().childrenStatus === "loading" ? "true" : null',
|
|
65401
|
+
'[attr.tabindex]': 'active() ? 0 : -1',
|
|
65402
|
+
'[attr.data-selected]': 'selected() || null',
|
|
65403
|
+
'[attr.data-expanded]': 'row().isExpanded || null',
|
|
65404
|
+
'[attr.data-branch]': 'row().isExpandable || null',
|
|
65405
|
+
'[attr.data-disabled]': 'disabled() || null',
|
|
65406
|
+
'[attr.data-error]': 'row().childrenError !== null || null',
|
|
65407
|
+
'(click)': 'handleClick()',
|
|
65408
|
+
'(keydown)': 'handleKeydown($event)',
|
|
65409
|
+
'(focusin)': 'handleFocusIn()',
|
|
65410
|
+
},
|
|
65411
|
+
}]
|
|
65412
|
+
}], ctorParameters: () => [], propDecorators: { row: [{ type: i0.Input, args: [{ isSignal: true, alias: "row", required: true }] }] } });
|
|
65413
|
+
|
|
65414
|
+
/**
|
|
65415
|
+
* Replaces the default tree's plain-text row label with a template, for rows that need markup - an
|
|
65416
|
+
* icon per node type, a badge, a secondary line. The node is the template's implicit value, and its
|
|
65417
|
+
* full {@link TreeRow} is available as `let-row` for the level, expansion and load state.
|
|
65418
|
+
*
|
|
65419
|
+
* @example
|
|
65420
|
+
* <et-tree [dataSource]="files">
|
|
65421
|
+
* <ng-template etTreeNodeDef let-node let-row="row">
|
|
65422
|
+
* <i [etIcon]="row.isExpandable ? 'folder' : 'file'"></i>
|
|
65423
|
+
* {{ node.label }}
|
|
65424
|
+
* </ng-template>
|
|
65425
|
+
* </et-tree>
|
|
65426
|
+
*/
|
|
65427
|
+
class TreeNodeDefDirective {
|
|
65428
|
+
constructor() {
|
|
65429
|
+
this.hostElement = injectHostElement();
|
|
65430
|
+
this.tree = inject(TreeDirective, { optional: true });
|
|
65431
|
+
this.templateRef = inject(TemplateRef);
|
|
65432
|
+
this.tree?.nodeTemplate.set(this);
|
|
65433
|
+
inject(DestroyRef).onDestroy(() => {
|
|
65434
|
+
if (this.tree?.nodeTemplate() === this) {
|
|
65435
|
+
this.tree.nodeTemplate.set(null);
|
|
65436
|
+
}
|
|
65437
|
+
});
|
|
65438
|
+
if (ngDevMode) {
|
|
65439
|
+
afterNextRender(() => {
|
|
65440
|
+
if (!this.tree) {
|
|
65441
|
+
throw new RuntimeError(TREE_ERROR_CODES.PART_OUTSIDE_TREE, '[TreeNodeDefDirective] etTreeNodeDef must be placed inside an [etTree] element (e.g. <et-tree>).', { element: this.hostElement });
|
|
65442
|
+
}
|
|
65443
|
+
});
|
|
65444
|
+
}
|
|
65445
|
+
}
|
|
65446
|
+
// static on purpose (the lint ban excepts it): Angular's template type checker requires the
|
|
65447
|
+
// context guard to be static - it types the `let-` bindings of the host ng-template
|
|
65448
|
+
static ngTemplateContextGuard(_directive, _context) {
|
|
65449
|
+
return true;
|
|
65450
|
+
}
|
|
65451
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeNodeDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
65452
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: TreeNodeDefDirective, isStandalone: true, selector: "ng-template[etTreeNodeDef]", exportAs: ["etTreeNodeDef"], ngImport: i0 }); }
|
|
65453
|
+
}
|
|
65454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeNodeDefDirective, decorators: [{
|
|
65455
|
+
type: Directive,
|
|
65456
|
+
args: [{
|
|
65457
|
+
selector: 'ng-template[etTreeNodeDef]',
|
|
65458
|
+
exportAs: 'etTreeNodeDef',
|
|
65459
|
+
}]
|
|
65460
|
+
}], ctorParameters: () => [] });
|
|
65461
|
+
|
|
65462
|
+
/** What the slot in front of a tree row shows. */
|
|
65463
|
+
const TREE_MARKERS = {
|
|
65464
|
+
/** Nothing - a leaf, which keeps the slot so its label lines up with its siblings. */
|
|
65465
|
+
NONE: 'none',
|
|
65466
|
+
/** A collapsed or expanded branch; the rotation follows the row's `data-expanded`. */
|
|
65467
|
+
CHEVRON: 'chevron',
|
|
65468
|
+
/** The branch is loading its children. */
|
|
65469
|
+
SPINNER: 'spinner',
|
|
65470
|
+
/** The branch failed to load. */
|
|
65471
|
+
WARNING: 'warning',
|
|
65472
|
+
};
|
|
65473
|
+
/**
|
|
65474
|
+
* The slot in front of a tree row: its chevron, load spinner or failure mark. Its own component so
|
|
65475
|
+
* that it - and not the tree - is what registers the icons it draws. A `provideIcons()` on the tree
|
|
65476
|
+
* would sit above every projected row template in the injector tree and hide the consumer's own icon
|
|
65477
|
+
* registration from it, since an embedded view resolves DI from where it is inserted.
|
|
65478
|
+
*/
|
|
65479
|
+
class TreeMarkerComponent {
|
|
65480
|
+
constructor() {
|
|
65481
|
+
this.marker = input(TREE_MARKERS.NONE, /* @ts-ignore */
|
|
65482
|
+
...(ngDevMode ? [{ debugName: "marker" }] : /* istanbul ignore next */ []));
|
|
65483
|
+
}
|
|
65484
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeMarkerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65485
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: TreeMarkerComponent, isStandalone: true, selector: "et-tree-marker", inputs: { marker: { classPropertyName: "marker", publicName: "marker", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-hidden": "true" }, classAttribute: "et-tree-node-marker" }, providers: [provideIcons(CHEVRON_ICON, TRIANGLE_EXCLAMATION_ICON)], ngImport: i0, template: `
|
|
65486
|
+
@switch (marker()) {
|
|
65487
|
+
@case ('spinner') {
|
|
65488
|
+
<et-spinner [diameter]="12" />
|
|
65489
|
+
}
|
|
65490
|
+
@case ('warning') {
|
|
65491
|
+
<i class="et-tree-node-warning" etIcon="et-triangle-exclamation"></i>
|
|
65492
|
+
}
|
|
65493
|
+
@case ('chevron') {
|
|
65494
|
+
<i class="et-tree-node-chevron" etIcon="et-chevron"></i>
|
|
65495
|
+
}
|
|
65496
|
+
}
|
|
65497
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
65498
|
+
}
|
|
65499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeMarkerComponent, decorators: [{
|
|
65500
|
+
type: Component,
|
|
65501
|
+
args: [{
|
|
65502
|
+
selector: 'et-tree-marker',
|
|
65503
|
+
template: `
|
|
65504
|
+
@switch (marker()) {
|
|
65505
|
+
@case ('spinner') {
|
|
65506
|
+
<et-spinner [diameter]="12" />
|
|
65507
|
+
}
|
|
65508
|
+
@case ('warning') {
|
|
65509
|
+
<i class="et-tree-node-warning" etIcon="et-triangle-exclamation"></i>
|
|
65510
|
+
}
|
|
65511
|
+
@case ('chevron') {
|
|
65512
|
+
<i class="et-tree-node-chevron" etIcon="et-chevron"></i>
|
|
65513
|
+
}
|
|
65514
|
+
}
|
|
65515
|
+
`,
|
|
65516
|
+
encapsulation: ViewEncapsulation.None,
|
|
65517
|
+
imports: [IconDirective, SpinnerComponent],
|
|
65518
|
+
providers: [provideIcons(CHEVRON_ICON, TRIANGLE_EXCLAMATION_ICON)],
|
|
65519
|
+
host: {
|
|
65520
|
+
class: 'et-tree-node-marker',
|
|
65521
|
+
'aria-hidden': 'true',
|
|
65522
|
+
},
|
|
65523
|
+
}]
|
|
65524
|
+
}], propDecorators: { marker: [{ type: i0.Input, args: [{ isSignal: true, alias: "marker", required: false }] }] } });
|
|
65525
|
+
|
|
65526
|
+
const markerFor = (row) => {
|
|
65527
|
+
if (row.childrenStatus === 'loading')
|
|
65528
|
+
return TREE_MARKERS.SPINNER;
|
|
65529
|
+
if (row.childrenError !== null)
|
|
65530
|
+
return TREE_MARKERS.WARNING;
|
|
65531
|
+
return row.isExpandable ? TREE_MARKERS.CHEVRON : TREE_MARKERS.NONE;
|
|
65532
|
+
};
|
|
65533
|
+
/**
|
|
65534
|
+
* The default tree: an indented, themed, keyboard-navigable rendering of a hierarchy, driven by the
|
|
65535
|
+
* headless {@link TreeDirective}. Rows show their label; project an `<ng-template etTreeNodeDef>` to
|
|
65536
|
+
* render them with markup instead.
|
|
65537
|
+
*
|
|
65538
|
+
* Branches load their children the first time they expand, so binding a lazy `[dataSource]` needs no
|
|
65539
|
+
* extra wiring - a branch that is still loading shows a spinner in place of its chevron, and one whose
|
|
65540
|
+
* load failed shows the message and reloads when selected again.
|
|
65541
|
+
*
|
|
65542
|
+
* @example
|
|
65543
|
+
* <et-tree [dataSource]="categories" [(value)]="categoryId" [(expandedValues)]="openBranches" />
|
|
65544
|
+
*/
|
|
65545
|
+
class TreeComponent {
|
|
65546
|
+
constructor() {
|
|
65547
|
+
this.tree = inject(TreeDirective);
|
|
65548
|
+
/** Shown while the root level loads. */
|
|
65549
|
+
this.loadingLabel = input('Loading…', /* @ts-ignore */
|
|
65550
|
+
...(ngDevMode ? [{ debugName: "loadingLabel" }] : /* istanbul ignore next */ []));
|
|
65551
|
+
/** Shown when the root level loaded no nodes at all. */
|
|
65552
|
+
this.emptyLabel = input('Nothing to show', /* @ts-ignore */
|
|
65553
|
+
...(ngDevMode ? [{ debugName: "emptyLabel" }] : /* istanbul ignore next */ []));
|
|
65554
|
+
/** Appended to a failed level's message, to say that selecting the row loads it again. */
|
|
65555
|
+
this.retryLabel = input('select to retry', /* @ts-ignore */
|
|
65556
|
+
...(ngDevMode ? [{ debugName: "retryLabel" }] : /* istanbul ignore next */ []));
|
|
65557
|
+
/**
|
|
65558
|
+
* The rows plus their marker and template context, built together so each row's context object
|
|
65559
|
+
* survives change detection instead of being rebuilt on every pass.
|
|
65560
|
+
*/
|
|
65561
|
+
this.rows = computed(() => this.tree.visibleRows().map((row) => ({ row, marker: markerFor(row), context: { $implicit: row.node, row } })), /* @ts-ignore */
|
|
65562
|
+
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
65563
|
+
}
|
|
65564
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
65565
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: TreeComponent, isStandalone: true, selector: "et-tree", inputs: { loadingLabel: { classPropertyName: "loadingLabel", publicName: "loadingLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyLabel: { classPropertyName: "emptyLabel", publicName: "emptyLabel", isSignal: true, isRequired: false, transformFunction: null }, retryLabel: { classPropertyName: "retryLabel", publicName: "retryLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-tree" }, hostDirectives: [{ directive: TreeDirective, inputs: ["dataSource", "dataSource", "compareWith", "compareWith", "selectionMode", "selectionMode", "value", "value", "expandedValues", "expandedValues", "disabled", "disabled", "toErrorMessage", "toErrorMessage"], outputs: ["valueChange", "valueChange", "expandedValuesChange", "expandedValuesChange", "nodeActivate", "nodeActivate"] }], ngImport: i0, template: "@for (entry of rows(); track entry.row.node) {\n <div [row]=\"entry.row\" [style.--_et-tree-node-depth]=\"entry.row.level - 1\" class=\"et-tree-node\" etTreeNode>\n <et-tree-marker [marker]=\"entry.marker\" />\n\n <span class=\"et-tree-node-label\">\n @if (tree.nodeTemplate(); as nodeTemplate) {\n <ng-container [ngTemplateOutlet]=\"nodeTemplate.templateRef\" [ngTemplateOutletContext]=\"entry.context\" />\n } @else {\n {{ entry.row.node.label }}\n }\n </span>\n\n @if (entry.row.childrenError; as error) {\n <span class=\"et-tree-node-error\">{{ error }} \u00B7 {{ retryLabel() }}</span>\n }\n </div>\n}\n\n<!-- The status lines are `treeitem`s rather than plain text: everything inside a `role=\"tree\"` has to be\n one. The error line is also the retry control - selecting it reloads, the same way activating a\n branch whose children failed does. -->\n@if (tree.rootStatus() === 'loading') {\n <div class=\"et-tree-status\" aria-disabled=\"true\" aria-level=\"1\" aria-selected=\"false\" role=\"treeitem\">\n <et-tree-marker marker=\"spinner\" />\n {{ loadingLabel() }}\n </div>\n} @else if (tree.rootError(); as error) {\n <div\n (click)=\"tree.retry(null)\"\n (keydown.enter)=\"tree.retry(null)\"\n class=\"et-tree-status et-tree-status--error\"\n aria-level=\"1\"\n aria-selected=\"false\"\n role=\"treeitem\"\n tabindex=\"0\"\n >\n <et-tree-marker marker=\"warning\" />\n {{ error }} \u00B7 {{ retryLabel() }}\n </div>\n} @else if (!rows().length) {\n <div class=\"et-tree-status\" aria-disabled=\"true\" aria-level=\"1\" aria-selected=\"false\" role=\"treeitem\">\n {{ emptyLabel() }}\n </div>\n}\n", styles: ["@layer components{@property --et-tree-indent{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-tree-node-padding-block{syntax: \"<length>\"; inherits: true; initial-value: 5px;}@property --et-tree-node-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-tree-node-gap{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-tree-node-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-tree-marker-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-tree-duration{syntax: \"<time>\"; inherits: true; initial-value: .15s;}@property --_et-tree-node-depth{syntax: \"<number>\"; inherits: false; initial-value: 0;}.et-tree{display:block;color:var(--et-surface-color-solid, CanvasText)}.et-tree-node,.et-tree-status{display:flex;align-items:center;gap:var(--et-tree-node-gap);padding-block:var(--et-tree-node-padding-block);padding-inline:calc(var(--et-tree-node-padding-inline) + var(--_et-tree-node-depth) * var(--et-tree-indent)) var(--et-tree-node-padding-inline);border-radius:var(--et-tree-node-radius);box-sizing:border-box}.et-tree-node-marker{display:flex;flex:none;align-items:center;justify-content:center;inline-size:var(--et-tree-marker-size);block-size:var(--et-tree-marker-size);color:var(--et-surface-color-muted-solid, GrayText)}.et-tree-node-marker .et-tree-node-chevron{inline-size:100%;block-size:100%;rotate:90deg;transition:rotate var(--et-tree-duration) cubic-bezier(.25,0,.1,1)}.et-tree-node{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--et-tree-duration) ease}.et-tree-node .et-tree-node-label{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.et-tree-node .et-tree-node-error{flex:none;color:var(--et-tree-error-color, var(--et-surface-color-muted-solid, GrayText));font-size:.875em}.et-tree-node:where([data-expanded]) .et-tree-node-chevron{rotate:180deg}.et-tree-node:dir(rtl) .et-tree-node-chevron{rotate:-90deg}.et-tree-node:dir(rtl):where([data-expanded]) .et-tree-node-chevron{rotate:180deg}.et-tree-node:where([data-error]) .et-tree-node-marker{color:var(--et-tree-error-color, var(--et-surface-color-muted-solid, GrayText))}.et-tree-node:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, gray) 7%,transparent)}.et-tree-node:active{background:color-mix(in srgb,var(--et-surface-interaction-solid, gray) 14%,transparent)}.et-tree-node:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:-2px}.et-tree-node:where([data-selected]){background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 16%,transparent);color:var(--et-theme-color-ink-solid, inherit)}.et-tree-node:where([data-selected]):hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 24%,transparent)}.et-tree-node:where([data-selected]):active{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 32%,transparent)}.et-tree-node:where([aria-disabled]){color:var(--et-surface-color-muted-solid, GrayText);cursor:default}.et-tree-node:where([aria-disabled]):hover,.et-tree-node:where([aria-disabled]):active{background:transparent}.et-tree:where([aria-multiselectable]) .et-tree-node:after{content:\"\";flex:none;inline-size:4px;block-size:8px;margin-inline:3px;border:solid var(--et-theme-color-primary-solid, currentColor);border-width:0 2px 2px 0;rotate:45deg;opacity:0;transition:opacity var(--et-tree-duration) ease}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]){background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 8%,transparent);color:inherit}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]):after{opacity:1}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]):hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 14%,transparent)}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]):active{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 20%,transparent)}.et-tree-status{color:var(--et-surface-color-muted-solid, GrayText)}.et-tree-status:where(.et-tree-status--error){color:var(--et-tree-error-color, var(--et-surface-color-muted-solid, GrayText));cursor:pointer}.et-tree-status:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:-2px}@media(prefers-reduced-motion:reduce){.et-tree-node,.et-tree-node:after,.et-tree-node .et-tree-node-chevron{transition:none}}}\n"], dependencies: [{ kind: "directive", type: TreeNodeDirective, selector: "[etTreeNode]", inputs: ["row"], exportAs: ["etTreeNode"] }, { kind: "component", type: TreeMarkerComponent, selector: "et-tree-marker", inputs: ["marker"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
65566
|
+
}
|
|
65567
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TreeComponent, decorators: [{
|
|
65568
|
+
type: Component,
|
|
65569
|
+
args: [{ selector: 'et-tree', encapsulation: ViewEncapsulation.None, imports: [TreeNodeDirective, TreeMarkerComponent, NgTemplateOutlet], hostDirectives: [
|
|
65570
|
+
{
|
|
65571
|
+
directive: TreeDirective,
|
|
65572
|
+
inputs: ['dataSource', 'compareWith', 'selectionMode', 'value', 'expandedValues', 'disabled', 'toErrorMessage'],
|
|
65573
|
+
outputs: ['valueChange', 'expandedValuesChange', 'nodeActivate'],
|
|
65574
|
+
},
|
|
65575
|
+
], host: {
|
|
65576
|
+
class: 'et-tree',
|
|
65577
|
+
}, template: "@for (entry of rows(); track entry.row.node) {\n <div [row]=\"entry.row\" [style.--_et-tree-node-depth]=\"entry.row.level - 1\" class=\"et-tree-node\" etTreeNode>\n <et-tree-marker [marker]=\"entry.marker\" />\n\n <span class=\"et-tree-node-label\">\n @if (tree.nodeTemplate(); as nodeTemplate) {\n <ng-container [ngTemplateOutlet]=\"nodeTemplate.templateRef\" [ngTemplateOutletContext]=\"entry.context\" />\n } @else {\n {{ entry.row.node.label }}\n }\n </span>\n\n @if (entry.row.childrenError; as error) {\n <span class=\"et-tree-node-error\">{{ error }} \u00B7 {{ retryLabel() }}</span>\n }\n </div>\n}\n\n<!-- The status lines are `treeitem`s rather than plain text: everything inside a `role=\"tree\"` has to be\n one. The error line is also the retry control - selecting it reloads, the same way activating a\n branch whose children failed does. -->\n@if (tree.rootStatus() === 'loading') {\n <div class=\"et-tree-status\" aria-disabled=\"true\" aria-level=\"1\" aria-selected=\"false\" role=\"treeitem\">\n <et-tree-marker marker=\"spinner\" />\n {{ loadingLabel() }}\n </div>\n} @else if (tree.rootError(); as error) {\n <div\n (click)=\"tree.retry(null)\"\n (keydown.enter)=\"tree.retry(null)\"\n class=\"et-tree-status et-tree-status--error\"\n aria-level=\"1\"\n aria-selected=\"false\"\n role=\"treeitem\"\n tabindex=\"0\"\n >\n <et-tree-marker marker=\"warning\" />\n {{ error }} \u00B7 {{ retryLabel() }}\n </div>\n} @else if (!rows().length) {\n <div class=\"et-tree-status\" aria-disabled=\"true\" aria-level=\"1\" aria-selected=\"false\" role=\"treeitem\">\n {{ emptyLabel() }}\n </div>\n}\n", styles: ["@layer components{@property --et-tree-indent{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-tree-node-padding-block{syntax: \"<length>\"; inherits: true; initial-value: 5px;}@property --et-tree-node-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-tree-node-gap{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-tree-node-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-tree-marker-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-tree-duration{syntax: \"<time>\"; inherits: true; initial-value: .15s;}@property --_et-tree-node-depth{syntax: \"<number>\"; inherits: false; initial-value: 0;}.et-tree{display:block;color:var(--et-surface-color-solid, CanvasText)}.et-tree-node,.et-tree-status{display:flex;align-items:center;gap:var(--et-tree-node-gap);padding-block:var(--et-tree-node-padding-block);padding-inline:calc(var(--et-tree-node-padding-inline) + var(--_et-tree-node-depth) * var(--et-tree-indent)) var(--et-tree-node-padding-inline);border-radius:var(--et-tree-node-radius);box-sizing:border-box}.et-tree-node-marker{display:flex;flex:none;align-items:center;justify-content:center;inline-size:var(--et-tree-marker-size);block-size:var(--et-tree-marker-size);color:var(--et-surface-color-muted-solid, GrayText)}.et-tree-node-marker .et-tree-node-chevron{inline-size:100%;block-size:100%;rotate:90deg;transition:rotate var(--et-tree-duration) cubic-bezier(.25,0,.1,1)}.et-tree-node{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--et-tree-duration) ease}.et-tree-node .et-tree-node-label{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.et-tree-node .et-tree-node-error{flex:none;color:var(--et-tree-error-color, var(--et-surface-color-muted-solid, GrayText));font-size:.875em}.et-tree-node:where([data-expanded]) .et-tree-node-chevron{rotate:180deg}.et-tree-node:dir(rtl) .et-tree-node-chevron{rotate:-90deg}.et-tree-node:dir(rtl):where([data-expanded]) .et-tree-node-chevron{rotate:180deg}.et-tree-node:where([data-error]) .et-tree-node-marker{color:var(--et-tree-error-color, var(--et-surface-color-muted-solid, GrayText))}.et-tree-node:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, gray) 7%,transparent)}.et-tree-node:active{background:color-mix(in srgb,var(--et-surface-interaction-solid, gray) 14%,transparent)}.et-tree-node:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:-2px}.et-tree-node:where([data-selected]){background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 16%,transparent);color:var(--et-theme-color-ink-solid, inherit)}.et-tree-node:where([data-selected]):hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 24%,transparent)}.et-tree-node:where([data-selected]):active{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 32%,transparent)}.et-tree-node:where([aria-disabled]){color:var(--et-surface-color-muted-solid, GrayText);cursor:default}.et-tree-node:where([aria-disabled]):hover,.et-tree-node:where([aria-disabled]):active{background:transparent}.et-tree:where([aria-multiselectable]) .et-tree-node:after{content:\"\";flex:none;inline-size:4px;block-size:8px;margin-inline:3px;border:solid var(--et-theme-color-primary-solid, currentColor);border-width:0 2px 2px 0;rotate:45deg;opacity:0;transition:opacity var(--et-tree-duration) ease}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]){background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 8%,transparent);color:inherit}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]):after{opacity:1}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]):hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 14%,transparent)}.et-tree:where([aria-multiselectable]) .et-tree-node:where([data-selected]):active{background:color-mix(in srgb,var(--et-theme-color-primary-solid, gray) 20%,transparent)}.et-tree-status{color:var(--et-surface-color-muted-solid, GrayText)}.et-tree-status:where(.et-tree-status--error){color:var(--et-tree-error-color, var(--et-surface-color-muted-solid, GrayText));cursor:pointer}.et-tree-status:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:-2px}@media(prefers-reduced-motion:reduce){.et-tree-node,.et-tree-node:after,.et-tree-node .et-tree-node-chevron{transition:none}}}\n"] }]
|
|
65578
|
+
}], propDecorators: { loadingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingLabel", required: false }] }], emptyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyLabel", required: false }] }], retryLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "retryLabel", required: false }] }] } });
|
|
65579
|
+
|
|
65580
|
+
const TREE_IMPORTS = [TreeComponent, TreeDirective, TreeNodeDirective, TreeNodeDefDirective];
|
|
65581
|
+
|
|
63753
65582
|
/**
|
|
63754
65583
|
* Generated bundle index. Do not edit.
|
|
63755
65584
|
*/
|
|
63756
65585
|
|
|
63757
|
-
export { ACCORDION_ERROR_CODES, ACCORDION_GROUP_TOKEN, ACCORDION_IMPORTS, ACCORDION_TOKEN, ALIGN_CENTER_ICON, ALIGN_JUSTIFY_ICON, ALIGN_LEFT_ICON, ALIGN_RIGHT_ICON, ARROWS_LEFT_RIGHT_ICON, ARROW_OUT_UP_RIGHT_ICON, ARROW_RIGHT_ICON, ARROW_UP_ICON, AVATAR_IMPORTS, AVATAR_SHAPES, AVATAR_SIZES, AccordionComponent, AccordionContentDirective, AccordionDirective, AccordionGroupComponent, AccordionGroupDirective, AccordionHintDirective, AccordionLabelDirective, AccordionPanelDirective, AccordionTriggerDirective, AvatarComponent, AvatarGroupComponent, BADGE_IMPORTS, BADGE_VARIANTS, BANNER_IMPORTS, BANNER_LABELS, BANNER_TYPES, BOLD_ICON, BRACKET_CARD_CONTEXT, BRACKET_DATA_LAYOUT, BRACKET_DEFAULTS, BRACKET_DENSITY, BRACKET_DENSITY_PRESETS, BRACKET_ERROR_CODES, BRACKET_IMPORTS, BRACKET_LABELS, BRACKET_ROUND_MIRROR_TYPE, BRACKET_SWISS_GROUP_COLOR_TYPE, BREADCRUMB_COLLAPSE_IMPORTS, BREADCRUMB_COLLAPSE_TOKEN, BREADCRUMB_ERROR_CODES, BREADCRUMB_IMPORTS, BREADCRUMB_LABELS, BREADCRUMB_SEGMENT_TOKEN, BREADCRUMB_SEO_IMPORTS, BREADCRUMB_TOKEN, BUTTON_ICON_ALIGNMENTS, BUTTON_IMPORTS, BUTTON_SIZES, BUTTON_SPINNER_CONFIG, BUTTON_TYPES, BUTTON_VARIANTS, BadgeComponent, BannerComponent, BracketComponent, BracketDefaultContinueComponent, BracketDefaultFinalMatchComponent, BracketDefaultMatchComponent, BracketDefaultRoundHeaderComponent, BracketMap, BracketRoundsListComponent, BrandLoaderComponent, BreadcrumbCollapseDirective, BreadcrumbComponent, BreadcrumbDirective, BreadcrumbItemDirective, BreadcrumbItemTemplateDirective, BreadcrumbOutletComponent, BreadcrumbOverflowComponent, BreadcrumbSegmentDirective, BreadcrumbSeoDirective, BreadcrumbSeparatorDirective, ButtonComponent, ButtonDirective, ButtonStylesDirective, CALENDAR_ERROR_CODES, CALENDAR_ICON, CALENDAR_IMPORTS, CALENDAR_LABELS, CARD_IMPORTS, CARD_VARIANTS, CAROUSEL_AUTOPLAY_TOKEN, CAROUSEL_ERROR_CODES, CAROUSEL_IMPORTS, CAROUSEL_LABELS, CAROUSEL_SLIDE_ALIGNMENTS, CAROUSEL_TOKEN, CAROUSEL_TRANSITIONS, CAROUSEL_TRANSITION_DRIVERS, CASCADER_ERROR_CODES, CASCADER_IMPORTS, CASCADER_LABELS, CASCADER_SELECTABLE_LEVELS, CHECKBOX_GROUP_IMPORTS, CHECKBOX_IMPORTS, CHECKBOX_OPTION_VARIANTS, CHECK_ICON, CHEVRON_ICON, CHIP_ERROR_CODES, CHIP_IMPORTS, CHIP_LABELS, CHOICE_FIELD_IMPORTS, CHOICE_FIELD_VARIANTS, CIRCLE_CHECK_ICON, CIRCLE_INFO_ICON, CLIPBOARD_CHECK_ICON, CLOCK_ICON, CODE_BLOCK_ICON, CODE_ICON, COLOR_INPUT_IMPORTS, COMMON_BRACKET_ROUND_TYPE, COPY_BUTTON_IMPORTS, CalendarCellDirective, CalendarComponent, CalendarDirective, CalendarGridDirective, CalendarHeaderDirective, CardComponent, CarouselAutoplayDirective, CarouselComponent, CarouselDirective, CarouselItemDirective, CarouselNextDirective, CarouselPlayToggleDirective, CarouselPreviousDirective, CarouselSlideDirective, CascaderColumnDirective, CascaderComponent, CascaderDirective, CascaderNodeDirective, CascaderPanelComponent, CascaderSearchDirective, CascaderSearchOptionDirective, CascaderSurfaceDirective, CascaderTriggerDirective, CheckboxComponent, CheckboxDirective, CheckboxGroupComponent, CheckboxGroupSelectAllComponent, CheckboxOptionComponent, ChipComponent, ChipDirective, ChipRemoveDirective, ChoiceFieldComponent, ColorInputComponent, ColorInputDirective, CopyButtonDirective, CounterComponent, DAILYMOTION_PLAYER_TOKEN, DATE_FORMAT, DATE_INPUT_ERROR_CODES, DATE_INPUT_IMPORTS, DATE_LOCALE, DATE_PICKER_HOST, DATE_RANGE_INPUT_ERROR_CODES, DATE_RANGE_INPUT_IMPORTS, DATE_TIME_INPUT_ERROR_CODES, DATE_TIME_INPUT_IMPORTS, DATE_TIME_LABELS, DEFAULT_BANNER_LABELS, DEFAULT_BRACKET_LABELS, DEFAULT_BREADCRUMB_LABELS, DEFAULT_BREAKPOINTS, DEFAULT_CALENDAR_LABELS, DEFAULT_CALENDAR_RANGE_STRATEGY, DEFAULT_CAROUSEL_LABELS, DEFAULT_CASCADER_LABELS, DEFAULT_CHIP_LABELS, DEFAULT_DATE_TIME_LABELS, DEFAULT_DROPZONE_LABELS, DEFAULT_FILTER_OVERLAY_LABELS, DEFAULT_FORM_FIELD_LABELS, DEFAULT_GRID_LABELS, DEFAULT_ICON_VARIANT, DEFAULT_INPUT_LABELS, DEFAULT_LOADER_LABELS, DEFAULT_MATCH_CARD_START_TIME_FORMAT, DEFAULT_MATCH_LABELS, DEFAULT_NOTIFICATION_LABELS, DEFAULT_NOTIFICATION_MANAGER_CONFIG, DEFAULT_NOTIFICATION_STATUS_ICONS, DEFAULT_PAGINATION_LABELS, DEFAULT_PHONE_INPUT_LABELS, DEFAULT_PIP_WINDOW_CONFIG, DEFAULT_QUERY_ERROR_LABELS, DEFAULT_RICH_TEXT_EDITOR_LABELS, DEFAULT_RICH_TEXT_EDITOR_TOOLS, DEFAULT_SCHEDULER_LABELS, DEFAULT_SELECT_LABELS, DEFAULT_SLIDER_LABELS, DEFAULT_STANDINGS_LABELS, DEFAULT_STREAM_LABELS, DEFAULT_STREAM_PLAYER_STATE, DEFAULT_TABLE_LABELS, DEFAULT_TIME_PICKER_LABELS, DESCRIPTION_IMPORTS, DESCRIPTION_LIST_IMPORTS, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, DROPZONE_ENTRY_STATUSES, DROPZONE_ERROR_CODES, DROPZONE_FILES_ERROR_KIND, DROPZONE_FILE_CONSTRAINTS, DROPZONE_FILE_REJECTION_REASONS, DROPZONE_IMPORTS, DROPZONE_LABELS, DURATION_INPUT_ERROR_CODES, DURATION_INPUT_IMPORTS, DailymotionPlayerComponent, DailymotionPlayerDirective, DailymotionPlayerParamsDirective, DailymotionPlayerSlotComponent, DateInputComponent, DateInputDirective, DateInputFieldDirective, DatePickerPanelComponent, DatePickerSurfaceDirective, DatePickerTriggerDirective, DateRangeInputComponent, DateRangeInputDirective, DateRangeInputFieldDirective, DateTimeInputComponent, DateTimeInputDirective, DateTimeInputFieldDirective, DescriptionComponent, DescriptionListComponent, DropzoneComponent, DropzoneDirective, DurationInputComponent, DurationInputDirective, DurationInputFieldDirective, ELLIPSIS_ICON, ELLIPSIS_VERTICAL_ICON, EMPTY_STATE_IMPORTS, ET_BUILT_IN_ICON_NAMES, EYE_ICON, EYE_SLASH_ICON, EmptyStateComponent, FACEBOOK_PLAYER_TOKEN, FILE_ICON, FILTER_ICON, FILTER_OVERLAY_ERROR_CODES, FILTER_OVERLAY_IMPORTS, FILTER_OVERLAY_LABELS, FILTER_OVERLAY_TOKEN, FLOATING_ACTION_ERROR_CODES, FLOATING_ACTION_IMPORTS, FLOATING_ACTION_STATES, FLOATING_ACTION_TOKEN, FLOPPY_DISK_ICON, FOCUS_FRAME_ICON, FORM_ERROR_MESSAGE_RESOLVER, FORM_FIELD_APPEARANCES, FORM_FIELD_CONTROL_TYPES, FORM_FIELD_ERROR_CODES, FORM_FIELD_FILLS, FORM_FIELD_IMPORTS, FORM_FIELD_LABELS, FORM_FIELD_LABEL_MODES, FORM_FIELD_SIZES, FORM_FIELD_TOKEN, FabComponent, FacebookPlayerComponent, FacebookPlayerDirective, FacebookPlayerParamsDirective, FacebookPlayerSlotComponent, FilterOverlayResetDirective, FilterOverlaySubmitDirective, FloatingActionAnchorDirective, FloatingActionDirective, FloatingActionScopeDirective, FloatingActionTopDirective, FloatingActionTriggerDirective, FocusRingDirective, FormErrorComponent, FormFieldComponent, FormFieldDirective, GERMAN_FILTER_OVERLAY_LABELS, GERMAN_QUERY_ERROR_LABELS, GRID_2X2_ICON, GRID_DEBUG_IMPORTS, GRID_ERROR_CODES, GRID_IMPORTS, GRID_LABELS, GRID_TOKEN, GROUP_BRACKET_ROUND_TYPE, GridComponent, GridDebugComponent, GridDirective, GridDragDirective, GridItemComponent, GridItemDefaultActionsComponent, GridItemDirective, GridItemRef, GridItemToolbarComponent, GridResizeDirective, HEADING_1_ICON, HEADING_2_ICON, HEADING_3_ICON, HintComponent, ICONS_TOKEN, ICON_DIRECTIVE_TOKEN, ICON_ERROR_CODES, ICON_IMPORTS, ICON_OVERRIDES_TOKEN, IMAGE_ICON, INITIAL_SUPPORT_PRESENTATION_STATE, INPUT_IMPORTS, INPUT_LABELS, INPUT_MASK_HOST, INPUT_TEXT_ALIGNMENTS, INPUT_TYPES, INTERACTIVE_TAGS, ITALIC_ICON, IconButtonComponent, IconDirective, InputComponent, InputDirective, InputMaskDirective, InputPrefixDirective, InputSuffixDirective, KICK_PLAYER_TOKEN, KickPlayerComponent, KickPlayerDirective, KickPlayerParamsDirective, KickPlayerSlotComponent, LINK_ICON, LIST_BULLETED_ICON, LIST_NUMBERED_ICON, LOADER_LABELS, LOCATION_ICON, LOCK_ICON, LabelDirective, MASKED_INPUT_ERROR_CODES, MASKED_INPUT_IMPORTS, MASK_VALUE_MODES, MASONRY_ERROR_CODES, MASONRY_IMPORTS, MASONRY_TOKEN, MATCH_CARD_IMPORTS, MATCH_CARD_SIZES, MATCH_CARD_TOKEN, MATCH_ERROR_CODES, MATCH_LABELS, MATCH_PARTICIPANT_IMPORTS, MENU_ERROR_CODES, MENU_IMPORTS, MENU_ITEM_VARIANTS, MENU_SELECTION_GROUP_MULTIPLE, MENU_SELECTION_GROUP_TOKEN, MENU_SELECTION_ITEM_KIND, MINUS_ICON, MULTI_LANGUAGE_RICH_TEXT_EDITOR_ERROR_CODES, MULTI_LANGUAGE_RICH_TEXT_EDITOR_IMPORTS, MasonryDirective, MasonryItemDirective, MatchCardComponent, MatchCardDirective, MatchCardGameScoresDirective, MatchCardMetaDirective, MatchCardScoreDirective, MatchParticipantComponent, MatchScoreComponent, MenuCheckboxGroupComponent, MenuCheckboxItemComponent, MenuComponent, MenuContextTriggerDirective, MenuDirective, MenuGroupLabelComponent, MenuItemComponent, MenuItemDirective, MenuItemShortcutComponent, MenuPanelDirective, MenuRadioGroupComponent, MenuRadioItemComponent, MenuSearchDirective, MenuSelectionGroupDirective, MenuSelectionItemDirective, MenuSeparatorComponent, MenuSurfaceDirective, MenuTriggerDirective, MultiLanguageRichTextEditorComponent, MultiLanguageRichTextEditorDirective, MultiLanguageRichTextEditorLanguageToolComponent, NAV_TABS_TOKEN, NAV_TAB_IMPORTS, NOTIFICATION_ACTION_SLOTS, NOTIFICATION_ERROR_CODES, NOTIFICATION_IMPORTS, NOTIFICATION_LABELS, NOTIFICATION_STACK_CONTEXT_TOKEN, NOTIFICATION_STATUS, NUMBER_INPUT_IMPORTS, NavTabLinkComponent, NavTabLinkDirective, NavTabsComponent, NavTabsDirective, NavTabsOutletComponent, NavTabsOutletDirective, NotificationActionDirective, NotificationComponent, NotificationDirective, NotificationDismissDirective, NotificationItemDirective, NotificationStackDirective, NotificationSwipeToDismissDirective, NumberInputComponent, NumberInputDirective, OTP_INPUT_IMPORTS, OVERLAY_BACK_OR_CLOSE_TOKEN, OVERLAY_BODY_TOKEN, OVERLAY_CONFIG_CLASS_KEYS, OVERLAY_CONTENT_IMPORTS, OVERLAY_ERROR_CODES, OVERLAY_FOOTER_TOKEN, OVERLAY_HEADER_TEMPLATE_TOKEN, OVERLAY_HEADER_TOKEN, OVERLAY_IMPORTS, OVERLAY_MAIN_TOKEN, OVERLAY_QUERY_PARAM_INPUT_NAME, OVERLAY_REF, OVERLAY_ROUTER_CONFIG_TOKEN, OVERLAY_ROUTER_LINK_TOKEN, OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN, OVERLAY_ROUTER_OUTLET_TOKEN, OVERLAY_ROUTER_TOKEN, OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN, OtpInputComponent, OtpInputDirective, OverlayAnchorDirective, OverlayBackOrCloseDirective, OverlayBodyComponent, OverlayCloseDirective, OverlayContainerComponent, OverlayDirective, OverlayFooterDirective, OverlayHeaderDirective, OverlayHeaderTemplateDirective, OverlayMainDirective, OverlayOriginCloneComponent, OverlayRouteHeaderTemplateOutletComponent, OverlayRouterLinkDirective, OverlayRouterOutletComponent, OverlayRouterOutletDisabledTemplateDirective, OverlaySharedRouteTemplateDirective, OverlaySharedRouteTemplateOutletComponent, OverlaySidebarComponent, OverlaySidebarPageComponent, OverlaySurfaceDirective, OverlayTitleDirective, OverlayTriggerDirective, PAGE_SIZE_SELECT_IMPORTS, PAGINATION_IMPORTS, PAGINATION_LABELS, PARAGRAPH_ICON, PASSWORD_INPUT_IMPORTS, PAUSE_ICON, PENCIL_ICON, PHONE_COUNTRIES, PHONE_INPUT_ERROR_CODES, PHONE_INPUT_IMPORTS, PHONE_INPUT_LABELS, PICTURE_IMPORTS, PICTURE_STATES, PIP_CHROME_REF_TOKEN, PIP_ENTRY_TOKEN, PIP_WINDOW_ASPECT_RATIO_TOKEN, PLAY_ICON, PLUS_ICON, PROGRESS_STEPS_IMPORTS, PROGRESS_STEP_STATES, PageSizeSelectComponent, PaginationComponent, PaginationDirective, PaginationSeoDirective, PasswordInputComponent, PasswordInputDirective, PhoneInputComponent, PhoneInputDirective, PhoneInputFieldDirective, PhoneInputFlagDirective, PictureComponent, PictureErrorDirective, PicturePlaceholderDirective, PipBackDirective, PipBringBackDirective, PipCellDirective, PipCloseDirective, PipCollapseOverlayDirective, PipGridToggleDirective, PipPlayerComponent, PipSlotPlaceholderComponent, PipStageDirective, PipTitleBarDirective, PipTitleBarTemplateDirective, PipWindowComponent, PipWindowParamsDirective, ProgressBarComponent, ProgressStepComponent, ProgressStepsComponent, QUERY_DEVTOOLS_IMPORTS, QUERY_ERROR_ERROR_CODES, QUERY_ERROR_IMPORTS, QUERY_ERROR_LABELS, QUERY_ERROR_TOKEN, QUOTE_ICON, QueryDevtoolsComponent, QueryDevtoolsJsonComponent, QueryDevtoolsJsonStylesComponent, QueryDevtoolsTimelineStylesComponent, QueryDevtoolsToggleComponent, QueryErrorActionsDirective, QueryErrorComponent, QueryErrorDirective, QueryErrorTitleDirective, QueryParamOverlayLinkDirective, RADIO_GROUP_IMPORTS, RADIO_VARIANTS, RATING_IMPORTS, REDO_ICON, RICH_TEXT_EDITOR_FLOATING_TOOLBAR, RICH_TEXT_EDITOR_HEADING_OPTIONS, RICH_TEXT_EDITOR_IMPORTS, RICH_TEXT_EDITOR_INLINE_TOOLS, RICH_TEXT_EDITOR_LABELS, RICH_TEXT_EDITOR_LANGUAGE_TOOL, RICH_TEXT_EDITOR_LINK_EDITOR, RICH_TEXT_EDITOR_TOKEN_CODEC, RICH_TEXT_EDITOR_TOKEN_PALETTE_IMPORTS, RICH_TEXT_EDITOR_TOOL, RICH_TEXT_EDITOR_TOOLS, RICH_TEXT_EDITOR_TOOL_BUTTONS, RICH_TEXT_EDITOR_TRIGGERS_IMPORTS, ROTATE_RIGHT_ICON, RadioComponent, RadioGroupComponent, RangeSliderComponent, RangeSliderDirective, RatingComponent, RatingDirective, RatingIconDirective, RichTextEditorAlignToolComponent, RichTextEditorComponent, RichTextEditorDirective, RichTextEditorFloatingToolbarComponent, RichTextEditorFloatingToolbarDirective, RichTextEditorHeadingToolComponent, RichTextEditorImageEditorComponent, RichTextEditorImageStylesComponent, RichTextEditorImageToolComponent, RichTextEditorLinkEditorComponent, RichTextEditorLinkEditorDirective, RichTextEditorTableStylesComponent, RichTextEditorTableToolComponent, RichTextEditorTokenPaletteComponent, RichTextEditorTokenPopupComponent, RichTextEditorTriggersDirective, SCHEDULER_ERROR_CODES, SCHEDULER_FEATURE_HOST, SCHEDULER_IMPORTS, SCHEDULER_LABELS, SCROLLABLE_DARKEN_IMPORTS, SCROLLABLE_DRAG_IMPORTS, SCROLLABLE_ERROR_CODES, SCROLLABLE_IMPORTS, SCROLLABLE_NAVIGATION_IMPORTS, SEGMENTED_BUTTON_GROUP_VARIANTS, SEGMENTED_BUTTON_IMPORTS, SELECTION_LIST_IMPORTS, SELECTION_LIST_MULTIPLE, SELECTION_LIST_TOKEN, SELECT_ERROR_CODES, SELECT_FILTER_MODES, SELECT_IMPORTS, SELECT_LABELS, SIDEBAR_OVERLAY_CONFIG, SIDEBAR_OVERLAY_TOKEN, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, SKELETON_IMPORTS, SLIDER_ERROR_CODES, SLIDER_IMPORTS, SLIDER_LABELS, SLIDER_MARK_VALUE_ATTRIBUTE, SLIDER_TOKEN, SNAP_HYSTERESIS, SOOP_PLAYER_TOKEN, SPLIT_BUTTON_ERROR_CODES, STANDINGS_ERROR_CODES, STANDINGS_IMPORTS, STANDINGS_LABELS, STAR_ICON, STREAM_ALL_IMPORTS, STREAM_CONSENT_TOKEN, STREAM_DAILYMOTION_IMPORTS, STREAM_FACEBOOK_IMPORTS, STREAM_IMPORTS, STREAM_KICK_IMPORTS, STREAM_LABELS, STREAM_PIP_IMPORTS, STREAM_PLAYER_COMPONENT_TOKEN, STREAM_PLAYER_ERROR_CONTEXT_TOKEN, STREAM_PLAYER_ERROR_TOKEN, STREAM_PLAYER_PARAMS_TOKEN, STREAM_PLAYER_SLOT_TOKEN, STREAM_PLAYER_TOKEN, STREAM_SLOT_PLAYER_ID_TOKEN, STREAM_SOOP_IMPORTS, STREAM_TIKTOK_IMPORTS, STREAM_TWITCH_IMPORTS, STREAM_USER_CONSENT_PROVIDER_TOKEN, STREAM_VIMEO_IMPORTS, STREAM_YOUTUBE_IMPORTS, STRIKETHROUGH_ICON, SUPPORT_CONTENT_STATE, SUPPORT_TRANSITION_DIRECTION, SWISS_ADVANCE_WINS, SWISS_BRACKET_ROUND_TYPE, SWISS_ELIMINATE_LOSSES, SWITCH_IMPORTS, SchedulerAgendaDirective, SchedulerAgendaViewComponent, SchedulerBadgeChainCountComponent, SchedulerBadgeChainCountDirective, SchedulerBadgeColorDotComponent, SchedulerBadgeColorDotDirective, SchedulerBadgeLocationComponent, SchedulerBadgeLocationDirective, SchedulerBadgeTimeRangeComponent, SchedulerBadgeTimeRangeDirective, SchedulerBadgeTitleComponent, SchedulerBadgeTitleDirective, SchedulerComponent, SchedulerDirective, SchedulerMonthDirective, SchedulerMonthViewComponent, SchedulerTimeGridDirective, SchedulerTimeGridViewComponent, ScrollableActiveChildDirective, ScrollableButtonsComponent, ScrollableButtonsDirective, ScrollableComponent, ScrollableDarkenDirective, ScrollableDirective, ScrollableDragDirective, ScrollableIgnoreChildDirective, ScrollableLoadingTemplateDirective, ScrollableMasksComponent, ScrollableNavigationComponent, ScrollableNavigationDirective, ScrollableSnapDirective, SegmentedButtonComponent, SegmentedButtonGroupComponent, SelectComponent, SelectDirective, SelectEmptyDirective, SelectErrorDirective, SelectListboxDirective, SelectLoadingDirective, SelectOptionComponent, SelectOptionDirective, SelectOptionGroupComponent, SelectOptionGroupDirective, SelectOptionTemplateDirective, SelectOptionsDirective, SelectPanelComponent, SelectSearchDirective, SelectSurfaceDirective, SelectTriggerDirective, SelectValueDirective, SelectViewportDirective, SelectVirtualOptionComponent, SelectVirtualOptionDirective, SelectionListControlDirective, SelectionListDirective, SelectionOptionDirective, SkeletonComponent, SkeletonItemComponent, SkeletonTextComponent, SliderComponent, SliderDirective, SliderThumbDirective, SliderThumbLabelDirective, SliderTrackDirective, SoopPlayerComponent, SoopPlayerDirective, SoopPlayerParamsDirective, SoopPlayerSlotComponent, SpinnerComponent, SplitButtonActionDirective, SplitButtonComponent, SplitButtonDirective, SplitButtonTriggerDirective, StandingsComponent, StandingsDirective, StreamConsentAcceptDirective, StreamConsentComponent, StreamConsentDirective, StreamPipChromeComponent, StreamPlayerErrorComponent, StreamPlayerErrorDirective, StreamPlayerLoadingComponent, StreamPlayerSlotDirective, SwitchComponent, SwitchDirective, TABLE_CELL_ERROR_TOOLTIP_IMPORTS, TABLE_COLUMN_CHOOSER_IMPORTS, TABLE_COLUMN_MENU_IMPORTS, TABLE_CSV_EXPORT_IMPORTS, TABLE_ERROR_CODES, TABLE_FEATURE_HOST, TABLE_FILTER_IMPORTS, TABLE_GROUP_HEADERS_IMPORTS, TABLE_ICON, TABLE_IMPORTS, TABLE_INLINE_EDIT_IMPORTS, TABLE_KEYBOARD_NAV_IMPORTS, TABLE_LABELS, TABLE_REORDER_IMPORTS, TABLE_RESIZE_IMPORTS, TABLE_ROW_EXPANSION_IMPORTS, TABLE_SELECTION_IMPORTS, TABLE_SKELETON_IMPORTS, TABLE_STATE_PERSISTENCE_IMPORTS, TABLE_STICKY_COLUMNS_IMPORTS, TABLE_VIRTUAL_SCROLL_IMPORTS, TAB_BAR_FITS, TAB_BAR_ORIENTATIONS, TAB_BAR_TOKEN, TAB_BAR_TRIGGER_TOKEN, TAB_BAR_VARIANTS, TAB_ERROR_CODES, TAB_GROUP_TOKEN, TAB_IMPORTS, TAB_PANEL_TOKEN, TAB_SIZES, TAG_INPUT_ERROR_CODES, TAG_INPUT_IMPORTS, TEXTAREA_IMPORTS, TEXTAREA_RESIZE_MODES, TEXT_ALIGNS, TIKTOK_PLAYER_TOKEN, TIMES_ICON, TIME_FORMAT, TIME_INPUT_ERROR_CODES, TIME_INPUT_IMPORTS, TIME_PICKER_ERROR_CODES, TIME_PICKER_IMPORTS, TIME_PICKER_LABELS, TOGGLETIP_ERROR_CODES, TOGGLETIP_IMPORTS, TOOLTIP_ERROR_CODES, TOOLTIP_IMPORTS, TOURNAMENT_MODE, TRIANGLE_EXCLAMATION_ICON, TROPHY_ICON, TWITCH_PLAYER_TOKEN, TabBarDirective, TabBarTriggerDirective, TabBarUnderlineDirective, TabComponent, TabGroupComponent, TabGroupDirective, TabLabelDirective, TabPanelDirective, TabTriggerDirective, TableCellDirective, TableCellEditDirective, TableCellErrorMarkComponent, TableCellErrorTooltipDirective, TableCellSkeletonDirective, TableColumnChooserComponent, TableColumnMenuDirective, TableColumnMenuTriggerComponent, TableComponent, TableCsvExportDirective, TableDetailStylesComponent, TableExpanderCellComponent, TableFilterOptionDirective, TableFilterTriggerComponent, TableFiltersDirective, TableFooterCellDirective, TableFooterDirective, TableGroupHeaderRowComponent, TableGroupHeadersDirective, TableHeaderCellDirective, TableInlineEditDirective, TableInlineEditStylesComponent, TableKeyboardNavDirective, TableReorderDirective, TableReorderOverlayComponent, TableResizeDirective, TableResizeGripComponent, TableRowDetailComponent, TableRowExpansionDirective, TableSelectAllCellComponent, TableSelectCellComponent, TableSelectionDirective, TableSkeletonDirective, TableSkeletonRowsComponent, TableStatePersistenceDirective, TableStickyColumnsDirective, TableVirtualScrollDirective, TableVirtualScrollStylesComponent, TagInputComponent, TagInputDirective, TagInputFieldDirective, TextButtonComponent, TextFieldControlDirective, TextareaComponent, TextareaDirective, TikTokPlayerComponent, TikTokPlayerDirective, TikTokPlayerParamsDirective, TikTokPlayerSlotComponent, TimeInputComponent, TimeInputDirective, TimeInputFieldDirective, TimePickerColumnDirective, TimePickerComponent, TimePickerDirective, TimePickerOptionDirective, ToggletipCloseDirective, ToggletipComponent, ToggletipDirective, ToggletipTriggerDirective, TooltipComponent, TooltipDirective, TwitchPlayerComponent, TwitchPlayerDirective, TwitchPlayerParamsDirective, TwitchPlayerSlotComponent, UNDERLINE_ICON, UNDO_ICON, UNIT_MS, UPLOAD_ICON, VIMEO_PLAYER_TOKEN, VimeoPlayerComponent, VimeoPlayerDirective, VimeoPlayerParamsDirective, VimeoPlayerSlotComponent, WINDOW_CONTROL_BUTTON_KINDS, WINDOW_CONTROL_BUTTON_SIZES, WindowControlButtonComponent, YOUTUBE_PLAYER_SLOT_TOKEN, YOUTUBE_PLAYER_TOKEN, YoutubePlayerComponent, YoutubePlayerDirective, YoutubePlayerParamsDirective, YoutubePlayerSlotComponent, YoutubePlayerSlotDirective, abortFullscreenAnimation, anchoredDialogOverlayStrategy, anchoredOverlayStrategy, autoPlace, bottomSheetOverlayStrategy, bracketFitsWidth, bracketNaturalWidth, buildAnchoredRuntimePositionStrategy, canHaveChildren, cascaderFromQuery, centeredOverlayStrategy, clampPosition, clampResizeRect, cleanupFullscreenAnimation, cleanupFullscreenAnimationStyles, compactLayout, computeGeometry, computeGridHeight, countDescendants, createAnchoredPanelController, createAutoScroller, createBracket, createBracketBase, createCardMask, createCurrencyMask, createDefaultDropzoneArgs, createDropzoneUpload, createExistingDropzoneEntry, createFileDropzoneEntry, createFixedLengthRangeStrategy, createGridAdapter, createIbanMask, createMatchesMapBase, createNewMatchParticipantBase, createNormalizedBracketMatch, createNotificationPromiseFn, createNotificationRef, createOverlayOpener, createOverlayRef, createOverlayStrategyController, createOverlayUnsavedChangesGuard, createParticipantsMapBase, createPipChromeAnimations, createPipChromeState, createRichTextEditorTrigger, createRichTextEditorTriggerWithQuery, createRoundsMapBase, createStreamConfig, createStreamPlayerSlot, createTableRowsSource, createTableStateStorage, createV2DropzoneUpload, createWeekRangeStrategy, defaultCompareWith, defaultDropzoneRejectionMessage, defineOverlay, defineQueryParamOverlay, deriveDurationFormatSpec, deserializeGridLayout, deserializeTableState, dialogOverlayStrategy, disposeDropzoneEntry, doubleEliminationBracketLayout, dropzoneFiles, enableDragToDismiss, extractFirstImageUrl, filterOverlayLabelsForLocale, filterOverlayPreviewFromQuery, filterRows, findCollision, findNextRelevantHtmlElement, findScrollableAncestor, formatDuration, formatFileSize, fromGridPosition, fullScreenDialogOverlayStrategy, generateBracketDataForEthlete, generateBracketRoundSwissGroupMaps, generateMatchPosition, generateMatchRelationPositions, generateMatchRelationsNew, generateRoundRelationsNew, generateRoundTypeFromEthleteRoundType, generateTournamentModeFormEthleteRounds, getAvailableSwissGroupsForRound, getClosestOverlay, getOriginCoordinatesAndDimensions, getSwissGroupColorType, hysteresisRound, iconRegistryKey, indexOfNode, injectAnchoredDialogStrategy, injectAnchoredDialogStrategyDefaults, injectBannerLabels, injectBottomSheetStrategy, injectBottomSheetStrategyDefaults, injectBracketConfig, injectBracketLabels, injectBreadcrumbLabels, injectBreadcrumbManager, injectCalendarLabels, injectCarouselLabels, injectCascaderLabels, injectChipLabels, injectDateFormat, injectDateLocale, injectDateTimeLabels, injectDialogStrategy, injectDialogStrategyDefaults, injectDropzoneLabels, injectFilterOverlay, injectFilterOverlayLabels, injectFormFieldLabels, injectFormSupport, injectFullscreenDialogStrategy, injectFullscreenDialogStrategyDefaults, injectGridConfig, injectGridLabels, injectInputLabels, injectLeftSheetStrategy, injectLeftSheetStrategyDefaults, injectLoaderLabels, injectMatchLabels, injectNotificationLabels, injectNotificationManager, injectNotificationManagerConfig, injectOverlayManager, injectOverlayRouter, injectOverlayScrollBlocker, injectOverlaySurfaceContext, injectPaginationLabels, injectPhoneInputLabels, injectPictureConfig, injectPipChromeManager, injectPipManager, injectPipSlotPlaceholderConfig, injectQueryErrorLabels, injectRichTextEditorLabels, injectRichTextEditorTools, injectRightSheetStrategy, injectRightSheetStrategyDefaults, injectSchedulerFeatureHost, injectSchedulerLabels, injectSelectLabels, injectSidebarOverlay, injectSliderLabels, injectStandingsLabels, injectStreamConfig, injectStreamConsentConfig, injectStreamLabels, injectStreamManager, injectStreamPlayerErrorConfig, injectStreamPlayerLoadingConfig, injectStreamScriptLoader, injectStreamUserConsentProvider, injectTableCsvExport, injectTableFeatureHost, injectTableLabels, injectTimeFormat, injectTimePickerLabels, injectTopSheetStrategy, injectTopSheetStrategyDefaults, isFileAccepted, isHtmlElement, isInteractiveElement, isPointerEvent, isTargetInsideOverlayTree, isTouchEvent, itemsCollide, kindOf, leftSheetOverlayStrategy, legacyQueryErrorSource, mapLayoutToBreakpoint, matchCountryByDialCode, matchParticipantDisplayName, mergeOverlayBreakpointConfigs, mergeOverlayConfigs, mirroredDoubleEliminationBracketLayout, mirroredSingleEliminationBracketLayout, mountRichTextEditorImageStyles, mountRichTextEditorTableStyles, nodesEqual, normalizeEthleteBracketMatch, normalizeEthleteGroupRanking, normalizeEthleteMatch, normalizeEthleteMatchStatus, normalizeEthleteMedia, normalizeEthleteParticipant, normalizeEthletePlacement, normalizePictureSizes, normalizePictureSource, paginate, parseDuration, phoneCountryFlag, phoneCountryName, pixelRectsEqual, positionToPixelRect, positionsEqual, projectDragCell, provideAnchoredDialogStrategy, provideAnchoredDialogStrategyDefaults, provideBannerLabels, provideBottomSheetStrategy, provideBottomSheetStrategyDefaults, provideBracketConfig, provideBracketLabels, provideBreadcrumbLabels, provideBreadcrumbManager, provideCalendarLabels, provideCarouselLabels, provideCascaderLabels, provideChipLabels, provideDateFormat, provideDateLocale, provideDateTimeLabels, provideDialogStrategy, provideDialogStrategyDefaults, provideDropzoneLabels, provideFilterOverlay, provideFilterOverlayLabels, provideFormErrorMessageResolver, provideFormFieldLabels, provideFormSupport, provideFullscreenDialogStrategy, provideFullscreenDialogStrategyDefaults, provideGridConfig, provideGridLabels, provideIconOverrides, provideIcons, provideInputLabels, provideLeftSheetStrategy, provideLeftSheetStrategyDefaults, provideLoaderLabels, provideMatchLabels, provideNotificationLabels, provideNotificationManager, provideNotificationManagerConfig, provideNotificationManagerInstance, provideOverlay, provideOverlayManager, provideOverlayRouter, provideOverlayRouterConfig, provideOverlayRouterService, provideOverlayScrollBlocker, providePaginationLabels, providePhoneInputLabels, providePictureConfig, providePipChromeManager, providePipManager, providePipSlotPlaceholderConfig, provideQueryErrorLabels, provideRichTextEditorAlignmentTool, provideRichTextEditorAutoformat, provideRichTextEditorBlockquoteTool, provideRichTextEditorCodeBlockTool, provideRichTextEditorDefaultTools, provideRichTextEditorFloatingToolbar, provideRichTextEditorHeadingTool, provideRichTextEditorImageTool, provideRichTextEditorLabels, provideRichTextEditorLanguageTool, provideRichTextEditorLinkEditor, provideRichTextEditorLinkTool, provideRichTextEditorTableTool, provideRichTextEditorTokenRendering, provideRichTextEditorTools, provideRightSheetStrategy, provideRightSheetStrategyDefaults, provideSchedulerLabels, provideSelectLabels, provideSidebarOverlay, provideSidebarOverlayConfig, provideSidebarOverlayService, provideSliderLabels, provideStandingsLabels, provideStreamConfig, provideStreamConsentConfig, provideStreamLabels, provideStreamManager, provideStreamPlayerErrorConfig, provideStreamPlayerLoadingConfig, provideTableLabels, provideTimeFormat, provideTimePickerLabels, provideTopSheetStrategy, provideTopSheetStrategyDefaults, queryErrorLabelsForLocale, queryErrorResponseFromLegacyError, reconcileColumnOrder, reconcileColumnWidths, reconcileHiddenColumns, reduceSupportPresentation, registerSingleton, requiredLanguages, resizeSpanBounds, resolveBracketLayout, resolveBreakpoint, resolveClosestOverlay, resolveCollisions, resolveFilterOverlaySubmitButton, resolveNotificationStatusIcon, resolveTableCsvRows, richTextEditorToolLabel, rightSheetOverlayStrategy, rowsToPixelHeight, schedulerFeatureConfig, selectOptionsFromQuery, selectOptionsFromV2Query, serializeGridLayout, serializeTableState, setupRichTextEditorFloatingToolbar, setupRichTextEditorLinkEditor, singleEliminationBracketLayout, snapResizeSpan, sortRows, spanHeight, spanWidth, startFullscreenEnterAnimation, startFullscreenLeaveAnimation, startImageUpload, startOfCalendarUnit, stripTrunkZero, supportPresentationIncludesState, swissBracketLayout, tableCsvRowsFromPages, tableFeatureConfig, tableRowsFromQuery, tableRowsFromV2Query, tableToCsv, toChildrenObservable, toGridPosition, toNotificationContent, toPathObservable, toSearchObservable, topSheetOverlayStrategy, transformingBottomSheetToDialogOverlayStrategy, transformingFullScreenDialogToDialogOverlayStrategy, transformingFullScreenDialogToRightSheetOverlayStrategy, wireFormSupport, withPictureBaseUrl };
|
|
65586
|
+
export { ACCORDION_ERROR_CODES, ACCORDION_GROUP_TOKEN, ACCORDION_IMPORTS, ACCORDION_TOKEN, ALIGN_CENTER_ICON, ALIGN_JUSTIFY_ICON, ALIGN_LEFT_ICON, ALIGN_RIGHT_ICON, ARROWS_LEFT_RIGHT_ICON, ARROW_OUT_UP_RIGHT_ICON, ARROW_RIGHT_ICON, ARROW_UP_ICON, AVATAR_IMPORTS, AVATAR_SHAPES, AVATAR_SIZES, AccordionComponent, AccordionContentDirective, AccordionDirective, AccordionGroupComponent, AccordionGroupDirective, AccordionHintDirective, AccordionLabelDirective, AccordionPanelDirective, AccordionTriggerDirective, AvatarComponent, AvatarGroupComponent, BADGE_IMPORTS, BADGE_VARIANTS, BANNER_IMPORTS, BANNER_LABELS, BANNER_TYPES, BOLD_ICON, BRACKET_CARD_CONTEXT, BRACKET_DATA_LAYOUT, BRACKET_DEFAULTS, BRACKET_DENSITY, BRACKET_DENSITY_PRESETS, BRACKET_ERROR_CODES, BRACKET_IMPORTS, BRACKET_LABELS, BRACKET_ROUND_MIRROR_TYPE, BRACKET_SWISS_GROUP_COLOR_TYPE, BREADCRUMB_COLLAPSE_IMPORTS, BREADCRUMB_COLLAPSE_TOKEN, BREADCRUMB_ERROR_CODES, BREADCRUMB_IMPORTS, BREADCRUMB_LABELS, BREADCRUMB_SEGMENT_TOKEN, BREADCRUMB_SEO_IMPORTS, BREADCRUMB_TOKEN, BUTTON_ICON_ALIGNMENTS, BUTTON_IMPORTS, BUTTON_SIZES, BUTTON_SPINNER_CONFIG, BUTTON_TYPES, BUTTON_VARIANTS, BadgeComponent, BannerComponent, BracketComponent, BracketDefaultContinueComponent, BracketDefaultFinalMatchComponent, BracketDefaultMatchComponent, BracketDefaultRoundHeaderComponent, BracketMap, BracketRoundsListComponent, BrandLoaderComponent, BreadcrumbCollapseDirective, BreadcrumbComponent, BreadcrumbDirective, BreadcrumbItemDirective, BreadcrumbItemTemplateDirective, BreadcrumbOutletComponent, BreadcrumbOverflowComponent, BreadcrumbSegmentDirective, BreadcrumbSeoDirective, BreadcrumbSeparatorDirective, ButtonComponent, ButtonDirective, ButtonStylesDirective, CALENDAR_ERROR_CODES, CALENDAR_ICON, CALENDAR_IMPORTS, CALENDAR_LABELS, CARD_IMPORTS, CARD_VARIANTS, CAROUSEL_AUTOPLAY_TOKEN, CAROUSEL_ERROR_CODES, CAROUSEL_IMPORTS, CAROUSEL_LABELS, CAROUSEL_SLIDE_ALIGNMENTS, CAROUSEL_TOKEN, CAROUSEL_TRANSITIONS, CAROUSEL_TRANSITION_DRIVERS, CASCADER_ERROR_CODES, CASCADER_IMPORTS, CASCADER_LABELS, CASCADER_SELECTABLE_LEVELS, CHECKBOX_GROUP_IMPORTS, CHECKBOX_IMPORTS, CHECKBOX_OPTION_VARIANTS, CHECK_ICON, CHEVRON_ICON, CHIP_ERROR_CODES, CHIP_IMPORTS, CHIP_LABELS, CHOICE_FIELD_IMPORTS, CHOICE_FIELD_VARIANTS, CIRCLE_CHECK_ICON, CIRCLE_INFO_ICON, CLIPBOARD_CHECK_ICON, CLOCK_ICON, CODE_BLOCK_ICON, CODE_ICON, COLOR_INPUT_IMPORTS, COMMON_BRACKET_ROUND_TYPE, COPY_BUTTON_IMPORTS, CalendarCellDirective, CalendarComponent, CalendarDirective, CalendarGridDirective, CalendarHeaderDirective, CardComponent, CarouselAutoplayDirective, CarouselComponent, CarouselDirective, CarouselItemDirective, CarouselNextDirective, CarouselPlayToggleDirective, CarouselPreviousDirective, CarouselSlideDirective, CascaderColumnDirective, CascaderComponent, CascaderDirective, CascaderNodeDirective, CascaderPanelComponent, CascaderSearchDirective, CascaderSearchOptionDirective, CascaderSurfaceDirective, CascaderTriggerDirective, CheckboxComponent, CheckboxDirective, CheckboxGroupComponent, CheckboxGroupSelectAllComponent, CheckboxOptionComponent, ChipComponent, ChipDirective, ChipRemoveDirective, ChoiceFieldComponent, ColorInputComponent, ColorInputDirective, CopyButtonDirective, CounterComponent, DAILYMOTION_PLAYER_TOKEN, DATE_FORMAT, DATE_INPUT_ERROR_CODES, DATE_INPUT_IMPORTS, DATE_LOCALE, DATE_PICKER_HOST, DATE_RANGE_INPUT_ERROR_CODES, DATE_RANGE_INPUT_IMPORTS, DATE_TIME_INPUT_ERROR_CODES, DATE_TIME_INPUT_IMPORTS, DATE_TIME_LABELS, DEFAULT_BANNER_LABELS, DEFAULT_BRACKET_LABELS, DEFAULT_BREADCRUMB_LABELS, DEFAULT_BREAKPOINTS, DEFAULT_CALENDAR_LABELS, DEFAULT_CALENDAR_RANGE_STRATEGY, DEFAULT_CAROUSEL_LABELS, DEFAULT_CASCADER_LABELS, DEFAULT_CHIP_LABELS, DEFAULT_DATE_TIME_LABELS, DEFAULT_DROPZONE_LABELS, DEFAULT_FILTER_OVERLAY_LABELS, DEFAULT_FORM_FIELD_LABELS, DEFAULT_GRID_LABELS, DEFAULT_ICON_VARIANT, DEFAULT_INPUT_LABELS, DEFAULT_LOADER_LABELS, DEFAULT_MATCH_CARD_START_TIME_FORMAT, DEFAULT_MATCH_LABELS, DEFAULT_NOTIFICATION_LABELS, DEFAULT_NOTIFICATION_MANAGER_CONFIG, DEFAULT_NOTIFICATION_STATUS_ICONS, DEFAULT_PAGINATION_LABELS, DEFAULT_PHONE_INPUT_LABELS, DEFAULT_PIP_WINDOW_CONFIG, DEFAULT_QUERY_ERROR_LABELS, DEFAULT_RICH_TEXT_EDITOR_LABELS, DEFAULT_RICH_TEXT_EDITOR_TOOLS, DEFAULT_SCHEDULER_LABELS, DEFAULT_SELECT_LABELS, DEFAULT_SLIDER_LABELS, DEFAULT_STANDINGS_LABELS, DEFAULT_STREAM_LABELS, DEFAULT_STREAM_PLAYER_STATE, DEFAULT_TABLE_LABELS, DEFAULT_TIME_PICKER_LABELS, DESCRIPTION_IMPORTS, DESCRIPTION_LIST_IMPORTS, DIVIDER_IMPORTS, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, DROPZONE_ENTRY_STATUSES, DROPZONE_ERROR_CODES, DROPZONE_FILES_ERROR_KIND, DROPZONE_FILE_CONSTRAINTS, DROPZONE_FILE_REJECTION_REASONS, DROPZONE_IMPORTS, DROPZONE_LABELS, DURATION_INPUT_ERROR_CODES, DURATION_INPUT_IMPORTS, DailymotionPlayerComponent, DailymotionPlayerDirective, DailymotionPlayerParamsDirective, DailymotionPlayerSlotComponent, DateInputComponent, DateInputDirective, DateInputFieldDirective, DatePickerPanelComponent, DatePickerSurfaceDirective, DatePickerTriggerDirective, DateRangeInputComponent, DateRangeInputDirective, DateRangeInputFieldDirective, DateTimeInputComponent, DateTimeInputDirective, DateTimeInputFieldDirective, DescriptionComponent, DescriptionListComponent, DividerComponent, DropzoneComponent, DropzoneDirective, DurationInputComponent, DurationInputDirective, DurationInputFieldDirective, ELLIPSIS_ICON, ELLIPSIS_VERTICAL_ICON, EMPTY_STATE_IMPORTS, ET_BUILT_IN_ICON_NAMES, EYE_ICON, EYE_SLASH_ICON, EmptyStateComponent, FACEBOOK_PLAYER_TOKEN, FILE_ICON, FILTER_ICON, FILTER_OVERLAY_ERROR_CODES, FILTER_OVERLAY_IMPORTS, FILTER_OVERLAY_LABELS, FILTER_OVERLAY_TOKEN, FLOATING_ACTION_ERROR_CODES, FLOATING_ACTION_IMPORTS, FLOATING_ACTION_STATES, FLOATING_ACTION_TOKEN, FLOPPY_DISK_ICON, FOCUS_FRAME_ICON, FORM_ERROR_MESSAGE_RESOLVER, FORM_FIELD_APPEARANCES, FORM_FIELD_CONTROL_TYPES, FORM_FIELD_ERROR_CODES, FORM_FIELD_FILLS, FORM_FIELD_IMPORTS, FORM_FIELD_LABELS, FORM_FIELD_LABEL_MODES, FORM_FIELD_SIZES, FORM_FIELD_TOKEN, FabComponent, FacebookPlayerComponent, FacebookPlayerDirective, FacebookPlayerParamsDirective, FacebookPlayerSlotComponent, FilterOverlayResetDirective, FilterOverlaySubmitDirective, FloatingActionAnchorDirective, FloatingActionDirective, FloatingActionScopeDirective, FloatingActionTopDirective, FloatingActionTriggerDirective, FocusRingDirective, FormErrorComponent, FormFieldComponent, FormFieldDirective, GERMAN_FILTER_OVERLAY_LABELS, GERMAN_QUERY_ERROR_LABELS, GRID_2X2_ICON, GRID_DEBUG_IMPORTS, GRID_ERROR_CODES, GRID_IMPORTS, GRID_LABELS, GRID_TOKEN, GROUP_BRACKET_ROUND_TYPE, GridComponent, GridDebugComponent, GridDirective, GridDragDirective, GridItemComponent, GridItemDefaultActionsComponent, GridItemDirective, GridItemRef, GridItemToolbarComponent, GridResizeDirective, HEADING_1_ICON, HEADING_2_ICON, HEADING_3_ICON, HintComponent, ICONS_TOKEN, ICON_DIRECTIVE_TOKEN, ICON_ERROR_CODES, ICON_IMPORTS, ICON_OVERRIDES_TOKEN, IMAGE_ICON, INITIAL_SUPPORT_PRESENTATION_STATE, INPUT_IMPORTS, INPUT_LABELS, INPUT_MASK_HOST, INPUT_TEXT_ALIGNMENTS, INPUT_TYPES, INTERACTIVE_TAGS, ITALIC_ICON, IconButtonComponent, IconDirective, InputComponent, InputDirective, InputMaskDirective, InputPrefixDirective, InputSuffixDirective, KICK_PLAYER_TOKEN, KickPlayerComponent, KickPlayerDirective, KickPlayerParamsDirective, KickPlayerSlotComponent, LINK_ICON, LIST_BULLETED_ICON, LIST_NUMBERED_ICON, LOADER_LABELS, LOCATION_ICON, LOCK_ICON, LabelDirective, MASKED_INPUT_ERROR_CODES, MASKED_INPUT_IMPORTS, MASK_VALUE_MODES, MASONRY_ERROR_CODES, MASONRY_IMPORTS, MASONRY_TOKEN, MATCH_CARD_IMPORTS, MATCH_CARD_SIZES, MATCH_CARD_TOKEN, MATCH_ERROR_CODES, MATCH_LABELS, MATCH_PARTICIPANT_IMPORTS, MENU_ERROR_CODES, MENU_IMPORTS, MENU_ITEM_VARIANTS, MENU_SELECTION_GROUP_MULTIPLE, MENU_SELECTION_GROUP_TOKEN, MENU_SELECTION_ITEM_KIND, MINUS_ICON, MULTI_LANGUAGE_RICH_TEXT_EDITOR_ERROR_CODES, MULTI_LANGUAGE_RICH_TEXT_EDITOR_IMPORTS, MasonryDirective, MasonryItemDirective, MatchCardComponent, MatchCardDirective, MatchCardGameScoresDirective, MatchCardMetaDirective, MatchCardScoreDirective, MatchParticipantComponent, MatchScoreComponent, MenuCheckboxGroupComponent, MenuCheckboxItemComponent, MenuComponent, MenuContextTriggerDirective, MenuDirective, MenuGroupLabelComponent, MenuItemComponent, MenuItemDirective, MenuItemShortcutComponent, MenuPanelDirective, MenuRadioGroupComponent, MenuRadioItemComponent, MenuSearchDirective, MenuSelectionGroupDirective, MenuSelectionItemDirective, MenuSeparatorComponent, MenuSurfaceDirective, MenuTriggerDirective, MultiLanguageRichTextEditorComponent, MultiLanguageRichTextEditorDirective, MultiLanguageRichTextEditorLanguageToolComponent, NAV_TABS_TOKEN, NAV_TAB_IMPORTS, NOTIFICATION_ACTION_SLOTS, NOTIFICATION_ERROR_CODES, NOTIFICATION_IMPORTS, NOTIFICATION_LABELS, NOTIFICATION_STACK_CONTEXT_TOKEN, NOTIFICATION_STATUS, NUMBER_INPUT_IMPORTS, NavTabLinkComponent, NavTabLinkDirective, NavTabsComponent, NavTabsDirective, NavTabsOutletComponent, NavTabsOutletDirective, NotificationActionDirective, NotificationComponent, NotificationDirective, NotificationDismissDirective, NotificationItemDirective, NotificationStackDirective, NotificationSwipeToDismissDirective, NumberInputComponent, NumberInputDirective, OTP_INPUT_IMPORTS, OVERLAY_BACK_OR_CLOSE_TOKEN, OVERLAY_BODY_TOKEN, OVERLAY_CONFIG_CLASS_KEYS, OVERLAY_CONTENT_IMPORTS, OVERLAY_ERROR_CODES, OVERLAY_FOOTER_TOKEN, OVERLAY_HEADER_TEMPLATE_TOKEN, OVERLAY_HEADER_TOKEN, OVERLAY_IMPORTS, OVERLAY_MAIN_TOKEN, OVERLAY_QUERY_PARAM_INPUT_NAME, OVERLAY_REF, OVERLAY_ROUTER_CONFIG_TOKEN, OVERLAY_ROUTER_LINK_TOKEN, OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN, OVERLAY_ROUTER_OUTLET_TOKEN, OVERLAY_ROUTER_TOKEN, OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN, OtpInputComponent, OtpInputDirective, OverlayAnchorDirective, OverlayBackOrCloseDirective, OverlayBodyComponent, OverlayCloseDirective, OverlayContainerComponent, OverlayDirective, OverlayFooterDirective, OverlayHeaderDirective, OverlayHeaderTemplateDirective, OverlayMainDirective, OverlayOriginCloneComponent, OverlayRouteHeaderTemplateOutletComponent, OverlayRouterLinkDirective, OverlayRouterOutletComponent, OverlayRouterOutletDisabledTemplateDirective, OverlaySharedRouteTemplateDirective, OverlaySharedRouteTemplateOutletComponent, OverlaySidebarComponent, OverlaySidebarPageComponent, OverlaySurfaceDirective, OverlayTitleDirective, OverlayTriggerDirective, PAGE_SIZE_SELECT_IMPORTS, PAGINATION_IMPORTS, PAGINATION_LABELS, PARAGRAPH_ICON, PASSWORD_INPUT_IMPORTS, PAUSE_ICON, PENCIL_ICON, PHONE_COUNTRIES, PHONE_INPUT_ERROR_CODES, PHONE_INPUT_IMPORTS, PHONE_INPUT_LABELS, PICTURE_IMPORTS, PICTURE_STATES, PIP_CHROME_REF_TOKEN, PIP_ENTRY_TOKEN, PIP_WINDOW_ASPECT_RATIO_TOKEN, PLAY_ICON, PLUS_ICON, PROGRESS_STEPS_IMPORTS, PROGRESS_STEP_STATES, PageSizeSelectComponent, PaginationComponent, PaginationDirective, PaginationSeoDirective, PasswordInputComponent, PasswordInputDirective, PhoneInputComponent, PhoneInputDirective, PhoneInputFieldDirective, PhoneInputFlagDirective, PictureComponent, PictureErrorDirective, PicturePlaceholderDirective, PipBackDirective, PipBringBackDirective, PipCellDirective, PipCloseDirective, PipCollapseOverlayDirective, PipGridToggleDirective, PipPlayerComponent, PipSlotPlaceholderComponent, PipStageDirective, PipTitleBarDirective, PipTitleBarTemplateDirective, PipWindowComponent, PipWindowParamsDirective, ProgressBarComponent, ProgressStepComponent, ProgressStepsComponent, QUERY_DEVTOOLS_IMPORTS, QUERY_ERROR_ERROR_CODES, QUERY_ERROR_IMPORTS, QUERY_ERROR_LABELS, QUERY_ERROR_TOKEN, QUOTE_ICON, QueryDevtoolsComponent, QueryDevtoolsJsonComponent, QueryDevtoolsJsonStylesComponent, QueryDevtoolsTimelineStylesComponent, QueryDevtoolsToggleComponent, QueryErrorActionsDirective, QueryErrorComponent, QueryErrorDirective, QueryErrorTitleDirective, QueryParamOverlayLinkDirective, RADIO_GROUP_IMPORTS, RADIO_VARIANTS, RATING_IMPORTS, REDO_ICON, RICH_TEXT_EDITOR_FLOATING_TOOLBAR, RICH_TEXT_EDITOR_HEADING_OPTIONS, RICH_TEXT_EDITOR_IMPORTS, RICH_TEXT_EDITOR_INLINE_TOOLS, RICH_TEXT_EDITOR_LABELS, RICH_TEXT_EDITOR_LANGUAGE_TOOL, RICH_TEXT_EDITOR_LINK_EDITOR, RICH_TEXT_EDITOR_TOKEN_CODEC, RICH_TEXT_EDITOR_TOKEN_PALETTE_IMPORTS, RICH_TEXT_EDITOR_TOOL, RICH_TEXT_EDITOR_TOOLS, RICH_TEXT_EDITOR_TOOL_BUTTONS, RICH_TEXT_EDITOR_TRIGGERS_IMPORTS, ROTATE_RIGHT_ICON, RadioComponent, RadioGroupComponent, RangeSliderComponent, RangeSliderDirective, RatingComponent, RatingDirective, RatingIconDirective, RichTextEditorAlignToolComponent, RichTextEditorComponent, RichTextEditorDirective, RichTextEditorFloatingToolbarComponent, RichTextEditorFloatingToolbarDirective, RichTextEditorHeadingToolComponent, RichTextEditorImageEditorComponent, RichTextEditorImageStylesComponent, RichTextEditorImageToolComponent, RichTextEditorLinkEditorComponent, RichTextEditorLinkEditorDirective, RichTextEditorTableStylesComponent, RichTextEditorTableToolComponent, RichTextEditorTokenPaletteComponent, RichTextEditorTokenPopupComponent, RichTextEditorTriggersDirective, SCHEDULER_EDIT_SURFACE_HOST, SCHEDULER_EDIT_SURFACE_OVERLAY, SCHEDULER_ERROR_CODES, SCHEDULER_FEATURE_HOST, SCHEDULER_IMPORTS, SCHEDULER_LABELS, SCROLLABLE_DARKEN_IMPORTS, SCROLLABLE_DRAG_IMPORTS, SCROLLABLE_ERROR_CODES, SCROLLABLE_IMPORTS, SCROLLABLE_NAVIGATION_IMPORTS, SEGMENTED_BUTTON_GROUP_VARIANTS, SEGMENTED_BUTTON_IMPORTS, SELECTION_LIST_IMPORTS, SELECTION_LIST_MULTIPLE, SELECTION_LIST_TOKEN, SELECT_ERROR_CODES, SELECT_FILTER_MODES, SELECT_IMPORTS, SELECT_LABELS, SIDEBAR_OVERLAY_CONFIG, SIDEBAR_OVERLAY_TOKEN, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, SKELETON_IMPORTS, SLIDER_ERROR_CODES, SLIDER_IMPORTS, SLIDER_LABELS, SLIDER_MARK_VALUE_ATTRIBUTE, SLIDER_TOKEN, SNAP_HYSTERESIS, SOOP_PLAYER_TOKEN, SPLIT_BUTTON_ERROR_CODES, STANDINGS_ERROR_CODES, STANDINGS_IMPORTS, STANDINGS_LABELS, STAR_ICON, STREAM_ALL_IMPORTS, STREAM_CONSENT_TOKEN, STREAM_DAILYMOTION_IMPORTS, STREAM_FACEBOOK_IMPORTS, STREAM_IMPORTS, STREAM_KICK_IMPORTS, STREAM_LABELS, STREAM_PIP_IMPORTS, STREAM_PLAYER_COMPONENT_TOKEN, STREAM_PLAYER_ERROR_CONTEXT_TOKEN, STREAM_PLAYER_ERROR_TOKEN, STREAM_PLAYER_PARAMS_TOKEN, STREAM_PLAYER_SLOT_TOKEN, STREAM_PLAYER_TOKEN, STREAM_SLOT_PLAYER_ID_TOKEN, STREAM_SOOP_IMPORTS, STREAM_TIKTOK_IMPORTS, STREAM_TWITCH_IMPORTS, STREAM_USER_CONSENT_PROVIDER_TOKEN, STREAM_VIMEO_IMPORTS, STREAM_YOUTUBE_IMPORTS, STRIKETHROUGH_ICON, SUPPORT_CONTENT_STATE, SUPPORT_TRANSITION_DIRECTION, SWISS_BRACKET_ROUND_TYPE, SWITCH_IMPORTS, SchedulerActionAddAppointmentDirective, SchedulerActionAddSubAppointmentDirective, SchedulerActionDeleteDirective, SchedulerAgendaDirective, SchedulerAgendaViewComponent, SchedulerBadgeChainCountComponent, SchedulerBadgeChainCountDirective, SchedulerBadgeColorDotComponent, SchedulerBadgeColorDotDirective, SchedulerBadgeLocationComponent, SchedulerBadgeLocationDirective, SchedulerBadgeTimeRangeComponent, SchedulerBadgeTimeRangeDirective, SchedulerBadgeTitleComponent, SchedulerBadgeTitleDirective, SchedulerComponent, SchedulerDirective, SchedulerEditColorComponent, SchedulerEditColorDirective, SchedulerEditDescriptionComponent, SchedulerEditDescriptionDirective, SchedulerEditLocationComponent, SchedulerEditLocationDirective, SchedulerEditSurfaceComponent, SchedulerEditSurfaceDirective, SchedulerEditTimeRangeComponent, SchedulerEditTimeRangeDirective, SchedulerEditTitleComponent, SchedulerEditTitleDirective, SchedulerMonthDirective, SchedulerMonthViewComponent, SchedulerTimeGridDirective, SchedulerTimeGridViewComponent, ScrollableActiveChildDirective, ScrollableButtonsComponent, ScrollableButtonsDirective, ScrollableComponent, ScrollableDarkenDirective, ScrollableDirective, ScrollableDragDirective, ScrollableIgnoreChildDirective, ScrollableLoadingTemplateDirective, ScrollableMasksComponent, ScrollableNavigationComponent, ScrollableNavigationDirective, ScrollableSnapDirective, SegmentedButtonComponent, SegmentedButtonGroupComponent, SelectComponent, SelectDirective, SelectEmptyDirective, SelectErrorDirective, SelectListboxDirective, SelectLoadingDirective, SelectOptionComponent, SelectOptionDirective, SelectOptionGroupComponent, SelectOptionGroupDirective, SelectOptionTemplateDirective, SelectOptionsDirective, SelectPanelComponent, SelectSearchDirective, SelectSurfaceDirective, SelectTriggerDirective, SelectValueDirective, SelectViewportDirective, SelectVirtualOptionComponent, SelectVirtualOptionDirective, SelectionListControlDirective, SelectionListDirective, SelectionOptionDirective, SkeletonComponent, SkeletonItemComponent, SkeletonTextComponent, SliderComponent, SliderDirective, SliderThumbDirective, SliderThumbLabelDirective, SliderTrackDirective, SoopPlayerComponent, SoopPlayerDirective, SoopPlayerParamsDirective, SoopPlayerSlotComponent, SpinnerComponent, SplitButtonActionDirective, SplitButtonComponent, SplitButtonDirective, SplitButtonTriggerDirective, StandingsComponent, StandingsDirective, StreamConsentAcceptDirective, StreamConsentComponent, StreamConsentDirective, StreamPipChromeComponent, StreamPlayerErrorComponent, StreamPlayerErrorDirective, StreamPlayerLoadingComponent, StreamPlayerSlotDirective, SwitchComponent, SwitchDirective, TABLE_CELL_ERROR_TOOLTIP_IMPORTS, TABLE_COLUMN_CHOOSER_IMPORTS, TABLE_COLUMN_MENU_IMPORTS, TABLE_CSV_EXPORT_IMPORTS, TABLE_ERROR_CODES, TABLE_FEATURE_HOST, TABLE_FILTER_IMPORTS, TABLE_GROUP_HEADERS_IMPORTS, TABLE_ICON, TABLE_IMPORTS, TABLE_INLINE_EDIT_IMPORTS, TABLE_KEYBOARD_NAV_IMPORTS, TABLE_LABELS, TABLE_REORDER_IMPORTS, TABLE_RESIZE_IMPORTS, TABLE_ROW_EXPANSION_IMPORTS, TABLE_SELECTION_IMPORTS, TABLE_SKELETON_IMPORTS, TABLE_STATE_PERSISTENCE_IMPORTS, TABLE_STICKY_COLUMNS_IMPORTS, TABLE_VIRTUAL_SCROLL_IMPORTS, TAB_BAR_FITS, TAB_BAR_ORIENTATIONS, TAB_BAR_TOKEN, TAB_BAR_TRIGGER_TOKEN, TAB_BAR_VARIANTS, TAB_ERROR_CODES, TAB_GROUP_TOKEN, TAB_IMPORTS, TAB_PANEL_TOKEN, TAB_SIZES, TAG_INPUT_ERROR_CODES, TAG_INPUT_IMPORTS, TEXTAREA_IMPORTS, TEXTAREA_RESIZE_MODES, TEXT_ALIGNS, TIKTOK_PLAYER_TOKEN, TIMES_ICON, TIME_FORMAT, TIME_INPUT_ERROR_CODES, TIME_INPUT_IMPORTS, TIME_PICKER_ERROR_CODES, TIME_PICKER_IMPORTS, TIME_PICKER_LABELS, TOGGLETIP_ERROR_CODES, TOGGLETIP_IMPORTS, TOOLBAR_IMPORTS, TOOLBAR_ORIENTATIONS, TOOLTIP_ERROR_CODES, TOOLTIP_IMPORTS, TOURNAMENT_MODE, TRASH_ICON, TREE_ERROR_CODES, TREE_IMPORTS, TREE_LEVEL_STATUSES, TREE_MARKERS, TREE_SELECTION_MODES, TRIANGLE_EXCLAMATION_ICON, TROPHY_ICON, TWITCH_PLAYER_TOKEN, TabBarDirective, TabBarTriggerDirective, TabBarUnderlineDirective, TabComponent, TabGroupComponent, TabGroupDirective, TabLabelDirective, TabPanelDirective, TabTriggerDirective, TableCellDirective, TableCellEditDirective, TableCellErrorMarkComponent, TableCellErrorTooltipDirective, TableCellSkeletonDirective, TableColumnChooserComponent, TableColumnMenuDirective, TableColumnMenuTriggerComponent, TableComponent, TableCsvExportDirective, TableDetailStylesComponent, TableExpanderCellComponent, TableFilterOptionDirective, TableFilterTriggerComponent, TableFiltersDirective, TableFooterCellDirective, TableFooterDirective, TableGroupHeaderRowComponent, TableGroupHeadersDirective, TableHeaderCellDirective, TableInlineEditDirective, TableInlineEditStylesComponent, TableKeyboardNavDirective, TableReorderDirective, TableReorderOverlayComponent, TableResizeDirective, TableResizeGripComponent, TableRowDetailComponent, TableRowExpansionDirective, TableSelectAllCellComponent, TableSelectCellComponent, TableSelectionDirective, TableSkeletonDirective, TableSkeletonRowsComponent, TableStatePersistenceDirective, TableStickyColumnsDirective, TableVirtualScrollDirective, TableVirtualScrollStylesComponent, TagInputComponent, TagInputDirective, TagInputFieldDirective, TextButtonComponent, TextFieldControlDirective, TextareaComponent, TextareaDirective, TikTokPlayerComponent, TikTokPlayerDirective, TikTokPlayerParamsDirective, TikTokPlayerSlotComponent, TimeInputComponent, TimeInputDirective, TimeInputFieldDirective, TimePickerColumnDirective, TimePickerComponent, TimePickerDirective, TimePickerOptionDirective, ToggletipCloseDirective, ToggletipComponent, ToggletipDirective, ToggletipTriggerDirective, ToolbarComponent, ToolbarDirective, TooltipComponent, TooltipDirective, TreeComponent, TreeDirective, TreeMarkerComponent, TreeNodeDefDirective, TreeNodeDirective, TwitchPlayerComponent, TwitchPlayerDirective, TwitchPlayerParamsDirective, TwitchPlayerSlotComponent, UNDERLINE_ICON, UNDO_ICON, UNIT_MS, UPLOAD_ICON, VIMEO_PLAYER_TOKEN, VimeoPlayerComponent, VimeoPlayerDirective, VimeoPlayerParamsDirective, VimeoPlayerSlotComponent, WINDOW_CONTROL_BUTTON_KINDS, WINDOW_CONTROL_BUTTON_SIZES, WindowControlButtonComponent, YOUTUBE_PLAYER_SLOT_TOKEN, YOUTUBE_PLAYER_TOKEN, YoutubePlayerComponent, YoutubePlayerDirective, YoutubePlayerParamsDirective, YoutubePlayerSlotComponent, YoutubePlayerSlotDirective, abortFullscreenAnimation, anchoredDialogOverlayStrategy, anchoredOverlayStrategy, autoPlace, bottomSheetOverlayStrategy, bracketFitsWidth, bracketNaturalWidth, buildAnchoredRuntimePositionStrategy, canHaveChildren, cascaderFromQuery, centeredOverlayStrategy, clampPosition, clampResizeRect, cleanupFullscreenAnimation, cleanupFullscreenAnimationStyles, compactLayout, computeGeometry, computeGridHeight, countDescendants, createAnchoredPanelController, createAutoScroller, createCardMask, createCurrencyMask, createDefaultDropzoneArgs, createDropzoneUpload, createExistingDropzoneEntry, createFileDropzoneEntry, createFixedLengthRangeStrategy, createGridAdapter, createIbanMask, createNormalizedBracketMatch, createNotificationPromiseFn, createNotificationRef, createOverlayOpener, createOverlayRef, createOverlayStrategyController, createOverlayUnsavedChangesGuard, createPipChromeAnimations, createPipChromeState, createRichTextEditorTrigger, createRichTextEditorTriggerWithQuery, createStreamConfig, createStreamPlayerSlot, createTableRowsSource, createTableStateStorage, createV2DropzoneUpload, createWeekRangeStrategy, defaultCompareWith$1 as defaultCompareWith, defaultDropzoneRejectionMessage, defineOverlay, defineQueryParamOverlay, deriveDurationFormatSpec, deserializeGridLayout, deserializeTableState, dialogOverlayStrategy, disposeDropzoneEntry, doubleEliminationBracketLayout, dropzoneFiles, enableDragToDismiss, extractFirstImageUrl, filterOverlayLabelsForLocale, filterOverlayPreviewFromQuery, filterRows, findCollision, findNextRelevantHtmlElement, findScrollableAncestor, formatDuration, formatFileSize, fromGridPosition, fullScreenDialogOverlayStrategy, generateBracketDataForEthlete, generateRoundTypeFromEthleteRoundType, generateTournamentModeFormEthleteRounds, getClosestOverlay, getOriginCoordinatesAndDimensions, hysteresisRound, iconRegistryKey, indexOfNode, injectAnchoredDialogStrategy, injectAnchoredDialogStrategyDefaults, injectBannerLabels, injectBottomSheetStrategy, injectBottomSheetStrategyDefaults, injectBracketConfig, injectBracketLabels, injectBreadcrumbLabels, injectBreadcrumbManager, injectCalendarLabels, injectCarouselLabels, injectCascaderLabels, injectChipLabels, injectDateFormat, injectDateLocale, injectDateTimeLabels, injectDialogStrategy, injectDialogStrategyDefaults, injectDropzoneLabels, injectFilterOverlay, injectFilterOverlayLabels, injectFormFieldLabels, injectFormSupport, injectFullscreenDialogStrategy, injectFullscreenDialogStrategyDefaults, injectGridConfig, injectGridLabels, injectInputLabels, injectLeftSheetStrategy, injectLeftSheetStrategyDefaults, injectLoaderLabels, injectMatchLabels, injectNotificationLabels, injectNotificationManager, injectNotificationManagerConfig, injectOverlayManager, injectOverlayRouter, injectOverlayScrollBlocker, injectOverlaySurfaceContext, injectPaginationLabels, injectPhoneInputLabels, injectPictureConfig, injectPipChromeManager, injectPipManager, injectPipSlotPlaceholderConfig, injectQueryErrorLabels, injectRichTextEditorLabels, injectRichTextEditorTools, injectRightSheetStrategy, injectRightSheetStrategyDefaults, injectSchedulerEditSurfaceHost, injectSchedulerFeatureHost, injectSchedulerLabels, injectSelectLabels, injectSidebarOverlay, injectSliderLabels, injectStandingsLabels, injectStreamConfig, injectStreamConsentConfig, injectStreamLabels, injectStreamManager, injectStreamPlayerErrorConfig, injectStreamPlayerLoadingConfig, injectStreamScriptLoader, injectStreamUserConsentProvider, injectTableCsvExport, injectTableFeatureHost, injectTableLabels, injectTimeFormat, injectTimePickerLabels, injectTopSheetStrategy, injectTopSheetStrategyDefaults, isFileAccepted, isHtmlElement, isInteractiveElement, isPointerEvent, isTargetInsideOverlayTree, isTouchEvent, itemsCollide, kindOf, leftSheetOverlayStrategy, legacyQueryErrorSource, mapLayoutToBreakpoint, matchCountryByDialCode, matchParticipantDisplayName, mergeOverlayBreakpointConfigs, mergeOverlayConfigs, mirroredDoubleEliminationBracketLayout, mirroredSingleEliminationBracketLayout, mountRichTextEditorImageStyles, mountRichTextEditorTableStyles, nodesEqual$1 as nodesEqual, normalizeEthleteBracketMatch, normalizeEthleteGroupRanking, normalizeEthleteMatch, normalizeEthleteMatchStatus, normalizeEthleteMedia, normalizeEthleteParticipant, normalizeEthletePlacement, normalizePictureSizes, normalizePictureSource, paginate, parseDuration, phoneCountryFlag, phoneCountryName, pixelRectsEqual, positionToPixelRect, positionsEqual, projectDragCell, provideAnchoredDialogStrategy, provideAnchoredDialogStrategyDefaults, provideBannerLabels, provideBottomSheetStrategy, provideBottomSheetStrategyDefaults, provideBracketConfig, provideBracketLabels, provideBreadcrumbLabels, provideBreadcrumbManager, provideCalendarLabels, provideCarouselLabels, provideCascaderLabels, provideChipLabels, provideDateFormat, provideDateLocale, provideDateTimeLabels, provideDialogStrategy, provideDialogStrategyDefaults, provideDropzoneLabels, provideFilterOverlay, provideFilterOverlayLabels, provideFormErrorMessageResolver, provideFormFieldLabels, provideFormSupport, provideFullscreenDialogStrategy, provideFullscreenDialogStrategyDefaults, provideGridConfig, provideGridLabels, provideIconOverrides, provideIcons, provideInputLabels, provideLeftSheetStrategy, provideLeftSheetStrategyDefaults, provideLoaderLabels, provideMatchLabels, provideNotificationLabels, provideNotificationManager, provideNotificationManagerConfig, provideNotificationManagerInstance, provideOverlay, provideOverlayManager, provideOverlayRouter, provideOverlayRouterConfig, provideOverlayRouterService, provideOverlayScrollBlocker, providePaginationLabels, providePhoneInputLabels, providePictureConfig, providePipChromeManager, providePipManager, providePipSlotPlaceholderConfig, provideQueryErrorLabels, provideRichTextEditorAlignmentTool, provideRichTextEditorAutoformat, provideRichTextEditorBlockquoteTool, provideRichTextEditorCodeBlockTool, provideRichTextEditorDefaultTools, provideRichTextEditorFloatingToolbar, provideRichTextEditorHeadingTool, provideRichTextEditorImageTool, provideRichTextEditorLabels, provideRichTextEditorLanguageTool, provideRichTextEditorLinkEditor, provideRichTextEditorLinkTool, provideRichTextEditorTableTool, provideRichTextEditorTokenRendering, provideRichTextEditorTools, provideRightSheetStrategy, provideRightSheetStrategyDefaults, provideSchedulerLabels, provideSelectLabels, provideSidebarOverlay, provideSidebarOverlayConfig, provideSidebarOverlayService, provideSliderLabels, provideStandingsLabels, provideStreamConfig, provideStreamConsentConfig, provideStreamLabels, provideStreamManager, provideStreamPlayerErrorConfig, provideStreamPlayerLoadingConfig, provideTableLabels, provideTimeFormat, provideTimePickerLabels, provideTopSheetStrategy, provideTopSheetStrategyDefaults, queryErrorLabelsForLocale, queryErrorResponseFromLegacyError, reconcileColumnOrder, reconcileColumnWidths, reconcileHiddenColumns, reduceSupportPresentation, registerSingleton, requiredLanguages, resizeSpanBounds, resolveBracketLayout, resolveBreakpoint, resolveClosestOverlay, resolveCollisions, resolveFilterOverlaySubmitButton, resolveNotificationStatusIcon, resolveTableCsvRows, richTextEditorToolLabel, rightSheetOverlayStrategy, rowsToPixelHeight, schedulerFeatureConfig, selectOptionsFromQuery, selectOptionsFromV2Query, serializeGridLayout, serializeTableState, setupRichTextEditorFloatingToolbar, setupRichTextEditorLinkEditor, singleEliminationBracketLayout, snapResizeSpan, sortRows, spanHeight, spanWidth, startFullscreenEnterAnimation, startFullscreenLeaveAnimation, startImageUpload, startOfCalendarUnit, stripTrunkZero, supportPresentationIncludesState, swissBracketLayout, tableCsvRowsFromPages, tableFeatureConfig, tableRowsFromQuery, tableRowsFromV2Query, tableToCsv, toChildrenObservable$1 as toChildrenObservable, toGridPosition, toNotificationContent, toPathObservable, toSearchObservable, topSheetOverlayStrategy, transformingBottomSheetToDialogOverlayStrategy, transformingFullScreenDialogToDialogOverlayStrategy, transformingFullScreenDialogToRightSheetOverlayStrategy, wireFormSupport, withPictureBaseUrl };
|
|
63758
65587
|
//# sourceMappingURL=ethlete-components.mjs.map
|