@ethlete/components 1.0.0-next.48 → 1.0.0-next.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/fesm2022/ethlete-components.mjs +641 -305
- package/fesm2022/ethlete-components.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-components.d.ts +182 -36
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, input, booleanAttribute, signal, computed, effect, untracked, Directive, inject, afterNextRender, DestroyRef, TemplateRef, ElementRef, model, linkedSignal, ViewEncapsulation, Component, numberAttribute, contentChildren, Injector, output, runInInjectionContext, contentChild, NgZone, ApplicationRef, viewChild, ViewContainerRef, createEnvironmentInjector, DOCUMENT, EnvironmentInjector, inputBinding, createComponent, isSignal, assertInInjectionContext, isDevMode as isDevMode$1, provideEnvironmentInitializer, viewChildren, afterRenderEffect, outputBinding, afterEveryRender, PLATFORM_ID } from '@angular/core';
|
|
3
3
|
import * as i1 from '@ethlete/core';
|
|
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,
|
|
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, defineProvider, fromNextFrame, injectRoute, createUnsavedChangesTracker, createDocumentElementSignal, 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, signalDeferredLoading, AnimatableDirective, ColorInteractiveContainerDirective, ColorInteractiveExcludeDirective, createFlipAnimation, createObjectUrlHandle, createFlipAnimationGroup, focusElement, isFocusable, getFocusableElements, ColorInteractiveHasFocusDirective, dragGestureFrom, injectFocusVisibleTracker, htmlToMarkdown, markdownToHtml, injectHasTouchInput, signalHostElementDimensions, DragHandleDirective, ResizeHandlesComponent, numberBreakpointTransform, applyLinkBinding, applyHeadTitleBinding, injectColorPalette, injectViewportSize, injectFileDownload, 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
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
|
-
import { takeUntilDestroyed,
|
|
9
|
-
import { Subject, take, tap, timer, takeUntil, fromEvent, filter,
|
|
8
|
+
import { takeUntilDestroyed, toSignal, toObservable, outputFromObservable, outputToObservable, rxResource } from '@angular/core/rxjs-interop';
|
|
9
|
+
import { Subject, take, tap, timer, takeUntil, fromEvent, filter, switchMap, map, combineLatest, distinctUntilChanged, EMPTY, debounceTime, merge, defer, finalize, of, isObservable, from, catchError, firstValueFrom, concat, scan, interval, animationFrameScheduler, EmptyError, exhaustMap, Observable, shareReplay, defaultIfEmpty, expand, toArray, mergeMap } from 'rxjs';
|
|
10
10
|
import * as i1$1 from '@angular/router';
|
|
11
11
|
import { Router, RouterLink, RouterLinkActive, NavigationEnd } from '@angular/router';
|
|
12
12
|
import { withArgs, queryStateSignal, isQueryStateSuccess, isQueryStateFailure, isQueryStateLoading, executeUntilSettled, extractQuery, queryComputed, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe, queryErrorMessages, createQueryErrorResponse } from '@ethlete/query';
|
|
13
|
-
import { createMetadataKey, metadata, FORM_FIELD, validate, createManagedMetadataKey, form } from '@angular/forms/signals';
|
|
13
|
+
import { createMetadataKey, metadata, FORM_FIELD, validate, createManagedMetadataKey, submit, form } from '@angular/forms/signals';
|
|
14
14
|
import { enUS } from 'date-fns/locale/en-US';
|
|
15
15
|
import { tap as tap$1 } from 'rxjs/operators';
|
|
16
16
|
|
|
@@ -12170,225 +12170,6 @@ const createOverlayOpener = ((definition, config) => definition.kind === 'queryP
|
|
|
12170
12170
|
? createQueryParamOverlayOpener(definition, config)
|
|
12171
12171
|
: createStandardOverlayOpener(definition, config));
|
|
12172
12172
|
|
|
12173
|
-
/**
|
|
12174
|
-
* The overlay flavor of the unsaved-changes family. Injects the current `OVERLAY_REF` and vetoes a
|
|
12175
|
-
* dismissal (outside pointer, escape, drag, or a programmatic `close()`) while the watched form has
|
|
12176
|
-
* unsaved changes: it runs the `confirm` and only then re-issues the close. Call from an overlay
|
|
12177
|
-
* content component's injection context.
|
|
12178
|
-
*
|
|
12179
|
-
* Being a tracker, it also locks the browser tab while there are changes (`beforeunload`) - configure
|
|
12180
|
-
* or disable that via the inherited `tab` option.
|
|
12181
|
-
*
|
|
12182
|
-
* ```ts
|
|
12183
|
-
* guard = createOverlayUnsavedChangesGuard({
|
|
12184
|
-
* source: this.form, // a signal-forms FieldTree
|
|
12185
|
-
* confirm: () => this.overlays
|
|
12186
|
-
* .open(ConfirmDiscardComponent)
|
|
12187
|
-
* .afterClosed(), // truthy result = discard
|
|
12188
|
-
* });
|
|
12189
|
-
* ```
|
|
12190
|
-
*
|
|
12191
|
-
* After a save that keeps the overlay open, call `guard.refreshDefaultValue()` to re-baseline so the
|
|
12192
|
-
* saved state no longer counts as unsaved changes.
|
|
12193
|
-
*/
|
|
12194
|
-
const createOverlayUnsavedChangesGuard = (config) => {
|
|
12195
|
-
assertInInjectionContext(createOverlayUnsavedChangesGuard);
|
|
12196
|
-
const overlayRef = inject(OVERLAY_REF);
|
|
12197
|
-
const destroyRef = inject(DestroyRef);
|
|
12198
|
-
const tracker = createUnsavedChangesTracker(config);
|
|
12199
|
-
const dismiss = config.dismissSources ?? {};
|
|
12200
|
-
const guarded = {
|
|
12201
|
-
'outside-pointer': dismiss.outsidePointer ?? true,
|
|
12202
|
-
escape: dismiss.escape ?? true,
|
|
12203
|
-
api: dismiss.closeCall ?? true,
|
|
12204
|
-
drag: dismiss.drag ?? true,
|
|
12205
|
-
};
|
|
12206
|
-
if (isDevMode$1() && overlayRef.config.disableClose && (dismiss.outsidePointer || dismiss.escape || dismiss.drag)) {
|
|
12207
|
-
console.warn('[createOverlayUnsavedChangesGuard] The overlay was opened with disableClose: true, so escape, ' +
|
|
12208
|
-
'outside-pointer and drag never fire - only a programmatic close() reaches the guard.');
|
|
12209
|
-
}
|
|
12210
|
-
// While a confirm is pending we keep vetoing further attempts; the async branch re-issues the
|
|
12211
|
-
// close (bypassing this guard) once the user confirms.
|
|
12212
|
-
let checkPending = false;
|
|
12213
|
-
const unregister = overlayRef.registerCloseGuard((event) => {
|
|
12214
|
-
if (!guarded[event.source]) {
|
|
12215
|
-
return true;
|
|
12216
|
-
}
|
|
12217
|
-
// The session ended underneath the overlay (logout): the edits are unrecoverable, so let it close
|
|
12218
|
-
// instead of prompting over a page the user is being redirected away from.
|
|
12219
|
-
if (tracker.isAbandoned()) {
|
|
12220
|
-
return true;
|
|
12221
|
-
}
|
|
12222
|
-
if (!tracker.hasChanges()) {
|
|
12223
|
-
return true;
|
|
12224
|
-
}
|
|
12225
|
-
if (checkPending) {
|
|
12226
|
-
return false;
|
|
12227
|
-
}
|
|
12228
|
-
checkPending = true;
|
|
12229
|
-
tracker
|
|
12230
|
-
.runCheck()
|
|
12231
|
-
.then((confirmed) => {
|
|
12232
|
-
checkPending = false;
|
|
12233
|
-
if (confirmed) {
|
|
12234
|
-
overlayRef.forceClose(event.source, event.result);
|
|
12235
|
-
}
|
|
12236
|
-
})
|
|
12237
|
-
.catch(() => {
|
|
12238
|
-
checkPending = false;
|
|
12239
|
-
});
|
|
12240
|
-
return false;
|
|
12241
|
-
});
|
|
12242
|
-
const destroy = () => unregister();
|
|
12243
|
-
destroyRef.onDestroy(destroy);
|
|
12244
|
-
return { ...tracker, destroy };
|
|
12245
|
-
};
|
|
12246
|
-
|
|
12247
|
-
const OVERLAY_SCROLL_BLOCKER_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
12248
|
-
const overlayManager = injectOverlayManager();
|
|
12249
|
-
const document = inject(DOCUMENT);
|
|
12250
|
-
const renderer = injectRenderer();
|
|
12251
|
-
const documentScrollState = signalElementScrollState(createDocumentElementSignal());
|
|
12252
|
-
// non-modal overlays (e.g. tooltips) must not lock the page
|
|
12253
|
-
const hasBlockingOverlay = computed(() => overlayManager.openOverlays().some((overlayRef) => overlayRef.config.mode !== 'non-modal'), /* @ts-ignore */
|
|
12254
|
-
...(ngDevMode ? [{ debugName: "hasBlockingOverlay" }] : /* istanbul ignore next */ []));
|
|
12255
|
-
const root = document.documentElement;
|
|
12256
|
-
let savedTop = null;
|
|
12257
|
-
combineLatest([toObservable(hasBlockingOverlay), toObservable(documentScrollState)])
|
|
12258
|
-
.pipe(tap(([hasOpenOverlays, scrollState]) => {
|
|
12259
|
-
if (hasOpenOverlays && scrollState.canScrollVertically && savedTop === null) {
|
|
12260
|
-
savedTop = document.defaultView?.scrollY ?? 0;
|
|
12261
|
-
renderer.setStyle(root, {
|
|
12262
|
-
position: 'fixed',
|
|
12263
|
-
top: `-${savedTop}px`,
|
|
12264
|
-
left: '0',
|
|
12265
|
-
right: '0',
|
|
12266
|
-
overflowY: 'scroll',
|
|
12267
|
-
});
|
|
12268
|
-
}
|
|
12269
|
-
else if (!hasOpenOverlays && savedTop !== null) {
|
|
12270
|
-
const top = savedTop;
|
|
12271
|
-
savedTop = null;
|
|
12272
|
-
renderer.setStyle(root, {
|
|
12273
|
-
position: null,
|
|
12274
|
-
top: null,
|
|
12275
|
-
left: null,
|
|
12276
|
-
right: null,
|
|
12277
|
-
overflowY: null,
|
|
12278
|
-
scrollBehavior: 'auto',
|
|
12279
|
-
});
|
|
12280
|
-
document.defaultView?.scrollTo(0, top);
|
|
12281
|
-
renderer.setStyle(root, { scrollBehavior: null });
|
|
12282
|
-
}
|
|
12283
|
-
}), takeUntilDestroyed())
|
|
12284
|
-
.subscribe();
|
|
12285
|
-
}, { name: 'Overlay Scroll Blocker' });
|
|
12286
|
-
/**
|
|
12287
|
-
* Blocks body scrolling while a modal overlay is open.
|
|
12288
|
-
* Register once via `provideOverlay()` (or call `injectOverlayScrollBlocker()` in an environment initializer).
|
|
12289
|
-
*/
|
|
12290
|
-
const provideOverlayScrollBlocker = /* @__PURE__ */ toProvideFn(OVERLAY_SCROLL_BLOCKER_DEF);
|
|
12291
|
-
const injectOverlayScrollBlocker = /* @__PURE__ */ toInjectFn(OVERLAY_SCROLL_BLOCKER_DEF);
|
|
12292
|
-
|
|
12293
|
-
let uniqueId$1 = 0;
|
|
12294
|
-
class OverlayTitleDirective {
|
|
12295
|
-
constructor() {
|
|
12296
|
-
this.overlayRef = inject(OVERLAY_REF, { optional: true });
|
|
12297
|
-
this.elementRef = inject(ElementRef);
|
|
12298
|
-
this.overlayManager = injectOverlayManager();
|
|
12299
|
-
this.renderer = injectRenderer();
|
|
12300
|
-
// eslint-disable-next-line ethlete/no-native-html-input-name -- deliberately drives the host [attr.id] and aria-labelledby
|
|
12301
|
-
this.id = input(`et-overlay-title-${uniqueId$1++}`, /* @ts-ignore */
|
|
12302
|
-
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
12303
|
-
}
|
|
12304
|
-
ngOnInit() {
|
|
12305
|
-
this.overlayRef = resolveClosestOverlay({
|
|
12306
|
-
overlayRef: this.overlayRef,
|
|
12307
|
-
element: this.elementRef,
|
|
12308
|
-
openOverlays: this.overlayManager.openOverlays(),
|
|
12309
|
-
});
|
|
12310
|
-
Promise.resolve().then(() => {
|
|
12311
|
-
const overlayRef = this.overlayRef;
|
|
12312
|
-
const hostElement = overlayRef?.elements?.hostElement;
|
|
12313
|
-
if (!overlayRef || !hostElement)
|
|
12314
|
-
return;
|
|
12315
|
-
if (!overlayRef.config.ariaLabel && !hostElement.getAttribute('aria-labelledby')) {
|
|
12316
|
-
this.renderer.setAttribute(hostElement, 'aria-labelledby', this.id());
|
|
12317
|
-
}
|
|
12318
|
-
});
|
|
12319
|
-
}
|
|
12320
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
12321
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: OverlayTitleDirective, isStandalone: true, selector: "[et-overlay-title], [etOverlayTitle]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "this.id()" } }, exportAs: ["etOverlayTitle"], ngImport: i0 }); }
|
|
12322
|
-
}
|
|
12323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayTitleDirective, decorators: [{
|
|
12324
|
-
type: Directive,
|
|
12325
|
-
args: [{
|
|
12326
|
-
selector: '[et-overlay-title], [etOverlayTitle]',
|
|
12327
|
-
exportAs: 'etOverlayTitle',
|
|
12328
|
-
host: {
|
|
12329
|
-
'[attr.id]': 'this.id()',
|
|
12330
|
-
},
|
|
12331
|
-
}]
|
|
12332
|
-
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
|
|
12333
|
-
|
|
12334
|
-
const OVERLAY_IMPORTS = [
|
|
12335
|
-
OverlayDirective,
|
|
12336
|
-
OverlayTriggerDirective,
|
|
12337
|
-
OverlayAnchorDirective,
|
|
12338
|
-
OverlaySurfaceDirective,
|
|
12339
|
-
];
|
|
12340
|
-
const OVERLAY_CONTENT_IMPORTS = [
|
|
12341
|
-
OverlayCloseDirective,
|
|
12342
|
-
OverlayTitleDirective,
|
|
12343
|
-
OverlayHeaderDirective,
|
|
12344
|
-
OverlayBodyComponent,
|
|
12345
|
-
OverlayFooterDirective,
|
|
12346
|
-
OverlayMainDirective,
|
|
12347
|
-
];
|
|
12348
|
-
const provideOverlay = () => {
|
|
12349
|
-
return [
|
|
12350
|
-
provideEnvironmentInitializer(() => {
|
|
12351
|
-
injectOverlayScrollBlocker();
|
|
12352
|
-
}),
|
|
12353
|
-
];
|
|
12354
|
-
};
|
|
12355
|
-
|
|
12356
|
-
/**
|
|
12357
|
-
* Opens a query-param overlay declaratively by navigating its query param - the counterpart to
|
|
12358
|
-
* `createOverlayOpener` for links. Takes the overlay definition itself, so the query param key
|
|
12359
|
-
* is never duplicated as a string.
|
|
12360
|
-
*
|
|
12361
|
-
* @example
|
|
12362
|
-
* <a [etQueryParamOverlayLink]="productOverlay" etQueryParamOverlayLinkValue="42">Open product 42</a>
|
|
12363
|
-
*/
|
|
12364
|
-
class QueryParamOverlayLinkDirective {
|
|
12365
|
-
constructor() {
|
|
12366
|
-
this.routerLink = inject(RouterLink);
|
|
12367
|
-
/** The query-param overlay definition this link opens. */
|
|
12368
|
-
this.definition = input.required({ ...(ngDevMode ? { debugName: "definition" } : /* istanbul ignore next */ {}), alias: 'etQueryParamOverlayLink' });
|
|
12369
|
-
/** The query param value the overlay opens with. */
|
|
12370
|
-
this.value = input.required({ ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'etQueryParamOverlayLinkValue' });
|
|
12371
|
-
this.routerLink.routerLink = [];
|
|
12372
|
-
this.routerLink.queryParamsHandling = 'merge';
|
|
12373
|
-
effect(() => {
|
|
12374
|
-
const definition = this.definition();
|
|
12375
|
-
const value = this.value();
|
|
12376
|
-
untracked(() => {
|
|
12377
|
-
this.routerLink.queryParams = { [definition.queryParamKey]: value };
|
|
12378
|
-
});
|
|
12379
|
-
});
|
|
12380
|
-
}
|
|
12381
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: QueryParamOverlayLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
12382
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: QueryParamOverlayLinkDirective, isStandalone: true, selector: "[etQueryParamOverlayLink]", inputs: { definition: { classPropertyName: "definition", publicName: "etQueryParamOverlayLink", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "etQueryParamOverlayLinkValue", isSignal: true, isRequired: true, transformFunction: null } }, hostDirectives: [{ directive: i1$1.RouterLink }], ngImport: i0 }); }
|
|
12383
|
-
}
|
|
12384
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: QueryParamOverlayLinkDirective, decorators: [{
|
|
12385
|
-
type: Directive,
|
|
12386
|
-
args: [{
|
|
12387
|
-
selector: '[etQueryParamOverlayLink]',
|
|
12388
|
-
hostDirectives: [RouterLink],
|
|
12389
|
-
}]
|
|
12390
|
-
}], ctorParameters: () => [], propDecorators: { definition: [{ type: i0.Input, args: [{ isSignal: true, alias: "etQueryParamOverlayLink", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "etQueryParamOverlayLinkValue", required: true }] }] } });
|
|
12391
|
-
|
|
12392
12173
|
const OVERLAY_ROUTER_CONFIG_TOKEN = new InjectionToken('OVERLAY_ROUTER_CONFIG_TOKEN');
|
|
12393
12174
|
const OVERLAY_ROUTER_DEF = /* @__PURE__ */ defineProvider(() => {
|
|
12394
12175
|
const overlayRef = inject(OVERLAY_REF);
|
|
@@ -12410,8 +12191,6 @@ const OVERLAY_ROUTER_DEF = /* @__PURE__ */ defineProvider(() => {
|
|
|
12410
12191
|
...(ngDevMode ? [{ debugName: "pendingNavigations" }] : /* istanbul ignore next */ []));
|
|
12411
12192
|
// The current route, but delayed by one frame to ensure that the needed animation classes are applied.
|
|
12412
12193
|
const currentRoute = toSignal(toObservable(syncCurrentRoute).pipe(switchMap((r) => fromNextFrame().pipe(map(() => r)))), { initialValue: getInitialRoute() });
|
|
12413
|
-
// A commit stays invisible on `currentRoute` for a frame, so the route being left still reports
|
|
12414
|
-
// itself active in there. Both halves must count as pending, or an optimistic selection is undone.
|
|
12415
12194
|
const navigationPending = computed(() => pendingNavigations() > 0 || currentRoute() !== syncCurrentRoute(), /* @ts-ignore */
|
|
12416
12195
|
...(ngDevMode ? [{ debugName: "navigationPending" }] : /* istanbul ignore next */ []));
|
|
12417
12196
|
const extraRoutes = signal([], /* @ts-ignore */
|
|
@@ -12502,15 +12281,25 @@ const OVERLAY_ROUTER_DEF = /* @__PURE__ */ defineProvider(() => {
|
|
|
12502
12281
|
};
|
|
12503
12282
|
};
|
|
12504
12283
|
/**
|
|
12505
|
-
* Answers synchronously
|
|
12506
|
-
* after the frame the outlet
|
|
12284
|
+
* Answers synchronously for as long as the guards do, and only goes async from the first one that
|
|
12285
|
+
* returns a promise: a route change deferred by a microtask lands after the frame the outlet
|
|
12286
|
+
* measured for its transition.
|
|
12507
12287
|
*/
|
|
12508
12288
|
const canLeave = (from, to) => {
|
|
12509
12289
|
const guards = [...navigationGuards];
|
|
12510
|
-
|
|
12290
|
+
const runFrom = (index) => {
|
|
12291
|
+
for (let i = index; i < guards.length; i++) {
|
|
12292
|
+
const mayLeave = guards[i]?.({ from, to }) ?? true;
|
|
12293
|
+
if (mayLeave === false) {
|
|
12294
|
+
return false;
|
|
12295
|
+
}
|
|
12296
|
+
if (mayLeave !== true) {
|
|
12297
|
+
return mayLeave.then((allowed) => (allowed ? runFrom(i + 1) : false));
|
|
12298
|
+
}
|
|
12299
|
+
}
|
|
12511
12300
|
return true;
|
|
12512
|
-
}
|
|
12513
|
-
return
|
|
12301
|
+
};
|
|
12302
|
+
return runFrom(0);
|
|
12514
12303
|
};
|
|
12515
12304
|
const whenAllowed = (attempt) => {
|
|
12516
12305
|
const result = canLeave(attempt.from, attempt.to);
|
|
@@ -12684,6 +12473,238 @@ const provideOverlayRouter = (config) => {
|
|
|
12684
12473
|
return [...provideOverlayRouterConfig(config), ...provideOverlayRouterService()];
|
|
12685
12474
|
};
|
|
12686
12475
|
|
|
12476
|
+
/**
|
|
12477
|
+
* The overlay flavor of the unsaved-changes family. Injects the current `OVERLAY_REF` and vetoes a
|
|
12478
|
+
* dismissal (outside pointer, escape, drag, or a programmatic `close()`) while the watched form has
|
|
12479
|
+
* unsaved changes: it runs the `confirm` and only then re-issues the close. Call from an overlay
|
|
12480
|
+
* content component's injection context.
|
|
12481
|
+
*
|
|
12482
|
+
* In a routed overlay it guards route changes away from the page too, so a single call covers both
|
|
12483
|
+
* ways the edits can be lost - see `guardRouteChanges`.
|
|
12484
|
+
*
|
|
12485
|
+
* Being a tracker, it also locks the browser tab while there are changes (`beforeunload`) - configure
|
|
12486
|
+
* or disable that via the inherited `tab` option.
|
|
12487
|
+
*
|
|
12488
|
+
* ```ts
|
|
12489
|
+
* guard = createOverlayUnsavedChangesGuard({
|
|
12490
|
+
* source: this.form, // a signal-forms FieldTree
|
|
12491
|
+
* confirm: () => this.overlays
|
|
12492
|
+
* .open(ConfirmDiscardComponent)
|
|
12493
|
+
* .afterClosed(), // truthy result = discard
|
|
12494
|
+
* });
|
|
12495
|
+
* ```
|
|
12496
|
+
*
|
|
12497
|
+
* After a save that keeps the overlay open, call `guard.refreshDefaultValue()` to re-baseline so the
|
|
12498
|
+
* saved state no longer counts as unsaved changes.
|
|
12499
|
+
*/
|
|
12500
|
+
const createOverlayUnsavedChangesGuard = (config) => {
|
|
12501
|
+
assertInInjectionContext(createOverlayUnsavedChangesGuard);
|
|
12502
|
+
const overlayRef = inject(OVERLAY_REF);
|
|
12503
|
+
const overlayRouter = inject(OVERLAY_ROUTER_TOKEN, { optional: true });
|
|
12504
|
+
const destroyRef = inject(DestroyRef);
|
|
12505
|
+
const tracker = createUnsavedChangesTracker(config);
|
|
12506
|
+
const dismiss = config.dismissSources ?? {};
|
|
12507
|
+
const guarded = {
|
|
12508
|
+
'outside-pointer': dismiss.outsidePointer ?? true,
|
|
12509
|
+
escape: dismiss.escape ?? true,
|
|
12510
|
+
api: dismiss.closeCall ?? true,
|
|
12511
|
+
drag: dismiss.drag ?? true,
|
|
12512
|
+
};
|
|
12513
|
+
if (isDevMode$1() && overlayRef.config.disableClose && (dismiss.outsidePointer || dismiss.escape || dismiss.drag)) {
|
|
12514
|
+
console.warn('[createOverlayUnsavedChangesGuard] The overlay was opened with disableClose: true, so escape, ' +
|
|
12515
|
+
'outside-pointer and drag never fire - only a programmatic close() reaches the guard.');
|
|
12516
|
+
}
|
|
12517
|
+
// While a confirm is pending we keep vetoing further attempts; the async branch re-issues the
|
|
12518
|
+
// close (bypassing this guard) once the user confirms.
|
|
12519
|
+
let checkPending = false;
|
|
12520
|
+
const unregister = overlayRef.registerCloseGuard((event) => {
|
|
12521
|
+
if (!guarded[event.source]) {
|
|
12522
|
+
return true;
|
|
12523
|
+
}
|
|
12524
|
+
// The session ended underneath the overlay (logout): the edits are unrecoverable, so let it close
|
|
12525
|
+
// instead of prompting over a page the user is being redirected away from.
|
|
12526
|
+
if (tracker.isAbandoned()) {
|
|
12527
|
+
return true;
|
|
12528
|
+
}
|
|
12529
|
+
if (!tracker.hasChanges()) {
|
|
12530
|
+
return true;
|
|
12531
|
+
}
|
|
12532
|
+
if (checkPending) {
|
|
12533
|
+
return false;
|
|
12534
|
+
}
|
|
12535
|
+
checkPending = true;
|
|
12536
|
+
tracker
|
|
12537
|
+
.runCheck()
|
|
12538
|
+
.then((confirmed) => {
|
|
12539
|
+
checkPending = false;
|
|
12540
|
+
if (confirmed) {
|
|
12541
|
+
overlayRef.forceClose(event.source, event.result);
|
|
12542
|
+
}
|
|
12543
|
+
})
|
|
12544
|
+
.catch(() => {
|
|
12545
|
+
checkPending = false;
|
|
12546
|
+
});
|
|
12547
|
+
return false;
|
|
12548
|
+
});
|
|
12549
|
+
// `runCheck` passes on its own when there is nothing to discard, but answering `true` synchronously
|
|
12550
|
+
// keeps an unguarded navigation committing in the same task - a promise costs the outlet its
|
|
12551
|
+
// transition origin.
|
|
12552
|
+
const unregisterRouteGuard = overlayRouter && (config.guardRouteChanges ?? true)
|
|
12553
|
+
? overlayRouter.registerNavigationGuard(() => (tracker.hasChanges() ? tracker.runCheck() : true))
|
|
12554
|
+
: null;
|
|
12555
|
+
const destroy = () => {
|
|
12556
|
+
unregister();
|
|
12557
|
+
unregisterRouteGuard?.();
|
|
12558
|
+
};
|
|
12559
|
+
destroyRef.onDestroy(destroy);
|
|
12560
|
+
return { ...tracker, destroy };
|
|
12561
|
+
};
|
|
12562
|
+
|
|
12563
|
+
const OVERLAY_SCROLL_BLOCKER_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
12564
|
+
const overlayManager = injectOverlayManager();
|
|
12565
|
+
const document = inject(DOCUMENT);
|
|
12566
|
+
const renderer = injectRenderer();
|
|
12567
|
+
const documentScrollState = signalElementScrollState(createDocumentElementSignal());
|
|
12568
|
+
// non-modal overlays (e.g. tooltips) must not lock the page
|
|
12569
|
+
const hasBlockingOverlay = computed(() => overlayManager.openOverlays().some((overlayRef) => overlayRef.config.mode !== 'non-modal'), /* @ts-ignore */
|
|
12570
|
+
...(ngDevMode ? [{ debugName: "hasBlockingOverlay" }] : /* istanbul ignore next */ []));
|
|
12571
|
+
const root = document.documentElement;
|
|
12572
|
+
let savedTop = null;
|
|
12573
|
+
combineLatest([toObservable(hasBlockingOverlay), toObservable(documentScrollState)])
|
|
12574
|
+
.pipe(tap(([hasOpenOverlays, scrollState]) => {
|
|
12575
|
+
if (hasOpenOverlays && scrollState.canScrollVertically && savedTop === null) {
|
|
12576
|
+
savedTop = document.defaultView?.scrollY ?? 0;
|
|
12577
|
+
renderer.setStyle(root, {
|
|
12578
|
+
position: 'fixed',
|
|
12579
|
+
top: `-${savedTop}px`,
|
|
12580
|
+
left: '0',
|
|
12581
|
+
right: '0',
|
|
12582
|
+
overflowY: 'scroll',
|
|
12583
|
+
});
|
|
12584
|
+
}
|
|
12585
|
+
else if (!hasOpenOverlays && savedTop !== null) {
|
|
12586
|
+
const top = savedTop;
|
|
12587
|
+
savedTop = null;
|
|
12588
|
+
renderer.setStyle(root, {
|
|
12589
|
+
position: null,
|
|
12590
|
+
top: null,
|
|
12591
|
+
left: null,
|
|
12592
|
+
right: null,
|
|
12593
|
+
overflowY: null,
|
|
12594
|
+
scrollBehavior: 'auto',
|
|
12595
|
+
});
|
|
12596
|
+
document.defaultView?.scrollTo(0, top);
|
|
12597
|
+
renderer.setStyle(root, { scrollBehavior: null });
|
|
12598
|
+
}
|
|
12599
|
+
}), takeUntilDestroyed())
|
|
12600
|
+
.subscribe();
|
|
12601
|
+
}, { name: 'Overlay Scroll Blocker' });
|
|
12602
|
+
/**
|
|
12603
|
+
* Blocks body scrolling while a modal overlay is open.
|
|
12604
|
+
* Register once via `provideOverlay()` (or call `injectOverlayScrollBlocker()` in an environment initializer).
|
|
12605
|
+
*/
|
|
12606
|
+
const provideOverlayScrollBlocker = /* @__PURE__ */ toProvideFn(OVERLAY_SCROLL_BLOCKER_DEF);
|
|
12607
|
+
const injectOverlayScrollBlocker = /* @__PURE__ */ toInjectFn(OVERLAY_SCROLL_BLOCKER_DEF);
|
|
12608
|
+
|
|
12609
|
+
let uniqueId$1 = 0;
|
|
12610
|
+
class OverlayTitleDirective {
|
|
12611
|
+
constructor() {
|
|
12612
|
+
this.overlayRef = inject(OVERLAY_REF, { optional: true });
|
|
12613
|
+
this.elementRef = inject(ElementRef);
|
|
12614
|
+
this.overlayManager = injectOverlayManager();
|
|
12615
|
+
this.renderer = injectRenderer();
|
|
12616
|
+
// eslint-disable-next-line ethlete/no-native-html-input-name -- deliberately drives the host [attr.id] and aria-labelledby
|
|
12617
|
+
this.id = input(`et-overlay-title-${uniqueId$1++}`, /* @ts-ignore */
|
|
12618
|
+
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
12619
|
+
}
|
|
12620
|
+
ngOnInit() {
|
|
12621
|
+
this.overlayRef = resolveClosestOverlay({
|
|
12622
|
+
overlayRef: this.overlayRef,
|
|
12623
|
+
element: this.elementRef,
|
|
12624
|
+
openOverlays: this.overlayManager.openOverlays(),
|
|
12625
|
+
});
|
|
12626
|
+
Promise.resolve().then(() => {
|
|
12627
|
+
const overlayRef = this.overlayRef;
|
|
12628
|
+
const hostElement = overlayRef?.elements?.hostElement;
|
|
12629
|
+
if (!overlayRef || !hostElement)
|
|
12630
|
+
return;
|
|
12631
|
+
if (!overlayRef.config.ariaLabel && !hostElement.getAttribute('aria-labelledby')) {
|
|
12632
|
+
this.renderer.setAttribute(hostElement, 'aria-labelledby', this.id());
|
|
12633
|
+
}
|
|
12634
|
+
});
|
|
12635
|
+
}
|
|
12636
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
12637
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: OverlayTitleDirective, isStandalone: true, selector: "[et-overlay-title], [etOverlayTitle]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "this.id()" } }, exportAs: ["etOverlayTitle"], ngImport: i0 }); }
|
|
12638
|
+
}
|
|
12639
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayTitleDirective, decorators: [{
|
|
12640
|
+
type: Directive,
|
|
12641
|
+
args: [{
|
|
12642
|
+
selector: '[et-overlay-title], [etOverlayTitle]',
|
|
12643
|
+
exportAs: 'etOverlayTitle',
|
|
12644
|
+
host: {
|
|
12645
|
+
'[attr.id]': 'this.id()',
|
|
12646
|
+
},
|
|
12647
|
+
}]
|
|
12648
|
+
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
|
|
12649
|
+
|
|
12650
|
+
const OVERLAY_IMPORTS = [
|
|
12651
|
+
OverlayDirective,
|
|
12652
|
+
OverlayTriggerDirective,
|
|
12653
|
+
OverlayAnchorDirective,
|
|
12654
|
+
OverlaySurfaceDirective,
|
|
12655
|
+
];
|
|
12656
|
+
const OVERLAY_CONTENT_IMPORTS = [
|
|
12657
|
+
OverlayCloseDirective,
|
|
12658
|
+
OverlayTitleDirective,
|
|
12659
|
+
OverlayHeaderDirective,
|
|
12660
|
+
OverlayBodyComponent,
|
|
12661
|
+
OverlayFooterDirective,
|
|
12662
|
+
OverlayMainDirective,
|
|
12663
|
+
];
|
|
12664
|
+
const provideOverlay = () => {
|
|
12665
|
+
return [
|
|
12666
|
+
provideEnvironmentInitializer(() => {
|
|
12667
|
+
injectOverlayScrollBlocker();
|
|
12668
|
+
}),
|
|
12669
|
+
];
|
|
12670
|
+
};
|
|
12671
|
+
|
|
12672
|
+
/**
|
|
12673
|
+
* Opens a query-param overlay declaratively by navigating its query param - the counterpart to
|
|
12674
|
+
* `createOverlayOpener` for links. Takes the overlay definition itself, so the query param key
|
|
12675
|
+
* is never duplicated as a string.
|
|
12676
|
+
*
|
|
12677
|
+
* @example
|
|
12678
|
+
* <a [etQueryParamOverlayLink]="productOverlay" etQueryParamOverlayLinkValue="42">Open product 42</a>
|
|
12679
|
+
*/
|
|
12680
|
+
class QueryParamOverlayLinkDirective {
|
|
12681
|
+
constructor() {
|
|
12682
|
+
this.routerLink = inject(RouterLink);
|
|
12683
|
+
/** The query-param overlay definition this link opens. */
|
|
12684
|
+
this.definition = input.required({ ...(ngDevMode ? { debugName: "definition" } : /* istanbul ignore next */ {}), alias: 'etQueryParamOverlayLink' });
|
|
12685
|
+
/** The query param value the overlay opens with. */
|
|
12686
|
+
this.value = input.required({ ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), alias: 'etQueryParamOverlayLinkValue' });
|
|
12687
|
+
this.routerLink.routerLink = [];
|
|
12688
|
+
this.routerLink.queryParamsHandling = 'merge';
|
|
12689
|
+
effect(() => {
|
|
12690
|
+
const definition = this.definition();
|
|
12691
|
+
const value = this.value();
|
|
12692
|
+
untracked(() => {
|
|
12693
|
+
this.routerLink.queryParams = { [definition.queryParamKey]: value };
|
|
12694
|
+
});
|
|
12695
|
+
});
|
|
12696
|
+
}
|
|
12697
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: QueryParamOverlayLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
12698
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: QueryParamOverlayLinkDirective, isStandalone: true, selector: "[etQueryParamOverlayLink]", inputs: { definition: { classPropertyName: "definition", publicName: "etQueryParamOverlayLink", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "etQueryParamOverlayLinkValue", isSignal: true, isRequired: true, transformFunction: null } }, hostDirectives: [{ directive: i1$1.RouterLink }], ngImport: i0 }); }
|
|
12699
|
+
}
|
|
12700
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: QueryParamOverlayLinkDirective, decorators: [{
|
|
12701
|
+
type: Directive,
|
|
12702
|
+
args: [{
|
|
12703
|
+
selector: '[etQueryParamOverlayLink]',
|
|
12704
|
+
hostDirectives: [RouterLink],
|
|
12705
|
+
}]
|
|
12706
|
+
}], ctorParameters: () => [], propDecorators: { definition: [{ type: i0.Input, args: [{ isSignal: true, alias: "etQueryParamOverlayLink", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "etQueryParamOverlayLinkValue", required: true }] }] } });
|
|
12707
|
+
|
|
12687
12708
|
const OVERLAY_BACK_OR_CLOSE_TOKEN = new InjectionToken('OVERLAY_BACK_OR_CLOSE_TOKEN');
|
|
12688
12709
|
class OverlayBackOrCloseDirective {
|
|
12689
12710
|
constructor() {
|
|
@@ -19401,7 +19422,8 @@ const FORM_FIELD_TOKEN = new InjectionToken('FORM_FIELD_TOKEN');
|
|
|
19401
19422
|
let uniqueIdCounter$1 = 0;
|
|
19402
19423
|
class FormFieldDirective {
|
|
19403
19424
|
constructor() {
|
|
19404
|
-
this.
|
|
19425
|
+
/** The field's own element, chrome included - what scrolling to this field targets. */
|
|
19426
|
+
this.element = injectHostElement();
|
|
19405
19427
|
// the `warn()` rules live on the signal-forms field, so the warnings come from wherever
|
|
19406
19428
|
// `[formField]` is bound: on the control this field wraps (`et-form-field`), or on this very host
|
|
19407
19429
|
// when the control renders its own support region (`et-slider`, `et-rating`, …). Reading both here
|
|
@@ -19549,12 +19571,12 @@ class FormFieldDirective {
|
|
|
19549
19571
|
afterNextRender(() => {
|
|
19550
19572
|
const control = this.registeredControl();
|
|
19551
19573
|
if (!control) {
|
|
19552
|
-
throw new RuntimeError(FORM_FIELD_ERROR_CODES.MISSING_CONTROL, '[FormFieldDirective] No form control found. Add <et-input> or <et-checkbox> inside <et-form-field>.', { element: this.
|
|
19574
|
+
throw new RuntimeError(FORM_FIELD_ERROR_CODES.MISSING_CONTROL, '[FormFieldDirective] No form control found. Add <et-input> or <et-checkbox> inside <et-form-field>.', { element: this.element });
|
|
19553
19575
|
}
|
|
19554
19576
|
if (!this.registeredLabel() && !(control.hasCustomAccessibleName?.() ?? false)) {
|
|
19555
19577
|
throw new RuntimeError(FORM_FIELD_ERROR_CODES.MISSING_LABEL, '[FormFieldDirective] The control has no accessible name. Project an <et-label> into the ' +
|
|
19556
19578
|
'<et-form-field>, or set aria-label / aria-labelledby on the control. A placeholder is not ' +
|
|
19557
|
-
'an accessible name.', { element: this.
|
|
19579
|
+
'an accessible name.', { element: this.element });
|
|
19558
19580
|
}
|
|
19559
19581
|
});
|
|
19560
19582
|
}
|
|
@@ -20188,7 +20210,7 @@ const mountTextFieldShellStyles = () => injectStyleManager().mount(FormFieldText
|
|
|
20188
20210
|
* (`et-input`, `et-number-input`, `et-password-input`, `et-color-input`, `et-textarea`). It owns
|
|
20189
20211
|
* the pieces those directives copy-pasted verbatim: the standard form-control inputs, the
|
|
20190
20212
|
* form-field registration, the `describedBy`/`focused`/`focusTarget`/`labelId` plumbing, the
|
|
20191
|
-
* `touched && invalid` error gate, and the focus-target `activate()`.
|
|
20213
|
+
* `touched && invalid` error gate, and the focus-target `focus()`/`activate()`.
|
|
20192
20214
|
*
|
|
20193
20215
|
* Subclasses add their own `value` model, `controlType`, `hasValue`, and any control-specific
|
|
20194
20216
|
* surface (placeholder, native element wiring, etc.). Must be extended by an `@Directive` - Angular
|
|
@@ -20255,7 +20277,7 @@ class TextFieldControlDirective {
|
|
|
20255
20277
|
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
20256
20278
|
this.focused = signal(false, /* @ts-ignore */
|
|
20257
20279
|
...(ngDevMode ? [{ debugName: "focused" }] : /* istanbul ignore next */ []));
|
|
20258
|
-
/** @internal The element `
|
|
20280
|
+
/** @internal The element `focus()` targets - the native control by default. */
|
|
20259
20281
|
this.focusTarget = signal(null, /* @ts-ignore */
|
|
20260
20282
|
...(ngDevMode ? [{ debugName: "focusTarget" }] : /* istanbul ignore next */ []));
|
|
20261
20283
|
this.registeredLabelId = computed(() => this.formField?.registeredLabel()?.id() ?? null, /* @ts-ignore */
|
|
@@ -20274,10 +20296,13 @@ class TextFieldControlDirective {
|
|
|
20274
20296
|
destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
20275
20297
|
}
|
|
20276
20298
|
activate() {
|
|
20299
|
+
this.focus();
|
|
20300
|
+
}
|
|
20301
|
+
focus(options) {
|
|
20277
20302
|
if (this.disabled()) {
|
|
20278
20303
|
return;
|
|
20279
20304
|
}
|
|
20280
|
-
this.focusTarget()?.focus();
|
|
20305
|
+
this.focusTarget()?.focus(options);
|
|
20281
20306
|
}
|
|
20282
20307
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TextFieldControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
20283
20308
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: TextFieldControlDirective, isStandalone: true, inputs: { touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, mixed: { classPropertyName: "mixed", publicName: "mixed", isSignal: true, isRequired: false, transformFunction: null }, mixedLabel: { classPropertyName: "mixedLabel", publicName: "mixedLabel", 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 }, hidden: { classPropertyName: "hidden", publicName: "hidden", 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 }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", 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: { touched: "touchedChange", mixed: "mixedChange" }, host: { properties: { "attr.data-mixed": "mixed() || null" } }, ngImport: i0 }); }
|
|
@@ -20859,10 +20884,13 @@ class CascaderDirective {
|
|
|
20859
20884
|
}
|
|
20860
20885
|
}
|
|
20861
20886
|
activate() {
|
|
20887
|
+
this.focus({ preventScroll: true });
|
|
20888
|
+
}
|
|
20889
|
+
focus(options) {
|
|
20862
20890
|
if (this.disabled()) {
|
|
20863
20891
|
return;
|
|
20864
20892
|
}
|
|
20865
|
-
this.registeredTrigger()?.elementRef.nativeElement.focus(
|
|
20893
|
+
this.registeredTrigger()?.elementRef.nativeElement.focus(options);
|
|
20866
20894
|
}
|
|
20867
20895
|
/**
|
|
20868
20896
|
* Whether a node is selected - on the committed chain in single mode; in multi mode an
|
|
@@ -22095,6 +22123,9 @@ class CascaderComponent {
|
|
|
22095
22123
|
isCrumbCurrent(columnIndex) {
|
|
22096
22124
|
return !this.isColumnOffstage(columnIndex);
|
|
22097
22125
|
}
|
|
22126
|
+
focus(options) {
|
|
22127
|
+
this.cascader.focus(options);
|
|
22128
|
+
}
|
|
22098
22129
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CascaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22099
22130
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: CascaderComponent, isStandalone: true, selector: "et-cascader", inputs: { clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, backLabel: { classPropertyName: "backLabel", publicName: "backLabel", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-cascader" }, providers: [provideIcons(CHEVRON_ICON, TIMES_ICON)], hostDirectives: [{ directive: CascaderDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "open", "open", "dataSource", "dataSource", "multiple", "multiple", "selectableLevels", "selectableLevels", "compareWith", "compareWith", "toErrorMessage", "toErrorMessage", "mirrorPanelWidth", "mirrorPanelWidth", "maxVisibleColumns", "maxVisibleColumns", "mixedLabel", "mixedLabel", "placeholder", "placeholder", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "openChange", "openChange", "afterOpen", "afterOpen", "afterClose", "afterClose"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<div class=\"et-cascader-trigger\" etCascaderTrigger>\n <span [attr.data-placeholder]=\"!cascader.hasValue() || null\" class=\"et-cascader-value\">\n @if (cascader.displayValue(); as display) {\n {{ display }}\n } @else {\n {{ cascader.placeholder() }}\n }\n </span>\n</div>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a blur\n would unmount this button before the click could land -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <button\n [disabled]=\"cascader.disabled()\"\n (click)=\"handleArrowClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-picker-trigger et-cascader-arrow\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template etCascaderSurface>\n <et-cascader-panel #panel>\n @if (cascader.canSearch()) {\n <div class=\"et-cascader-search\">\n <input [placeholder]=\"resolvedSearchPlaceholder()\" etCascaderSearch />\n </div>\n }\n\n @if (panel.isSheet()) {\n <!-- the sheet body is a fixed-height flex column: the header (when present) and the\n column area share it, so the Back bar appearing doesn't change the total sheet\n height \u2014 the column area just flexes to fill, and the panel never resizes -->\n <div class=\"et-cascader-sheet-body\">\n @if (cascader.isSearching()) {\n <ng-container [ngTemplateOutlet]=\"searchResults\" />\n } @else {\n <ng-container [ngTemplateOutlet]=\"sheetBrowse\" />\n }\n </div>\n } @else if (cascader.isSearching()) {\n <ng-container [ngTemplateOutlet]=\"searchResults\" />\n } @else {\n <div [style.--_et-cascader-visible-columns]=\"cascader.visibleColumns().length\" class=\"et-cascader-columns\">\n <!-- every drilled level stays mounted on one translating track: a level collapsing\n into a breadcrumb slides out to the left together with the columns following it,\n and the reverse plays when a crumb brings it back \u2014 the viewport clips the rest -->\n <div\n [style.--_et-cascader-column-window-start]=\"cascader.visibleColumnStart()\"\n class=\"et-cascader-columns-track\"\n >\n @for (column of cascader.columns(); track $index; let columnIndex = $index) {\n <ng-container\n [ngTemplateOutlet]=\"columnBody\"\n [ngTemplateOutletContext]=\"{ $implicit: column, columnIndex }\"\n />\n }\n </div>\n </div>\n\n <!-- the full drilled trail, shown while any level is collapsed out of the window; below\n the columns so mounting never shifts them (the panel's animated block size covers the\n height change). A crumb click anchors the window at its level without truncating. -->\n @if (cascader.breadcrumbPath().length) {\n <div class=\"et-cascader-breadcrumbs\">\n @for (crumb of cascader.breadcrumbPath(); track $index; let last = $last) {\n <span\n class=\"et-cascader-crumb\"\n animate.enter=\"et-cascader-crumb--enter\"\n animate.leave=\"et-cascader-crumb--leave\"\n >\n <button\n [attr.title]=\"crumb.label\"\n [attr.data-current]=\"isCrumbCurrent($index) || null\"\n (click)=\"cascader.showColumn($index)\"\n class=\"et-cascader-breadcrumb\"\n type=\"button\"\n >\n {{ crumb.label }}\n </button>\n @if (!last) {\n <i class=\"et-cascader-breadcrumb-chevron\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n }\n </span>\n }\n </div>\n }\n }\n </et-cascader-panel>\n</ng-template>\n\n<ng-template #sheetBrowse>\n <!-- persistent nav bar (fixed height): only its contents animate, so nothing reflows\n the column list. Back is an absolute overlay (no layout impact); the title slot's\n shift wrapper translates to clear the Back space (transform = reliably smooth,\n unlike a flex width transition), and the title cross-slides on level changes -->\n <div [attr.data-back]=\"cascader.deepestColumnIndex() > 0 || null\" class=\"et-cascader-sheet-header\">\n <button\n [class.et-cascader-back--hidden]=\"cascader.deepestColumnIndex() === 0\"\n [attr.aria-hidden]=\"cascader.deepestColumnIndex() === 0 || null\"\n [attr.tabindex]=\"cascader.deepestColumnIndex() === 0 ? -1 : null\"\n (click)=\"cascader.goBack()\"\n class=\"et-cascader-back\"\n et-text-button\n size=\"sm\"\n type=\"button\"\n >\n <i class=\"et-cascader-back-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n {{ resolvedBackLabel() }}\n </button>\n\n <span\n [attr.data-nav]=\"cascader.navigationDirection()\"\n [attr.data-anim]=\"cascader.titleAnimation()\"\n class=\"et-cascader-sheet-title-slot\"\n >\n <!-- shifts right (transform) to make room for Back; the title fills it at the root -->\n <span class=\"et-cascader-sheet-title-shift\">\n <!-- keyed by depth so a level change re-creates it: old title slides out in the\n travel direction, new one slides in (both absolutely positioned) -->\n @for (titleKey of [cascader.deepestColumnIndex()]; track titleKey) {\n @let titleParent = cascader.columns()[titleKey]?.parent;\n <span\n class=\"et-cascader-sheet-title\"\n animate.enter=\"et-cascader-sheet-title--enter\"\n animate.leave=\"et-cascader-sheet-title--leave\"\n >{{ titleParent?.label ?? cascader.placeholder() }}</span\n >\n }\n </span>\n </span>\n </div>\n\n <!-- one column at a time, keyed by depth so drilling / going back re-creates it and\n re-fires the slide animation; it scrolls internally within the fixed body -->\n <div class=\"et-cascader-columns\" data-sheet>\n @for (columnIndex of [cascader.deepestColumnIndex()]; track columnIndex) {\n @let sheetColumn = cascader.columns()[columnIndex];\n @if (sheetColumn) {\n <ng-container\n [ngTemplateOutlet]=\"columnBody\"\n [ngTemplateOutletContext]=\"{ $implicit: sheetColumn, columnIndex }\"\n />\n }\n }\n </div>\n</ng-template>\n\n<ng-template #searchResults>\n <div class=\"et-cascader-results\">\n @switch (cascader.searchState().status) {\n @case ('loading') {\n <div class=\"et-cascader-state et-cascader-state--loading\">\n <span\n [class.et-cascader-state-content--visible]=\"showSearchSpinner()\"\n [attr.aria-hidden]=\"!showSearchSpinner() || null\"\n class=\"et-cascader-state-content\"\n >\n <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n Searching\u2026\n </span>\n </div>\n }\n @case ('error') {\n <div class=\"et-cascader-state et-cascader-state--error\" role=\"alert\">\n <span [etProvideColor]=\"errorColorTheme\" class=\"et-cascader-state-error-message\">{{\n cascader.searchState().error\n }}</span>\n <button (click)=\"cascader.retrySearch()\" et-text-button size=\"sm\" type=\"button\">\n {{ cascaderLabels().retry }}\n </button>\n </div>\n }\n @default {\n @if (cascader.searchState().results.length) {\n @for (result of cascader.searchState().results; track $index) {\n <button\n [path]=\"result\"\n [index]=\"$index\"\n [disabled]=\"resultDisabled(result)\"\n class=\"et-cascader-search-option\"\n etCascaderSearchOption\n type=\"button\"\n >\n @if (cascader.multiple()) {\n <span class=\"et-cascader-check\" aria-hidden=\"true\"></span>\n }\n <span class=\"et-cascader-search-option-label\">\n @for (part of result; track $index; let last = $last) {\n @if (last) {\n {{ part.label }}\n } @else {\n <span class=\"et-cascader-search-option-ancestor\">{{ part.label }} / </span>\n }\n }\n </span>\n </button>\n }\n } @else {\n <div class=\"et-cascader-state et-cascader-state--empty\">{{ cascaderLabels().noMatches }}</div>\n }\n }\n }\n </div>\n</ng-template>\n\n<ng-template #columnBody let-column let-columnIndex=\"columnIndex\">\n <div\n [etCascaderColumn]=\"columnIndex\"\n [attr.data-nav]=\"columnIndex === cascader.deepestColumnIndex() ? cascader.navigationDirection() : null\"\n [class.et-cascader-column--offstage]=\"isColumnOffstage(columnIndex)\"\n class=\"et-cascader-column\"\n >\n @switch (column.status) {\n @case ('loading') {\n <div class=\"et-cascader-state et-cascader-state--loading\">\n <!-- laid out from the first frame and only faded in later, so the column cannot change\n height when the spinner arrives; hidden from assistive tech until it does -->\n <span\n [class.et-cascader-state-content--visible]=\"showColumnSpinner()\"\n [attr.aria-hidden]=\"!showColumnSpinner() || null\"\n class=\"et-cascader-state-content\"\n >\n <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n {{ cascaderLabels().loading }}\n </span>\n </div>\n }\n @case ('error') {\n <div class=\"et-cascader-state et-cascader-state--error\" role=\"alert\">\n <span [etProvideColor]=\"errorColorTheme\" class=\"et-cascader-state-error-message\">{{ column.error }}</span>\n <button (click)=\"cascader.retryColumn(columnIndex)\" et-text-button size=\"sm\" type=\"button\">\n {{ cascaderLabels().retry }}\n </button>\n </div>\n }\n @default {\n @if (column.nodes.length) {\n @for (node of column.nodes; track $index) {\n <button [node]=\"node\" [disabled]=\"node.disabled\" class=\"et-cascader-node\" etCascaderNode type=\"button\">\n @if (cascader.multiple()) {\n <span class=\"et-cascader-check\" aria-hidden=\"true\"></span>\n }\n <span class=\"et-cascader-node-label\">{{ node.label }}</span>\n @if (node.isLeaf !== true && node.hasChildren !== false) {\n <i class=\"et-cascader-node-chevron\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n } @else {\n <div class=\"et-cascader-state et-cascader-state--empty\">{{ cascaderLabels().noOptions }}</div>\n }\n }\n }\n </div>\n</ng-template>\n", styles: ["@layer components{et-cascader{display:flex;align-items:center;gap:4px;flex:1;min-inline-size:0;color:inherit}et-cascader .et-cascader-trigger{display:flex;align-items:center;gap:4px;flex:1;min-inline-size:0;cursor:pointer;outline:none}et-cascader[data-disabled] .et-cascader-trigger{cursor:not-allowed}et-cascader .et-cascader-value{flex:1;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}et-cascader .et-cascader-value[data-placeholder]{color:color-mix(in srgb,currentColor 46%,transparent)}et-cascader[data-mixed] .et-cascader-value{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}.et-cascader-arrow .et-icon{rotate:180deg}}\n"], dependencies: [{ kind: "directive", type: CascaderTriggerDirective, selector: "[etCascaderTrigger]", exportAs: ["etCascaderTrigger"] }, { kind: "directive", type: CascaderSurfaceDirective, selector: "ng-template[etCascaderSurface]", exportAs: ["etCascaderSurface"] }, { kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "directive", type: CascaderColumnDirective, selector: "[etCascaderColumn]", inputs: ["etCascaderColumn"], exportAs: ["etCascaderColumn"] }, { kind: "directive", type: CascaderNodeDirective, selector: "[etCascaderNode]", inputs: ["node"], exportAs: ["etCascaderNode"] }, { kind: "directive", type: CascaderSearchDirective, selector: "input[etCascaderSearch]", exportAs: ["etCascaderSearch"] }, { kind: "directive", type: CascaderSearchOptionDirective, selector: "[etCascaderSearchOption]", inputs: ["path", "index"], exportAs: ["etCascaderSearchOption"] }, { kind: "component", type: CascaderPanelComponent, selector: "et-cascader-panel" }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }, { kind: "component", type: TextButtonComponent, selector: "[et-text-button]", inputs: ["size", "iconAlignment"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
22100
22131
|
}
|
|
@@ -22212,7 +22243,12 @@ class CheckboxDirective {
|
|
|
22212
22243
|
return;
|
|
22213
22244
|
// readonly stays focusable (view-only), it just cannot toggle
|
|
22214
22245
|
this.toggle();
|
|
22215
|
-
this.
|
|
22246
|
+
this.focus({ focusVisible: false });
|
|
22247
|
+
}
|
|
22248
|
+
focus(options) {
|
|
22249
|
+
if (this.disabled())
|
|
22250
|
+
return;
|
|
22251
|
+
this.el.nativeElement.focus(options);
|
|
22216
22252
|
}
|
|
22217
22253
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CheckboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
22218
22254
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: CheckboxDirective, isStandalone: true, selector: "[etCheckbox]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", 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: { checked: "checkedChange", indeterminate: "indeterminateChange", touched: "touchedChange" }, host: { attributes: { "role": "checkbox" }, listeners: { "click": "toggle()", "keydown.space": "toggle(); $event.preventDefault()", "blur": "touched.set(true)" }, properties: { "attr.aria-checked": "ariaChecked()", "attr.aria-invalid": "shouldDisplayError() || null", "attr.aria-disabled": "disabled() || null", "attr.aria-readonly": "readonly() || null", "attr.data-readonly": "readonly() || null", "attr.aria-required": "required() || null", "attr.aria-describedby": "describedBy() || null", "attr.aria-labelledby": "labelId() || null", "attr.tabindex": "disabled() ? -1 : 0" } }, ngImport: i0 }); }
|
|
@@ -22282,15 +22318,18 @@ class CheckboxComponent {
|
|
|
22282
22318
|
});
|
|
22283
22319
|
});
|
|
22284
22320
|
}
|
|
22321
|
+
focus(options) {
|
|
22322
|
+
this.checkboxDir.focus(options);
|
|
22323
|
+
}
|
|
22285
22324
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22286
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: CheckboxComponent, isStandalone: true, selector: "et-checkbox", host: { properties: { "attr.data-can-animate": "canAnimate.state() || null" }, classAttribute: "et-checkbox" }, viewQueries: [{ propertyName: "checkmarkEl", first: true, predicate: ["checkmark"], descendants: true, isSignal: true }, { propertyName: "indeterminateEl", first: true, predicate: ["indeterminate"], descendants: true, isSignal: true }], hostDirectives: [{ directive: CheckboxDirective, inputs: ["checked", "checked", "indeterminate", "indeterminate", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["checkedChange", "checkedChange", "indeterminateChange", "indeterminateChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }, { directive: FocusRingDirective }], ngImport: i0, template: "<div class=\"et-checkbox-box\">\n <svg\n #checkmark\n [style.color]=\"frozenCheckmarkColor()\"\n class=\"et-checkbox-checkmark\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <polyline\n class=\"et-checkbox-checkmark-path\"\n points=\"3.5 8 6.5 11 12.5 5\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <svg\n #indeterminate\n [style.color]=\"frozenIndeterminateColor()\"\n class=\"et-checkbox-indeterminate\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <line\n class=\"et-checkbox-indeterminate-path\"\n x1=\"4\"\n y1=\"8\"\n x2=\"12\"\n y2=\"8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n</div>\n", styles: ["@layer components{@property --et-checkbox-size{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-checkbox-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-checkbox-border-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-checkbox-transition-duration{syntax: \"<time>\"; inherits: true; initial-value: .15s;}@property --et-checkbox-opacity-disabled{syntax: \"<number>\"; inherits: true; initial-value: .5;}et-checkbox{display:inline-flex;align-items:center;cursor:pointer;border-radius:var(--et-checkbox-border-radius)}et-checkbox[data-readonly]{cursor:default}et-checkbox[aria-disabled=true]{opacity:var(--et-checkbox-opacity-disabled);pointer-events:none;cursor:default}et-checkbox .et-checkbox-box{position:relative;display:grid;place-items:center;width:var(--et-checkbox-size);height:var(--et-checkbox-size);border:var(--et-checkbox-border-width) solid var(--et-surface-border-solid, currentColor);border-radius:var(--et-checkbox-border-radius)}@media(hover:hover){et-checkbox:hover:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-checkbox:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-surface-interaction-hover-solid, currentColor)}}:where(et-choice-field[data-error]) et-checkbox:not([aria-disabled=true]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}@media(hover:hover){:where(et-choice-field[data-error]) et-checkbox:hover:not([aria-disabled=true]):not([data-readonly]) .et-checkbox-box,:where(et-choice-field[data-error]:has(.et-choice-field-label-area:hover)) et-checkbox:not([aria-disabled=true]):not([data-readonly]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}}et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]){--_et-focus-ring-color: var(--et-surface-color-solid, currentColor)}et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-surface-color-solid, currentColor)}et-checkbox:focus-visible:is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}et-choice-field[data-error] et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]){--_et-focus-ring-color: var(--et-theme-color-primary-solid)}et-choice-field[data-error] et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}:where(et-choice-field[data-variant=card]) et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}et-checkbox:active:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box,et-checkbox.et-focus-ring--active:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box,:where(et-choice-field:has(.et-choice-field-label-area:active)) et-checkbox:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-surface-interaction-hover-solid, currentColor);transform:scale(.95)}et-checkbox:active:not([aria-disabled=true]):not([data-readonly]):is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box,et-checkbox.et-focus-ring--active:not([aria-disabled=true]):not([data-readonly]):is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box,:where(et-choice-field:has(.et-choice-field-label-area:active)) et-checkbox:not([aria-disabled=true]):not([data-readonly]):is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box{transform:scale(.95)}et-checkbox .et-checkbox-checkmark{position:absolute;inset:0;width:100%;height:100%;color:var(--et-theme-color-on-primary-solid, white);opacity:0}et-checkbox .et-checkbox-checkmark-path{stroke-dasharray:18;stroke-dashoffset:18}et-checkbox .et-checkbox-indeterminate{position:absolute;inset:0;width:100%;height:100%;color:var(--et-theme-color-on-primary-solid, white);opacity:0}et-checkbox .et-checkbox-indeterminate-path{stroke-dasharray:8;stroke-dashoffset:8}et-checkbox[aria-checked=true] .et-checkbox-box{background-color:var(--et-theme-color-primary-solid, currentColor);border-color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox[aria-checked=true] .et-checkbox-checkmark{opacity:1}et-checkbox[aria-checked=true] .et-checkbox-checkmark-path{stroke-dashoffset:0}et-checkbox[aria-checked=mixed] .et-checkbox-box{background-color:var(--et-theme-color-primary-solid, currentColor);border-color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox[aria-checked=mixed] .et-checkbox-indeterminate{opacity:1}et-checkbox[aria-checked=mixed] .et-checkbox-indeterminate-path{stroke-dashoffset:0}et-checkbox[data-can-animate]{transition:opacity var(--et-checkbox-transition-duration) ease,outline-color var(--et-checkbox-transition-duration) ease}et-checkbox[data-can-animate] .et-checkbox-box{transition:background-color var(--et-checkbox-transition-duration) ease,border-color var(--et-checkbox-transition-duration) ease,transform var(--et-checkbox-transition-duration) ease}et-checkbox[data-can-animate] .et-checkbox-checkmark{transition:opacity 0s calc(var(--et-checkbox-transition-duration) * 1.5)}et-checkbox[data-can-animate] .et-checkbox-checkmark-path{transition:stroke-dashoffset calc(var(--et-checkbox-transition-duration) * 1.5) ease}et-checkbox[data-can-animate] .et-checkbox-indeterminate{transition:opacity 0s calc(var(--et-checkbox-transition-duration) * 1.5)}et-checkbox[data-can-animate] .et-checkbox-indeterminate-path{transition:stroke-dashoffset calc(var(--et-checkbox-transition-duration) * 1.5) ease}et-checkbox[data-can-animate][aria-checked=true] .et-checkbox-checkmark{transition:opacity 0s 0s}et-checkbox[data-can-animate][aria-checked=mixed] .et-checkbox-indeterminate{transition:opacity 0s 0s}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
22325
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: CheckboxComponent, isStandalone: true, selector: "et-checkbox", host: { properties: { "attr.data-can-animate": "canAnimate.state() || null" }, classAttribute: "et-checkbox" }, viewQueries: [{ propertyName: "checkmarkEl", first: true, predicate: ["checkmark"], descendants: true, isSignal: true }, { propertyName: "indeterminateEl", first: true, predicate: ["indeterminate"], descendants: true, isSignal: true }], hostDirectives: [{ directive: CheckboxDirective, inputs: ["checked", "checked", "indeterminate", "indeterminate", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["checkedChange", "checkedChange", "indeterminateChange", "indeterminateChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }, { directive: FocusRingDirective }], ngImport: i0, template: "<div class=\"et-checkbox-box\">\n <svg\n #checkmark\n [style.color]=\"frozenCheckmarkColor()\"\n class=\"et-checkbox-checkmark\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <polyline\n class=\"et-checkbox-checkmark-path\"\n points=\"3.5 8 6.5 11 12.5 5\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <svg\n #indeterminate\n [style.color]=\"frozenIndeterminateColor()\"\n class=\"et-checkbox-indeterminate\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <line\n class=\"et-checkbox-indeterminate-path\"\n x1=\"4\"\n y1=\"8\"\n x2=\"12\"\n y2=\"8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n</div>\n", styles: ["@layer components{@property --et-checkbox-size{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-checkbox-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-checkbox-border-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-checkbox-transition-duration{syntax: \"<time>\"; inherits: true; initial-value: .15s;}@property --et-checkbox-opacity-disabled{syntax: \"<number>\"; inherits: true; initial-value: .5;}et-checkbox{display:inline-flex;align-items:center;cursor:pointer;border-radius:var(--et-checkbox-border-radius)}et-checkbox[data-readonly]{cursor:default}et-checkbox[aria-disabled=true]{opacity:var(--et-checkbox-opacity-disabled);pointer-events:none;cursor:default}et-checkbox .et-checkbox-box{position:relative;display:grid;place-items:center;width:var(--et-checkbox-size);height:var(--et-checkbox-size);border:var(--et-checkbox-border-width) solid var(--et-surface-border-solid, currentColor);border-radius:var(--et-checkbox-border-radius)}@media(hover:hover){et-checkbox:hover:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-checkbox:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-surface-interaction-hover-solid, currentColor)}}:where(et-choice-field[data-error]) et-checkbox:not([aria-disabled=true]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}@media(hover:hover){:where(et-choice-field[data-error]) et-checkbox:hover:not([aria-disabled=true]):not([data-readonly]) .et-checkbox-box,:where(et-choice-field[data-error]:has(.et-choice-field-label-area:hover)) et-checkbox:not([aria-disabled=true]):not([data-readonly]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}}et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]){--_et-focus-ring-color: var(--et-surface-color-solid, currentColor)}et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-surface-color-solid, currentColor)}et-checkbox:focus-visible:is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}et-choice-field[data-error] et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]){--_et-focus-ring-color: var(--et-theme-color-primary-solid)}et-choice-field[data-error] et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}:where(et-choice-field[data-variant=card]) et-checkbox:focus-visible:not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-theme-color-primary-solid)}et-checkbox:active:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box,et-checkbox.et-focus-ring--active:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box,:where(et-choice-field:has(.et-choice-field-label-area:active)) et-checkbox:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([aria-checked=mixed]) .et-checkbox-box{border-color:var(--et-surface-interaction-hover-solid, currentColor);transform:scale(.95)}et-checkbox:active:not([aria-disabled=true]):not([data-readonly]):is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box,et-checkbox.et-focus-ring--active:not([aria-disabled=true]):not([data-readonly]):is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box,:where(et-choice-field:has(.et-choice-field-label-area:active)) et-checkbox:not([aria-disabled=true]):not([data-readonly]):is([aria-checked=true],[aria-checked=mixed]) .et-checkbox-box{transform:scale(.95)}et-checkbox .et-checkbox-checkmark{position:absolute;inset:0;width:100%;height:100%;color:var(--et-theme-color-on-primary-solid, white);opacity:0}et-checkbox .et-checkbox-checkmark-path{stroke-dasharray:18;stroke-dashoffset:18}et-checkbox .et-checkbox-indeterminate{position:absolute;inset:0;width:100%;height:100%;color:var(--et-theme-color-on-primary-solid, white);opacity:0}et-checkbox .et-checkbox-indeterminate-path{stroke-dasharray:8;stroke-dashoffset:8}et-checkbox[aria-checked=true] .et-checkbox-box{background-color:var(--et-theme-color-primary-solid, currentColor);border-color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox[aria-checked=true] .et-checkbox-checkmark{opacity:1}et-checkbox[aria-checked=true] .et-checkbox-checkmark-path{stroke-dashoffset:0}et-checkbox[aria-checked=mixed] .et-checkbox-box{background-color:var(--et-theme-color-primary-solid, currentColor);border-color:var(--et-theme-color-primary-solid, currentColor)}et-checkbox[aria-checked=mixed] .et-checkbox-indeterminate{opacity:1}et-checkbox[aria-checked=mixed] .et-checkbox-indeterminate-path{stroke-dashoffset:0}et-checkbox[data-can-animate]{transition:opacity var(--et-checkbox-transition-duration) ease,outline-color var(--et-checkbox-transition-duration) ease}et-checkbox[data-can-animate] .et-checkbox-box{transition:background-color var(--et-checkbox-transition-duration) ease,border-color var(--et-checkbox-transition-duration) ease,transform var(--et-checkbox-transition-duration) ease}et-checkbox[data-can-animate] .et-checkbox-checkmark{transition:opacity 0s calc(var(--et-checkbox-transition-duration) * 1.5)}et-checkbox[data-can-animate] .et-checkbox-checkmark-path{transition:stroke-dashoffset calc(var(--et-checkbox-transition-duration) * 1.5) ease}et-checkbox[data-can-animate] .et-checkbox-indeterminate{transition:opacity 0s calc(var(--et-checkbox-transition-duration) * 1.5)}et-checkbox[data-can-animate] .et-checkbox-indeterminate-path{transition:stroke-dashoffset calc(var(--et-checkbox-transition-duration) * 1.5) ease}et-checkbox[data-can-animate][aria-checked=true] .et-checkbox-checkmark{transition:opacity 0s 0s}et-checkbox[data-can-animate][aria-checked=mixed] .et-checkbox-indeterminate{transition:opacity 0s 0s}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
22287
22326
|
}
|
|
22288
22327
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
22289
22328
|
type: Component,
|
|
22290
22329
|
args: [{ selector: 'et-checkbox', encapsulation: ViewEncapsulation.None, hostDirectives: [
|
|
22291
22330
|
{
|
|
22292
22331
|
directive: CheckboxDirective,
|
|
22293
|
-
inputs: ['checked', 'indeterminate', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
|
|
22332
|
+
inputs: ['checked', 'indeterminate', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
|
|
22294
22333
|
outputs: ['checkedChange', 'indeterminateChange', 'touchedChange'],
|
|
22295
22334
|
},
|
|
22296
22335
|
ColorInteractiveDirective,
|
|
@@ -22786,8 +22825,11 @@ class ColorInputComponent {
|
|
|
22786
22825
|
}
|
|
22787
22826
|
event.preventDefault();
|
|
22788
22827
|
}
|
|
22828
|
+
focus(options) {
|
|
22829
|
+
this.colorInputDir.focus(options);
|
|
22830
|
+
}
|
|
22789
22831
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ColorInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22790
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: ColorInputComponent, isStandalone: true, selector: "et-color-input", host: { listeners: { "click": "colorInputDir.activate()" }, classAttribute: "et-color-input" }, viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: ColorInputDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<span [style.background-color]=\"colorInputDir.swatchColor()\" class=\"et-color-input-swatch\" aria-hidden=\"true\"></span>\n<span class=\"et-color-input-value\">{{ colorInputDir.displayValue() }}</span>\n<input\n #nativeInput\n [value]=\"colorInputDir.resolvedColor()\"\n [disabled]=\"colorInputDir.disabled()\"\n [required]=\"colorInputDir.required()\"\n [attr.name]=\"colorInputDir.name() || null\"\n [attr.aria-invalid]=\"colorInputDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"colorInputDir.describedBy() || null\"\n [attr.aria-label]=\"colorInputDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"colorInputDir.labelId() || null\"\n [attr.aria-readonly]=\"colorInputDir.readonly() || null\"\n (input)=\"syncNativeValue($event)\"\n (mousedown)=\"blockWhenReadonly($event)\"\n (click)=\"blockWhenReadonly($event)\"\n (keydown)=\"blockWhenReadonly($event)\"\n (focus)=\"colorInputDir.focused.set(true)\"\n (blur)=\"colorInputDir.focused.set(false); colorInputDir.touched.set(true)\"\n class=\"et-color-input-native\"\n type=\"color\"\n/>\n", styles: ["@layer components{@property --et-color-input-swatch-size{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-color-input-swatch-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-color-input{position:relative;display:flex;flex:1;align-items:center;gap:8px;min-inline-size:0;color:inherit;cursor:pointer}et-color-input .et-color-input-swatch{inline-size:var(--et-color-input-swatch-size);block-size:var(--et-color-input-swatch-size);border-radius:var(--et-color-input-swatch-radius);border:1px solid var(--et-surface-border-solid, currentColor);flex:none}et-color-input .et-color-input-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}et-color-input .et-color-input-native{position:absolute;inset:0;inline-size:100%;block-size:100%;opacity:0;border:none;padding:0;cursor:pointer}et-color-input .et-color-input-native:disabled{cursor:default}et-color-input:has(.et-color-input-native:focus-visible) .et-color-input-swatch{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:2px}et-color-input[data-mixed] .et-color-input-swatch{background:linear-gradient(to top right,transparent calc(50% - 1px),color-mix(in srgb,currentColor 25%,transparent) calc(50% - 1px),color-mix(in srgb,currentColor 25%,transparent) calc(50% + 1px),transparent calc(50% + 1px))}et-color-input[data-mixed] .et-color-input-value{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
22832
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: ColorInputComponent, isStandalone: true, selector: "et-color-input", host: { listeners: { "click": "colorInputDir.activate()" }, classAttribute: "et-color-input" }, viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: ColorInputDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<span [style.background-color]=\"colorInputDir.swatchColor()\" class=\"et-color-input-swatch\" aria-hidden=\"true\"></span>\n<span class=\"et-color-input-value\">{{ colorInputDir.displayValue() }}</span>\n<input\n #nativeInput\n [value]=\"colorInputDir.resolvedColor()\"\n [disabled]=\"colorInputDir.disabled()\"\n [required]=\"colorInputDir.required()\"\n [attr.name]=\"colorInputDir.name() || null\"\n [attr.aria-invalid]=\"colorInputDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"colorInputDir.describedBy() || null\"\n [attr.aria-label]=\"colorInputDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"colorInputDir.labelId() || null\"\n [attr.aria-readonly]=\"colorInputDir.readonly() || null\"\n (input)=\"syncNativeValue($event)\"\n (mousedown)=\"blockWhenReadonly($event)\"\n (click)=\"blockWhenReadonly($event)\"\n (keydown)=\"blockWhenReadonly($event)\"\n (focus)=\"colorInputDir.focused.set(true)\"\n (blur)=\"colorInputDir.focused.set(false); colorInputDir.touched.set(true)\"\n class=\"et-color-input-native\"\n type=\"color\"\n/>\n", styles: ["@layer components{@property --et-color-input-swatch-size{syntax: \"<length>\"; inherits: true; initial-value: 20px;}@property --et-color-input-swatch-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-color-input{position:relative;display:flex;flex:1;align-items:center;gap:8px;min-inline-size:0;color:inherit;cursor:pointer}et-color-input .et-color-input-swatch{inline-size:var(--et-color-input-swatch-size);block-size:var(--et-color-input-swatch-size);border-radius:var(--et-color-input-swatch-radius);border:1px solid var(--et-surface-border-solid, currentColor);flex:none}et-color-input .et-color-input-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}et-color-input .et-color-input-native{position:absolute;inset:0;inline-size:100%;block-size:100%;opacity:0;border:none;padding:0;cursor:pointer}et-color-input .et-color-input-native:disabled{cursor:default}et-color-input:has(.et-color-input-native:focus-visible) .et-color-input-swatch{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:2px}et-color-input[data-mixed] .et-color-input-swatch{background:linear-gradient(to top right,transparent calc(50% - 1px),color-mix(in srgb,currentColor 25%,transparent) calc(50% - 1px),color-mix(in srgb,currentColor 25%,transparent) calc(50% + 1px),transparent calc(50% + 1px))}et-color-input[data-mixed] .et-color-input-value{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
22791
22833
|
}
|
|
22792
22834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ColorInputComponent, decorators: [{
|
|
22793
22835
|
type: Component,
|
|
@@ -22797,6 +22839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
22797
22839
|
inputs: [
|
|
22798
22840
|
'value',
|
|
22799
22841
|
'mixed',
|
|
22842
|
+
'touched',
|
|
22800
22843
|
'mixedLabel',
|
|
22801
22844
|
'disabled',
|
|
22802
22845
|
'readonly',
|
|
@@ -23444,8 +23487,8 @@ class DatePickerInputFieldDirective {
|
|
|
23444
23487
|
});
|
|
23445
23488
|
}
|
|
23446
23489
|
/** @internal */
|
|
23447
|
-
focus() {
|
|
23448
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
23490
|
+
focus(options) {
|
|
23491
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
23449
23492
|
}
|
|
23450
23493
|
/** @internal `InputMaskHost` - an attached mask owns value-sync; our input/mirror handling stands down. */
|
|
23451
23494
|
suppressNativeSync() {
|
|
@@ -23800,10 +23843,13 @@ class DatePickerInputDirective {
|
|
|
23800
23843
|
}
|
|
23801
23844
|
}
|
|
23802
23845
|
activate() {
|
|
23846
|
+
this.focus();
|
|
23847
|
+
}
|
|
23848
|
+
focus(options) {
|
|
23803
23849
|
if (this.disabled()) {
|
|
23804
23850
|
return;
|
|
23805
23851
|
}
|
|
23806
|
-
this.registeredField()?.focus();
|
|
23852
|
+
this.registeredField()?.focus(options);
|
|
23807
23853
|
}
|
|
23808
23854
|
/** Clears the value and any uncommitted field text - wired to the styled inputs' clear button. */
|
|
23809
23855
|
clearValue() {
|
|
@@ -24138,6 +24184,9 @@ class DateInputComponent {
|
|
|
24138
24184
|
event.stopPropagation();
|
|
24139
24185
|
this.dateInput.clearValue();
|
|
24140
24186
|
}
|
|
24187
|
+
focus(options) {
|
|
24188
|
+
this.dateInput.focus(options);
|
|
24189
|
+
}
|
|
24141
24190
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24142
24191
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DateInputComponent, isStandalone: true, selector: "et-date-input", inputs: { pickerTriggerLabel: { classPropertyName: "pickerTriggerLabel", publicName: "pickerTriggerLabel", isSignal: true, isRequired: false, transformFunction: null }, dialogLabel: { classPropertyName: "dialogLabel", publicName: "dialogLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-date-input" }, providers: [provideIcons(CALENDAR_ICON, TIMES_ICON)], hostDirectives: [{ directive: DateInputDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "parseErrorMessage", "parseErrorMessage", "valueFormat", "valueFormat", "displayFormat", "displayFormat", "locale", "locale", "mask", "mask", "minDate", "minDate", "maxDate", "maxDate", "dateFilter", "dateFilter", "startAt", "startAt", "precision", "precision", "startView", "startView", "dateClass", "dateClass", "weekNumbers", "weekNumbers", "pickerOpen", "pickerOpen"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "pickerOpenChange", "pickerOpenChange"] }], ngImport: i0, template: "<input\n [etInputMask]=\"dateInput.maskPattern()\"\n class=\"et-date-input-field\"\n etDateInputField\n maskValueMode=\"masked\"\n placeholderChar=\"_\"\n/>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear by erasing the text.\n mousedown is prevented so the field keeps focus (its blur would unmount this\n button before the click could land) -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n <i etIcon=\"et-calendar\"></i>\n </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n <et-calendar\n [value]=\"dateInput.date()\"\n [min]=\"dateInput.minDate()\"\n [max]=\"dateInput.maxDate()\"\n [dateFilter]=\"dateInput.dateFilter()\"\n [startAt]=\"dateInput.startAt()\"\n [precision]=\"dateInput.precision()\"\n [startView]=\"dateInput.startView()\"\n [dateClass]=\"dateInput.dateClass()\"\n [weekNumbers]=\"dateInput.weekNumbers()\"\n [locale]=\"dateInput.effectiveLocale()\"\n (valueChange)=\"dateInput.selectDate($event)\"\n />\n </et-date-picker-panel>\n</ng-template>\n", styles: ["@layer components{et-date-input{display:flex;align-items:center;flex:1;min-inline-size:0;color:inherit}et-date-input .et-date-input-field{flex:1;min-inline-size:0;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);font-variant-numeric:tabular-nums}et-date-input .et-date-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-date-input .et-date-input-field:disabled{cursor:not-allowed}et-date-input[data-mixed] .et-date-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "component", type: CalendarComponent, selector: "et-calendar", inputs: ["weekNumbers", "previousMonthLabel", "nextMonthLabel"] }, { kind: "directive", type: DateInputFieldDirective, selector: "input[etDateInputField]", exportAs: ["etDateInputField"] }, { kind: "directive", type: DatePickerSurfaceDirective, selector: "ng-template[etDatePickerSurface]", exportAs: ["etDatePickerSurface"] }, { kind: "directive", type: DatePickerTriggerDirective, selector: "button[etDatePickerTrigger]", exportAs: ["etDatePickerTrigger"] }, { kind: "component", type: DatePickerPanelComponent, selector: "et-date-picker-panel", inputs: ["dialogLabel"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: InputMaskDirective, selector: "[etInputMask]", inputs: ["etInputMask", "maskValueMode", "placeholderChar"], exportAs: ["etInputMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
24143
24192
|
}
|
|
@@ -24286,8 +24335,8 @@ class DateRangePickerInputFieldDirective {
|
|
|
24286
24335
|
});
|
|
24287
24336
|
}
|
|
24288
24337
|
/** @internal */
|
|
24289
|
-
focus() {
|
|
24290
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
24338
|
+
focus(options) {
|
|
24339
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
24291
24340
|
}
|
|
24292
24341
|
/** @internal `InputMaskHost` - an attached mask owns value-sync; our input/mirror handling stands down. */
|
|
24293
24342
|
suppressNativeSync() {
|
|
@@ -24587,13 +24636,16 @@ class DateRangePickerInputDirective {
|
|
|
24587
24636
|
return side === 'start' ? this.startDate() : this.endDate();
|
|
24588
24637
|
}
|
|
24589
24638
|
activate() {
|
|
24639
|
+
this.focus();
|
|
24640
|
+
}
|
|
24641
|
+
focus(options) {
|
|
24590
24642
|
if (this.disabled()) {
|
|
24591
24643
|
return;
|
|
24592
24644
|
}
|
|
24593
24645
|
// the first empty side, else start - mirrors where the next interaction lands.
|
|
24594
24646
|
// While mixed both fields read as empty, so a fresh entry starts at the start side
|
|
24595
24647
|
const target = this.mixed() || this.value().start === null || this.value().end !== null ? 'start' : 'end';
|
|
24596
|
-
this.sides[target].field()?.focus();
|
|
24648
|
+
this.sides[target].field()?.focus(options);
|
|
24597
24649
|
}
|
|
24598
24650
|
openPicker() {
|
|
24599
24651
|
if (!this.interactive() || this.pickerOpen()) {
|
|
@@ -24934,6 +24986,9 @@ class DateRangeInputComponent {
|
|
|
24934
24986
|
event.stopPropagation();
|
|
24935
24987
|
this.rangeInput.clearRange();
|
|
24936
24988
|
}
|
|
24989
|
+
focus(options) {
|
|
24990
|
+
this.rangeInput.focus(options);
|
|
24991
|
+
}
|
|
24937
24992
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24938
24993
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DateRangeInputComponent, isStandalone: true, selector: "et-date-range-input", inputs: { startAriaLabel: { classPropertyName: "startAriaLabel", publicName: "startAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, endAriaLabel: { classPropertyName: "endAriaLabel", publicName: "endAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, pickerTriggerLabel: { classPropertyName: "pickerTriggerLabel", publicName: "pickerTriggerLabel", isSignal: true, isRequired: false, transformFunction: null }, dialogLabel: { classPropertyName: "dialogLabel", publicName: "dialogLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-labelledby": "rangeInput.labelId()" }, classAttribute: "et-date-range-input" }, providers: [provideIcons(CALENDAR_ICON, TIMES_ICON)], hostDirectives: [{ directive: DateRangeInputDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "startPlaceholder", "startPlaceholder", "endPlaceholder", "endPlaceholder", "parseErrorMessage", "parseErrorMessage", "valueFormat", "valueFormat", "displayFormat", "displayFormat", "locale", "locale", "mask", "mask", "minDate", "minDate", "maxDate", "maxDate", "dateFilter", "dateFilter", "startAt", "startAt", "precision", "precision", "startView", "startView", "dateClass", "dateClass", "weekNumbers", "weekNumbers", "rangeSelectionStrategy", "rangeSelectionStrategy", "comparisonStart", "comparisonStart", "comparisonEnd", "comparisonEnd", "pickerOpen", "pickerOpen"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "pickerOpenChange", "pickerOpenChange"] }], ngImport: i0, template: "<input\n [attr.aria-label]=\"resolvedStartAriaLabel()\"\n [etInputMask]=\"rangeInput.maskPattern()\"\n class=\"et-date-range-input-field\"\n etDateRangeInputField\n maskValueMode=\"masked\"\n placeholderChar=\"_\"\n side=\"start\"\n/>\n\n<span class=\"et-date-range-input-separator\" aria-hidden=\"true\">\u2013</span>\n\n<input\n [attr.aria-label]=\"resolvedEndAriaLabel()\"\n [etInputMask]=\"rangeInput.maskPattern()\"\n class=\"et-date-range-input-field\"\n etDateRangeInputField\n maskValueMode=\"masked\"\n placeholderChar=\"_\"\n side=\"end\"\n/>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear by erasing the text.\n mousedown is prevented so the field keeps focus (its blur would unmount this\n button before the click could land) -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n <i etIcon=\"et-calendar\"></i>\n </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n <et-calendar\n [rangeValue]=\"rangeInput.calendarRange()\"\n [min]=\"rangeInput.minDate()\"\n [max]=\"rangeInput.maxDate()\"\n [dateFilter]=\"rangeInput.dateFilter()\"\n [startAt]=\"rangeInput.startAt()\"\n [precision]=\"rangeInput.precision()\"\n [startView]=\"rangeInput.startView()\"\n [dateClass]=\"rangeInput.dateClass()\"\n [weekNumbers]=\"rangeInput.weekNumbers()\"\n [rangeSelectionStrategy]=\"rangeInput.rangeSelectionStrategy()\"\n [comparisonStart]=\"rangeInput.comparisonStart()\"\n [comparisonEnd]=\"rangeInput.comparisonEnd()\"\n [locale]=\"rangeInput.effectiveLocale()\"\n (rangeValueChange)=\"rangeInput.selectCalendarRange($event)\"\n mode=\"range\"\n />\n </et-date-picker-panel>\n</ng-template>\n", styles: ["@layer components{et-date-range-input{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;flex:1 1 auto;inline-size:13em;min-inline-size:0;container:et-date-range-input / inline-size;color:inherit}et-date-range-input .et-date-range-input-field{flex:1;min-inline-size:0;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);font-variant-numeric:tabular-nums}et-date-range-input .et-date-range-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-date-range-input .et-date-range-input-field:disabled{cursor:not-allowed}et-date-range-input[data-mixed] .et-date-range-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-date-range-input .et-date-range-input-separator{color:var(--et-surface-color-muted-solid, currentColor)}@container et-date-range-input (inline-size < 13em){et-date-range-input .et-date-range-input-field{flex-basis:100%}et-date-range-input .et-date-range-input-separator{display:none}}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "component", type: CalendarComponent, selector: "et-calendar", inputs: ["weekNumbers", "previousMonthLabel", "nextMonthLabel"] }, { kind: "directive", type: DateRangeInputFieldDirective, selector: "input[etDateRangeInputField]", exportAs: ["etDateRangeInputField"] }, { kind: "directive", type: DatePickerSurfaceDirective, selector: "ng-template[etDatePickerSurface]", exportAs: ["etDatePickerSurface"] }, { kind: "directive", type: DatePickerTriggerDirective, selector: "button[etDatePickerTrigger]", exportAs: ["etDatePickerTrigger"] }, { kind: "component", type: DatePickerPanelComponent, selector: "et-date-picker-panel", inputs: ["dialogLabel"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: InputMaskDirective, selector: "[etInputMask]", inputs: ["etInputMask", "maskValueMode", "placeholderChar"], exportAs: ["etInputMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
24939
24994
|
}
|
|
@@ -26182,8 +26237,19 @@ class SelectionListDirective {
|
|
|
26182
26237
|
markTouched() {
|
|
26183
26238
|
this.touched.set(true);
|
|
26184
26239
|
}
|
|
26185
|
-
focusItem(item) {
|
|
26186
|
-
item.elementRef.nativeElement.focus();
|
|
26240
|
+
focusItem(item, options) {
|
|
26241
|
+
item.elementRef.nativeElement.focus(options);
|
|
26242
|
+
}
|
|
26243
|
+
/** Mirrors the group's roving tabindex: the checked option, else the first enabled one. */
|
|
26244
|
+
focus(options) {
|
|
26245
|
+
if (this.disabled()) {
|
|
26246
|
+
return;
|
|
26247
|
+
}
|
|
26248
|
+
const items = this.selection.items();
|
|
26249
|
+
const target = items.find((item) => item.checked() && !item.disabled()) ?? items.find((item) => !item.disabled());
|
|
26250
|
+
if (target) {
|
|
26251
|
+
this.focusItem(target, options);
|
|
26252
|
+
}
|
|
26187
26253
|
}
|
|
26188
26254
|
activate() {
|
|
26189
26255
|
const firstItem = this.selection.items().find((i) => !i.disabled());
|
|
@@ -26379,6 +26445,7 @@ const SEGMENTED_BUTTON_GROUP_VARIANTS = {
|
|
|
26379
26445
|
};
|
|
26380
26446
|
class SegmentedButtonGroupComponent {
|
|
26381
26447
|
constructor() {
|
|
26448
|
+
this.list = inject(SelectionListDirective);
|
|
26382
26449
|
this.support = injectFormSupport();
|
|
26383
26450
|
this.size = input(FORM_FIELD_SIZES.MD, /* @ts-ignore */
|
|
26384
26451
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
@@ -26425,6 +26492,9 @@ class SegmentedButtonGroupComponent {
|
|
|
26425
26492
|
hintAnimatable: this.hintAnimatableRef,
|
|
26426
26493
|
});
|
|
26427
26494
|
}
|
|
26495
|
+
focus(options) {
|
|
26496
|
+
this.list.focus(options);
|
|
26497
|
+
}
|
|
26428
26498
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SegmentedButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26429
26499
|
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 }); }
|
|
26430
26500
|
}
|
|
@@ -27229,6 +27299,9 @@ class DateTimeInputComponent {
|
|
|
27229
27299
|
this.paneAdvanceSpent.set(true);
|
|
27230
27300
|
this.showPane(pane === 'time' ? 'time' : 'date');
|
|
27231
27301
|
}
|
|
27302
|
+
focus(options) {
|
|
27303
|
+
this.dateTimeInput.focus(options);
|
|
27304
|
+
}
|
|
27232
27305
|
showPane(next) {
|
|
27233
27306
|
if (next === this.activePane()) {
|
|
27234
27307
|
return;
|
|
@@ -27614,6 +27687,9 @@ class DateTimeRangeInputComponent {
|
|
|
27614
27687
|
this.paneAdvanceSpent.set(true);
|
|
27615
27688
|
this.showPane(PANE_ORDER.find((candidate) => candidate === pane) ?? 'dates');
|
|
27616
27689
|
}
|
|
27690
|
+
focus(options) {
|
|
27691
|
+
this.rangeInput.focus(options);
|
|
27692
|
+
}
|
|
27617
27693
|
showPane(next) {
|
|
27618
27694
|
const current = this.activePane();
|
|
27619
27695
|
if (next === current) {
|
|
@@ -27900,10 +27976,13 @@ class DurationInputDirective {
|
|
|
27900
27976
|
this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
27901
27977
|
}
|
|
27902
27978
|
activate() {
|
|
27979
|
+
this.focus();
|
|
27980
|
+
}
|
|
27981
|
+
focus(options) {
|
|
27903
27982
|
if (this.disabled()) {
|
|
27904
27983
|
return;
|
|
27905
27984
|
}
|
|
27906
|
-
this.registeredField()?.focus();
|
|
27985
|
+
this.registeredField()?.focus(options);
|
|
27907
27986
|
}
|
|
27908
27987
|
/** Clears the value and any uncommitted field text - wired to the styled input's clear button. */
|
|
27909
27988
|
clearValue() {
|
|
@@ -27996,8 +28075,8 @@ class DurationInputFieldDirective {
|
|
|
27996
28075
|
}
|
|
27997
28076
|
}
|
|
27998
28077
|
/** @internal */
|
|
27999
|
-
focus() {
|
|
28000
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
28078
|
+
focus(options) {
|
|
28079
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
28001
28080
|
}
|
|
28002
28081
|
handleInput() {
|
|
28003
28082
|
this.durationInput?.inputText.set(this.elementRef.nativeElement.value);
|
|
@@ -28077,6 +28156,9 @@ class DurationInputComponent {
|
|
|
28077
28156
|
event.stopPropagation();
|
|
28078
28157
|
this.durationInput.clearValue();
|
|
28079
28158
|
}
|
|
28159
|
+
focus(options) {
|
|
28160
|
+
this.durationInput.focus(options);
|
|
28161
|
+
}
|
|
28080
28162
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DurationInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28081
28163
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DurationInputComponent, isStandalone: true, selector: "et-duration-input", inputs: { clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "durationInput.activate()" }, classAttribute: "et-duration-input" }, providers: [provideIcons(TIMES_ICON)], hostDirectives: [{ directive: DurationInputDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "parseErrorMessage", "parseErrorMessage", "durationFormat", "durationFormat", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }], ngImport: i0, template: "<input class=\"et-duration-input-field\" etDurationInputField />\n\n@if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear by erasing the text.\n mousedown is prevented so the field keeps focus (its blur would unmount this\n button before the click could land) -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-duration-input-clear\"\n animate.enter=\"et-duration-input-clear--enter\"\n animate.leave=\"et-duration-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n}\n", styles: ["@layer components{et-duration-input{display:flex;align-items:center;gap:8px;flex:1;min-inline-size:0;color:inherit}et-duration-input .et-duration-input-field{flex:1;min-inline-size:0;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);font-variant-numeric:tabular-nums}et-duration-input .et-duration-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-duration-input .et-duration-input-field:disabled{cursor:not-allowed}et-duration-input[data-mixed] .et-duration-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-duration-input .et-duration-input-clear{display:inline-flex;align-items:center;justify-content:center;flex:none;border:none;background:transparent;color:var(--et-surface-color-muted-solid, currentColor);padding:0;margin:0;cursor:pointer;appearance:none}et-duration-input .et-duration-input-clear .et-icon{inline-size:16px;block-size:16px}@media(hover:hover){et-duration-input .et-duration-input-clear:hover{color:var(--et-surface-color-solid, currentColor)}}et-duration-input .et-duration-input-clear.et-duration-input-clear--enter{animation:et-duration-input-clear-in .15s ease}et-duration-input .et-duration-input-clear.et-duration-input-clear--leave{animation:et-duration-input-clear-out .12s ease forwards}@media(prefers-reduced-motion:reduce){et-duration-input .et-duration-input-clear.et-duration-input-clear--enter,et-duration-input .et-duration-input-clear.et-duration-input-clear--leave{animation:none}}@keyframes et-duration-input-clear-in{0%{opacity:0}}@keyframes et-duration-input-clear-out{to{opacity:0}}}\n"], dependencies: [{ kind: "directive", type: DurationInputFieldDirective, selector: "input[etDurationInputField]", exportAs: ["etDurationInputField"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
28082
28164
|
}
|
|
@@ -28320,6 +28402,9 @@ class TimeInputComponent {
|
|
|
28320
28402
|
event.stopPropagation();
|
|
28321
28403
|
this.timeInput.clearValue();
|
|
28322
28404
|
}
|
|
28405
|
+
focus(options) {
|
|
28406
|
+
this.timeInput.focus(options);
|
|
28407
|
+
}
|
|
28323
28408
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TimeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28324
28409
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: TimeInputComponent, isStandalone: true, selector: "et-time-input", inputs: { pickerTriggerLabel: { classPropertyName: "pickerTriggerLabel", publicName: "pickerTriggerLabel", isSignal: true, isRequired: false, transformFunction: null }, dialogLabel: { classPropertyName: "dialogLabel", publicName: "dialogLabel", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-time-input" }, providers: [provideIcons(CLOCK_ICON, TIMES_ICON)], hostDirectives: [{ directive: TimeInputDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "parseErrorMessage", "parseErrorMessage", "valueFormat", "valueFormat", "displayFormat", "displayFormat", "locale", "locale", "mask", "mask", "minTime", "minTime", "maxTime", "maxTime", "timeFilter", "timeFilter", "pickerOpen", "pickerOpen"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "pickerOpenChange", "pickerOpenChange"] }], ngImport: i0, template: "<input\n [etInputMask]=\"timeInput.maskPattern()\"\n class=\"et-time-input-field\"\n etTimeInputField\n maskValueMode=\"masked\"\n placeholderChar=\"_\"\n/>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear by erasing the text.\n mousedown is prevented so the field keeps focus (its blur would unmount this\n button before the click could land) -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n <i etIcon=\"et-clock\"></i>\n </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n <et-time-picker\n [value]=\"timeInput.time()\"\n [format]=\"timeInput.displayFormat()\"\n [locale]=\"timeInput.effectiveLocale()\"\n [minuteStep]=\"minuteStep()\"\n [secondStep]=\"secondStep()\"\n [min]=\"timeInput.minTime()\"\n [max]=\"timeInput.maxTime()\"\n [timeFilter]=\"timeInput.timeFilter()\"\n (valueChange)=\"timeInput.selectTime($event)\"\n />\n </et-date-picker-panel>\n</ng-template>\n", styles: ["@layer components{et-time-input{display:flex;align-items:center;flex:1;min-inline-size:0;color:inherit}et-time-input .et-time-input-field{flex:1;min-inline-size:0;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);font-variant-numeric:tabular-nums}et-time-input .et-time-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-time-input .et-time-input-field:disabled{cursor:not-allowed}et-time-input[data-mixed] .et-time-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "component", type: TimePickerComponent, selector: "et-time-picker" }, { kind: "directive", type: TimeInputFieldDirective, selector: "input[etTimeInputField]", exportAs: ["etTimeInputField"] }, { kind: "directive", type: DatePickerSurfaceDirective, selector: "ng-template[etDatePickerSurface]", exportAs: ["etDatePickerSurface"] }, { kind: "directive", type: DatePickerTriggerDirective, selector: "button[etDatePickerTrigger]", exportAs: ["etDatePickerTrigger"] }, { kind: "component", type: DatePickerPanelComponent, selector: "et-date-picker-panel", inputs: ["dialogLabel"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: InputMaskDirective, selector: "[etInputMask]", inputs: ["etInputMask", "maskValueMode", "placeholderChar"], exportAs: ["etInputMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
28325
28410
|
}
|
|
@@ -28530,6 +28615,9 @@ class TimeRangeInputComponent {
|
|
|
28530
28615
|
event.stopPropagation();
|
|
28531
28616
|
this.rangeInput.clearRange();
|
|
28532
28617
|
}
|
|
28618
|
+
focus(options) {
|
|
28619
|
+
this.rangeInput.focus(options);
|
|
28620
|
+
}
|
|
28533
28621
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TimeRangeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28534
28622
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: TimeRangeInputComponent, isStandalone: true, selector: "et-time-range-input", inputs: { startAriaLabel: { classPropertyName: "startAriaLabel", publicName: "startAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, endAriaLabel: { classPropertyName: "endAriaLabel", publicName: "endAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, pickerTriggerLabel: { classPropertyName: "pickerTriggerLabel", publicName: "pickerTriggerLabel", isSignal: true, isRequired: false, transformFunction: null }, dialogLabel: { classPropertyName: "dialogLabel", publicName: "dialogLabel", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, startTimeLabel: { classPropertyName: "startTimeLabel", publicName: "startTimeLabel", isSignal: true, isRequired: false, transformFunction: null }, endTimeLabel: { classPropertyName: "endTimeLabel", publicName: "endTimeLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-labelledby": "rangeInput.labelId()" }, classAttribute: "et-time-range-input" }, providers: [provideIcons(CLOCK_ICON, TIMES_ICON)], hostDirectives: [{ directive: TimeRangeInputDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "startPlaceholder", "startPlaceholder", "endPlaceholder", "endPlaceholder", "parseErrorMessage", "parseErrorMessage", "valueFormat", "valueFormat", "displayFormat", "displayFormat", "locale", "locale", "mask", "mask", "minTime", "minTime", "maxTime", "maxTime", "timeFilter", "timeFilter", "pickerOpen", "pickerOpen"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "pickerOpenChange", "pickerOpenChange"] }], ngImport: i0, template: "<input\n [attr.aria-label]=\"resolvedStartAriaLabel()\"\n [etInputMask]=\"rangeInput.maskPattern()\"\n class=\"et-time-range-input-field\"\n etTimeRangeInputField\n maskValueMode=\"masked\"\n placeholderChar=\"_\"\n side=\"start\"\n/>\n\n<span class=\"et-time-range-input-separator\" aria-hidden=\"true\">\u2013</span>\n\n<input\n [attr.aria-label]=\"resolvedEndAriaLabel()\"\n [etInputMask]=\"rangeInput.maskPattern()\"\n class=\"et-time-range-input-field\"\n etTimeRangeInputField\n maskValueMode=\"masked\"\n placeholderChar=\"_\"\n side=\"end\"\n/>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear by erasing the text.\n mousedown is prevented so the field keeps focus (its blur would unmount this\n button before the click could land) -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n <i etIcon=\"et-clock\"></i>\n </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n <et-time-picker\n [rangeValue]=\"rangeInput.calendarRange()\"\n [format]=\"rangeInput.effectiveDisplayFormat()\"\n [locale]=\"rangeInput.effectiveLocale()\"\n [minuteStep]=\"minuteStep()\"\n [secondStep]=\"secondStep()\"\n [min]=\"rangeInput.minTime()\"\n [max]=\"rangeInput.maxTime()\"\n [timeFilter]=\"rangeInput.timeFilter()\"\n [startLabel]=\"startTimeLabel()\"\n [endLabel]=\"endTimeLabel()\"\n (timeSelect)=\"rangeInput.selectTime($event.side, $event.time)\"\n mode=\"range\"\n />\n </et-date-picker-panel>\n</ng-template>\n", styles: ["@layer components{et-time-range-input{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;flex:1 1 auto;inline-size:11em;min-inline-size:0;container:et-time-range-input / inline-size;color:inherit}et-time-range-input .et-time-range-input-field{flex:1;min-inline-size:0;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);font-variant-numeric:tabular-nums}et-time-range-input .et-time-range-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-time-range-input .et-time-range-input-field:disabled{cursor:not-allowed}et-time-range-input[data-mixed] .et-time-range-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-time-range-input .et-time-range-input-separator{color:var(--et-surface-color-muted-solid, currentColor)}@container et-time-range-input (inline-size < 11em){et-time-range-input .et-time-range-input-field{flex-basis:100%}et-time-range-input .et-time-range-input-separator{display:none}}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "component", type: TimePickerComponent, selector: "et-time-picker" }, { kind: "directive", type: TimeRangeInputFieldDirective, selector: "input[etTimeRangeInputField]", exportAs: ["etTimeRangeInputField"] }, { kind: "directive", type: DatePickerSurfaceDirective, selector: "ng-template[etDatePickerSurface]", exportAs: ["etDatePickerSurface"] }, { kind: "directive", type: DatePickerTriggerDirective, selector: "button[etDatePickerTrigger]", exportAs: ["etDatePickerTrigger"] }, { kind: "component", type: DatePickerPanelComponent, selector: "et-date-picker-panel", inputs: ["dialogLabel"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: InputMaskDirective, selector: "[etInputMask]", inputs: ["etInputMask", "maskValueMode", "placeholderChar"], exportAs: ["etInputMask"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
28535
28623
|
}
|
|
@@ -28997,10 +29085,13 @@ class DropzoneDirective {
|
|
|
28997
29085
|
this.syncValue();
|
|
28998
29086
|
}
|
|
28999
29087
|
activate() {
|
|
29088
|
+
this.focus();
|
|
29089
|
+
}
|
|
29090
|
+
focus(options) {
|
|
29000
29091
|
if (this.disabled()) {
|
|
29001
29092
|
return;
|
|
29002
29093
|
}
|
|
29003
|
-
this.focusTarget()?.focus();
|
|
29094
|
+
this.focusTarget()?.focus(options);
|
|
29004
29095
|
}
|
|
29005
29096
|
handleDragEnter(event) {
|
|
29006
29097
|
if (this.disabled() || !event.dataTransfer?.types.includes('Files')) {
|
|
@@ -29313,6 +29404,9 @@ class DropzoneComponent {
|
|
|
29313
29404
|
}
|
|
29314
29405
|
});
|
|
29315
29406
|
}
|
|
29407
|
+
focus(options) {
|
|
29408
|
+
this.dropzoneDir.focus(options);
|
|
29409
|
+
}
|
|
29316
29410
|
defaultUploadErrorMessage(entry) {
|
|
29317
29411
|
const serverMessage = entry.errorMessage();
|
|
29318
29412
|
return serverMessage
|
|
@@ -29550,6 +29644,122 @@ const createV2DropzoneUpload = (config) => ({
|
|
|
29550
29644
|
deleteIncludesExisting: config.delete?.includeExisting ?? false,
|
|
29551
29645
|
});
|
|
29552
29646
|
|
|
29647
|
+
const isRendered = (element) => element.isConnected && element.getClientRects().length > 0;
|
|
29648
|
+
const firstRenderedInvalidBinding = (field) => {
|
|
29649
|
+
let first = null;
|
|
29650
|
+
for (const error of field().errorSummary()) {
|
|
29651
|
+
for (const binding of error.fieldTree().formFieldBindings()) {
|
|
29652
|
+
if (!isRendered(binding.element)) {
|
|
29653
|
+
continue;
|
|
29654
|
+
}
|
|
29655
|
+
const precedesFirst = !!first && (first.element.compareDocumentPosition(binding.element) & Node.DOCUMENT_POSITION_PRECEDING) !== 0;
|
|
29656
|
+
if (!first || precedesFirst) {
|
|
29657
|
+
first = binding;
|
|
29658
|
+
}
|
|
29659
|
+
}
|
|
29660
|
+
}
|
|
29661
|
+
return first;
|
|
29662
|
+
};
|
|
29663
|
+
/**
|
|
29664
|
+
* Scrolls the first invalid field of `field` into view and focuses its control - what an invalid
|
|
29665
|
+
* submit attempt should do, now that a submit button stays enabled while the form is invalid.
|
|
29666
|
+
*
|
|
29667
|
+
* "First" is the first field in DOM order, not in field-tree order, and fields that are not
|
|
29668
|
+
* currently rendered (a collapsed section, another wizard step) are skipped - so the user lands on
|
|
29669
|
+
* an error they can see and fix.
|
|
29670
|
+
*
|
|
29671
|
+
* `[etForm]` calls this on every failed submit. Call it directly from a hand-written submit handler
|
|
29672
|
+
* or a `submission.onInvalid` hook.
|
|
29673
|
+
*
|
|
29674
|
+
* @returns Whether a field was found. `false` means no rendered field owns any of the form's errors -
|
|
29675
|
+
* a form-level error, for instance.
|
|
29676
|
+
*/
|
|
29677
|
+
const focusFirstInvalidField = (field, options) => {
|
|
29678
|
+
const binding = firstRenderedInvalidBinding(field);
|
|
29679
|
+
if (!binding) {
|
|
29680
|
+
return false;
|
|
29681
|
+
}
|
|
29682
|
+
const element = binding.element;
|
|
29683
|
+
const ownerDocument = element.ownerDocument;
|
|
29684
|
+
const fieldShell = binding.injector.get(FORM_FIELD_TOKEN, null);
|
|
29685
|
+
(fieldShell?.element ?? element).scrollIntoView({
|
|
29686
|
+
block: options?.block ?? 'center',
|
|
29687
|
+
inline: 'nearest',
|
|
29688
|
+
behavior: options?.behavior ?? (matchesReducedMotion(element) ? 'auto' : 'smooth'),
|
|
29689
|
+
});
|
|
29690
|
+
if (options?.focus !== false) {
|
|
29691
|
+
const activeBefore = ownerDocument.activeElement;
|
|
29692
|
+
binding.focus({ preventScroll: true });
|
|
29693
|
+
// Angular falls back to focusing the `[formField]` element itself for a control that implements
|
|
29694
|
+
// no `focus()` - a no-op on a wrapper like `<et-input>`. Nothing moved and nothing was already
|
|
29695
|
+
// focused inside, so go looking for the focusable descendant ourselves.
|
|
29696
|
+
if (ownerDocument.activeElement === activeBefore && !element.contains(ownerDocument.activeElement)) {
|
|
29697
|
+
focusElement(isFocusable(element, ownerDocument) ? element : (getFocusableElements(element, ownerDocument)[0] ?? null));
|
|
29698
|
+
}
|
|
29699
|
+
}
|
|
29700
|
+
return true;
|
|
29701
|
+
};
|
|
29702
|
+
|
|
29703
|
+
/**
|
|
29704
|
+
* Wires a `<form>` to the signal form it edits: it submits through the form's own
|
|
29705
|
+
* `submission.action`, and a submit that does not pass validation scrolls the first invalid field
|
|
29706
|
+
* into view and focuses it.
|
|
29707
|
+
*
|
|
29708
|
+
* ```html
|
|
29709
|
+
* <form [etForm]="form">…</form>
|
|
29710
|
+
* ```
|
|
29711
|
+
*
|
|
29712
|
+
* The form declares what submitting means, so the template needs no handler and no
|
|
29713
|
+
* `$event.preventDefault()`:
|
|
29714
|
+
*
|
|
29715
|
+
* ```ts
|
|
29716
|
+
* protected form = form(this.model, mySchema, {
|
|
29717
|
+
* submission: { action: async (field) => save(field().value()) },
|
|
29718
|
+
* });
|
|
29719
|
+
* ```
|
|
29720
|
+
*
|
|
29721
|
+
* Leave the submit button enabled while the form is invalid. Submitting marks every field touched,
|
|
29722
|
+
* which is what makes the errors appear, and the first one is scrolled to - a disabled button
|
|
29723
|
+
* instead says "no" without ever saying why. Bind `[loading]="form().submitting()"` for the in-flight
|
|
29724
|
+
* state, and keep `disabled` for reasons that are not validity (a missing permission, data still
|
|
29725
|
+
* loading).
|
|
29726
|
+
*/
|
|
29727
|
+
class FormDirective {
|
|
29728
|
+
constructor() {
|
|
29729
|
+
this.destroyRef = inject(DestroyRef);
|
|
29730
|
+
this.field = input.required({ ...(ngDevMode ? { debugName: "field" } : /* istanbul ignore next */ {}), alias: 'etForm' });
|
|
29731
|
+
}
|
|
29732
|
+
handleSubmit(event) {
|
|
29733
|
+
event.preventDefault();
|
|
29734
|
+
const field = this.field();
|
|
29735
|
+
if (field().submitting()) {
|
|
29736
|
+
return;
|
|
29737
|
+
}
|
|
29738
|
+
from(submit(field))
|
|
29739
|
+
.pipe(tap((success) => {
|
|
29740
|
+
if (!success) {
|
|
29741
|
+
focusFirstInvalidField(field);
|
|
29742
|
+
}
|
|
29743
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
29744
|
+
.subscribe();
|
|
29745
|
+
}
|
|
29746
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: FormDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
29747
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: FormDirective, isStandalone: true, selector: "form[etForm]", inputs: { field: { classPropertyName: "field", publicName: "etForm", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "novalidate": "" }, listeners: { "submit": "handleSubmit($event)" } }, ngImport: i0 }); }
|
|
29748
|
+
}
|
|
29749
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: FormDirective, decorators: [{
|
|
29750
|
+
type: Directive,
|
|
29751
|
+
args: [{
|
|
29752
|
+
selector: 'form[etForm]',
|
|
29753
|
+
host: {
|
|
29754
|
+
novalidate: '',
|
|
29755
|
+
'(submit)': 'handleSubmit($event)',
|
|
29756
|
+
},
|
|
29757
|
+
}]
|
|
29758
|
+
}], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "etForm", required: true }] }] } });
|
|
29759
|
+
|
|
29760
|
+
/** `[etForm]` - submits a `<form>` through its signal form and lands the user on the first error. */
|
|
29761
|
+
const FORM_IMPORTS = [FormDirective];
|
|
29762
|
+
|
|
29553
29763
|
/**
|
|
29554
29764
|
* How a value's "length" is measured when the consumer doesn't say. Strings and array-likes cover
|
|
29555
29765
|
* every control that can meaningfully be counted (`et-input`/`et-textarea` and `et-tag-input`
|
|
@@ -29906,7 +30116,7 @@ class FormFieldComponent {
|
|
|
29906
30116
|
this.formFieldDir.activate();
|
|
29907
30117
|
}
|
|
29908
30118
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29909
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: FormFieldComponent, isStandalone: true, selector: "et-form-field", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null }, labelMode: { classPropertyName: "labelMode", publicName: "labelMode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "formFieldDir.isHidden() ? \"none\" : null", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-control-type": "formFieldDir.controlType()", "attr.data-error": "displaysError() || null", "attr.data-warning": "displaysWarning() || null", "attr.aria-busy": "isBusy() ? \"true\" : null", "attr.data-busy": "isBusy() || null", "attr.data-expanded": "formFieldDir.usesTextFieldShell() && formFieldDir.expanded() ? \"\" : null", "attr.data-focused": "formFieldDir.usesTextFieldShell() && formFieldDir.focused() ? \"\" : null", "attr.data-readonly": "formFieldDir.usesTextFieldShell() && formFieldDir.isReadonly() ? \"\" : null", "attr.data-disabled": "formFieldDir.usesTextFieldShell() && formFieldDir.isDisabled() ? \"\" : null", "attr.data-appearance": "formFieldDir.usesTextFieldShell() ? appearance() : null", "attr.data-fill": "formFieldDir.usesTextFieldShell() ? fill() : null", "attr.data-label-floated": "hasFloatingTextLabel() && formFieldDir.shouldFloatLabel() ? \"\" : null", "attr.data-has-label": "formFieldDir.registeredLabel() ? \"\" : null", "attr.data-label-mode": "formFieldDir.usesTextFieldShell() ? labelMode() : null", "attr.data-size": "formFieldDir.usesTextFieldShell() ? size() : null", "attr.data-text-shell": "formFieldDir.usesTextFieldShell() || null", "style.--_et-form-field-prefix-offset": "prefixOffset()" }, classAttribute: "et-form-field" }, viewQueries: [{ propertyName: "errorContent", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContent", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContent", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "counterContent", first: true, predicate: ["counterContent"], descendants: true, isSignal: true }, { propertyName: "controlFrame", first: true, predicate: ["controlFrame"], descendants: true, isSignal: true }, { propertyName: "prefixEl", first: true, predicate: ["prefixEl"], descendants: true, isSignal: true }, { propertyName: "errorAnimatable", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatable", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatable", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }, { directive: i1.ProvideSurfaceDirective, inputs: ["etProvideSurface", "surface"] }, { directive: i1.ColorInteractiveHasFocusDirective }], ngImport: i0, template: "<div class=\"et-form-field-shell\">\n <div #controlFrame (mousedown)=\"handleFramePointerDown($event)\" class=\"et-form-field-control-frame\">\n <div #prefixEl class=\"et-form-field-affix et-form-field-prefix\">\n <ng-content select=\"[etInputPrefix]\" />\n </div>\n\n <div class=\"et-form-field-control-area\">\n <div\n [class.et-form-field-label-area--floating]=\"hasFloatingTextLabel()\"\n [class.et-form-field-label-area--inline]=\"hasInlineLabel()\"\n class=\"et-form-field-label-area\"\n >\n <ng-content select=\"et-label\" />\n </div>\n\n <div class=\"et-form-field-control-slot\">\n <ng-content />\n </div>\n </div>\n\n <div class=\"et-form-field-affix et-form-field-suffix\">\n <!-- Before the consumer's suffix: a control's own clear / picker-trigger / reveal buttons hug\n the field they belong to, and nothing may come between them and it. -->\n @if (formFieldDir.registeredControlSuffix(); as controlSuffix) {\n <ng-template [ngTemplateOutlet]=\"controlSuffix.templateRef\" />\n }\n\n <ng-content select=\"[etInputSuffix]\" />\n\n <!-- After the consumer's own suffix, never instead of it \u2014 a pending async validator must not\n displace a clear button or a reveal toggle. -->\n @if (showBusySpinner()) {\n <et-spinner class=\"et-form-field-busy-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n }\n </div>\n </div>\n</div>\n\n@if (shouldRenderSupport()) {\n <div [style.block-size.px]=\"supportHeight()\" class=\"et-form-field-support\" etColorInteractiveExclude>\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\n [attr.aria-atomic]=\"errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!errorActive() ? 'true' : null\"\n [attr.aria-live]=\"errorActive() ? 'polite' : null\"\n [attr.data-active]=\"errorActive() || null\"\n [attr.data-direction]=\"errorDirection()\"\n [attr.data-state]=\"errorState()\"\n [etProvideColor]=\"errorColorTheme\"\n class=\"et-form-field-support-content et-form-field-errors\"\n etAnimatable\n >\n @for (error of visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.warningId()\"\n [attr.aria-atomic]=\"warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!warningActive() ? 'true' : null\"\n [attr.aria-live]=\"warningActive() ? 'polite' : null\"\n [attr.data-active]=\"warningActive() || null\"\n [attr.data-direction]=\"warningDirection()\"\n [attr.data-state]=\"warningState()\"\n [etProvideColor]=\"warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-warnings\"\n etAnimatable\n >\n @for (warning of visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!hintActive() ? 'true' : null\"\n [attr.data-active]=\"hintActive() || null\"\n [attr.data-direction]=\"hintDirection()\"\n [attr.data-state]=\"hintState()\"\n class=\"et-form-field-support-content et-form-field-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n\n <!-- Persistent, and outside the swapping stack: a reader who just crossed the limit needs the\n error and the count that caused it at the same time. Carries the error theme so the counter's\n own over-limit styling can reach the semantic error color even before the field shows an\n error (an untouched field is not yet in its error state). -->\n <div\n #counterContent\n [etProvideColor]=\"errorColorTheme\"\n [hidden]=\"!formFieldDir.registeredCounter()\"\n class=\"et-form-field-support-counter\"\n >\n <ng-content select=\"et-counter\" />\n </div>\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-form-field-gap{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-width{syntax: \"<length>\"; inherits: true; initial-value: 1px;}@property --et-form-field-control-padding-block{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-control-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-control-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-control-line-height{syntax: \"<number>\"; inherits: true; initial-value: 1.5;}@property --et-form-field-control-affix-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-affix-icon-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-form-field-control-disabled-opacity{syntax: \"<number>\"; inherits: true; initial-value: .5;}@property --et-form-field-control-min-height{syntax: \"<length>\"; inherits: true; initial-value: 40px;}@property --et-form-field-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-form-field-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-form-field{--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--_et-form-field-control-background: transparent;--_et-form-field-control-focus-ring: color-mix(in srgb, var(--et-theme-color-primary-solid) 18%, transparent);--_et-form-field-floating-label-scale: .75;--_et-form-field-suffix-fade: 24px;display:flex;flex-direction:column;gap:var(--et-form-field-gap);color:var(--et-surface-color-solid, currentColor)}et-form-field .et-form-field-shell{display:flex;flex-direction:column;gap:var(--et-form-field-gap);min-inline-size:0;overflow:visible}et-form-field .et-form-field-label-area{display:flex;align-items:center;font-size:var(--et-form-field-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);cursor:text;-webkit-user-select:none;user-select:none;min-inline-size:0;transition:color .15s ease,opacity .15s ease}et-form-field .et-form-field-label-area et-label{display:inline;min-inline-size:0}et-form-field .et-form-field-label-area--floating{position:absolute;inset-block-start:50%;inset-inline-start:0;z-index:1;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transform:translateY(-50%);transform-origin:left top;pointer-events:none}et-form-field[data-can-animate] .et-form-field-label-area--floating{transition:color .15s ease,opacity .15s ease,inset-block-start .15s ease,inset-inline-start .15s ease,transform .15s ease}et-form-field .et-form-field-control-frame{position:relative;display:flex;align-items:center;box-sizing:border-box;gap:var(--et-form-field-control-affix-gap);min-inline-size:0;min-block-size:var(--et-form-field-control-min-height);padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);border:var(--et-form-field-control-border-width) solid var(--et-surface-border-solid, currentColor);border-radius:var(--et-form-field-control-border-radius);background:var(--_et-form-field-control-background);font-size:var(--et-form-field-control-font-size);line-height:var(--et-form-field-control-line-height);transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,opacity .15s ease;cursor:text}et-form-field .et-form-field-affix{display:flex;align-items:center;justify-content:center;flex-shrink:0;gap:var(--et-form-field-control-affix-gap);color:var(--et-surface-color-muted-solid, currentColor);pointer-events:none;transition:color .15s ease}et-form-field .et-form-field-affix:empty{display:none}et-form-field .et-form-field-affix>*{pointer-events:none}et-form-field .et-form-field-affix>:is([etInputPrefix],[etInputSuffix],.et-form-field-busy-spinner){opacity:.78;transition:opacity .15s ease}et-form-field .et-form-field-affix>.et-icon{flex:none;inline-size:var(--et-form-field-affix-icon-size);block-size:var(--et-form-field-affix-icon-size)}et-form-field .et-form-field-affix>:is(button,a[href],input,select,textarea,summary,label,[role=button],[tabindex]:not([tabindex=\"-1\"])){pointer-events:auto}et-form-field .et-form-field-affix button{font:inherit;color:inherit;border:none;background:transparent;padding:0;cursor:pointer}et-form-field .et-form-field-control-area{position:relative;display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-control-area>*{min-inline-size:0}et-form-field .et-form-field-control-slot{display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-support{overflow:clip;block-size:0}et-form-field .et-form-field-busy-spinner{flex:none;color:var(--et-surface-color-muted-solid, currentColor)}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)){--_et-form-field-suffix-overlap: calc( var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap) )}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)) .et-form-field-control-slot :is(input,textarea):last-of-type:is(:focus,[data-text-align=end],[data-text-align=center]){padding-inline-end:calc(var(--_et-form-field-suffix-overlap) + var(--_et-form-field-suffix-fade))}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>.et-input-clear):has(>.et-form-field-suffix>.et-form-field-busy-spinner){--_et-form-field-suffix-overlap: calc( 2 * (var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap)) )}et-form-field .et-form-field-suffix:is(:has(>.et-input-clear),:has(>.et-form-field-busy-spinner)){position:relative;z-index:1;align-self:stretch;padding-inline-start:var(--_et-form-field-suffix-fade);margin-inline-start:calc(-1 * (var(--_et-form-field-suffix-fade) + var(--_et-form-field-suffix-overlap)));background:linear-gradient(to right,transparent,var(--et-surface-background-solid, transparent) var(--_et-form-field-suffix-fade))}et-form-field .et-form-field-support-row{display:flex;align-items:flex-start;gap:var(--et-form-field-support-gap, .8rem)}et-form-field .et-form-field-support-stack{position:relative;display:grid;flex:1 1 auto;min-inline-size:0}et-form-field .et-form-field-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-form-field .et-form-field-support-content[data-active]{opacity:1;transform:translateY(0)}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-above]{position:absolute;inset:0;opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1));pointer-events:none}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-below]{position:absolute;inset:0;opacity:0;transform:translateY(var(--et-form-field-support-offset));pointer-events:none}et-form-field .et-form-field-errors{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-error-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field .et-form-field-warnings{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-warning-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field[data-can-animate] .et-form-field-support{transition:block-size var(--et-form-field-support-duration) ease}et-form-field[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease,transform var(--et-form-field-support-duration) ease}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-above]{opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1))}}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-below]{opacity:0;transform:translateY(var(--et-form-field-support-offset))}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms;--et-form-field-support-offset: 0px}}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "directive", type: ColorInteractiveExcludeDirective, selector: "[etColorInteractiveExclude]" }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30119
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: FormFieldComponent, isStandalone: true, selector: "et-form-field", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null }, labelMode: { classPropertyName: "labelMode", publicName: "labelMode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "formFieldDir.isHidden() ? \"none\" : null", "attr.data-can-animate": "canAnimate.state() || null", "attr.data-control-type": "formFieldDir.controlType()", "attr.data-error": "displaysError() || null", "attr.data-warning": "displaysWarning() || null", "attr.aria-busy": "isBusy() ? \"true\" : null", "attr.data-busy": "isBusy() || null", "attr.data-expanded": "formFieldDir.usesTextFieldShell() && formFieldDir.expanded() ? \"\" : null", "attr.data-focused": "formFieldDir.usesTextFieldShell() && formFieldDir.focused() ? \"\" : null", "attr.data-readonly": "formFieldDir.usesTextFieldShell() && formFieldDir.isReadonly() ? \"\" : null", "attr.data-disabled": "formFieldDir.usesTextFieldShell() && formFieldDir.isDisabled() ? \"\" : null", "attr.data-appearance": "formFieldDir.usesTextFieldShell() ? appearance() : null", "attr.data-fill": "formFieldDir.usesTextFieldShell() ? fill() : null", "attr.data-label-floated": "hasFloatingTextLabel() && formFieldDir.shouldFloatLabel() ? \"\" : null", "attr.data-has-label": "formFieldDir.registeredLabel() ? \"\" : null", "attr.data-label-mode": "formFieldDir.usesTextFieldShell() ? labelMode() : null", "attr.data-size": "formFieldDir.usesTextFieldShell() ? size() : null", "attr.data-text-shell": "formFieldDir.usesTextFieldShell() || null", "style.--_et-form-field-prefix-offset": "prefixOffset()" }, classAttribute: "et-form-field" }, viewQueries: [{ propertyName: "errorContent", first: true, predicate: ["errorContent"], descendants: true, isSignal: true }, { propertyName: "warningContent", first: true, predicate: ["warningContent"], descendants: true, isSignal: true }, { propertyName: "hintContent", first: true, predicate: ["hintContent"], descendants: true, isSignal: true }, { propertyName: "counterContent", first: true, predicate: ["counterContent"], descendants: true, isSignal: true }, { propertyName: "controlFrame", first: true, predicate: ["controlFrame"], descendants: true, isSignal: true }, { propertyName: "prefixEl", first: true, predicate: ["prefixEl"], descendants: true, isSignal: true }, { propertyName: "errorAnimatable", first: true, predicate: ["errorAnimatable"], descendants: true, isSignal: true }, { propertyName: "warningAnimatable", first: true, predicate: ["warningAnimatable"], descendants: true, isSignal: true }, { propertyName: "hintAnimatable", first: true, predicate: ["hintAnimatable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: FormFieldDirective }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }, { directive: i1.ProvideSurfaceDirective, inputs: ["etProvideSurface", "surface"] }, { directive: i1.ColorInteractiveHasFocusDirective }], ngImport: i0, template: "<div class=\"et-form-field-shell\">\n <div #controlFrame (mousedown)=\"handleFramePointerDown($event)\" class=\"et-form-field-control-frame\">\n <div #prefixEl class=\"et-form-field-affix et-form-field-prefix\">\n <ng-content select=\"[etInputPrefix]\" />\n </div>\n\n <div class=\"et-form-field-control-area\">\n <div\n [class.et-form-field-label-area--floating]=\"hasFloatingTextLabel()\"\n [class.et-form-field-label-area--inline]=\"hasInlineLabel()\"\n class=\"et-form-field-label-area\"\n >\n <ng-content select=\"et-label\" />\n </div>\n\n <div class=\"et-form-field-control-slot\">\n <ng-content />\n </div>\n </div>\n\n <div class=\"et-form-field-affix et-form-field-suffix\">\n <!-- Before the consumer's suffix: a control's own clear / picker-trigger / reveal buttons hug\n the field they belong to, and nothing may come between them and it. -->\n @if (formFieldDir.registeredControlSuffix(); as controlSuffix) {\n <ng-template [ngTemplateOutlet]=\"controlSuffix.templateRef\" />\n }\n\n <ng-content select=\"[etInputSuffix]\" />\n\n <!-- After the consumer's own suffix, never instead of it \u2014 a pending async validator must not\n displace a clear button or a reveal toggle. -->\n @if (showBusySpinner()) {\n <et-spinner class=\"et-form-field-busy-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n }\n </div>\n </div>\n</div>\n\n@if (shouldRenderSupport()) {\n <div [style.block-size.px]=\"supportHeight()\" class=\"et-form-field-support\" etColorInteractiveExclude>\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\n [attr.aria-atomic]=\"errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!errorActive() ? 'true' : null\"\n [attr.aria-live]=\"errorActive() ? 'polite' : null\"\n [attr.data-active]=\"errorActive() || null\"\n [attr.data-direction]=\"errorDirection()\"\n [attr.data-state]=\"errorState()\"\n [etProvideColor]=\"errorColorTheme\"\n class=\"et-form-field-support-content et-form-field-errors\"\n etAnimatable\n >\n @for (error of visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.warningId()\"\n [attr.aria-atomic]=\"warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!warningActive() ? 'true' : null\"\n [attr.aria-live]=\"warningActive() ? 'polite' : null\"\n [attr.data-active]=\"warningActive() || null\"\n [attr.data-direction]=\"warningDirection()\"\n [attr.data-state]=\"warningState()\"\n [etProvideColor]=\"warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-warnings\"\n etAnimatable\n >\n @for (warning of visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!hintActive() ? 'true' : null\"\n [attr.data-active]=\"hintActive() || null\"\n [attr.data-direction]=\"hintDirection()\"\n [attr.data-state]=\"hintState()\"\n class=\"et-form-field-support-content et-form-field-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n\n <!-- Persistent, and outside the swapping stack: a reader who just crossed the limit needs the\n error and the count that caused it at the same time. Carries the error theme so the counter's\n own over-limit styling can reach the semantic error color even before the field shows an\n error (an untouched field is not yet in its error state). -->\n <div\n #counterContent\n [etProvideColor]=\"errorColorTheme\"\n [hidden]=\"!formFieldDir.registeredCounter()\"\n class=\"et-form-field-support-counter\"\n >\n <ng-content select=\"et-counter\" />\n </div>\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-form-field-gap{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-width{syntax: \"<length>\"; inherits: true; initial-value: 1px;}@property --et-form-field-control-padding-block{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-control-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-control-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-control-line-height{syntax: \"<number>\"; inherits: true; initial-value: 1.5;}@property --et-form-field-control-affix-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-affix-icon-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-form-field-control-disabled-opacity{syntax: \"<number>\"; inherits: true; initial-value: .5;}@property --et-form-field-control-min-height{syntax: \"<length>\"; inherits: true; initial-value: 40px;}@property --et-form-field-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-form-field-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-form-field{--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--_et-form-field-control-background: transparent;--_et-form-field-control-focus-ring: color-mix(in srgb, var(--et-theme-color-primary-solid) 18%, transparent);--_et-form-field-floating-label-scale: .75;--_et-form-field-suffix-fade: 24px;display:flex;flex-direction:column;gap:var(--et-form-field-gap);color:var(--et-surface-color-solid, currentColor)}et-form-field .et-form-field-shell{display:flex;flex-direction:column;gap:var(--et-form-field-gap);min-inline-size:0;overflow:visible}et-form-field .et-form-field-label-area{display:flex;align-items:center;font-size:var(--et-form-field-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);cursor:text;-webkit-user-select:none;user-select:none;min-inline-size:0;transition:color .15s ease,opacity .15s ease}et-form-field .et-form-field-label-area et-label{display:inline;min-inline-size:0}et-form-field .et-form-field-label-area--floating{position:absolute;inset-block-start:50%;inset-inline-start:0;z-index:1;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transform:translateY(-50%);transform-origin:left top;pointer-events:none}et-form-field[data-can-animate] .et-form-field-label-area--floating{transition:color .15s ease,opacity .15s ease,inset-block-start .15s ease,inset-inline-start .15s ease,transform .15s ease}et-form-field .et-form-field-control-frame{position:relative;display:flex;align-items:center;box-sizing:border-box;gap:var(--et-form-field-control-affix-gap);min-inline-size:0;min-block-size:var(--et-form-field-control-min-height);padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);border:var(--et-form-field-control-border-width) solid var(--et-surface-border-solid, currentColor);border-radius:var(--et-form-field-control-border-radius);background:var(--_et-form-field-control-background);font-size:var(--et-form-field-control-font-size);line-height:var(--et-form-field-control-line-height);transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,opacity .15s ease;cursor:text}et-form-field .et-form-field-affix{display:flex;align-items:center;justify-content:center;flex-shrink:0;gap:var(--et-form-field-control-affix-gap);color:var(--et-surface-color-muted-solid, currentColor);pointer-events:none;transition:color .15s ease}et-form-field .et-form-field-affix:empty{display:none}et-form-field .et-form-field-affix>*{pointer-events:none}et-form-field .et-form-field-affix>:is([etInputPrefix],[etInputSuffix],.et-form-field-busy-spinner){opacity:.78;transition:opacity .15s ease}et-form-field .et-form-field-affix>.et-icon{flex:none;inline-size:var(--et-form-field-affix-icon-size);block-size:var(--et-form-field-affix-icon-size)}et-form-field .et-form-field-affix>:is(button,a[href],input,select,textarea,summary,label,[role=button],[tabindex]:not([tabindex=\"-1\"])){pointer-events:auto}et-form-field .et-form-field-affix button{font:inherit;color:inherit;border:none;background:transparent;padding:0;cursor:pointer}et-form-field .et-form-field-control-area{position:relative;display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-control-area>*{min-inline-size:0}et-form-field .et-form-field-control-slot{display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-support{overflow:clip;block-size:0}et-form-field .et-form-field-busy-spinner{flex:none;color:var(--et-surface-color-muted-solid, currentColor)}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)){--_et-form-field-suffix-overlap: calc( var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap) );--_et-form-field-suffix-cover: calc( var(--_et-form-field-suffix-overlap) - var(--et-form-field-control-affix-gap) );--_et-form-field-suffix-mask-direction: to right}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)):dir(rtl){--_et-form-field-suffix-mask-direction: to left}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)) .et-form-field-control-slot{-webkit-mask-image:linear-gradient(var(--_et-form-field-suffix-mask-direction),black calc(100% - var(--_et-form-field-suffix-cover) - var(--_et-form-field-suffix-fade)),transparent calc(100% - var(--_et-form-field-suffix-cover)));mask-image:linear-gradient(var(--_et-form-field-suffix-mask-direction),black calc(100% - var(--_et-form-field-suffix-cover) - var(--_et-form-field-suffix-fade)),transparent calc(100% - var(--_et-form-field-suffix-cover)))}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)) .et-form-field-control-slot :is(input,textarea):last-of-type:is(:focus,[data-text-align=end],[data-text-align=center]){padding-inline-end:calc(var(--_et-form-field-suffix-overlap) + var(--_et-form-field-suffix-fade))}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>.et-input-clear):has(>.et-form-field-suffix>.et-form-field-busy-spinner){--_et-form-field-suffix-overlap: calc( 2 * (var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap)) )}et-form-field .et-form-field-suffix:is(:has(>.et-input-clear),:has(>.et-form-field-busy-spinner)){position:relative;z-index:1;align-self:stretch;padding-inline-start:var(--_et-form-field-suffix-fade);margin-inline-start:calc(-1 * (var(--_et-form-field-suffix-fade) + var(--_et-form-field-suffix-overlap)))}et-form-field .et-form-field-support-row{display:flex;align-items:flex-start;gap:var(--et-form-field-support-gap, .8rem)}et-form-field .et-form-field-support-stack{position:relative;display:grid;flex:1 1 auto;min-inline-size:0}et-form-field .et-form-field-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-form-field .et-form-field-support-content[data-active]{opacity:1;transform:translateY(0)}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-above]{position:absolute;inset:0;opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1));pointer-events:none}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-below]{position:absolute;inset:0;opacity:0;transform:translateY(var(--et-form-field-support-offset));pointer-events:none}et-form-field .et-form-field-errors{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-error-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field .et-form-field-warnings{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-warning-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field[data-can-animate] .et-form-field-support{transition:block-size var(--et-form-field-support-duration) ease}et-form-field[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease,transform var(--et-form-field-support-duration) ease}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-above]{opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1))}}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-below]{opacity:0;transform:translateY(var(--et-form-field-support-offset))}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms;--et-form-field-support-offset: 0px}}}\n"], dependencies: [{ kind: "directive", type: AnimatableDirective, selector: "[etAnimatable]", exportAs: ["etAnimatable"] }, { kind: "directive", type: ColorInteractiveExcludeDirective, selector: "[etColorInteractiveExclude]" }, { kind: "component", type: FormErrorComponent, selector: "et-form-error", inputs: ["error"] }, { kind: "component", type: FormWarningComponent, selector: "et-form-warning", inputs: ["warning"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
29910
30120
|
}
|
|
29911
30121
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
29912
30122
|
type: Component,
|
|
@@ -29949,7 +30159,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
29949
30159
|
'[attr.data-size]': 'formFieldDir.usesTextFieldShell() ? size() : null',
|
|
29950
30160
|
'[attr.data-text-shell]': 'formFieldDir.usesTextFieldShell() || null',
|
|
29951
30161
|
'[style.--_et-form-field-prefix-offset]': 'prefixOffset()',
|
|
29952
|
-
}, template: "<div class=\"et-form-field-shell\">\n <div #controlFrame (mousedown)=\"handleFramePointerDown($event)\" class=\"et-form-field-control-frame\">\n <div #prefixEl class=\"et-form-field-affix et-form-field-prefix\">\n <ng-content select=\"[etInputPrefix]\" />\n </div>\n\n <div class=\"et-form-field-control-area\">\n <div\n [class.et-form-field-label-area--floating]=\"hasFloatingTextLabel()\"\n [class.et-form-field-label-area--inline]=\"hasInlineLabel()\"\n class=\"et-form-field-label-area\"\n >\n <ng-content select=\"et-label\" />\n </div>\n\n <div class=\"et-form-field-control-slot\">\n <ng-content />\n </div>\n </div>\n\n <div class=\"et-form-field-affix et-form-field-suffix\">\n <!-- Before the consumer's suffix: a control's own clear / picker-trigger / reveal buttons hug\n the field they belong to, and nothing may come between them and it. -->\n @if (formFieldDir.registeredControlSuffix(); as controlSuffix) {\n <ng-template [ngTemplateOutlet]=\"controlSuffix.templateRef\" />\n }\n\n <ng-content select=\"[etInputSuffix]\" />\n\n <!-- After the consumer's own suffix, never instead of it \u2014 a pending async validator must not\n displace a clear button or a reveal toggle. -->\n @if (showBusySpinner()) {\n <et-spinner class=\"et-form-field-busy-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n }\n </div>\n </div>\n</div>\n\n@if (shouldRenderSupport()) {\n <div [style.block-size.px]=\"supportHeight()\" class=\"et-form-field-support\" etColorInteractiveExclude>\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\n [attr.aria-atomic]=\"errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!errorActive() ? 'true' : null\"\n [attr.aria-live]=\"errorActive() ? 'polite' : null\"\n [attr.data-active]=\"errorActive() || null\"\n [attr.data-direction]=\"errorDirection()\"\n [attr.data-state]=\"errorState()\"\n [etProvideColor]=\"errorColorTheme\"\n class=\"et-form-field-support-content et-form-field-errors\"\n etAnimatable\n >\n @for (error of visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.warningId()\"\n [attr.aria-atomic]=\"warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!warningActive() ? 'true' : null\"\n [attr.aria-live]=\"warningActive() ? 'polite' : null\"\n [attr.data-active]=\"warningActive() || null\"\n [attr.data-direction]=\"warningDirection()\"\n [attr.data-state]=\"warningState()\"\n [etProvideColor]=\"warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-warnings\"\n etAnimatable\n >\n @for (warning of visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!hintActive() ? 'true' : null\"\n [attr.data-active]=\"hintActive() || null\"\n [attr.data-direction]=\"hintDirection()\"\n [attr.data-state]=\"hintState()\"\n class=\"et-form-field-support-content et-form-field-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n\n <!-- Persistent, and outside the swapping stack: a reader who just crossed the limit needs the\n error and the count that caused it at the same time. Carries the error theme so the counter's\n own over-limit styling can reach the semantic error color even before the field shows an\n error (an untouched field is not yet in its error state). -->\n <div\n #counterContent\n [etProvideColor]=\"errorColorTheme\"\n [hidden]=\"!formFieldDir.registeredCounter()\"\n class=\"et-form-field-support-counter\"\n >\n <ng-content select=\"et-counter\" />\n </div>\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-form-field-gap{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-width{syntax: \"<length>\"; inherits: true; initial-value: 1px;}@property --et-form-field-control-padding-block{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-control-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-control-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-control-line-height{syntax: \"<number>\"; inherits: true; initial-value: 1.5;}@property --et-form-field-control-affix-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-affix-icon-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-form-field-control-disabled-opacity{syntax: \"<number>\"; inherits: true; initial-value: .5;}@property --et-form-field-control-min-height{syntax: \"<length>\"; inherits: true; initial-value: 40px;}@property --et-form-field-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-form-field-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-form-field{--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--_et-form-field-control-background: transparent;--_et-form-field-control-focus-ring: color-mix(in srgb, var(--et-theme-color-primary-solid) 18%, transparent);--_et-form-field-floating-label-scale: .75;--_et-form-field-suffix-fade: 24px;display:flex;flex-direction:column;gap:var(--et-form-field-gap);color:var(--et-surface-color-solid, currentColor)}et-form-field .et-form-field-shell{display:flex;flex-direction:column;gap:var(--et-form-field-gap);min-inline-size:0;overflow:visible}et-form-field .et-form-field-label-area{display:flex;align-items:center;font-size:var(--et-form-field-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);cursor:text;-webkit-user-select:none;user-select:none;min-inline-size:0;transition:color .15s ease,opacity .15s ease}et-form-field .et-form-field-label-area et-label{display:inline;min-inline-size:0}et-form-field .et-form-field-label-area--floating{position:absolute;inset-block-start:50%;inset-inline-start:0;z-index:1;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transform:translateY(-50%);transform-origin:left top;pointer-events:none}et-form-field[data-can-animate] .et-form-field-label-area--floating{transition:color .15s ease,opacity .15s ease,inset-block-start .15s ease,inset-inline-start .15s ease,transform .15s ease}et-form-field .et-form-field-control-frame{position:relative;display:flex;align-items:center;box-sizing:border-box;gap:var(--et-form-field-control-affix-gap);min-inline-size:0;min-block-size:var(--et-form-field-control-min-height);padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);border:var(--et-form-field-control-border-width) solid var(--et-surface-border-solid, currentColor);border-radius:var(--et-form-field-control-border-radius);background:var(--_et-form-field-control-background);font-size:var(--et-form-field-control-font-size);line-height:var(--et-form-field-control-line-height);transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,opacity .15s ease;cursor:text}et-form-field .et-form-field-affix{display:flex;align-items:center;justify-content:center;flex-shrink:0;gap:var(--et-form-field-control-affix-gap);color:var(--et-surface-color-muted-solid, currentColor);pointer-events:none;transition:color .15s ease}et-form-field .et-form-field-affix:empty{display:none}et-form-field .et-form-field-affix>*{pointer-events:none}et-form-field .et-form-field-affix>:is([etInputPrefix],[etInputSuffix],.et-form-field-busy-spinner){opacity:.78;transition:opacity .15s ease}et-form-field .et-form-field-affix>.et-icon{flex:none;inline-size:var(--et-form-field-affix-icon-size);block-size:var(--et-form-field-affix-icon-size)}et-form-field .et-form-field-affix>:is(button,a[href],input,select,textarea,summary,label,[role=button],[tabindex]:not([tabindex=\"-1\"])){pointer-events:auto}et-form-field .et-form-field-affix button{font:inherit;color:inherit;border:none;background:transparent;padding:0;cursor:pointer}et-form-field .et-form-field-control-area{position:relative;display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-control-area>*{min-inline-size:0}et-form-field .et-form-field-control-slot{display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-support{overflow:clip;block-size:0}et-form-field .et-form-field-busy-spinner{flex:none;color:var(--et-surface-color-muted-solid, currentColor)}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)){--_et-form-field-suffix-overlap: calc( var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap) )}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)) .et-form-field-control-slot :is(input,textarea):last-of-type:is(:focus,[data-text-align=end],[data-text-align=center]){padding-inline-end:calc(var(--_et-form-field-suffix-overlap) + var(--_et-form-field-suffix-fade))}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>.et-input-clear):has(>.et-form-field-suffix>.et-form-field-busy-spinner){--_et-form-field-suffix-overlap: calc( 2 * (var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap)) )}et-form-field .et-form-field-suffix:is(:has(>.et-input-clear),:has(>.et-form-field-busy-spinner)){position:relative;z-index:1;align-self:stretch;padding-inline-start:var(--_et-form-field-suffix-fade);margin-inline-start:calc(-1 * (var(--_et-form-field-suffix-fade) + var(--_et-form-field-suffix-overlap)));background:linear-gradient(to right,transparent,var(--et-surface-background-solid, transparent) var(--_et-form-field-suffix-fade))}et-form-field .et-form-field-support-row{display:flex;align-items:flex-start;gap:var(--et-form-field-support-gap, .8rem)}et-form-field .et-form-field-support-stack{position:relative;display:grid;flex:1 1 auto;min-inline-size:0}et-form-field .et-form-field-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-form-field .et-form-field-support-content[data-active]{opacity:1;transform:translateY(0)}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-above]{position:absolute;inset:0;opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1));pointer-events:none}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-below]{position:absolute;inset:0;opacity:0;transform:translateY(var(--et-form-field-support-offset));pointer-events:none}et-form-field .et-form-field-errors{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-error-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field .et-form-field-warnings{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-warning-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field[data-can-animate] .et-form-field-support{transition:block-size var(--et-form-field-support-duration) ease}et-form-field[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease,transform var(--et-form-field-support-duration) ease}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-above]{opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1))}}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-below]{opacity:0;transform:translateY(var(--et-form-field-support-offset))}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms;--et-form-field-support-offset: 0px}}}\n"] }]
|
|
30162
|
+
}, template: "<div class=\"et-form-field-shell\">\n <div #controlFrame (mousedown)=\"handleFramePointerDown($event)\" class=\"et-form-field-control-frame\">\n <div #prefixEl class=\"et-form-field-affix et-form-field-prefix\">\n <ng-content select=\"[etInputPrefix]\" />\n </div>\n\n <div class=\"et-form-field-control-area\">\n <div\n [class.et-form-field-label-area--floating]=\"hasFloatingTextLabel()\"\n [class.et-form-field-label-area--inline]=\"hasInlineLabel()\"\n class=\"et-form-field-label-area\"\n >\n <ng-content select=\"et-label\" />\n </div>\n\n <div class=\"et-form-field-control-slot\">\n <ng-content />\n </div>\n </div>\n\n <div class=\"et-form-field-affix et-form-field-suffix\">\n <!-- Before the consumer's suffix: a control's own clear / picker-trigger / reveal buttons hug\n the field they belong to, and nothing may come between them and it. -->\n @if (formFieldDir.registeredControlSuffix(); as controlSuffix) {\n <ng-template [ngTemplateOutlet]=\"controlSuffix.templateRef\" />\n }\n\n <ng-content select=\"[etInputSuffix]\" />\n\n <!-- After the consumer's own suffix, never instead of it \u2014 a pending async validator must not\n displace a clear button or a reveal toggle. -->\n @if (showBusySpinner()) {\n <et-spinner class=\"et-form-field-busy-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n }\n </div>\n </div>\n</div>\n\n@if (shouldRenderSupport()) {\n <div [style.block-size.px]=\"supportHeight()\" class=\"et-form-field-support\" etColorInteractiveExclude>\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\n [attr.aria-atomic]=\"errorActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!errorActive() ? 'true' : null\"\n [attr.aria-live]=\"errorActive() ? 'polite' : null\"\n [attr.data-active]=\"errorActive() || null\"\n [attr.data-direction]=\"errorDirection()\"\n [attr.data-state]=\"errorState()\"\n [etProvideColor]=\"errorColorTheme\"\n class=\"et-form-field-support-content et-form-field-errors\"\n etAnimatable\n >\n @for (error of visibleErrors(); track $index) {\n <et-form-error [error]=\"error\" />\n }\n </div>\n }\n\n @if (shouldRenderWarning()) {\n <div\n #warningContent\n #warningAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.warningId()\"\n [attr.aria-atomic]=\"warningActive() ? 'true' : null\"\n [attr.aria-hidden]=\"!warningActive() ? 'true' : null\"\n [attr.aria-live]=\"warningActive() ? 'polite' : null\"\n [attr.data-active]=\"warningActive() || null\"\n [attr.data-direction]=\"warningDirection()\"\n [attr.data-state]=\"warningState()\"\n [etProvideColor]=\"warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-warnings\"\n etAnimatable\n >\n @for (warning of visibleWarnings(); track $index) {\n <et-form-warning [warning]=\"warning\" />\n }\n </div>\n }\n\n @if (shouldRenderHint()) {\n <div\n #hintContent\n #hintAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!hintActive() ? 'true' : null\"\n [attr.data-active]=\"hintActive() || null\"\n [attr.data-direction]=\"hintDirection()\"\n [attr.data-state]=\"hintState()\"\n class=\"et-form-field-support-content et-form-field-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n\n <!-- Persistent, and outside the swapping stack: a reader who just crossed the limit needs the\n error and the count that caused it at the same time. Carries the error theme so the counter's\n own over-limit styling can reach the semantic error color even before the field shows an\n error (an untouched field is not yet in its error state). -->\n <div\n #counterContent\n [etProvideColor]=\"errorColorTheme\"\n [hidden]=\"!formFieldDir.registeredCounter()\"\n class=\"et-form-field-support-counter\"\n >\n <ng-content select=\"et-counter\" />\n </div>\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-form-field-gap{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-form-field-control-border-width{syntax: \"<length>\"; inherits: true; initial-value: 1px;}@property --et-form-field-control-padding-block{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-control-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-control-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-control-line-height{syntax: \"<number>\"; inherits: true; initial-value: 1.5;}@property --et-form-field-control-affix-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-form-field-affix-icon-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-form-field-control-disabled-opacity{syntax: \"<number>\"; inherits: true; initial-value: .5;}@property --et-form-field-control-min-height{syntax: \"<length>\"; inherits: true; initial-value: 40px;}@property --et-form-field-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 14px;}@property --et-form-field-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-form-field-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-form-field-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-form-field{--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--_et-form-field-control-background: transparent;--_et-form-field-control-focus-ring: color-mix(in srgb, var(--et-theme-color-primary-solid) 18%, transparent);--_et-form-field-floating-label-scale: .75;--_et-form-field-suffix-fade: 24px;display:flex;flex-direction:column;gap:var(--et-form-field-gap);color:var(--et-surface-color-solid, currentColor)}et-form-field .et-form-field-shell{display:flex;flex-direction:column;gap:var(--et-form-field-gap);min-inline-size:0;overflow:visible}et-form-field .et-form-field-label-area{display:flex;align-items:center;font-size:var(--et-form-field-label-font-size);font-weight:500;line-height:1.2;letter-spacing:-.01em;color:var(--et-surface-color-muted-solid, currentColor);cursor:text;-webkit-user-select:none;user-select:none;min-inline-size:0;transition:color .15s ease,opacity .15s ease}et-form-field .et-form-field-label-area et-label{display:inline;min-inline-size:0}et-form-field .et-form-field-label-area--floating{position:absolute;inset-block-start:50%;inset-inline-start:0;z-index:1;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transform:translateY(-50%);transform-origin:left top;pointer-events:none}et-form-field[data-can-animate] .et-form-field-label-area--floating{transition:color .15s ease,opacity .15s ease,inset-block-start .15s ease,inset-inline-start .15s ease,transform .15s ease}et-form-field .et-form-field-control-frame{position:relative;display:flex;align-items:center;box-sizing:border-box;gap:var(--et-form-field-control-affix-gap);min-inline-size:0;min-block-size:var(--et-form-field-control-min-height);padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);border:var(--et-form-field-control-border-width) solid var(--et-surface-border-solid, currentColor);border-radius:var(--et-form-field-control-border-radius);background:var(--_et-form-field-control-background);font-size:var(--et-form-field-control-font-size);line-height:var(--et-form-field-control-line-height);transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,opacity .15s ease;cursor:text}et-form-field .et-form-field-affix{display:flex;align-items:center;justify-content:center;flex-shrink:0;gap:var(--et-form-field-control-affix-gap);color:var(--et-surface-color-muted-solid, currentColor);pointer-events:none;transition:color .15s ease}et-form-field .et-form-field-affix:empty{display:none}et-form-field .et-form-field-affix>*{pointer-events:none}et-form-field .et-form-field-affix>:is([etInputPrefix],[etInputSuffix],.et-form-field-busy-spinner){opacity:.78;transition:opacity .15s ease}et-form-field .et-form-field-affix>.et-icon{flex:none;inline-size:var(--et-form-field-affix-icon-size);block-size:var(--et-form-field-affix-icon-size)}et-form-field .et-form-field-affix>:is(button,a[href],input,select,textarea,summary,label,[role=button],[tabindex]:not([tabindex=\"-1\"])){pointer-events:auto}et-form-field .et-form-field-affix button{font:inherit;color:inherit;border:none;background:transparent;padding:0;cursor:pointer}et-form-field .et-form-field-control-area{position:relative;display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-control-area>*{min-inline-size:0}et-form-field .et-form-field-control-slot{display:flex;align-items:center;flex:1;min-inline-size:0}et-form-field .et-form-field-support{overflow:clip;block-size:0}et-form-field .et-form-field-busy-spinner{flex:none;color:var(--et-surface-color-muted-solid, currentColor)}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)){--_et-form-field-suffix-overlap: calc( var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap) );--_et-form-field-suffix-cover: calc( var(--_et-form-field-suffix-overlap) - var(--et-form-field-control-affix-gap) );--_et-form-field-suffix-mask-direction: to right}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)):dir(rtl){--_et-form-field-suffix-mask-direction: to left}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)) .et-form-field-control-slot{-webkit-mask-image:linear-gradient(var(--_et-form-field-suffix-mask-direction),black calc(100% - var(--_et-form-field-suffix-cover) - var(--_et-form-field-suffix-fade)),transparent calc(100% - var(--_et-form-field-suffix-cover)));mask-image:linear-gradient(var(--_et-form-field-suffix-mask-direction),black calc(100% - var(--_et-form-field-suffix-cover) - var(--_et-form-field-suffix-fade)),transparent calc(100% - var(--_et-form-field-suffix-cover)))}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>:is(.et-input-clear,.et-form-field-busy-spinner)) .et-form-field-control-slot :is(input,textarea):last-of-type:is(:focus,[data-text-align=end],[data-text-align=center]){padding-inline-end:calc(var(--_et-form-field-suffix-overlap) + var(--_et-form-field-suffix-fade))}et-form-field .et-form-field-control-frame:has(>.et-form-field-suffix>.et-input-clear):has(>.et-form-field-suffix>.et-form-field-busy-spinner){--_et-form-field-suffix-overlap: calc( 2 * (var(--et-form-field-affix-icon-size) + var(--et-form-field-control-affix-gap)) )}et-form-field .et-form-field-suffix:is(:has(>.et-input-clear),:has(>.et-form-field-busy-spinner)){position:relative;z-index:1;align-self:stretch;padding-inline-start:var(--_et-form-field-suffix-fade);margin-inline-start:calc(-1 * (var(--_et-form-field-suffix-fade) + var(--_et-form-field-suffix-overlap)))}et-form-field .et-form-field-support-row{display:flex;align-items:flex-start;gap:var(--et-form-field-support-gap, .8rem)}et-form-field .et-form-field-support-stack{position:relative;display:grid;flex:1 1 auto;min-inline-size:0}et-form-field .et-form-field-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-form-field .et-form-field-support-content[data-active]{opacity:1;transform:translateY(0)}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-above]{position:absolute;inset:0;opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1));pointer-events:none}et-form-field .et-form-field-support-content[data-state=leaving][data-direction=to-below]{position:absolute;inset:0;opacity:0;transform:translateY(var(--et-form-field-support-offset));pointer-events:none}et-form-field .et-form-field-errors{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-error-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field .et-form-field-warnings{display:flex;flex-direction:column;gap:2px;font-size:var(--et-form-field-warning-font-size);color:var(--et-theme-color-primary-solid);padding-inline-start:calc(var(--et-form-field-control-padding-inline) + var(--et-form-field-control-border-width))}et-form-field[data-can-animate] .et-form-field-support{transition:block-size var(--et-form-field-support-duration) ease}et-form-field[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease,transform var(--et-form-field-support-duration) ease}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-above]{opacity:0;transform:translateY(calc(var(--et-form-field-support-offset) * -1))}}@starting-style{et-form-field[data-can-animate] .et-form-field-support-content[data-active][data-direction=from-below]{opacity:0;transform:translateY(var(--et-form-field-support-offset))}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms;--et-form-field-support-offset: 0px}}}\n"] }]
|
|
29953
30163
|
}], ctorParameters: () => [], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], fill: [{ type: i0.Input, args: [{ isSignal: true, alias: "fill", required: false }] }], labelMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelMode", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], busy: [{ type: i0.Input, args: [{ isSignal: true, alias: "busy", required: false }] }], errorContent: [{ type: i0.ViewChild, args: ['errorContent', { isSignal: true }] }], warningContent: [{ type: i0.ViewChild, args: ['warningContent', { isSignal: true }] }], hintContent: [{ type: i0.ViewChild, args: ['hintContent', { isSignal: true }] }], counterContent: [{ type: i0.ViewChild, args: ['counterContent', { isSignal: true }] }], controlFrame: [{ type: i0.ViewChild, args: ['controlFrame', { isSignal: true }] }], prefixEl: [{ type: i0.ViewChild, args: ['prefixEl', { isSignal: true }] }], errorAnimatable: [{ type: i0.ViewChild, args: ['errorAnimatable', { isSignal: true }] }], warningAnimatable: [{ type: i0.ViewChild, args: ['warningAnimatable', { isSignal: true }] }], hintAnimatable: [{ type: i0.ViewChild, args: ['hintAnimatable', { isSignal: true }] }] } });
|
|
29954
30164
|
|
|
29955
30165
|
const FORM_FIELD_IMPORTS = [
|
|
@@ -30410,8 +30620,11 @@ class InputComponent {
|
|
|
30410
30620
|
syncNativeValue(event) {
|
|
30411
30621
|
this.inputDir.syncFromNativeInput(event.target);
|
|
30412
30622
|
}
|
|
30623
|
+
focus(options) {
|
|
30624
|
+
this.inputDir.focus(options);
|
|
30625
|
+
}
|
|
30413
30626
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30414
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: InputComponent, isStandalone: true, selector: "et-input", host: { listeners: { "click": "inputDir.activate()" }, classAttribute: "et-input" }, viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: InputDirective, inputs: ["type", "type", "placeholder", "placeholder", "autocomplete", "autocomplete", "textAlign", "textAlign", "value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<input\n #nativeInput\n [type]=\"inputDir.type()\"\n [value]=\"inputDir.displayValue()\"\n [disabled]=\"inputDir.disabled()\"\n [readOnly]=\"inputDir.readonly()\"\n [required]=\"inputDir.required()\"\n [placeholder]=\"inputDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"inputDir.autocomplete() || null\"\n [attr.name]=\"inputDir.name() || null\"\n [attr.aria-invalid]=\"inputDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"inputDir.describedBy() || null\"\n [attr.aria-label]=\"inputDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"inputDir.labelId() || null\"\n [attr.data-text-align]=\"inputDir.textAlign()\"\n (input)=\"syncNativeValue($event)\"\n (focus)=\"inputDir.focused.set(true)\"\n (blur)=\"inputDir.focused.set(false); inputDir.touched.set(true)\"\n class=\"et-input-native\"\n/>\n", styles: ["@layer components{et-input{display:block;flex:1;min-inline-size:0;color:inherit}et-input .et-input-native{display:block;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0}et-input .et-input-native:not(:focus){overflow:hidden;text-overflow:ellipsis}et-input .et-input-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-input .et-input-native[data-text-align=start]{text-align:start}et-input .et-input-native[data-text-align=center]{text-align:center}et-input .et-input-native[data-text-align=end]{text-align:end}et-input[data-mixed] .et-input-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30627
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: InputComponent, isStandalone: true, selector: "et-input", host: { listeners: { "click": "inputDir.activate()" }, classAttribute: "et-input" }, viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: InputDirective, inputs: ["type", "type", "placeholder", "placeholder", "autocomplete", "autocomplete", "textAlign", "textAlign", "value", "value", "mixed", "mixed", "touched", "touched", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<input\n #nativeInput\n [type]=\"inputDir.type()\"\n [value]=\"inputDir.displayValue()\"\n [disabled]=\"inputDir.disabled()\"\n [readOnly]=\"inputDir.readonly()\"\n [required]=\"inputDir.required()\"\n [placeholder]=\"inputDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"inputDir.autocomplete() || null\"\n [attr.name]=\"inputDir.name() || null\"\n [attr.aria-invalid]=\"inputDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"inputDir.describedBy() || null\"\n [attr.aria-label]=\"inputDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"inputDir.labelId() || null\"\n [attr.data-text-align]=\"inputDir.textAlign()\"\n (input)=\"syncNativeValue($event)\"\n (focus)=\"inputDir.focused.set(true)\"\n (blur)=\"inputDir.focused.set(false); inputDir.touched.set(true)\"\n class=\"et-input-native\"\n/>\n", styles: ["@layer components{et-input{display:block;flex:1;min-inline-size:0;color:inherit}et-input .et-input-native{display:block;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0}et-input .et-input-native:not(:focus){overflow:hidden;text-overflow:ellipsis}et-input .et-input-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-input .et-input-native[data-text-align=start]{text-align:start}et-input .et-input-native[data-text-align=center]{text-align:center}et-input .et-input-native[data-text-align=end]{text-align:end}et-input[data-mixed] .et-input-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30415
30628
|
}
|
|
30416
30629
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: InputComponent, decorators: [{
|
|
30417
30630
|
type: Component,
|
|
@@ -30425,6 +30638,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
30425
30638
|
'textAlign',
|
|
30426
30639
|
'value',
|
|
30427
30640
|
'mixed',
|
|
30641
|
+
'touched',
|
|
30428
30642
|
'mixedLabel',
|
|
30429
30643
|
'disabled',
|
|
30430
30644
|
'readonly',
|
|
@@ -30521,6 +30735,9 @@ class NumberInputComponent {
|
|
|
30521
30735
|
this.repeatSub?.unsubscribe();
|
|
30522
30736
|
this.repeatSub = null;
|
|
30523
30737
|
}
|
|
30738
|
+
focus(options) {
|
|
30739
|
+
this.numberInputDir.focus(options);
|
|
30740
|
+
}
|
|
30524
30741
|
/**
|
|
30525
30742
|
* Drag the stepper sideways to run the value, Figma-style. The press has already stepped once and
|
|
30526
30743
|
* armed the auto-repeat by the time this can tell a drag from a click, so committing to the scrub
|
|
@@ -30577,7 +30794,7 @@ class NumberInputComponent {
|
|
|
30577
30794
|
.subscribe();
|
|
30578
30795
|
}
|
|
30579
30796
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: NumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30580
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: NumberInputComponent, isStandalone: true, selector: "et-number-input", inputs: { stepper: { classPropertyName: "stepper", publicName: "stepper", isSignal: true, isRequired: false, transformFunction: null }, incrementLabel: { classPropertyName: "incrementLabel", publicName: "incrementLabel", isSignal: true, isRequired: false, transformFunction: null }, decrementLabel: { classPropertyName: "decrementLabel", publicName: "decrementLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "numberInputDir.activate()" }, properties: { "attr.data-stepper": "stepper() || null" }, classAttribute: "et-number-input" }, providers: [provideIcons(MINUS_ICON, PLUS_ICON)], viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: NumberInputDirective, inputs: ["min", "min", "max", "max", "step", "step", "placeholder", "placeholder", "autocomplete", "autocomplete", "textAlign", "textAlign", "value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<input\n #nativeInput\n [value]=\"numberInputDir.displayValue()\"\n [disabled]=\"numberInputDir.disabled()\"\n [readOnly]=\"numberInputDir.readonly()\"\n [required]=\"numberInputDir.required()\"\n [placeholder]=\"numberInputDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"numberInputDir.autocomplete() || null\"\n [attr.min]=\"numberInputDir.min() ?? null\"\n [attr.max]=\"numberInputDir.max() ?? null\"\n [attr.step]=\"numberInputDir.step() ?? null\"\n [attr.name]=\"numberInputDir.name() || null\"\n [attr.aria-invalid]=\"numberInputDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"numberInputDir.describedBy() || null\"\n [attr.aria-label]=\"numberInputDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"numberInputDir.labelId() || null\"\n [attr.data-text-align]=\"numberInputDir.textAlign()\"\n (input)=\"syncNativeValue($event)\"\n (focus)=\"numberInputDir.focused.set(true)\"\n (blur)=\"numberInputDir.focused.set(false); numberInputDir.touched.set(true)\"\n class=\"et-number-input-native\"\n type=\"number\"\n/>\n\n@if (stepper()) {\n <div class=\"et-number-input-stepper\">\n <button\n [attr.aria-label]=\"resolvedDecrementLabel()\"\n [disabled]=\"!numberInputDir.canStepDown()\"\n (pointerdown)=\"startStepRepeat($event, -1)\"\n (pointerup)=\"stopStepRepeat()\"\n (pointercancel)=\"stopStepRepeat()\"\n (lostpointercapture)=\"stopStepRepeat()\"\n class=\"et-number-input-stepper-button\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i aria-hidden=\"true\" etIcon=\"et-minus\"></i>\n </button>\n <button\n [attr.aria-label]=\"resolvedIncrementLabel()\"\n [disabled]=\"!numberInputDir.canStepUp()\"\n (pointerdown)=\"startStepRepeat($event, 1)\"\n (pointerup)=\"stopStepRepeat()\"\n (pointercancel)=\"stopStepRepeat()\"\n (lostpointercapture)=\"stopStepRepeat()\"\n class=\"et-number-input-stepper-button\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i aria-hidden=\"true\" etIcon=\"et-plus\"></i>\n </button>\n </div>\n}\n", styles: ["@layer components{html.et-number-input-scrubbing,html.et-number-input-scrubbing *{cursor:ew-resize!important}@property --et-number-input-stepper-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}et-number-input{display:block;flex:1;min-inline-size:0;color:inherit}et-number-input[data-stepper]{display:flex;align-items:center;gap:8px}et-number-input .et-number-input-stepper{display:flex;align-items:center;gap:2px;flex:none}et-number-input .et-number-input-stepper-button{display:flex;align-items:center;justify-content:center;flex:none;inline-size:calc(var(--et-number-input-stepper-size) + 8px);block-size:calc(var(--et-number-input-stepper-size) + 8px);padding:0;border:none;border-radius:4px;background:transparent;color:var(--et-surface-color-muted-solid, currentColor);cursor:pointer;outline:none;touch-action:none}@media(pointer:fine){et-number-input .et-number-input-stepper-button{cursor:ew-resize}}et-number-input .et-number-input-stepper-button .et-icon{inline-size:var(--et-number-input-stepper-size);block-size:var(--et-number-input-stepper-size)}@media(hover:hover){et-number-input .et-number-input-stepper-button:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}et-number-input .et-number-input-stepper-button:active{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 20%,transparent)}et-number-input .et-number-input-stepper-button:disabled{cursor:default;background:transparent;color:inherit;opacity:.4}et-number-input .et-number-input-native{display:block;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0;appearance:textfield}et-number-input .et-number-input-native::-webkit-outer-spin-button,et-number-input .et-number-input-native::-webkit-inner-spin-button{appearance:none;margin:0}et-number-input .et-number-input-native:not(:focus){overflow:hidden;text-overflow:ellipsis}et-number-input .et-number-input-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-number-input .et-number-input-native[data-text-align=start]{text-align:start}et-number-input .et-number-input-native[data-text-align=center]{text-align:center}et-number-input .et-number-input-native[data-text-align=end]{text-align:end}et-number-input[data-mixed] .et-number-input-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], dependencies: [{ kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30797
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: NumberInputComponent, isStandalone: true, selector: "et-number-input", inputs: { stepper: { classPropertyName: "stepper", publicName: "stepper", isSignal: true, isRequired: false, transformFunction: null }, incrementLabel: { classPropertyName: "incrementLabel", publicName: "incrementLabel", isSignal: true, isRequired: false, transformFunction: null }, decrementLabel: { classPropertyName: "decrementLabel", publicName: "decrementLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "numberInputDir.activate()" }, properties: { "attr.data-stepper": "stepper() || null" }, classAttribute: "et-number-input" }, providers: [provideIcons(MINUS_ICON, PLUS_ICON)], viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: NumberInputDirective, inputs: ["min", "min", "max", "max", "step", "step", "placeholder", "placeholder", "autocomplete", "autocomplete", "textAlign", "textAlign", "value", "value", "mixed", "mixed", "touched", "touched", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<input\n #nativeInput\n [value]=\"numberInputDir.displayValue()\"\n [disabled]=\"numberInputDir.disabled()\"\n [readOnly]=\"numberInputDir.readonly()\"\n [required]=\"numberInputDir.required()\"\n [placeholder]=\"numberInputDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"numberInputDir.autocomplete() || null\"\n [attr.min]=\"numberInputDir.min() ?? null\"\n [attr.max]=\"numberInputDir.max() ?? null\"\n [attr.step]=\"numberInputDir.step() ?? null\"\n [attr.name]=\"numberInputDir.name() || null\"\n [attr.aria-invalid]=\"numberInputDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"numberInputDir.describedBy() || null\"\n [attr.aria-label]=\"numberInputDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"numberInputDir.labelId() || null\"\n [attr.data-text-align]=\"numberInputDir.textAlign()\"\n (input)=\"syncNativeValue($event)\"\n (focus)=\"numberInputDir.focused.set(true)\"\n (blur)=\"numberInputDir.focused.set(false); numberInputDir.touched.set(true)\"\n class=\"et-number-input-native\"\n type=\"number\"\n/>\n\n@if (stepper()) {\n <div class=\"et-number-input-stepper\">\n <button\n [attr.aria-label]=\"resolvedDecrementLabel()\"\n [disabled]=\"!numberInputDir.canStepDown()\"\n (pointerdown)=\"startStepRepeat($event, -1)\"\n (pointerup)=\"stopStepRepeat()\"\n (pointercancel)=\"stopStepRepeat()\"\n (lostpointercapture)=\"stopStepRepeat()\"\n class=\"et-number-input-stepper-button\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i aria-hidden=\"true\" etIcon=\"et-minus\"></i>\n </button>\n <button\n [attr.aria-label]=\"resolvedIncrementLabel()\"\n [disabled]=\"!numberInputDir.canStepUp()\"\n (pointerdown)=\"startStepRepeat($event, 1)\"\n (pointerup)=\"stopStepRepeat()\"\n (pointercancel)=\"stopStepRepeat()\"\n (lostpointercapture)=\"stopStepRepeat()\"\n class=\"et-number-input-stepper-button\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <i aria-hidden=\"true\" etIcon=\"et-plus\"></i>\n </button>\n </div>\n}\n", styles: ["@layer components{html.et-number-input-scrubbing,html.et-number-input-scrubbing *{cursor:ew-resize!important}@property --et-number-input-stepper-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}et-number-input{display:block;flex:1;min-inline-size:0;color:inherit}et-number-input[data-stepper]{display:flex;align-items:center;gap:8px}et-number-input .et-number-input-stepper{display:flex;align-items:center;gap:2px;flex:none}et-number-input .et-number-input-stepper-button{display:flex;align-items:center;justify-content:center;flex:none;inline-size:calc(var(--et-number-input-stepper-size) + 8px);block-size:calc(var(--et-number-input-stepper-size) + 8px);padding:0;border:none;border-radius:4px;background:transparent;color:var(--et-surface-color-muted-solid, currentColor);cursor:pointer;outline:none;touch-action:none}@media(pointer:fine){et-number-input .et-number-input-stepper-button{cursor:ew-resize}}et-number-input .et-number-input-stepper-button .et-icon{inline-size:var(--et-number-input-stepper-size);block-size:var(--et-number-input-stepper-size)}@media(hover:hover){et-number-input .et-number-input-stepper-button:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}et-number-input .et-number-input-stepper-button:active{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 20%,transparent)}et-number-input .et-number-input-stepper-button:disabled{cursor:default;background:transparent;color:inherit;opacity:.4}et-number-input .et-number-input-native{display:block;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0;appearance:textfield}et-number-input .et-number-input-native::-webkit-outer-spin-button,et-number-input .et-number-input-native::-webkit-inner-spin-button{appearance:none;margin:0}et-number-input .et-number-input-native:not(:focus){overflow:hidden;text-overflow:ellipsis}et-number-input .et-number-input-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-number-input .et-number-input-native[data-text-align=start]{text-align:start}et-number-input .et-number-input-native[data-text-align=center]{text-align:center}et-number-input .et-number-input-native[data-text-align=end]{text-align:end}et-number-input[data-mixed] .et-number-input-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], dependencies: [{ kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30581
30798
|
}
|
|
30582
30799
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: NumberInputComponent, decorators: [{
|
|
30583
30800
|
type: Component,
|
|
@@ -30593,6 +30810,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
30593
30810
|
'textAlign',
|
|
30594
30811
|
'value',
|
|
30595
30812
|
'mixed',
|
|
30813
|
+
'touched',
|
|
30596
30814
|
'mixedLabel',
|
|
30597
30815
|
'disabled',
|
|
30598
30816
|
'readonly',
|
|
@@ -30968,8 +31186,11 @@ class PasswordInputComponent {
|
|
|
30968
31186
|
this.passwordDir.touched.set(true);
|
|
30969
31187
|
this.passwordDir.syncCapsLock(event);
|
|
30970
31188
|
}
|
|
31189
|
+
focus(options) {
|
|
31190
|
+
this.passwordDir.focus(options);
|
|
31191
|
+
}
|
|
30971
31192
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PasswordInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30972
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: PasswordInputComponent, isStandalone: true, selector: "et-password-input", inputs: { revealable: { classPropertyName: "revealable", publicName: "revealable", isSignal: true, isRequired: false, transformFunction: null }, revealLabel: { classPropertyName: "revealLabel", publicName: "revealLabel", isSignal: true, isRequired: false, transformFunction: null }, hideLabel: { classPropertyName: "hideLabel", publicName: "hideLabel", isSignal: true, isRequired: false, transformFunction: null }, capsLockWarning: { classPropertyName: "capsLockWarning", publicName: "capsLockWarning", isSignal: true, isRequired: false, transformFunction: null }, capsLockLabel: { classPropertyName: "capsLockLabel", publicName: "capsLockLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "passwordDir.activate()" }, classAttribute: "et-password-input" }, providers: [provideIcons(EYE_ICON, EYE_SLASH_ICON, TRIANGLE_EXCLAMATION_ICON)], viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: PasswordInputDirective, inputs: ["placeholder", "placeholder", "autocomplete", "autocomplete", "value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "revealed", "revealed", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "revealedChange", "revealedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<input\n #nativeInput\n [type]=\"passwordDir.inputType()\"\n [value]=\"passwordDir.displayValue()\"\n [disabled]=\"passwordDir.disabled()\"\n [readOnly]=\"passwordDir.readonly()\"\n [required]=\"passwordDir.required()\"\n [placeholder]=\"passwordDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"passwordDir.autocomplete() || null\"\n [attr.name]=\"passwordDir.name() || null\"\n [attr.aria-invalid]=\"passwordDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"passwordDir.describedBy() || null\"\n [attr.aria-label]=\"passwordDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"passwordDir.labelId() || null\"\n (input)=\"syncNativeValue($event)\"\n (keydown)=\"passwordDir.syncCapsLock($event)\"\n (keyup)=\"passwordDir.syncCapsLock($event)\"\n (mousedown)=\"passwordDir.syncCapsLock($event)\"\n (focus)=\"passwordDir.focused.set(true)\"\n (blur)=\"handleBlur($event)\"\n class=\"et-password-input-native\"\n/>\n\n@if (showCapsLockWarning()) {\n <span class=\"et-password-input-caps-warning\" role=\"status\">\n <i [etTooltip]=\"resolvedCapsLockLabel()\" aria-hidden=\"true\" etIcon=\"et-triangle-exclamation\"></i>\n <span class=\"et-password-input-caps-warning-text\">{{ resolvedCapsLockLabel() }}</span>\n </span>\n}\n\n<ng-template etControlSuffix>\n @if (revealable()) {\n <button\n [attr.aria-label]=\"passwordDir.revealed() ? resolvedHideLabel() : resolvedRevealLabel()\"\n [attr.aria-pressed]=\"passwordDir.revealed()\"\n [disabled]=\"passwordDir.disabled()\"\n (click)=\"passwordDir.toggleRevealed(); $event.stopPropagation()\"\n class=\"et-password-input-reveal\"\n type=\"button\"\n >\n <i [etIcon]=\"passwordDir.revealed() ? 'et-eye-slash' : 'et-eye'\" aria-hidden=\"true\"></i>\n </button>\n }\n</ng-template>\n", styles: ["@layer components{@property --et-password-input-reveal-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}et-password-input{display:flex;align-items:center;gap:8px;flex:1;min-inline-size:0;color:inherit}et-password-input .et-password-input-native{display:block;flex:1;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0}et-password-input .et-password-input-native:not(:focus){overflow:hidden;text-overflow:ellipsis}et-password-input .et-password-input-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-password-input[data-mixed] .et-password-input-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-password-input .et-password-input-caps-warning{display:flex;align-items:center;flex:none;inline-size:var(--et-password-input-reveal-size);block-size:var(--et-password-input-reveal-size);color:var(--et-surface-color-muted-solid, currentColor)}et-password-input .et-password-input-caps-warning .et-icon{inline-size:100%;block-size:100%}et-password-input .et-password-input-caps-warning-text{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.et-password-input-reveal{display:flex;align-items:center;justify-content:center;flex:none;inline-size:calc(var(--et-password-input-reveal-size) + 8px);block-size:calc(var(--et-password-input-reveal-size) + 8px);padding:0;border:none;border-radius:4px;background:transparent;color:var(--et-surface-color-muted-solid, currentColor);cursor:pointer;outline:none}.et-password-input-reveal .et-icon{inline-size:var(--et-password-input-reveal-size);block-size:var(--et-password-input-reveal-size)}@media(hover:hover){.et-password-input-reveal:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}.et-password-input-reveal:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:1px}.et-password-input-reveal:active{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 20%,transparent)}.et-password-input-reveal:disabled{cursor:default;background:transparent;color:inherit}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: TooltipDirective, selector: "[etTooltip]", inputs: ["etTooltip", "etTooltipAriaDescription", "placement", "fallbackPlacements", "offset", "arrowPadding", "viewportPadding", "showDelay", "etTooltipDisabled"], exportAs: ["etTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
31193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: PasswordInputComponent, isStandalone: true, selector: "et-password-input", inputs: { revealable: { classPropertyName: "revealable", publicName: "revealable", isSignal: true, isRequired: false, transformFunction: null }, revealLabel: { classPropertyName: "revealLabel", publicName: "revealLabel", isSignal: true, isRequired: false, transformFunction: null }, hideLabel: { classPropertyName: "hideLabel", publicName: "hideLabel", isSignal: true, isRequired: false, transformFunction: null }, capsLockWarning: { classPropertyName: "capsLockWarning", publicName: "capsLockWarning", isSignal: true, isRequired: false, transformFunction: null }, capsLockLabel: { classPropertyName: "capsLockLabel", publicName: "capsLockLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "passwordDir.activate()" }, classAttribute: "et-password-input" }, providers: [provideIcons(EYE_ICON, EYE_SLASH_ICON, TRIANGLE_EXCLAMATION_ICON)], viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }], hostDirectives: [{ directive: PasswordInputDirective, inputs: ["placeholder", "placeholder", "autocomplete", "autocomplete", "value", "value", "mixed", "mixed", "touched", "touched", "mixedLabel", "mixedLabel", "revealed", "revealed", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "revealedChange", "revealedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<input\n #nativeInput\n [type]=\"passwordDir.inputType()\"\n [value]=\"passwordDir.displayValue()\"\n [disabled]=\"passwordDir.disabled()\"\n [readOnly]=\"passwordDir.readonly()\"\n [required]=\"passwordDir.required()\"\n [placeholder]=\"passwordDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"passwordDir.autocomplete() || null\"\n [attr.name]=\"passwordDir.name() || null\"\n [attr.aria-invalid]=\"passwordDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"passwordDir.describedBy() || null\"\n [attr.aria-label]=\"passwordDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"passwordDir.labelId() || null\"\n (input)=\"syncNativeValue($event)\"\n (keydown)=\"passwordDir.syncCapsLock($event)\"\n (keyup)=\"passwordDir.syncCapsLock($event)\"\n (mousedown)=\"passwordDir.syncCapsLock($event)\"\n (focus)=\"passwordDir.focused.set(true)\"\n (blur)=\"handleBlur($event)\"\n class=\"et-password-input-native\"\n/>\n\n@if (showCapsLockWarning()) {\n <span class=\"et-password-input-caps-warning\" role=\"status\">\n <i [etTooltip]=\"resolvedCapsLockLabel()\" aria-hidden=\"true\" etIcon=\"et-triangle-exclamation\"></i>\n <span class=\"et-password-input-caps-warning-text\">{{ resolvedCapsLockLabel() }}</span>\n </span>\n}\n\n<ng-template etControlSuffix>\n @if (revealable()) {\n <button\n [attr.aria-label]=\"passwordDir.revealed() ? resolvedHideLabel() : resolvedRevealLabel()\"\n [attr.aria-pressed]=\"passwordDir.revealed()\"\n [disabled]=\"passwordDir.disabled()\"\n (click)=\"passwordDir.toggleRevealed(); $event.stopPropagation()\"\n class=\"et-password-input-reveal\"\n type=\"button\"\n >\n <i [etIcon]=\"passwordDir.revealed() ? 'et-eye-slash' : 'et-eye'\" aria-hidden=\"true\"></i>\n </button>\n }\n</ng-template>\n", styles: ["@layer components{@property --et-password-input-reveal-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}et-password-input{display:flex;align-items:center;gap:8px;flex:1;min-inline-size:0;color:inherit}et-password-input .et-password-input-native{display:block;flex:1;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0}et-password-input .et-password-input-native:not(:focus){overflow:hidden;text-overflow:ellipsis}et-password-input .et-password-input-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-password-input[data-mixed] .et-password-input-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-password-input .et-password-input-caps-warning{display:flex;align-items:center;flex:none;inline-size:var(--et-password-input-reveal-size);block-size:var(--et-password-input-reveal-size);color:var(--et-surface-color-muted-solid, currentColor)}et-password-input .et-password-input-caps-warning .et-icon{inline-size:100%;block-size:100%}et-password-input .et-password-input-caps-warning-text{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.et-password-input-reveal{display:flex;align-items:center;justify-content:center;flex:none;inline-size:calc(var(--et-password-input-reveal-size) + 8px);block-size:calc(var(--et-password-input-reveal-size) + 8px);padding:0;border:none;border-radius:4px;background:transparent;color:var(--et-surface-color-muted-solid, currentColor);cursor:pointer;outline:none}.et-password-input-reveal .et-icon{inline-size:var(--et-password-input-reveal-size);block-size:var(--et-password-input-reveal-size)}@media(hover:hover){.et-password-input-reveal:hover{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 12%,transparent);color:var(--et-surface-color-solid, currentColor)}}.et-password-input-reveal:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:1px}.et-password-input-reveal:active{background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 20%,transparent)}.et-password-input-reveal:disabled{cursor:default;background:transparent;color:inherit}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: TooltipDirective, selector: "[etTooltip]", inputs: ["etTooltip", "etTooltipAriaDescription", "placement", "fallbackPlacements", "offset", "arrowPadding", "viewportPadding", "showDelay", "etTooltipDisabled"], exportAs: ["etTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
30973
31194
|
}
|
|
30974
31195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PasswordInputComponent, decorators: [{
|
|
30975
31196
|
type: Component,
|
|
@@ -30981,6 +31202,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
30981
31202
|
'autocomplete',
|
|
30982
31203
|
'value',
|
|
30983
31204
|
'mixed',
|
|
31205
|
+
'touched',
|
|
30984
31206
|
'mixedLabel',
|
|
30985
31207
|
'revealed',
|
|
30986
31208
|
'disabled',
|
|
@@ -33292,6 +33514,9 @@ class RichTextEditorDirective {
|
|
|
33292
33514
|
this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
33293
33515
|
}
|
|
33294
33516
|
activate() {
|
|
33517
|
+
this.focus();
|
|
33518
|
+
}
|
|
33519
|
+
focus(options) {
|
|
33295
33520
|
if (this.disabled())
|
|
33296
33521
|
return;
|
|
33297
33522
|
const el = this.editorDom.root();
|
|
@@ -33299,7 +33524,7 @@ class RichTextEditorDirective {
|
|
|
33299
33524
|
// start, so only focus when the editor isn't already focused (e.g. a click on the frame padding).
|
|
33300
33525
|
if (!el || el.ownerDocument.activeElement === el)
|
|
33301
33526
|
return;
|
|
33302
|
-
el.focus();
|
|
33527
|
+
el.focus(options);
|
|
33303
33528
|
}
|
|
33304
33529
|
/**
|
|
33305
33530
|
* Reads the DOM back into `value` and refreshes the toolbar state - the single point every edit
|
|
@@ -39612,6 +39837,9 @@ class RichTextEditorComponent {
|
|
|
39612
39837
|
break;
|
|
39613
39838
|
}
|
|
39614
39839
|
}
|
|
39840
|
+
focus(options) {
|
|
39841
|
+
this.dir.focus(options);
|
|
39842
|
+
}
|
|
39615
39843
|
/** Track the visual viewport so the docked (fixed) toolbar sits right above the on-screen
|
|
39616
39844
|
* keyboard: the inset is the gap from where `position: fixed; bottom: 0` actually renders (a
|
|
39617
39845
|
* measured probe - see below) down past the keyboard's top edge
|
|
@@ -39758,7 +39986,7 @@ class RichTextEditorComponent {
|
|
|
39758
39986
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RichTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39759
39987
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RichTextEditorComponent, isStandalone: true, selector: "et-rich-text-editor", host: { listeners: { "click": "dir.activate()" }, properties: { "class.et-rich-text-editor--touch": "hasTouchInput()", "class.et-rich-text-editor--docked-toolbar": "dockedToolbar()" }, classAttribute: "et-rich-text-editor" }, providers: [
|
|
39760
39988
|
provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LIST_BULLETED_ICON, LIST_NUMBERED_ICON, LINK_ICON, QUOTE_ICON, CODE_BLOCK_ICON, UNDO_ICON, REDO_ICON),
|
|
39761
|
-
], viewQueries: [{ propertyName: "editable", first: true, predicate: ["editable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: RichTextEditorDirective, inputs: ["value", "value", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "tools", "tools", "autoformat", "autoformat", "labels", "labels"], outputs: ["valueChange", "valueChange", "touchedChange", "touchedChange"] }], ngImport: i0, template: "<div [attr.aria-label]=\"labels().toolbar\" class=\"et-rte-toolbar\" etToolbar>\n @for (tool of dir.resolvedTools(); track $index) {\n @switch (tool) {\n @case (TOOLS.DIVIDER) {\n <et-divider orientation=\"vertical\" decorative />\n }\n @default {\n @if (dir.toolDefs.get(tool); as def) {\n @if (def.control; as control) {\n <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n } @else {\n <button\n [pressed]=\"def.isActive?.(dir) ?? false\"\n [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(dir)\"\n color=\"surface\"\n pressedColor=\"inherit\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n </button>\n }\n }\n }\n }\n }\n</div>\n\n<div\n #editable\n [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n [attr.data-placeholder]=\"dir.placeholder() || null\"\n [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"dir.describedBy() || null\"\n [attr.aria-labelledby]=\"dir.labelId() || null\"\n [attr.aria-disabled]=\"dir.disabled() || null\"\n [attr.aria-readonly]=\"dir.readonly() || null\"\n (input)=\"syncValueFromDom()\"\n (beforeinput)=\"interceptFormattingCommand($event)\"\n (keydown)=\"interceptEditorKeydown($event)\"\n (paste)=\"interceptPaste($event)\"\n (drop)=\"interceptDrop($event)\"\n (click)=\"interceptClick($event)\"\n (pointerdown)=\"dir.clearPendingMarks()\"\n (focus)=\"dir.focused.set(true)\"\n (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n class=\"et-rte-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n></div>\n", styles: ["@layer components{@property --et-rich-text-editor-toolbar-gap{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-toolbar-padding{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-button-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-min-height{syntax: \"<length>\"; inherits: true; initial-value: 96px;}@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0;color:inherit}et-rich-text-editor .et-rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap);padding:var(--et-rich-text-editor-toolbar-padding);padding-inline:calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));border-block-end:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius)}et-rich-text-editor .et-rte-toolbar .et-icon-button{--_et-focus-ring-offset: -1px}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{position:fixed;inset-inline:0;inset-block-end:0;z-index:60;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;padding-inline:8px;padding-block-start:6px;padding-block-end:calc(6px + max(var(--_et-rte-keyboard-inset, 0px),env(keyboard-inset-height,0px)));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(24 24 24)));border-block-end:none;border-block-start:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);box-shadow:0 -6px 20px #0000003d;scrollbar-width:none;opacity:0;transform:translateY(100%);pointer-events:none;transition:opacity .16s var(--ease-out-5, ease),transform .26s var(--ease-out-5, ease)}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar::-webkit-scrollbar{display:none}et-rich-text-editor.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar{opacity:1;transform:translateY(0);pointer-events:auto}et-rich-text-editor.et-rich-text-editor--touch .et-rte-content{font-size:max(1em,16px)}@media(prefers-reduced-motion:reduce){et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{transition:opacity .16s var(--ease-out-5, ease)}}et-rich-text-editor .et-rte-toolbar .et-divider{--et-divider-color: color-mix(in srgb, currentColor 12%, transparent);--et-divider-spacing: 2px;--et-divider-inset: 4px}et-rich-text-editor .et-rte-content{--et-theme-color-primary-rgb: var(--et-color-primary);--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));display:block;flex:1;min-inline-size:0;padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);min-block-size:var(--et-rich-text-editor-min-height);outline:none;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);overflow-wrap:anywhere}et-rich-text-editor .et-rte-content:empty:before{content:attr(data-placeholder);color:color-mix(in srgb,currentColor 46%,transparent);pointer-events:none}et-rich-text-editor .et-rte-content>:first-child{margin-block-start:0}et-rich-text-editor .et-rte-content>:last-child{margin-block-end:0}et-rich-text-editor .et-rte-content p{margin-block:0}et-rich-text-editor .et-rte-content p+p,et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol,et-rich-text-editor .et-rte-content blockquote,et-rich-text-editor .et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1,et-rich-text-editor .et-rte-content h2,et-rich-text-editor .et-rte-content h3,et-rich-text-editor .et-rte-content h4,et-rich-text-editor .et-rte-content h5,et-rich-text-editor .et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}et-rich-text-editor .et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,et-rich-text-editor .et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1{font-size:2.4rem}et-rich-text-editor .et-rte-content h2{font-size:2rem}et-rich-text-editor .et-rte-content h3{font-size:1.6rem}et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}et-rich-text-editor .et-rte-content ul{list-style-type:disc}et-rich-text-editor .et-rte-content ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul{list-style-type:circle}et-rich-text-editor .et-rte-content ul ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul ul{list-style-type:square}et-rich-text-editor .et-rte-content ul ul ul ul{list-style-type:disc}et-rich-text-editor .et-rte-content ol{list-style-type:decimal}et-rich-text-editor .et-rte-content ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}et-rich-text-editor .et-rte-content ol ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}et-rich-text-editor .et-rte-content ol ol ol ol{list-style-type:decimal}et-rich-text-editor .et-rte-content li{margin-block:0}et-rich-text-editor .et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}et-rich-text-editor .et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}et-rich-text-editor .et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}et-rich-text-editor .et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}et-rich-text-editor .et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}et-rich-text-editor .et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}et-rich-text-editor .et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}et-rich-text-editor .et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"], dependencies: [{ kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "component", type: DividerComponent, selector: "et-divider", inputs: ["orientation", "decorative"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: ToolbarDirective, selector: "[etToolbar]", inputs: ["orientation"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
39989
|
+
], viewQueries: [{ propertyName: "editable", first: true, predicate: ["editable"], descendants: true, isSignal: true }], hostDirectives: [{ directive: RichTextEditorDirective, inputs: ["value", "value", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "tools", "tools", "autoformat", "autoformat", "labels", "labels"], outputs: ["valueChange", "valueChange", "touchedChange", "touchedChange"] }], ngImport: i0, template: "<div [attr.aria-label]=\"labels().toolbar\" class=\"et-rte-toolbar\" etToolbar>\n @for (tool of dir.resolvedTools(); track $index) {\n @switch (tool) {\n @case (TOOLS.DIVIDER) {\n <et-divider orientation=\"vertical\" decorative />\n }\n @default {\n @if (dir.toolDefs.get(tool); as def) {\n @if (def.control; as control) {\n <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n } @else {\n <button\n [pressed]=\"def.isActive?.(dir) ?? false\"\n [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n [attr.aria-label]=\"toolLabel(def)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"def.run?.(dir)\"\n color=\"surface\"\n pressedColor=\"inherit\"\n et-icon-button\n size=\"sm\"\n type=\"button\"\n >\n <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n </button>\n }\n }\n }\n }\n }\n</div>\n\n<div\n #editable\n [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n [attr.data-placeholder]=\"dir.placeholder() || null\"\n [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"dir.describedBy() || null\"\n [attr.aria-labelledby]=\"dir.labelId() || null\"\n [attr.aria-disabled]=\"dir.disabled() || null\"\n [attr.aria-readonly]=\"dir.readonly() || null\"\n (input)=\"syncValueFromDom()\"\n (beforeinput)=\"interceptFormattingCommand($event)\"\n (keydown)=\"interceptEditorKeydown($event)\"\n (paste)=\"interceptPaste($event)\"\n (drop)=\"interceptDrop($event)\"\n (click)=\"interceptClick($event)\"\n (pointerdown)=\"dir.clearPendingMarks()\"\n (focus)=\"dir.focused.set(true)\"\n (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n class=\"et-rte-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n></div>\n", styles: ["@layer components{@property --et-rich-text-editor-toolbar-gap{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-toolbar-padding{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-button-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-min-height{syntax: \"<length>\"; inherits: true; initial-value: 96px;}@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}et-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0;color:inherit}et-rich-text-editor .et-rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--et-rich-text-editor-toolbar-gap);padding:var(--et-rich-text-editor-toolbar-padding);padding-inline:calc(var(--et-form-field-control-padding-inline) - var(--et-rich-text-editor-toolbar-padding));border-block-end:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);--et-icon-button-border-radius: var(--et-rich-text-editor-button-radius)}et-rich-text-editor .et-rte-toolbar .et-icon-button{--_et-focus-ring-offset: -1px}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{position:fixed;inset-inline:0;inset-block-end:0;z-index:60;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;padding-inline:8px;padding-block-start:6px;padding-block-end:calc(6px + max(var(--_et-rte-keyboard-inset, 0px),env(keyboard-inset-height,0px)));background:var(--et-surface-background-solid, var(--et-surface-2, rgb(24 24 24)));border-block-end:none;border-block-start:var(--et-form-field-control-border-width, 1px) solid color-mix(in srgb,currentColor 12%,transparent);box-shadow:0 -6px 20px #0000003d;scrollbar-width:none;opacity:0;transform:translateY(100%);pointer-events:none;transition:opacity .16s var(--ease-out-5, ease),transform .26s var(--ease-out-5, ease)}et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar::-webkit-scrollbar{display:none}et-rich-text-editor.et-rich-text-editor--touch.et-rich-text-editor--docked-toolbar .et-rte-toolbar{opacity:1;transform:translateY(0);pointer-events:auto}et-rich-text-editor.et-rich-text-editor--touch .et-rte-content{font-size:max(1em,16px)}@media(prefers-reduced-motion:reduce){et-rich-text-editor.et-rich-text-editor--touch .et-rte-toolbar{transition:opacity .16s var(--ease-out-5, ease)}}et-rich-text-editor .et-rte-toolbar .et-divider{--et-divider-color: color-mix(in srgb, currentColor 12%, transparent);--et-divider-spacing: 2px;--et-divider-inset: 4px}et-rich-text-editor .et-rte-content{--et-theme-color-primary-rgb: var(--et-color-primary);--et-theme-color-primary-solid: rgb(var(--et-theme-color-primary-rgb));--et-theme-color-ink-rgb: var(--et-color-primary-ink, var(--et-color-primary));--et-theme-color-ink-solid: rgb(var(--et-theme-color-ink-rgb));display:block;flex:1;min-inline-size:0;padding-block:var(--et-form-field-control-padding-block);padding-inline:var(--et-form-field-control-padding-inline);min-block-size:var(--et-rich-text-editor-min-height);outline:none;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);overflow-wrap:anywhere}et-rich-text-editor .et-rte-content:empty:before{content:attr(data-placeholder);color:color-mix(in srgb,currentColor 46%,transparent);pointer-events:none}et-rich-text-editor .et-rte-content>:first-child{margin-block-start:0}et-rich-text-editor .et-rte-content>:last-child{margin-block-end:0}et-rich-text-editor .et-rte-content p{margin-block:0}et-rich-text-editor .et-rte-content p+p,et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol,et-rich-text-editor .et-rte-content blockquote,et-rich-text-editor .et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1,et-rich-text-editor .et-rte-content h2,et-rich-text-editor .et-rte-content h3,et-rich-text-editor .et-rte-content h4,et-rich-text-editor .et-rte-content h5,et-rich-text-editor .et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}et-rich-text-editor .et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,et-rich-text-editor .et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content h1{font-size:2.4rem}et-rich-text-editor .et-rte-content h2{font-size:2rem}et-rich-text-editor .et-rte-content h3{font-size:1.6rem}et-rich-text-editor .et-rte-content ul,et-rich-text-editor .et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}et-rich-text-editor .et-rte-content ul{list-style-type:disc}et-rich-text-editor .et-rte-content ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul{list-style-type:circle}et-rich-text-editor .et-rte-content ul ul ul,et-rich-text-editor .et-rte-content ul ul ul ul ul ul{list-style-type:square}et-rich-text-editor .et-rte-content ul ul ul ul{list-style-type:disc}et-rich-text-editor .et-rte-content ol{list-style-type:decimal}et-rich-text-editor .et-rte-content ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}et-rich-text-editor .et-rte-content ol ol ol,et-rich-text-editor .et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}et-rich-text-editor .et-rte-content ol ol ol ol{list-style-type:decimal}et-rich-text-editor .et-rte-content li{margin-block:0}et-rich-text-editor .et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}et-rich-text-editor .et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}et-rich-text-editor .et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}et-rich-text-editor .et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}et-rich-text-editor .et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}et-rich-text-editor .et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}et-rich-text-editor .et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}et-rich-text-editor .et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}et-rich-text-editor .et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"], dependencies: [{ kind: "component", type: IconButtonComponent, selector: "[et-icon-button]", inputs: ["variant", "size"] }, { kind: "component", type: DividerComponent, selector: "et-divider", inputs: ["orientation", "decorative"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: ToolbarDirective, selector: "[etToolbar]", inputs: ["orientation"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
39762
39990
|
}
|
|
39763
39991
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RichTextEditorComponent, decorators: [{
|
|
39764
39992
|
type: Component,
|
|
@@ -39769,6 +39997,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
39769
39997
|
directive: RichTextEditorDirective,
|
|
39770
39998
|
inputs: [
|
|
39771
39999
|
'value',
|
|
40000
|
+
'touched',
|
|
39772
40001
|
'disabled',
|
|
39773
40002
|
'readonly',
|
|
39774
40003
|
'hidden',
|
|
@@ -39868,6 +40097,8 @@ class MultiLanguageRichTextEditorComponent {
|
|
|
39868
40097
|
* `null` uses the default toolbar. */
|
|
39869
40098
|
this.tools = input(null, /* @ts-ignore */
|
|
39870
40099
|
...(ngDevMode ? [{ debugName: "tools" }] : /* istanbul ignore next */ []));
|
|
40100
|
+
this.editor = viewChild(RichTextEditorComponent, /* @ts-ignore */
|
|
40101
|
+
...(ngDevMode ? [{ debugName: "editor" }] : /* istanbul ignore next */ []));
|
|
39871
40102
|
/** The embedded editor's tools with the language switcher prepended, so it always leads the bar. */
|
|
39872
40103
|
this.innerTools = computed(() => [
|
|
39873
40104
|
RICH_TEXT_EDITOR_LANGUAGE_TOOL,
|
|
@@ -39876,19 +40107,22 @@ class MultiLanguageRichTextEditorComponent {
|
|
|
39876
40107
|
], /* @ts-ignore */
|
|
39877
40108
|
...(ngDevMode ? [{ debugName: "innerTools" }] : /* istanbul ignore next */ []));
|
|
39878
40109
|
}
|
|
40110
|
+
focus(options) {
|
|
40111
|
+
this.editor()?.focus(options);
|
|
40112
|
+
}
|
|
39879
40113
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MultiLanguageRichTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39880
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
40114
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: MultiLanguageRichTextEditorComponent, isStandalone: true, selector: "et-multi-language-rich-text-editor", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, autoformat: { classPropertyName: "autoformat", publicName: "autoformat", isSignal: true, isRequired: false, transformFunction: null }, tools: { classPropertyName: "tools", publicName: "tools", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-multi-language-rich-text-editor" }, providers: [provideRichTextEditorLanguageTool()], viewQueries: [{ propertyName: "editor", first: true, predicate: RichTextEditorComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: MultiLanguageRichTextEditorDirective, inputs: ["value", "value", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "languages", "languages"], outputs: ["valueChange", "valueChange", "touchedChange", "touchedChange"] }], ngImport: i0, template: "<et-rich-text-editor\n [value]=\"dir.activeMarkdown()\"\n [disabled]=\"dir.disabled()\"\n [readonly]=\"dir.readonly()\"\n [invalid]=\"dir.invalid()\"\n [errors]=\"dir.errors()\"\n [required]=\"dir.required()\"\n [placeholder]=\"placeholder()\"\n [tools]=\"innerTools()\"\n [autoformat]=\"autoformat()\"\n (valueChange)=\"dir.writeActiveMarkdown($event)\"\n (touchedChange)=\"dir.touched.set($event)\"\n/>\n", styles: ["@layer components{.et-multi-language-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0}}\n"], dependencies: [{ kind: "component", type: RichTextEditorComponent, selector: "et-rich-text-editor" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
39881
40115
|
}
|
|
39882
40116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MultiLanguageRichTextEditorComponent, decorators: [{
|
|
39883
40117
|
type: Component,
|
|
39884
40118
|
args: [{ selector: 'et-multi-language-rich-text-editor', encapsulation: ViewEncapsulation.None, imports: [...RICH_TEXT_EDITOR_IMPORTS], providers: [provideRichTextEditorLanguageTool()], hostDirectives: [
|
|
39885
40119
|
{
|
|
39886
40120
|
directive: MultiLanguageRichTextEditorDirective,
|
|
39887
|
-
inputs: ['value', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name', 'languages'],
|
|
40121
|
+
inputs: ['value', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name', 'languages'],
|
|
39888
40122
|
outputs: ['valueChange', 'touchedChange'],
|
|
39889
40123
|
},
|
|
39890
40124
|
], host: { class: 'et-multi-language-rich-text-editor' }, template: "<et-rich-text-editor\n [value]=\"dir.activeMarkdown()\"\n [disabled]=\"dir.disabled()\"\n [readonly]=\"dir.readonly()\"\n [invalid]=\"dir.invalid()\"\n [errors]=\"dir.errors()\"\n [required]=\"dir.required()\"\n [placeholder]=\"placeholder()\"\n [tools]=\"innerTools()\"\n [autoformat]=\"autoformat()\"\n (valueChange)=\"dir.writeActiveMarkdown($event)\"\n (touchedChange)=\"dir.touched.set($event)\"\n/>\n", styles: ["@layer components{.et-multi-language-rich-text-editor{display:flex;flex:1;flex-direction:column;min-inline-size:0}}\n"] }]
|
|
39891
|
-
}], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], autoformat: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoformat", required: false }] }], tools: [{ type: i0.Input, args: [{ isSignal: true, alias: "tools", required: false }] }] } });
|
|
40125
|
+
}], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], autoformat: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoformat", required: false }] }], tools: [{ type: i0.Input, args: [{ isSignal: true, alias: "tools", required: false }] }], editor: [{ type: i0.ViewChild, args: [i0.forwardRef(() => RichTextEditorComponent), { isSignal: true }] }] } });
|
|
39892
40126
|
|
|
39893
40127
|
const MULTI_LANGUAGE_RICH_TEXT_EDITOR_IMPORTS = [
|
|
39894
40128
|
MultiLanguageRichTextEditorComponent,
|
|
@@ -39971,10 +40205,13 @@ class OtpInputDirective {
|
|
|
39971
40205
|
}
|
|
39972
40206
|
}
|
|
39973
40207
|
activate() {
|
|
40208
|
+
this.focus({ preventScroll: true });
|
|
40209
|
+
}
|
|
40210
|
+
focus(options) {
|
|
39974
40211
|
if (this.disabled()) {
|
|
39975
40212
|
return;
|
|
39976
40213
|
}
|
|
39977
|
-
this.nativeControl()?.focus(
|
|
40214
|
+
this.nativeControl()?.focus(options);
|
|
39978
40215
|
}
|
|
39979
40216
|
/** Strips characters outside the charset and truncates to `length` - pastes included. */
|
|
39980
40217
|
sanitize(raw) {
|
|
@@ -40073,6 +40310,9 @@ class OtpInputComponent {
|
|
|
40073
40310
|
hintAnimatable: this.hintAnimatableRef,
|
|
40074
40311
|
});
|
|
40075
40312
|
}
|
|
40313
|
+
focus(options) {
|
|
40314
|
+
this.otp.focus(options);
|
|
40315
|
+
}
|
|
40076
40316
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OtpInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40077
40317
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: OtpInputComponent, isStandalone: true, selector: "et-otp-input", host: { listeners: { "click": "otp.activate()" }, properties: { "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null" }, classAttribute: "et-otp-input" }, providers: [provideFormSupport()], viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true, isSignal: true }, { 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: OtpInputDirective, inputs: ["value", "value", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "length", "length", "charset", "charset", "masked", "masked"], outputs: ["valueChange", "valueChange", "touchedChange", "touchedChange", "complete", "complete"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n<div class=\"et-otp-input-field\">\n <div class=\"et-otp-input-segments\" aria-hidden=\"true\">\n @for (index of segmentIndexes(); track index) {\n <div\n [attr.data-caret]=\"(otp.focused() && otp.caretIndex() === index) || null\"\n [attr.data-filled]=\"otp.segmentChars()[index] !== null || null\"\n class=\"et-otp-input-segment\"\n >\n @if (otp.segmentChars()[index]; as char) {\n <span class=\"et-otp-input-segment-char\">{{ char }}</span>\n } @else if (otp.focused() && otp.caretIndex() === index) {\n <span class=\"et-otp-input-caret\"></span>\n }\n </div>\n }\n </div>\n\n <!-- one real input stretched invisibly over the segments: reliable SMS autofill\n (autocomplete=\"one-time-code\") and native paste for free -->\n <input\n #nativeInput\n [attr.aria-describedby]=\"otp.describedBy() || null\"\n [attr.aria-invalid]=\"otp.shouldDisplayError() || null\"\n [attr.aria-labelledby]=\"otp.labelId() || null\"\n [attr.inputmode]=\"otp.inputMode()\"\n [attr.maxlength]=\"otp.length()\"\n [attr.name]=\"otp.name() || null\"\n [disabled]=\"otp.disabled()\"\n [readOnly]=\"otp.readonly()\"\n [required]=\"otp.required()\"\n [value]=\"otp.value()\"\n (blur)=\"otp.handleNativeBlur()\"\n (focus)=\"otp.handleNativeFocus()\"\n (input)=\"otp.handleNativeInput()\"\n (keyup)=\"otp.handleNativeSelectionEvent()\"\n (mouseup)=\"otp.handleNativeSelectionEvent()\"\n class=\"et-otp-input-native\"\n autocapitalize=\"off\"\n autocomplete=\"one-time-code\"\n spellcheck=\"false\"\n type=\"text\"\n />\n</div>\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-otp-input-support\">\n <div class=\"et-otp-input-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-otp-input-support-content et-otp-input-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-otp-input-support-content et-otp-input-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-otp-input-support-content et-otp-input-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@keyframes et-otp-input-caret-blink{0%{opacity:1}to{opacity:0}}@property --et-otp-input-segment-size{syntax: \"<length>\"; inherits: true; initial-value: 44px;}@property --et-otp-input-segment-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-otp-input-segment-radius{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-otp-input-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}@property --et-otp-input-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-otp-input-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-otp-input-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-otp-input-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-otp-input-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}et-otp-input{display:inline-flex;flex-direction:column;gap:6px;color:var(--et-surface-color-solid, currentColor)}et-otp-input>et-label{font-size:var(--et-otp-input-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-otp-input .et-otp-input-field{position:relative;inline-size:fit-content}et-otp-input .et-otp-input-segments{display:flex;gap:var(--et-otp-input-segment-gap)}et-otp-input .et-otp-input-segment{display:flex;align-items:center;justify-content:center;inline-size:var(--et-otp-input-segment-size);block-size:var(--et-otp-input-segment-size);border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));border-radius:var(--et-otp-input-segment-radius);font-size:calc(var(--et-otp-input-segment-size) * .45);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none}et-otp-input .et-otp-input-segment[data-caret]{border-color:var(--et-theme-color-primary-solid, currentColor);outline:1px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:-1px}et-otp-input .et-otp-input-segment .et-otp-input-segment-char{display:block}et-otp-input .et-otp-input-segment .et-otp-input-caret{inline-size:2px;block-size:1.1em;border-radius:1px;background:var(--et-theme-color-primary-solid, currentColor);animation:et-otp-input-caret-blink 1.1s steps(2,jump-none) infinite}et-otp-input .et-otp-input-native{position:absolute;inset:0;inline-size:100%;block-size:100%;border:none;outline:none;padding:0;margin:0;background:transparent;color:transparent;caret-color:transparent;font-size:max(1em,16px)}et-otp-input .et-otp-input-native::selection{background:transparent}et-otp-input .et-otp-input-native:disabled{cursor:not-allowed}et-otp-input[data-error] .et-otp-input-segment{border-color:var(--et-theme-color-primary-solid, currentColor)}et-otp-input:has(.et-otp-input-native:disabled){opacity:.4}et-otp-input:has(.et-otp-input-native:disabled) .et-otp-input-segment{-webkit-user-select:none;user-select:none}et-otp-input .et-otp-input-support{overflow:clip;block-size:0}et-otp-input .et-otp-input-support-stack{position:relative;display:grid}et-otp-input .et-otp-input-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-otp-input .et-otp-input-support-content[data-active]{opacity:1;transform:translateY(0)}et-otp-input .et-otp-input-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-otp-input-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-otp-input .et-otp-input-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-otp-input-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-otp-input .et-otp-input-hint{padding-block-start:4px;font-size:var(--et-otp-input-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-otp-input .et-otp-input-hint:empty{display:none}et-otp-input[data-can-animate] .et-otp-input-support{transition:block-size var(--et-otp-input-support-duration) ease}et-otp-input[data-can-animate] .et-otp-input-support-content{transition:opacity var(--et-otp-input-support-duration) ease,transform var(--et-otp-input-support-duration) ease}@starting-style{et-otp-input[data-can-animate] .et-otp-input-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-otp-input-support-offset) * -1))}}et-otp-input[data-can-animate] .et-otp-input-segment{transition:border-color .12s ease,outline-color .12s ease}et-otp-input[data-can-animate] .et-otp-input-segment-char{transition:transform .14s cubic-bezier(.2,1.4,.4,1),opacity .1s ease}@starting-style{et-otp-input[data-can-animate] .et-otp-input-segment-char{transform:scale(.4);opacity:0}}@media(prefers-reduced-motion:reduce){et-otp-input{--et-otp-input-support-duration: 1ms;--et-otp-input-support-offset: 0px}et-otp-input .et-otp-input-caret{animation:none}}}\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 }); }
|
|
40078
40318
|
}
|
|
@@ -40465,10 +40705,13 @@ class PhoneInputDirective {
|
|
|
40465
40705
|
this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
40466
40706
|
}
|
|
40467
40707
|
activate() {
|
|
40708
|
+
this.focus();
|
|
40709
|
+
}
|
|
40710
|
+
focus(options) {
|
|
40468
40711
|
if (this.disabled()) {
|
|
40469
40712
|
return;
|
|
40470
40713
|
}
|
|
40471
|
-
this.registeredField()?.focus();
|
|
40714
|
+
this.registeredField()?.focus(options);
|
|
40472
40715
|
}
|
|
40473
40716
|
/** Clears the number (the selected country stays) - wired to the styled input's clear button. */
|
|
40474
40717
|
clearValue() {
|
|
@@ -40580,8 +40823,8 @@ class PhoneInputFieldDirective {
|
|
|
40580
40823
|
}
|
|
40581
40824
|
}
|
|
40582
40825
|
/** @internal */
|
|
40583
|
-
focus() {
|
|
40584
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
40826
|
+
focus(options) {
|
|
40827
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
40585
40828
|
}
|
|
40586
40829
|
handleInput() {
|
|
40587
40830
|
this.phoneInput?.setNationalInput(this.elementRef.nativeElement.value);
|
|
@@ -40808,6 +41051,10 @@ const SELECT_FILTER_MODES = {
|
|
|
40808
41051
|
/** The consumer reacts to `queryChange` (drives an `@for` / a query); the select hides nothing. */
|
|
40809
41052
|
EXTERNAL: 'external',
|
|
40810
41053
|
};
|
|
41054
|
+
// Above this many visible data-driven rows the select windows their rendering. Comfortably past
|
|
41055
|
+
// what a panel shows at once (its default max height over the row estimate, plus overscan on
|
|
41056
|
+
// both sides), so a list that windowing would render in full anyway stays unwindowed.
|
|
41057
|
+
const VIRTUALIZATION_MIN_ITEMS = 40;
|
|
40811
41058
|
const defaultNormalizeCustomValue = (raw) => {
|
|
40812
41059
|
const trimmed = raw.trim();
|
|
40813
41060
|
return trimmed.length ? trimmed : null;
|
|
@@ -40844,10 +41091,11 @@ class SelectDirective {
|
|
|
40844
41091
|
...(ngDevMode ? [{ debugName: "mixedLabel" }] : /* istanbul ignore next */ []));
|
|
40845
41092
|
/**
|
|
40846
41093
|
* Data-driven options: the select owns the option rows instead of the consumer projecting
|
|
40847
|
-
* `et-select-option`s
|
|
40848
|
-
* viewport exist in the DOM, so lists with thousands of entries stay cheap
|
|
40849
|
-
* `virtualizedItems()` between the `virtualWindow` block
|
|
40850
|
-
* plain `label` or an `etSelectOptionTemplate`. Values must be
|
|
41094
|
+
* `et-select-option`s. Long lists have their rendering windowed (virtualization) - only rows
|
|
41095
|
+
* near the viewport exist in the DOM, so lists with thousands of entries stay cheap; short
|
|
41096
|
+
* ones render in full. Renders via `virtualizedItems()` between the `virtualWindow` block
|
|
41097
|
+
* paddings; row content is the plain `label` or an `etSelectOptionTemplate`. Values must be
|
|
41098
|
+
* unique. Can be combined
|
|
40851
41099
|
* with projected options (e.g. a pinned row), which render normally and are not windowed.
|
|
40852
41100
|
*/
|
|
40853
41101
|
this.options = input(null, /* @ts-ignore */
|
|
@@ -41150,22 +41398,30 @@ class SelectDirective {
|
|
|
41150
41398
|
/** @internal The query-visible slice of data-driven options - the virtual window renders these. */
|
|
41151
41399
|
this.visibleDataItems = computed(() => this.visibleItems().filter((item) => !!item.data), /* @ts-ignore */
|
|
41152
41400
|
...(ngDevMode ? [{ debugName: "visibleDataItems" }] : /* istanbul ignore next */ []));
|
|
41401
|
+
/**
|
|
41402
|
+
* @internal Whether the data-driven rows are windowed. A list that stays near a panel's
|
|
41403
|
+
* worth of rows renders in full: windowing it would render all of them anyway (viewport
|
|
41404
|
+
* plus overscan) while still costing a scroll listener, per-row mount churn and the
|
|
41405
|
+
* viewport's width floor.
|
|
41406
|
+
*/
|
|
41407
|
+
this.windowsOptions = computed(() => this.visibleDataItems().length > VIRTUALIZATION_MIN_ITEMS, /* @ts-ignore */
|
|
41408
|
+
...(ngDevMode ? [{ debugName: "windowsOptions" }] : /* istanbul ignore next */ []));
|
|
41153
41409
|
/**
|
|
41154
41410
|
* The window over the data-driven rows: `paddingTop()`/`paddingBottom()` stand in for the
|
|
41155
41411
|
* scroll height of everything outside `virtualizedItems()` - apply them as block paddings
|
|
41156
41412
|
* around the rendered rows.
|
|
41157
41413
|
*/
|
|
41158
41414
|
this.virtualWindow = createVirtualWindow({
|
|
41159
|
-
// only meaningful with data-driven options -
|
|
41160
|
-
container: computed(() =>
|
|
41415
|
+
// only meaningful with enough data-driven options - otherwise don't track the viewport at all
|
|
41416
|
+
container: computed(() => this.windowsOptions() ? (this.registeredViewport()?.elementRef.nativeElement ?? null) : null),
|
|
41161
41417
|
itemCount: computed(() => this.visibleDataItems().length),
|
|
41162
41418
|
estimateItemHeight: 36,
|
|
41163
41419
|
overscan: 5,
|
|
41164
41420
|
});
|
|
41165
41421
|
/**
|
|
41166
|
-
* The windowed slice of data-driven options to render - every visible one while
|
|
41167
|
-
* `etSelectViewport` is registered. Render with
|
|
41168
|
-
* `virtualWindow` block paddings.
|
|
41422
|
+
* The windowed slice of data-driven options to render - every visible one while the list is
|
|
41423
|
+
* short enough to render in full or no `etSelectViewport` is registered. Render with
|
|
41424
|
+
* `etSelectVirtualOption` rows between the `virtualWindow` block paddings.
|
|
41169
41425
|
*/
|
|
41170
41426
|
this.virtualizedItems = computed(() => {
|
|
41171
41427
|
const items = this.visibleDataItems();
|
|
@@ -41403,15 +41659,18 @@ class SelectDirective {
|
|
|
41403
41659
|
}
|
|
41404
41660
|
}
|
|
41405
41661
|
activate() {
|
|
41662
|
+
this.focus({ preventScroll: true });
|
|
41663
|
+
}
|
|
41664
|
+
focus(options) {
|
|
41406
41665
|
if (this.disabled()) {
|
|
41407
41666
|
return;
|
|
41408
41667
|
}
|
|
41409
41668
|
const search = this.registeredSearch();
|
|
41410
41669
|
if (search) {
|
|
41411
|
-
search.focus();
|
|
41670
|
+
search.focus(options);
|
|
41412
41671
|
return;
|
|
41413
41672
|
}
|
|
41414
|
-
this.registeredTrigger()?.elementRef.nativeElement.focus(
|
|
41673
|
+
this.registeredTrigger()?.elementRef.nativeElement.focus(options);
|
|
41415
41674
|
}
|
|
41416
41675
|
/** @internal Commits an option as the (or a) selected value. Single select closes afterwards. */
|
|
41417
41676
|
commitOption(item) {
|
|
@@ -42322,7 +42581,29 @@ class SelectSearchDirective {
|
|
|
42322
42581
|
return ids.filter((id) => !!id).join(' ') || null;
|
|
42323
42582
|
}, /* @ts-ignore */
|
|
42324
42583
|
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
42584
|
+
// the last placeholder this directive wrote - anything else on the element came from the
|
|
42585
|
+
// consumer (a static attribute or their own binding) and owns it from then on
|
|
42586
|
+
this.writtenPlaceholder = null;
|
|
42587
|
+
// an inline input replaces the trigger's value display, so it also has to carry the select's
|
|
42588
|
+
// placeholder - the trigger renders none while a search is registered
|
|
42589
|
+
this.fallbackPlaceholder = computed(() => {
|
|
42590
|
+
const select = this.select;
|
|
42591
|
+
if (!select || !this.isInlineInTrigger() || select.hasValue()) {
|
|
42592
|
+
return '';
|
|
42593
|
+
}
|
|
42594
|
+
return select.placeholder();
|
|
42595
|
+
}, /* @ts-ignore */
|
|
42596
|
+
...(ngDevMode ? [{ debugName: "fallbackPlaceholder" }] : /* istanbul ignore next */ []));
|
|
42325
42597
|
registerSingleton(this.select?.registeredSearch, this);
|
|
42598
|
+
effect(() => {
|
|
42599
|
+
const placeholder = this.fallbackPlaceholder();
|
|
42600
|
+
const element = this.elementRef.nativeElement;
|
|
42601
|
+
if (element.placeholder && element.placeholder !== this.writtenPlaceholder) {
|
|
42602
|
+
return;
|
|
42603
|
+
}
|
|
42604
|
+
this.writtenPlaceholder = placeholder;
|
|
42605
|
+
element.placeholder = placeholder;
|
|
42606
|
+
});
|
|
42326
42607
|
effect(() => {
|
|
42327
42608
|
const element = this.elementRef.nativeElement;
|
|
42328
42609
|
const query = this.query();
|
|
@@ -42366,8 +42647,8 @@ class SelectSearchDirective {
|
|
|
42366
42647
|
return this.document.activeElement === this.elementRef.nativeElement;
|
|
42367
42648
|
}
|
|
42368
42649
|
/** @internal */
|
|
42369
|
-
focus() {
|
|
42370
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
42650
|
+
focus(options) {
|
|
42651
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
42371
42652
|
}
|
|
42372
42653
|
/** @internal Selects a displayed value label on open, so typing replaces it (single select). */
|
|
42373
42654
|
handleOpened() {
|
|
@@ -42782,7 +43063,7 @@ class SelectViewportDirective {
|
|
|
42782
43063
|
// scroll, as long labels enter and leave the window
|
|
42783
43064
|
this.locksWidth = computed(() => {
|
|
42784
43065
|
const select = this.select;
|
|
42785
|
-
return !!select?.
|
|
43066
|
+
return !!select?.windowsOptions() && !select.mirrorPanelWidth();
|
|
42786
43067
|
}, /* @ts-ignore */
|
|
42787
43068
|
...(ngDevMode ? [{ debugName: "locksWidth" }] : /* istanbul ignore next */ []));
|
|
42788
43069
|
this.widthFloor = linkedSignal({ ...(ngDevMode ? { debugName: "widthFloor" } : /* istanbul ignore next */ {}),
|
|
@@ -43470,8 +43751,11 @@ class SelectComponent {
|
|
|
43470
43751
|
this.select.toggle();
|
|
43471
43752
|
this.select.activate();
|
|
43472
43753
|
}
|
|
43754
|
+
focus(options) {
|
|
43755
|
+
this.select.focus(options);
|
|
43756
|
+
}
|
|
43473
43757
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43474
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SelectComponent, isStandalone: true, selector: "et-select", inputs: { loadMoreLabel: { classPropertyName: "loadMoreLabel", publicName: "loadMoreLabel", isSignal: true, isRequired: false, transformFunction: null }, addNewLabel: { classPropertyName: "addNewLabel", publicName: "addNewLabel", isSignal: true, isRequired: false, transformFunction: null }, createLabel: { classPropertyName: "createLabel", publicName: "createLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-select" }, providers: [provideIcons(CHEVRON_ICON, TIMES_ICON, PLUS_ICON)], hostDirectives: [{ directive: SelectDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "open", "open", "multiple", "multiple", "placeholder", "placeholder", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "options", "options", "filterMode", "filterMode", "allowCustomValues", "allowCustomValues", "customValueSeparators", "customValueSeparators", "normalizeCustomValue", "normalizeCustomValue", "commitCustomValueOnClose", "commitCustomValueOnClose", "maxSelection", "maxSelection", "allowAddNew", "allowAddNew", "loading", "loading", "error", "error", "hasMoreItems", "hasMoreItems", "pickOnly", "pickOnly", "mirrorPanelWidth", "mirrorPanelWidth", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "openChange", "openChange", "queryChange", "queryChange", "loadMore", "loadMore", "addNew", "addNew", "pickOption", "pickOption"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<!-- a div, not a <button>: chips carry remove buttons and buttons cannot nest.\n The trigger directive manages tabindex/aria-disabled for non-button hosts. -->\n<div class=\"et-select-trigger\" etSelectTrigger>\n <div [class.et-select-trigger-content--stacked]=\"stackedValue()\" class=\"et-select-trigger-content\">\n @if (select.mixed()) {\n @if (showValueLabel()) {\n <span [id]=\"mixedLabelId\" class=\"et-select-value\">{{ select.displayValue() }}</span>\n }\n } @else if (select.registeredValueTemplate(); as valueTemplate) {\n @if (showCustomValue()) {\n <div class=\"et-select-value-custom\">\n <ng-template [ngTemplateOutlet]=\"valueTemplate.templateRef\" [ngTemplateOutletContext]=\"valueContext()\" />\n </div>\n }\n } @else if (select.multiple() && select.selectedEntries().length) {\n <!-- display: contents \u2014 the chips share the trigger's wrapping flex flow with the\n inline search input, tag-input style -->\n <!-- readonly is not disabled: the chips keep their normal look, they just lose the\n remove affordance -->\n <div class=\"et-select-chips\">\n @for (entry of select.selectedEntries(); track entry.value) {\n <et-chip\n [disabled]=\"select.disabled()\"\n [removable]=\"!select.readonly() && !select.disabled()\"\n (remove)=\"select.deselectValue(entry.value)\"\n >\n {{ entry.label }}\n </et-chip>\n }\n </div>\n }\n\n @if (!select.mixed() && showValueLabel()) {\n <span [attr.data-placeholder]=\"!select.hasValue() || null\" class=\"et-select-value\">\n {{ select.displayValue() ?? select.placeholder() }}\n </span>\n }\n\n <!-- combobox pattern: the search input sits inline in the field, not in the panel -->\n <ng-content select=\"input[etSelectSearch]\" />\n </div>\n\n <!-- async option state, surfaced in the field itself (mirrors the menu's search spinner) \u2014\n only while the panel is closed; open, the panel carries the news. Overlays the value's tail\n behind a fade instead of claiming a column of its own, so the value never re-wraps for it -->\n @if (select.showLoadingIndicator() && !select.open()) {\n <div class=\"et-select-trigger-busy\" animate.enter=\"et-select-trigger-busy--enter\">\n <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n </div>\n }\n</div>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear via Backspace / erasing.\n mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a\n blur would unmount this button before the click could land -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <!-- pointer-only affordance (keyboard users close via Escape) \u2014 kept out of the tab order -->\n <button\n [disabled]=\"select.disabled()\"\n (click)=\"handleArrowClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-picker-trigger et-select-arrow\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #optionContent>\n <ng-content />\n</ng-template>\n\n@if (!select.isMounted()) {\n <!-- keeps the projected options rendered (and their bindings live) while the panel is\n closed, so the trigger can resolve a preselected value's label and closed typeahead\n works \u2014 the same template moves into the overlay while it is open -->\n <div class=\"et-select-detached-options\" aria-hidden=\"true\" hidden>\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n </div>\n}\n\n<ng-template etSelectSurface>\n <et-select-panel>\n @if (select.options()) {\n <!-- data-driven mode: the select owns the option rows and windows their rendering \u2014\n only rows near the viewport exist in the DOM; the block paddings stand in for the\n scroll height of everything outside the window -->\n <div\n [style.padding-block-start.px]=\"select.virtualWindow.paddingTop()\"\n [style.padding-block-end.px]=\"select.virtualWindow.paddingBottom()\"\n class=\"et-select-virtual-options\"\n role=\"none\"\n >\n @for (item of select.virtualizedItems(); track item.value()) {\n <et-select-virtual-option [item]=\"item\" />\n }\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n\n <!-- a real option (not an action row like add-new): it takes part in virtual focus, so\n Enter commits it and it is keyboard-reachable while options still match the query.\n Its label is the candidate itself \u2014 that is what commits and what the label cache\n stores; the \"Create\" prefix is display-only. -->\n @if (select.customValueCandidate(); as candidate) {\n <et-select-option [value]=\"candidate\" [label]=\"candidate\" class=\"et-select-create-option\" customValueOption>\n <i class=\"et-select-create-option-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedCreateLabel() }} \u201C{{ candidate }}\u201D\n </et-select-option>\n }\n\n <!-- state rows and action buttons are NOT options \u2014 projected outside the listbox element\n (display: contents, so they still flow within the scrolling panel) -->\n <div class=\"et-select-panel-extras\" etSelectPanelExtras>\n <!-- Refetching over options that are already on screen: they stay put and a 2px indeterminate\n bar at the panel's top edge carries the news (the table does the same over its rows). Out\n of flow on purpose \u2014 a bar that took a row's worth of space would resize the panel. -->\n @if (showBusyBar()) {\n <div class=\"et-select-busy-bar\" role=\"presentation\" aria-hidden=\"true\"></div>\n }\n\n @if (showLoadingRow()) {\n <!-- The row is here from the first frame so the panel opens at the height the options will\n need, but its content waits for `showLoadingIndicator()`: a response that lands inside\n that window replaces an empty row rather than a spinner nobody had time to read. -->\n @if (select.registeredLoadingTemplate(); as loadingTemplate) {\n @if (select.showLoadingIndicator()) {\n <ng-template [ngTemplateOutlet]=\"loadingTemplate.templateRef\" />\n }\n } @else {\n <div class=\"et-select-state et-select-state--loading\">\n <!-- laid out from the first frame and only faded in later, so the row cannot change\n height when the spinner arrives; hidden from assistive tech until it does -->\n <span\n [class.et-select-state-content--visible]=\"select.showLoadingIndicator()\"\n [attr.aria-hidden]=\"!select.showLoadingIndicator() || null\"\n class=\"et-select-state-content\"\n >\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </span>\n </div>\n }\n } @else if (select.error(); as error) {\n @if (select.registeredErrorTemplate(); as errorTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"errorTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error }\"\n />\n } @else {\n <div [etProvideColor]=\"errorColorTheme\" class=\"et-select-state et-select-state--error\" role=\"alert\">\n {{ error }}\n </div>\n }\n } @else if (!select.visibleItems().length) {\n @if (select.registeredEmptyTemplate(); as emptyTemplate) {\n <ng-template [ngTemplateOutlet]=\"emptyTemplate.templateRef\" />\n } @else {\n <div class=\"et-select-state et-select-state--empty\">{{ selectLabels().empty }}</div>\n }\n }\n\n @if (select.hasMoreItems() && !showLoadingRow()) {\n @if (showLoadMoreLoading()) {\n <!-- the control's own box, minus the control: same height, same separator, so the page\n that is on its way is announced without moving anything -->\n <div class=\"et-select-load-more et-select-load-more--loading\" aria-live=\"polite\">\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </div>\n } @else {\n <!-- disabled while its page loads: `requestLoadMore` is a no-op until that settles, and a\n live-looking control that does nothing reads as broken -->\n <button\n [disabled]=\"select.loading()\"\n (click)=\"select.requestLoadMore()\"\n class=\"et-select-load-more\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i class=\"et-select-load-more-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n {{ resolvedLoadMoreLabel() }}\n </button>\n }\n }\n\n @if (select.allowAddNew() && !showLoadingRow()) {\n <!-- pointer-only, like the load-more control \u2014 keyboard users reach the same flow\n through the consumer's own UI (e.g. a button next to the field) -->\n <button (click)=\"select.requestAddNew()\" class=\"et-select-add-new\" tabindex=\"-1\" type=\"button\">\n <i class=\"et-select-add-new-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedAddNewLabel() }}\n </button>\n }\n </div>\n </et-select-panel>\n</ng-template>\n", styles: ["@layer components{et-select{display:flex;align-items:center;gap:6px;flex:1;min-inline-size:0;color:inherit}et-select .et-select-trigger{display:flex;align-items:center;gap:6px;flex:1;outline:none;color:inherit;min-inline-size:0;text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation}et-select .et-select-trigger[data-disabled]{cursor:not-allowed}et-select .et-select-trigger[data-readonly]{cursor:default}et-select .et-select-trigger .et-select-trigger-content{display:flex;flex-wrap:wrap;align-items:center;gap:6px;flex:1;min-inline-size:0}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked{display:grid;grid-template-columns:minmax(0,1fr)}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked>*{grid-area:1 / 1}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked:has(.et-select-value-custom) input[etselectsearch]{caret-color:transparent}et-select .et-select-trigger input[etselectsearch]{flex:1 1 60px;min-inline-size:60px;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);cursor:text}et-select .et-select-trigger input[etselectsearch]::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-select .et-select-trigger input[etselectsearch]:disabled{cursor:not-allowed}et-select .et-select-trigger:has(input[etselectsearch]) .et-select-value{flex:0 1 auto}et-select .et-select-value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-inline-size:0}et-select .et-select-value[data-placeholder]{color:color-mix(in srgb,currentColor 46%,transparent)}et-select[data-mixed] .et-select-value,et-select[data-mixed] input[etselectsearch]:not(:focus){font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-select .et-select-value-custom{display:flex;align-items:center;flex:1;min-inline-size:0}et-select .et-select-trigger-content:has(input[etselectsearch]) .et-select-value-custom{flex:0 1 auto}et-select .et-select-trigger-content:has(.et-select-value-custom) input[etselectsearch]::placeholder{color:transparent}et-select .et-select-chips{display:contents}et-select .et-select-trigger-busy{--_et-select-trigger-busy-fade: 24px;position:relative;display:flex;align-items:center;align-self:stretch;flex:none;padding-inline-start:var(--_et-select-trigger-busy-fade);margin-inline-start:calc(-1 * (var(--_et-select-trigger-busy-fade) + 16px + 6px));background:linear-gradient(to right,transparent,var(--et-surface-background-solid, transparent) var(--_et-select-trigger-busy-fade));color:var(--et-surface-color-muted-solid, currentColor)}et-select .et-select-trigger-busy--enter{animation:et-select-busy-in .12s ease}@media(prefers-reduced-motion:reduce){et-select .et-select-trigger-busy--enter{animation:none}}.et-select-arrow .et-icon{rotate:180deg}@keyframes et-select-busy-in{0%{opacity:0}}}\n"], dependencies: [{ kind: "directive", type: SelectTriggerDirective, selector: "[etSelectTrigger]", exportAs: ["etSelectTrigger"] }, { kind: "directive", type: SelectSurfaceDirective, selector: "ng-template[etSelectSurface]", exportAs: ["etSelectSurface"] }, { kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "component", type: SelectPanelComponent, selector: "et-select-panel" }, { kind: "component", type: SelectOptionComponent, selector: "et-select-option" }, { kind: "component", type: SelectVirtualOptionComponent, selector: "et-select-virtual-option" }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ChipComponent, selector: "et-chip" }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
43758
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SelectComponent, isStandalone: true, selector: "et-select", inputs: { loadMoreLabel: { classPropertyName: "loadMoreLabel", publicName: "loadMoreLabel", isSignal: true, isRequired: false, transformFunction: null }, addNewLabel: { classPropertyName: "addNewLabel", publicName: "addNewLabel", isSignal: true, isRequired: false, transformFunction: null }, createLabel: { classPropertyName: "createLabel", publicName: "createLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-select" }, providers: [provideIcons(CHEVRON_ICON, TIMES_ICON, PLUS_ICON)], hostDirectives: [{ directive: SelectDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "open", "open", "multiple", "multiple", "placeholder", "placeholder", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "options", "options", "filterMode", "filterMode", "allowCustomValues", "allowCustomValues", "customValueSeparators", "customValueSeparators", "normalizeCustomValue", "normalizeCustomValue", "commitCustomValueOnClose", "commitCustomValueOnClose", "maxSelection", "maxSelection", "allowAddNew", "allowAddNew", "loading", "loading", "error", "error", "hasMoreItems", "hasMoreItems", "pickOnly", "pickOnly", "mirrorPanelWidth", "mirrorPanelWidth", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange", "openChange", "openChange", "queryChange", "queryChange", "loadMore", "loadMore", "addNew", "addNew", "pickOption", "pickOption"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<!-- a div, not a <button>: chips carry remove buttons and buttons cannot nest.\n The trigger directive manages tabindex/aria-disabled for non-button hosts. -->\n<div class=\"et-select-trigger\" etSelectTrigger>\n <div [class.et-select-trigger-content--stacked]=\"stackedValue()\" class=\"et-select-trigger-content\">\n @if (select.mixed()) {\n @if (showValueLabel()) {\n <span [id]=\"mixedLabelId\" class=\"et-select-value\">{{ select.displayValue() }}</span>\n }\n } @else if (select.registeredValueTemplate(); as valueTemplate) {\n @if (showCustomValue()) {\n <div class=\"et-select-value-custom\">\n <ng-template [ngTemplateOutlet]=\"valueTemplate.templateRef\" [ngTemplateOutletContext]=\"valueContext()\" />\n </div>\n }\n } @else if (select.multiple() && select.selectedEntries().length) {\n <!-- display: contents \u2014 the chips share the trigger's wrapping flex flow with the\n inline search input, tag-input style -->\n <!-- readonly is not disabled: the chips keep their normal look, they just lose the\n remove affordance -->\n <div class=\"et-select-chips\">\n @for (entry of select.selectedEntries(); track entry.value) {\n <et-chip\n [disabled]=\"select.disabled()\"\n [removable]=\"!select.readonly() && !select.disabled()\"\n (remove)=\"select.deselectValue(entry.value)\"\n >\n {{ entry.label }}\n </et-chip>\n }\n </div>\n }\n\n @if (!select.mixed() && showValueLabel()) {\n <span [attr.data-placeholder]=\"!select.hasValue() || null\" class=\"et-select-value\">\n {{ select.displayValue() ?? select.placeholder() }}\n </span>\n }\n\n <!-- combobox pattern: the search input sits inline in the field, not in the panel -->\n <ng-content select=\"input[etSelectSearch]\" />\n </div>\n\n <!-- async option state, surfaced in the field itself (mirrors the menu's search spinner) \u2014\n only while the panel is closed; open, the panel carries the news. Overlays the value's tail\n behind a fade instead of claiming a column of its own, so the value never re-wraps for it -->\n @if (select.showLoadingIndicator() && !select.open()) {\n <div class=\"et-select-trigger-busy\" animate.enter=\"et-select-trigger-busy--enter\">\n <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n </div>\n }\n</div>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear via Backspace / erasing.\n mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a\n blur would unmount this button before the click could land -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <!-- pointer-only affordance (keyboard users close via Escape) \u2014 kept out of the tab order -->\n <button\n [disabled]=\"select.disabled()\"\n (click)=\"handleArrowClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-picker-trigger et-select-arrow\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #optionContent>\n <ng-content />\n</ng-template>\n\n@if (!select.isMounted()) {\n <!-- keeps the projected options rendered (and their bindings live) while the panel is\n closed, so the trigger can resolve a preselected value's label and closed typeahead\n works \u2014 the same template moves into the overlay while it is open -->\n <div class=\"et-select-detached-options\" aria-hidden=\"true\" hidden>\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n </div>\n}\n\n<ng-template etSelectSurface>\n <et-select-panel>\n @if (select.options()) {\n <!-- data-driven mode: the select owns the option rows and windows the rendering of a long\n list \u2014 only rows near the viewport exist in the DOM; the block paddings stand in for\n the scroll height of everything outside the window -->\n <div\n [style.padding-block-start.px]=\"select.virtualWindow.paddingTop()\"\n [style.padding-block-end.px]=\"select.virtualWindow.paddingBottom()\"\n class=\"et-select-virtual-options\"\n role=\"none\"\n >\n @for (item of select.virtualizedItems(); track item.value()) {\n <et-select-virtual-option [item]=\"item\" />\n }\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n\n <!-- a real option (not an action row like add-new): it takes part in virtual focus, so\n Enter commits it and it is keyboard-reachable while options still match the query.\n Its label is the candidate itself \u2014 that is what commits and what the label cache\n stores; the \"Create\" prefix is display-only. -->\n @if (select.customValueCandidate(); as candidate) {\n <et-select-option [value]=\"candidate\" [label]=\"candidate\" class=\"et-select-create-option\" customValueOption>\n <i class=\"et-select-create-option-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedCreateLabel() }} \u201C{{ candidate }}\u201D\n </et-select-option>\n }\n\n <!-- state rows and action buttons are NOT options \u2014 projected outside the listbox element\n (display: contents, so they still flow within the scrolling panel) -->\n <div class=\"et-select-panel-extras\" etSelectPanelExtras>\n <!-- Refetching over options that are already on screen: they stay put and a 2px indeterminate\n bar at the panel's top edge carries the news (the table does the same over its rows). Out\n of flow on purpose \u2014 a bar that took a row's worth of space would resize the panel. -->\n @if (showBusyBar()) {\n <div class=\"et-select-busy-bar\" role=\"presentation\" aria-hidden=\"true\"></div>\n }\n\n @if (showLoadingRow()) {\n <!-- The row is here from the first frame so the panel opens at the height the options will\n need, but its content waits for `showLoadingIndicator()`: a response that lands inside\n that window replaces an empty row rather than a spinner nobody had time to read. -->\n @if (select.registeredLoadingTemplate(); as loadingTemplate) {\n @if (select.showLoadingIndicator()) {\n <ng-template [ngTemplateOutlet]=\"loadingTemplate.templateRef\" />\n }\n } @else {\n <div class=\"et-select-state et-select-state--loading\">\n <!-- laid out from the first frame and only faded in later, so the row cannot change\n height when the spinner arrives; hidden from assistive tech until it does -->\n <span\n [class.et-select-state-content--visible]=\"select.showLoadingIndicator()\"\n [attr.aria-hidden]=\"!select.showLoadingIndicator() || null\"\n class=\"et-select-state-content\"\n >\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </span>\n </div>\n }\n } @else if (select.error(); as error) {\n @if (select.registeredErrorTemplate(); as errorTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"errorTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error }\"\n />\n } @else {\n <div [etProvideColor]=\"errorColorTheme\" class=\"et-select-state et-select-state--error\" role=\"alert\">\n {{ error }}\n </div>\n }\n } @else if (!select.visibleItems().length) {\n @if (select.registeredEmptyTemplate(); as emptyTemplate) {\n <ng-template [ngTemplateOutlet]=\"emptyTemplate.templateRef\" />\n } @else {\n <div class=\"et-select-state et-select-state--empty\">{{ selectLabels().empty }}</div>\n }\n }\n\n @if (select.hasMoreItems() && !showLoadingRow()) {\n @if (showLoadMoreLoading()) {\n <!-- the control's own box, minus the control: same height, same separator, so the page\n that is on its way is announced without moving anything -->\n <div class=\"et-select-load-more et-select-load-more--loading\" aria-live=\"polite\">\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </div>\n } @else {\n <!-- disabled while its page loads: `requestLoadMore` is a no-op until that settles, and a\n live-looking control that does nothing reads as broken -->\n <button\n [disabled]=\"select.loading()\"\n (click)=\"select.requestLoadMore()\"\n class=\"et-select-load-more\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i class=\"et-select-load-more-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n {{ resolvedLoadMoreLabel() }}\n </button>\n }\n }\n\n @if (select.allowAddNew() && !showLoadingRow()) {\n <!-- pointer-only, like the load-more control \u2014 keyboard users reach the same flow\n through the consumer's own UI (e.g. a button next to the field) -->\n <button (click)=\"select.requestAddNew()\" class=\"et-select-add-new\" tabindex=\"-1\" type=\"button\">\n <i class=\"et-select-add-new-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedAddNewLabel() }}\n </button>\n }\n </div>\n </et-select-panel>\n</ng-template>\n", styles: ["@layer components{et-select{--_et-select-trigger-busy-fade: 24px;--_et-select-trigger-busy-cover: 16px;--_et-select-trigger-busy-mask-direction: to right;display:flex;align-items:center;gap:6px;flex:1;min-inline-size:0;color:inherit}et-select .et-select-trigger{display:flex;align-items:center;gap:6px;flex:1;outline:none;color:inherit;min-inline-size:0;text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation}et-select .et-select-trigger[data-disabled]{cursor:not-allowed}et-select .et-select-trigger[data-readonly]{cursor:default}et-select .et-select-trigger .et-select-trigger-content{display:flex;flex-wrap:wrap;align-items:center;gap:6px;flex:1;min-inline-size:0}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked{display:grid;grid-template-columns:minmax(0,1fr)}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked>*{grid-area:1 / 1}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked:has(.et-select-value-custom) input[etselectsearch]{caret-color:transparent}et-select .et-select-trigger input[etselectsearch]{flex:1 1 60px;min-inline-size:60px;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);cursor:text}et-select .et-select-trigger input[etselectsearch]::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-select .et-select-trigger input[etselectsearch]:read-only{cursor:default;caret-color:transparent}et-select .et-select-trigger input[etselectsearch]:disabled{cursor:not-allowed}et-select .et-select-trigger:has(input[etselectsearch]) .et-select-value{flex:0 1 auto}et-select .et-select-value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-inline-size:0}et-select .et-select-value[data-placeholder]{color:color-mix(in srgb,currentColor 46%,transparent)}et-select[data-mixed] .et-select-value,et-select[data-mixed] input[etselectsearch]:not(:focus){font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-select .et-select-value-custom{display:flex;align-items:center;flex:1;min-inline-size:0}et-select .et-select-trigger-content:has(input[etselectsearch]) .et-select-value-custom{flex:0 1 auto}et-select .et-select-trigger-content:has(.et-select-value-custom) input[etselectsearch]::placeholder{color:transparent}et-select .et-select-chips{display:contents}et-select .et-select-trigger-busy{position:relative;display:flex;align-items:center;align-self:stretch;flex:none;padding-inline-start:var(--_et-select-trigger-busy-fade);margin-inline-start:calc(-1 * (var(--_et-select-trigger-busy-fade) + var(--_et-select-trigger-busy-cover) + 6px));color:var(--et-surface-color-muted-solid, currentColor)}et-select:dir(rtl){--_et-select-trigger-busy-mask-direction: to left}et-select .et-select-trigger:has(>.et-select-trigger-busy) .et-select-trigger-content{-webkit-mask-image:linear-gradient(var(--_et-select-trigger-busy-mask-direction),black calc(100% - var(--_et-select-trigger-busy-cover) - var(--_et-select-trigger-busy-fade)),transparent calc(100% - var(--_et-select-trigger-busy-cover)));mask-image:linear-gradient(var(--_et-select-trigger-busy-mask-direction),black calc(100% - var(--_et-select-trigger-busy-cover) - var(--_et-select-trigger-busy-fade)),transparent calc(100% - var(--_et-select-trigger-busy-cover)))}et-select .et-select-trigger-busy--enter{animation:et-select-busy-in .12s ease}@media(prefers-reduced-motion:reduce){et-select .et-select-trigger-busy--enter{animation:none}}.et-select-arrow .et-icon{rotate:180deg}@keyframes et-select-busy-in{0%{opacity:0}}}\n"], dependencies: [{ kind: "directive", type: SelectTriggerDirective, selector: "[etSelectTrigger]", exportAs: ["etSelectTrigger"] }, { kind: "directive", type: SelectSurfaceDirective, selector: "ng-template[etSelectSurface]", exportAs: ["etSelectSurface"] }, { kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "component", type: SelectPanelComponent, selector: "et-select-panel" }, { kind: "component", type: SelectOptionComponent, selector: "et-select-option" }, { kind: "component", type: SelectVirtualOptionComponent, selector: "et-select-virtual-option" }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ChipComponent, selector: "et-chip" }, { kind: "component", type: SpinnerComponent, selector: "et-spinner", inputs: ["diameter", "strokeWidth", "track", "value", "determinate"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
43475
43759
|
}
|
|
43476
43760
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SelectComponent, decorators: [{
|
|
43477
43761
|
type: Component,
|
|
@@ -43536,7 +43820,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
43536
43820
|
ColorInteractiveDirective,
|
|
43537
43821
|
], host: {
|
|
43538
43822
|
class: 'et-select',
|
|
43539
|
-
}, template: "<!-- a div, not a <button>: chips carry remove buttons and buttons cannot nest.\n The trigger directive manages tabindex/aria-disabled for non-button hosts. -->\n<div class=\"et-select-trigger\" etSelectTrigger>\n <div [class.et-select-trigger-content--stacked]=\"stackedValue()\" class=\"et-select-trigger-content\">\n @if (select.mixed()) {\n @if (showValueLabel()) {\n <span [id]=\"mixedLabelId\" class=\"et-select-value\">{{ select.displayValue() }}</span>\n }\n } @else if (select.registeredValueTemplate(); as valueTemplate) {\n @if (showCustomValue()) {\n <div class=\"et-select-value-custom\">\n <ng-template [ngTemplateOutlet]=\"valueTemplate.templateRef\" [ngTemplateOutletContext]=\"valueContext()\" />\n </div>\n }\n } @else if (select.multiple() && select.selectedEntries().length) {\n <!-- display: contents \u2014 the chips share the trigger's wrapping flex flow with the\n inline search input, tag-input style -->\n <!-- readonly is not disabled: the chips keep their normal look, they just lose the\n remove affordance -->\n <div class=\"et-select-chips\">\n @for (entry of select.selectedEntries(); track entry.value) {\n <et-chip\n [disabled]=\"select.disabled()\"\n [removable]=\"!select.readonly() && !select.disabled()\"\n (remove)=\"select.deselectValue(entry.value)\"\n >\n {{ entry.label }}\n </et-chip>\n }\n </div>\n }\n\n @if (!select.mixed() && showValueLabel()) {\n <span [attr.data-placeholder]=\"!select.hasValue() || null\" class=\"et-select-value\">\n {{ select.displayValue() ?? select.placeholder() }}\n </span>\n }\n\n <!-- combobox pattern: the search input sits inline in the field, not in the panel -->\n <ng-content select=\"input[etSelectSearch]\" />\n </div>\n\n <!-- async option state, surfaced in the field itself (mirrors the menu's search spinner) \u2014\n only while the panel is closed; open, the panel carries the news. Overlays the value's tail\n behind a fade instead of claiming a column of its own, so the value never re-wraps for it -->\n @if (select.showLoadingIndicator() && !select.open()) {\n <div class=\"et-select-trigger-busy\" animate.enter=\"et-select-trigger-busy--enter\">\n <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n </div>\n }\n</div>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear via Backspace / erasing.\n mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a\n blur would unmount this button before the click could land -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <!-- pointer-only affordance (keyboard users close via Escape) \u2014 kept out of the tab order -->\n <button\n [disabled]=\"select.disabled()\"\n (click)=\"handleArrowClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-picker-trigger et-select-arrow\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #optionContent>\n <ng-content />\n</ng-template>\n\n@if (!select.isMounted()) {\n <!-- keeps the projected options rendered (and their bindings live) while the panel is\n closed, so the trigger can resolve a preselected value's label and closed typeahead\n works \u2014 the same template moves into the overlay while it is open -->\n <div class=\"et-select-detached-options\" aria-hidden=\"true\" hidden>\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n </div>\n}\n\n<ng-template etSelectSurface>\n <et-select-panel>\n @if (select.options()) {\n <!-- data-driven mode: the select owns the option rows and windows their rendering \u2014\n only rows near the viewport exist in the DOM; the block paddings stand in for the\n scroll height of everything outside the window -->\n <div\n [style.padding-block-start.px]=\"select.virtualWindow.paddingTop()\"\n [style.padding-block-end.px]=\"select.virtualWindow.paddingBottom()\"\n class=\"et-select-virtual-options\"\n role=\"none\"\n >\n @for (item of select.virtualizedItems(); track item.value()) {\n <et-select-virtual-option [item]=\"item\" />\n }\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n\n <!-- a real option (not an action row like add-new): it takes part in virtual focus, so\n Enter commits it and it is keyboard-reachable while options still match the query.\n Its label is the candidate itself \u2014 that is what commits and what the label cache\n stores; the \"Create\" prefix is display-only. -->\n @if (select.customValueCandidate(); as candidate) {\n <et-select-option [value]=\"candidate\" [label]=\"candidate\" class=\"et-select-create-option\" customValueOption>\n <i class=\"et-select-create-option-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedCreateLabel() }} \u201C{{ candidate }}\u201D\n </et-select-option>\n }\n\n <!-- state rows and action buttons are NOT options \u2014 projected outside the listbox element\n (display: contents, so they still flow within the scrolling panel) -->\n <div class=\"et-select-panel-extras\" etSelectPanelExtras>\n <!-- Refetching over options that are already on screen: they stay put and a 2px indeterminate\n bar at the panel's top edge carries the news (the table does the same over its rows). Out\n of flow on purpose \u2014 a bar that took a row's worth of space would resize the panel. -->\n @if (showBusyBar()) {\n <div class=\"et-select-busy-bar\" role=\"presentation\" aria-hidden=\"true\"></div>\n }\n\n @if (showLoadingRow()) {\n <!-- The row is here from the first frame so the panel opens at the height the options will\n need, but its content waits for `showLoadingIndicator()`: a response that lands inside\n that window replaces an empty row rather than a spinner nobody had time to read. -->\n @if (select.registeredLoadingTemplate(); as loadingTemplate) {\n @if (select.showLoadingIndicator()) {\n <ng-template [ngTemplateOutlet]=\"loadingTemplate.templateRef\" />\n }\n } @else {\n <div class=\"et-select-state et-select-state--loading\">\n <!-- laid out from the first frame and only faded in later, so the row cannot change\n height when the spinner arrives; hidden from assistive tech until it does -->\n <span\n [class.et-select-state-content--visible]=\"select.showLoadingIndicator()\"\n [attr.aria-hidden]=\"!select.showLoadingIndicator() || null\"\n class=\"et-select-state-content\"\n >\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </span>\n </div>\n }\n } @else if (select.error(); as error) {\n @if (select.registeredErrorTemplate(); as errorTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"errorTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error }\"\n />\n } @else {\n <div [etProvideColor]=\"errorColorTheme\" class=\"et-select-state et-select-state--error\" role=\"alert\">\n {{ error }}\n </div>\n }\n } @else if (!select.visibleItems().length) {\n @if (select.registeredEmptyTemplate(); as emptyTemplate) {\n <ng-template [ngTemplateOutlet]=\"emptyTemplate.templateRef\" />\n } @else {\n <div class=\"et-select-state et-select-state--empty\">{{ selectLabels().empty }}</div>\n }\n }\n\n @if (select.hasMoreItems() && !showLoadingRow()) {\n @if (showLoadMoreLoading()) {\n <!-- the control's own box, minus the control: same height, same separator, so the page\n that is on its way is announced without moving anything -->\n <div class=\"et-select-load-more et-select-load-more--loading\" aria-live=\"polite\">\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </div>\n } @else {\n <!-- disabled while its page loads: `requestLoadMore` is a no-op until that settles, and a\n live-looking control that does nothing reads as broken -->\n <button\n [disabled]=\"select.loading()\"\n (click)=\"select.requestLoadMore()\"\n class=\"et-select-load-more\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i class=\"et-select-load-more-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n {{ resolvedLoadMoreLabel() }}\n </button>\n }\n }\n\n @if (select.allowAddNew() && !showLoadingRow()) {\n <!-- pointer-only, like the load-more control \u2014 keyboard users reach the same flow\n through the consumer's own UI (e.g. a button next to the field) -->\n <button (click)=\"select.requestAddNew()\" class=\"et-select-add-new\" tabindex=\"-1\" type=\"button\">\n <i class=\"et-select-add-new-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedAddNewLabel() }}\n </button>\n }\n </div>\n </et-select-panel>\n</ng-template>\n", styles: ["@layer components{et-select{display:flex;align-items:center;gap:6px;flex:1;min-inline-size:0;color:inherit}et-select .et-select-trigger{display:flex;align-items:center;gap:6px;flex:1;outline:none;color:inherit;min-inline-size:0;text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation}et-select .et-select-trigger[data-disabled]{cursor:not-allowed}et-select .et-select-trigger[data-readonly]{cursor:default}et-select .et-select-trigger .et-select-trigger-content{display:flex;flex-wrap:wrap;align-items:center;gap:6px;flex:1;min-inline-size:0}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked{display:grid;grid-template-columns:minmax(0,1fr)}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked>*{grid-area:1 / 1}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked:has(.et-select-value-custom) input[etselectsearch]{caret-color:transparent}et-select .et-select-trigger input[etselectsearch]{flex:1 1 60px;min-inline-size:60px;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);cursor:text}et-select .et-select-trigger input[etselectsearch]::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-select .et-select-trigger input[etselectsearch]:disabled{cursor:not-allowed}et-select .et-select-trigger:has(input[etselectsearch]) .et-select-value{flex:0 1 auto}et-select .et-select-value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-inline-size:0}et-select .et-select-value[data-placeholder]{color:color-mix(in srgb,currentColor 46%,transparent)}et-select[data-mixed] .et-select-value,et-select[data-mixed] input[etselectsearch]:not(:focus){font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-select .et-select-value-custom{display:flex;align-items:center;flex:1;min-inline-size:0}et-select .et-select-trigger-content:has(input[etselectsearch]) .et-select-value-custom{flex:0 1 auto}et-select .et-select-trigger-content:has(.et-select-value-custom) input[etselectsearch]::placeholder{color:transparent}et-select .et-select-chips{display:contents}et-select .et-select-trigger-busy{--_et-select-trigger-busy-fade: 24px;position:relative;display:flex;align-items:center;align-self:stretch;flex:none;padding-inline-start:var(--_et-select-trigger-busy-fade);margin-inline-start:calc(-1 * (var(--_et-select-trigger-busy-fade) + 16px + 6px));background:linear-gradient(to right,transparent,var(--et-surface-background-solid, transparent) var(--_et-select-trigger-busy-fade));color:var(--et-surface-color-muted-solid, currentColor)}et-select .et-select-trigger-busy--enter{animation:et-select-busy-in .12s ease}@media(prefers-reduced-motion:reduce){et-select .et-select-trigger-busy--enter{animation:none}}.et-select-arrow .et-icon{rotate:180deg}@keyframes et-select-busy-in{0%{opacity:0}}}\n"] }]
|
|
43823
|
+
}, template: "<!-- a div, not a <button>: chips carry remove buttons and buttons cannot nest.\n The trigger directive manages tabindex/aria-disabled for non-button hosts. -->\n<div class=\"et-select-trigger\" etSelectTrigger>\n <div [class.et-select-trigger-content--stacked]=\"stackedValue()\" class=\"et-select-trigger-content\">\n @if (select.mixed()) {\n @if (showValueLabel()) {\n <span [id]=\"mixedLabelId\" class=\"et-select-value\">{{ select.displayValue() }}</span>\n }\n } @else if (select.registeredValueTemplate(); as valueTemplate) {\n @if (showCustomValue()) {\n <div class=\"et-select-value-custom\">\n <ng-template [ngTemplateOutlet]=\"valueTemplate.templateRef\" [ngTemplateOutletContext]=\"valueContext()\" />\n </div>\n }\n } @else if (select.multiple() && select.selectedEntries().length) {\n <!-- display: contents \u2014 the chips share the trigger's wrapping flex flow with the\n inline search input, tag-input style -->\n <!-- readonly is not disabled: the chips keep their normal look, they just lose the\n remove affordance -->\n <div class=\"et-select-chips\">\n @for (entry of select.selectedEntries(); track entry.value) {\n <et-chip\n [disabled]=\"select.disabled()\"\n [removable]=\"!select.readonly() && !select.disabled()\"\n (remove)=\"select.deselectValue(entry.value)\"\n >\n {{ entry.label }}\n </et-chip>\n }\n </div>\n }\n\n @if (!select.mixed() && showValueLabel()) {\n <span [attr.data-placeholder]=\"!select.hasValue() || null\" class=\"et-select-value\">\n {{ select.displayValue() ?? select.placeholder() }}\n </span>\n }\n\n <!-- combobox pattern: the search input sits inline in the field, not in the panel -->\n <ng-content select=\"input[etSelectSearch]\" />\n </div>\n\n <!-- async option state, surfaced in the field itself (mirrors the menu's search spinner) \u2014\n only while the panel is closed; open, the panel carries the news. Overlays the value's tail\n behind a fade instead of claiming a column of its own, so the value never re-wraps for it -->\n @if (select.showLoadingIndicator() && !select.open()) {\n <div class=\"et-select-trigger-busy\" animate.enter=\"et-select-trigger-busy--enter\">\n <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n </div>\n }\n</div>\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear via Backspace / erasing.\n mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a\n blur would unmount this button before the click could land -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n\n <!-- pointer-only affordance (keyboard users close via Escape) \u2014 kept out of the tab order -->\n <button\n [disabled]=\"select.disabled()\"\n (click)=\"handleArrowClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-picker-trigger et-select-arrow\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-chevron\"></i>\n </button>\n</ng-template>\n\n<ng-template #optionContent>\n <ng-content />\n</ng-template>\n\n@if (!select.isMounted()) {\n <!-- keeps the projected options rendered (and their bindings live) while the panel is\n closed, so the trigger can resolve a preselected value's label and closed typeahead\n works \u2014 the same template moves into the overlay while it is open -->\n <div class=\"et-select-detached-options\" aria-hidden=\"true\" hidden>\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n </div>\n}\n\n<ng-template etSelectSurface>\n <et-select-panel>\n @if (select.options()) {\n <!-- data-driven mode: the select owns the option rows and windows the rendering of a long\n list \u2014 only rows near the viewport exist in the DOM; the block paddings stand in for\n the scroll height of everything outside the window -->\n <div\n [style.padding-block-start.px]=\"select.virtualWindow.paddingTop()\"\n [style.padding-block-end.px]=\"select.virtualWindow.paddingBottom()\"\n class=\"et-select-virtual-options\"\n role=\"none\"\n >\n @for (item of select.virtualizedItems(); track item.value()) {\n <et-select-virtual-option [item]=\"item\" />\n }\n </div>\n }\n\n <ng-template [ngTemplateOutlet]=\"optionContent\" />\n\n <!-- a real option (not an action row like add-new): it takes part in virtual focus, so\n Enter commits it and it is keyboard-reachable while options still match the query.\n Its label is the candidate itself \u2014 that is what commits and what the label cache\n stores; the \"Create\" prefix is display-only. -->\n @if (select.customValueCandidate(); as candidate) {\n <et-select-option [value]=\"candidate\" [label]=\"candidate\" class=\"et-select-create-option\" customValueOption>\n <i class=\"et-select-create-option-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedCreateLabel() }} \u201C{{ candidate }}\u201D\n </et-select-option>\n }\n\n <!-- state rows and action buttons are NOT options \u2014 projected outside the listbox element\n (display: contents, so they still flow within the scrolling panel) -->\n <div class=\"et-select-panel-extras\" etSelectPanelExtras>\n <!-- Refetching over options that are already on screen: they stay put and a 2px indeterminate\n bar at the panel's top edge carries the news (the table does the same over its rows). Out\n of flow on purpose \u2014 a bar that took a row's worth of space would resize the panel. -->\n @if (showBusyBar()) {\n <div class=\"et-select-busy-bar\" role=\"presentation\" aria-hidden=\"true\"></div>\n }\n\n @if (showLoadingRow()) {\n <!-- The row is here from the first frame so the panel opens at the height the options will\n need, but its content waits for `showLoadingIndicator()`: a response that lands inside\n that window replaces an empty row rather than a spinner nobody had time to read. -->\n @if (select.registeredLoadingTemplate(); as loadingTemplate) {\n @if (select.showLoadingIndicator()) {\n <ng-template [ngTemplateOutlet]=\"loadingTemplate.templateRef\" />\n }\n } @else {\n <div class=\"et-select-state et-select-state--loading\">\n <!-- laid out from the first frame and only faded in later, so the row cannot change\n height when the spinner arrives; hidden from assistive tech until it does -->\n <span\n [class.et-select-state-content--visible]=\"select.showLoadingIndicator()\"\n [attr.aria-hidden]=\"!select.showLoadingIndicator() || null\"\n class=\"et-select-state-content\"\n >\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </span>\n </div>\n }\n } @else if (select.error(); as error) {\n @if (select.registeredErrorTemplate(); as errorTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"errorTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error }\"\n />\n } @else {\n <div [etProvideColor]=\"errorColorTheme\" class=\"et-select-state et-select-state--error\" role=\"alert\">\n {{ error }}\n </div>\n }\n } @else if (!select.visibleItems().length) {\n @if (select.registeredEmptyTemplate(); as emptyTemplate) {\n <ng-template [ngTemplateOutlet]=\"emptyTemplate.templateRef\" />\n } @else {\n <div class=\"et-select-state et-select-state--empty\">{{ selectLabels().empty }}</div>\n }\n }\n\n @if (select.hasMoreItems() && !showLoadingRow()) {\n @if (showLoadMoreLoading()) {\n <!-- the control's own box, minus the control: same height, same separator, so the page\n that is on its way is announced without moving anything -->\n <div class=\"et-select-load-more et-select-load-more--loading\" aria-live=\"polite\">\n <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n {{ selectLabels().loading }}\n </div>\n } @else {\n <!-- disabled while its page loads: `requestLoadMore` is a no-op until that settles, and a\n live-looking control that does nothing reads as broken -->\n <button\n [disabled]=\"select.loading()\"\n (click)=\"select.requestLoadMore()\"\n class=\"et-select-load-more\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i class=\"et-select-load-more-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n {{ resolvedLoadMoreLabel() }}\n </button>\n }\n }\n\n @if (select.allowAddNew() && !showLoadingRow()) {\n <!-- pointer-only, like the load-more control \u2014 keyboard users reach the same flow\n through the consumer's own UI (e.g. a button next to the field) -->\n <button (click)=\"select.requestAddNew()\" class=\"et-select-add-new\" tabindex=\"-1\" type=\"button\">\n <i class=\"et-select-add-new-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n {{ resolvedAddNewLabel() }}\n </button>\n }\n </div>\n </et-select-panel>\n</ng-template>\n", styles: ["@layer components{et-select{--_et-select-trigger-busy-fade: 24px;--_et-select-trigger-busy-cover: 16px;--_et-select-trigger-busy-mask-direction: to right;display:flex;align-items:center;gap:6px;flex:1;min-inline-size:0;color:inherit}et-select .et-select-trigger{display:flex;align-items:center;gap:6px;flex:1;outline:none;color:inherit;min-inline-size:0;text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation}et-select .et-select-trigger[data-disabled]{cursor:not-allowed}et-select .et-select-trigger[data-readonly]{cursor:default}et-select .et-select-trigger .et-select-trigger-content{display:flex;flex-wrap:wrap;align-items:center;gap:6px;flex:1;min-inline-size:0}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked{display:grid;grid-template-columns:minmax(0,1fr)}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked>*{grid-area:1 / 1}et-select .et-select-trigger .et-select-trigger-content.et-select-trigger-content--stacked:has(.et-select-value-custom) input[etselectsearch]{caret-color:transparent}et-select .et-select-trigger input[etselectsearch]{flex:1 1 60px;min-inline-size:60px;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);cursor:text}et-select .et-select-trigger input[etselectsearch]::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-select .et-select-trigger input[etselectsearch]:read-only{cursor:default;caret-color:transparent}et-select .et-select-trigger input[etselectsearch]:disabled{cursor:not-allowed}et-select .et-select-trigger:has(input[etselectsearch]) .et-select-value{flex:0 1 auto}et-select .et-select-value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-inline-size:0}et-select .et-select-value[data-placeholder]{color:color-mix(in srgb,currentColor 46%,transparent)}et-select[data-mixed] .et-select-value,et-select[data-mixed] input[etselectsearch]:not(:focus){font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}et-select .et-select-value-custom{display:flex;align-items:center;flex:1;min-inline-size:0}et-select .et-select-trigger-content:has(input[etselectsearch]) .et-select-value-custom{flex:0 1 auto}et-select .et-select-trigger-content:has(.et-select-value-custom) input[etselectsearch]::placeholder{color:transparent}et-select .et-select-chips{display:contents}et-select .et-select-trigger-busy{position:relative;display:flex;align-items:center;align-self:stretch;flex:none;padding-inline-start:var(--_et-select-trigger-busy-fade);margin-inline-start:calc(-1 * (var(--_et-select-trigger-busy-fade) + var(--_et-select-trigger-busy-cover) + 6px));color:var(--et-surface-color-muted-solid, currentColor)}et-select:dir(rtl){--_et-select-trigger-busy-mask-direction: to left}et-select .et-select-trigger:has(>.et-select-trigger-busy) .et-select-trigger-content{-webkit-mask-image:linear-gradient(var(--_et-select-trigger-busy-mask-direction),black calc(100% - var(--_et-select-trigger-busy-cover) - var(--_et-select-trigger-busy-fade)),transparent calc(100% - var(--_et-select-trigger-busy-cover)));mask-image:linear-gradient(var(--_et-select-trigger-busy-mask-direction),black calc(100% - var(--_et-select-trigger-busy-cover) - var(--_et-select-trigger-busy-fade)),transparent calc(100% - var(--_et-select-trigger-busy-cover)))}et-select .et-select-trigger-busy--enter{animation:et-select-busy-in .12s ease}@media(prefers-reduced-motion:reduce){et-select .et-select-trigger-busy--enter{animation:none}}.et-select-arrow .et-icon{rotate:180deg}@keyframes et-select-busy-in{0%{opacity:0}}}\n"] }]
|
|
43540
43824
|
}], ctorParameters: () => [], propDecorators: { loadMoreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadMoreLabel", required: false }] }], addNewLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "addNewLabel", required: false }] }], createLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "createLabel", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], clearLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearLabel", required: false }] }] } });
|
|
43541
43825
|
|
|
43542
43826
|
const SELECT_IMPORTS = [
|
|
@@ -43624,6 +43908,9 @@ class PhoneInputComponent {
|
|
|
43624
43908
|
this.phone.activate();
|
|
43625
43909
|
}
|
|
43626
43910
|
}
|
|
43911
|
+
focus(options) {
|
|
43912
|
+
this.phone.focus(options);
|
|
43913
|
+
}
|
|
43627
43914
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PhoneInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43628
43915
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: PhoneInputComponent, isStandalone: true, selector: "et-phone-input", inputs: { countryLabel: { classPropertyName: "countryLabel", publicName: "countryLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-phone-input" }, providers: [provideIcons(TIMES_ICON)], hostDirectives: [{ directive: PhoneInputDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "placeholder", "placeholder", "mixedLabel", "mixedLabel", "defaultCountry", "defaultCountry", "preferredCountries", "preferredCountries"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<!-- headless select composition: compact flag trigger, searchable country panel -->\n<div\n [value]=\"phone.country()\"\n (valueChange)=\"handleCountryChange($event)\"\n class=\"et-phone-input-country\"\n mirrorPanelWidth=\"false\"\n etFormFieldBarrier\n etSelect\n>\n <button\n [attr.aria-label]=\"resolvedCountryLabel()\"\n [disabled]=\"phone.disabled()\"\n class=\"et-phone-input-country-trigger\"\n etSelectTrigger\n type=\"button\"\n >\n <span class=\"et-phone-input-country-flag\" aria-hidden=\"true\">\n @if (phone.registeredFlagTemplate(); as flagTemplate) {\n <ng-template [ngTemplateOutlet]=\"flagTemplate.templateRef\" [ngTemplateOutletContext]=\"activeFlagContext()\" />\n } @else {\n {{ activeFlag() }}\n }\n </span>\n <span class=\"et-phone-input-dial-code\">+{{ phone.dialCode() }}</span>\n </button>\n\n <ng-template etSelectSurface let-select>\n <et-select-panel class=\"et-phone-input-country-panel\">\n <div class=\"et-phone-input-country-search\">\n <input [placeholder]=\"phoneInputLabels().searchCountries\" etSelectSearch />\n </div>\n\n <!-- the label carries the dial code too, so searching by \"+49\" / \"49\" works -->\n @for (country of countries(); track country.iso2) {\n <et-select-option [label]=\"country.name + ' +' + country.dialCode\" [value]=\"country.iso2\">\n <span class=\"et-phone-input-option-flag\" aria-hidden=\"true\">\n @if (phone.registeredFlagTemplate(); as flagTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"flagTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: country }\"\n />\n } @else {\n {{ country.flag }}\n }\n </span>\n <span class=\"et-phone-input-option-name\">{{ country.name }}</span>\n <span class=\"et-phone-input-option-dial\">+{{ country.dialCode }}</span>\n </et-select-option>\n }\n\n @if (!select.visibleItems().length) {\n <div class=\"et-select-state et-select-state--empty\">{{ phoneInputLabels().noCountries }}</div>\n }\n </et-select-panel>\n </ng-template>\n</div>\n\n<input class=\"et-phone-input-field\" etPhoneInputField />\n\n<ng-template etControlSuffix>\n @if (showClear()) {\n <!-- pointer-only, out of the tab order \u2014 keyboard users clear by erasing the text.\n mousedown is prevented so the field keeps focus (its blur would unmount this\n button before the click could land) -->\n <button\n [attr.aria-label]=\"resolvedClearLabel()\"\n (click)=\"handleClearClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n class=\"et-input-clear\"\n animate.enter=\"et-input-clear--enter\"\n animate.leave=\"et-input-clear--leave\"\n tabindex=\"-1\"\n type=\"button\"\n >\n <i etIcon=\"et-times\"></i>\n </button>\n }\n</ng-template>\n", styles: ["@layer components{et-phone-input{display:flex;align-items:center;gap:8px;flex:1;min-inline-size:0;color:inherit}et-phone-input .et-phone-input-country-trigger{display:flex;align-items:center;gap:4px;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;margin:0;cursor:pointer;appearance:none;white-space:nowrap}et-phone-input .et-phone-input-country-trigger:disabled{cursor:not-allowed}et-phone-input .et-phone-input-country-trigger:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:2px;border-radius:4px}et-phone-input .et-phone-input-country-flag{display:inline-flex;align-items:center}et-phone-input .et-phone-input-dial-code{color:var(--et-surface-color-muted-solid, currentColor);font-variant-numeric:tabular-nums}et-phone-input .et-phone-input-field{flex:1;min-inline-size:0;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor);font-variant-numeric:tabular-nums}et-phone-input .et-phone-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-phone-input .et-phone-input-field:disabled{cursor:not-allowed}et-phone-input[data-mixed] .et-phone-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}.et-phone-input-country-panel{inline-size:min(320px,calc(100vw - 24px))}.et-phone-input-country-search{position:sticky;inset-block-start:calc(var(--et-select-panel-padding, 6px) * -1);margin-block-start:calc(var(--et-select-panel-padding, 6px) * -1);margin-inline:calc(var(--et-select-panel-padding, 6px) * -1);padding:var(--et-select-panel-padding, 6px);background:var(--et-surface-background-solid, rgb(32 32 32));z-index:1}.et-phone-input-country-search input[etselectsearch]{inline-size:100%;block-size:36px;box-sizing:border-box;padding-inline:10px;border-radius:6px;border:1px solid var(--et-surface-border-solid, rgb(255 255 255 / .1));background:color-mix(in srgb,var(--et-surface-interaction-solid, rgb(255 255 255)) 6%,transparent);color:inherit;font:inherit;outline:none;caret-color:var(--et-theme-color-primary-solid, currentColor);transition:border-color .12s ease,background .12s ease}.et-phone-input-country-search input[etselectsearch]:focus-visible{border-color:var(--et-theme-color-primary-solid, rgb(255 255 255 / .3))}.et-phone-input-country-search input[etselectsearch]::placeholder{color:var(--et-surface-color-muted-solid, rgb(255 255 255 / .55))}.et-phone-input-country-panel .et-select-option-label{display:flex;align-items:center;gap:var(--et-select-option-gap, 8px);flex:1;min-inline-size:0}.et-phone-input-option-flag{flex:none;display:inline-flex;align-items:center;justify-content:center}.et-phone-input-option-name{flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.et-phone-input-option-dial{flex:none;color:var(--et-surface-color-muted-solid, currentColor);font-variant-numeric:tabular-nums}.et-phone-input-country-flag :is(img,svg),.et-phone-input-option-flag :is(img,svg){display:block;inline-size:20px;block-size:auto}}\n"], dependencies: [{ kind: "directive", type: ControlSuffixDirective, selector: "ng-template[etControlSuffix]" }, { kind: "directive", type: FormFieldBarrierDirective, selector: "[etFormFieldBarrier]" }, { kind: "component", type: SelectOptionComponent, selector: "et-select-option" }, { kind: "component", type: SelectPanelComponent, selector: "et-select-panel" }, { kind: "directive", type: SelectDirective, selector: "[etSelect]", inputs: ["value", "mixed", "touched", "open", "multiple", "disabled", "readonly", "invalid", "errors", "required", "name", "placeholder", "mixedLabel", "options", "filterMode", "allowCustomValues", "customValueSeparators", "normalizeCustomValue", "commitCustomValueOnClose", "maxSelection", "allowAddNew", "loading", "error", "hasMoreItems", "mirrorPanelWidth", "pickOnly", "aria-label", "aria-labelledby"], outputs: ["valueChange", "mixedChange", "touchedChange", "openChange", "queryChange", "loadMore", "addNew", "pickOption"], exportAs: ["etSelect"] }, { kind: "directive", type: SelectTriggerDirective, selector: "[etSelectTrigger]", exportAs: ["etSelectTrigger"] }, { kind: "directive", type: SelectSurfaceDirective, selector: "ng-template[etSelectSurface]", exportAs: ["etSelectSurface"] }, { kind: "directive", type: SelectSearchDirective, selector: "input[etSelectSearch]", inputs: ["query"], outputs: ["queryChange"], exportAs: ["etSelectSearch"] }, { kind: "directive", type: PhoneInputFieldDirective, selector: "input[etPhoneInputField]", exportAs: ["etPhoneInputField"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IconDirective, selector: "[etIcon]", inputs: ["etIcon", "variant", "allowHardcodedColor", "label"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
43629
43916
|
}
|
|
@@ -43745,10 +44032,13 @@ class RatingDirective {
|
|
|
43745
44032
|
this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
43746
44033
|
}
|
|
43747
44034
|
activate() {
|
|
44035
|
+
this.focus({ preventScroll: true });
|
|
44036
|
+
}
|
|
44037
|
+
focus(options) {
|
|
43748
44038
|
if (this.disabled()) {
|
|
43749
44039
|
return;
|
|
43750
44040
|
}
|
|
43751
|
-
this.elementRef.nativeElement.focus(
|
|
44041
|
+
this.elementRef.nativeElement.focus(options);
|
|
43752
44042
|
}
|
|
43753
44043
|
/** The state icon `index` (1-based) renders for a given display value. */
|
|
43754
44044
|
iconState(index) {
|
|
@@ -43976,6 +44266,9 @@ class RatingComponent {
|
|
|
43976
44266
|
const rect = event.currentTarget.getBoundingClientRect();
|
|
43977
44267
|
this.rating.commitPointer(event.clientX - rect.left < rect.width / 2 ? index - 0.5 : index);
|
|
43978
44268
|
}
|
|
44269
|
+
focus(options) {
|
|
44270
|
+
this.rating.focus(options);
|
|
44271
|
+
}
|
|
43979
44272
|
applyGesture(gesture, press) {
|
|
43980
44273
|
switch (gesture.type) {
|
|
43981
44274
|
case 'start':
|
|
@@ -44132,6 +44425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
44132
44425
|
|
|
44133
44426
|
class CheckboxGroupComponent {
|
|
44134
44427
|
constructor() {
|
|
44428
|
+
this.list = inject(SelectionListDirective);
|
|
44135
44429
|
this.support = injectFormSupport();
|
|
44136
44430
|
this.size = input(FORM_FIELD_SIZES.MD, /* @ts-ignore */
|
|
44137
44431
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
@@ -44167,6 +44461,9 @@ class CheckboxGroupComponent {
|
|
|
44167
44461
|
hintAnimatable: this.hintAnimatableRef,
|
|
44168
44462
|
});
|
|
44169
44463
|
}
|
|
44464
|
+
focus(options) {
|
|
44465
|
+
this.list.focus(options);
|
|
44466
|
+
}
|
|
44170
44467
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CheckboxGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44171
44468
|
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 }); }
|
|
44172
44469
|
}
|
|
@@ -44255,6 +44552,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
44255
44552
|
|
|
44256
44553
|
class RadioGroupComponent {
|
|
44257
44554
|
constructor() {
|
|
44555
|
+
this.list = inject(SelectionListDirective);
|
|
44258
44556
|
this.support = injectFormSupport();
|
|
44259
44557
|
this.size = input(FORM_FIELD_SIZES.MD, /* @ts-ignore */
|
|
44260
44558
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
@@ -44290,6 +44588,9 @@ class RadioGroupComponent {
|
|
|
44290
44588
|
hintAnimatable: this.hintAnimatableRef,
|
|
44291
44589
|
});
|
|
44292
44590
|
}
|
|
44591
|
+
focus(options) {
|
|
44592
|
+
this.list.focus(options);
|
|
44593
|
+
}
|
|
44293
44594
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44294
44595
|
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 }); }
|
|
44295
44596
|
}
|
|
@@ -44676,10 +44977,13 @@ class RangeSliderDirective {
|
|
|
44676
44977
|
}
|
|
44677
44978
|
}
|
|
44678
44979
|
activate() {
|
|
44980
|
+
this.focus();
|
|
44981
|
+
}
|
|
44982
|
+
focus(options) {
|
|
44679
44983
|
if (this.disabled()) {
|
|
44680
44984
|
return;
|
|
44681
44985
|
}
|
|
44682
|
-
this.thumbs()[0]?.focus();
|
|
44986
|
+
this.thumbs()[0]?.focus(options);
|
|
44683
44987
|
}
|
|
44684
44988
|
thumbAriaBounds(index) {
|
|
44685
44989
|
// parked thumbs carry no sibling constraint - while mixed, both announce the full track
|
|
@@ -44839,8 +45143,8 @@ class SliderThumbDirective {
|
|
|
44839
45143
|
});
|
|
44840
45144
|
}
|
|
44841
45145
|
}
|
|
44842
|
-
focus() {
|
|
44843
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
45146
|
+
focus(options) {
|
|
45147
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
44844
45148
|
}
|
|
44845
45149
|
handleBlur() {
|
|
44846
45150
|
this.focused.set(false);
|
|
@@ -45138,10 +45442,13 @@ class SliderDirective {
|
|
|
45138
45442
|
}
|
|
45139
45443
|
}
|
|
45140
45444
|
activate() {
|
|
45445
|
+
this.focus();
|
|
45446
|
+
}
|
|
45447
|
+
focus(options) {
|
|
45141
45448
|
if (this.disabled()) {
|
|
45142
45449
|
return;
|
|
45143
45450
|
}
|
|
45144
|
-
this.thumbs()[0]?.focus();
|
|
45451
|
+
this.thumbs()[0]?.focus(options);
|
|
45145
45452
|
}
|
|
45146
45453
|
thumbAriaBounds() {
|
|
45147
45454
|
return { min: this.effectiveMin(), max: this.effectiveMax() };
|
|
@@ -45270,6 +45577,9 @@ class RangeSliderComponent {
|
|
|
45270
45577
|
thumbLabelContext(index) {
|
|
45271
45578
|
return { $implicit: this.slider.thumbValues()[index] ?? 0, index };
|
|
45272
45579
|
}
|
|
45580
|
+
focus(options) {
|
|
45581
|
+
this.slider.focus(options);
|
|
45582
|
+
}
|
|
45273
45583
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45274
45584
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RangeSliderComponent, isStandalone: true, selector: "et-range-slider", inputs: { startLabel: { classPropertyName: "startLabel", publicName: "startLabel", isSignal: true, isRequired: false, transformFunction: null }, endLabel: { classPropertyName: "endLabel", publicName: "endLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null", "attr.data-disabled": "slider.disabled() || null", "attr.data-readonly": "slider.readonly() || null", "attr.data-dragging": "slider.draggingThumbIndex() !== null || null", "attr.data-mark-labels": "hasMarkLabels() || null" }, classAttribute: "et-range-slider" }, 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: RangeSliderDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "minValue", "minValue", "maxValue", "maxValue", "step", "step", "minDistance", "minDistance", "orientation", "orientation", "marks", "marks", "snapToMarks", "snapToMarks"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n<div class=\"et-range-slider-interaction\" etSliderTrack>\n <div class=\"et-range-slider-rail\" aria-hidden=\"true\"></div>\n <div\n [style.--_et-slider-fill-start]=\"slider.thumbPercents()[0] ?? 0\"\n [style.--_et-slider-fill-end]=\"slider.thumbPercents()[1] ?? 0\"\n class=\"et-range-slider-fill\"\n aria-hidden=\"true\"\n ></div>\n\n @if (slider.markStops().length) {\n <!-- the accessible values live on the thumbs \u2014 tick labels are decoration -->\n <div class=\"et-range-slider-marks\" aria-hidden=\"true\">\n @for (mark of slider.markStops(); track mark.value) {\n <span\n [attr.data-active]=\"mark.active || null\"\n [attr.data-et-slider-mark-value]=\"mark.value\"\n [style.--_et-slider-mark-position]=\"mark.percent\"\n class=\"et-range-slider-mark\"\n >\n @if (mark.label) {\n <span class=\"et-range-slider-mark-label\">{{ mark.label }}</span>\n }\n </span>\n }\n </div>\n }\n\n <div\n #startThumb=\"etSliderThumb\"\n [label]=\"resolvedStartLabel()\"\n [style.--_et-slider-thumb-position]=\"startThumb.percent()\"\n class=\"et-range-slider-thumb\"\n etSliderThumb\n >\n @if (slider.registeredThumbLabelTemplate(); as labelTemplate) {\n <div class=\"et-range-slider-thumb-value\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate.templateRef\" [ngTemplateOutletContext]=\"thumbLabelContext(0)\" />\n </div>\n }\n </div>\n\n <div\n #endThumb=\"etSliderThumb\"\n [label]=\"resolvedEndLabel()\"\n [style.--_et-slider-thumb-position]=\"endThumb.percent()\"\n class=\"et-range-slider-thumb\"\n etSliderThumb\n >\n @if (slider.registeredThumbLabelTemplate(); as labelTemplate) {\n <div class=\"et-range-slider-thumb-value\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate.templateRef\" [ngTemplateOutletContext]=\"thumbLabelContext(1)\" />\n </div>\n }\n </div>\n</div>\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-range-slider-support\">\n <div class=\"et-range-slider-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-range-slider-support-content et-range-slider-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-range-slider-support-content et-range-slider-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-range-slider-support-content et-range-slider-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-slider-track-size{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-slider-thumb-size{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-slider-vertical-size{syntax: \"<length>\"; inherits: true; initial-value: 160px;}@property --et-slider-mark-size{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-slider-mark-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 11px;}@property --et-slider-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}@property --et-slider-thumb-value-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-slider-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-slider-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-slider-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-slider-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-slider-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}et-range-slider{display:flex;flex-direction:column;gap:2px;color:var(--et-surface-color-solid, currentColor)}et-range-slider>et-label{font-size:var(--et-slider-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-range-slider .et-range-slider-interaction{position:relative;display:flex;align-items:center;block-size:max(28px,var(--et-slider-thumb-size));margin-inline:calc(var(--et-slider-thumb-size) / 2);cursor:pointer}et-range-slider .et-range-slider-rail{inline-size:100%;block-size:var(--et-slider-track-size);border-radius:999px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 32%,transparent)}et-range-slider .et-range-slider-fill{position:absolute;inset-block-start:50%;translate:0 -50%;inset-inline-start:calc(var(--_et-slider-fill-start, 0) * 1%);inline-size:calc((var(--_et-slider-fill-end, 0) - var(--_et-slider-fill-start, 0)) * 1%);block-size:var(--et-slider-track-size);border-radius:999px;background:var(--et-theme-color-primary-solid, currentColor);pointer-events:none}et-range-slider .et-range-slider-thumb{position:absolute;inset-block-start:50%;translate:0 -50%;inset-inline-start:calc(var(--_et-slider-thumb-position, 0) * 1% - var(--et-slider-thumb-size) / 2);inline-size:var(--et-slider-thumb-size);block-size:var(--et-slider-thumb-size);border-radius:50%;background:var(--et-theme-color-primary-solid, currentColor);box-shadow:0 1px 4px #00000040;outline:none}et-range-slider .et-range-slider-thumb:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:2px}et-range-slider .et-range-slider-thumb[data-dragging]{z-index:1}et-range-slider .et-range-slider-marks{position:absolute;inset:0}et-range-slider .et-range-slider-mark{position:absolute;inset-block-start:50%;inset-inline-start:calc(var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-size) / 2);translate:0 -50%;inline-size:var(--et-slider-mark-size);block-size:var(--et-slider-mark-size);border-radius:50%;background:color-mix(in srgb,var(--et-surface-color-muted-solid, currentColor) 55%,transparent)}et-range-slider .et-range-slider-mark:where([data-active]){background:color-mix(in srgb,var(--et-theme-color-on-primary, currentColor) 70%,transparent)}et-range-slider .et-range-slider-mark-label{position:absolute;left:50%;inset-block-start:calc(100% + (var(--et-slider-thumb-size) - var(--et-slider-mark-size)) / 2 + 6px);translate:-50% 0;inline-size:max-content;font-size:var(--et-slider-mark-label-font-size);line-height:1.2;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-range-slider:where([data-mark-labels]) .et-range-slider-interaction{margin-block-end:calc(var(--et-slider-mark-label-font-size) * 1.2 + var(--et-slider-thumb-size) / 2)}et-range-slider .et-range-slider-thumb-value{position:absolute;left:50%;bottom:calc(100% + 8px);translate:-50% 0;inline-size:max-content;padding:2px 8px;border-radius:6px;background:var(--et-surface-background-solid, currentColor);border:1px solid var(--et-surface-border-solid, transparent);font-size:var(--et-slider-thumb-value-font-size);line-height:1.4;color:var(--et-surface-color-solid, currentColor);pointer-events:none;-webkit-user-select:none;user-select:none}et-range-slider[data-mixed] .et-range-slider-rail{background:repeating-linear-gradient(to right,var(--et-theme-color-primary-solid, currentColor) 0 6px,transparent 6px 11px)}et-range-slider[data-mixed] .et-range-slider-thumb{box-shadow:none}et-range-slider[data-mixed] .et-range-slider-thumb-value{display:none}:is(et-range-slider[data-disabled],et-range-slider[data-readonly]) .et-range-slider-interaction{cursor:default}et-range-slider[data-disabled]{opacity:.4}et-range-slider .et-range-slider-support{overflow:clip;block-size:0}et-range-slider .et-range-slider-support-stack{position:relative;display:grid}et-range-slider .et-range-slider-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-range-slider .et-range-slider-support-content[data-active]{opacity:1;transform:translateY(0)}et-range-slider .et-range-slider-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-slider-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-range-slider .et-range-slider-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-slider-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-range-slider .et-range-slider-hint{padding-block-start:4px;font-size:var(--et-slider-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-range-slider .et-range-slider-hint:empty{display:none}et-range-slider[data-can-animate] .et-range-slider-support{transition:block-size var(--et-slider-support-duration) ease}et-range-slider[data-can-animate] .et-range-slider-support-content{transition:opacity var(--et-slider-support-duration) ease,transform var(--et-slider-support-duration) ease}@starting-style{et-range-slider[data-can-animate] .et-range-slider-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-slider-support-offset) * -1))}}et-range-slider[data-can-animate]:not([data-dragging]) .et-range-slider-thumb{transition:inset-inline-start .12s ease}et-range-slider[data-can-animate]:not([data-dragging]) .et-range-slider-fill{transition:inset-inline-start .12s ease,inline-size .12s ease}et-range-slider:where([data-orientation=vertical]) .et-range-slider-interaction{flex-direction:column;align-items:center;inline-size:max(28px,var(--et-slider-thumb-size));block-size:var(--et-slider-vertical-size);margin-inline:0;margin-block:calc(var(--et-slider-thumb-size) / 2)}et-range-slider:where([data-orientation=vertical]) .et-range-slider-rail{inline-size:var(--et-slider-track-size);block-size:100%}et-range-slider:where([data-orientation=vertical]) .et-range-slider-fill{inset-block-start:auto;inset-inline:auto;left:50%;bottom:calc(var(--_et-slider-fill-start, 0) * 1%);translate:-50% 0;inline-size:var(--et-slider-track-size);block-size:calc((var(--_et-slider-fill-end, 0) - var(--_et-slider-fill-start, 0)) * 1%)}et-range-slider:where([data-orientation=vertical]) .et-range-slider-thumb{inset-block-start:auto;inset-inline:auto;left:50%;bottom:calc(var(--_et-slider-thumb-position, 0) * 1% - var(--et-slider-thumb-size) / 2);translate:-50% 0}et-range-slider:where([data-orientation=vertical]) .et-range-slider-thumb-value{left:auto;bottom:auto;inset-block-start:50%;inset-inline-start:calc(100% + 8px);translate:0 -50%}et-range-slider:where([data-orientation=vertical]) .et-range-slider-mark{inset-block-start:auto;inset-inline:auto;left:50%;bottom:calc(var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-size) / 2);translate:-50% 0}et-range-slider:where([data-orientation=vertical]) .et-range-slider-mark-label{left:auto;inset-block-start:50%;inset-inline-end:calc(100% + (var(--et-slider-thumb-size) - var(--et-slider-mark-size)) / 2 + 6px);translate:0 -50%}et-range-slider:where([data-orientation=vertical])[data-mixed] .et-range-slider-rail{background:repeating-linear-gradient(to top,var(--et-theme-color-primary-solid, currentColor) 0 6px,transparent 6px 11px)}et-range-slider:where([data-orientation=vertical])[data-can-animate]:not([data-dragging]) .et-range-slider-thumb{transition:bottom .12s ease}et-range-slider:where([data-orientation=vertical])[data-can-animate]:not([data-dragging]) .et-range-slider-fill{transition:bottom .12s ease,block-size .12s ease}@media(prefers-reduced-motion:reduce){et-range-slider{--et-slider-support-duration: 1ms;--et-slider-support-offset: 0px}et-range-slider .et-range-slider-thumb,et-range-slider .et-range-slider-fill{transition:none}}}\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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "directive", type: SliderThumbDirective, selector: "[etSliderThumb]", inputs: ["label"], exportAs: ["etSliderThumb"] }, { kind: "directive", type: SliderTrackDirective, selector: "[etSliderTrack]", exportAs: ["etSliderTrack"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
45275
45585
|
}
|
|
@@ -45353,6 +45663,9 @@ class SliderComponent {
|
|
|
45353
45663
|
thumbLabelContext(index) {
|
|
45354
45664
|
return { $implicit: this.slider.thumbValues()[index] ?? 0, index };
|
|
45355
45665
|
}
|
|
45666
|
+
focus(options) {
|
|
45667
|
+
this.slider.focus(options);
|
|
45668
|
+
}
|
|
45356
45669
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45357
45670
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: SliderComponent, isStandalone: true, selector: "et-slider", host: { properties: { "attr.data-can-animate": "canAnimate.state() || null", "attr.data-error": "support.displaysError() || null", "attr.data-warning": "support.displaysWarning() || null", "attr.data-disabled": "slider.disabled() || null", "attr.data-readonly": "slider.readonly() || null", "attr.data-dragging": "slider.draggingThumbIndex() !== null || null", "attr.data-mark-labels": "hasMarkLabels() || null" }, classAttribute: "et-slider" }, 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: SliderDirective, inputs: ["value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "min", "min", "max", "max", "step", "step", "orientation", "orientation", "marks", "marks", "snapToMarks", "snapToMarks"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ProvideColorDirective, inputs: ["etProvideColor", "color"] }], ngImport: i0, template: "<ng-content />\n\n<div class=\"et-slider-interaction\" etSliderTrack>\n <div class=\"et-slider-rail\" aria-hidden=\"true\"></div>\n <div [style.--_et-slider-fill-end]=\"slider.thumbPercents()[0] ?? 0\" class=\"et-slider-fill\" aria-hidden=\"true\"></div>\n\n @if (slider.markStops().length) {\n <!-- the accessible value lives on the thumb \u2014 tick labels are decoration -->\n <div class=\"et-slider-marks\" aria-hidden=\"true\">\n @for (mark of slider.markStops(); track mark.value) {\n <span\n [attr.data-active]=\"mark.active || null\"\n [attr.data-et-slider-mark-value]=\"mark.value\"\n [style.--_et-slider-mark-position]=\"mark.percent\"\n class=\"et-slider-mark\"\n >\n @if (mark.label) {\n <span class=\"et-slider-mark-label\">{{ mark.label }}</span>\n }\n </span>\n }\n </div>\n }\n\n <div\n #thumb=\"etSliderThumb\"\n [style.--_et-slider-thumb-position]=\"thumb.percent()\"\n class=\"et-slider-thumb\"\n etSliderThumb\n >\n @if (slider.registeredThumbLabelTemplate(); as labelTemplate) {\n <div class=\"et-slider-thumb-value\" aria-hidden=\"true\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate.templateRef\" [ngTemplateOutletContext]=\"thumbLabelContext(0)\" />\n </div>\n }\n </div>\n</div>\n\n@if (support.shouldRenderSupport()) {\n <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-slider-support\">\n <div class=\"et-slider-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-slider-support-content et-slider-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-slider-support-content et-slider-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-slider-support-content et-slider-hint\"\n etAnimatable\n >\n <ng-content select=\"et-hint\" />\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@layer components{@property --et-slider-track-size{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-slider-thumb-size{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-slider-vertical-size{syntax: \"<length>\"; inherits: true; initial-value: 160px;}@property --et-slider-mark-size{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-slider-mark-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 11px;}@property --et-slider-label-font-size{syntax: \"<length>\"; inherits: true; initial-value: 13px;}@property --et-slider-thumb-value-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-slider-support-duration{syntax: \"<time>\"; inherits: true; initial-value: .18s;}@property --et-slider-support-offset{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-slider-error-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-slider-warning-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-slider-hint-font-size{syntax: \"<length>\"; inherits: true; initial-value: 12px;}et-slider{display:flex;flex-direction:column;gap:2px;color:var(--et-surface-color-solid, currentColor)}et-slider>et-label{font-size:var(--et-slider-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-slider .et-slider-interaction{position:relative;display:flex;align-items:center;block-size:max(44px,var(--et-slider-thumb-size));margin-inline:calc(var(--et-slider-thumb-size) / 2);cursor:pointer}et-slider .et-slider-rail{inline-size:100%;block-size:var(--et-slider-track-size);border-radius:999px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 32%,transparent)}et-slider .et-slider-fill{position:absolute;inset-block-start:50%;translate:0 -50%;inset-inline-start:calc(var(--_et-slider-fill-start, 0) * 1%);inline-size:calc((var(--_et-slider-fill-end, 0) - var(--_et-slider-fill-start, 0)) * 1%);block-size:var(--et-slider-track-size);border-radius:999px;background:var(--et-theme-color-primary-solid, currentColor);pointer-events:none}et-slider .et-slider-thumb{position:absolute;inset-block-start:50%;translate:0 -50%;inset-inline-start:calc(var(--_et-slider-thumb-position, 0) * 1% - var(--et-slider-thumb-size) / 2);inline-size:var(--et-slider-thumb-size);block-size:var(--et-slider-thumb-size);border-radius:50%;background:var(--et-theme-color-primary-solid, currentColor);box-shadow:0 1px 4px #00000040;outline:none}et-slider .et-slider-thumb:focus-visible{outline:2px solid var(--et-theme-color-primary-solid, currentColor);outline-offset:2px}et-slider .et-slider-marks{position:absolute;inset:0}et-slider .et-slider-mark{position:absolute;inset-block-start:50%;inset-inline-start:calc(var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-size) / 2);translate:0 -50%;inline-size:var(--et-slider-mark-size);block-size:var(--et-slider-mark-size);border-radius:50%;background:color-mix(in srgb,var(--et-surface-color-muted-solid, currentColor) 55%,transparent)}et-slider .et-slider-mark:where([data-active]){background:color-mix(in srgb,var(--et-theme-color-on-primary, currentColor) 70%,transparent)}et-slider .et-slider-mark-label{position:absolute;left:50%;inset-block-start:calc(100% + (var(--et-slider-thumb-size) - var(--et-slider-mark-size)) / 2 + 6px);translate:-50% 0;inline-size:max-content;font-size:var(--et-slider-mark-label-font-size);line-height:1.2;color:var(--et-surface-color-muted-solid, currentColor);-webkit-user-select:none;user-select:none}et-slider:where([data-mark-labels]) .et-slider-interaction{margin-block-end:calc(var(--et-slider-mark-label-font-size) * 1.2 + var(--et-slider-thumb-size) / 2)}et-slider .et-slider-thumb-value{position:absolute;left:50%;bottom:calc(100% + 8px);translate:-50% 0;inline-size:max-content;padding:2px 8px;border-radius:6px;background:var(--et-surface-background-solid, currentColor);border:1px solid var(--et-surface-border-solid, transparent);font-size:var(--et-slider-thumb-value-font-size);line-height:1.4;color:var(--et-surface-color-solid, currentColor);pointer-events:none;-webkit-user-select:none;user-select:none}et-slider[data-mixed] .et-slider-rail{background:repeating-linear-gradient(to right,var(--et-theme-color-primary-solid, currentColor) 0 6px,transparent 6px 11px)}et-slider[data-mixed] .et-slider-thumb{box-shadow:none}et-slider[data-mixed] .et-slider-thumb-value{display:none}:is(et-slider[data-disabled],et-slider[data-readonly]) .et-slider-interaction{cursor:default}et-slider[data-disabled]{opacity:.4}et-slider .et-slider-support{overflow:clip;block-size:0}et-slider .et-slider-support-stack{position:relative;display:grid}et-slider .et-slider-support-content{grid-area:1 / 1;min-inline-size:0;opacity:0;transform:translateY(0)}et-slider .et-slider-support-content[data-active]{opacity:1;transform:translateY(0)}et-slider .et-slider-errors{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-slider-error-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-slider .et-slider-warnings{display:flex;flex-direction:column;gap:2px;padding-block-start:4px;font-size:var(--et-slider-warning-font-size);color:var(--et-theme-color-primary-solid, currentColor)}et-slider .et-slider-hint{padding-block-start:4px;font-size:var(--et-slider-hint-font-size);color:var(--et-surface-color-muted-solid, currentColor)}et-slider .et-slider-hint:empty{display:none}et-slider[data-can-animate] .et-slider-support{transition:block-size var(--et-slider-support-duration) ease}et-slider[data-can-animate] .et-slider-support-content{transition:opacity var(--et-slider-support-duration) ease,transform var(--et-slider-support-duration) ease}@starting-style{et-slider[data-can-animate] .et-slider-support-content[data-active]{opacity:0;transform:translateY(calc(var(--et-slider-support-offset) * -1))}}et-slider[data-can-animate]:not([data-dragging]) .et-slider-thumb{transition:inset-inline-start .12s ease}et-slider[data-can-animate]:not([data-dragging]) .et-slider-fill{transition:inset-inline-start .12s ease,inline-size .12s ease}et-slider:where([data-orientation=vertical]) .et-slider-interaction{flex-direction:column;align-items:center;inline-size:max(44px,var(--et-slider-thumb-size));block-size:var(--et-slider-vertical-size);margin-inline:0;margin-block:calc(var(--et-slider-thumb-size) / 2)}et-slider:where([data-orientation=vertical]) .et-slider-rail{inline-size:var(--et-slider-track-size);block-size:100%}et-slider:where([data-orientation=vertical]) .et-slider-fill{inset-block-start:auto;inset-inline:auto;left:50%;bottom:calc(var(--_et-slider-fill-start, 0) * 1%);translate:-50% 0;inline-size:var(--et-slider-track-size);block-size:calc((var(--_et-slider-fill-end, 0) - var(--_et-slider-fill-start, 0)) * 1%)}et-slider:where([data-orientation=vertical]) .et-slider-thumb{inset-block-start:auto;inset-inline:auto;left:50%;bottom:calc(var(--_et-slider-thumb-position, 0) * 1% - var(--et-slider-thumb-size) / 2);translate:-50% 0}et-slider:where([data-orientation=vertical]) .et-slider-thumb-value{left:auto;bottom:auto;inset-block-start:50%;inset-inline-start:calc(100% + 8px);translate:0 -50%}et-slider:where([data-orientation=vertical]) .et-slider-mark{inset-block-start:auto;inset-inline:auto;left:50%;bottom:calc(var(--_et-slider-mark-position, 0) * 1% - var(--et-slider-mark-size) / 2);translate:-50% 0}et-slider:where([data-orientation=vertical]) .et-slider-mark-label{left:auto;inset-block-start:50%;inset-inline-end:calc(100% + (var(--et-slider-thumb-size) - var(--et-slider-mark-size)) / 2 + 6px);translate:0 -50%}et-slider:where([data-orientation=vertical])[data-mixed] .et-slider-rail{background:repeating-linear-gradient(to top,var(--et-theme-color-primary-solid, currentColor) 0 6px,transparent 6px 11px)}et-slider:where([data-orientation=vertical])[data-can-animate]:not([data-dragging]) .et-slider-thumb{transition:bottom .12s ease}et-slider:where([data-orientation=vertical])[data-can-animate]:not([data-dragging]) .et-slider-fill{transition:bottom .12s ease,block-size .12s ease}@media(prefers-reduced-motion:reduce){et-slider{--et-slider-support-duration: 1ms;--et-slider-support-offset: 0px}et-slider .et-slider-thumb,et-slider .et-slider-fill{transition:none}}}\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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ProvideColorDirective, selector: "[etProvideColor]", inputs: ["etProvideColor"] }, { kind: "directive", type: SliderThumbDirective, selector: "[etSliderThumb]", inputs: ["label"], exportAs: ["etSliderThumb"] }, { kind: "directive", type: SliderTrackDirective, selector: "[etSliderTrack]", exportAs: ["etSliderTrack"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
45358
45671
|
}
|
|
@@ -45465,7 +45778,12 @@ class SwitchDirective {
|
|
|
45465
45778
|
return;
|
|
45466
45779
|
// readonly stays focusable (view-only), it just cannot toggle
|
|
45467
45780
|
this.toggle();
|
|
45468
|
-
this.
|
|
45781
|
+
this.focus();
|
|
45782
|
+
}
|
|
45783
|
+
focus(options) {
|
|
45784
|
+
if (this.disabled())
|
|
45785
|
+
return;
|
|
45786
|
+
this.el.nativeElement.focus(options);
|
|
45469
45787
|
}
|
|
45470
45788
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SwitchDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
45471
45789
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: SwitchDirective, isStandalone: true, selector: "[etSwitch]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", 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: { checked: "checkedChange", indeterminate: "indeterminateChange", touched: "touchedChange" }, host: { attributes: { "role": "switch" }, listeners: { "click": "toggle()", "keydown.space": "toggle(); $event.preventDefault()", "blur": "touched.set(true)" }, properties: { "attr.aria-checked": "checked()", "attr.data-indeterminate": "indeterminate() || null", "attr.aria-invalid": "shouldDisplayError() || null", "attr.aria-disabled": "disabled() || null", "attr.aria-readonly": "readonly() || null", "attr.data-readonly": "readonly() || null", "attr.aria-required": "required() || null", "attr.aria-describedby": "describedBy() || null", "attr.aria-labelledby": "labelId() || null", "attr.tabindex": "disabled() ? -1 : 0" } }, ngImport: i0 }); }
|
|
@@ -45497,17 +45815,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
45497
45815
|
|
|
45498
45816
|
class SwitchComponent {
|
|
45499
45817
|
constructor() {
|
|
45818
|
+
this.switchDir = inject(SwitchDirective);
|
|
45500
45819
|
this.canAnimate = createCanAnimateSignal();
|
|
45501
45820
|
}
|
|
45821
|
+
focus(options) {
|
|
45822
|
+
this.switchDir.focus(options);
|
|
45823
|
+
}
|
|
45502
45824
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45503
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: SwitchComponent, isStandalone: true, selector: "et-switch", host: { properties: { "attr.data-can-animate": "canAnimate.state() || null" }, classAttribute: "et-switch" }, hostDirectives: [{ directive: SwitchDirective, inputs: ["checked", "checked", "indeterminate", "indeterminate", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["checkedChange", "checkedChange", "indeterminateChange", "indeterminateChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<div class=\"et-switch-track\">\n <div class=\"et-switch-thumb\"></div>\n</div>\n", styles: ["@layer components{@property --et-switch-track-width{syntax: \"<length>\"; inherits: true; initial-value: 40px;}@property --et-switch-track-height{syntax: \"<length>\"; inherits: true; initial-value: 22px;}@property --et-switch-thumb-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-switch-thumb-offset{syntax: \"<length>\"; inherits: true; initial-value: 3px;}@property --et-switch-transition-duration{syntax: \"<time>\"; inherits: true; initial-value: .15s;}@property --et-switch-opacity-disabled{syntax: \"<number>\"; inherits: true; initial-value: .5;}et-switch{display:inline-flex;align-items:center;cursor:pointer;outline:none}et-switch[data-readonly]{cursor:default}et-switch[aria-disabled=true]{opacity:var(--et-switch-opacity-disabled);pointer-events:none;cursor:default}et-switch .et-switch-track{position:relative;width:var(--et-switch-track-width);height:var(--et-switch-track-height);border-radius:calc(var(--et-switch-track-height) / 2);background-color:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 22%,transparent)}@media(hover:hover){et-switch:hover:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([data-indeterminate]) .et-switch-track,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-switch:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([data-indeterminate]) .et-switch-track{background-color:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 30%,transparent)}}:where(et-choice-field[data-error]) et-switch:not([aria-disabled=true]):not([aria-checked=true]):not([data-indeterminate]) .et-switch-track{background-color:color-mix(in srgb,var(--et-theme-color-primary-solid) 40%,transparent)}et-switch:focus-visible .et-switch-track{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:2px}:where(et-choice-field[data-variant=card]) et-switch:focus-visible .et-switch-track{outline:none}et-switch .et-switch-thumb{position:absolute;top:calc((var(--et-switch-track-height) - var(--et-switch-thumb-size) + 4px) / 2);left:calc((var(--et-switch-track-height) - var(--et-switch-thumb-size) + 4px) / 2);width:calc(var(--et-switch-thumb-size) - 4px);height:calc(var(--et-switch-thumb-size) - 4px);border-radius:calc(var(--et-switch-thumb-size) / 2);background-color:var(--et-surface-color-muted-solid, currentColor)}@media(hover:hover){et-switch:hover:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-switch:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{background-color:var(--et-surface-color-solid, currentColor)}}et-switch:active:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{width:var(--et-switch-thumb-size)}et-switch[aria-checked=true] .et-switch-track{background-color:var(--et-theme-color-primary-solid, currentColor)}et-switch[aria-checked=true] .et-switch-thumb{top:calc((var(--et-switch-track-height) - var(--et-switch-thumb-size)) / 2);left:calc(var(--et-switch-track-width) - var(--et-switch-thumb-size) - var(--et-switch-thumb-offset));width:var(--et-switch-thumb-size);height:var(--et-switch-thumb-size);background-color:var(--et-theme-color-on-primary-solid, white)}@media(hover:hover){et-switch[aria-checked=true]:hover:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-switch[aria-checked=true]:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{background-color:var(--et-theme-color-on-primary-solid, white)}}et-switch[aria-checked=true]:active:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{width:calc(var(--et-switch-thumb-size) + 3px);left:calc(var(--et-switch-track-width) - var(--et-switch-thumb-size) - 3px - var(--et-switch-thumb-offset))}et-switch[data-indeterminate] .et-switch-track{background-color:transparent}et-switch[data-indeterminate] .et-switch-track:before{content:\"\";position:absolute;inset:0;border-radius:inherit;border:1px dashed var(--et-theme-color-primary-solid, currentColor)}et-switch[data-indeterminate] .et-switch-thumb{left:calc((var(--et-switch-track-width) - (var(--et-switch-thumb-size) - 4px)) / 2);background-color:var(--et-theme-color-primary-solid, currentColor)}et-switch[data-can-animate] .et-switch-track{transition:background-color var(--et-switch-transition-duration) ease}et-switch[data-can-animate] .et-switch-thumb{transition:top var(--et-switch-transition-duration) ease,left var(--et-switch-transition-duration) ease,width var(--et-switch-transition-duration) ease,height var(--et-switch-transition-duration) ease,background-color var(--et-switch-transition-duration) ease}@media(prefers-reduced-motion:reduce){et-switch{--et-switch-transition-duration: 1ms}}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
45825
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.7", type: SwitchComponent, isStandalone: true, selector: "et-switch", host: { properties: { "attr.data-can-animate": "canAnimate.state() || null" }, classAttribute: "et-switch" }, hostDirectives: [{ directive: SwitchDirective, inputs: ["checked", "checked", "indeterminate", "indeterminate", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name"], outputs: ["checkedChange", "checkedChange", "indeterminateChange", "indeterminateChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<div class=\"et-switch-track\">\n <div class=\"et-switch-thumb\"></div>\n</div>\n", styles: ["@layer components{@property --et-switch-track-width{syntax: \"<length>\"; inherits: true; initial-value: 40px;}@property --et-switch-track-height{syntax: \"<length>\"; inherits: true; initial-value: 22px;}@property --et-switch-thumb-size{syntax: \"<length>\"; inherits: true; initial-value: 16px;}@property --et-switch-thumb-offset{syntax: \"<length>\"; inherits: true; initial-value: 3px;}@property --et-switch-transition-duration{syntax: \"<time>\"; inherits: true; initial-value: .15s;}@property --et-switch-opacity-disabled{syntax: \"<number>\"; inherits: true; initial-value: .5;}et-switch{display:inline-flex;align-items:center;cursor:pointer;outline:none}et-switch[data-readonly]{cursor:default}et-switch[aria-disabled=true]{opacity:var(--et-switch-opacity-disabled);pointer-events:none;cursor:default}et-switch .et-switch-track{position:relative;width:var(--et-switch-track-width);height:var(--et-switch-track-height);border-radius:calc(var(--et-switch-track-height) / 2);background-color:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 22%,transparent)}@media(hover:hover){et-switch:hover:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([data-indeterminate]) .et-switch-track,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-switch:not([aria-disabled=true]):not([data-readonly]):not([aria-checked=true]):not([data-indeterminate]) .et-switch-track{background-color:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 30%,transparent)}}:where(et-choice-field[data-error]) et-switch:not([aria-disabled=true]):not([aria-checked=true]):not([data-indeterminate]) .et-switch-track{background-color:color-mix(in srgb,var(--et-theme-color-primary-solid) 40%,transparent)}et-switch:focus-visible .et-switch-track{outline:2px solid var(--et-theme-color-primary-solid);outline-offset:2px}:where(et-choice-field[data-variant=card]) et-switch:focus-visible .et-switch-track{outline:none}et-switch .et-switch-thumb{position:absolute;top:calc((var(--et-switch-track-height) - var(--et-switch-thumb-size) + 4px) / 2);left:calc((var(--et-switch-track-height) - var(--et-switch-thumb-size) + 4px) / 2);width:calc(var(--et-switch-thumb-size) - 4px);height:calc(var(--et-switch-thumb-size) - 4px);border-radius:calc(var(--et-switch-thumb-size) / 2);background-color:var(--et-surface-color-muted-solid, currentColor)}@media(hover:hover){et-switch:hover:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-switch:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{background-color:var(--et-surface-color-solid, currentColor)}}et-switch:active:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{width:var(--et-switch-thumb-size)}et-switch[aria-checked=true] .et-switch-track{background-color:var(--et-theme-color-primary-solid, currentColor)}et-switch[aria-checked=true] .et-switch-thumb{top:calc((var(--et-switch-track-height) - var(--et-switch-thumb-size)) / 2);left:calc(var(--et-switch-track-width) - var(--et-switch-thumb-size) - var(--et-switch-thumb-offset));width:var(--et-switch-thumb-size);height:var(--et-switch-thumb-size);background-color:var(--et-theme-color-on-primary-solid, white)}@media(hover:hover){et-switch[aria-checked=true]:hover:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb,:where(et-choice-field:has(.et-choice-field-label-area:hover)) et-switch[aria-checked=true]:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{background-color:var(--et-theme-color-on-primary-solid, white)}}et-switch[aria-checked=true]:active:not([aria-disabled=true]):not([data-readonly]) .et-switch-thumb{width:calc(var(--et-switch-thumb-size) + 3px);left:calc(var(--et-switch-track-width) - var(--et-switch-thumb-size) - 3px - var(--et-switch-thumb-offset))}et-switch[data-indeterminate] .et-switch-track{background-color:transparent}et-switch[data-indeterminate] .et-switch-track:before{content:\"\";position:absolute;inset:0;border-radius:inherit;border:1px dashed var(--et-theme-color-primary-solid, currentColor)}et-switch[data-indeterminate] .et-switch-thumb{left:calc((var(--et-switch-track-width) - (var(--et-switch-thumb-size) - 4px)) / 2);background-color:var(--et-theme-color-primary-solid, currentColor)}et-switch[data-can-animate] .et-switch-track{transition:background-color var(--et-switch-transition-duration) ease}et-switch[data-can-animate] .et-switch-thumb{transition:top var(--et-switch-transition-duration) ease,left var(--et-switch-transition-duration) ease,width var(--et-switch-transition-duration) ease,height var(--et-switch-transition-duration) ease,background-color var(--et-switch-transition-duration) ease}@media(prefers-reduced-motion:reduce){et-switch{--et-switch-transition-duration: 1ms}}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
45504
45826
|
}
|
|
45505
45827
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SwitchComponent, decorators: [{
|
|
45506
45828
|
type: Component,
|
|
45507
45829
|
args: [{ selector: 'et-switch', encapsulation: ViewEncapsulation.None, hostDirectives: [
|
|
45508
45830
|
{
|
|
45509
45831
|
directive: SwitchDirective,
|
|
45510
|
-
inputs: ['checked', 'indeterminate', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
|
|
45832
|
+
inputs: ['checked', 'indeterminate', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name'],
|
|
45511
45833
|
outputs: ['checkedChange', 'indeterminateChange', 'touchedChange'],
|
|
45512
45834
|
},
|
|
45513
45835
|
ColorInteractiveDirective,
|
|
@@ -45621,10 +45943,13 @@ class TagInputDirective {
|
|
|
45621
45943
|
this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));
|
|
45622
45944
|
}
|
|
45623
45945
|
activate() {
|
|
45946
|
+
this.focus();
|
|
45947
|
+
}
|
|
45948
|
+
focus(options) {
|
|
45624
45949
|
if (this.disabled()) {
|
|
45625
45950
|
return;
|
|
45626
45951
|
}
|
|
45627
|
-
this.registeredField()?.focus();
|
|
45952
|
+
this.registeredField()?.focus(options);
|
|
45628
45953
|
}
|
|
45629
45954
|
/**
|
|
45630
45955
|
* Normalizes and appends a tag. Returns whether it was added. While mixed, the first
|
|
@@ -45706,8 +46031,8 @@ class TagInputFieldDirective {
|
|
|
45706
46031
|
}
|
|
45707
46032
|
}
|
|
45708
46033
|
/** @internal */
|
|
45709
|
-
focus() {
|
|
45710
|
-
this.elementRef.nativeElement.focus({ preventScroll: true });
|
|
46034
|
+
focus(options) {
|
|
46035
|
+
this.elementRef.nativeElement.focus(options ?? { preventScroll: true });
|
|
45711
46036
|
}
|
|
45712
46037
|
/** Commits the pending text as a tag (if any) and clears the field. */
|
|
45713
46038
|
commitPending() {
|
|
@@ -45814,6 +46139,9 @@ class TagInputComponent {
|
|
|
45814
46139
|
constructor() {
|
|
45815
46140
|
this.tagInput = inject(TagInputDirective);
|
|
45816
46141
|
}
|
|
46142
|
+
focus(options) {
|
|
46143
|
+
this.tagInput.focus(options);
|
|
46144
|
+
}
|
|
45817
46145
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TagInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45818
46146
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: TagInputComponent, isStandalone: true, selector: "et-tag-input", host: { listeners: { "click": "tagInput.activate()" }, classAttribute: "et-tag-input" }, hostDirectives: [{ directive: TagInputDirective, inputs: ["value", "value", "mixed", "mixed", "touched", "touched", "disabled", "disabled", "readonly", "readonly", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "placeholder", "placeholder", "mixedLabel", "mixedLabel", "separators", "separators", "allowDuplicates", "allowDuplicates", "normalizeTag", "normalizeTag", "maxTags", "maxTags"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<div class=\"et-tag-input-row\">\n <!-- readonly is not disabled: the chips keep their normal look, they just lose the\n remove affordance. While mixed there are no effective tags \u2014 the hidden raw value\n must not render as chips -->\n @for (tag of tagInput.effectiveValues(); track $index) {\n <et-chip\n [disabled]=\"tagInput.disabled()\"\n [removable]=\"!tagInput.readonly() && !tagInput.disabled()\"\n (remove)=\"tagInput.removeAt($index)\"\n >\n {{ tag }}\n </et-chip>\n }\n\n <input class=\"et-tag-input-field\" etTagInputField type=\"text\" />\n</div>\n", styles: ["@layer components{et-tag-input{display:block;flex:1;min-inline-size:0;color:inherit;cursor:text}et-tag-input[data-disabled]{cursor:not-allowed}et-tag-input .et-tag-input-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-inline-size:0}et-tag-input .et-tag-input-field{flex:1 1 60px;min-inline-size:60px;border:none;outline:none;background:transparent;font:inherit;color:inherit;padding:0;caret-color:var(--et-theme-color-primary-solid, currentColor)}et-tag-input .et-tag-input-field::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-tag-input .et-tag-input-field:disabled{cursor:not-allowed}et-tag-input[data-mixed] .et-tag-input-field::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], dependencies: [{ kind: "component", type: ChipComponent, selector: "et-chip" }, { kind: "directive", type: TagInputFieldDirective, selector: "input[etTagInputField]", exportAs: ["etTagInputField"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
45819
46147
|
}
|
|
@@ -46016,8 +46344,11 @@ class TextareaComponent {
|
|
|
46016
46344
|
syncNativeValue(event) {
|
|
46017
46345
|
this.textareaDir.syncFromNativeInput(event.target);
|
|
46018
46346
|
}
|
|
46347
|
+
focus(options) {
|
|
46348
|
+
this.textareaDir.focus(options);
|
|
46349
|
+
}
|
|
46019
46350
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46020
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: TextareaComponent, isStandalone: true, selector: "et-textarea", host: { listeners: { "click": "textareaDir.activate()" }, classAttribute: "et-textarea" }, viewQueries: [{ propertyName: "nativeTextarea", first: true, predicate: ["nativeTextarea"], descendants: true, isSignal: true }], hostDirectives: [{ directive: TextareaDirective, inputs: ["placeholder", "placeholder", "autocomplete", "autocomplete", "rows", "rows", "autosize", "autosize", "minRows", "minRows", "maxRows", "maxRows", "resize", "resize", "value", "value", "mixed", "mixed", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<textarea\n #nativeTextarea\n [value]=\"textareaDir.displayValue()\"\n [disabled]=\"textareaDir.disabled()\"\n [readOnly]=\"textareaDir.readonly()\"\n [required]=\"textareaDir.required()\"\n [placeholder]=\"textareaDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"textareaDir.autocomplete() || null\"\n [rows]=\"textareaDir.rows()\"\n [attr.name]=\"textareaDir.name() || null\"\n [attr.aria-invalid]=\"textareaDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"textareaDir.describedBy() || null\"\n [attr.aria-label]=\"textareaDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"textareaDir.labelId() || null\"\n [attr.data-resize]=\"textareaDir.effectiveResize()\"\n (input)=\"syncNativeValue($event)\"\n (focus)=\"textareaDir.focused.set(true)\"\n (blur)=\"textareaDir.focused.set(false); textareaDir.touched.set(true)\"\n class=\"et-textarea-native\"\n></textarea>\n", styles: ["@layer components{et-textarea{display:block;flex:1;min-inline-size:0;color:inherit}et-textarea .et-textarea-native{display:block;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0}et-textarea .et-textarea-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-textarea .et-textarea-native[data-resize=none]{resize:none}et-textarea .et-textarea-native[data-resize=vertical]{resize:vertical}et-textarea[data-mixed] .et-textarea-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
46351
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.7", type: TextareaComponent, isStandalone: true, selector: "et-textarea", host: { listeners: { "click": "textareaDir.activate()" }, classAttribute: "et-textarea" }, viewQueries: [{ propertyName: "nativeTextarea", first: true, predicate: ["nativeTextarea"], descendants: true, isSignal: true }], hostDirectives: [{ directive: TextareaDirective, inputs: ["placeholder", "placeholder", "autocomplete", "autocomplete", "rows", "rows", "autosize", "autosize", "minRows", "minRows", "maxRows", "maxRows", "resize", "resize", "value", "value", "mixed", "mixed", "touched", "touched", "mixedLabel", "mixedLabel", "disabled", "disabled", "readonly", "readonly", "hidden", "hidden", "invalid", "invalid", "errors", "errors", "required", "required", "name", "name", "maxLength", "maxLength", "pending", "pending", "aria-label", "aria-label", "aria-labelledby", "aria-labelledby"], outputs: ["valueChange", "valueChange", "mixedChange", "mixedChange", "touchedChange", "touchedChange"] }, { directive: i1.ColorInteractiveDirective }], ngImport: i0, template: "<textarea\n #nativeTextarea\n [value]=\"textareaDir.displayValue()\"\n [disabled]=\"textareaDir.disabled()\"\n [readOnly]=\"textareaDir.readonly()\"\n [required]=\"textareaDir.required()\"\n [placeholder]=\"textareaDir.effectivePlaceholder()\"\n [attr.autocomplete]=\"textareaDir.autocomplete() || null\"\n [rows]=\"textareaDir.rows()\"\n [attr.name]=\"textareaDir.name() || null\"\n [attr.aria-invalid]=\"textareaDir.shouldDisplayError() || null\"\n [attr.aria-describedby]=\"textareaDir.describedBy() || null\"\n [attr.aria-label]=\"textareaDir.ariaLabel() || null\"\n [attr.aria-labelledby]=\"textareaDir.labelId() || null\"\n [attr.data-resize]=\"textareaDir.effectiveResize()\"\n (input)=\"syncNativeValue($event)\"\n (focus)=\"textareaDir.focused.set(true)\"\n (blur)=\"textareaDir.focused.set(false); textareaDir.touched.set(true)\"\n class=\"et-textarea-native\"\n></textarea>\n", styles: ["@layer components{et-textarea{display:block;flex:1;min-inline-size:0;color:inherit}et-textarea .et-textarea-native{display:block;inline-size:100%;border:none;outline:none;background:transparent;font:inherit;color:inherit;caret-color:var(--et-theme-color-primary-solid, currentColor);padding:0;min-width:0}et-textarea .et-textarea-native::placeholder{color:color-mix(in srgb,currentColor 46%,transparent)}et-textarea .et-textarea-native[data-resize=none]{resize:none}et-textarea .et-textarea-native[data-resize=vertical]{resize:vertical}et-textarea[data-mixed] .et-textarea-native::placeholder{font-style:italic;color:color-mix(in srgb,currentColor 72%,transparent)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
46021
46352
|
}
|
|
46022
46353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: TextareaComponent, decorators: [{
|
|
46023
46354
|
type: Component,
|
|
@@ -46034,6 +46365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
46034
46365
|
'resize',
|
|
46035
46366
|
'value',
|
|
46036
46367
|
'mixed',
|
|
46368
|
+
'touched',
|
|
46037
46369
|
'mixedLabel',
|
|
46038
46370
|
'disabled',
|
|
46039
46371
|
'readonly',
|
|
@@ -63939,6 +64271,12 @@ class TabBarTriggerDirective {
|
|
|
63939
64271
|
this.ID = `et-tab-trigger-${nextTriggerId++}`;
|
|
63940
64272
|
this.justActivated = signal(false, /* @ts-ignore */
|
|
63941
64273
|
...(ngDevMode ? [{ debugName: "justActivated" }] : /* istanbul ignore next */ []));
|
|
64274
|
+
/**
|
|
64275
|
+
* @internal Set when something else owns the selection - a router link, where a click only asks to
|
|
64276
|
+
* navigate and the selection has to wait until that navigation is actually committed.
|
|
64277
|
+
*/
|
|
64278
|
+
this.deferSelection = signal(false, /* @ts-ignore */
|
|
64279
|
+
...(ngDevMode ? [{ debugName: "deferSelection" }] : /* istanbul ignore next */ []));
|
|
63942
64280
|
this.isSelected = computed(() => {
|
|
63943
64281
|
const tabBar = this.tabBar;
|
|
63944
64282
|
if (!tabBar) {
|
|
@@ -63995,7 +64333,9 @@ class TabBarTriggerDirective {
|
|
|
63995
64333
|
handleClick() {
|
|
63996
64334
|
if (!this.disabled()) {
|
|
63997
64335
|
const wasSelected = this.isSelected();
|
|
63998
|
-
this.
|
|
64336
|
+
if (!this.deferSelection()) {
|
|
64337
|
+
this.tabBar?.selectTrigger(this);
|
|
64338
|
+
}
|
|
63999
64339
|
if (!wasSelected) {
|
|
64000
64340
|
this.justActivated.set(true);
|
|
64001
64341
|
}
|
|
@@ -64265,7 +64605,6 @@ class NavTabLinkDirective {
|
|
|
64265
64605
|
constructor() {
|
|
64266
64606
|
this.routerLinkActive = inject(RouterLinkActive, { self: true, optional: true });
|
|
64267
64607
|
this.overlayRouterLink = inject(OVERLAY_ROUTER_LINK_TOKEN, { self: true, optional: true });
|
|
64268
|
-
this.overlayRouter = inject(OVERLAY_ROUTER_TOKEN, { optional: true });
|
|
64269
64608
|
this.navTabs = inject(NAV_TABS_TOKEN, { optional: true });
|
|
64270
64609
|
this.tabBar = inject(TabBarDirective, { optional: true });
|
|
64271
64610
|
this.destroyRef = inject(DestroyRef);
|
|
@@ -64275,18 +64614,15 @@ class NavTabLinkDirective {
|
|
|
64275
64614
|
...(ngDevMode ? [{ debugName: "routerLinkIsActive" }] : /* istanbul ignore next */ []));
|
|
64276
64615
|
this.isActive = computed(() => this.overlayRouterLink?.isActive() ?? this.routerLinkIsActive(), /* @ts-ignore */
|
|
64277
64616
|
...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
|
|
64617
|
+
// The router owns the selection: a click only asks to navigate, so a guard that vetoes or stalls
|
|
64618
|
+
// the navigation leaves the tab bar where it is.
|
|
64619
|
+
this.trigger.deferSelection.set(true);
|
|
64278
64620
|
this.routerLinkActive?.isActiveChange
|
|
64279
64621
|
.pipe(takeUntilDestroyed(this.destroyRef), tap((active) => {
|
|
64280
64622
|
this.routerLinkIsActive.set(active);
|
|
64281
64623
|
}))
|
|
64282
64624
|
.subscribe();
|
|
64283
|
-
// A click selects the trigger optimistically, so the active link has to claim the selection back
|
|
64284
|
-
// when the router refuses to move. Never while a navigation is in flight: the link being left is
|
|
64285
|
-
// still the active one in there, so claiming it back then undoes the click.
|
|
64286
64625
|
effect(() => {
|
|
64287
|
-
if (this.overlayRouter?.navigationPending()) {
|
|
64288
|
-
return;
|
|
64289
|
-
}
|
|
64290
64626
|
if (this.isActive() && this.tabBar?.activeTrigger() !== this.trigger) {
|
|
64291
64627
|
this.tabBar?.selectTrigger(this.trigger);
|
|
64292
64628
|
}
|
|
@@ -65932,11 +66268,11 @@ const TREE_IMPORTS = [TreeComponent, TreeDirective, TreeNodeDirective, TreeNodeD
|
|
|
65932
66268
|
|
|
65933
66269
|
// Generated from package.json by tools/scripts/generate-version.js - do not edit.
|
|
65934
66270
|
/** The version of `@ethlete/components` this build was cut from. */
|
|
65935
|
-
const COMPONENTS_VERSION = '1.0.0-next.
|
|
66271
|
+
const COMPONENTS_VERSION = '1.0.0-next.49';
|
|
65936
66272
|
|
|
65937
66273
|
/**
|
|
65938
66274
|
* Generated bundle index. Do not edit.
|
|
65939
66275
|
*/
|
|
65940
66276
|
|
|
65941
|
-
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, DATE_TIME_RANGE_INPUT_ERROR_CODES, DATE_TIME_RANGE_INPUT_IMPORTS, 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, DateTimeRangeInputComponent, DateTimeRangeInputDirective, DateTimeRangeInputFieldDirective, 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, NavTabLinkStylesComponent, 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, OverlayNavTabLinkComponent, 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_CARD_CONTROL_POSITIONS, 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, TIME_RANGE_INPUT_ERROR_CODES, TIME_RANGE_INPUT_IMPORTS, 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, TimeRangeInputComponent, TimeRangeInputDirective, TimeRangeInputFieldDirective, 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, WCAG_CONTRAST_RATIOS, 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, colorContrast, 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, getColorContrastRatio, 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, mapGridLayout, mapLayoutToBreakpoint, matchCountryByDialCode, matchParticipantDisplayName, mergeOverlayBreakpointConfigs, mergeOverlayConfigs, mirroredDoubleEliminationBracketLayout, mirroredSingleEliminationBracketLayout, mountNavTabLinkStyles, 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 };
|
|
66277
|
+
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, DATE_TIME_RANGE_INPUT_ERROR_CODES, DATE_TIME_RANGE_INPUT_IMPORTS, 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, DateTimeRangeInputComponent, DateTimeRangeInputDirective, DateTimeRangeInputFieldDirective, 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_IMPORTS, FORM_WARNING_MESSAGE_RESOLVER, FabComponent, FacebookPlayerComponent, FacebookPlayerDirective, FacebookPlayerParamsDirective, FacebookPlayerSlotComponent, FilterOverlayResetDirective, FilterOverlaySubmitDirective, FloatingActionAnchorDirective, FloatingActionDirective, FloatingActionScopeDirective, FloatingActionTopDirective, FloatingActionTriggerDirective, FocusRingDirective, FormDirective, 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, NavTabLinkStylesComponent, 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, OverlayNavTabLinkComponent, 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_CARD_CONTROL_POSITIONS, 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, TIME_RANGE_INPUT_ERROR_CODES, TIME_RANGE_INPUT_IMPORTS, 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, TimeRangeInputComponent, TimeRangeInputDirective, TimeRangeInputFieldDirective, 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, WCAG_CONTRAST_RATIOS, 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, colorContrast, 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, focusFirstInvalidField, formatDuration, formatFileSize, fromGridPosition, fullScreenDialogOverlayStrategy, generateBracketDataForEthlete, generateRoundTypeFromEthleteRoundType, generateTournamentModeFormEthleteRounds, getClosestOverlay, getColorContrastRatio, 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, mapGridLayout, mapLayoutToBreakpoint, matchCountryByDialCode, matchParticipantDisplayName, mergeOverlayBreakpointConfigs, mergeOverlayConfigs, mirroredDoubleEliminationBracketLayout, mirroredSingleEliminationBracketLayout, mountNavTabLinkStyles, 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 };
|
|
65942
66278
|
//# sourceMappingURL=ethlete-components.mjs.map
|