@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.
@@ -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.labelId = computed(() => this.formField?.registeredLabel()?.id() ?? null, /* @ts-ignore */
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: ['value', 'mixed', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
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: ['value', 'mixed', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
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: ['value', 'mixed', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
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. Despite the name this is a live input, not a one-shot seed: every change is
45099
- * reconciled against what the grid holds - added ids are placed, missing ids are removed, an empty
45100
- * array clears the grid, and the same ids with different positions restore those positions. A host
45101
- * can therefore keep feeding its own signal in, including a saved snapshot after cancelled edits,
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.initialItems = input([], /* @ts-ignore */
45105
- ...(ngDevMode ? [{ debugName: "initialItems" }] : /* istanbul ignore next */ []));
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 `initialItems` does not emit - what the host passed in cannot be news
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.initialItems(), /* @ts-ignore */
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
- this.items = computed(() => this.itemConfigs(), /* @ts-ignore */
45191
- ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
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] = initial.map((item) => ({
45298
- id: item.id,
45299
- position: item.layout[bp] ?? { col: 0, row: 0, colSpan: 1, rowSpan: 1 },
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 existingById = existing ? new Map(existing.map((e) => [e.id, e])) : new Map();
45341
- const entries = [];
45342
- for (const item of items) {
45343
- const existingEntry = existingById.get(item.id);
45344
- if (existingEntry) {
45345
- entries.push(existingEntry);
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] = items.map((item) => {
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 configured breakpoint the
45698
- * layout omits falls back to a 1x1 item at the grid origin - silently, which reads as the grid
45699
- * having lost the layout. Neither is fatal (`addItem` auto-places a partial layout on purpose), so
45700
- * this warns rather than throws.
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 renders as a 1x1 item at the grid origin.`, item);
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
- existingItems.map((item) => ({
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 }, initialItems: { classPropertyName: "initialItems", publicName: "initialItems", 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 }); }
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 }] }], initialItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialItems", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }] } });
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. Despite the name this is a live input, not a one-shot seed - see
46700
- * `GridDirective.initialItems`. Typed in the item payload, so `layoutChange` hands the same
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.initialItems = input([], /* @ts-ignore */
46704
- ...(ngDevMode ? [{ debugName: "initialItems" }] : /* istanbul ignore next */ []));
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.items().flatMap((item) => {
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.initialItems);
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.items();
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: { initialItems: { classPropertyName: "initialItems", publicName: "initialItems", 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: `
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: { initialItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialItems", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }] } });
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 [initialItems]="items()" ...></et-grid>
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.items(), /* @ts-ignore */
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.items() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;
47099
+ int = grid.currentItems() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;
47047
47100
  <span style="color: #dc2626">red = undefined</span> &nbsp;·&nbsp;
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.items() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;
47214
+ int = grid.currentItems() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;
47162
47215
  <span style="color: #dc2626">red = undefined</span> &nbsp;·&nbsp;
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
- /** {@link appointments}, arranged into sub-appointment chains - see `buildAppointmentTree`. */
50023
- this.appointmentTree = computed(() => buildAppointmentTree(this.appointments()), /* @ts-ignore */
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 appointments} that overlap {@link visibleRange} at all - not yet bucketed per view. */
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.appointments().filter((appointment) => appointment.start <= end && appointment.end >= start);
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
- /** Steps {@link focusedDate} forward by the active view's unit - a day, a week, or a month. */
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(() => this.agenda.days().map((day) => {
50785
- const guides = buildSchedulerAgendaGuides(day.nodes);
50786
- return {
50787
- ...day,
50788
- // deeper chains keep the last four levels rather than indenting off the edge - the elbow is
50789
- // always the innermost guide, so slicing from the end keeps the row readable
50790
- rows: day.nodes.map((node, index) => ({ node, guides: (guides[index] ?? []).slice(-4) })),
50791
- };
50792
- }), /* @ts-ignore */
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.nodes.length > 0) {\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}\n", styles: ["@layer components{.et-scheduler-agenda-view{display:flex;flex-direction:column;gap:12px;overflow-y:auto}.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 }); }
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.nodes.length > 0) {\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}\n", styles: ["@layer components{.et-scheduler-agenda-view{display:flex;flex-direction:column;gap:12px;overflow-y:auto}.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"] }]
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 the view's own drag-to-create, so this finger is drawing a range.
51825
- if (this.scheduler?.draftRange())
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 draws instead of scrolls. Long enough that the
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
- * Draws a range by dragging across a scheduler view, for both pointer kinds.
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 draws as soon as the drag passes the gesture's commit threshold, so a click stays a
51888
- * click. A finger cannot: the views scroll vertically, so the browser claims the pan and cancels
51889
- * the gesture. It therefore arms on a long press held still - early enough that panning has not
51890
- * begun - after which `touchmove` is prevented so it never does. That listener has to stay
51891
- * non-passive, which is why this listens through the renderer rather than an event binding.
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 startSchedulerDraftGesture = (options) => {
51894
- const { event, element, renderer, destroyRef, draw, settle, cancel } = options;
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
- draw(event.clientX, event.clientY);
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 ? draw(gesture.data.clientX, gesture.data.clientY) : undefined;
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 drawing on it
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 draw(gesture.data.clientX, gesture.data.clientY);
51917
- // a long press released without moving still drew its first unit, so it settles like a drag
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
- startSchedulerDraftGesture({
52219
+ startSchedulerDragGesture({
51979
52220
  event,
51980
52221
  element: weeks,
51981
52222
  renderer: this.renderer,
51982
52223
  destroyRef: this.destroyRef,
51983
- draw: (clientX, clientY) => {
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.stopPropagation()\"\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]){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 }); }
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.stopPropagation()\"\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]){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"] }]
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
- const DRAFT_SLOT_MINUTES = 15;
52061
- const DRAFT_MINIMUM_DURATION = DRAFT_SLOT_MINUTES * 60 * 1000;
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
- startSchedulerDraftGesture({
52454
+ startSchedulerDragGesture({
52131
52455
  event,
52132
52456
  element: column.element,
52133
52457
  renderer: this.renderer,
52134
52458
  destroyRef: this.destroyRef,
52135
- draw: (_, clientY) => {
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, DRAFT_MINIMUM_DURATION)
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 draft's slot size. */
52547
+ /** The time a pointer at `clientY` sits at in `column`, snapped to the grid's slot size. */
52170
52548
  draftTimeAt(column, clientY) {
52171
- const { top, height } = column.element.getBoundingClientRect();
52172
- const fraction = Math.min(Math.max((clientY - top) / height, 0), 1);
52173
- const snapped = Math.round((fraction * MINUTES_PER_DAY) / DRAFT_SLOT_MINUTES) * DRAFT_SLOT_MINUTES;
52174
- return addMinutes(startOfDay(column.day), Math.min(snapped, MINUTES_PER_DAY));
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: ['appointments', 'view', 'focusedDate', 'selectedAppointmentId', 'locale', 'firstDayOfWeek'],
52413
- outputs: ['viewChange', 'focusedDateChange', 'selectedAppointmentIdChange'],
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.44';
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