@ethlete/components 1.0.0-next.72 → 1.0.0-next.73
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 +9 -0
- package/fesm2022/ethlete-components.mjs +188 -128
- package/fesm2022/ethlete-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/carousel/carousel-autoplay-styles.component.css +5 -0
- package/src/lib/forms/form-field/form-field.component.css +7 -0
- package/types/ethlete-components.d.ts +8 -8
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, input, booleanAttribute, signal, inject, ElementRef, computed, effect, untracked, Directive, afterNextRender, DestroyRef, TemplateRef, model, linkedSignal, ViewEncapsulation, Component, ErrorHandler, numberAttribute, contentChildren, HostAttributeToken, Renderer2, output, viewChild, contentChild, NgZone, afterRenderEffect, ApplicationRef, DOCUMENT, ViewContainerRef, runInInjectionContext, createEnvironmentInjector, PLATFORM_ID, reflectComponentType, inputBinding, EnvironmentInjector, isSignal, Injector, createComponent, assertInInjectionContext, isDevMode as isDevMode$1, provideEnvironmentInitializer, viewChildren, outputBinding, afterEveryRender, CSP_NONCE } from '@angular/core';
|
|
3
3
|
import * as i1 from '@ethlete/core';
|
|
4
|
-
import { signalElementMutations, RuntimeError, injectHostElement, createComponentId, injectStyleManager, defineLabels, toProvideFn, toInjectFn, toToken, ProvideColorDirective, SurfaceInteractiveDirective, createCanAnimateSignal, ColorInteractiveDirective, injectSemanticColorTheme, injectColorThemes, injectLocale, defineStaticRootProvider, optionalBooleanAttribute as optionalBooleanAttribute$1, inferMimeType, mountVisuallyHidden, injectRenderer, ProvideSurfaceDirective, COLOR_PROVIDER, SURFACE_PROVIDER, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceContextTracker, injectBoundaryElement, injectRootSurfaceTheme, ANIMATED_LIFECYCLE_TOKEN, injectDefaultSurfaceTheme, resolveAppRootColorProvider, resolveSurfaceByElevation, createCssSurfaceName, provideBoundaryElement, AnimatedLifecycleDirective, isElement, isHTMLElement, injectBreakpointObserver, hasAnchoredOverlayPositionExtras, equal, nextFrame, animationDebugLog, resolveOverlayLayer, defineRootProvider, injectOverlayRuntime, anchoredOverlayPosition, injectQueryParam, injectUrl, randomId, ScrollObserverDirective, signalElementScrollState, ScrollObserverStartDirective, ScrollObserverEndDirective, enableAnchoredOverlayPositionExtras, forceReflow, elementCanScroll, matchesReducedMotion, createSwipeTracker, applyHostListener, defineProvider, fromNextFrame, injectRoute, createUnsavedChangesTracker, createDocumentElementSignal, AnimatedIfDirective, signalElementDimensions, applyInitialFocus, syncSignal, AutoSurfaceDirective, setInputSignal, injectTemplateRef, signalHostElementScrollState, applyStructuredDataBinding, injectIsDocumentVisible, mountEasingTokens, typedBreakpointTransform, signalElementChildren, signalElementIntersection, signalHostAttributes, signalHostClasses, signalHostStyles, getScrollContainerTarget, getScrollItemTarget, getElementScrollCoordinates, provideBreakpointInstance, signalClasses, useCursorDragScroll, signalStyles, getScrollSnapTarget, injectPrefersReducedMotion, signalHostElementIntersection, clamp as clamp$1, signalHostElementDimensions, injectSurfaceColorPalette, injectFocusVisibleTracker, isOnHigherOverlayLayer, copyToClipboard, getFocusableElements, injectAnimatedBlockSize, injectObserveBreakpoint, applyHostListeners, dragGestureFrom, signalDeferredLoading, AnimatableDirective, ColorInteractiveContainerDirective, ColorInteractiveExcludeDirective, injectParentSurface, ColorInteractiveHasFocusDirective, createFlipAnimation, createFlipAnimationGroup, focusElement, isFocusable, htmlToMarkdown, isSafeLinkUrl, markdownToHtml, MARKDOWN_VERBATIM_ATTR,
|
|
4
|
+
import { signalElementMutations, RuntimeError, injectHostElement, createComponentId, injectStyleManager, defineLabels, toProvideFn, toInjectFn, toToken, ProvideColorDirective, SurfaceInteractiveDirective, createCanAnimateSignal, ColorInteractiveDirective, injectSemanticColorTheme, injectColorThemes, injectLocale, defineStaticRootProvider, optionalBooleanAttribute as optionalBooleanAttribute$1, inferMimeType, mountVisuallyHidden, injectRenderer, ProvideSurfaceDirective, COLOR_PROVIDER, SURFACE_PROVIDER, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceContextTracker, injectBoundaryElement, injectRootSurfaceTheme, ANIMATED_LIFECYCLE_TOKEN, injectDefaultSurfaceTheme, resolveAppRootColorProvider, resolveSurfaceByElevation, createCssSurfaceName, provideBoundaryElement, AnimatedLifecycleDirective, isElement, isHTMLElement, injectBreakpointObserver, hasAnchoredOverlayPositionExtras, equal, nextFrame, animationDebugLog, resolveOverlayLayer, defineRootProvider, injectOverlayRuntime, anchoredOverlayPosition, injectQueryParam, injectUrl, randomId, ScrollObserverDirective, signalElementScrollState, ScrollObserverStartDirective, ScrollObserverEndDirective, enableAnchoredOverlayPositionExtras, forceReflow, elementCanScroll, matchesReducedMotion, createSwipeTracker, injectHasTouchInput, applyHostListener, defineProvider, fromNextFrame, injectRoute, createUnsavedChangesTracker, createDocumentElementSignal, AnimatedIfDirective, signalElementDimensions, applyInitialFocus, syncSignal, AutoSurfaceDirective, setInputSignal, injectTemplateRef, signalHostElementScrollState, applyStructuredDataBinding, injectIsDocumentVisible, mountEasingTokens, typedBreakpointTransform, signalElementChildren, signalElementIntersection, signalHostAttributes, signalHostClasses, signalHostStyles, getScrollContainerTarget, getScrollItemTarget, getElementScrollCoordinates, provideBreakpointInstance, signalClasses, useCursorDragScroll, signalStyles, getScrollSnapTarget, injectPrefersReducedMotion, signalHostElementIntersection, clamp as clamp$1, signalHostElementDimensions, injectSurfaceColorPalette, injectFocusVisibleTracker, isOnHigherOverlayLayer, copyToClipboard, getFocusableElements, injectAnimatedBlockSize, injectObserveBreakpoint, applyHostListeners, dragGestureFrom, signalDeferredLoading, AnimatableDirective, ColorInteractiveContainerDirective, ColorInteractiveExcludeDirective, injectParentSurface, ColorInteractiveHasFocusDirective, createFlipAnimation, createFlipAnimationGroup, focusElement, isFocusable, htmlToMarkdown, isSafeLinkUrl, markdownToHtml, MARKDOWN_VERBATIM_ATTR, isSafeUrl, signalHostElementMutations, DragHandleDirective, ResizeHandlesComponent, numberBreakpointTransform, DEFAULT_OVERLAY_LAYER, injectSurfaceType, applyLinkBinding, applyHeadTitleBinding, injectColorPalette, injectViewportSize, injectFileDownload, injectRouterEvent, canUseSessionMemory, createSessionMemory, provideUnsavedChangesConfirm } from '@ethlete/core';
|
|
5
5
|
import { NgTemplateOutlet, NgComponentOutlet, isPlatformServer, Location, DOCUMENT as DOCUMENT$1, isPlatformBrowser } from '@angular/common';
|
|
6
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
7
|
import { queryStateSignal, isQueryStateLoading, withArgs, createQueryErrorResponse, isQueryStateSuccess, isQueryStateFailure, executeUntilSettled$, extractQuery, createPagedQueryStack, queryComputed, isLegacyQuery, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe, queryErrorMessages } from '@ethlete/query';
|
|
8
8
|
import { DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, COMMON_BRACKET_ROUND_TYPE, BracketRuntimeError, BRACKET_ERROR_CODES, SWISS_BRACKET_ROUND_TYPE, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, TOURNAMENT_MODE, BRACKET_DATA_LAYOUT, resolveBracketLayout as resolveBracketLayout$1, createBracket, createPlaceholderBracketSource, drawMan, createDoubleEliminationGrid, ɵcreateStackedDoubleEliminationGrid as _createStackedDoubleEliminationGrid, createSingleEliminationGrid, generateBracketRoundSwissGroupMaps, createSwissGrid, drawSwissMan, standingPickStartOrder } from '@ethlete/bracket';
|
|
9
9
|
export { BRACKET_DATA_LAYOUT, BRACKET_ERROR_CODES, BRACKET_ROUND_MIRROR_TYPE, BRACKET_SWISS_GROUP_COLOR_TYPE, BracketMap, BracketRuntimeError, COMMON_BRACKET_ROUND_TYPE, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, GROUP_BRACKET_ROUND_TYPE, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, SWISS_BRACKET_ROUND_TYPE, TOURNAMENT_MODE, bracketSlot, createBracket, createPlaceholderBracketSource, isBracketSlotPredictable, migrateBracketPicks, resolveBracketSlot, standingRankSides, swapStandingRank, validateBracketSource } from '@ethlete/bracket';
|
|
10
10
|
import { isValid, format, startOfWeek, startOfDay, endOfWeek, isBefore, addDays, endOfMonth, startOfMonth, isSameYear, isSameMonth, isSameDay, startOfYear, isAfter, addYears, addMonths, setMonth, getDate, setDate, lastDayOfMonth, getWeek, endOfYear, setYear, parse, setSeconds, setMinutes, setHours, subDays, subWeeks, subMonths, endOfDay, setMilliseconds, differenceInCalendarDays, getDaysInMonth, eachDayOfInterval, addHours } from 'date-fns';
|
|
11
|
-
import { tap, Subject, take, filter, defer, map, finalize, timer, takeUntil,
|
|
11
|
+
import { tap, Subject, take, filter, defer, map, finalize, Observable, merge, fromEvent, EMPTY, ignoreElements, timer, takeUntil, interval, switchMap, observeOn, asapScheduler, combineLatest, distinctUntilChanged, startWith, debounceTime, catchError, of, delay, isObservable, from, share, scan, concat, firstValueFrom, defaultIfEmpty, Subscription, skip, animationFrameScheduler, EmptyError, exhaustMap, shareReplay, throwError, expand, toArray, takeWhile, mergeMap } from 'rxjs';
|
|
12
12
|
import { takeUntilDestroyed, toSignal, toObservable, outputFromObservable, outputToObservable, rxResource } from '@angular/core/rxjs-interop';
|
|
13
13
|
import * as i1$1 from '@angular/router';
|
|
14
14
|
import { ROUTES, Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError, NavigationSkipped, RouterLink, ActivatedRoute, RouterLinkActive } from '@angular/router';
|
|
@@ -9231,6 +9231,110 @@ const anchoredDialogOverlayStrategy = (options = {}) => {
|
|
|
9231
9231
|
};
|
|
9232
9232
|
};
|
|
9233
9233
|
|
|
9234
|
+
/**
|
|
9235
|
+
* Tracks the gap between where `position: fixed; bottom: 0` renders and the top of the soft
|
|
9236
|
+
* keyboard. Never emits; subscribing starts the tracking and unsubscribing stops it.
|
|
9237
|
+
*/
|
|
9238
|
+
const observeKeyboardInset = (tracking) => new Observable((subscriber) => {
|
|
9239
|
+
const viewport = tracking.view.visualViewport;
|
|
9240
|
+
if (!viewport)
|
|
9241
|
+
return;
|
|
9242
|
+
return trackKeyboardInset(tracking, viewport).subscribe(subscriber);
|
|
9243
|
+
});
|
|
9244
|
+
const trackKeyboardInset = ({ view, renderer, onInset, poll$ = EMPTY }, viewport) => {
|
|
9245
|
+
// In a same-origin iframe (Storybook, docs story embeds) the frame's own visualViewport never
|
|
9246
|
+
// reflects the soft keyboard - only the top window's does. Track the top viewport plus the
|
|
9247
|
+
// frame's position to compute how much of THIS frame the keyboard covers. A cross-origin
|
|
9248
|
+
// parent exposes neither (`frameElement` is null / viewport access throws), so those frames
|
|
9249
|
+
// keep the local metrics - the status quo of not seeing the keyboard at all.
|
|
9250
|
+
let frameElement = null;
|
|
9251
|
+
let topViewport = null;
|
|
9252
|
+
try {
|
|
9253
|
+
// no instanceof here - frameElement belongs to the PARENT document's realm, so it is never
|
|
9254
|
+
// an instance of this window's HTMLElement constructor
|
|
9255
|
+
frameElement = view.frameElement;
|
|
9256
|
+
topViewport = frameElement ? (view.top?.visualViewport ?? null) : null;
|
|
9257
|
+
}
|
|
9258
|
+
catch {
|
|
9259
|
+
frameElement = null;
|
|
9260
|
+
topViewport = null;
|
|
9261
|
+
}
|
|
9262
|
+
// Where "position: fixed; bottom: 0" actually lands is NOT derivable from window/visualViewport
|
|
9263
|
+
// on iOS: with the soft keyboard open (and focus zoom active), WebKit positions fixed elements
|
|
9264
|
+
// against an internal rect that tracks the visual viewport and is clamped to the document - its
|
|
9265
|
+
// bottom sits well below where `innerHeight` says. Measure it with a zero-size fixed probe
|
|
9266
|
+
// instead of assuming layout-viewport math; on engines without the quirk the probe bottom IS
|
|
9267
|
+
// `innerHeight`, so this degenerates to the plain `innerHeight - height - offsetTop`.
|
|
9268
|
+
const probe = renderer.createElement('div');
|
|
9269
|
+
renderer.setCssProperties(probe, {
|
|
9270
|
+
position: 'fixed',
|
|
9271
|
+
'inset-block-end': '0',
|
|
9272
|
+
'inline-size': '0',
|
|
9273
|
+
'block-size': '0',
|
|
9274
|
+
visibility: 'hidden',
|
|
9275
|
+
});
|
|
9276
|
+
renderer.appendChild(view.document.body, probe);
|
|
9277
|
+
let lastApplied = -1;
|
|
9278
|
+
const apply = () => {
|
|
9279
|
+
const fixedBottom = probe.getBoundingClientRect().bottom;
|
|
9280
|
+
let keyboardTop;
|
|
9281
|
+
if (frameElement && topViewport) {
|
|
9282
|
+
const covered = frameElement.getBoundingClientRect().bottom - (topViewport.offsetTop + topViewport.height);
|
|
9283
|
+
keyboardTop = view.innerHeight - Math.max(0, covered);
|
|
9284
|
+
}
|
|
9285
|
+
else {
|
|
9286
|
+
keyboardTop = viewport.offsetTop + viewport.height;
|
|
9287
|
+
}
|
|
9288
|
+
const inset = Math.max(0, fixedBottom - keyboardTop);
|
|
9289
|
+
if (inset === lastApplied)
|
|
9290
|
+
return false;
|
|
9291
|
+
lastApplied = inset;
|
|
9292
|
+
onInset(inset);
|
|
9293
|
+
return true;
|
|
9294
|
+
};
|
|
9295
|
+
// iOS moves its fixed-position rect ASYNCHRONOUSLY while scrolling with the keyboard open (and
|
|
9296
|
+
// fires few or no visualViewport events mid-scroll, including when the scroll itself dismisses
|
|
9297
|
+
// the keyboard) - a single synchronous re-measure per event reads a stale probe rect. So each
|
|
9298
|
+
// event kicks a rAF loop that keeps re-measuring until the inset has been stable for a few
|
|
9299
|
+
// frames, then stops - continuous tracking while anything moves, zero per-frame work at rest.
|
|
9300
|
+
let rafId = null;
|
|
9301
|
+
let quietFrames = 0;
|
|
9302
|
+
const settle = () => {
|
|
9303
|
+
quietFrames = apply() ? 0 : quietFrames + 1;
|
|
9304
|
+
// ~30 quiet frames (≈500ms) so the loop outlasts the keyboard show/hide animation - iOS can
|
|
9305
|
+
// fire its last viewport event right at the animation's start while the fixed-position rect
|
|
9306
|
+
// keeps moving until the end
|
|
9307
|
+
rafId = quietFrames < 30 ? view.requestAnimationFrame(settle) : null;
|
|
9308
|
+
};
|
|
9309
|
+
const kick = () => {
|
|
9310
|
+
quietFrames = 0;
|
|
9311
|
+
apply();
|
|
9312
|
+
rafId ??= view.requestAnimationFrame(settle);
|
|
9313
|
+
};
|
|
9314
|
+
kick();
|
|
9315
|
+
const viewports = topViewport ? [viewport, topViewport] : [viewport];
|
|
9316
|
+
// window scroll too: a root scroll pans the keyboard-tracking fixed rect without necessarily
|
|
9317
|
+
// firing any visualViewport event (top window as well when embedded in an iframe)
|
|
9318
|
+
const scrollTargets = [...viewports, view];
|
|
9319
|
+
try {
|
|
9320
|
+
if (frameElement && view.top)
|
|
9321
|
+
scrollTargets.push(view.top);
|
|
9322
|
+
}
|
|
9323
|
+
catch {
|
|
9324
|
+
// cross-origin top - its scrolls are invisible to us; the frame keeps local tracking
|
|
9325
|
+
}
|
|
9326
|
+
const viewportChange$ = merge(...viewports.map((v) => fromEvent(v, 'resize')),
|
|
9327
|
+
// These are ancestor viewports/windows (visualViewport, iframe top), not a component-owned
|
|
9328
|
+
// scroll container - signalElementScrollState targets a known elementRef and doesn't apply.
|
|
9329
|
+
// eslint-disable-next-line ethlete/prefer-scroll-state
|
|
9330
|
+
...scrollTargets.map((t) => fromEvent(t, 'scroll', { passive: true }))).pipe(tap(() => kick()));
|
|
9331
|
+
return merge(poll$.pipe(tap(() => apply())), viewportChange$).pipe(ignoreElements(), finalize(() => {
|
|
9332
|
+
if (rafId !== null)
|
|
9333
|
+
view.cancelAnimationFrame(rafId);
|
|
9334
|
+
probe.remove();
|
|
9335
|
+
}));
|
|
9336
|
+
};
|
|
9337
|
+
|
|
9234
9338
|
/** Elements whose own pointer handling wins over a drag gesture on an ancestor. */
|
|
9235
9339
|
const isInteractivePointerTarget = (target) => {
|
|
9236
9340
|
const tag = target.tagName.toLowerCase();
|
|
@@ -9584,6 +9688,8 @@ const MIN_LEAVE_DURATION_MS = 100;
|
|
|
9584
9688
|
const MAX_LEAVE_DURATION_MS = 350;
|
|
9585
9689
|
/** Below this release speed the swipe carries no momentum worth handing off. */
|
|
9586
9690
|
const MIN_LEAVE_SPEED = 50;
|
|
9691
|
+
/** How often a sheet lifted above the soft keyboard re-checks the keyboard, to recover a missed viewport event. */
|
|
9692
|
+
const KEYBOARD_POLL_MS = 500;
|
|
9587
9693
|
/**
|
|
9588
9694
|
* Gives the leave transition the speed the swipe had when it let go, instead of the fixed duration
|
|
9589
9695
|
* the stylesheet uses for every other close. Only the duration is overridden - position is already
|
|
@@ -9597,9 +9703,40 @@ const applyDismissMomentum = ({ el, momentum }, renderer) => {
|
|
|
9597
9703
|
renderer.setStyle(el, { transitionDuration: `${duration}ms` });
|
|
9598
9704
|
};
|
|
9599
9705
|
/** Shared strategy shape for all sheet variants: default enter/leave animations plus drag-to-dismiss. */
|
|
9600
|
-
const createSheetStrategy = (config, renderer) => {
|
|
9706
|
+
const createSheetStrategy = (config, { renderer, liftAboveKeyboard }) => {
|
|
9601
9707
|
let dragToDismissRef;
|
|
9602
9708
|
let dismissMomentum = null;
|
|
9709
|
+
let keyboardLift;
|
|
9710
|
+
const applyKeyboardLift = (pane, inset) => renderer.setCssProperties(pane, {
|
|
9711
|
+
'margin-block-end': inset ? `${inset}px` : null,
|
|
9712
|
+
'--et-overlay-max-height': inset ? `calc(100% - ${inset}px)` : null,
|
|
9713
|
+
});
|
|
9714
|
+
const stopKeyboardLift = (context) => {
|
|
9715
|
+
if (!keyboardLift)
|
|
9716
|
+
return;
|
|
9717
|
+
keyboardLift.unsubscribe();
|
|
9718
|
+
keyboardLift = undefined;
|
|
9719
|
+
applyKeyboardLift(context.containerEl, 0);
|
|
9720
|
+
};
|
|
9721
|
+
const startKeyboardLift = (context) => {
|
|
9722
|
+
stopKeyboardLift(context);
|
|
9723
|
+
const view = context.containerEl.ownerDocument.defaultView;
|
|
9724
|
+
if (!view || !liftAboveKeyboard?.())
|
|
9725
|
+
return;
|
|
9726
|
+
let inset = 0;
|
|
9727
|
+
const lift = () => applyKeyboardLift(context.containerEl, inset);
|
|
9728
|
+
keyboardLift = observeKeyboardInset({
|
|
9729
|
+
view,
|
|
9730
|
+
renderer,
|
|
9731
|
+
onInset: (next) => {
|
|
9732
|
+
inset = next;
|
|
9733
|
+
lift();
|
|
9734
|
+
},
|
|
9735
|
+
// re-asserts the lift too: a strategy switch re-positions the pane after onSwitchedTo, which
|
|
9736
|
+
// clears `--et-overlay-max-height`
|
|
9737
|
+
poll$: interval(KEYBOARD_POLL_MS).pipe(tap(lift)),
|
|
9738
|
+
}).subscribe();
|
|
9739
|
+
};
|
|
9603
9740
|
const attachDragToDismiss = (context) => {
|
|
9604
9741
|
if (!config.dragToDismiss)
|
|
9605
9742
|
return;
|
|
@@ -9623,11 +9760,18 @@ const createSheetStrategy = (config, renderer) => {
|
|
|
9623
9760
|
// A close interrupted by a re-open must not inherit the previous swipe's duration.
|
|
9624
9761
|
renderer.setStyle(context.containerEl, { transitionDuration: null });
|
|
9625
9762
|
dismissMomentum = null;
|
|
9763
|
+
startKeyboardLift(context);
|
|
9626
9764
|
context.lifecycle.enter();
|
|
9627
9765
|
},
|
|
9628
9766
|
onAfterEnter: (context) => attachDragToDismiss(context),
|
|
9629
|
-
onSwitchedTo:
|
|
9630
|
-
|
|
9767
|
+
onSwitchedTo: (context) => {
|
|
9768
|
+
attachDragToDismiss(context);
|
|
9769
|
+
startKeyboardLift(context);
|
|
9770
|
+
},
|
|
9771
|
+
onSwitchedAwayFrom: (context) => {
|
|
9772
|
+
detachDragToDismiss();
|
|
9773
|
+
stopKeyboardLift(context);
|
|
9774
|
+
},
|
|
9631
9775
|
onBeforeLeave: (context) => {
|
|
9632
9776
|
detachDragToDismiss();
|
|
9633
9777
|
if (dismissMomentum) {
|
|
@@ -9636,6 +9780,7 @@ const createSheetStrategy = (config, renderer) => {
|
|
|
9636
9780
|
}
|
|
9637
9781
|
context.lifecycle.leave();
|
|
9638
9782
|
},
|
|
9783
|
+
onAfterLeave: stopKeyboardLift,
|
|
9639
9784
|
};
|
|
9640
9785
|
};
|
|
9641
9786
|
|
|
@@ -9674,7 +9819,11 @@ const injectBottomSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(BOTTOM_SHEE
|
|
|
9674
9819
|
const BOTTOM_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
9675
9820
|
const defaults = injectBottomSheetStrategyDefaults();
|
|
9676
9821
|
const renderer = injectRenderer();
|
|
9677
|
-
const
|
|
9822
|
+
const hasTouchInput = injectHasTouchInput();
|
|
9823
|
+
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), {
|
|
9824
|
+
renderer,
|
|
9825
|
+
liftAboveKeyboard: hasTouchInput,
|
|
9826
|
+
});
|
|
9678
9827
|
return {
|
|
9679
9828
|
build,
|
|
9680
9829
|
};
|
|
@@ -10366,7 +10515,7 @@ const injectLeftSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(LEFT_SHEET_ST
|
|
|
10366
10515
|
const LEFT_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
10367
10516
|
const defaults = injectLeftSheetStrategyDefaults();
|
|
10368
10517
|
const renderer = injectRenderer();
|
|
10369
|
-
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);
|
|
10518
|
+
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), { renderer });
|
|
10370
10519
|
return {
|
|
10371
10520
|
build,
|
|
10372
10521
|
};
|
|
@@ -10404,7 +10553,7 @@ const injectRightSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(RIGHT_SHEET_
|
|
|
10404
10553
|
const RIGHT_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
10405
10554
|
const defaults = injectRightSheetStrategyDefaults();
|
|
10406
10555
|
const renderer = injectRenderer();
|
|
10407
|
-
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);
|
|
10556
|
+
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), { renderer });
|
|
10408
10557
|
return {
|
|
10409
10558
|
build,
|
|
10410
10559
|
};
|
|
@@ -10488,7 +10637,7 @@ const injectTopSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(TOP_SHEET_STRA
|
|
|
10488
10637
|
const TOP_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
10489
10638
|
const defaults = injectTopSheetStrategyDefaults();
|
|
10490
10639
|
const renderer = injectRenderer();
|
|
10491
|
-
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);
|
|
10640
|
+
const build = (config = {}) => createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), { renderer });
|
|
10492
10641
|
return {
|
|
10493
10642
|
build,
|
|
10494
10643
|
};
|
|
@@ -15780,11 +15929,11 @@ const SCROLLABLE_DARKEN_IMPORTS = [ScrollableDarkenDirective];
|
|
|
15780
15929
|
|
|
15781
15930
|
class CarouselAutoplayStylesComponent {
|
|
15782
15931
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CarouselAutoplayStylesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15783
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: CarouselAutoplayStylesComponent, isStandalone: true, selector: "et-carousel-autoplay-styles", ngImport: i0, template: '', isInline: true, styles: ["@layer components{@property --et-carousel-dot-ring-size{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-carousel-dot-ring-width{syntax: \"<length>\"; inherits: true; initial-value: 2.5px;}.et-carousel-dot-progress{position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border-radius:50%;opacity:0;scale:.55;-webkit-mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)));mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)))}.et-carousel-dot-progress-half{position:absolute;inset-block:0;inline-size:50%;overflow:hidden}.et-carousel-dot-progress-half:before{content:\"\";position:absolute;inset:0;background:var(--et-theme-color-primary-solid, currentColor);rotate:-180deg}.et-carousel-dot-progress-half:first-child{inset-inline-start:50%}.et-carousel-dot-progress-half:first-child:before{border-radius:0 100% 100% 0/0 50% 50% 0;transform-origin:0 50%}.et-carousel-dot-progress-half:last-child{inset-inline-start:0}.et-carousel-dot-progress-half:last-child:before{border-radius:100% 0 0 100%/50% 0 0 50%;transform-origin:100% 50%}@keyframes et-carousel-autoplay-sweep{0%{rotate:-180deg}to{rotate:0deg}}.et-carousel-dot{position:relative}.et-carousel-dot:after{content:\"\";position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border:var(--et-carousel-dot-ring-width) solid color-mix(in srgb,var(--et-surface-interaction-solid, gray) 30%,transparent);border-radius:50%;opacity:0;scale:.55}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress{opacity:1;scale:1}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:before{animation:et-carousel-autoplay-sweep calc(var(--_et-carousel-autoplay-duration, 5s) / 2) linear forwards}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:last-child:before{animation-delay:calc(var(--_et-carousel-autoplay-duration, 5s) / 2)}.et-carousel-dot:where([data-counting]):after{opacity:1;scale:1}.et-carousel-dot:where([data-counting]):before{scale:.75}.et-carousel .et-carousel-play-toggle .et-icon-button-icon{display:grid;place-items:center}.et-carousel-play-toggle .et-carousel-play-toggle-icon{grid-area:1 / 1;opacity:0;scale:.55;rotate:-35deg}.et-carousel-play-toggle:not([data-playing]) .et-icon--et-play,.et-carousel-play-toggle:where([data-playing]) .et-icon--et-pause{opacity:1;scale:1;rotate:0deg}.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot-progress,.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot:after{transition:opacity .22s var(--ease-3, ease-out),scale .22s var(--ease-3, ease-out)}.et-carousel:where(.et-carousel--can-animate) .et-carousel-play-toggle-icon{transition:opacity .18s var(--ease-3, ease-out),scale .18s var(--ease-3, ease-out),rotate .22s var(--ease-3, ease-out)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
15932
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: CarouselAutoplayStylesComponent, isStandalone: true, selector: "et-carousel-autoplay-styles", ngImport: i0, template: '', isInline: true, styles: ["@layer components{@property --et-carousel-dot-ring-size{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-carousel-dot-ring-width{syntax: \"<length>\"; inherits: true; initial-value: 2.5px;}.et-carousel-dot-progress{position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border-radius:50%;opacity:0;scale:.55;-webkit-mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)));mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)))}.et-carousel-dot-progress-half{position:absolute;inset-block:0;inline-size:50%;overflow:hidden}.et-carousel-dot-progress-half:before{content:\"\";position:absolute;inset:0;background:var(--et-theme-color-primary-solid, currentColor);rotate:-180deg;opacity:0}.et-carousel-dot-progress-half:first-child{inset-inline-start:50%}.et-carousel-dot-progress-half:first-child:before{border-radius:0 100% 100% 0/0 50% 50% 0;transform-origin:0 50%}.et-carousel-dot-progress-half:last-child{inset-inline-start:0}.et-carousel-dot-progress-half:last-child:before{border-radius:100% 0 0 100%/50% 0 0 50%;transform-origin:100% 50%}@keyframes et-carousel-autoplay-sweep{0%{rotate:-180deg;opacity:1}to{rotate:0deg;opacity:1}}.et-carousel-dot{position:relative}.et-carousel-dot:after{content:\"\";position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border:var(--et-carousel-dot-ring-width) solid color-mix(in srgb,var(--et-surface-interaction-solid, gray) 30%,transparent);border-radius:50%;opacity:0;scale:.55}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress{opacity:1;scale:1}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:before{animation:et-carousel-autoplay-sweep calc(var(--_et-carousel-autoplay-duration, 5s) / 2) linear forwards}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:last-child:before{animation-delay:calc(var(--_et-carousel-autoplay-duration, 5s) / 2)}.et-carousel-dot:where([data-counting]):after{opacity:1;scale:1}.et-carousel-dot:where([data-counting]):before{scale:.75}.et-carousel .et-carousel-play-toggle .et-icon-button-icon{display:grid;place-items:center}.et-carousel-play-toggle .et-carousel-play-toggle-icon{grid-area:1 / 1;opacity:0;scale:.55;rotate:-35deg}.et-carousel-play-toggle:not([data-playing]) .et-icon--et-play,.et-carousel-play-toggle:where([data-playing]) .et-icon--et-pause{opacity:1;scale:1;rotate:0deg}.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot-progress,.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot:after{transition:opacity .22s var(--ease-3, ease-out),scale .22s var(--ease-3, ease-out)}.et-carousel:where(.et-carousel--can-animate) .et-carousel-play-toggle-icon{transition:opacity .18s var(--ease-3, ease-out),scale .18s var(--ease-3, ease-out),rotate .22s var(--ease-3, ease-out)}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
15784
15933
|
}
|
|
15785
15934
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CarouselAutoplayStylesComponent, decorators: [{
|
|
15786
15935
|
type: Component,
|
|
15787
|
-
args: [{ selector: 'et-carousel-autoplay-styles', template: '', encapsulation: ViewEncapsulation.None, styles: ["@layer components{@property --et-carousel-dot-ring-size{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-carousel-dot-ring-width{syntax: \"<length>\"; inherits: true; initial-value: 2.5px;}.et-carousel-dot-progress{position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border-radius:50%;opacity:0;scale:.55;-webkit-mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)));mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)))}.et-carousel-dot-progress-half{position:absolute;inset-block:0;inline-size:50%;overflow:hidden}.et-carousel-dot-progress-half:before{content:\"\";position:absolute;inset:0;background:var(--et-theme-color-primary-solid, currentColor);rotate:-180deg}.et-carousel-dot-progress-half:first-child{inset-inline-start:50%}.et-carousel-dot-progress-half:first-child:before{border-radius:0 100% 100% 0/0 50% 50% 0;transform-origin:0 50%}.et-carousel-dot-progress-half:last-child{inset-inline-start:0}.et-carousel-dot-progress-half:last-child:before{border-radius:100% 0 0 100%/50% 0 0 50%;transform-origin:100% 50%}@keyframes et-carousel-autoplay-sweep{0%{rotate:-180deg}to{rotate:0deg}}.et-carousel-dot{position:relative}.et-carousel-dot:after{content:\"\";position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border:var(--et-carousel-dot-ring-width) solid color-mix(in srgb,var(--et-surface-interaction-solid, gray) 30%,transparent);border-radius:50%;opacity:0;scale:.55}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress{opacity:1;scale:1}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:before{animation:et-carousel-autoplay-sweep calc(var(--_et-carousel-autoplay-duration, 5s) / 2) linear forwards}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:last-child:before{animation-delay:calc(var(--_et-carousel-autoplay-duration, 5s) / 2)}.et-carousel-dot:where([data-counting]):after{opacity:1;scale:1}.et-carousel-dot:where([data-counting]):before{scale:.75}.et-carousel .et-carousel-play-toggle .et-icon-button-icon{display:grid;place-items:center}.et-carousel-play-toggle .et-carousel-play-toggle-icon{grid-area:1 / 1;opacity:0;scale:.55;rotate:-35deg}.et-carousel-play-toggle:not([data-playing]) .et-icon--et-play,.et-carousel-play-toggle:where([data-playing]) .et-icon--et-pause{opacity:1;scale:1;rotate:0deg}.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot-progress,.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot:after{transition:opacity .22s var(--ease-3, ease-out),scale .22s var(--ease-3, ease-out)}.et-carousel:where(.et-carousel--can-animate) .et-carousel-play-toggle-icon{transition:opacity .18s var(--ease-3, ease-out),scale .18s var(--ease-3, ease-out),rotate .22s var(--ease-3, ease-out)}}\n"] }]
|
|
15936
|
+
args: [{ selector: 'et-carousel-autoplay-styles', template: '', encapsulation: ViewEncapsulation.None, styles: ["@layer components{@property --et-carousel-dot-ring-size{syntax: \"<length>\"; inherits: true; initial-value: 18px;}@property --et-carousel-dot-ring-width{syntax: \"<length>\"; inherits: true; initial-value: 2.5px;}.et-carousel-dot-progress{position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border-radius:50%;opacity:0;scale:.55;-webkit-mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)));mask:radial-gradient(closest-side,transparent calc(100% - var(--et-carousel-dot-ring-width)),black calc(100% - var(--et-carousel-dot-ring-width)))}.et-carousel-dot-progress-half{position:absolute;inset-block:0;inline-size:50%;overflow:hidden}.et-carousel-dot-progress-half:before{content:\"\";position:absolute;inset:0;background:var(--et-theme-color-primary-solid, currentColor);rotate:-180deg;opacity:0}.et-carousel-dot-progress-half:first-child{inset-inline-start:50%}.et-carousel-dot-progress-half:first-child:before{border-radius:0 100% 100% 0/0 50% 50% 0;transform-origin:0 50%}.et-carousel-dot-progress-half:last-child{inset-inline-start:0}.et-carousel-dot-progress-half:last-child:before{border-radius:100% 0 0 100%/50% 0 0 50%;transform-origin:100% 50%}@keyframes et-carousel-autoplay-sweep{0%{rotate:-180deg;opacity:1}to{rotate:0deg;opacity:1}}.et-carousel-dot{position:relative}.et-carousel-dot:after{content:\"\";position:absolute;inline-size:var(--et-carousel-dot-ring-size);block-size:var(--et-carousel-dot-ring-size);border:var(--et-carousel-dot-ring-width) solid color-mix(in srgb,var(--et-surface-interaction-solid, gray) 30%,transparent);border-radius:50%;opacity:0;scale:.55}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress{opacity:1;scale:1}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:before{animation:et-carousel-autoplay-sweep calc(var(--_et-carousel-autoplay-duration, 5s) / 2) linear forwards}.et-carousel-dot:where([data-counting]) .et-carousel-dot-progress-half:last-child:before{animation-delay:calc(var(--_et-carousel-autoplay-duration, 5s) / 2)}.et-carousel-dot:where([data-counting]):after{opacity:1;scale:1}.et-carousel-dot:where([data-counting]):before{scale:.75}.et-carousel .et-carousel-play-toggle .et-icon-button-icon{display:grid;place-items:center}.et-carousel-play-toggle .et-carousel-play-toggle-icon{grid-area:1 / 1;opacity:0;scale:.55;rotate:-35deg}.et-carousel-play-toggle:not([data-playing]) .et-icon--et-play,.et-carousel-play-toggle:where([data-playing]) .et-icon--et-pause{opacity:1;scale:1;rotate:0deg}.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot-progress,.et-carousel:where(.et-carousel--can-animate) .et-carousel-dot:after{transition:opacity .22s var(--ease-3, ease-out),scale .22s var(--ease-3, ease-out)}.et-carousel:where(.et-carousel--can-animate) .et-carousel-play-toggle-icon{transition:opacity .18s var(--ease-3, ease-out),scale .18s var(--ease-3, ease-out),rotate .22s var(--ease-3, ease-out)}}\n"] }]
|
|
15788
15937
|
}] });
|
|
15789
15938
|
|
|
15790
15939
|
const CAROUSEL_TOKEN = new InjectionToken('CAROUSEL_TOKEN');
|
|
@@ -15795,8 +15944,8 @@ const MAX_TIMER_DELAY = 2_147_483_647;
|
|
|
15795
15944
|
* Advances the carousel on its own. Opt-in - put it on the same element as `[etCarousel]` - so a carousel
|
|
15796
15945
|
* that doesn't move by itself carries none of this.
|
|
15797
15946
|
*
|
|
15798
|
-
* It pauses whenever moving the page under the user would be rude:
|
|
15799
|
-
* inside it, the carousel scrolled off screen, or the user having asked for reduced motion (in which case
|
|
15947
|
+
* It pauses whenever moving the page under the user would be rude: a finger or the pointer on the
|
|
15948
|
+
* carousel, focus inside it, the carousel scrolled off screen, or the user having asked for reduced motion (in which case
|
|
15800
15949
|
* it never starts at all). It also stops at the last slide when the carousel doesn't `loop`, rather than
|
|
15801
15950
|
* jumping back to the start forever.
|
|
15802
15951
|
*
|
|
@@ -15860,6 +16009,9 @@ class CarouselAutoplayDirective {
|
|
|
15860
16009
|
this.isHovered = signal(false, /* @ts-ignore */
|
|
15861
16010
|
...(ngDevMode ? [{ debugName: "isHovered" }] : /* istanbul ignore next */ []));
|
|
15862
16011
|
/** @internal */
|
|
16012
|
+
this.isTouched = signal(false, /* @ts-ignore */
|
|
16013
|
+
...(ngDevMode ? [{ debugName: "isTouched" }] : /* istanbul ignore next */ []));
|
|
16014
|
+
/** @internal */
|
|
15863
16015
|
this.isFocusWithin = signal(false, /* @ts-ignore */
|
|
15864
16016
|
...(ngDevMode ? [{ debugName: "isFocusWithin" }] : /* istanbul ignore next */ []));
|
|
15865
16017
|
/**
|
|
@@ -15901,6 +16053,8 @@ class CarouselAutoplayDirective {
|
|
|
15901
16053
|
if (!isOnScreen)
|
|
15902
16054
|
return 'off-screen';
|
|
15903
16055
|
}
|
|
16056
|
+
if (this.isTouched())
|
|
16057
|
+
return 'touch';
|
|
15904
16058
|
if (this.pauseOnHover() && this.isHovered() && !this.isPointerOnPauseControl())
|
|
15905
16059
|
return 'hover';
|
|
15906
16060
|
if (this.pauseOnFocus() && this.isFocusWithin() && !this.isFocusOnPauseControl())
|
|
@@ -15966,6 +16120,9 @@ class CarouselAutoplayDirective {
|
|
|
15966
16120
|
return;
|
|
15967
16121
|
this.isHovered.set(isHovered);
|
|
15968
16122
|
}
|
|
16123
|
+
setTouched(event) {
|
|
16124
|
+
this.isTouched.set(event.touches.length > 0);
|
|
16125
|
+
}
|
|
15969
16126
|
advance() {
|
|
15970
16127
|
const carousel = this.carousel;
|
|
15971
16128
|
if (!carousel)
|
|
@@ -15977,7 +16134,7 @@ class CarouselAutoplayDirective {
|
|
|
15977
16134
|
carousel.next();
|
|
15978
16135
|
}
|
|
15979
16136
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CarouselAutoplayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
15980
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: CarouselAutoplayDirective, isStandalone: true, selector: "[etCarouselAutoplay]", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, autoplayTime: { classPropertyName: "autoplayTime", publicName: "autoplayTime", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null }, pauseOnFocus: { classPropertyName: "pauseOnFocus", publicName: "pauseOnFocus", isSignal: true, isRequired: false, transformFunction: null }, pauseOnOffScreen: { classPropertyName: "pauseOnOffScreen", publicName: "pauseOnOffScreen", isSignal: true, isRequired: false, transformFunction: null }, playOnInit: { classPropertyName: "playOnInit", publicName: "playOnInit", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerenter": "setHovered($event, true)", "pointerleave": "setHovered($event, false)", "focusin": "isFocusWithin.set(true)", "focusout": "isFocusWithin.set(false)" }, properties: { "attr.data-autoplaying": "isPlaying() ? \"\" : null" } }, providers: [{ provide: CAROUSEL_AUTOPLAY_TOKEN, useExisting: CarouselAutoplayDirective }], exportAs: ["etCarouselAutoplay"], ngImport: i0 }); }
|
|
16137
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: CarouselAutoplayDirective, isStandalone: true, selector: "[etCarouselAutoplay]", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, autoplayTime: { classPropertyName: "autoplayTime", publicName: "autoplayTime", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null }, pauseOnFocus: { classPropertyName: "pauseOnFocus", publicName: "pauseOnFocus", isSignal: true, isRequired: false, transformFunction: null }, pauseOnOffScreen: { classPropertyName: "pauseOnOffScreen", publicName: "pauseOnOffScreen", isSignal: true, isRequired: false, transformFunction: null }, playOnInit: { classPropertyName: "playOnInit", publicName: "playOnInit", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerenter": "setHovered($event, true)", "pointerleave": "setHovered($event, false)", "touchstart": "isTouched.set(true)", "touchend": "setTouched($event)", "touchcancel": "setTouched($event)", "focusin": "isFocusWithin.set(true)", "focusout": "isFocusWithin.set(false)" }, properties: { "attr.data-autoplaying": "isPlaying() ? \"\" : null" } }, providers: [{ provide: CAROUSEL_AUTOPLAY_TOKEN, useExisting: CarouselAutoplayDirective }], exportAs: ["etCarouselAutoplay"], ngImport: i0 }); }
|
|
15981
16138
|
}
|
|
15982
16139
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CarouselAutoplayDirective, decorators: [{
|
|
15983
16140
|
type: Directive,
|
|
@@ -15989,6 +16146,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
15989
16146
|
'[attr.data-autoplaying]': 'isPlaying() ? "" : null',
|
|
15990
16147
|
'(pointerenter)': 'setHovered($event, true)',
|
|
15991
16148
|
'(pointerleave)': 'setHovered($event, false)',
|
|
16149
|
+
'(touchstart)': 'isTouched.set(true)',
|
|
16150
|
+
'(touchend)': 'setTouched($event)',
|
|
16151
|
+
'(touchcancel)': 'setTouched($event)',
|
|
15992
16152
|
'(focusin)': 'isFocusWithin.set(true)',
|
|
15993
16153
|
'(focusout)': 'isFocusWithin.set(false)',
|
|
15994
16154
|
},
|
|
@@ -28027,7 +28187,7 @@ class FormFieldComponent {
|
|
|
28027
28187
|
this.formFieldDir.activate();
|
|
28028
28188
|
}
|
|
28029
28189
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28030
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", 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": "support.displaysError() || null", "attr.data-warning": "support.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" }, providers: [provideFormSupport()], queries: [{ propertyName: "description", first: true, predicate: DescriptionComponent, isSignal: true }], 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: nothing may come between a control's own affordances and\n the field they belong to. -->\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. -->\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<ng-content select=\"et-description\" />\n\n@if (support.shouldRenderSupport()) {\n <div\n [style.block-size.px]=\"support.supportHeight()\"\n [attr.data-can-animate]=\"support.supportCanAnimate() || null\"\n class=\"et-form-field-support\"\n etColorInteractiveExclude\n >\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\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 [attr.data-direction]=\"support.errorDirection()\"\n [attr.data-state]=\"support.errorState()\"\n [etProvideColor]=\"support.errorColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.warningId()\"\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 [attr.data-direction]=\"support.warningDirection()\"\n [attr.data-state]=\"support.warningState()\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n [attr.data-direction]=\"support.hintDirection()\"\n [attr.data-state]=\"support.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 <!-- Carries the error theme so the counter's own over-limit styling can reach the semantic\n error color even before the field shows an error. -->\n <div\n #counterContent\n [etProvideColor]=\"support.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-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;}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;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, var(--_et-form-field-control-border-radius, 4px));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}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}et-form-field .et-form-field-support-content[data-active]{opacity:1}et-form-field .et-form-field-support-content[data-state=leaving]{position:absolute;inset:0;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-ink-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-ink-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-support[data-can-animate]{transition:block-size var(--et-form-field-support-duration) ease}et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease}@starting-style{et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content[data-active]{opacity:0}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms}}}\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"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
28190
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", 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": "support.displaysError() || null", "attr.data-warning": "support.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" }, providers: [provideFormSupport()], queries: [{ propertyName: "description", first: true, predicate: DescriptionComponent, isSignal: true }], 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: nothing may come between a control's own affordances and\n the field they belong to. -->\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. -->\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<ng-content select=\"et-description\" />\n\n@if (support.shouldRenderSupport()) {\n <div\n [style.block-size.px]=\"support.supportHeight()\"\n [attr.data-can-animate]=\"support.supportCanAnimate() || null\"\n class=\"et-form-field-support\"\n etColorInteractiveExclude\n >\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\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 [attr.data-direction]=\"support.errorDirection()\"\n [attr.data-state]=\"support.errorState()\"\n [etProvideColor]=\"support.errorColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.warningId()\"\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 [attr.data-direction]=\"support.warningDirection()\"\n [attr.data-state]=\"support.warningState()\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n [attr.data-direction]=\"support.hintDirection()\"\n [attr.data-state]=\"support.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 <!-- Carries the error theme so the counter's own over-limit styling can reach the semantic\n error color even before the field shows an error. -->\n <div\n #counterContent\n [etProvideColor]=\"support.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-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;}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;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, var(--_et-form-field-control-border-radius, 4px));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}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}et-form-field .et-form-field-support-content[data-active]{opacity:1}et-form-field .et-form-field-support-content[data-state=leaving]{position:absolute;inset:0;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-ink-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-ink-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-support[data-can-animate]{transition:block-size var(--et-form-field-support-duration) ease}et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease}@starting-style{et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content[data-active]{opacity:0}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms}}@media(pointer:coarse){et-form-field :is(input:not([type=checkbox],[type=radio],[type=range]),textarea){font-size:max(1em,16px)}}}\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"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
28031
28191
|
}
|
|
28032
28192
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
28033
28193
|
type: Component,
|
|
@@ -28067,7 +28227,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
28067
28227
|
'[attr.data-size]': 'formFieldDir.usesTextFieldShell() ? size() : null',
|
|
28068
28228
|
'[attr.data-text-shell]': 'formFieldDir.usesTextFieldShell() || null',
|
|
28069
28229
|
'[style.--_et-form-field-prefix-offset]': 'prefixOffset()',
|
|
28070
|
-
}, 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: nothing may come between a control's own affordances and\n the field they belong to. -->\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. -->\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<ng-content select=\"et-description\" />\n\n@if (support.shouldRenderSupport()) {\n <div\n [style.block-size.px]=\"support.supportHeight()\"\n [attr.data-can-animate]=\"support.supportCanAnimate() || null\"\n class=\"et-form-field-support\"\n etColorInteractiveExclude\n >\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\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 [attr.data-direction]=\"support.errorDirection()\"\n [attr.data-state]=\"support.errorState()\"\n [etProvideColor]=\"support.errorColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.warningId()\"\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 [attr.data-direction]=\"support.warningDirection()\"\n [attr.data-state]=\"support.warningState()\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n [attr.data-direction]=\"support.hintDirection()\"\n [attr.data-state]=\"support.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 <!-- Carries the error theme so the counter's own over-limit styling can reach the semantic\n error color even before the field shows an error. -->\n <div\n #counterContent\n [etProvideColor]=\"support.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-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;}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;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, var(--_et-form-field-control-border-radius, 4px));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}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}et-form-field .et-form-field-support-content[data-active]{opacity:1}et-form-field .et-form-field-support-content[data-state=leaving]{position:absolute;inset:0;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-ink-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-ink-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-support[data-can-animate]{transition:block-size var(--et-form-field-support-duration) ease}et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease}@starting-style{et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content[data-active]{opacity:0}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms}}}\n"] }]
|
|
28230
|
+
}, 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: nothing may come between a control's own affordances and\n the field they belong to. -->\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. -->\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<ng-content select=\"et-description\" />\n\n@if (support.shouldRenderSupport()) {\n <div\n [style.block-size.px]=\"support.supportHeight()\"\n [attr.data-can-animate]=\"support.supportCanAnimate() || null\"\n class=\"et-form-field-support\"\n etColorInteractiveExclude\n >\n <div class=\"et-form-field-support-row\">\n <div class=\"et-form-field-support-stack\">\n @if (support.shouldRenderError()) {\n <div\n #errorContent\n #errorAnimatable=\"etAnimatable\"\n [id]=\"formFieldDir.errorId()\"\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 [attr.data-direction]=\"support.errorDirection()\"\n [attr.data-state]=\"support.errorState()\"\n [etProvideColor]=\"support.errorColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.warningId()\"\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 [attr.data-direction]=\"support.warningDirection()\"\n [attr.data-state]=\"support.warningState()\"\n [etProvideColor]=\"support.warningColorTheme()\"\n class=\"et-form-field-support-content et-form-field-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 [id]=\"formFieldDir.hintId()\"\n [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n [attr.data-active]=\"support.hintActive() || null\"\n [attr.data-direction]=\"support.hintDirection()\"\n [attr.data-state]=\"support.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 <!-- Carries the error theme so the counter's own over-limit styling can reach the semantic\n error color even before the field shows an error. -->\n <div\n #counterContent\n [etProvideColor]=\"support.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-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;}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;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, var(--_et-form-field-control-border-radius, 4px));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}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}et-form-field .et-form-field-support-content[data-active]{opacity:1}et-form-field .et-form-field-support-content[data-state=leaving]{position:absolute;inset:0;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-ink-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-ink-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-support[data-can-animate]{transition:block-size var(--et-form-field-support-duration) ease}et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content{transition:opacity var(--et-form-field-support-duration) ease}@starting-style{et-form-field .et-form-field-support[data-can-animate] .et-form-field-support-content[data-active]{opacity:0}}@media(prefers-reduced-motion:reduce){et-form-field{--et-form-field-support-duration: 1ms}}@media(pointer:coarse){et-form-field :is(input:not([type=checkbox],[type=radio],[type=range]),textarea){font-size:max(1em,16px)}}}\n"] }]
|
|
28071
28231
|
}], 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 }] }], description: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DescriptionComponent), { ...{ descendants: false }, isSignal: true }] }] } });
|
|
28072
28232
|
|
|
28073
28233
|
const INPUT_MASK_HOST = new InjectionToken('INPUT_MASK_HOST');
|
|
@@ -46773,121 +46933,21 @@ class RichTextEditorComponent {
|
|
|
46773
46933
|
.subscribe();
|
|
46774
46934
|
}
|
|
46775
46935
|
/**
|
|
46776
|
-
* Keeps `--_et-rte-keyboard-inset` at the
|
|
46777
|
-
*
|
|
46778
|
-
*
|
|
46936
|
+
* Keeps `--_et-rte-keyboard-inset` at the soft keyboard's inset, so the docked toolbar sits on the
|
|
46937
|
+
* keyboard. Written straight to the host, not through a signal, so scrolling never schedules change
|
|
46938
|
+
* detection.
|
|
46779
46939
|
*/
|
|
46780
46940
|
keyboardInset$() {
|
|
46781
|
-
|
|
46782
|
-
|
|
46783
|
-
|
|
46784
|
-
if (!view || !viewport)
|
|
46785
|
-
return;
|
|
46786
|
-
return this.observeKeyboardInset(view, viewport).subscribe(subscriber);
|
|
46787
|
-
});
|
|
46788
|
-
}
|
|
46789
|
-
observeKeyboardInset(view, viewport) {
|
|
46941
|
+
const view = this.document.defaultView;
|
|
46942
|
+
if (!view)
|
|
46943
|
+
return EMPTY;
|
|
46790
46944
|
const host = this.host.nativeElement;
|
|
46791
|
-
|
|
46792
|
-
|
|
46793
|
-
|
|
46794
|
-
|
|
46795
|
-
|
|
46796
|
-
let frameElement = null;
|
|
46797
|
-
let topViewport = null;
|
|
46798
|
-
try {
|
|
46799
|
-
// no instanceof here - frameElement belongs to the PARENT document's realm, so it is never
|
|
46800
|
-
// an instance of this window's HTMLElement constructor
|
|
46801
|
-
frameElement = view.frameElement;
|
|
46802
|
-
topViewport = frameElement ? (view.top?.visualViewport ?? null) : null;
|
|
46803
|
-
}
|
|
46804
|
-
catch {
|
|
46805
|
-
frameElement = null;
|
|
46806
|
-
topViewport = null;
|
|
46807
|
-
}
|
|
46808
|
-
// Where "position: fixed; bottom: 0" actually lands is NOT derivable from window/visualViewport
|
|
46809
|
-
// on iOS: with the soft keyboard open (and focus zoom active), WebKit positions fixed elements
|
|
46810
|
-
// against an internal rect that tracks the visual viewport and is clamped to the document - its
|
|
46811
|
-
// bottom sits well below where `innerHeight` says. Measure it with a zero-size fixed probe
|
|
46812
|
-
// instead of assuming layout-viewport math; on engines without the quirk the probe bottom IS
|
|
46813
|
-
// `innerHeight`, so this degenerates to the plain `innerHeight - height - offsetTop`.
|
|
46814
|
-
const probe = this.renderer.createElement('div');
|
|
46815
|
-
this.renderer.setCssProperties(probe, {
|
|
46816
|
-
position: 'fixed',
|
|
46817
|
-
'inset-block-end': '0',
|
|
46818
|
-
'inline-size': '0',
|
|
46819
|
-
'block-size': '0',
|
|
46820
|
-
visibility: 'hidden',
|
|
46945
|
+
return observeKeyboardInset({
|
|
46946
|
+
view,
|
|
46947
|
+
renderer: this.renderer,
|
|
46948
|
+
onInset: (inset) => this.renderer.setCssProperty(host, '--_et-rte-keyboard-inset', `${inset}px`),
|
|
46949
|
+
poll$: toObservable(this.dockedToolbar, { injector: this.injector }).pipe(switchMap((docked) => (docked ? interval(DOCKED_TOOLBAR_POLL_MS) : EMPTY))),
|
|
46821
46950
|
});
|
|
46822
|
-
this.renderer.appendChild(this.document.body, probe);
|
|
46823
|
-
let lastApplied = -1;
|
|
46824
|
-
const apply = () => {
|
|
46825
|
-
const fixedBottom = probe.getBoundingClientRect().bottom;
|
|
46826
|
-
let keyboardTop;
|
|
46827
|
-
if (frameElement && topViewport) {
|
|
46828
|
-
// keyboard overlap of this frame, in the frame's own client coordinates
|
|
46829
|
-
const covered = frameElement.getBoundingClientRect().bottom - (topViewport.offsetTop + topViewport.height);
|
|
46830
|
-
keyboardTop = view.innerHeight - Math.max(0, covered);
|
|
46831
|
-
}
|
|
46832
|
-
else {
|
|
46833
|
-
keyboardTop = viewport.offsetTop + viewport.height;
|
|
46834
|
-
}
|
|
46835
|
-
const inset = Math.max(0, fixedBottom - keyboardTop);
|
|
46836
|
-
if (inset === lastApplied)
|
|
46837
|
-
return false;
|
|
46838
|
-
lastApplied = inset;
|
|
46839
|
-
this.renderer.setCssProperty(host, '--_et-rte-keyboard-inset', `${inset}px`);
|
|
46840
|
-
return true;
|
|
46841
|
-
};
|
|
46842
|
-
// iOS moves its fixed-position rect ASYNCHRONOUSLY while scrolling with the keyboard open (and
|
|
46843
|
-
// fires few or no visualViewport events mid-scroll, including when the scroll itself dismisses
|
|
46844
|
-
// the keyboard) - a single synchronous re-measure per event reads a stale probe rect and the
|
|
46845
|
-
// toolbar drifts under the keyboard. So each event kicks a rAF loop that keeps re-measuring
|
|
46846
|
-
// until the inset has been stable for a few frames, then stops - continuous tracking while
|
|
46847
|
-
// anything moves, zero per-frame work at rest.
|
|
46848
|
-
let rafId = null;
|
|
46849
|
-
let quietFrames = 0;
|
|
46850
|
-
const settle = () => {
|
|
46851
|
-
quietFrames = apply() ? 0 : quietFrames + 1;
|
|
46852
|
-
// ~30 quiet frames (≈500ms) so the loop outlasts the keyboard show/hide animation - iOS can
|
|
46853
|
-
// fire its last viewport event right at the animation's start while the fixed-position rect
|
|
46854
|
-
// keeps moving until the end
|
|
46855
|
-
rafId = quietFrames < 30 ? view.requestAnimationFrame(settle) : null;
|
|
46856
|
-
};
|
|
46857
|
-
const kick = () => {
|
|
46858
|
-
quietFrames = 0;
|
|
46859
|
-
apply();
|
|
46860
|
-
rafId ??= view.requestAnimationFrame(settle);
|
|
46861
|
-
};
|
|
46862
|
-
kick();
|
|
46863
|
-
// The event stream is not guaranteed to be complete: a soft keyboard can change height without a
|
|
46864
|
-
// viewport event (Gboard switching layout, a suggestion row appearing), and inside an embedded
|
|
46865
|
-
// frame the event may land while the ancestor layout is still moving. Either leaves the bar parked
|
|
46866
|
-
// for a keyboard that is no longer there - floating over the content instead of sitting on it. So
|
|
46867
|
-
// re-measure on a slow timer for as long as the bar is actually docked: one rect read every
|
|
46868
|
-
// POLL_MS, no rAF loop and no change detection, and a stale position heals within half a second.
|
|
46869
|
-
const poll$ = toObservable(this.dockedToolbar, { injector: this.injector }).pipe(switchMap((docked) => (docked ? interval(DOCKED_TOOLBAR_POLL_MS) : EMPTY)), tap(() => apply()));
|
|
46870
|
-
const viewports = topViewport ? [viewport, topViewport] : [viewport];
|
|
46871
|
-
// window scroll too: a root scroll pans the keyboard-tracking fixed rect without necessarily
|
|
46872
|
-
// firing any visualViewport event (top window as well when embedded in an iframe)
|
|
46873
|
-
const scrollTargets = [...viewports, view];
|
|
46874
|
-
try {
|
|
46875
|
-
if (frameElement && view.top)
|
|
46876
|
-
scrollTargets.push(view.top);
|
|
46877
|
-
}
|
|
46878
|
-
catch {
|
|
46879
|
-
// cross-origin top - its scrolls are invisible to us; the frame keeps local tracking
|
|
46880
|
-
}
|
|
46881
|
-
const viewportChange$ = merge(...viewports.map((v) => fromEvent(v, 'resize')),
|
|
46882
|
-
// These are ancestor viewports/windows (visualViewport, iframe top), not a component-owned
|
|
46883
|
-
// scroll container - signalElementScrollState targets a known elementRef and doesn't apply.
|
|
46884
|
-
// eslint-disable-next-line ethlete/prefer-scroll-state
|
|
46885
|
-
...scrollTargets.map((t) => fromEvent(t, 'scroll', { passive: true }))).pipe(tap(() => kick()));
|
|
46886
|
-
return merge(poll$, viewportChange$).pipe(ignoreElements(), finalize(() => {
|
|
46887
|
-
if (rafId !== null)
|
|
46888
|
-
view.cancelAnimationFrame(rafId);
|
|
46889
|
-
probe.remove();
|
|
46890
|
-
}));
|
|
46891
46951
|
}
|
|
46892
46952
|
/** `editingActive` follows the editor's focus, but lingers ~400ms after a blur so a menu/link
|
|
46893
46953
|
* editor opened from the docked toolbar (which takes focus into an overlay) keeps the bar up. */
|
|
@@ -77177,7 +77237,7 @@ const provideUnsavedChangesAlertDialog = () => provideUnsavedChangesConfirm(() =
|
|
|
77177
77237
|
|
|
77178
77238
|
// Generated from package.json by tools/scripts/generate-version.js - do not edit.
|
|
77179
77239
|
/** The version of `@ethlete/components` this build was cut from. */
|
|
77180
|
-
const COMPONENTS_VERSION = '1.0.0-next.
|
|
77240
|
+
const COMPONENTS_VERSION = '1.0.0-next.73';
|
|
77181
77241
|
|
|
77182
77242
|
/**
|
|
77183
77243
|
* Generated bundle index. Do not edit.
|