@ethlete/components 1.0.0-next.44 → 1.0.0-next.46
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 +30 -0
- package/fesm2022/ethlete-components.mjs +540 -144
- package/fesm2022/ethlete-components.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-components.d.ts +226 -43
|
@@ -4,7 +4,7 @@ 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, createObjectUrlHandle, createFlipAnimationGroup, ColorInteractiveHasFocusDirective, dragGestureFrom, injectFocusVisibleTracker, htmlToMarkdown, markdownToHtml, injectHasTouchInput, signalHostElementDimensions, DragHandleDirective, ResizeHandlesComponent, numberBreakpointTransform, applyLinkBinding, applyHeadTitleBinding, injectColorPalette, injectViewportSize, injectFileDownload, getFocusableElements, 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, addMinutes, addHours } 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, differenceInCalendarDays, addMinutes, differenceInMinutes, addHours } from 'date-fns';
|
|
8
8
|
import { takeUntilDestroyed, toObservable, toSignal, outputFromObservable, outputToObservable, rxResource } from '@angular/core/rxjs-interop';
|
|
9
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';
|
|
@@ -25574,6 +25574,14 @@ class SelectionListDirective {
|
|
|
25574
25574
|
this.required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
25575
25575
|
this.name = input('', /* @ts-ignore */
|
|
25576
25576
|
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
25577
|
+
/**
|
|
25578
|
+
* `aria-label` / `aria-labelledby` written on the group itself, for a set of options named by
|
|
25579
|
+
* something other than a projected `<et-label>` - a filter toolbar whose caption sits elsewhere, a
|
|
25580
|
+
* segmented control whose name should not be visible. Without them the field's dev-time labelling
|
|
25581
|
+
* guard (ET2201) fires on a group that *is* labelled.
|
|
25582
|
+
*/
|
|
25583
|
+
this.ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
25584
|
+
this.ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
|
|
25577
25585
|
this.multiple = computed(() => this.multipleOverride ?? this.multipleInput(), /* @ts-ignore */
|
|
25578
25586
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
25579
25587
|
this.selection = createSelectionState({
|
|
@@ -25595,8 +25603,13 @@ class SelectionListDirective {
|
|
|
25595
25603
|
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
25596
25604
|
this.controlType = signal(FORM_FIELD_CONTROL_TYPES.SELECTION_LIST, /* @ts-ignore */
|
|
25597
25605
|
...(ngDevMode ? [{ debugName: "controlType" }] : /* istanbul ignore next */ []));
|
|
25598
|
-
this.
|
|
25606
|
+
this.registeredLabelId = computed(() => this.formField?.registeredLabel()?.id() ?? null, /* @ts-ignore */
|
|
25607
|
+
...(ngDevMode ? [{ debugName: "registeredLabelId" }] : /* istanbul ignore next */ []));
|
|
25608
|
+
/** A consumer-supplied `aria-labelledby` wins over the id of a projected `<et-label>`. */
|
|
25609
|
+
this.labelId = computed(() => this.ariaLabelledby()?.trim() || this.registeredLabelId(), /* @ts-ignore */
|
|
25599
25610
|
...(ngDevMode ? [{ debugName: "labelId" }] : /* istanbul ignore next */ []));
|
|
25611
|
+
this.hasCustomAccessibleName = computed(() => !!this.ariaLabel()?.trim() || !!this.ariaLabelledby()?.trim(), /* @ts-ignore */
|
|
25612
|
+
...(ngDevMode ? [{ debugName: "hasCustomAccessibleName" }] : /* istanbul ignore next */ []));
|
|
25600
25613
|
this.formField?.registerControl(this);
|
|
25601
25614
|
this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
25602
25615
|
}
|
|
@@ -25616,7 +25629,7 @@ class SelectionListDirective {
|
|
|
25616
25629
|
}
|
|
25617
25630
|
}
|
|
25618
25631
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SelectionListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25619
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SelectionListDirective, isStandalone: true, selector: "[etSelectionList]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mixed: { classPropertyName: "mixed", publicName: "mixed", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, multipleInput: { classPropertyName: "multipleInput", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", mixed: "mixedChange", touched: "touchedChange" }, host: { properties: { "attr.role": "role()", "attr.aria-invalid": "shouldDisplayError() || null", "attr.aria-required": "required() || null", "attr.aria-describedby": "describedBy() || null", "attr.aria-labelledby": "labelId() || null", "attr.data-disabled": "disabled() || null", "attr.data-mixed": "mixed() || null", "attr.aria-readonly": "!multiple() && readonly() || null", "attr.data-readonly": "readonly() || null" } }, providers: [{ provide: SELECTION_LIST_TOKEN, useExisting: SelectionListDirective }], ngImport: i0 }); }
|
|
25632
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SelectionListDirective, isStandalone: true, selector: "[etSelectionList]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mixed: { classPropertyName: "mixed", publicName: "mixed", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, multipleInput: { classPropertyName: "multipleInput", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", mixed: "mixedChange", touched: "touchedChange" }, host: { properties: { "attr.role": "role()", "attr.aria-invalid": "shouldDisplayError() || null", "attr.aria-required": "required() || null", "attr.aria-describedby": "describedBy() || null", "attr.aria-label": "ariaLabel()?.trim() || null", "attr.aria-labelledby": "labelId() || null", "attr.data-disabled": "disabled() || null", "attr.data-mixed": "mixed() || null", "attr.aria-readonly": "!multiple() && readonly() || null", "attr.data-readonly": "readonly() || null" } }, providers: [{ provide: SELECTION_LIST_TOKEN, useExisting: SelectionListDirective }], ngImport: i0 }); }
|
|
25620
25633
|
}
|
|
25621
25634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SelectionListDirective, decorators: [{
|
|
25622
25635
|
type: Directive,
|
|
@@ -25628,6 +25641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
25628
25641
|
'[attr.aria-invalid]': 'shouldDisplayError() || null',
|
|
25629
25642
|
'[attr.aria-required]': 'required() || null',
|
|
25630
25643
|
'[attr.aria-describedby]': 'describedBy() || null',
|
|
25644
|
+
'[attr.aria-label]': 'ariaLabel()?.trim() || null',
|
|
25631
25645
|
'[attr.aria-labelledby]': 'labelId() || null',
|
|
25632
25646
|
'[attr.data-disabled]': 'disabled() || null',
|
|
25633
25647
|
'[attr.data-mixed]': 'mixed() || null',
|
|
@@ -25637,7 +25651,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
25637
25651
|
'[attr.data-readonly]': 'readonly() || null',
|
|
25638
25652
|
},
|
|
25639
25653
|
}]
|
|
25640
|
-
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], mixed: [{ type: i0.Input, args: [{ isSignal: true, alias: "mixed", required: false }] }, { type: i0.Output, args: ["mixedChange"] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], multipleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }] } });
|
|
25654
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], mixed: [{ type: i0.Input, args: [{ isSignal: true, alias: "mixed", required: false }] }, { type: i0.Output, args: ["mixedChange"] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], multipleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }] } });
|
|
25641
25655
|
|
|
25642
25656
|
let uniqueOptionLabelId = 0;
|
|
25643
25657
|
/**
|
|
@@ -25846,7 +25860,7 @@ class SegmentedButtonGroupComponent {
|
|
|
25846
25860
|
});
|
|
25847
25861
|
}
|
|
25848
25862
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SegmentedButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25849
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SegmentedButtonGroupComponent, isStandalone: true, selector: "et-segmented-button-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.et-tab-scale": "isTabsVariant()", "attr.data-size": "size()", "attr.data-variant": "variant()", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-segmented-button-group" }, providers: [provideFormSupport()], viewQueries: [{ propertyName: "errorContentRef", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContentRef", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContentRef", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "errorAnimatableRef", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatableRef", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatableRef", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: SelectionListDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content select=\"et-label\" />\n<ng-content select=\".et-segmented-button-group-label\" />\n\n<div class=\"et-segmented-button-group-buttons\">\n <ng-content />\n</div>\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-segmented-button-group-support\">\n <div class=\"et-segmented-button-group-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n [attr.data-active]=\"support.errorActive() || null\"\n [etProvideColor]=\"support.errorColorTheme\"\n class=\"et-segmented-button-group-support-content et-segmented-button-group-errors\"\n etAnimatable\n >\n @for (error of support.visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (support.shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n [attr.data-active]=\"support.warningActive() || null\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-segmented-button-group-support-content et-segmented-button-group-warnings\"\n etAnimatable\n >\n @for (warning of support.visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (support.shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n class=\"et-segmented-button-group-support-content et-segmented-button-group-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-segmented-button-group-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-segmented-button-group-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-segmented-button-group-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-segmented-button-group-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-segmented-button-group-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-segmented-button-group-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-segmented-button-group-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}@property --et-segmented-button-group-track-padding{syntax: \"<length>\"; inherits: true; initial-value: 3px;}@property --et-segmented-button-group-track-radius{syntax: \"<length>\"; inherits: true; initial-value: 10px;}et-segmented-button-group{display:flex;flex-direction:column;gap:var(--et-segmented-button-group-gap);color:var(--et-surface-color-solid, currentColor)}et-segmented-button-group>et-label,et-segmented-button-group .et-segmented-button-group-label{font-size:var(--et-segmented-button-group-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-segmented-button-group:where([data-size=sm]){--et-segmented-button-group-label-font-size: 12px;--et-segmented-button-group-gap: 8px}et-segmented-button-group:where([data-size=sm]) et-segmented-button{--et-segmented-button-padding-x: 10px;--et-segmented-button-padding-y: 4px;font-size:12px}et-segmented-button-group:where([data-size=lg]){--et-segmented-button-group-label-font-size: 14px;--et-segmented-button-group-gap: 12px}et-segmented-button-group:where([data-size=lg]) et-segmented-button{--et-segmented-button-padding-x: 18px;--et-segmented-button-padding-y: 8px;font-size:16px}et-segmented-button-group .et-segmented-button-group-buttons{display:inline-flex;align-self:flex-start;gap:2px;padding:var(--et-segmented-button-group-track-padding);border-radius:var(--et-segmented-button-group-track-radius);background-color:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 8%,transparent)}et-segmented-button-group[data-error] .et-segmented-button-group-buttons{box-shadow:inset 0 0 0 1px var(--et-theme-color-primary-solid)}et-segmented-button-group:where([data-variant=tabs]) .et-segmented-button-group-buttons{gap:0;padding:0;border-radius:0;background-color:transparent;box-shadow:inset 0 calc(var(--et-tab-underline-size) * -1) 0 0 color-mix(in srgb,var(--et-surface-border-solid, currentColor) calc(var(--et-tab-baseline-opacity) * 100%),transparent)}et-segmented-button-group:where([data-variant=tabs])[data-error] .et-segmented-button-group-buttons{box-shadow:inset 0 calc(var(--et-tab-underline-size) * -1) 0 0 var(--et-theme-color-primary-solid)}et-segmented-button-group:where([data-variant=tabs]) et-segmented-button{--et-segmented-button-padding-x: var(--et-tab-padding-inline);--et-segmented-button-padding-y: var(--et-tab-padding-block);--et-segmented-button-tab-underline-size: var(--et-tab-underline-size);--et-segmented-button-tab-underline-radius: var(--et-tab-underline-radius);font-size:var(--et-tab-font-size)}et-segmented-button-group[data-mixed] .et-segmented-button-group-buttons{outline:1px dashed var(--et-theme-color-primary-solid, currentColor);outline-offset:-1px}et-segmented-button-group .et-segmented-button-group-support{overflow:clip;block-size:0}et-segmented-button-group .et-segmented-button-group-support-stack{position:relative;display:grid}et-segmented-button-group .et-segmented-button-group-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-segmented-button-group .et-segmented-button-group-support-content[data-active]{opacity:1;transform:translateY(0)}et-segmented-button-group .et-segmented-button-group-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-segmented-button-group-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-segmented-button-group .et-segmented-button-group-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-segmented-button-group-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-segmented-button-group .et-segmented-button-group-hint{padding-block-start:4px;font-size:var(--et-segmented-button-group-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-segmented-button-group .et-segmented-button-group-hint:empty{display:none}et-segmented-button-group[data-can-animate] .et-segmented-button-group-support{transition:block-size var(--et-segmented-button-group-support-duration) ease}et-segmented-button-group[data-can-animate] .et-segmented-button-group-support-content{transition:opacity var(--et-segmented-button-group-support-duration) ease,transform var(--et-segmented-button-group-support-duration) ease}@starting-style{et-segmented-button-group[data-can-animate] .et-segmented-button-group-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-segmented-button-group-support-offset) * -1))}}@media(prefers-reduced-motion:reduce){et-segmented-button-group{--et-segmented-button-group-support-duration: 1ms;--et-segmented-button-group-support-offset: 0px}}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
25863
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SegmentedButtonGroupComponent, isStandalone: true, selector: "et-segmented-button-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.et-tab-scale": "isTabsVariant()", "attr.data-size": "size()", "attr.data-variant": "variant()", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-segmented-button-group" }, providers: [provideFormSupport()], viewQueries: [{ propertyName: "errorContentRef", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContentRef", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContentRef", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "errorAnimatableRef", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatableRef", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatableRef", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: SelectionListDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content select=\"et-label\" />\n<ng-content select=\".et-segmented-button-group-label\" />\n\n<div class=\"et-segmented-button-group-buttons\">\n <ng-content />\n</div>\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-segmented-button-group-support\">\n <div class=\"et-segmented-button-group-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n [attr.data-active]=\"support.errorActive() || null\"\n [etProvideColor]=\"support.errorColorTheme\"\n class=\"et-segmented-button-group-support-content et-segmented-button-group-errors\"\n etAnimatable\n >\n @for (error of support.visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (support.shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n [attr.data-active]=\"support.warningActive() || null\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-segmented-button-group-support-content et-segmented-button-group-warnings\"\n etAnimatable\n >\n @for (warning of support.visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (support.shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n class=\"et-segmented-button-group-support-content et-segmented-button-group-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-segmented-button-group-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-segmented-button-group-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-segmented-button-group-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-segmented-button-group-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-segmented-button-group-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-segmented-button-group-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-segmented-button-group-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}@property --et-segmented-button-group-track-padding{syntax: \"<length>\"; inherits: true; initial-value: 3px;}@property --et-segmented-button-group-track-radius{syntax: \"<length>\"; inherits: true; initial-value: 10px;}et-segmented-button-group{display:flex;flex-direction:column;gap:var(--et-segmented-button-group-gap);color:var(--et-surface-color-solid, currentColor)}et-segmented-button-group>et-label,et-segmented-button-group .et-segmented-button-group-label{font-size:var(--et-segmented-button-group-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-segmented-button-group:where([data-size=sm]){--et-segmented-button-group-label-font-size: 12px;--et-segmented-button-group-gap: 8px}et-segmented-button-group:where([data-size=sm]) et-segmented-button{--et-segmented-button-padding-x: 10px;--et-segmented-button-padding-y: 4px;font-size:12px}et-segmented-button-group:where([data-size=lg]){--et-segmented-button-group-label-font-size: 14px;--et-segmented-button-group-gap: 12px}et-segmented-button-group:where([data-size=lg]) et-segmented-button{--et-segmented-button-padding-x: 18px;--et-segmented-button-padding-y: 8px;font-size:16px}et-segmented-button-group .et-segmented-button-group-buttons{display:inline-flex;align-self:flex-start;gap:2px;padding:var(--et-segmented-button-group-track-padding);border-radius:var(--et-segmented-button-group-track-radius);background-color:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 8%,transparent)}et-segmented-button-group[data-error] .et-segmented-button-group-buttons{box-shadow:inset 0 0 0 1px var(--et-theme-color-primary-solid)}et-segmented-button-group:where([data-variant=tabs]) .et-segmented-button-group-buttons{gap:0;padding:0;border-radius:0;background-color:transparent;box-shadow:inset 0 calc(var(--et-tab-underline-size) * -1) 0 0 color-mix(in srgb,var(--et-surface-border-solid, currentColor) calc(var(--et-tab-baseline-opacity) * 100%),transparent)}et-segmented-button-group:where([data-variant=tabs])[data-error] .et-segmented-button-group-buttons{box-shadow:inset 0 calc(var(--et-tab-underline-size) * -1) 0 0 var(--et-theme-color-primary-solid)}et-segmented-button-group:where([data-variant=tabs]) et-segmented-button{--et-segmented-button-padding-x: var(--et-tab-padding-inline);--et-segmented-button-padding-y: var(--et-tab-padding-block);--et-segmented-button-tab-underline-size: var(--et-tab-underline-size);--et-segmented-button-tab-underline-radius: var(--et-tab-underline-radius);font-size:var(--et-tab-font-size)}et-segmented-button-group[data-mixed] .et-segmented-button-group-buttons{outline:1px dashed var(--et-theme-color-primary-solid, currentColor);outline-offset:-1px}et-segmented-button-group .et-segmented-button-group-support{overflow:clip;block-size:0}et-segmented-button-group .et-segmented-button-group-support-stack{position:relative;display:grid}et-segmented-button-group .et-segmented-button-group-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-segmented-button-group .et-segmented-button-group-support-content[data-active]{opacity:1;transform:translateY(0)}et-segmented-button-group .et-segmented-button-group-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-segmented-button-group-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-segmented-button-group .et-segmented-button-group-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-segmented-button-group-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-segmented-button-group .et-segmented-button-group-hint{padding-block-start:4px;font-size:var(--et-segmented-button-group-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-segmented-button-group .et-segmented-button-group-hint:empty{display:none}et-segmented-button-group[data-can-animate] .et-segmented-button-group-support{transition:block-size var(--et-segmented-button-group-support-duration) ease}et-segmented-button-group[data-can-animate] .et-segmented-button-group-support-content{transition:opacity var(--et-segmented-button-group-support-duration) ease,transform var(--et-segmented-button-group-support-duration) ease}@starting-style{et-segmented-button-group[data-can-animate] .et-segmented-button-group-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-segmented-button-group-support-offset) * -1))}}@media(prefers-reduced-motion:reduce){et-segmented-button-group{--et-segmented-button-group-support-duration: 1ms;--et-segmented-button-group-support-offset: 0px}}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
25850
25864
|
}
|
|
25851
25865
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SegmentedButtonGroupComponent, decorators: [{
|
|
25852
25866
|
type: Component,
|
|
@@ -25854,7 +25868,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
25854
25868
|
FormFieldDirective,
|
|
25855
25869
|
{
|
|
25856
25870
|
directive: SelectionListDirective,
|
|
25857
|
-
inputs: [
|
|
25871
|
+
inputs: [
|
|
25872
|
+
'value',
|
|
25873
|
+
'mixed',
|
|
25874
|
+
'touched',
|
|
25875
|
+
'disabled',
|
|
25876
|
+
'readonly',
|
|
25877
|
+
'invalid',
|
|
25878
|
+
'errors',
|
|
25879
|
+
'required',
|
|
25880
|
+
'name',
|
|
25881
|
+
'aria-label',
|
|
25882
|
+
'aria-labelledby',
|
|
25883
|
+
],
|
|
25858
25884
|
outputs: ['valueChange', 'mixedChange', 'touchedChange'],
|
|
25859
25885
|
},
|
|
25860
25886
|
{ directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },
|
|
@@ -42653,7 +42679,7 @@ class CheckboxGroupComponent {
|
|
|
42653
42679
|
});
|
|
42654
42680
|
}
|
|
42655
42681
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CheckboxGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42656
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: CheckboxGroupComponent, isStandalone: true, selector: "et-checkbox-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-orientation": "orientation()", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-checkbox-group" }, providers: [{ provide: SELECTION_LIST_MULTIPLE, useValue: true }, provideFormSupport()], viewQueries: [{ propertyName: "errorContentRef", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContentRef", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContentRef", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "errorAnimatableRef", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatableRef", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatableRef", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: SelectionListDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-checkbox-group-support\">\n <div class=\"et-checkbox-group-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n [attr.data-active]=\"support.errorActive() || null\"\n [etProvideColor]=\"support.errorColorTheme\"\n class=\"et-checkbox-group-support-content et-checkbox-group-errors\"\n etAnimatable\n >\n @for (error of support.visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (support.shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n [attr.data-active]=\"support.warningActive() || null\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-checkbox-group-support-content et-checkbox-group-warnings\"\n etAnimatable\n >\n @for (warning of support.visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (support.shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n class=\"et-checkbox-group-support-content et-checkbox-group-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-checkbox-group-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-checkbox-group-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-checkbox-group-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-checkbox-group-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-checkbox-group-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-checkbox-group-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-checkbox-group-column-gap{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-checkbox-group-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}et-checkbox-group{display:flex;flex-direction:column;gap:var(--et-checkbox-group-gap);color:var(--et-surface-color-solid, currentColor)}et-checkbox-group>et-label,et-checkbox-group .et-checkbox-group-label{font-size:var(--et-checkbox-group-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-checkbox-group:where([data-size=sm]){--et-checkbox-group-label-font-size: 12px;--et-checkbox-group-gap: 8px}et-checkbox-group:where([data-size=sm]) et-checkbox-option{--et-checkbox-option-size: 16px;--et-checkbox-option-gap: 8px}et-checkbox-group:where([data-size=sm]) .et-checkbox-option-label{font-size:12px;line-height:16px}et-checkbox-group:where([data-size=sm]) .et-checkbox-option-check{inline-size:10px;block-size:8px}et-checkbox-group:where([data-size=lg]){--et-checkbox-group-label-font-size: 14px;--et-checkbox-group-gap: 12px}et-checkbox-group:where([data-size=lg]) et-checkbox-option{--et-checkbox-option-size: 24px;--et-checkbox-option-gap: 12px}et-checkbox-group:where([data-size=lg]) .et-checkbox-option-label{font-size:16px;line-height:24px}et-checkbox-group:where([data-size=lg]) .et-checkbox-option-check{inline-size:14px;block-size:12px}et-checkbox-group[data-error]{--_et-control-border: var(--et-theme-color-primary-solid)}et-checkbox-group[data-mixed] .et-checkbox-option-box{border-style:dashed;border-color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox-group .et-checkbox-group-support{overflow:clip;block-size:0}et-checkbox-group .et-checkbox-group-support-stack{position:relative;display:grid}et-checkbox-group .et-checkbox-group-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-checkbox-group .et-checkbox-group-support-content[data-active]{opacity:1;transform:translateY(0)}et-checkbox-group .et-checkbox-group-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-checkbox-group-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox-group .et-checkbox-group-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-checkbox-group-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox-group .et-checkbox-group-hint{padding-block-start:4px;font-size:var(--et-checkbox-group-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-checkbox-group .et-checkbox-group-hint:empty{display:none}et-checkbox-group[data-can-animate] .et-checkbox-group-support{transition:block-size var(--et-checkbox-group-support-duration) ease}et-checkbox-group[data-can-animate] .et-checkbox-group-support-content{transition:opacity var(--et-checkbox-group-support-duration) ease,transform var(--et-checkbox-group-support-duration) ease}@starting-style{et-checkbox-group[data-can-animate] .et-checkbox-group-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-checkbox-group-support-offset) * -1))}}@media(prefers-reduced-motion:reduce){et-checkbox-group{--et-checkbox-group-support-duration: 1ms;--et-checkbox-group-support-offset: 0px}}et-checkbox-group:where([data-orientation=horizontal]){flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:var(--et-checkbox-group-column-gap)}et-checkbox-group:where([data-orientation=horizontal])>et-label,et-checkbox-group:where([data-orientation=horizontal])>.et-checkbox-group-label,et-checkbox-group:where([data-orientation=horizontal])>.et-checkbox-group-support{flex-basis:100%}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
42682
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: CheckboxGroupComponent, isStandalone: true, selector: "et-checkbox-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-orientation": "orientation()", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-checkbox-group" }, providers: [{ provide: SELECTION_LIST_MULTIPLE, useValue: true }, provideFormSupport()], viewQueries: [{ propertyName: "errorContentRef", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContentRef", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContentRef", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "errorAnimatableRef", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatableRef", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatableRef", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: SelectionListDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-checkbox-group-support\">\n <div class=\"et-checkbox-group-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n [attr.data-active]=\"support.errorActive() || null\"\n [etProvideColor]=\"support.errorColorTheme\"\n class=\"et-checkbox-group-support-content et-checkbox-group-errors\"\n etAnimatable\n >\n @for (error of support.visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (support.shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n [attr.data-active]=\"support.warningActive() || null\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-checkbox-group-support-content et-checkbox-group-warnings\"\n etAnimatable\n >\n @for (warning of support.visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (support.shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n class=\"et-checkbox-group-support-content et-checkbox-group-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-checkbox-group-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-checkbox-group-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-checkbox-group-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-checkbox-group-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-checkbox-group-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-checkbox-group-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-checkbox-group-column-gap{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-checkbox-group-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}et-checkbox-group{display:flex;flex-direction:column;gap:var(--et-checkbox-group-gap);color:var(--et-surface-color-solid, currentColor)}et-checkbox-group>et-label,et-checkbox-group .et-checkbox-group-label{font-size:var(--et-checkbox-group-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-checkbox-group:where([data-size=sm]){--et-checkbox-group-label-font-size: 12px;--et-checkbox-group-gap: 8px}et-checkbox-group:where([data-size=sm]) et-checkbox-option{--et-checkbox-option-size: 16px;--et-checkbox-option-gap: 8px}et-checkbox-group:where([data-size=sm]) .et-checkbox-option-label{font-size:12px;line-height:16px}et-checkbox-group:where([data-size=sm]) .et-checkbox-option-check{inline-size:10px;block-size:8px}et-checkbox-group:where([data-size=lg]){--et-checkbox-group-label-font-size: 14px;--et-checkbox-group-gap: 12px}et-checkbox-group:where([data-size=lg]) et-checkbox-option{--et-checkbox-option-size: 24px;--et-checkbox-option-gap: 12px}et-checkbox-group:where([data-size=lg]) .et-checkbox-option-label{font-size:16px;line-height:24px}et-checkbox-group:where([data-size=lg]) .et-checkbox-option-check{inline-size:14px;block-size:12px}et-checkbox-group[data-error]{--_et-control-border: var(--et-theme-color-primary-solid)}et-checkbox-group[data-mixed] .et-checkbox-option-box{border-style:dashed;border-color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox-group .et-checkbox-group-support{overflow:clip;block-size:0}et-checkbox-group .et-checkbox-group-support-stack{position:relative;display:grid}et-checkbox-group .et-checkbox-group-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-checkbox-group .et-checkbox-group-support-content[data-active]{opacity:1;transform:translateY(0)}et-checkbox-group .et-checkbox-group-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-checkbox-group-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox-group .et-checkbox-group-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-checkbox-group-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox-group .et-checkbox-group-hint{padding-block-start:4px;font-size:var(--et-checkbox-group-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-checkbox-group .et-checkbox-group-hint:empty{display:none}et-checkbox-group[data-can-animate] .et-checkbox-group-support{transition:block-size var(--et-checkbox-group-support-duration) ease}et-checkbox-group[data-can-animate] .et-checkbox-group-support-content{transition:opacity var(--et-checkbox-group-support-duration) ease,transform var(--et-checkbox-group-support-duration) ease}@starting-style{et-checkbox-group[data-can-animate] .et-checkbox-group-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-checkbox-group-support-offset) * -1))}}@media(prefers-reduced-motion:reduce){et-checkbox-group{--et-checkbox-group-support-duration: 1ms;--et-checkbox-group-support-offset: 0px}}et-checkbox-group:where([data-orientation=horizontal]){flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:var(--et-checkbox-group-column-gap)}et-checkbox-group:where([data-orientation=horizontal])>et-label,et-checkbox-group:where([data-orientation=horizontal])>.et-checkbox-group-label,et-checkbox-group:where([data-orientation=horizontal])>.et-checkbox-group-support{flex-basis:100%}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
42657
42683
|
}
|
|
42658
42684
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CheckboxGroupComponent, decorators: [{
|
|
42659
42685
|
type: Component,
|
|
@@ -42661,7 +42687,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
42661
42687
|
FormFieldDirective,
|
|
42662
42688
|
{
|
|
42663
42689
|
directive: SelectionListDirective,
|
|
42664
|
-
inputs: [
|
|
42690
|
+
inputs: [
|
|
42691
|
+
'value',
|
|
42692
|
+
'mixed',
|
|
42693
|
+
'touched',
|
|
42694
|
+
'disabled',
|
|
42695
|
+
'readonly',
|
|
42696
|
+
'invalid',
|
|
42697
|
+
'errors',
|
|
42698
|
+
'required',
|
|
42699
|
+
'name',
|
|
42700
|
+
'aria-label',
|
|
42701
|
+
'aria-labelledby',
|
|
42702
|
+
],
|
|
42665
42703
|
outputs: ['valueChange', 'mixedChange', 'touchedChange'],
|
|
42666
42704
|
},
|
|
42667
42705
|
{ directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },
|
|
@@ -42756,7 +42794,7 @@ class RadioGroupComponent {
|
|
|
42756
42794
|
});
|
|
42757
42795
|
}
|
|
42758
42796
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42759
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RadioGroupComponent, isStandalone: true, selector: "et-radio-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-orientation": "orientation()", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-radio-group" }, providers: [provideFormSupport()], viewQueries: [{ propertyName: "errorContentRef", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContentRef", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContentRef", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "errorAnimatableRef", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatableRef", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatableRef", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: SelectionListDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-radio-group-support\">\n <div class=\"et-radio-group-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n [attr.data-active]=\"support.errorActive() || null\"\n [etProvideColor]=\"support.errorColorTheme\"\n class=\"et-radio-group-support-content et-radio-group-errors\"\n etAnimatable\n >\n @for (error of support.visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (support.shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n [attr.data-active]=\"support.warningActive() || null\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-radio-group-support-content et-radio-group-warnings\"\n etAnimatable\n >\n @for (warning of support.visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (support.shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n class=\"et-radio-group-support-content et-radio-group-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-radio-group-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-radio-group-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-radio-group-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-radio-group-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-radio-group-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-radio-group-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-radio-group-column-gap{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-radio-group-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}et-radio-group{display:flex;flex-direction:column;gap:var(--et-radio-group-gap);color:var(--et-surface-color-solid, currentColor)}et-radio-group>et-label,et-radio-group .et-radio-group-label{font-size:var(--et-radio-group-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-radio-group:where([data-size=sm]){--et-radio-group-label-font-size: 12px;--et-radio-group-gap: 8px}et-radio-group:where([data-size=sm]) et-radio{--et-radio-size: 16px;--et-radio-dot-size: 8px;--et-radio-gap: 8px}et-radio-group:where([data-size=sm]) .et-radio-label{font-size:12px;line-height:16px}et-radio-group:where([data-size=lg]){--et-radio-group-label-font-size: 14px;--et-radio-group-gap: 12px}et-radio-group:where([data-size=lg]) et-radio{--et-radio-size: 24px;--et-radio-dot-size: 12px;--et-radio-gap: 12px}et-radio-group:where([data-size=lg]) .et-radio-label{font-size:16px;line-height:24px}et-radio-group[data-error]{--_et-control-border: var(--et-theme-color-primary-solid)}et-radio-group[data-mixed] .et-radio-circle{border-style:dashed;border-color:var(--et-theme-color-primary-solid, currentColor)}et-radio-group .et-radio-group-support{overflow:clip;block-size:0}et-radio-group .et-radio-group-support-stack{position:relative;display:grid}et-radio-group .et-radio-group-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-radio-group .et-radio-group-support-content[data-active]{opacity:1;transform:translateY(0)}et-radio-group .et-radio-group-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-radio-group-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-radio-group .et-radio-group-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-radio-group-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-radio-group .et-radio-group-hint{padding-block-start:4px;font-size:var(--et-radio-group-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-radio-group .et-radio-group-hint:empty{display:none}et-radio-group[data-can-animate] .et-radio-group-support{transition:block-size var(--et-radio-group-support-duration) ease}et-radio-group[data-can-animate] .et-radio-group-support-content{transition:opacity var(--et-radio-group-support-duration) ease,transform var(--et-radio-group-support-duration) ease}@starting-style{et-radio-group[data-can-animate] .et-radio-group-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-radio-group-support-offset) * -1))}}@media(prefers-reduced-motion:reduce){et-radio-group{--et-radio-group-support-duration: 1ms;--et-radio-group-support-offset: 0px}}et-radio-group:where([data-orientation=horizontal]){flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:var(--et-radio-group-column-gap)}et-radio-group:where([data-orientation=horizontal])>et-label,et-radio-group:where([data-orientation=horizontal])>.et-radio-group-label,et-radio-group:where([data-orientation=horizontal])>.et-radio-group-support{flex-basis:100%}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
42797
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RadioGroupComponent, isStandalone: true, selector: "et-radio-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-orientation": "orientation()", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-radio-group" }, providers: [provideFormSupport()], viewQueries: [{ propertyName: "errorContentRef", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContentRef", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContentRef", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "errorAnimatableRef", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatableRef", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatableRef", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: SelectionListDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-radio-group-support\">\n <div class=\"et-radio-group-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n [attr.data-active]=\"support.errorActive() || null\"\n [etProvideColor]=\"support.errorColorTheme\"\n class=\"et-radio-group-support-content et-radio-group-errors\"\n etAnimatable\n >\n @for (error of support.visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (support.shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n [attr.data-active]=\"support.warningActive() || null\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-radio-group-support-content et-radio-group-warnings\"\n etAnimatable\n >\n @for (warning of support.visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (support.shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n class=\"et-radio-group-support-content et-radio-group-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-radio-group-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-radio-group-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-radio-group-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-radio-group-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-radio-group-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-radio-group-gap{syntax: \"<length>\"; inherits: true; initial-value: 10px;}@property --et-radio-group-column-gap{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-radio-group-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}et-radio-group{display:flex;flex-direction:column;gap:var(--et-radio-group-gap);color:var(--et-surface-color-solid, currentColor)}et-radio-group>et-label,et-radio-group .et-radio-group-label{font-size:var(--et-radio-group-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-radio-group:where([data-size=sm]){--et-radio-group-label-font-size: 12px;--et-radio-group-gap: 8px}et-radio-group:where([data-size=sm]) et-radio{--et-radio-size: 16px;--et-radio-dot-size: 8px;--et-radio-gap: 8px}et-radio-group:where([data-size=sm]) .et-radio-label{font-size:12px;line-height:16px}et-radio-group:where([data-size=lg]){--et-radio-group-label-font-size: 14px;--et-radio-group-gap: 12px}et-radio-group:where([data-size=lg]) et-radio{--et-radio-size: 24px;--et-radio-dot-size: 12px;--et-radio-gap: 12px}et-radio-group:where([data-size=lg]) .et-radio-label{font-size:16px;line-height:24px}et-radio-group[data-error]{--_et-control-border: var(--et-theme-color-primary-solid)}et-radio-group[data-mixed] .et-radio-circle{border-style:dashed;border-color:var(--et-theme-color-primary-solid, currentColor)}et-radio-group .et-radio-group-support{overflow:clip;block-size:0}et-radio-group .et-radio-group-support-stack{position:relative;display:grid}et-radio-group .et-radio-group-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-radio-group .et-radio-group-support-content[data-active]{opacity:1;transform:translateY(0)}et-radio-group .et-radio-group-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-radio-group-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-radio-group .et-radio-group-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-radio-group-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-radio-group .et-radio-group-hint{padding-block-start:4px;font-size:var(--et-radio-group-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-radio-group .et-radio-group-hint:empty{display:none}et-radio-group[data-can-animate] .et-radio-group-support{transition:block-size var(--et-radio-group-support-duration) ease}et-radio-group[data-can-animate] .et-radio-group-support-content{transition:opacity var(--et-radio-group-support-duration) ease,transform var(--et-radio-group-support-duration) ease}@starting-style{et-radio-group[data-can-animate] .et-radio-group-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-radio-group-support-offset) * -1))}}@media(prefers-reduced-motion:reduce){et-radio-group{--et-radio-group-support-duration: 1ms;--et-radio-group-support-offset: 0px}}et-radio-group:where([data-orientation=horizontal]){flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:var(--et-radio-group-column-gap)}et-radio-group:where([data-orientation=horizontal])>et-label,et-radio-group:where([data-orientation=horizontal])>.et-radio-group-label,et-radio-group:where([data-orientation=horizontal])>.et-radio-group-support{flex-basis:100%}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
42760
42798
|
}
|
|
42761
42799
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioGroupComponent, decorators: [{
|
|
42762
42800
|
type: Component,
|
|
@@ -42764,7 +42802,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
42764
42802
|
FormFieldDirective,
|
|
42765
42803
|
{
|
|
42766
42804
|
directive: SelectionListDirective,
|
|
42767
|
-
inputs: [
|
|
42805
|
+
inputs: [
|
|
42806
|
+
'value',
|
|
42807
|
+
'mixed',
|
|
42808
|
+
'touched',
|
|
42809
|
+
'disabled',
|
|
42810
|
+
'readonly',
|
|
42811
|
+
'invalid',
|
|
42812
|
+
'errors',
|
|
42813
|
+
'required',
|
|
42814
|
+
'name',
|
|
42815
|
+
'aria-label',
|
|
42816
|
+
'aria-labelledby',
|
|
42817
|
+
],
|
|
42768
42818
|
outputs: ['valueChange', 'mixedChange', 'touchedChange'],
|
|
42769
42819
|
},
|
|
42770
42820
|
{ directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },
|
|
@@ -45095,18 +45145,17 @@ class GridDirective {
|
|
|
45095
45145
|
this.rowHeight = input(100, { ...(ngDevMode ? { debugName: "rowHeight" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
45096
45146
|
this.gap = input(16, { ...(ngDevMode ? { debugName: "gap" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
45097
45147
|
/**
|
|
45098
|
-
* The items to render.
|
|
45099
|
-
*
|
|
45100
|
-
*
|
|
45101
|
-
*
|
|
45102
|
-
* without rebuilding the grid.
|
|
45148
|
+
* The items to render. Every change is reconciled against what the grid holds - added ids are
|
|
45149
|
+
* placed, missing ids are removed, an empty array clears the grid, and the same ids with different
|
|
45150
|
+
* positions restore those positions. A host can therefore keep feeding its own signal in, including
|
|
45151
|
+
* a saved snapshot after cancelled edits, without rebuilding the grid.
|
|
45103
45152
|
*/
|
|
45104
|
-
this.
|
|
45105
|
-
...(ngDevMode ? [{ debugName: "
|
|
45153
|
+
this.items = input([], /* @ts-ignore */
|
|
45154
|
+
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
45106
45155
|
this.readOnly = input(false, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
45107
45156
|
/**
|
|
45108
45157
|
* Emitted after the layout changed on this side: a drag, a resize, a keyboard move, `addItem()` or
|
|
45109
|
-
* `removeItem()`. Reconciling `
|
|
45158
|
+
* `removeItem()`. Reconciling `items` does not emit - what the host passed in cannot be news
|
|
45110
45159
|
* to it - so this output can be read as "the user has unsaved changes".
|
|
45111
45160
|
*/
|
|
45112
45161
|
this.layoutChange = output();
|
|
@@ -45118,7 +45167,7 @@ class GridDirective {
|
|
|
45118
45167
|
*/
|
|
45119
45168
|
this.hostItems = signal(null, /* @ts-ignore */
|
|
45120
45169
|
...(ngDevMode ? [{ debugName: "hostItems" }] : /* istanbul ignore next */ []));
|
|
45121
|
-
this.incomingItems = computed(() => this.hostItems()?.() ?? this.
|
|
45170
|
+
this.incomingItems = computed(() => this.hostItems()?.() ?? this.items(), /* @ts-ignore */
|
|
45122
45171
|
...(ngDevMode ? [{ debugName: "incomingItems" }] : /* istanbul ignore next */ []));
|
|
45123
45172
|
this.registrations = computed(() => this.gridConfig.registrations, /* @ts-ignore */
|
|
45124
45173
|
...(ngDevMode ? [{ debugName: "registrations" }] : /* istanbul ignore next */ []));
|
|
@@ -45187,8 +45236,12 @@ class GridDirective {
|
|
|
45187
45236
|
});
|
|
45188
45237
|
}, /* @ts-ignore */
|
|
45189
45238
|
...(ngDevMode ? [{ debugName: "geometry" }] : /* istanbul ignore next */ []));
|
|
45190
|
-
|
|
45191
|
-
|
|
45239
|
+
/**
|
|
45240
|
+
* The items the grid currently holds - the `items` input reconciled with everything that happened
|
|
45241
|
+
* since: drags, resizes, `addItem()` and `removeItem()`.
|
|
45242
|
+
*/
|
|
45243
|
+
this.currentItems = computed(() => this.itemConfigs(), /* @ts-ignore */
|
|
45244
|
+
...(ngDevMode ? [{ debugName: "currentItems" }] : /* istanbul ignore next */ []));
|
|
45192
45245
|
this.baseLayout = computed(() => {
|
|
45193
45246
|
const breakpoint = this.activeBreakpoint();
|
|
45194
45247
|
const overrides = this.layoutOverrides();
|
|
@@ -45292,12 +45345,14 @@ class GridDirective {
|
|
|
45292
45345
|
// waiting for a breakpoint switch.
|
|
45293
45346
|
const visitedBps = Object.keys(this.layoutOverrides());
|
|
45294
45347
|
if (visitedBps.length > 0) {
|
|
45348
|
+
const columnsByBp = new Map(this.breakpoints().map((bp) => [bp.name, bp.columns]));
|
|
45295
45349
|
const restored = {};
|
|
45296
45350
|
for (const bp of visitedBps) {
|
|
45297
|
-
restored[bp] =
|
|
45298
|
-
|
|
45299
|
-
|
|
45300
|
-
|
|
45351
|
+
restored[bp] = this.entriesForBreakpoint({
|
|
45352
|
+
items: initial,
|
|
45353
|
+
breakpoint: bp,
|
|
45354
|
+
columns: columnsByBp.get(bp) ?? this.activeColumns(),
|
|
45355
|
+
});
|
|
45301
45356
|
}
|
|
45302
45357
|
this.layoutOverrides.set(restored);
|
|
45303
45358
|
}
|
|
@@ -45337,25 +45392,12 @@ class GridDirective {
|
|
|
45337
45392
|
const existing = overrides[breakpoint];
|
|
45338
45393
|
const columns = this.activeColumns();
|
|
45339
45394
|
if (!existing || existing.length !== items.length) {
|
|
45340
|
-
const
|
|
45341
|
-
|
|
45342
|
-
|
|
45343
|
-
|
|
45344
|
-
|
|
45345
|
-
|
|
45346
|
-
}
|
|
45347
|
-
else {
|
|
45348
|
-
const constraints = this.getConstraints(item.id);
|
|
45349
|
-
const position = item.layout[breakpoint] ??
|
|
45350
|
-
autoPlace({
|
|
45351
|
-
entries,
|
|
45352
|
-
colSpan: constraints.minColSpan,
|
|
45353
|
-
rowSpan: constraints.minRowSpan,
|
|
45354
|
-
columns,
|
|
45355
|
-
});
|
|
45356
|
-
entries.push({ id: item.id, position });
|
|
45357
|
-
}
|
|
45358
|
-
}
|
|
45395
|
+
const entries = this.entriesForBreakpoint({
|
|
45396
|
+
items,
|
|
45397
|
+
breakpoint,
|
|
45398
|
+
columns,
|
|
45399
|
+
existing: existing ? new Map(existing.map((e) => [e.id, e])) : null,
|
|
45400
|
+
});
|
|
45359
45401
|
const compacted = compactLayout({ entries, columns });
|
|
45360
45402
|
this.layoutOverrides.update((prev) => ({ ...prev, [breakpoint]: compacted }));
|
|
45361
45403
|
}
|
|
@@ -45663,19 +45705,7 @@ class GridDirective {
|
|
|
45663
45705
|
this.itemConfigs.set(items);
|
|
45664
45706
|
const overrides = {};
|
|
45665
45707
|
for (const [bpName, columns] of Object.entries(state.columns)) {
|
|
45666
|
-
overrides[bpName] =
|
|
45667
|
-
const constraints = this.getConstraintsForColumns(item.id, columns);
|
|
45668
|
-
return {
|
|
45669
|
-
id: item.id,
|
|
45670
|
-
position: item.layout[bpName] ??
|
|
45671
|
-
autoPlace({
|
|
45672
|
-
entries: [],
|
|
45673
|
-
colSpan: constraints.minColSpan,
|
|
45674
|
-
rowSpan: constraints.minRowSpan,
|
|
45675
|
-
columns,
|
|
45676
|
-
}),
|
|
45677
|
-
};
|
|
45678
|
-
});
|
|
45708
|
+
overrides[bpName] = this.entriesForBreakpoint({ items, breakpoint: bpName, columns });
|
|
45679
45709
|
}
|
|
45680
45710
|
this.layoutOverrides.set(overrides);
|
|
45681
45711
|
}
|
|
@@ -45694,17 +45724,18 @@ class GridDirective {
|
|
|
45694
45724
|
this.warnAboutUncoveredBreakpoints(items);
|
|
45695
45725
|
}
|
|
45696
45726
|
/**
|
|
45697
|
-
* A layout key that is not a configured breakpoint is never read, and a
|
|
45698
|
-
* layout omits
|
|
45699
|
-
*
|
|
45700
|
-
* this
|
|
45727
|
+
* A layout key that is not a configured breakpoint is never read, and a breakpoint a *partially*
|
|
45728
|
+
* positioned layout omits is auto-placed in item order rather than mirroring the arrangement the
|
|
45729
|
+
* other breakpoints spell out - both read as the grid having lost part of the layout. An entirely
|
|
45730
|
+
* empty layout is the documented "place this for me" input (`addItem` emits exactly that), so it
|
|
45731
|
+
* is not a problem and stays silent.
|
|
45701
45732
|
*/
|
|
45702
45733
|
warnAboutUncoveredBreakpoints(items) {
|
|
45703
45734
|
const configured = this.breakpoints().map((b) => b.name);
|
|
45704
45735
|
const quote = (names) => names.map((name) => `"${name}"`).join(', ');
|
|
45705
45736
|
for (const item of items) {
|
|
45706
45737
|
const provided = Object.keys(item.layout);
|
|
45707
|
-
const missing = configured.filter((name) => !provided.includes(name));
|
|
45738
|
+
const missing = provided.length > 0 ? configured.filter((name) => !provided.includes(name)) : [];
|
|
45708
45739
|
const unknown = provided.filter((name) => !configured.includes(name));
|
|
45709
45740
|
const problems = [
|
|
45710
45741
|
missing.length > 0 ? `has no position for ${quote(missing)}` : null,
|
|
@@ -45712,7 +45743,7 @@ class GridDirective {
|
|
|
45712
45743
|
].filter((problem) => problem !== null);
|
|
45713
45744
|
if (problems.length === 0)
|
|
45714
45745
|
continue;
|
|
45715
|
-
console.warn(`[GridDirective] The layout of grid item "${item.id}" ${problems.join(' and ')}. Configured breakpoints are ${quote(configured)}; an omitted one
|
|
45746
|
+
console.warn(`[GridDirective] The layout of grid item "${item.id}" ${problems.join(' and ')}. Configured breakpoints are ${quote(configured)}; an omitted one is auto-placed in item order instead of following the positions the layout does carry.`, item);
|
|
45716
45747
|
}
|
|
45717
45748
|
}
|
|
45718
45749
|
finalizeRemove(id, options) {
|
|
@@ -45725,6 +45756,32 @@ class GridDirective {
|
|
|
45725
45756
|
if (!options?.silent)
|
|
45726
45757
|
this.emitLayoutChange();
|
|
45727
45758
|
}
|
|
45759
|
+
/**
|
|
45760
|
+
* The layout entries of `items` for one breakpoint. An item the breakpoint has no position for is
|
|
45761
|
+
* auto-placed against the entries built before it, so a partial layout spreads out instead of
|
|
45762
|
+
* stacking every unpositioned item on the grid origin.
|
|
45763
|
+
*/
|
|
45764
|
+
entriesForBreakpoint(options) {
|
|
45765
|
+
const { items, breakpoint, columns, existing } = options;
|
|
45766
|
+
const entries = [];
|
|
45767
|
+
for (const item of items) {
|
|
45768
|
+
const existingEntry = existing?.get(item.id);
|
|
45769
|
+
if (existingEntry) {
|
|
45770
|
+
entries.push(existingEntry);
|
|
45771
|
+
continue;
|
|
45772
|
+
}
|
|
45773
|
+
const constraints = this.getConstraintsForColumns(item.id, columns);
|
|
45774
|
+
const position = item.layout[breakpoint] ??
|
|
45775
|
+
autoPlace({
|
|
45776
|
+
entries,
|
|
45777
|
+
colSpan: constraints.minColSpan,
|
|
45778
|
+
rowSpan: constraints.minRowSpan,
|
|
45779
|
+
columns,
|
|
45780
|
+
});
|
|
45781
|
+
entries.push({ id: item.id, position });
|
|
45782
|
+
}
|
|
45783
|
+
return entries;
|
|
45784
|
+
}
|
|
45728
45785
|
placeItem(config, options) {
|
|
45729
45786
|
const activeBp = this.activeBreakpoint();
|
|
45730
45787
|
const columns = this.activeColumns();
|
|
@@ -45753,10 +45810,7 @@ class GridDirective {
|
|
|
45753
45810
|
// Effective layout for this breakpoint: prefer layoutOverrides (already visited),
|
|
45754
45811
|
// fall back to itemConfigs.layout[bp] (original API positions).
|
|
45755
45812
|
const bpEntries = overrides[bp.name] ??
|
|
45756
|
-
|
|
45757
|
-
id: item.id,
|
|
45758
|
-
position: item.layout[bp.name] ?? { col: 0, row: 0, colSpan: 1, rowSpan: 1 },
|
|
45759
|
-
}));
|
|
45813
|
+
this.entriesForBreakpoint({ items: existingItems, breakpoint: bp.name, columns: bp.columns });
|
|
45760
45814
|
layout[bp.name] = autoPlace({
|
|
45761
45815
|
entries: bpEntries,
|
|
45762
45816
|
colSpan: this.getConstraintsForColumns(config.id, bp.columns).minColSpan,
|
|
@@ -45874,7 +45928,7 @@ class GridDirective {
|
|
|
45874
45928
|
this.layoutChange.emit(this.getSerializedState());
|
|
45875
45929
|
}
|
|
45876
45930
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: GridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
45877
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: GridDirective, isStandalone: true, selector: "[etGrid]", inputs: { breakpoints: { classPropertyName: "breakpoints", publicName: "breakpoints", isSignal: true, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null },
|
|
45931
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: GridDirective, isStandalone: true, selector: "[etGrid]", inputs: { breakpoints: { classPropertyName: "breakpoints", publicName: "breakpoints", isSignal: true, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange" }, host: { properties: { "class.et-grid--readonly": "readOnly()", "style.height.px": "hostHeight()", "style.transition": "containerTransition()", "style.--et-grid-gap.px": "gap()", "style.--et-grid-anim-duration": "isResizeActive() ? \"160ms\" : null" }, classAttribute: "et-grid" }, providers: [{ provide: GRID_TOKEN, useExisting: GridDirective }], exportAs: ["etGrid"], ngImport: i0 }); }
|
|
45878
45932
|
}
|
|
45879
45933
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: GridDirective, decorators: [{
|
|
45880
45934
|
type: Directive,
|
|
@@ -45891,7 +45945,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
45891
45945
|
'[style.--et-grid-anim-duration]': 'isResizeActive() ? "160ms" : null',
|
|
45892
45946
|
},
|
|
45893
45947
|
}]
|
|
45894
|
-
}], ctorParameters: () => [], propDecorators: { breakpoints: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoints", required: false }] }], rowHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowHeight", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }],
|
|
45948
|
+
}], ctorParameters: () => [], propDecorators: { breakpoints: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoints", required: false }] }], rowHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowHeight", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }] } });
|
|
45895
45949
|
|
|
45896
45950
|
const SETTLE_FALLBACK_MS = 350;
|
|
45897
45951
|
/** An unset span input stays unset; anything else goes through Angular's own number coercion. */
|
|
@@ -46696,12 +46750,11 @@ class GridComponent {
|
|
|
46696
46750
|
this.gridConfig = injectGridConfig();
|
|
46697
46751
|
this.labels = injectGridLabels();
|
|
46698
46752
|
/**
|
|
46699
|
-
* The items to render
|
|
46700
|
-
*
|
|
46701
|
-
* `TData` back instead of `unknown`.
|
|
46753
|
+
* The items to render - a live input reconciled on every change, see `GridDirective.items`. Typed
|
|
46754
|
+
* in the item payload, so `layoutChange` hands the same `TData` back instead of `unknown`.
|
|
46702
46755
|
*/
|
|
46703
|
-
this.
|
|
46704
|
-
...(ngDevMode ? [{ debugName: "
|
|
46756
|
+
this.items = input([], /* @ts-ignore */
|
|
46757
|
+
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
46705
46758
|
/** Emitted after the layout changed on this side - see `GridDirective.layoutChange`. */
|
|
46706
46759
|
this.layoutChange = output();
|
|
46707
46760
|
// The one seam where the item type is re-attached: a host directive cannot be parameterized by its
|
|
@@ -46715,7 +46768,7 @@ class GridComponent {
|
|
|
46715
46768
|
...(ngDevMode ? [{ debugName: "actionsComponent" }] : /* istanbul ignore next */ []));
|
|
46716
46769
|
this.registeredItems = computed(() => {
|
|
46717
46770
|
const registrations = this.gridConfig.registrations;
|
|
46718
|
-
return this.grid.
|
|
46771
|
+
return this.grid.currentItems().flatMap((item) => {
|
|
46719
46772
|
const reg = registrations.find((r) => r.type === item.type);
|
|
46720
46773
|
return reg ? [{ item, reg }] : [];
|
|
46721
46774
|
});
|
|
@@ -46735,13 +46788,13 @@ class GridComponent {
|
|
|
46735
46788
|
? 'translate 200ms cubic-bezier(0.2, 0, 0, 1), width 200ms cubic-bezier(0.2, 0, 0, 1), height 200ms cubic-bezier(0.2, 0, 0, 1)'
|
|
46736
46789
|
: 'none', /* @ts-ignore */
|
|
46737
46790
|
...(ngDevMode ? [{ debugName: "ghostTransition" }] : /* istanbul ignore next */ []));
|
|
46738
|
-
this.grid.hostItems.set(this.
|
|
46791
|
+
this.grid.hostItems.set(this.items);
|
|
46739
46792
|
outputToObservable(this.grid.layoutChange)
|
|
46740
46793
|
.pipe(tap((state) => this.layoutChange.emit(state)), takeUntilDestroyed())
|
|
46741
46794
|
.subscribe();
|
|
46742
46795
|
if (ngDevMode) {
|
|
46743
46796
|
effect(() => {
|
|
46744
|
-
const items = this.grid.
|
|
46797
|
+
const items = this.grid.currentItems();
|
|
46745
46798
|
if (items.length === 0)
|
|
46746
46799
|
return;
|
|
46747
46800
|
const registrations = this.gridConfig.registrations;
|
|
@@ -46758,7 +46811,7 @@ class GridComponent {
|
|
|
46758
46811
|
}
|
|
46759
46812
|
}
|
|
46760
46813
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: GridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46761
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: GridComponent, isStandalone: true, selector: "et-grid, [et-grid]", inputs: {
|
|
46814
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: GridComponent, isStandalone: true, selector: "et-grid, [et-grid]", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange" }, host: { attributes: { "role": "region" }, properties: { "class.et-grid--readonly": "grid.readOnly()", "attr.aria-label": "ariaLabel()" }, classAttribute: "et-grid" }, hostDirectives: [{ directive: GridDirective, inputs: ["breakpoints", "breakpoints", "rowHeight", "rowHeight", "gap", "gap", "readOnly", "readOnly"] }], ngImport: i0, template: `
|
|
46762
46815
|
@if (grid.isReady()) {
|
|
46763
46816
|
@for (entry of registeredItems(); track entry.item.id) {
|
|
46764
46817
|
<!-- The registration's constraints reach the item through the grid's own resolver, so
|
|
@@ -46837,7 +46890,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
46837
46890
|
'[class.et-grid--readonly]': 'grid.readOnly()',
|
|
46838
46891
|
'[attr.aria-label]': 'ariaLabel()',
|
|
46839
46892
|
}, styles: ["@property --et-grid-padding{syntax: \"<length>\"; inherits: false; initial-value: 0px;}.et-grid{display:block;box-sizing:border-box;padding:var(--et-grid-padding);position:relative;min-height:0}.et-grid:has(.et-grid-item--dragging,.et-grid-item--resizing){-webkit-user-select:none;user-select:none;cursor:grabbing}.et-grid:has(.et-grid-item--resizing){cursor:nwse-resize}.et-grid-ghost{position:absolute;top:0;left:0;z-index:0;border-radius:8px;background:rgb(var(--et-surface-color, 23 23 23) / .08);border:2px dashed rgb(var(--et-surface-color, 23 23 23) / .2);box-sizing:border-box;pointer-events:none}.et-grid--readonly .et-grid-item__actions{display:none}.et-grid--readonly .et-grid-item:hover .et-resize-handle--e:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--s:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--w:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--n:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--se:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--sw:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--ne:after,.et-grid--readonly .et-grid-item:hover .et-resize-handle--nw:after{content:unset}\n"] }]
|
|
46840
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
46893
|
+
}], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }] } });
|
|
46841
46894
|
|
|
46842
46895
|
const posEq = (a, b) => {
|
|
46843
46896
|
if (!a && !b)
|
|
@@ -46850,7 +46903,7 @@ const posEq = (a, b) => {
|
|
|
46850
46903
|
* Development-only debug overlay for an `et-grid` instance.
|
|
46851
46904
|
*
|
|
46852
46905
|
* ```html
|
|
46853
|
-
* <et-grid #myGrid [
|
|
46906
|
+
* <et-grid #myGrid [items]="items()" ...></et-grid>
|
|
46854
46907
|
* <et-grid-debug [grid]="myGrid" [externalItems]="items()" />
|
|
46855
46908
|
* ```
|
|
46856
46909
|
*
|
|
@@ -46871,7 +46924,7 @@ class GridDebugComponent {
|
|
|
46871
46924
|
...(ngDevMode ? [{ debugName: "containerWidth" }] : /* istanbul ignore next */ []));
|
|
46872
46925
|
this.breakpoints = computed(() => this.grid().grid.breakpoints(), /* @ts-ignore */
|
|
46873
46926
|
...(ngDevMode ? [{ debugName: "breakpoints" }] : /* istanbul ignore next */ []));
|
|
46874
|
-
this.items = computed(() => this.grid().grid.
|
|
46927
|
+
this.items = computed(() => this.grid().grid.currentItems(), /* @ts-ignore */
|
|
46875
46928
|
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
46876
46929
|
this.layout = computed(() => this.grid().grid.layout(), /* @ts-ignore */
|
|
46877
46930
|
...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
|
|
@@ -47043,7 +47096,7 @@ class GridDebugComponent {
|
|
|
47043
47096
|
|
|
47044
47097
|
@if (hasExternal()) {
|
|
47045
47098
|
<p style="margin-top: 6px; color: #9ca3af; font-size: 10px">
|
|
47046
|
-
int = grid.
|
|
47099
|
+
int = grid.currentItems() (internal) · ext = externalItems input ·
|
|
47047
47100
|
<span style="color: #dc2626">red = undefined</span> ·
|
|
47048
47101
|
<span style="color: #d97706">orange = mismatch</span>
|
|
47049
47102
|
</p>
|
|
@@ -47158,7 +47211,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
47158
47211
|
|
|
47159
47212
|
@if (hasExternal()) {
|
|
47160
47213
|
<p style="margin-top: 6px; color: #9ca3af; font-size: 10px">
|
|
47161
|
-
int = grid.
|
|
47214
|
+
int = grid.currentItems() (internal) · ext = externalItems input ·
|
|
47162
47215
|
<span style="color: #dc2626">red = undefined</span> ·
|
|
47163
47216
|
<span style="color: #d97706">orange = mismatch</span>
|
|
47164
47217
|
</p>
|
|
@@ -49883,6 +49936,8 @@ const SCHEDULER_ERROR_CODES = {
|
|
|
49883
49936
|
EDIT_SURFACE_FEATURE_OUTSIDE_SURFACE: 4502,
|
|
49884
49937
|
/** `[etSchedulerSwipeNavigation]` was placed on an element that is not an `[etScheduler]`. */
|
|
49885
49938
|
SWIPE_NAVIGATION_OUTSIDE_SCHEDULER: 4503,
|
|
49939
|
+
/** `[etSchedulerAppointmentDrag]` was placed on an element that is not an `[etScheduler]`. */
|
|
49940
|
+
APPOINTMENT_DRAG_OUTSIDE_SCHEDULER: 4504,
|
|
49886
49941
|
};
|
|
49887
49942
|
|
|
49888
49943
|
/** The built-in English labels. */
|
|
@@ -49990,16 +50045,35 @@ class SchedulerDirective {
|
|
|
49990
50045
|
/** Defaults to the locale's week start, else Monday. */
|
|
49991
50046
|
this.firstDayOfWeek = input(undefined, /* @ts-ignore */
|
|
49992
50047
|
...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
50048
|
+
/**
|
|
50049
|
+
* How many days the agenda view lists, counted from {@link focusedDate}'s own day rather than
|
|
50050
|
+
* from its week - the lever an open-ended "load more as you scroll" agenda grows. `null` keeps
|
|
50051
|
+
* the agenda on the week view's window, so switching between the two keeps the same days.
|
|
50052
|
+
*/
|
|
50053
|
+
this.agendaDays = input(null, /* @ts-ignore */
|
|
50054
|
+
...(ngDevMode ? [{ debugName: "agendaDays" }] : /* istanbul ignore next */ []));
|
|
50055
|
+
/**
|
|
50056
|
+
* Emits when a move or resize lands the appointment somewhere else - see
|
|
50057
|
+
* {@link commitAppointmentDrag}. `appointments` is yours, so nothing has changed until you apply
|
|
50058
|
+
* it; the preview drops on release, so persisting asynchronously wants an optimistic write.
|
|
50059
|
+
*/
|
|
50060
|
+
this.appointmentReschedule = output();
|
|
49993
50061
|
this.effectiveLocale = computed(() => this.locale() ?? this.defaultLocale, /* @ts-ignore */
|
|
49994
50062
|
...(ngDevMode ? [{ debugName: "effectiveLocale" }] : /* istanbul ignore next */ []));
|
|
49995
50063
|
this.effectiveFirstDayOfWeek = computed(() => this.firstDayOfWeek() ??
|
|
49996
50064
|
this.effectiveLocale()?.options?.weekStartsOn ??
|
|
49997
50065
|
1, /* @ts-ignore */
|
|
49998
50066
|
...(ngDevMode ? [{ debugName: "effectiveFirstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
50067
|
+
this.effectiveAgendaDays = computed(() => {
|
|
50068
|
+
const dayCount = this.agendaDays();
|
|
50069
|
+
return dayCount === null ? null : Math.max(1, Math.floor(dayCount));
|
|
50070
|
+
}, /* @ts-ignore */
|
|
50071
|
+
...(ngDevMode ? [{ debugName: "effectiveAgendaDays" }] : /* istanbul ignore next */ []));
|
|
49999
50072
|
/**
|
|
50000
50073
|
* The date span the active view is showing. Month pads out to full weeks, covering the grid's
|
|
50001
50074
|
* leading/trailing days from adjacent months; week and agenda share one 7-day window, since
|
|
50002
|
-
* agenda is a flat render of the same days the week view lays out on a grid
|
|
50075
|
+
* agenda is a flat render of the same days the week view lays out on a grid - unless
|
|
50076
|
+
* {@link agendaDays} opts the agenda out of that window.
|
|
50003
50077
|
*/
|
|
50004
50078
|
this.visibleRange = computed(() => {
|
|
50005
50079
|
const date = this.focusedDate();
|
|
@@ -50007,8 +50081,14 @@ class SchedulerDirective {
|
|
|
50007
50081
|
switch (this.view()) {
|
|
50008
50082
|
case 'day':
|
|
50009
50083
|
return { start: startOfDay(date), end: endOfDay(date) };
|
|
50084
|
+
case 'agenda': {
|
|
50085
|
+
const dayCount = this.effectiveAgendaDays();
|
|
50086
|
+
if (dayCount === null) {
|
|
50087
|
+
return { start: startOfWeek(date, { weekStartsOn }), end: endOfWeek(date, { weekStartsOn }) };
|
|
50088
|
+
}
|
|
50089
|
+
return { start: startOfDay(date), end: endOfDay(addDays(date, dayCount - 1)) };
|
|
50090
|
+
}
|
|
50010
50091
|
case 'week':
|
|
50011
|
-
case 'agenda':
|
|
50012
50092
|
return { start: startOfWeek(date, { weekStartsOn }), end: endOfWeek(date, { weekStartsOn }) };
|
|
50013
50093
|
case 'month':
|
|
50014
50094
|
default:
|
|
@@ -50019,8 +50099,26 @@ class SchedulerDirective {
|
|
|
50019
50099
|
}
|
|
50020
50100
|
}, /* @ts-ignore */
|
|
50021
50101
|
...(ngDevMode ? [{ debugName: "visibleRange" }] : /* istanbul ignore next */ []));
|
|
50022
|
-
/**
|
|
50023
|
-
|
|
50102
|
+
/**
|
|
50103
|
+
* The appointment being moved or resized by a drag, or `null` - see {@link beginAppointmentDrag}.
|
|
50104
|
+
* Set only while the pointer is down.
|
|
50105
|
+
*/
|
|
50106
|
+
this.appointmentDrag = signal(null, /* @ts-ignore */
|
|
50107
|
+
...(ngDevMode ? [{ debugName: "appointmentDrag" }] : /* istanbul ignore next */ []));
|
|
50108
|
+
/**
|
|
50109
|
+
* {@link appointments} with an in-flight {@link appointmentDrag} applied to the one being dragged.
|
|
50110
|
+
* Every layout derives from this, so a drag previews itself in whichever view is on screen.
|
|
50111
|
+
*/
|
|
50112
|
+
this.effectiveAppointments = computed(() => {
|
|
50113
|
+
const drag = this.appointmentDrag();
|
|
50114
|
+
const appointments = this.appointments();
|
|
50115
|
+
if (!drag)
|
|
50116
|
+
return appointments;
|
|
50117
|
+
return appointments.map((appointment) => appointment.id === drag.appointment.id ? { ...appointment, start: drag.start, end: drag.end } : appointment);
|
|
50118
|
+
}, /* @ts-ignore */
|
|
50119
|
+
...(ngDevMode ? [{ debugName: "effectiveAppointments" }] : /* istanbul ignore next */ []));
|
|
50120
|
+
/** {@link effectiveAppointments}, arranged into sub-appointment chains - see `buildAppointmentTree`. */
|
|
50121
|
+
this.appointmentTree = computed(() => buildAppointmentTree(this.effectiveAppointments()), /* @ts-ignore */
|
|
50024
50122
|
...(ngDevMode ? [{ debugName: "appointmentTree" }] : /* istanbul ignore next */ []));
|
|
50025
50123
|
/** The seven weekday names, starting from {@link effectiveFirstDayOfWeek} - for grid/agenda headers. */
|
|
50026
50124
|
this.weekdays = computed(() => {
|
|
@@ -50033,10 +50131,10 @@ class SchedulerDirective {
|
|
|
50033
50131
|
});
|
|
50034
50132
|
}, /* @ts-ignore */
|
|
50035
50133
|
...(ngDevMode ? [{ debugName: "weekdays" }] : /* istanbul ignore next */ []));
|
|
50036
|
-
/** {@link
|
|
50134
|
+
/** {@link effectiveAppointments} that overlap {@link visibleRange} at all - not yet bucketed per view. */
|
|
50037
50135
|
this.visibleAppointments = computed(() => {
|
|
50038
50136
|
const { start, end } = this.visibleRange();
|
|
50039
|
-
return this.
|
|
50137
|
+
return this.effectiveAppointments().filter((appointment) => appointment.start <= end && appointment.end >= start);
|
|
50040
50138
|
}, /* @ts-ignore */
|
|
50041
50139
|
...(ngDevMode ? [{ debugName: "visibleAppointments" }] : /* istanbul ignore next */ []));
|
|
50042
50140
|
/** The selected appointment itself, or `null` - resolved from {@link selectedAppointmentId}. */
|
|
@@ -50059,7 +50157,10 @@ class SchedulerDirective {
|
|
|
50059
50157
|
/** Where the current drag started, so extending backwards past it flips the range. */
|
|
50060
50158
|
this.draftAnchor = null;
|
|
50061
50159
|
}
|
|
50062
|
-
/**
|
|
50160
|
+
/**
|
|
50161
|
+
* Steps {@link focusedDate} forward by the active view's unit - a day, a week, a month, or the
|
|
50162
|
+
* agenda's own {@link agendaDays} span when it has one.
|
|
50163
|
+
*/
|
|
50063
50164
|
next() {
|
|
50064
50165
|
this.stepBy(1);
|
|
50065
50166
|
}
|
|
@@ -50108,12 +50209,46 @@ class SchedulerDirective {
|
|
|
50108
50209
|
this.draftAnchor = null;
|
|
50109
50210
|
this.draftRange.set(null);
|
|
50110
50211
|
}
|
|
50212
|
+
/**
|
|
50213
|
+
* Starts moving or resizing an appointment already on the calendar, previewed at its current time
|
|
50214
|
+
* until the first {@link updateAppointmentDrag}. A view calls this once its gesture has committed,
|
|
50215
|
+
* so a press that stays a click never begins one.
|
|
50216
|
+
*/
|
|
50217
|
+
beginAppointmentDrag(appointment, mode) {
|
|
50218
|
+
this.appointmentDrag.set({ appointment, mode, start: appointment.start, end: appointment.end });
|
|
50219
|
+
}
|
|
50220
|
+
/**
|
|
50221
|
+
* Previews the dragged appointment at `start`-`end`. Both ends come from the view: only it knows
|
|
50222
|
+
* what a pointer position means on its own geometry, and what its snapping and minimum are.
|
|
50223
|
+
*/
|
|
50224
|
+
updateAppointmentDrag(start, end) {
|
|
50225
|
+
this.appointmentDrag.update((drag) => (drag ? { ...drag, start, end } : null));
|
|
50226
|
+
}
|
|
50227
|
+
/**
|
|
50228
|
+
* Releases the drag, emitting {@link appointmentReschedule} when it landed on a different range.
|
|
50229
|
+
* The preview goes with it - the appointment renders from {@link appointments} again.
|
|
50230
|
+
*/
|
|
50231
|
+
commitAppointmentDrag() {
|
|
50232
|
+
const drag = this.appointmentDrag();
|
|
50233
|
+
this.appointmentDrag.set(null);
|
|
50234
|
+
if (!drag)
|
|
50235
|
+
return;
|
|
50236
|
+
const { appointment, start, end } = drag;
|
|
50237
|
+
if (start.getTime() === appointment.start.getTime() && end.getTime() === appointment.end.getTime())
|
|
50238
|
+
return;
|
|
50239
|
+
this.appointmentReschedule.emit({ appointment: { ...appointment, start, end }, previous: appointment });
|
|
50240
|
+
}
|
|
50241
|
+
/** Drops the drag without emitting - a gesture the browser took away, so no range was chosen. */
|
|
50242
|
+
clearAppointmentDrag() {
|
|
50243
|
+
this.appointmentDrag.set(null);
|
|
50244
|
+
}
|
|
50111
50245
|
stepBy(step) {
|
|
50112
50246
|
switch (this.view()) {
|
|
50113
50247
|
case 'day':
|
|
50114
50248
|
return this.focusedDate.set(addDays(this.focusedDate(), step));
|
|
50115
|
-
case 'week':
|
|
50116
50249
|
case 'agenda':
|
|
50250
|
+
return this.focusedDate.set(addDays(this.focusedDate(), step * (this.effectiveAgendaDays() ?? 7)));
|
|
50251
|
+
case 'week':
|
|
50117
50252
|
return this.focusedDate.set(addDays(this.focusedDate(), step * 7));
|
|
50118
50253
|
case 'month':
|
|
50119
50254
|
default:
|
|
@@ -50121,7 +50256,7 @@ class SchedulerDirective {
|
|
|
50121
50256
|
}
|
|
50122
50257
|
}
|
|
50123
50258
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
50124
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerDirective, isStandalone: true, selector: "[etScheduler]", inputs: { appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, focusedDate: { classPropertyName: "focusedDate", publicName: "focusedDate", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", focusedDate: "focusedDateChange", selectedAppointmentId: "selectedAppointmentIdChange" }, exportAs: ["etScheduler"], ngImport: i0 }); }
|
|
50259
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerDirective, isStandalone: true, selector: "[etScheduler]", inputs: { appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, focusedDate: { classPropertyName: "focusedDate", publicName: "focusedDate", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, agendaDays: { classPropertyName: "agendaDays", publicName: "agendaDays", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", focusedDate: "focusedDateChange", selectedAppointmentId: "selectedAppointmentIdChange", appointmentReschedule: "appointmentReschedule" }, exportAs: ["etScheduler"], ngImport: i0 }); }
|
|
50125
50260
|
}
|
|
50126
50261
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerDirective, decorators: [{
|
|
50127
50262
|
type: Directive,
|
|
@@ -50129,7 +50264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
50129
50264
|
selector: '[etScheduler]',
|
|
50130
50265
|
exportAs: 'etScheduler',
|
|
50131
50266
|
}]
|
|
50132
|
-
}], propDecorators: { appointments: [{ type: i0.Input, args: [{ isSignal: true, alias: "appointments", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], focusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusedDate", required: false }] }, { type: i0.Output, args: ["focusedDateChange"] }], selectedAppointmentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedAppointmentId", required: false }] }, { type: i0.Output, args: ["selectedAppointmentIdChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }] } });
|
|
50267
|
+
}], propDecorators: { appointments: [{ type: i0.Input, args: [{ isSignal: true, alias: "appointments", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], focusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusedDate", required: false }] }, { type: i0.Output, args: ["focusedDateChange"] }], selectedAppointmentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedAppointmentId", required: false }] }, { type: i0.Output, args: ["selectedAppointmentIdChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], agendaDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "agendaDays", required: false }] }], appointmentReschedule: [{ type: i0.Output, args: ["appointmentReschedule"] }] } });
|
|
50133
50268
|
|
|
50134
50269
|
const appointmentCoversDay$1 = (appointment, day) => appointment.start <= day.end && appointment.end >= day.start;
|
|
50135
50270
|
/**
|
|
@@ -50768,11 +50903,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
50768
50903
|
*/
|
|
50769
50904
|
class SchedulerAppointmentStylesComponent {
|
|
50770
50905
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerAppointmentStylesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50771
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: SchedulerAppointmentStylesComponent, isStandalone: true, selector: "et-scheduler-appointment-styles", ngImport: i0, template: '', isInline: true, styles: ["@layer components{.et-scheduler-appointment{display:flex;align-items:center;gap:6px;padding:2px 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}@media(hover:hover){.et-scheduler-appointment:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-appointment:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-appointment:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-appointment-title{overflow:hidden;min-inline-size:0;flex:1;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-dot{flex-shrink:0;inline-size:6px;block-size:6px;border-radius:999px;background:var(--et-theme-color-primary-solid)}:where(.et-scheduler-appointment,.et-scheduler-time-grid-block):where([data-selected]) .et-scheduler-appointment-dot{background:var(--et-theme-color-on-primary)}.et-scheduler-appointment-time-range{flex-shrink:0;font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.75}.et-scheduler-appointment-location{display:flex;flex-shrink:0;align-items:center;gap:3px;max-inline-size:40%;opacity:.75}.et-scheduler-appointment-location-icon{flex-shrink:0;inline-size:10px;block-size:10px}.et-scheduler-appointment-location-text{overflow:hidden;min-inline-size:0;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-chain-count{display:flex;flex-shrink:0;align-items:center;gap:2px;font-variant-numeric:tabular-nums;opacity:.75}.et-scheduler-appointment-chain-count-icon{inline-size:8px;block-size:8px;transform:rotate(90deg)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
50906
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: SchedulerAppointmentStylesComponent, isStandalone: true, selector: "et-scheduler-appointment-styles", ngImport: i0, template: '', isInline: true, styles: ["@layer components{.et-scheduler-appointment{display:flex;align-items:center;gap:6px;padding:2px 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}@media(hover:hover){.et-scheduler-appointment:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-appointment:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-appointment:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-appointment:where([data-draggable]){cursor:grab;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.et-scheduler-appointment:where([data-dragging]){box-shadow:0 2px 8px #00000040;cursor:grabbing}.et-scheduler-appointment-title{overflow:hidden;min-inline-size:0;flex:1;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-dot{flex-shrink:0;inline-size:6px;block-size:6px;border-radius:999px;background:var(--et-theme-color-primary-solid)}:where(.et-scheduler-appointment,.et-scheduler-time-grid-block):where([data-selected]) .et-scheduler-appointment-dot{background:var(--et-theme-color-on-primary)}.et-scheduler-appointment-time-range{flex-shrink:0;font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.75}.et-scheduler-appointment-location{display:flex;flex-shrink:0;align-items:center;gap:3px;max-inline-size:40%;opacity:.75}.et-scheduler-appointment-location-icon{flex-shrink:0;inline-size:10px;block-size:10px}.et-scheduler-appointment-location-text{overflow:hidden;min-inline-size:0;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-chain-count{display:flex;flex-shrink:0;align-items:center;gap:2px;font-variant-numeric:tabular-nums;opacity:.75}.et-scheduler-appointment-chain-count-icon{inline-size:8px;block-size:8px;transform:rotate(90deg)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
50772
50907
|
}
|
|
50773
50908
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerAppointmentStylesComponent, decorators: [{
|
|
50774
50909
|
type: Component,
|
|
50775
|
-
args: [{ selector: 'et-scheduler-appointment-styles', template: '', encapsulation: ViewEncapsulation.None, styles: ["@layer components{.et-scheduler-appointment{display:flex;align-items:center;gap:6px;padding:2px 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}@media(hover:hover){.et-scheduler-appointment:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-appointment:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-appointment:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-appointment-title{overflow:hidden;min-inline-size:0;flex:1;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-dot{flex-shrink:0;inline-size:6px;block-size:6px;border-radius:999px;background:var(--et-theme-color-primary-solid)}:where(.et-scheduler-appointment,.et-scheduler-time-grid-block):where([data-selected]) .et-scheduler-appointment-dot{background:var(--et-theme-color-on-primary)}.et-scheduler-appointment-time-range{flex-shrink:0;font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.75}.et-scheduler-appointment-location{display:flex;flex-shrink:0;align-items:center;gap:3px;max-inline-size:40%;opacity:.75}.et-scheduler-appointment-location-icon{flex-shrink:0;inline-size:10px;block-size:10px}.et-scheduler-appointment-location-text{overflow:hidden;min-inline-size:0;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-chain-count{display:flex;flex-shrink:0;align-items:center;gap:2px;font-variant-numeric:tabular-nums;opacity:.75}.et-scheduler-appointment-chain-count-icon{inline-size:8px;block-size:8px;transform:rotate(90deg)}}\n"] }]
|
|
50910
|
+
args: [{ selector: 'et-scheduler-appointment-styles', template: '', encapsulation: ViewEncapsulation.None, styles: ["@layer components{.et-scheduler-appointment{display:flex;align-items:center;gap:6px;padding:2px 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}@media(hover:hover){.et-scheduler-appointment:hover{background:color-mix(in srgb,var(--et-theme-color-primary-solid) 22%,transparent)}}.et-scheduler-appointment:focus-visible{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}.et-scheduler-appointment:where([data-selected]){background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary)}.et-scheduler-appointment:where([data-draggable]){cursor:grab;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.et-scheduler-appointment:where([data-dragging]){box-shadow:0 2px 8px #00000040;cursor:grabbing}.et-scheduler-appointment-title{overflow:hidden;min-inline-size:0;flex:1;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-dot{flex-shrink:0;inline-size:6px;block-size:6px;border-radius:999px;background:var(--et-theme-color-primary-solid)}:where(.et-scheduler-appointment,.et-scheduler-time-grid-block):where([data-selected]) .et-scheduler-appointment-dot{background:var(--et-theme-color-on-primary)}.et-scheduler-appointment-time-range{flex-shrink:0;font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.75}.et-scheduler-appointment-location{display:flex;flex-shrink:0;align-items:center;gap:3px;max-inline-size:40%;opacity:.75}.et-scheduler-appointment-location-icon{flex-shrink:0;inline-size:10px;block-size:10px}.et-scheduler-appointment-location-text{overflow:hidden;min-inline-size:0;text-overflow:ellipsis;white-space:nowrap}.et-scheduler-appointment-chain-count{display:flex;flex-shrink:0;align-items:center;gap:2px;font-variant-numeric:tabular-nums;opacity:.75}.et-scheduler-appointment-chain-count-icon{inline-size:8px;block-size:8px;transform:rotate(90deg)}}\n"] }]
|
|
50776
50911
|
}] });
|
|
50777
50912
|
|
|
50778
50913
|
/** The default agenda list: one section per visible day, appointments as full-width badges indented by chain depth. */
|
|
@@ -50781,15 +50916,21 @@ class SchedulerAgendaViewComponent {
|
|
|
50781
50916
|
this.scheduler = inject(SchedulerDirective, { optional: true });
|
|
50782
50917
|
this.agenda = inject(SchedulerAgendaDirective);
|
|
50783
50918
|
this.featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });
|
|
50784
|
-
this.days = computed(() =>
|
|
50785
|
-
const
|
|
50786
|
-
return {
|
|
50787
|
-
|
|
50788
|
-
|
|
50789
|
-
|
|
50790
|
-
|
|
50791
|
-
|
|
50792
|
-
|
|
50919
|
+
this.days = computed(() => {
|
|
50920
|
+
const withAppointments = this.agenda.days().filter((day) => day.nodes.length > 0);
|
|
50921
|
+
return withAppointments.map((day, dayIndex) => {
|
|
50922
|
+
const guides = buildSchedulerAgendaGuides(day.nodes);
|
|
50923
|
+
const previous = withAppointments[dayIndex - 1];
|
|
50924
|
+
return {
|
|
50925
|
+
...day,
|
|
50926
|
+
// no heading on the first day: the toolbar's own label already names the period it starts in
|
|
50927
|
+
month: previous && !isSameMonth(previous.date, day.date) ? this.monthLabel(day.date) : null,
|
|
50928
|
+
// deeper chains keep the last four levels rather than indenting off the edge - the elbow is
|
|
50929
|
+
// always the innermost guide, so slicing from the end keeps the row readable
|
|
50930
|
+
rows: day.nodes.map((node, index) => ({ node, guides: (guides[index] ?? []).slice(-4) })),
|
|
50931
|
+
};
|
|
50932
|
+
});
|
|
50933
|
+
}, /* @ts-ignore */
|
|
50793
50934
|
...(ngDevMode ? [{ debugName: "days" }] : /* istanbul ignore next */ []));
|
|
50794
50935
|
injectStyleManager().mount(SchedulerAppointmentStylesComponent);
|
|
50795
50936
|
}
|
|
@@ -50808,16 +50949,56 @@ class SchedulerAgendaViewComponent {
|
|
|
50808
50949
|
this.scheduler?.surfaceAnchor.set(element);
|
|
50809
50950
|
this.scheduler?.selectedAppointmentId.set(appointment.id);
|
|
50810
50951
|
}
|
|
50952
|
+
monthLabel(date) {
|
|
50953
|
+
const locale = this.scheduler?.effectiveLocale();
|
|
50954
|
+
return format(date, 'LLLL yyyy', locale ? { locale } : undefined);
|
|
50955
|
+
}
|
|
50811
50956
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerAgendaViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50812
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerAgendaViewComponent, isStandalone: true, selector: "et-scheduler-agenda-view", host: { classAttribute: "et-scheduler-agenda-view" }, hostDirectives: [{ directive: SchedulerAgendaDirective }], ngImport: i0, template: "@for (day of days(); track day.date.getTime()) {\n @if (day.
|
|
50957
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerAgendaViewComponent, isStandalone: true, selector: "et-scheduler-agenda-view", host: { classAttribute: "et-scheduler-agenda-view" }, hostDirectives: [{ directive: SchedulerAgendaDirective }], ngImport: i0, template: "@for (day of days(); track day.date.getTime()) {\n @if (day.month; as month) {\n <h3 class=\"et-scheduler-agenda-view-month\">{{ month }}</h3>\n }\n\n <div class=\"et-scheduler-agenda-view-day\">\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-agenda-view-day-header\">\n <span class=\"et-scheduler-agenda-view-day-weekday\">{{ weekdayLabel(day.date) }}</span>\n <span class=\"et-scheduler-agenda-view-day-date\">{{ day.date.getDate() }}</span>\n </div>\n\n <div class=\"et-scheduler-agenda-view-day-appointments\">\n @for (row of day.rows; track row.node.appointment.id) {\n <div class=\"et-scheduler-agenda-view-appointment\">\n @for (guide of row.guides; track $index) {\n <span [attr.data-guide]=\"guide\" class=\"et-scheduler-agenda-view-guide\" aria-hidden=\"true\"></span>\n }\n\n <button\n #appointmentButton\n [attr.data-selected]=\"isSelected(row.node.appointment) ? '' : null\"\n [attr.data-nested]=\"row.node.depth > 0 ? '' : null\"\n [etProvideColor]=\"row.node.appointment.colorToken ?? null\"\n (click)=\"select(row.node.appointment, appointmentButton)\"\n class=\"et-scheduler-appointment\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: row.node }; injector: adornment.injector\"\n />\n }\n </button>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{.et-scheduler-agenda-view{display:flex;flex-direction:column;gap:12px;overflow-y:auto}.et-scheduler-agenda-view-month{margin:8px 0 0;font-size:14px;font-weight:600;color:var(--et-surface-color-solid)}.et-scheduler-agenda-view-day{display:flex;flex-direction:column;gap:4px}.et-scheduler-agenda-view-day-header{display:flex;align-items:center;gap:8px;padding-block-end:4px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-agenda-view-day-weekday{font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-agenda-view-day-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-agenda-view-day-header:where([data-today]) .et-scheduler-agenda-view-day-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary);font-weight:600}.et-scheduler-agenda-view-day-appointments{display:flex;flex-direction:column;gap:2px}.et-scheduler-agenda-view-appointment{display:flex;align-items:stretch}.et-scheduler-agenda-view-appointment .et-scheduler-appointment{flex:1;min-inline-size:0}.et-scheduler-agenda-view-guide{position:relative;flex:none;inline-size:14px}.et-scheduler-agenda-view-guide:where([data-guide=trunk],[data-guide=branch],[data-guide=last-branch]):before{content:\"\";position:absolute;inset-block:-1px;inset-inline-start:50%;inline-size:1px;background:var(--et-surface-border-solid, currentColor)}.et-scheduler-agenda-view-guide:where([data-guide=last-branch]):before{inset-block:-1px 50%}.et-scheduler-agenda-view-guide:where([data-guide=branch],[data-guide=last-branch]):after{content:\"\";position:absolute;inset-block-start:50%;inset-inline:50% 0;block-size:1px;background:var(--et-surface-border-solid, currentColor)}}\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 }); }
|
|
50813
50958
|
}
|
|
50814
50959
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerAgendaViewComponent, decorators: [{
|
|
50815
50960
|
type: Component,
|
|
50816
50961
|
args: [{ selector: 'et-scheduler-agenda-view', encapsulation: ViewEncapsulation.None, imports: [ProvideColorDirective, NgComponentOutlet], hostDirectives: [SchedulerAgendaDirective], host: {
|
|
50817
50962
|
class: 'et-scheduler-agenda-view',
|
|
50818
|
-
}, template: "@for (day of days(); track day.date.getTime()) {\n @if (day.
|
|
50963
|
+
}, template: "@for (day of days(); track day.date.getTime()) {\n @if (day.month; as month) {\n <h3 class=\"et-scheduler-agenda-view-month\">{{ month }}</h3>\n }\n\n <div class=\"et-scheduler-agenda-view-day\">\n <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-agenda-view-day-header\">\n <span class=\"et-scheduler-agenda-view-day-weekday\">{{ weekdayLabel(day.date) }}</span>\n <span class=\"et-scheduler-agenda-view-day-date\">{{ day.date.getDate() }}</span>\n </div>\n\n <div class=\"et-scheduler-agenda-view-day-appointments\">\n @for (row of day.rows; track row.node.appointment.id) {\n <div class=\"et-scheduler-agenda-view-appointment\">\n @for (guide of row.guides; track $index) {\n <span [attr.data-guide]=\"guide\" class=\"et-scheduler-agenda-view-guide\" aria-hidden=\"true\"></span>\n }\n\n <button\n #appointmentButton\n [attr.data-selected]=\"isSelected(row.node.appointment) ? '' : null\"\n [attr.data-nested]=\"row.node.depth > 0 ? '' : null\"\n [etProvideColor]=\"row.node.appointment.colorToken ?? null\"\n (click)=\"select(row.node.appointment, appointmentButton)\"\n class=\"et-scheduler-appointment\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node: row.node }; injector: adornment.injector\"\n />\n }\n </button>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{.et-scheduler-agenda-view{display:flex;flex-direction:column;gap:12px;overflow-y:auto}.et-scheduler-agenda-view-month{margin:8px 0 0;font-size:14px;font-weight:600;color:var(--et-surface-color-solid)}.et-scheduler-agenda-view-day{display:flex;flex-direction:column;gap:4px}.et-scheduler-agenda-view-day-header{display:flex;align-items:center;gap:8px;padding-block-end:4px;border-block-end:1px solid var(--et-surface-border-solid)}.et-scheduler-agenda-view-day-weekday{font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-agenda-view-day-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-agenda-view-day-header:where([data-today]) .et-scheduler-agenda-view-day-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary);font-weight:600}.et-scheduler-agenda-view-day-appointments{display:flex;flex-direction:column;gap:2px}.et-scheduler-agenda-view-appointment{display:flex;align-items:stretch}.et-scheduler-agenda-view-appointment .et-scheduler-appointment{flex:1;min-inline-size:0}.et-scheduler-agenda-view-guide{position:relative;flex:none;inline-size:14px}.et-scheduler-agenda-view-guide:where([data-guide=trunk],[data-guide=branch],[data-guide=last-branch]):before{content:\"\";position:absolute;inset-block:-1px;inset-inline-start:50%;inline-size:1px;background:var(--et-surface-border-solid, currentColor)}.et-scheduler-agenda-view-guide:where([data-guide=last-branch]):before{inset-block:-1px 50%}.et-scheduler-agenda-view-guide:where([data-guide=branch],[data-guide=last-branch]):after{content:\"\";position:absolute;inset-block-start:50%;inset-inline:50% 0;block-size:1px;background:var(--et-surface-border-solid, currentColor)}}\n"] }]
|
|
50819
50964
|
}], ctorParameters: () => [] });
|
|
50820
50965
|
|
|
50966
|
+
/**
|
|
50967
|
+
* Lets appointments already on the calendar be dragged to another time: moved on the month, week and
|
|
50968
|
+
* day views, and resized by their edges on the week and day views. A completed drag emits
|
|
50969
|
+
* `appointmentReschedule` rather than writing anything - `appointments` stays yours.
|
|
50970
|
+
*
|
|
50971
|
+
* One of the default pieces `<et-scheduler>` bundles; add it to a bare `[etScheduler]` composition
|
|
50972
|
+
* to give its views the same gesture.
|
|
50973
|
+
*
|
|
50974
|
+
* @example
|
|
50975
|
+
* <et-scheduler [etSchedulerAppointmentDrag]="{ enabled: false }" … />
|
|
50976
|
+
*/
|
|
50977
|
+
class SchedulerAppointmentDragDirective {
|
|
50978
|
+
constructor() {
|
|
50979
|
+
this.elementRef = inject(ElementRef);
|
|
50980
|
+
this.scheduler = inject(SchedulerDirective, { optional: true });
|
|
50981
|
+
/** See {@link SchedulerAppointmentDragConfig}. */
|
|
50982
|
+
this.config = input({}, { ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'etSchedulerAppointmentDrag',
|
|
50983
|
+
transform: (schedulerFeatureConfig) });
|
|
50984
|
+
/** Whether the views should start a drag at all - what each of them checks on `pointerdown`. */
|
|
50985
|
+
this.isEnabled = computed(() => this.config().enabled ?? true, /* @ts-ignore */
|
|
50986
|
+
...(ngDevMode ? [{ debugName: "isEnabled" }] : /* istanbul ignore next */ []));
|
|
50987
|
+
if (!this.scheduler) {
|
|
50988
|
+
throw new RuntimeError(SCHEDULER_ERROR_CODES.APPOINTMENT_DRAG_OUTSIDE_SCHEDULER, '[etSchedulerAppointmentDrag] must be used on an <et-scheduler> or an [etScheduler] element.', { element: this.elementRef.nativeElement });
|
|
50989
|
+
}
|
|
50990
|
+
}
|
|
50991
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerAppointmentDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
50992
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SchedulerAppointmentDragDirective, isStandalone: true, selector: "[etSchedulerAppointmentDrag]", inputs: { config: { classPropertyName: "config", publicName: "etSchedulerAppointmentDrag", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["etSchedulerAppointmentDrag"], ngImport: i0 }); }
|
|
50993
|
+
}
|
|
50994
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerAppointmentDragDirective, decorators: [{
|
|
50995
|
+
type: Directive,
|
|
50996
|
+
args: [{
|
|
50997
|
+
selector: '[etSchedulerAppointmentDrag]',
|
|
50998
|
+
exportAs: 'etSchedulerAppointmentDrag',
|
|
50999
|
+
}]
|
|
51000
|
+
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerAppointmentDrag", required: false }] }] } });
|
|
51001
|
+
|
|
50821
51002
|
/**
|
|
50822
51003
|
* The sub-appointment chain piece of an appointment badge, stamped by `etSchedulerBadgeChainCount`.
|
|
50823
51004
|
* Renders a chevron and the total descendant count (every depth, not just direct children); hidden
|
|
@@ -51821,8 +52002,9 @@ class SchedulerSwipeNavigationDirective {
|
|
|
51821
52002
|
const tracker = this.tracker;
|
|
51822
52003
|
if (!tracker)
|
|
51823
52004
|
return;
|
|
51824
|
-
// A long press has armed
|
|
51825
|
-
|
|
52005
|
+
// A long press has armed a view's own gesture, so this finger is drawing a range or dragging an
|
|
52006
|
+
// appointment - either way it is not a period step.
|
|
52007
|
+
if (this.scheduler?.draftRange() || this.scheduler?.appointmentDrag())
|
|
51826
52008
|
return this.forgetGesture();
|
|
51827
52009
|
const { positiveMovementX, isScrolling } = tracker.update(event);
|
|
51828
52010
|
if (isScrolling)
|
|
@@ -51877,21 +52059,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
51877
52059
|
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "etSchedulerSwipeNavigation", required: false }] }] } });
|
|
51878
52060
|
|
|
51879
52061
|
/**
|
|
51880
|
-
* How long a finger has to stay still before it
|
|
52062
|
+
* How long a finger has to stay still before it drags instead of scrolls. Long enough that the
|
|
51881
52063
|
* browser has not started panning yet, short enough not to feel stuck.
|
|
51882
52064
|
*/
|
|
51883
52065
|
const TOUCH_ARM_DELAY = 400;
|
|
51884
52066
|
/**
|
|
51885
|
-
*
|
|
52067
|
+
* One drag on a scheduler view, for both pointer kinds - drawing a new range across empty grid, or
|
|
52068
|
+
* moving and resizing an appointment already on it.
|
|
51886
52069
|
*
|
|
51887
|
-
* A mouse
|
|
51888
|
-
*
|
|
51889
|
-
*
|
|
51890
|
-
*
|
|
51891
|
-
*
|
|
52070
|
+
* A mouse drags as soon as it passes the gesture's commit threshold, so a click stays a click. A
|
|
52071
|
+
* finger cannot: the views scroll vertically, so the browser claims the pan and cancels the gesture.
|
|
52072
|
+
* It therefore arms on a long press held still - early enough that panning has not begun - after
|
|
52073
|
+
* which `touchmove` is prevented so it never does. That listener has to stay non-passive, which is
|
|
52074
|
+
* why this listens through the renderer rather than an event binding.
|
|
51892
52075
|
*/
|
|
51893
|
-
const
|
|
51894
|
-
const { event, element, renderer, destroyRef,
|
|
52076
|
+
const startSchedulerDragGesture = (options) => {
|
|
52077
|
+
const { event, element, renderer, destroyRef, track, settle, cancel } = options;
|
|
51895
52078
|
const touch = event.pointerType === 'touch';
|
|
51896
52079
|
let armed = !touch;
|
|
51897
52080
|
const stopBlockingScroll = touch
|
|
@@ -51902,19 +52085,19 @@ const startSchedulerDraftGesture = (options) => {
|
|
|
51902
52085
|
: () => undefined;
|
|
51903
52086
|
const arm = () => {
|
|
51904
52087
|
armed = true;
|
|
51905
|
-
|
|
52088
|
+
track(event.clientX, event.clientY);
|
|
51906
52089
|
};
|
|
51907
52090
|
const arming = touch ? timer(TOUCH_ARM_DELAY).pipe(tap(arm), takeUntilDestroyed(destroyRef)).subscribe() : null;
|
|
51908
52091
|
const apply = (gesture) => {
|
|
51909
52092
|
switch (gesture.type) {
|
|
51910
52093
|
case 'start':
|
|
51911
|
-
return armed ?
|
|
52094
|
+
return armed ? track(gesture.data.clientX, gesture.data.clientY) : undefined;
|
|
51912
52095
|
case 'move':
|
|
51913
|
-
// a finger that moves before the press arms is scrolling the view, not
|
|
52096
|
+
// a finger that moves before the press arms is scrolling the view, not dragging on it
|
|
51914
52097
|
if (!armed)
|
|
51915
52098
|
return arming?.unsubscribe();
|
|
51916
|
-
return
|
|
51917
|
-
// a long press released without moving still
|
|
52099
|
+
return track(gesture.data.clientX, gesture.data.clientY);
|
|
52100
|
+
// a long press released without moving still tracked once, so it settles like a drag
|
|
51918
52101
|
case 'end':
|
|
51919
52102
|
case 'tapped':
|
|
51920
52103
|
return settle();
|
|
@@ -51936,6 +52119,7 @@ class SchedulerMonthViewComponent {
|
|
|
51936
52119
|
this.month = inject(SchedulerMonthDirective);
|
|
51937
52120
|
this.labels = injectSchedulerLabels();
|
|
51938
52121
|
this.featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });
|
|
52122
|
+
this.appointmentDrag = inject(SchedulerAppointmentDragDirective, { optional: true });
|
|
51939
52123
|
this.destroyRef = inject(DestroyRef);
|
|
51940
52124
|
this.renderer = injectRenderer();
|
|
51941
52125
|
this.weekRows = viewChildren('weekRow', /* @ts-ignore */
|
|
@@ -51944,6 +52128,11 @@ class SchedulerMonthViewComponent {
|
|
|
51944
52128
|
...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
|
|
51945
52129
|
this.draftAnchor = viewChild('draftAnchor', /* @ts-ignore */
|
|
51946
52130
|
...(ngDevMode ? [{ debugName: "draftAnchor" }] : /* istanbul ignore next */ []));
|
|
52131
|
+
/** Whether the `etSchedulerAppointmentDrag` feature is present and on - see that directive. */
|
|
52132
|
+
this.canDragAppointments = computed(() => this.appointmentDrag?.isEnabled() ?? false, /* @ts-ignore */
|
|
52133
|
+
...(ngDevMode ? [{ debugName: "canDragAppointments" }] : /* istanbul ignore next */ []));
|
|
52134
|
+
/** Whether the press now ending moved a badge, rather than being a click on it - see {@link select}. */
|
|
52135
|
+
this.hasDragged = false;
|
|
51947
52136
|
injectStyleManager().mount(SchedulerAppointmentStylesComponent);
|
|
51948
52137
|
}
|
|
51949
52138
|
/** UI contributed by badge features (title, time range, …) - see `registerBadgeAdornment`. */
|
|
@@ -51957,6 +52146,10 @@ class SchedulerMonthViewComponent {
|
|
|
51957
52146
|
return this.scheduler?.selectedAppointmentId() === appointment.id;
|
|
51958
52147
|
}
|
|
51959
52148
|
select(appointment, element = null) {
|
|
52149
|
+
// only a `pointerdown` sets this, and one always precedes the click it belongs to - which is why
|
|
52150
|
+
// the flag can live here and cannot go stale
|
|
52151
|
+
if (this.hasDragged)
|
|
52152
|
+
return;
|
|
51960
52153
|
this.scheduler?.surfaceAnchor.set(element);
|
|
51961
52154
|
this.scheduler?.selectedAppointmentId.set(appointment.id);
|
|
51962
52155
|
}
|
|
@@ -51964,6 +52157,54 @@ class SchedulerMonthViewComponent {
|
|
|
51964
52157
|
const draft = this.scheduler?.draftRange();
|
|
51965
52158
|
return !!draft && date >= startOfDay(draft.start) && date <= draft.end;
|
|
51966
52159
|
}
|
|
52160
|
+
isDragging(appointment) {
|
|
52161
|
+
return this.scheduler?.appointmentDrag()?.appointment.id === appointment.id;
|
|
52162
|
+
}
|
|
52163
|
+
/**
|
|
52164
|
+
* The cells a dragged appointment would land on. Needed on top of the badge's own preview: a target
|
|
52165
|
+
* cell already at `maxVisiblePerCell` collapses the badge into its overflow menu, leaving the drag
|
|
52166
|
+
* with no feedback at all.
|
|
52167
|
+
*/
|
|
52168
|
+
isDropTarget(date) {
|
|
52169
|
+
const drag = this.scheduler?.appointmentDrag();
|
|
52170
|
+
return !!drag && date >= startOfDay(drag.start) && date <= drag.end;
|
|
52171
|
+
}
|
|
52172
|
+
/**
|
|
52173
|
+
* Moves an appointment to another day cell, keeping its time of day and its duration - the month
|
|
52174
|
+
* works in whole days, so a badge has no edge to resize by. Touch arms on a long press, same as
|
|
52175
|
+
* drawing a range does; see `startSchedulerDragGesture`.
|
|
52176
|
+
*/
|
|
52177
|
+
startAppointmentDrag(event, target) {
|
|
52178
|
+
// a press on a badge must not also draw a fresh range across the cells underneath it
|
|
52179
|
+
event.stopPropagation();
|
|
52180
|
+
const scheduler = this.scheduler;
|
|
52181
|
+
if (!scheduler || !this.canDragAppointments() || event.button !== 0)
|
|
52182
|
+
return;
|
|
52183
|
+
const { appointment, weeks } = target;
|
|
52184
|
+
const grab = this.dateAt(weeks, event);
|
|
52185
|
+
if (!grab)
|
|
52186
|
+
return;
|
|
52187
|
+
this.hasDragged = false;
|
|
52188
|
+
startSchedulerDragGesture({
|
|
52189
|
+
event,
|
|
52190
|
+
element: weeks,
|
|
52191
|
+
renderer: this.renderer,
|
|
52192
|
+
destroyRef: this.destroyRef,
|
|
52193
|
+
track: (clientX, clientY) => {
|
|
52194
|
+
this.hasDragged = true;
|
|
52195
|
+
if (!scheduler.appointmentDrag())
|
|
52196
|
+
scheduler.beginAppointmentDrag(appointment, 'move');
|
|
52197
|
+
const to = this.dateAt(weeks, { clientX, clientY });
|
|
52198
|
+
// dragged off the grid: leave it on the last cell it was over rather than snapping home
|
|
52199
|
+
if (!to)
|
|
52200
|
+
return;
|
|
52201
|
+
const days = differenceInCalendarDays(to, grab);
|
|
52202
|
+
scheduler.updateAppointmentDrag(addDays(appointment.start, days), addDays(appointment.end, days));
|
|
52203
|
+
},
|
|
52204
|
+
settle: () => scheduler.commitAppointmentDrag(),
|
|
52205
|
+
cancel: () => scheduler.clearAppointmentDrag(),
|
|
52206
|
+
});
|
|
52207
|
+
}
|
|
51967
52208
|
/**
|
|
51968
52209
|
* Drags an all-day appointment's day span across the month grid. Whole days, so the range covers
|
|
51969
52210
|
* every cell between the one pressed and the one under the pointer, in either direction.
|
|
@@ -51975,12 +52216,12 @@ class SchedulerMonthViewComponent {
|
|
|
51975
52216
|
const anchor = this.dateAt(weeks, event);
|
|
51976
52217
|
if (!anchor)
|
|
51977
52218
|
return;
|
|
51978
|
-
|
|
52219
|
+
startSchedulerDragGesture({
|
|
51979
52220
|
event,
|
|
51980
52221
|
element: weeks,
|
|
51981
52222
|
renderer: this.renderer,
|
|
51982
52223
|
destroyRef: this.destroyRef,
|
|
51983
|
-
|
|
52224
|
+
track: (clientX, clientY) => {
|
|
51984
52225
|
const to = this.dateAt(weeks, { clientX, clientY }) ?? anchor;
|
|
51985
52226
|
const [from, until] = to < anchor ? [to, anchor] : [anchor, to];
|
|
51986
52227
|
scheduler.setDraftRange({ start: startOfDay(from), end: endOfDay(until), allDay: true });
|
|
@@ -52046,19 +52287,20 @@ class SchedulerMonthViewComponent {
|
|
|
52046
52287
|
return week[column]?.date ?? null;
|
|
52047
52288
|
}
|
|
52048
52289
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerMonthViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52049
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerMonthViewComponent, isStandalone: true, selector: "et-scheduler-month-view", host: { classAttribute: "et-scheduler-month-view" }, viewQueries: [{ propertyName: "weekRows", predicate: ["weekRow"], descendants: true, isSignal: true }, { propertyName: "cells", predicate: ["cell"], descendants: true, isSignal: true }, { propertyName: "draftAnchor", first: true, predicate: ["draftAnchor"], descendants: true, isSignal: true }], hostDirectives: [{ directive: SchedulerMonthDirective }], ngImport: i0, template: "<div class=\"et-scheduler-month-view-weekdays\" role=\"row\">\n @for (weekday of weekdays(); track weekday.long) {\n <span [attr.aria-label]=\"weekday.long\" class=\"et-scheduler-month-view-weekday\" role=\"columnheader\">{{\n weekday.short\n }}</span>\n }\n</div>\n\n<div #weeks (pointerdown)=\"startDraftRange($event, weeks)\" class=\"et-scheduler-month-view-weeks\" role=\"rowgroup\">\n <!-- stretched over the drawn range on release, so the create surface can anchor to the whole of it -->\n <div #draftAnchor class=\"et-scheduler-month-view-draft-anchor\" aria-hidden=\"true\"></div>\n\n @for (week of month.weeks(); track $index) {\n <div #weekRow class=\"et-scheduler-month-view-week\" role=\"row\">\n @for (cell of week; track cell.date.getTime()) {\n <div\n #cell\n [attr.data-outside-month]=\"cell.outsideMonth ? '' : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-draft]=\"isDrafted(cell.date) ? '' : null\"\n class=\"et-scheduler-month-view-cell\"\n role=\"gridcell\"\n >\n <span class=\"et-scheduler-month-view-cell-date\">{{ cell.date.getDate() }}</span>\n\n <!-- pointerdown is stopped on everything interactive below so a press that starts on an\n appointment or the overflow trigger does not also draw a range across the grid -->\n <div class=\"et-scheduler-month-view-cell-appointments\">\n @for (node of cell.visible; track node.appointment.id) {\n <button\n #appointmentButton\n [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n [attr.title]=\"node.appointment.title\"\n [etProvideColor]=\"node.appointment.colorToken ?? null\"\n (click)=\"select(node.appointment, appointmentButton)\"\n (pointerdown)=\"$event.
|
|
52290
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SchedulerMonthViewComponent, isStandalone: true, selector: "et-scheduler-month-view", host: { classAttribute: "et-scheduler-month-view" }, viewQueries: [{ propertyName: "weekRows", predicate: ["weekRow"], descendants: true, isSignal: true }, { propertyName: "cells", predicate: ["cell"], descendants: true, isSignal: true }, { propertyName: "draftAnchor", first: true, predicate: ["draftAnchor"], descendants: true, isSignal: true }], hostDirectives: [{ directive: SchedulerMonthDirective }], ngImport: i0, template: "<div class=\"et-scheduler-month-view-weekdays\" role=\"row\">\n @for (weekday of weekdays(); track weekday.long) {\n <span [attr.aria-label]=\"weekday.long\" class=\"et-scheduler-month-view-weekday\" role=\"columnheader\">{{\n weekday.short\n }}</span>\n }\n</div>\n\n<div #weeks (pointerdown)=\"startDraftRange($event, weeks)\" class=\"et-scheduler-month-view-weeks\" role=\"rowgroup\">\n <!-- stretched over the drawn range on release, so the create surface can anchor to the whole of it -->\n <div #draftAnchor class=\"et-scheduler-month-view-draft-anchor\" aria-hidden=\"true\"></div>\n\n @for (week of month.weeks(); track $index) {\n <div #weekRow class=\"et-scheduler-month-view-week\" role=\"row\">\n @for (cell of week; track cell.date.getTime()) {\n <div\n #cell\n [attr.data-outside-month]=\"cell.outsideMonth ? '' : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-draft]=\"isDrafted(cell.date) ? '' : null\"\n [attr.data-drop-target]=\"isDropTarget(cell.date) ? '' : null\"\n class=\"et-scheduler-month-view-cell\"\n role=\"gridcell\"\n >\n <span class=\"et-scheduler-month-view-cell-date\">{{ cell.date.getDate() }}</span>\n\n <!-- pointerdown is stopped on everything interactive below so a press that starts on an\n appointment or the overflow trigger does not also draw a range across the grid -->\n <div class=\"et-scheduler-month-view-cell-appointments\">\n @for (node of cell.visible; track node.appointment.id) {\n <button\n #appointmentButton\n [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n [attr.data-draggable]=\"canDragAppointments() ? '' : null\"\n [attr.data-dragging]=\"isDragging(node.appointment) ? '' : null\"\n [attr.title]=\"node.appointment.title\"\n [etProvideColor]=\"node.appointment.colorToken ?? null\"\n (click)=\"select(node.appointment, appointmentButton)\"\n (pointerdown)=\"startAppointmentDrag($event, { appointment: node.appointment, weeks })\"\n class=\"et-scheduler-appointment\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n\n @if (cell.overflow.length > 0) {\n <div class=\"et-scheduler-month-view-overflow\" etMenu>\n <button\n (pointerdown)=\"$event.stopPropagation()\"\n class=\"et-scheduler-month-view-overflow-trigger\"\n etMenuTrigger\n type=\"button\"\n >\n {{ labels().moreAppointments(cell.overflow.length) }}\n </button>\n\n <ng-template etMenuSurface>\n <et-menu>\n @for (node of cell.overflow; track node.appointment.id) {\n <button\n [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n [etProvideColor]=\"node.appointment.colorToken ?? null\"\n (click)=\"select(node.appointment)\"\n et-menu-item\n type=\"button\"\n >\n {{ node.appointment.title }}\n </button>\n }\n </et-menu>\n </ng-template>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n", styles: ["@layer components{@property --et-scheduler-month-view-cell-min-size{syntax: \"<length>\"; inherits: true; initial-value: 96px;}.et-scheduler-month-view{display:flex;flex-direction:column}.et-scheduler-month-view-weekdays,.et-scheduler-month-view-week{display:grid;grid-template-columns:repeat(7,1fr)}.et-scheduler-month-view-weekday{padding-block:6px;text-align:center;font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-month-view-weeks{position:relative;display:flex;flex-direction:column;flex:1;border-inline-start:1px solid var(--et-surface-border-solid);border-block-start:1px solid var(--et-surface-border-solid)}.et-scheduler-month-view-draft-anchor{position:absolute;pointer-events:none}.et-scheduler-month-view-week{flex:1;min-block-size:var(--et-scheduler-month-view-cell-min-size)}.et-scheduler-month-view-cell{display:flex;flex-direction:column;gap:2px;min-inline-size:0;padding:4px;overflow:hidden;border-inline-end:1px solid var(--et-surface-border-solid);border-block-end:1px solid var(--et-surface-border-solid);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.et-scheduler-month-view-cell:where([data-draft],[data-drop-target]){background:color-mix(in srgb,var(--et-theme-color-primary-solid) 12%,transparent);box-shadow:inset 0 0 0 1px var(--et-theme-color-primary-solid)}.et-scheduler-month-view-cell:where([data-outside-month]){color:var(--et-surface-color-subtle-solid)}.et-scheduler-month-view-cell:where([data-outside-month]) .et-scheduler-month-view-cell-date{color:var(--et-surface-color-subtle-solid)}.et-scheduler-month-view-cell-date{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;inline-size:22px;block-size:22px;border-radius:999px;font-size:12px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-solid)}.et-scheduler-month-view-cell:where([data-today]) .et-scheduler-month-view-cell-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary);font-weight:600}.et-scheduler-month-view-cell-appointments{display:flex;flex-direction:column;min-block-size:0;min-inline-size:0;gap:2px;overflow:hidden}.et-scheduler-month-view-cell-appointments .et-scheduler-appointment{gap:4px;min-inline-size:0;padding:2px 4px}.et-scheduler-month-view-cell-appointments .et-scheduler-appointment .et-scheduler-appointment-dot,.et-scheduler-month-view-cell-appointments .et-scheduler-appointment .et-scheduler-appointment-location{display:none}.et-scheduler-month-view-overflow-trigger{padding:2px 6px;border:none;background:transparent;color:var(--et-surface-color-muted-solid);font:inherit;font-size:12px;font-weight:500;text-align:start;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}@media(hover:hover){.et-scheduler-month-view-overflow-trigger:hover{color:var(--et-surface-color-solid)}}.et-scheduler-month-view-overflow-trigger:focus-visible{border-radius:4px;outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}}\n"], dependencies: [{ 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: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
52050
52291
|
}
|
|
52051
52292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerMonthViewComponent, decorators: [{
|
|
52052
52293
|
type: Component,
|
|
52053
52294
|
args: [{ selector: 'et-scheduler-month-view', encapsulation: ViewEncapsulation.None, imports: [...MENU_IMPORTS, ProvideColorDirective, NgComponentOutlet], hostDirectives: [SchedulerMonthDirective], host: {
|
|
52054
52295
|
class: 'et-scheduler-month-view',
|
|
52055
|
-
}, template: "<div class=\"et-scheduler-month-view-weekdays\" role=\"row\">\n @for (weekday of weekdays(); track weekday.long) {\n <span [attr.aria-label]=\"weekday.long\" class=\"et-scheduler-month-view-weekday\" role=\"columnheader\">{{\n weekday.short\n }}</span>\n }\n</div>\n\n<div #weeks (pointerdown)=\"startDraftRange($event, weeks)\" class=\"et-scheduler-month-view-weeks\" role=\"rowgroup\">\n <!-- stretched over the drawn range on release, so the create surface can anchor to the whole of it -->\n <div #draftAnchor class=\"et-scheduler-month-view-draft-anchor\" aria-hidden=\"true\"></div>\n\n @for (week of month.weeks(); track $index) {\n <div #weekRow class=\"et-scheduler-month-view-week\" role=\"row\">\n @for (cell of week; track cell.date.getTime()) {\n <div\n #cell\n [attr.data-outside-month]=\"cell.outsideMonth ? '' : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-draft]=\"isDrafted(cell.date) ? '' : null\"\n class=\"et-scheduler-month-view-cell\"\n role=\"gridcell\"\n >\n <span class=\"et-scheduler-month-view-cell-date\">{{ cell.date.getDate() }}</span>\n\n <!-- pointerdown is stopped on everything interactive below so a press that starts on an\n appointment or the overflow trigger does not also draw a range across the grid -->\n <div class=\"et-scheduler-month-view-cell-appointments\">\n @for (node of cell.visible; track node.appointment.id) {\n <button\n #appointmentButton\n [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n [attr.title]=\"node.appointment.title\"\n [etProvideColor]=\"node.appointment.colorToken ?? null\"\n (click)=\"select(node.appointment, appointmentButton)\"\n (pointerdown)=\"$event.
|
|
52296
|
+
}, template: "<div class=\"et-scheduler-month-view-weekdays\" role=\"row\">\n @for (weekday of weekdays(); track weekday.long) {\n <span [attr.aria-label]=\"weekday.long\" class=\"et-scheduler-month-view-weekday\" role=\"columnheader\">{{\n weekday.short\n }}</span>\n }\n</div>\n\n<div #weeks (pointerdown)=\"startDraftRange($event, weeks)\" class=\"et-scheduler-month-view-weeks\" role=\"rowgroup\">\n <!-- stretched over the drawn range on release, so the create surface can anchor to the whole of it -->\n <div #draftAnchor class=\"et-scheduler-month-view-draft-anchor\" aria-hidden=\"true\"></div>\n\n @for (week of month.weeks(); track $index) {\n <div #weekRow class=\"et-scheduler-month-view-week\" role=\"row\">\n @for (cell of week; track cell.date.getTime()) {\n <div\n #cell\n [attr.data-outside-month]=\"cell.outsideMonth ? '' : null\"\n [attr.data-today]=\"cell.today ? '' : null\"\n [attr.data-draft]=\"isDrafted(cell.date) ? '' : null\"\n [attr.data-drop-target]=\"isDropTarget(cell.date) ? '' : null\"\n class=\"et-scheduler-month-view-cell\"\n role=\"gridcell\"\n >\n <span class=\"et-scheduler-month-view-cell-date\">{{ cell.date.getDate() }}</span>\n\n <!-- pointerdown is stopped on everything interactive below so a press that starts on an\n appointment or the overflow trigger does not also draw a range across the grid -->\n <div class=\"et-scheduler-month-view-cell-appointments\">\n @for (node of cell.visible; track node.appointment.id) {\n <button\n #appointmentButton\n [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n [attr.data-draggable]=\"canDragAppointments() ? '' : null\"\n [attr.data-dragging]=\"isDragging(node.appointment) ? '' : null\"\n [attr.title]=\"node.appointment.title\"\n [etProvideColor]=\"node.appointment.colorToken ?? null\"\n (click)=\"select(node.appointment, appointmentButton)\"\n (pointerdown)=\"startAppointmentDrag($event, { appointment: node.appointment, weeks })\"\n class=\"et-scheduler-appointment\"\n type=\"button\"\n >\n @for (adornment of badgeAdornments(); track $index) {\n <ng-container\n *ngComponentOutlet=\"adornment.component; inputs: { node }; injector: adornment.injector\"\n />\n }\n </button>\n }\n\n @if (cell.overflow.length > 0) {\n <div class=\"et-scheduler-month-view-overflow\" etMenu>\n <button\n (pointerdown)=\"$event.stopPropagation()\"\n class=\"et-scheduler-month-view-overflow-trigger\"\n etMenuTrigger\n type=\"button\"\n >\n {{ labels().moreAppointments(cell.overflow.length) }}\n </button>\n\n <ng-template etMenuSurface>\n <et-menu>\n @for (node of cell.overflow; track node.appointment.id) {\n <button\n [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n [etProvideColor]=\"node.appointment.colorToken ?? null\"\n (click)=\"select(node.appointment)\"\n et-menu-item\n type=\"button\"\n >\n {{ node.appointment.title }}\n </button>\n }\n </et-menu>\n </ng-template>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n", styles: ["@layer components{@property --et-scheduler-month-view-cell-min-size{syntax: \"<length>\"; inherits: true; initial-value: 96px;}.et-scheduler-month-view{display:flex;flex-direction:column}.et-scheduler-month-view-weekdays,.et-scheduler-month-view-week{display:grid;grid-template-columns:repeat(7,1fr)}.et-scheduler-month-view-weekday{padding-block:6px;text-align:center;font-size:12px;font-weight:600;color:var(--et-surface-color-muted-solid)}.et-scheduler-month-view-weeks{position:relative;display:flex;flex-direction:column;flex:1;border-inline-start:1px solid var(--et-surface-border-solid);border-block-start:1px solid var(--et-surface-border-solid)}.et-scheduler-month-view-draft-anchor{position:absolute;pointer-events:none}.et-scheduler-month-view-week{flex:1;min-block-size:var(--et-scheduler-month-view-cell-min-size)}.et-scheduler-month-view-cell{display:flex;flex-direction:column;gap:2px;min-inline-size:0;padding:4px;overflow:hidden;border-inline-end:1px solid var(--et-surface-border-solid);border-block-end:1px solid var(--et-surface-border-solid);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.et-scheduler-month-view-cell:where([data-draft],[data-drop-target]){background:color-mix(in srgb,var(--et-theme-color-primary-solid) 12%,transparent);box-shadow:inset 0 0 0 1px var(--et-theme-color-primary-solid)}.et-scheduler-month-view-cell:where([data-outside-month]){color:var(--et-surface-color-subtle-solid)}.et-scheduler-month-view-cell:where([data-outside-month]) .et-scheduler-month-view-cell-date{color:var(--et-surface-color-subtle-solid)}.et-scheduler-month-view-cell-date{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;inline-size:22px;block-size:22px;border-radius:999px;font-size:12px;font-variant-numeric:tabular-nums;color:var(--et-surface-color-solid)}.et-scheduler-month-view-cell:where([data-today]) .et-scheduler-month-view-cell-date{background:var(--et-theme-color-primary-solid);color:var(--et-theme-color-on-primary);font-weight:600}.et-scheduler-month-view-cell-appointments{display:flex;flex-direction:column;min-block-size:0;min-inline-size:0;gap:2px;overflow:hidden}.et-scheduler-month-view-cell-appointments .et-scheduler-appointment{gap:4px;min-inline-size:0;padding:2px 4px}.et-scheduler-month-view-cell-appointments .et-scheduler-appointment .et-scheduler-appointment-dot,.et-scheduler-month-view-cell-appointments .et-scheduler-appointment .et-scheduler-appointment-location{display:none}.et-scheduler-month-view-overflow-trigger{padding:2px 6px;border:none;background:transparent;color:var(--et-surface-color-muted-solid);font:inherit;font-size:12px;font-weight:500;text-align:start;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}@media(hover:hover){.et-scheduler-month-view-overflow-trigger:hover{color:var(--et-surface-color-solid)}}.et-scheduler-month-view-overflow-trigger:focus-visible{border-radius:4px;outline:2px solid var(--et-theme-color-primary-solid);outline-offset:1px}}\n"] }]
|
|
52056
52297
|
}], ctorParameters: () => [], propDecorators: { weekRows: [{ type: i0.ViewChildren, args: ['weekRow', { isSignal: true }] }], cells: [{ type: i0.ViewChildren, args: ['cell', { isSignal: true }] }], draftAnchor: [{ type: i0.ViewChild, args: ['draftAnchor', { isSignal: true }] }] } });
|
|
52057
52298
|
|
|
52058
52299
|
const HOURS = /* @__PURE__ */ Array.from({ length: 24 }, (_, hour) => hour);
|
|
52059
52300
|
const MINUTES_PER_DAY = 24 * 60;
|
|
52060
|
-
|
|
52061
|
-
const
|
|
52301
|
+
/** What every range on the time axis snaps to, whether it is being drawn, moved or resized. */
|
|
52302
|
+
const SLOT_MINUTES = 15;
|
|
52303
|
+
const MINIMUM_DURATION = SLOT_MINUTES * 60 * 1000;
|
|
52062
52304
|
/** What a press that never drags creates - a click, or a long press released where it landed. */
|
|
52063
52305
|
const DEFAULT_DRAFT_MINUTES = 60;
|
|
52064
52306
|
const DEFAULT_DRAFT_DURATION = DEFAULT_DRAFT_MINUTES * 60 * 1000;
|
|
@@ -52072,6 +52314,7 @@ class SchedulerTimeGridViewComponent {
|
|
|
52072
52314
|
this.scheduler = inject(SchedulerDirective, { optional: true });
|
|
52073
52315
|
this.grid = inject(SchedulerTimeGridDirective);
|
|
52074
52316
|
this.featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });
|
|
52317
|
+
this.appointmentDrag = inject(SchedulerAppointmentDragDirective, { optional: true });
|
|
52075
52318
|
this.destroyRef = inject(DestroyRef);
|
|
52076
52319
|
this.hostInjector = inject(Injector);
|
|
52077
52320
|
this.renderer = injectRenderer();
|
|
@@ -52079,8 +52322,15 @@ class SchedulerTimeGridViewComponent {
|
|
|
52079
52322
|
...(ngDevMode ? [{ debugName: "timeGridBody" }] : /* istanbul ignore next */ []));
|
|
52080
52323
|
this.firstHourRow = viewChild('hourRow', /* @ts-ignore */
|
|
52081
52324
|
...(ngDevMode ? [{ debugName: "firstHourRow" }] : /* istanbul ignore next */ []));
|
|
52325
|
+
this.dayColumns = viewChildren('dayColumn', /* @ts-ignore */
|
|
52326
|
+
...(ngDevMode ? [{ debugName: "dayColumns" }] : /* istanbul ignore next */ []));
|
|
52082
52327
|
this.draftBlock = viewChild('draftBlock', /* @ts-ignore */
|
|
52083
52328
|
...(ngDevMode ? [{ debugName: "draftBlock" }] : /* istanbul ignore next */ []));
|
|
52329
|
+
/** Whether the `etSchedulerAppointmentDrag` feature is present and on - see that directive. */
|
|
52330
|
+
this.canDragAppointments = computed(() => this.appointmentDrag?.isEnabled() ?? false, /* @ts-ignore */
|
|
52331
|
+
...(ngDevMode ? [{ debugName: "canDragAppointments" }] : /* istanbul ignore next */ []));
|
|
52332
|
+
/** Whether the press now ending moved a block, rather than being a click on it - see {@link select}. */
|
|
52333
|
+
this.hasDragged = false;
|
|
52084
52334
|
this.hours = computed(() => {
|
|
52085
52335
|
const locale = this.scheduler?.effectiveLocale();
|
|
52086
52336
|
const reference = startOfDay(new Date());
|
|
@@ -52113,10 +52363,84 @@ class SchedulerTimeGridViewComponent {
|
|
|
52113
52363
|
isSelected(appointment) {
|
|
52114
52364
|
return this.scheduler?.selectedAppointmentId() === appointment.id;
|
|
52115
52365
|
}
|
|
52366
|
+
isDragging(appointment) {
|
|
52367
|
+
return this.scheduler?.appointmentDrag()?.appointment.id === appointment.id;
|
|
52368
|
+
}
|
|
52116
52369
|
select(appointment, element) {
|
|
52370
|
+
// only a `pointerdown` sets this, and one always precedes the click it belongs to - which is why
|
|
52371
|
+
// the flag can live here and cannot go stale
|
|
52372
|
+
if (this.hasDragged)
|
|
52373
|
+
return;
|
|
52117
52374
|
this.scheduler?.surfaceAnchor.set(element);
|
|
52118
52375
|
this.scheduler?.selectedAppointmentId.set(appointment.id);
|
|
52119
52376
|
}
|
|
52377
|
+
/**
|
|
52378
|
+
* Moves a block to another time or day, or drags one of its edges to resize it - the block's own
|
|
52379
|
+
* press moves it, its two edge handles resize it. Touch arms on a long press, same as drawing a
|
|
52380
|
+
* range does; see `startSchedulerDragGesture`.
|
|
52381
|
+
*/
|
|
52382
|
+
startAppointmentDrag(event, target) {
|
|
52383
|
+
// a press on a block must not also draw a fresh range down the column underneath it
|
|
52384
|
+
event.stopPropagation();
|
|
52385
|
+
const scheduler = this.scheduler;
|
|
52386
|
+
if (!scheduler || !this.canDragAppointments() || event.button !== 0)
|
|
52387
|
+
return;
|
|
52388
|
+
const { appointment, mode, column } = target;
|
|
52389
|
+
const drag = { ...target, grabMinutes: this.minutesAt(column.element, event.clientY) };
|
|
52390
|
+
this.hasDragged = false;
|
|
52391
|
+
startSchedulerDragGesture({
|
|
52392
|
+
event,
|
|
52393
|
+
element: column.element,
|
|
52394
|
+
renderer: this.renderer,
|
|
52395
|
+
destroyRef: this.destroyRef,
|
|
52396
|
+
track: (clientX, clientY) => {
|
|
52397
|
+
this.hasDragged = true;
|
|
52398
|
+
if (!scheduler.appointmentDrag())
|
|
52399
|
+
scheduler.beginAppointmentDrag(appointment, mode);
|
|
52400
|
+
const { start, end } = drag.mode === 'move' ? this.movedRange(drag, { clientX, clientY }) : this.resizedRange(drag, clientY);
|
|
52401
|
+
scheduler.updateAppointmentDrag(start, end);
|
|
52402
|
+
},
|
|
52403
|
+
settle: () => scheduler.commitAppointmentDrag(),
|
|
52404
|
+
cancel: () => scheduler.clearAppointmentDrag(),
|
|
52405
|
+
});
|
|
52406
|
+
}
|
|
52407
|
+
/**
|
|
52408
|
+
* Moves an all-day entry to other days, or drags one of its inline edges to change which days it
|
|
52409
|
+
* spans - the strip works in whole days, so both gestures are horizontal and a move keeps the
|
|
52410
|
+
* appointment's own times of day. Touch arms on a long press, same as a timed block does.
|
|
52411
|
+
*/
|
|
52412
|
+
startAllDayDrag(event, target) {
|
|
52413
|
+
// a press on an edge handle must not also start the entry moving
|
|
52414
|
+
event.stopPropagation();
|
|
52415
|
+
const scheduler = this.scheduler;
|
|
52416
|
+
if (!scheduler || !this.canDragAppointments() || event.button !== 0)
|
|
52417
|
+
return;
|
|
52418
|
+
const { appointment, mode, lane } = target;
|
|
52419
|
+
const grabDay = this.columnAt(event.clientX)?.day;
|
|
52420
|
+
if (!grabDay)
|
|
52421
|
+
return;
|
|
52422
|
+
const drag = { appointment, mode, grabDay };
|
|
52423
|
+
this.hasDragged = false;
|
|
52424
|
+
startSchedulerDragGesture({
|
|
52425
|
+
event,
|
|
52426
|
+
element: lane,
|
|
52427
|
+
renderer: this.renderer,
|
|
52428
|
+
destroyRef: this.destroyRef,
|
|
52429
|
+
track: (clientX) => {
|
|
52430
|
+
this.hasDragged = true;
|
|
52431
|
+
if (!scheduler.appointmentDrag())
|
|
52432
|
+
scheduler.beginAppointmentDrag(appointment, mode);
|
|
52433
|
+
const to = this.columnAt(clientX)?.day;
|
|
52434
|
+
// dragged off the strip: leave it on the last day it was over rather than snapping home
|
|
52435
|
+
if (!to)
|
|
52436
|
+
return;
|
|
52437
|
+
const { start, end } = this.allDayRange(drag, to);
|
|
52438
|
+
scheduler.updateAppointmentDrag(start, end);
|
|
52439
|
+
},
|
|
52440
|
+
settle: () => scheduler.commitAppointmentDrag(),
|
|
52441
|
+
cancel: () => scheduler.clearAppointmentDrag(),
|
|
52442
|
+
});
|
|
52443
|
+
}
|
|
52120
52444
|
/**
|
|
52121
52445
|
* Drags a new appointment's time range out of an empty part of a day column. With a mouse the
|
|
52122
52446
|
* gesture's own commit threshold separates a drag from a click, so a click on empty grid drafts
|
|
@@ -52127,17 +52451,17 @@ class SchedulerTimeGridViewComponent {
|
|
|
52127
52451
|
const scheduler = this.scheduler;
|
|
52128
52452
|
if (!scheduler || event.button !== 0)
|
|
52129
52453
|
return;
|
|
52130
|
-
|
|
52454
|
+
startSchedulerDragGesture({
|
|
52131
52455
|
event,
|
|
52132
52456
|
element: column.element,
|
|
52133
52457
|
renderer: this.renderer,
|
|
52134
52458
|
destroyRef: this.destroyRef,
|
|
52135
|
-
|
|
52459
|
+
track: (_, clientY) => {
|
|
52136
52460
|
const at = this.draftTimeAt(column, clientY);
|
|
52137
52461
|
// the first unit is the full default: a long press released without moving has to land on
|
|
52138
52462
|
// the same hour a click does, and the first drag move recomputes from the anchor anyway
|
|
52139
52463
|
return scheduler.draftRange()
|
|
52140
|
-
? scheduler.extendDraftRange(at,
|
|
52464
|
+
? scheduler.extendDraftRange(at, MINIMUM_DURATION)
|
|
52141
52465
|
: scheduler.beginDraftRange(at, DEFAULT_DRAFT_DURATION);
|
|
52142
52466
|
},
|
|
52143
52467
|
settle: () => {
|
|
@@ -52153,6 +52477,60 @@ class SchedulerTimeGridViewComponent {
|
|
|
52153
52477
|
cancel: () => scheduler.clearDraftRange(),
|
|
52154
52478
|
});
|
|
52155
52479
|
}
|
|
52480
|
+
/** The appointment shifted by whole day columns across, and by however far the pointer fell down. */
|
|
52481
|
+
movedRange(drag, at) {
|
|
52482
|
+
const { appointment, column, grabMinutes } = drag;
|
|
52483
|
+
const target = this.columnAt(at.clientX) ?? column;
|
|
52484
|
+
const days = differenceInCalendarDays(target.day, column.day);
|
|
52485
|
+
const minutes = this.minutesAt(target.element, at.clientY) - grabMinutes;
|
|
52486
|
+
const start = this.snapToSlot(addMinutes(addDays(appointment.start, days), minutes));
|
|
52487
|
+
return { start, end: new Date(start.getTime() + (appointment.end.getTime() - appointment.start.getTime())) };
|
|
52488
|
+
}
|
|
52489
|
+
/** One edge dragged to the pointer, stopping a slot short of the other so the block keeps a size. */
|
|
52490
|
+
resizedRange(drag, clientY) {
|
|
52491
|
+
const { appointment, column } = drag;
|
|
52492
|
+
const at = this.snapToSlot(addMinutes(startOfDay(column.day), this.minutesAt(column.element, clientY)));
|
|
52493
|
+
if (drag.mode === 'resize-start') {
|
|
52494
|
+
const latest = new Date(appointment.end.getTime() - MINIMUM_DURATION);
|
|
52495
|
+
return { start: at > latest ? latest : at, end: appointment.end };
|
|
52496
|
+
}
|
|
52497
|
+
const earliest = new Date(appointment.start.getTime() + MINIMUM_DURATION);
|
|
52498
|
+
return { start: appointment.start, end: at < earliest ? earliest : at };
|
|
52499
|
+
}
|
|
52500
|
+
/**
|
|
52501
|
+
* The all-day entry shifted to `to`, or one of its ends dragged there - whole days either way,
|
|
52502
|
+
* applied as a day offset so whatever times of day the appointment carries survive the drag. An
|
|
52503
|
+
* end stops on the other end's day rather than crossing it, leaving a one-day entry.
|
|
52504
|
+
*/
|
|
52505
|
+
allDayRange(drag, to) {
|
|
52506
|
+
const { appointment, mode, grabDay } = drag;
|
|
52507
|
+
const span = differenceInCalendarDays(appointment.end, appointment.start);
|
|
52508
|
+
switch (mode) {
|
|
52509
|
+
case 'resize-start': {
|
|
52510
|
+
const days = Math.min(differenceInCalendarDays(to, appointment.start), span);
|
|
52511
|
+
return { start: addDays(appointment.start, days), end: appointment.end };
|
|
52512
|
+
}
|
|
52513
|
+
case 'resize-end': {
|
|
52514
|
+
const days = Math.max(differenceInCalendarDays(to, appointment.end), -span);
|
|
52515
|
+
return { start: appointment.start, end: addDays(appointment.end, days) };
|
|
52516
|
+
}
|
|
52517
|
+
default: {
|
|
52518
|
+
const days = differenceInCalendarDays(to, grabDay);
|
|
52519
|
+
return { start: addDays(appointment.start, days), end: addDays(appointment.end, days) };
|
|
52520
|
+
}
|
|
52521
|
+
}
|
|
52522
|
+
}
|
|
52523
|
+
/** The day column a pointer is over, or `null` past the grid's last column on either side. */
|
|
52524
|
+
columnAt(clientX) {
|
|
52525
|
+
const columns = this.dayColumns();
|
|
52526
|
+
const index = columns.findIndex((column) => {
|
|
52527
|
+
const { left, right } = column.nativeElement.getBoundingClientRect();
|
|
52528
|
+
return clientX >= left && clientX <= right;
|
|
52529
|
+
});
|
|
52530
|
+
const element = columns[index]?.nativeElement;
|
|
52531
|
+
const day = this.grid.days()[index];
|
|
52532
|
+
return element && day ? { element, day: day.date } : null;
|
|
52533
|
+
}
|
|
52156
52534
|
/** A click on empty grid: an hour starting where it landed, snapped like a drawn range is. */
|
|
52157
52535
|
draftHourAt(column, clientY) {
|
|
52158
52536
|
const scheduler = this.scheduler;
|
|
@@ -52166,22 +52544,30 @@ class SchedulerTimeGridViewComponent {
|
|
|
52166
52544
|
scheduler.commitDraftRange();
|
|
52167
52545
|
}, { injector: this.hostInjector });
|
|
52168
52546
|
}
|
|
52169
|
-
/** The time a pointer at `clientY` sits at in `column`, snapped to the
|
|
52547
|
+
/** The time a pointer at `clientY` sits at in `column`, snapped to the grid's slot size. */
|
|
52170
52548
|
draftTimeAt(column, clientY) {
|
|
52171
|
-
|
|
52172
|
-
|
|
52173
|
-
|
|
52174
|
-
|
|
52549
|
+
return this.snapToSlot(addMinutes(startOfDay(column.day), this.minutesAt(column.element, clientY)));
|
|
52550
|
+
}
|
|
52551
|
+
/** How far into its day a pointer at `clientY` sits, in minutes, within a day column. */
|
|
52552
|
+
minutesAt(element, clientY) {
|
|
52553
|
+
const { top, height } = element.getBoundingClientRect();
|
|
52554
|
+
return Math.min(Math.max((clientY - top) / height, 0), 1) * MINUTES_PER_DAY;
|
|
52555
|
+
}
|
|
52556
|
+
/** `at` on the nearest slot boundary, so every range lands on the same grid the hour rows draw. */
|
|
52557
|
+
snapToSlot(at) {
|
|
52558
|
+
const dayStart = startOfDay(at);
|
|
52559
|
+
const minutes = differenceInMinutes(at, dayStart);
|
|
52560
|
+
return addMinutes(dayStart, Math.round(minutes / SLOT_MINUTES) * SLOT_MINUTES);
|
|
52175
52561
|
}
|
|
52176
52562
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerTimeGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52177
|
-
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 }, { propertyName: "draftBlock", first: true, predicate: ["draftBlock"], 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 #appointmentButton\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, appointmentButton)\"\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(); let dayIndex = $index) {\n <div\n #dayColumn\n [attr.data-today]=\"day.today ? '' : null\"\n (pointerdown)=\"startDraftRange($event, { element: dayColumn, day: day.date })\"\n class=\"et-scheduler-time-grid-day\"\n role=\"gridcell\"\n >\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @if (grid.draftBlock(); as draft) {\n @if (draft.dayIndex === dayIndex) {\n <div\n #draftBlock\n [style.--_et-scheduler-time-grid-block-offset]=\"draft.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"draft.span\"\n [attr.data-committed]=\"draft.phase === 'committed' ? '' : null\"\n class=\"et-scheduler-time-grid-draft\"\n role=\"presentation\"\n ></div>\n }\n }\n\n <!-- pointerdown is stopped below so a press that starts on an appointment does not reach the\n column's drag-to-create and lay a new range over the one already there -->\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n #appointmentButton\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, appointmentButton)\"\n (pointerdown)=\"$event.stopPropagation()\"\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);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.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-draft{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline:0 2px;block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);min-block-size:16px;border-radius:4px;border:1px dashed var(--et-theme-color-primary-solid);background:color-mix(in srgb,var(--et-theme-color-primary-solid) 10%,transparent);pointer-events:none}.et-scheduler-time-grid-draft:where([data-committed]){border-style:solid;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 18%,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 }); }
|
|
52563
|
+
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 }, { propertyName: "dayColumns", predicate: ["dayColumn"], descendants: true, isSignal: true }, { propertyName: "draftBlock", first: true, predicate: ["draftBlock"], 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 #allDayLane\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 #appointmentButton\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.data-draggable]=\"canDragAppointments() ? '' : null\"\n [attr.data-dragging]=\"isDragging(entry.node.appointment) ? '' : null\"\n [attr.title]=\"entry.node.appointment.title\"\n [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n (click)=\"select(entry.node.appointment, appointmentButton)\"\n (pointerdown)=\"\n startAllDayDrag($event, { appointment: entry.node.appointment, mode: 'move', lane: allDayLane })\n \"\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\n @if (canDragAppointments()) {\n <span\n (pointerdown)=\"\n startAllDayDrag($event, {\n appointment: entry.node.appointment,\n mode: 'resize-start',\n lane: allDayLane,\n })\n \"\n class=\"et-scheduler-time-grid-all-day-resize\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n ></span>\n\n <span\n (pointerdown)=\"\n startAllDayDrag($event, { appointment: entry.node.appointment, mode: 'resize-end', lane: allDayLane })\n \"\n class=\"et-scheduler-time-grid-all-day-resize\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n ></span>\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(); let dayIndex = $index) {\n <div\n #dayColumn\n [attr.data-today]=\"day.today ? '' : null\"\n (pointerdown)=\"startDraftRange($event, { element: dayColumn, day: day.date })\"\n class=\"et-scheduler-time-grid-day\"\n role=\"gridcell\"\n >\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @if (grid.draftBlock(); as draft) {\n @if (draft.dayIndex === dayIndex) {\n <div\n #draftBlock\n [style.--_et-scheduler-time-grid-block-offset]=\"draft.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"draft.span\"\n [attr.data-committed]=\"draft.phase === 'committed' ? '' : null\"\n class=\"et-scheduler-time-grid-draft\"\n role=\"presentation\"\n ></div>\n }\n }\n\n <!-- a block's own pointerdown moves it and stops there, so a press that starts on an\n appointment never reaches the column's drag-to-create underneath it -->\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n #appointmentButton\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.data-draggable]=\"canDragAppointments() ? '' : null\"\n [attr.data-dragging]=\"isDragging(block.node.appointment) ? '' : null\"\n [attr.title]=\"block.node.appointment.title\"\n [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n (click)=\"select(block.node.appointment, appointmentButton)\"\n (pointerdown)=\"\n startAppointmentDrag($event, {\n appointment: block.node.appointment,\n mode: 'move',\n column: { element: dayColumn, day: day.date },\n })\n \"\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\n @if (canDragAppointments()) {\n <span\n (pointerdown)=\"\n startAppointmentDrag($event, {\n appointment: block.node.appointment,\n mode: 'resize-start',\n column: { element: dayColumn, day: day.date },\n })\n \"\n class=\"et-scheduler-time-grid-block-resize\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n ></span>\n\n <span\n (pointerdown)=\"\n startAppointmentDrag($event, {\n appointment: block.node.appointment,\n mode: 'resize-end',\n column: { element: dayColumn, day: day.date },\n })\n \"\n class=\"et-scheduler-time-grid-block-resize\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n ></span>\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-all-day-resize{position:absolute;inset-block:0;inline-size:min(8px,25%);cursor:ew-resize}.et-scheduler-time-grid-all-day-resize:where([data-edge=start]){inset-inline-start:0}.et-scheduler-time-grid-all-day-resize:where([data-edge=end]){inset-inline-end:0}@media(any-pointer:coarse){.et-scheduler-time-grid-all-day-resize{inline-size:min(14px,25%)}}.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);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.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-draft{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline:0 2px;block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);min-block-size:16px;border-radius:4px;border:1px dashed var(--et-theme-color-primary-solid);background:color-mix(in srgb,var(--et-theme-color-primary-solid) 10%,transparent);pointer-events:none}.et-scheduler-time-grid-draft:where([data-committed]){border-style:solid;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 18%,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)}.et-scheduler-time-grid-block:where([data-draggable]){cursor:grab;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.et-scheduler-time-grid-block:where([data-dragging]){z-index:1;box-shadow:0 2px 8px #00000040;cursor:grabbing}.et-scheduler-time-grid-block-resize{position:absolute;inset-inline:0;block-size:min(8px,25%);cursor:ns-resize}.et-scheduler-time-grid-block-resize:where([data-edge=start]){inset-block-start:0}.et-scheduler-time-grid-block-resize:where([data-edge=end]){inset-block-end:0}@media(any-pointer:coarse){.et-scheduler-time-grid-block-resize{block-size:min(14px,25%)}}}\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 }); }
|
|
52178
52564
|
}
|
|
52179
52565
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerTimeGridViewComponent, decorators: [{
|
|
52180
52566
|
type: Component,
|
|
52181
52567
|
args: [{ selector: 'et-scheduler-time-grid-view', encapsulation: ViewEncapsulation.None, imports: [ProvideColorDirective, NgComponentOutlet], hostDirectives: [SchedulerTimeGridDirective], host: {
|
|
52182
52568
|
class: 'et-scheduler-time-grid-view',
|
|
52183
|
-
}, 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 #appointmentButton\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, appointmentButton)\"\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(); let dayIndex = $index) {\n <div\n #dayColumn\n [attr.data-today]=\"day.today ? '' : null\"\n (pointerdown)=\"startDraftRange($event, { element: dayColumn, day: day.date })\"\n class=\"et-scheduler-time-grid-day\"\n role=\"gridcell\"\n >\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @if (grid.draftBlock(); as draft) {\n @if (draft.dayIndex === dayIndex) {\n <div\n #draftBlock\n [style.--_et-scheduler-time-grid-block-offset]=\"draft.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"draft.span\"\n [attr.data-committed]=\"draft.phase === 'committed' ? '' : null\"\n class=\"et-scheduler-time-grid-draft\"\n role=\"presentation\"\n ></div>\n }\n }\n\n <!-- pointerdown is stopped below so a press that starts on an appointment does not reach the\n column's drag-to-create and lay a new range over the one already there -->\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n #appointmentButton\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, appointmentButton)\"\n (pointerdown)=\"$event.stopPropagation()\"\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);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.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-draft{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline:0 2px;block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);min-block-size:16px;border-radius:4px;border:1px dashed var(--et-theme-color-primary-solid);background:color-mix(in srgb,var(--et-theme-color-primary-solid) 10%,transparent);pointer-events:none}.et-scheduler-time-grid-draft:where([data-committed]){border-style:solid;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 18%,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"] }]
|
|
52184
|
-
}], ctorParameters: () => [], propDecorators: { timeGridBody: [{ type: i0.ViewChild, args: ['timeGridBody', { isSignal: true }] }], firstHourRow: [{ type: i0.ViewChild, args: ['hourRow', { isSignal: true }] }], draftBlock: [{ type: i0.ViewChild, args: ['draftBlock', { isSignal: true }] }] } });
|
|
52569
|
+
}, 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 #allDayLane\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 #appointmentButton\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.data-draggable]=\"canDragAppointments() ? '' : null\"\n [attr.data-dragging]=\"isDragging(entry.node.appointment) ? '' : null\"\n [attr.title]=\"entry.node.appointment.title\"\n [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n (click)=\"select(entry.node.appointment, appointmentButton)\"\n (pointerdown)=\"\n startAllDayDrag($event, { appointment: entry.node.appointment, mode: 'move', lane: allDayLane })\n \"\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\n @if (canDragAppointments()) {\n <span\n (pointerdown)=\"\n startAllDayDrag($event, {\n appointment: entry.node.appointment,\n mode: 'resize-start',\n lane: allDayLane,\n })\n \"\n class=\"et-scheduler-time-grid-all-day-resize\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n ></span>\n\n <span\n (pointerdown)=\"\n startAllDayDrag($event, { appointment: entry.node.appointment, mode: 'resize-end', lane: allDayLane })\n \"\n class=\"et-scheduler-time-grid-all-day-resize\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n ></span>\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(); let dayIndex = $index) {\n <div\n #dayColumn\n [attr.data-today]=\"day.today ? '' : null\"\n (pointerdown)=\"startDraftRange($event, { element: dayColumn, day: day.date })\"\n class=\"et-scheduler-time-grid-day\"\n role=\"gridcell\"\n >\n @for (hour of hours(); track hour.hour) {\n <div class=\"et-scheduler-time-grid-hour-row\" role=\"presentation\"></div>\n }\n\n @if (grid.draftBlock(); as draft) {\n @if (draft.dayIndex === dayIndex) {\n <div\n #draftBlock\n [style.--_et-scheduler-time-grid-block-offset]=\"draft.offset\"\n [style.--_et-scheduler-time-grid-block-span]=\"draft.span\"\n [attr.data-committed]=\"draft.phase === 'committed' ? '' : null\"\n class=\"et-scheduler-time-grid-draft\"\n role=\"presentation\"\n ></div>\n }\n }\n\n <!-- a block's own pointerdown moves it and stops there, so a press that starts on an\n appointment never reaches the column's drag-to-create underneath it -->\n @for (block of day.blocks; track block.node.appointment.id) {\n <button\n #appointmentButton\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.data-draggable]=\"canDragAppointments() ? '' : null\"\n [attr.data-dragging]=\"isDragging(block.node.appointment) ? '' : null\"\n [attr.title]=\"block.node.appointment.title\"\n [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n (click)=\"select(block.node.appointment, appointmentButton)\"\n (pointerdown)=\"\n startAppointmentDrag($event, {\n appointment: block.node.appointment,\n mode: 'move',\n column: { element: dayColumn, day: day.date },\n })\n \"\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\n @if (canDragAppointments()) {\n <span\n (pointerdown)=\"\n startAppointmentDrag($event, {\n appointment: block.node.appointment,\n mode: 'resize-start',\n column: { element: dayColumn, day: day.date },\n })\n \"\n class=\"et-scheduler-time-grid-block-resize\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n ></span>\n\n <span\n (pointerdown)=\"\n startAppointmentDrag($event, {\n appointment: block.node.appointment,\n mode: 'resize-end',\n column: { element: dayColumn, day: day.date },\n })\n \"\n class=\"et-scheduler-time-grid-block-resize\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n ></span>\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-all-day-resize{position:absolute;inset-block:0;inline-size:min(8px,25%);cursor:ew-resize}.et-scheduler-time-grid-all-day-resize:where([data-edge=start]){inset-inline-start:0}.et-scheduler-time-grid-all-day-resize:where([data-edge=end]){inset-inline-end:0}@media(any-pointer:coarse){.et-scheduler-time-grid-all-day-resize{inline-size:min(14px,25%)}}.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);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.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-draft{position:absolute;inset-block-start:calc(var(--_et-scheduler-time-grid-block-offset, 0) * 1%);inset-inline:0 2px;block-size:calc(var(--_et-scheduler-time-grid-block-span, 0) * 1%);min-block-size:16px;border-radius:4px;border:1px dashed var(--et-theme-color-primary-solid);background:color-mix(in srgb,var(--et-theme-color-primary-solid) 10%,transparent);pointer-events:none}.et-scheduler-time-grid-draft:where([data-committed]){border-style:solid;background:color-mix(in srgb,var(--et-theme-color-primary-solid) 18%,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)}.et-scheduler-time-grid-block:where([data-draggable]){cursor:grab;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.et-scheduler-time-grid-block:where([data-dragging]){z-index:1;box-shadow:0 2px 8px #00000040;cursor:grabbing}.et-scheduler-time-grid-block-resize{position:absolute;inset-inline:0;block-size:min(8px,25%);cursor:ns-resize}.et-scheduler-time-grid-block-resize:where([data-edge=start]){inset-block-start:0}.et-scheduler-time-grid-block-resize:where([data-edge=end]){inset-block-end:0}@media(any-pointer:coarse){.et-scheduler-time-grid-block-resize{block-size:min(14px,25%)}}}\n"] }]
|
|
52570
|
+
}], ctorParameters: () => [], propDecorators: { timeGridBody: [{ type: i0.ViewChild, args: ['timeGridBody', { isSignal: true }] }], firstHourRow: [{ type: i0.ViewChild, args: ['hourRow', { isSignal: true }] }], dayColumns: [{ type: i0.ViewChildren, args: ['dayColumn', { isSignal: true }] }], draftBlock: [{ type: i0.ViewChild, args: ['draftBlock', { isSignal: true }] }] } });
|
|
52185
52571
|
|
|
52186
52572
|
const NARROW_CONTAINER_WIDTH = 480;
|
|
52187
52573
|
class SchedulerComponent {
|
|
@@ -52390,7 +52776,7 @@ class SchedulerComponent {
|
|
|
52390
52776
|
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: [
|
|
52391
52777
|
provideIcons(CALENDAR_ICON, CHEVRON_ICON, PLUS_ICON),
|
|
52392
52778
|
{ provide: SCHEDULER_FEATURE_HOST, useExisting: SchedulerComponent },
|
|
52393
|
-
], 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"] }, { directive: SchedulerSwipeNavigationDirective, inputs: ["etSchedulerSwipeNavigation", "etSchedulerSwipeNavigation"] }], ngImport: i0, template: "<div class=\"et-scheduler-header\">\n <button\n [attr.aria-label]=\"todayLabel()\"\n (click)=\"headless.goToToday()\"\n class=\"et-scheduler-today-button\"\n et-button\n size=\"sm\"\n variant=\"outline\"\n type=\"button\"\n >\n <i etIcon=\"et-calendar\" aria-hidden=\"true\"></i>\n <span class=\"et-scheduler-today-button-label\">{{ todayLabel() }}</span>\n </button>\n\n @if (isNarrow()) {\n <div class=\"et-scheduler-toolbar-fabs\" etFloatingAction>\n <div etFloatingActionAnchor>\n <div class=\"et-scheduler-toolbar-fab-stack\" etFloatingActionTrigger>\n @for (action of toolbarActions(); track $index) {\n <!-- The icon has to be a static child of the FAB to reach its icon slot, so the two\n shapes are separate elements rather than one with a conditional icon inside. -->\n @if (action.icon; as icon) {\n <button\n [attr.aria-label]=\"action.label()\"\n (click)=\"action.run()\"\n class=\"et-scheduler-toolbar-action\"\n et-fab\n type=\"button\"\n >\n <i [etIcon]=\"icon\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-fab expanded type=\"button\">\n {{ action.label() }}\n </button>\n }\n }\n </div>\n </div>\n </div>\n } @else {\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\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%}.et-scheduler-toolbar-fab-stack{display:flex;gap:8px}@container et-scheduler not (min-inline-size: 480px){.et-scheduler .et-scheduler-today-button{--et-button-padding: 0;inline-size:3.1rem;block-size:3.1rem;border-radius:9999px}.et-scheduler .et-scheduler-today-button-label{display:none}}@container et-scheduler (min-inline-size: 480px){.et-scheduler-header-spacer{display:block}.et-scheduler-view-switch{flex-basis:auto}.et-scheduler .et-scheduler-today-button .et-button-icon{display:none}}.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: FabComponent, selector: "[et-fab]", inputs: ["variant", "size", "expanded", "iconAlignment"] }, { kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "directive", type: FloatingActionDirective, selector: "[etFloatingAction]", inputs: ["disabled"], exportAs: ["etFloatingAction"] }, { kind: "directive", type: FloatingActionAnchorDirective, selector: "[etFloatingActionAnchor]", exportAs: ["etFloatingActionAnchor"] }, { kind: "directive", type: FloatingActionTriggerDirective, selector: "[etFloatingActionTrigger]", exportAs: ["etFloatingActionTrigger"] }, { 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 }); }
|
|
52779
|
+
], hostDirectives: [{ directive: SchedulerDirective, inputs: ["appointments", "appointments", "view", "view", "focusedDate", "focusedDate", "selectedAppointmentId", "selectedAppointmentId", "locale", "locale", "firstDayOfWeek", "firstDayOfWeek", "agendaDays", "agendaDays"], outputs: ["viewChange", "viewChange", "focusedDateChange", "focusedDateChange", "selectedAppointmentIdChange", "selectedAppointmentIdChange", "appointmentReschedule", "appointmentReschedule"] }, { 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"] }, { directive: SchedulerSwipeNavigationDirective, inputs: ["etSchedulerSwipeNavigation", "etSchedulerSwipeNavigation"] }, { directive: SchedulerAppointmentDragDirective, inputs: ["etSchedulerAppointmentDrag", "etSchedulerAppointmentDrag"] }], ngImport: i0, template: "<div class=\"et-scheduler-header\">\n <button\n [attr.aria-label]=\"todayLabel()\"\n (click)=\"headless.goToToday()\"\n class=\"et-scheduler-today-button\"\n et-button\n size=\"sm\"\n variant=\"outline\"\n type=\"button\"\n >\n <i etIcon=\"et-calendar\" aria-hidden=\"true\"></i>\n <span class=\"et-scheduler-today-button-label\">{{ todayLabel() }}</span>\n </button>\n\n @if (isNarrow()) {\n <div class=\"et-scheduler-toolbar-fabs\" etFloatingAction>\n <div etFloatingActionAnchor>\n <div class=\"et-scheduler-toolbar-fab-stack\" etFloatingActionTrigger>\n @for (action of toolbarActions(); track $index) {\n <!-- The icon has to be a static child of the FAB to reach its icon slot, so the two\n shapes are separate elements rather than one with a conditional icon inside. -->\n @if (action.icon; as icon) {\n <button\n [attr.aria-label]=\"action.label()\"\n (click)=\"action.run()\"\n class=\"et-scheduler-toolbar-action\"\n et-fab\n type=\"button\"\n >\n <i [etIcon]=\"icon\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-fab expanded type=\"button\">\n {{ action.label() }}\n </button>\n }\n }\n </div>\n </div>\n </div>\n } @else {\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\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%}.et-scheduler-toolbar-fab-stack{display:flex;gap:8px}@container et-scheduler not (min-inline-size: 480px){.et-scheduler .et-scheduler-today-button{--et-button-padding: 0;inline-size:3.1rem;block-size:3.1rem;border-radius:9999px}.et-scheduler .et-scheduler-today-button-label{display:none}}@container et-scheduler (min-inline-size: 480px){.et-scheduler-header-spacer{display:block}.et-scheduler-view-switch{flex-basis:auto}.et-scheduler .et-scheduler-today-button .et-button-icon{display:none}}.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: FabComponent, selector: "[et-fab]", inputs: ["variant", "size", "expanded", "iconAlignment"] }, { kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "directive", type: FloatingActionDirective, selector: "[etFloatingAction]", inputs: ["disabled"], exportAs: ["etFloatingAction"] }, { kind: "directive", type: FloatingActionAnchorDirective, selector: "[etFloatingActionAnchor]", exportAs: ["etFloatingActionAnchor"] }, { kind: "directive", type: FloatingActionTriggerDirective, selector: "[etFloatingActionTrigger]", exportAs: ["etFloatingActionTrigger"] }, { 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 }); }
|
|
52394
52780
|
}
|
|
52395
52781
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SchedulerComponent, decorators: [{
|
|
52396
52782
|
type: Component,
|
|
@@ -52409,8 +52795,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52409
52795
|
], hostDirectives: [
|
|
52410
52796
|
{
|
|
52411
52797
|
directive: SchedulerDirective,
|
|
52412
|
-
inputs: [
|
|
52413
|
-
|
|
52798
|
+
inputs: [
|
|
52799
|
+
'appointments',
|
|
52800
|
+
'view',
|
|
52801
|
+
'focusedDate',
|
|
52802
|
+
'selectedAppointmentId',
|
|
52803
|
+
'locale',
|
|
52804
|
+
'firstDayOfWeek',
|
|
52805
|
+
'agendaDays',
|
|
52806
|
+
],
|
|
52807
|
+
outputs: ['viewChange', 'focusedDateChange', 'selectedAppointmentIdChange', 'appointmentReschedule'],
|
|
52414
52808
|
},
|
|
52415
52809
|
// The built-in badge adornments, bundled by default so `<et-scheduler>` renders a full badge
|
|
52416
52810
|
// zero-config - each forwards its own config input, so e.g. `[etSchedulerBadgeLocation]="{
|
|
@@ -52422,6 +52816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
52422
52816
|
{ directive: SchedulerBadgeChainCountDirective, inputs: ['etSchedulerBadgeChainCount'] },
|
|
52423
52817
|
{ directive: SchedulerActionAddAppointmentDirective, inputs: ['etSchedulerActionAddAppointment'] },
|
|
52424
52818
|
{ directive: SchedulerSwipeNavigationDirective, inputs: ['etSchedulerSwipeNavigation'] },
|
|
52819
|
+
{ directive: SchedulerAppointmentDragDirective, inputs: ['etSchedulerAppointmentDrag'] },
|
|
52425
52820
|
], host: {
|
|
52426
52821
|
class: 'et-scheduler',
|
|
52427
52822
|
}, template: "<div class=\"et-scheduler-header\">\n <button\n [attr.aria-label]=\"todayLabel()\"\n (click)=\"headless.goToToday()\"\n class=\"et-scheduler-today-button\"\n et-button\n size=\"sm\"\n variant=\"outline\"\n type=\"button\"\n >\n <i etIcon=\"et-calendar\" aria-hidden=\"true\"></i>\n <span class=\"et-scheduler-today-button-label\">{{ todayLabel() }}</span>\n </button>\n\n @if (isNarrow()) {\n <div class=\"et-scheduler-toolbar-fabs\" etFloatingAction>\n <div etFloatingActionAnchor>\n <div class=\"et-scheduler-toolbar-fab-stack\" etFloatingActionTrigger>\n @for (action of toolbarActions(); track $index) {\n <!-- The icon has to be a static child of the FAB to reach its icon slot, so the two\n shapes are separate elements rather than one with a conditional icon inside. -->\n @if (action.icon; as icon) {\n <button\n [attr.aria-label]=\"action.label()\"\n (click)=\"action.run()\"\n class=\"et-scheduler-toolbar-action\"\n et-fab\n type=\"button\"\n >\n <i [etIcon]=\"icon\" aria-hidden=\"true\"></i>\n </button>\n } @else {\n <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-fab expanded type=\"button\">\n {{ action.label() }}\n </button>\n }\n }\n </div>\n </div>\n </div>\n } @else {\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\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%}.et-scheduler-toolbar-fab-stack{display:flex;gap:8px}@container et-scheduler not (min-inline-size: 480px){.et-scheduler .et-scheduler-today-button{--et-button-padding: 0;inline-size:3.1rem;block-size:3.1rem;border-radius:9999px}.et-scheduler .et-scheduler-today-button-label{display:none}}@container et-scheduler (min-inline-size: 480px){.et-scheduler-header-spacer{display:block}.et-scheduler-view-switch{flex-basis:auto}.et-scheduler .et-scheduler-today-button .et-button-icon{display:none}}.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"] }]
|
|
@@ -52452,6 +52847,7 @@ const SCHEDULER_IMPORTS = [
|
|
|
52452
52847
|
SchedulerActionDeleteDirective,
|
|
52453
52848
|
SchedulerActionAddAppointmentDirective,
|
|
52454
52849
|
SchedulerSwipeNavigationDirective,
|
|
52850
|
+
SchedulerAppointmentDragDirective,
|
|
52455
52851
|
];
|
|
52456
52852
|
|
|
52457
52853
|
/** The built-in English labels. */
|
|
@@ -63892,11 +64288,11 @@ const TREE_IMPORTS = [TreeComponent, TreeDirective, TreeNodeDirective, TreeNodeD
|
|
|
63892
64288
|
|
|
63893
64289
|
// Generated from package.json by tools/scripts/generate-version.js - do not edit.
|
|
63894
64290
|
/** The version of `@ethlete/components` this build was cut from. */
|
|
63895
|
-
const COMPONENTS_VERSION = '1.0.0-next.
|
|
64291
|
+
const COMPONENTS_VERSION = '1.0.0-next.46';
|
|
63896
64292
|
|
|
63897
64293
|
/**
|
|
63898
64294
|
* Generated bundle index. Do not edit.
|
|
63899
64295
|
*/
|
|
63900
64296
|
|
|
63901
|
-
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_ICON_ALIGNMENTS, BADGE_IMPORTS, BADGE_SIZES, 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, ButtonColorDirective, 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, COMPONENTS_VERSION, 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, ControlSuffixDirective, 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, DESCRIPTION_LIST_VARIANTS, 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, FIELD_WARNINGS, FIELD_WARNING_KIND, 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, FORM_WARNING_MESSAGE_RESOLVER, FabComponent, FacebookPlayerComponent, FacebookPlayerDirective, FacebookPlayerParamsDirective, FacebookPlayerSlotComponent, FilterOverlayResetDirective, FilterOverlaySubmitDirective, FloatingActionAnchorDirective, FloatingActionDirective, FloatingActionScopeDirective, FloatingActionTopDirective, FloatingActionTriggerDirective, FocusRingDirective, FormErrorComponent, FormFieldBarrierDirective, FormFieldComponent, FormFieldDirective, FormWarningComponent, 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, INHERIT_COLOR, 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, KBD_IMPORTS, KBD_PLATFORM, KICK_PLAYER_TOKEN, KbdComponent, 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_STEPS_ORIENTATIONS, 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_ERROR_ERROR_CODES, QUERY_ERROR_IMPORTS, QUERY_ERROR_LABELS, QUERY_ERROR_TOKEN, QUOTE_ICON, 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_ADD_SURFACE_OVERLAY, 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, SchedulerSwipeNavigationDirective, 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, TIMELINE_IMPORTS, 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, TimelineComponent, TimelineItemComponent, 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, clearLeavingSupportStateOnExit, 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, detectKbdPlatform, dialogOverlayStrategy, disposeDropzoneEntry, doubleEliminationBracketLayout, dropzoneFiles, enableDragToDismiss, extractFirstImageUrl, filterOverlayLabelsForLocale, filterOverlayPreviewFromQuery, filterRows, findCollision, findNextRelevantHtmlElement, findScrollableAncestor, formatDuration, formatFileSize, fromGridPosition, fullScreenDialogOverlayStrategy, generateBracketDataForEthlete, generateRoundTypeFromEthleteRoundType, generateTournamentModeFormEthleteRounds, getClosestOverlay, getOriginCoordinatesAndDimensions, hexColor, 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, kbdKeyLabel, kbdKeyName, leftSheetOverlayStrategy, legacyQueryErrorSource, mapLayoutToBreakpoint, matchCountryByDialCode, matchParticipantDisplayName, mergeOverlayBreakpointConfigs, mergeOverlayConfigs, mirroredDoubleEliminationBracketLayout, mirroredSingleEliminationBracketLayout, mountRichTextEditorImageStyles, mountRichTextEditorTableStyles, nodesEqual$1 as nodesEqual, normalizeEthleteBracketMatch, normalizeEthleteGroupRanking, normalizeEthleteMatch, normalizeEthleteMatchStatus, normalizeEthleteMedia, normalizeEthleteParticipant, normalizeEthletePlacement, normalizePictureSizes, normalizePictureSource, numberInputStepMultiplierFrom, paginate, parseDuration, parseKbdKeys, 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, provideFormWarningMessageResolver, 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, rgbColor, 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, warn, wireFormSupport, withPictureBaseUrl };
|
|
64297
|
+
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_ICON_ALIGNMENTS, BADGE_IMPORTS, BADGE_SIZES, 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, ButtonColorDirective, 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, COMPONENTS_VERSION, 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, ControlSuffixDirective, 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, DESCRIPTION_LIST_VARIANTS, 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, FIELD_WARNINGS, FIELD_WARNING_KIND, 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, FORM_WARNING_MESSAGE_RESOLVER, FabComponent, FacebookPlayerComponent, FacebookPlayerDirective, FacebookPlayerParamsDirective, FacebookPlayerSlotComponent, FilterOverlayResetDirective, FilterOverlaySubmitDirective, FloatingActionAnchorDirective, FloatingActionDirective, FloatingActionScopeDirective, FloatingActionTopDirective, FloatingActionTriggerDirective, FocusRingDirective, FormErrorComponent, FormFieldBarrierDirective, FormFieldComponent, FormFieldDirective, FormWarningComponent, 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, INHERIT_COLOR, 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, KBD_IMPORTS, KBD_PLATFORM, KICK_PLAYER_TOKEN, KbdComponent, 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_STEPS_ORIENTATIONS, 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_ERROR_ERROR_CODES, QUERY_ERROR_IMPORTS, QUERY_ERROR_LABELS, QUERY_ERROR_TOKEN, QUOTE_ICON, 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_ADD_SURFACE_OVERLAY, 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, SchedulerAppointmentDragDirective, 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, SchedulerSwipeNavigationDirective, 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, TIMELINE_IMPORTS, 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, TimelineComponent, TimelineItemComponent, 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, clearLeavingSupportStateOnExit, 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, detectKbdPlatform, dialogOverlayStrategy, disposeDropzoneEntry, doubleEliminationBracketLayout, dropzoneFiles, enableDragToDismiss, extractFirstImageUrl, filterOverlayLabelsForLocale, filterOverlayPreviewFromQuery, filterRows, findCollision, findNextRelevantHtmlElement, findScrollableAncestor, formatDuration, formatFileSize, fromGridPosition, fullScreenDialogOverlayStrategy, generateBracketDataForEthlete, generateRoundTypeFromEthleteRoundType, generateTournamentModeFormEthleteRounds, getClosestOverlay, getOriginCoordinatesAndDimensions, hexColor, 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, kbdKeyLabel, kbdKeyName, leftSheetOverlayStrategy, legacyQueryErrorSource, mapLayoutToBreakpoint, matchCountryByDialCode, matchParticipantDisplayName, mergeOverlayBreakpointConfigs, mergeOverlayConfigs, mirroredDoubleEliminationBracketLayout, mirroredSingleEliminationBracketLayout, mountRichTextEditorImageStyles, mountRichTextEditorTableStyles, nodesEqual$1 as nodesEqual, normalizeEthleteBracketMatch, normalizeEthleteGroupRanking, normalizeEthleteMatch, normalizeEthleteMatchStatus, normalizeEthleteMedia, normalizeEthleteParticipant, normalizeEthletePlacement, normalizePictureSizes, normalizePictureSource, numberInputStepMultiplierFrom, paginate, parseDuration, parseKbdKeys, 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, provideFormWarningMessageResolver, 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, rgbColor, 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, warn, wireFormSupport, withPictureBaseUrl };
|
|
63902
64298
|
//# sourceMappingURL=ethlete-components.mjs.map
|