@angular/material
Version:
Angular Material
1 lines • 66.7 kB
Source Map (JSON)
{"version":3,"file":"_tooltip-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tooltip/tooltip.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tooltip/tooltip.html"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {takeUntil} from 'rxjs/operators';\nimport {\n BooleanInput,\n coerceBooleanProperty,\n coerceNumberProperty,\n NumberInput,\n} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n inject,\n afterNextRender,\n Injector,\n DOCUMENT,\n Renderer2,\n} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n ConnectedPosition,\n ConnectionPositionPair,\n createFlexibleConnectedPositionStrategy,\n createOverlayRef,\n createRepositionScrollStrategy,\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n OriginConnectionPosition,\n OverlayConnectionPosition,\n OverlayRef,\n ScrollDispatcher,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {MediaMatcher} from '@angular/cdk/layout';\nimport {Observable, Subject} from 'rxjs';\nimport {_animationsDisabled} from '../core';\n\n/** Possible positions for a tooltip. */\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n\n/**\n * Options for how the tooltip trigger should handle touch gestures.\n * See `MatTooltip.touchGestures` for more information.\n */\nexport type TooltipTouchGestures = 'auto' | 'on' | 'off';\n\n/** Possible visibility states of a tooltip. */\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\n\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\n\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nexport function getMatTooltipInvalidPositionError(position: string) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'mat-tooltip-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return () => createRepositionScrollStrategy(injector, {scrollThrottle: SCROLL_THROTTLE_MS});\n },\n },\n);\n\n/** Injection token to be used to override the default options for `matTooltip`. */\nexport const MAT_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken<MatTooltipDefaultOptions>(\n 'mat-tooltip-default-options',\n {\n providedIn: 'root',\n factory: () => ({\n showDelay: 0,\n hideDelay: 0,\n touchendHideDelay: 1500,\n }),\n },\n);\n\n/** Default `matTooltip` options that can be overridden. */\nexport interface MatTooltipDefaultOptions {\n /** Default delay when the tooltip is shown. */\n showDelay: number;\n\n /** Default delay when the tooltip is hidden. */\n hideDelay: number;\n\n /** Default delay when hiding the tooltip on a touch device. */\n touchendHideDelay: number;\n\n /** Time between the user putting the pointer on a tooltip trigger and the long press event being fired on a touch device. */\n touchLongPressShowDelay?: number;\n\n /** Default touch gesture handling for tooltips. */\n touchGestures?: TooltipTouchGestures;\n\n /** Default position for tooltips. */\n position?: TooltipPosition;\n\n /**\n * Default value for whether tooltips should be positioned near the click or touch origin\n * instead of outside the element bounding box.\n */\n positionAtOrigin?: boolean;\n\n /** Disables the ability for the user to interact with the tooltip element. */\n disableTooltipInteractivity?: boolean;\n\n /**\n * Default classes to be applied to the tooltip. These default classes will not be applied if\n * `tooltipClass` is defined directly on the tooltip element, as it will override the default.\n */\n tooltipClass?: string | string[];\n\n /**\n * By default the tooltip attempts to detect whether the user's device is able to hover by\n * consulting the `Platform` provider that was created a long time ago and is based on\n * some data points that may not be entirely accurate anymore (e.g. user agent string and\n * Android/iOS-specific APIs), however changing them will break existing users. You can use this\n * config property to opt into a more modern detection mechanism.\n *\n * The supported values include:\n *\n * - `false` - Default value. Detection is based on the `Platform` provider.\n * - `true` - The tooltip will use the `any-hover` media query for more accurate detection.\n * Note that this may break existing unit tests running in a headless browser.\n * - `() => boolean` - If the automatic detection doesn't work properly in your case (e.g. the\n * `any-hover` media query isn't supported) and you're able to detect more accurately, you can\n * pass in a function that will be used for detection instead. It should return `true` if the\n * device **has the ability to hover**, or `false` if it cannot.\n */\n detectHoverCapability?: boolean | (() => boolean);\n}\n\n/**\n * CSS class that will be attached to the overlay panel.\n * @deprecated\n * @breaking-change 13.0.0 remove this variable\n */\nexport const TOOLTIP_PANEL_CLASS = 'mat-mdc-tooltip-panel';\n\nconst PANEL_CLASS = 'tooltip-panel';\n\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = {passive: true};\n\n// These constants were taken from MDC's `numbers` object. We can't import them from MDC,\n// because they have some top-level references to `window` which break during SSR.\nconst MIN_VIEWPORT_TOOLTIP_THRESHOLD = 8;\nconst UNBOUNDED_ANCHOR_GAP = 8;\nconst MIN_HEIGHT = 24;\nconst MAX_WIDTH = 200;\n\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\n@Directive({\n selector: '[matTooltip]',\n exportAs: 'matTooltip',\n host: {\n 'class': 'mat-mdc-tooltip-trigger',\n '[class.mat-mdc-tooltip-disabled]': 'disabled',\n },\n})\nexport class MatTooltip implements OnDestroy, AfterViewInit {\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n private _platform = inject(Platform);\n private _ariaDescriber = inject(AriaDescriber);\n private _focusMonitor = inject(FocusMonitor);\n protected _dir = inject(Directionality);\n private _injector = inject(Injector);\n private _viewContainerRef = inject(ViewContainerRef);\n private _mediaMatcher = inject(MediaMatcher);\n private _document = inject(DOCUMENT);\n private _renderer = inject(Renderer2);\n private _animationsDisabled = _animationsDisabled();\n private _defaultOptions = inject<MatTooltipDefaultOptions>(MAT_TOOLTIP_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n _overlayRef: OverlayRef | null = null;\n _tooltipInstance: TooltipComponent | null = null;\n _overlayPanelClass: string[] | undefined; // Used for styling internally.\n\n private _portal!: ComponentPortal<TooltipComponent>;\n private _position: TooltipPosition = 'below';\n private _positionAtOrigin: boolean = false;\n private _disabled: boolean = false;\n private _tooltipClass!: string | string[] | Set<string> | {[key: string]: unknown};\n private _viewInitialized = false;\n private _pointerExitEventsInitialized = false;\n private readonly _tooltipComponent = TooltipComponent;\n private _viewportMargin = 8;\n private _currentPosition!: TooltipPosition;\n private readonly _cssClassPrefix: string = 'mat-mdc';\n private _ariaDescriptionPending = false;\n private _dirSubscribed = false;\n\n /** Allows the user to define the position of the tooltip relative to the parent element */\n @Input('matTooltipPosition')\n get position(): TooltipPosition {\n return this._position;\n }\n\n set position(value: TooltipPosition) {\n if (value !== this._position) {\n this._position = value;\n\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n this._tooltipInstance?.show(0);\n this._overlayRef.updatePosition();\n }\n }\n }\n\n /**\n * Whether tooltip should be relative to the click or touch origin\n * instead of outside the element bounding box.\n */\n @Input('matTooltipPositionAtOrigin')\n get positionAtOrigin(): boolean {\n return this._positionAtOrigin;\n }\n\n set positionAtOrigin(value: BooleanInput) {\n this._positionAtOrigin = coerceBooleanProperty(value);\n this._detach();\n this._overlayRef = null;\n }\n\n /** Disables the display of the tooltip. */\n @Input('matTooltipDisabled')\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: BooleanInput) {\n const isDisabled = coerceBooleanProperty(value);\n\n if (this._disabled !== isDisabled) {\n this._disabled = isDisabled;\n\n // If tooltip is disabled, hide immediately.\n if (isDisabled) {\n this.hide(0);\n } else {\n this._setupPointerEnterEventsIfNeeded();\n }\n\n this._syncAriaDescription(this.message);\n }\n }\n\n /** The default delay in ms before showing the tooltip after show is called */\n @Input('matTooltipShowDelay')\n get showDelay(): number {\n return this._showDelay;\n }\n\n set showDelay(value: NumberInput) {\n this._showDelay = coerceNumberProperty(value);\n }\n\n private _showDelay!: number;\n\n /** The default delay in ms before hiding the tooltip after hide is called */\n @Input('matTooltipHideDelay')\n get hideDelay(): number {\n return this._hideDelay;\n }\n\n set hideDelay(value: NumberInput) {\n this._hideDelay = coerceNumberProperty(value);\n\n if (this._tooltipInstance) {\n this._tooltipInstance._mouseLeaveHideDelay = this._hideDelay;\n }\n }\n\n private _hideDelay!: number;\n\n /**\n * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n * uses a long press gesture to show and hide, however it can conflict with the native browser\n * gestures. To work around the conflict, Angular Material disables native gestures on the\n * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n * elements). The different values for this option configure the touch event handling as follows:\n * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n * browser gestures on particular elements. In particular, it allows text selection on inputs\n * and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n * - `on` - Enables touch gestures for all elements and disables native\n * browser gestures with no exceptions.\n * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n * showing on touch devices.\n */\n @Input('matTooltipTouchGestures') touchGestures: TooltipTouchGestures = 'auto';\n\n /** The message to be displayed in the tooltip */\n @Input('matTooltip')\n get message(): string {\n return this._message;\n }\n\n set message(value: string | number | null | undefined) {\n const oldMessage = this._message;\n\n // If the message is not a string (e.g. number), convert it to a string and trim it.\n // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n // away the string-conversion: https://github.com/angular/components/issues/20684\n this._message = value != null ? String(value).trim() : '';\n\n if (!this._message && this._isTooltipVisible()) {\n this.hide(0);\n } else {\n this._setupPointerEnterEventsIfNeeded();\n this._updateTooltipMessage();\n }\n\n this._syncAriaDescription(oldMessage);\n }\n\n private _message = '';\n\n /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n @Input('matTooltipClass')\n get tooltipClass() {\n return this._tooltipClass;\n }\n\n set tooltipClass(value: string | string[] | Set<string> | {[key: string]: unknown}) {\n this._tooltipClass = value;\n if (this._tooltipInstance) {\n this._setTooltipClass(this._tooltipClass);\n }\n }\n\n /** Manually-bound passive event listeners. */\n private readonly _eventCleanups: (() => void)[] = [];\n\n /** Timer started at the last `touchstart` event. */\n private _touchstartTimeout: null | ReturnType<typeof setTimeout> = null;\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Whether ngOnDestroyed has been called. */\n private _isDestroyed = false;\n\n constructor() {\n const defaultOptions = this._defaultOptions;\n\n if (defaultOptions) {\n this._showDelay = defaultOptions.showDelay;\n this._hideDelay = defaultOptions.hideDelay;\n\n if (defaultOptions.position) {\n this.position = defaultOptions.position;\n }\n\n if (defaultOptions.positionAtOrigin) {\n this.positionAtOrigin = defaultOptions.positionAtOrigin;\n }\n\n if (defaultOptions.touchGestures) {\n this.touchGestures = defaultOptions.touchGestures;\n }\n\n if (defaultOptions.tooltipClass) {\n this.tooltipClass = defaultOptions.tooltipClass;\n }\n }\n\n this._viewportMargin = MIN_VIEWPORT_TOOLTIP_THRESHOLD;\n }\n\n ngAfterViewInit() {\n // This needs to happen after view init so the initial values for all inputs have been set.\n this._viewInitialized = true;\n this._setupPointerEnterEventsIfNeeded();\n\n this._focusMonitor\n .monitor(this._elementRef)\n .pipe(takeUntil(this._destroyed))\n .subscribe(origin => {\n // Note that the focus monitor runs outside the Angular zone.\n if (!origin) {\n this._ngZone.run(() => this.hide(0));\n } else if (origin === 'keyboard') {\n this._ngZone.run(() => this.show());\n }\n });\n }\n\n /**\n * Dispose the tooltip when destroyed.\n */\n ngOnDestroy() {\n const nativeElement = this._elementRef.nativeElement;\n\n // Optimization: Do not call clearTimeout unless there is an active timer.\n if (this._touchstartTimeout) {\n clearTimeout(this._touchstartTimeout);\n }\n\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._tooltipInstance = null;\n }\n\n this._eventCleanups.forEach(cleanup => cleanup());\n this._eventCleanups.length = 0;\n this._destroyed.next();\n this._destroyed.complete();\n this._isDestroyed = true;\n this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');\n this._focusMonitor.stopMonitoring(nativeElement);\n }\n\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n show(delay: number = this.showDelay, origin?: {x: number; y: number}): void {\n if (this.disabled || !this.message || this._isTooltipVisible()) {\n this._tooltipInstance?._cancelPendingAnimations();\n return;\n }\n\n const overlayRef = this._createOverlay(origin);\n this._detach();\n this._portal =\n this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);\n instance._triggerElement = this._elementRef.nativeElement;\n instance._mouseLeaveHideDelay = this._hideDelay;\n instance\n .afterHidden()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._setTooltipClass(this._tooltipClass);\n this._updateTooltipMessage();\n instance.show(delay);\n }\n\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n hide(delay: number = this.hideDelay): void {\n const instance = this._tooltipInstance;\n\n if (instance) {\n if (instance.isVisible()) {\n instance.hide(delay);\n } else {\n instance._cancelPendingAnimations();\n this._detach();\n }\n }\n }\n\n /** Shows/hides the tooltip */\n toggle(origin?: {x: number; y: number}): void {\n this._isTooltipVisible() ? this.hide() : this.show(undefined, origin);\n }\n\n /** Returns true if the tooltip is currently visible to the user */\n _isTooltipVisible(): boolean {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n\n /** Create the overlay config and position strategy */\n private _createOverlay(origin?: {x: number; y: number}): OverlayRef {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig()\n .positionStrategy as FlexibleConnectedPositionStrategy;\n\n if ((!this.positionAtOrigin || !origin) && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n\n this._detach();\n }\n\n const scrollableAncestors = this._injector\n .get(ScrollDispatcher)\n .getAncestorScrollContainers(this._elementRef);\n\n const panelClass = `${this._cssClassPrefix}-${PANEL_CLASS}`;\n\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = createFlexibleConnectedPositionStrategy(\n this._injector,\n this.positionAtOrigin ? origin || this._elementRef : this._elementRef,\n )\n .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n .withFlexibleDimensions(false)\n .withViewportMargin(this._viewportMargin)\n .withScrollableContainers(scrollableAncestors)\n .withPopoverLocation('global');\n\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n this._updateCurrentPositionClass(change.connectionPair);\n\n if (this._tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide(0));\n }\n }\n });\n\n this._overlayRef = createOverlayRef(this._injector, {\n direction: this._dir,\n positionStrategy: strategy,\n panelClass: this._overlayPanelClass ? [...this._overlayPanelClass, panelClass] : panelClass,\n scrollStrategy: this._injector.get(MAT_TOOLTIP_SCROLL_STRATEGY)(),\n disableAnimations: this._animationsDisabled,\n eventPredicate: this._overlayEventPredicate,\n });\n\n this._updatePosition(this._overlayRef);\n\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n\n this._overlayRef\n .keydownEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(event => {\n // Note: we don't check the `keyCode` since it's covered by the `eventPredicate` above.\n event.preventDefault();\n event.stopPropagation();\n this._ngZone.run(() => this.hide(0));\n });\n\n if (this._defaultOptions?.disableTooltipInteractivity) {\n this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n }\n\n if (!this._dirSubscribed) {\n this._dirSubscribed = true;\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n }\n });\n }\n\n return this._overlayRef;\n }\n\n /** Detaches the currently-attached tooltip. */\n private _detach() {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n }\n\n this._tooltipInstance = null;\n }\n\n /** Updates the position of the current tooltip. */\n private _updatePosition(overlayRef: OverlayRef) {\n const position = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n const origin = this._getOrigin();\n const overlay = this._getOverlayPosition();\n\n position.withPositions([\n this._addOffset({...origin.main, ...overlay.main}),\n this._addOffset({...origin.fallback, ...overlay.fallback}),\n ]);\n }\n\n /** Adds the configured offset to a position. Used as a hook for child classes. */\n protected _addOffset(position: ConnectedPosition): ConnectedPosition {\n const offset = UNBOUNDED_ANCHOR_GAP;\n const isLtr = !this._dir || this._dir.value == 'ltr';\n\n if (position.originY === 'top') {\n position.offsetY = -offset;\n } else if (position.originY === 'bottom') {\n position.offsetY = offset;\n } else if (position.originX === 'start') {\n position.offsetX = isLtr ? -offset : offset;\n } else if (position.originX === 'end') {\n position.offsetX = isLtr ? offset : -offset;\n }\n\n return position;\n }\n\n /**\n * Returns the origin position and a fallback position based on the user's position preference.\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n */\n _getOrigin(): {main: OriginConnectionPosition; fallback: OriginConnectionPosition} {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let originPosition: OriginConnectionPosition;\n\n if (position == 'above' || position == 'below') {\n originPosition = {originX: 'center', originY: position == 'above' ? 'top' : 'bottom'};\n } else if (\n position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)\n ) {\n originPosition = {originX: 'start', originY: 'center'};\n } else if (\n position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)\n ) {\n originPosition = {originX: 'end', originY: 'center'};\n } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getMatTooltipInvalidPositionError(position);\n }\n\n const {x, y} = this._invertPosition(originPosition!.originX, originPosition!.originY);\n\n return {\n main: originPosition!,\n fallback: {originX: x, originY: y},\n };\n }\n\n /** Returns the overlay position and a fallback position based on the user's preference */\n _getOverlayPosition(): {main: OverlayConnectionPosition; fallback: OverlayConnectionPosition} {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let overlayPosition: OverlayConnectionPosition;\n\n if (position == 'above') {\n overlayPosition = {overlayX: 'center', overlayY: 'bottom'};\n } else if (position == 'below') {\n overlayPosition = {overlayX: 'center', overlayY: 'top'};\n } else if (\n position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)\n ) {\n overlayPosition = {overlayX: 'end', overlayY: 'center'};\n } else if (\n position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)\n ) {\n overlayPosition = {overlayX: 'start', overlayY: 'center'};\n } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getMatTooltipInvalidPositionError(position);\n }\n\n const {x, y} = this._invertPosition(overlayPosition!.overlayX, overlayPosition!.overlayY);\n\n return {\n main: overlayPosition!,\n fallback: {overlayX: x, overlayY: y},\n };\n }\n\n /** Updates the tooltip message and repositions the overlay according to the new message length */\n private _updateTooltipMessage() {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this._tooltipInstance) {\n this._tooltipInstance.message = this.message;\n this._tooltipInstance._markForCheck();\n\n afterNextRender(\n () => {\n if (this._tooltipInstance) {\n this._overlayRef!.updatePosition();\n }\n },\n {\n injector: this._injector,\n },\n );\n }\n }\n\n /** Updates the tooltip class */\n private _setTooltipClass(\n tooltipClass: string | string[] | Set<string> | {[key: string]: unknown},\n ) {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClass =\n tooltipClass instanceof Set ? Array.from(tooltipClass) : tooltipClass;\n this._tooltipInstance._markForCheck();\n }\n }\n\n /** Inverts an overlay position. */\n private _invertPosition(x: HorizontalConnectionPos, y: VerticalConnectionPos) {\n if (this.position === 'above' || this.position === 'below') {\n if (y === 'top') {\n y = 'bottom';\n } else if (y === 'bottom') {\n y = 'top';\n }\n } else {\n if (x === 'end') {\n x = 'start';\n } else if (x === 'start') {\n x = 'end';\n }\n }\n\n return {x, y};\n }\n\n /** Updates the class on the overlay panel based on the current position of the tooltip. */\n private _updateCurrentPositionClass(connectionPair: ConnectionPositionPair): void {\n const {overlayY, originX, originY} = connectionPair;\n let newPosition: TooltipPosition;\n\n // If the overlay is in the middle along the Y axis,\n // it means that it's either before or after.\n if (overlayY === 'center') {\n // Note that since this information is used for styling, we want to\n // resolve `start` and `end` to their real values, otherwise consumers\n // would have to remember to do it themselves on each consumption.\n if (this._dir && this._dir.value === 'rtl') {\n newPosition = originX === 'end' ? 'left' : 'right';\n } else {\n newPosition = originX === 'start' ? 'left' : 'right';\n }\n } else {\n newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n }\n\n if (newPosition !== this._currentPosition) {\n const overlayRef = this._overlayRef;\n\n if (overlayRef) {\n const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n overlayRef.removePanelClass(classPrefix + this._currentPosition);\n overlayRef.addPanelClass(classPrefix + newPosition);\n }\n\n this._currentPosition = newPosition;\n }\n }\n\n /** Binds the pointer events to the tooltip trigger. */\n private _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n if (this._disabled || !this.message || !this._viewInitialized || this._eventCleanups.length) {\n return;\n }\n\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (!this._isTouchPlatform()) {\n this._addListener('mouseenter', (event: MouseEvent) => {\n this._setupPointerExitEventsIfNeeded();\n let point = undefined;\n if (event.x !== undefined && event.y !== undefined) {\n point = event;\n }\n this.show(undefined, point);\n });\n } else if (this.touchGestures !== 'off') {\n this._disableNativeGesturesIfNecessary();\n this._addListener('touchstart', (event: TouchEvent) => {\n const touch = event.targetTouches?.[0];\n const origin = touch ? {x: touch.clientX, y: touch.clientY} : undefined;\n // Note that it's important that we don't `preventDefault` here,\n // because it can prevent click events from firing on the element.\n this._setupPointerExitEventsIfNeeded();\n if (this._touchstartTimeout) {\n clearTimeout(this._touchstartTimeout);\n }\n\n const DEFAULT_LONGPRESS_DELAY = 500;\n this._touchstartTimeout = setTimeout(() => {\n this._touchstartTimeout = null;\n this.show(undefined, origin);\n }, this._defaultOptions?.touchLongPressShowDelay ?? DEFAULT_LONGPRESS_DELAY);\n });\n }\n }\n\n private _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n\n if (!this._isTouchPlatform()) {\n this._addListener('mouseleave', (event: MouseEvent) => {\n const newTarget = event.relatedTarget as Node | null;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n });\n\n this._addListener('wheel', (event: WheelEvent) => {\n if (this._isTooltipVisible()) {\n const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n const element = this._elementRef.nativeElement;\n\n // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n // won't fire if the user scrolls away using the wheel without moving their cursor. We\n // work around it by finding the element under the user's cursor and closing the tooltip\n // if it's not the trigger.\n if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n this.hide();\n }\n }\n });\n } else if (this.touchGestures !== 'off') {\n this._disableNativeGesturesIfNecessary();\n const touchendListener = () => {\n if (this._touchstartTimeout) {\n clearTimeout(this._touchstartTimeout);\n }\n this.hide(this._defaultOptions?.touchendHideDelay);\n };\n\n this._addListener('touchend', touchendListener);\n this._addListener('touchcancel', touchendListener);\n }\n }\n\n private _addListener<T extends Event>(name: string, listener: (event: T) => void) {\n this._eventCleanups.push(\n this._renderer.listen(this._elementRef.nativeElement, name, listener, passiveListenerOptions),\n );\n }\n\n private _isTouchPlatform(): boolean {\n const detectHoverCapability = this._defaultOptions?.detectHoverCapability;\n\n if (typeof detectHoverCapability === 'function') {\n return !detectHoverCapability();\n }\n\n if (this._platform.IOS || this._platform.ANDROID) {\n // If we detected iOS or Android, it's definitely supported.\n return true;\n } else if (!this._platform.isBrowser) {\n // If it's not a browser, it's definitely not supported.\n return false;\n }\n\n return !!detectHoverCapability && this._mediaMatcher.matchMedia('(any-hover: none)').matches;\n }\n\n /** Disables the native browser gestures, based on how the tooltip has been configured. */\n private _disableNativeGesturesIfNecessary() {\n const gestures = this.touchGestures;\n\n if (gestures !== 'off') {\n const element = this._elementRef.nativeElement;\n const style = element.style as unknown as Record<string, string>;\n\n // If gestures are set to `auto`, we don't disable text selection on inputs and\n // textareas, because it prevents the user from typing into them on iOS Safari.\n if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n style['userSelect'] =\n style['msUserSelect'] =\n style['webkitUserSelect'] =\n style['MozUserSelect'] =\n 'none';\n }\n\n // If we have `auto` gestures and the element uses native HTML dragging,\n // we don't set `-webkit-user-drag` because it prevents the native behavior.\n if (gestures === 'on' || !element.draggable) {\n style['webkitUserDrag'] = 'none';\n }\n\n style['touchAction'] = 'none';\n style['webkitTapHighlightColor'] = 'transparent';\n }\n }\n\n /** Updates the tooltip's ARIA description based on it current state. */\n private _syncAriaDescription(oldMessage: string): void {\n if (this._ariaDescriptionPending) {\n return;\n }\n\n this._ariaDescriptionPending = true;\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, oldMessage, 'tooltip');\n\n // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n if (!this._isDestroyed) {\n afterNextRender(\n {\n write: () => {\n this._ariaDescriptionPending = false;\n\n if (this.message && !this.disabled) {\n this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');\n }\n },\n },\n {injector: this._injector},\n );\n }\n }\n\n /** Determines which events should be routed to the tooltip overlay. */\n private _overlayEventPredicate = (event: Event) => {\n if (event.type === 'keydown') {\n return (\n this._isTooltipVisible() &&\n (event as KeyboardEvent).keyCode === ESCAPE &&\n !hasModifierKey(event as KeyboardEvent)\n );\n }\n return true;\n };\n}\n\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\n@Component({\n selector: 'mat-tooltip-component',\n templateUrl: 'tooltip.html',\n styleUrl: 'tooltip.css',\n encapsulation: ViewEncapsulation.None,\n host: {\n '(mouseleave)': '_handleMouseLeave($event)',\n 'aria-hidden': 'true',\n },\n})\nexport class TooltipComponent implements OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /* Whether the tooltip text overflows to multiple lines */\n _isMultiline = false;\n\n /** Message to display in the tooltip */\n message!: string;\n\n /** Classes to be added to the tooltip. */\n tooltipClass!: string | string[] | {[key: string]: unknown};\n\n /** The timeout ID of any current timer set to show the tooltip */\n private _showTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n /** The timeout ID of any current timer set to hide the tooltip */\n private _hideTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n /** Element that caused the tooltip to open. */\n _triggerElement!: HTMLElement;\n\n /** Amount of milliseconds to delay the closing sequence. */\n _mouseLeaveHideDelay!: number;\n\n /** Whether animations are currently disabled. */\n private _animationsDisabled = _animationsDisabled();\n\n /** Reference to the internal tooltip element. */\n @ViewChild('tooltip', {\n // Use a static query here since we interact directly with\n // the DOM which can happen before `ngAfterViewInit`.\n static: true,\n })\n _tooltip!: ElementRef<HTMLElement>;\n\n /** Whether interactions on the page should close the tooltip */\n private _closeOnInteraction = false;\n\n /** Whether the tooltip is currently visible. */\n private _isVisible = false;\n\n /** Subject for notifying that the tooltip has been hidden from the view */\n private readonly _onHide: Subject<void> = new Subject();\n\n /** Name of the show animation and the class that toggles it. */\n private readonly _showAnimation = 'mat-mdc-tooltip-show';\n\n /** Name of the hide animation and the class that toggles it. */\n private readonly _hideAnimation = 'mat-mdc-tooltip-hide';\n\n /**\n * Shows the tooltip with an animation originating from the provided origin\n * @param delay Amount of milliseconds to the delay showing the tooltip.\n */\n show(delay: number): void {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId != null) {\n clearTimeout(this._hideTimeoutId);\n }\n\n this._showTimeoutId = setTimeout(() => {\n this._toggleVisibility(true);\n this._showTimeoutId = undefined;\n }, delay);\n }\n\n /**\n * Begins the animation to hide the tooltip after the provided delay in ms.\n * @param delay Amount of milliseconds to delay showing the tooltip.\n */\n hide(delay: number): void {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId != null) {\n clearTimeout(this._showTimeoutId);\n }\n\n this._hideTimeoutId = setTimeout(() => {\n this._toggleVisibility(false);\n this._hideTimeoutId = undefined;\n }, delay);\n }\n\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\n afterHidden(): Observable<void> {\n return this._onHide;\n }\n\n /** Whether the tooltip is being displayed. */\n isVisible(): boolean {\n return this._isVisible;\n }\n\n ngOnDestroy() {\n this._cancelPendingAnimations();\n this._onHide.complete();\n this._triggerElement = null!;\n }\n\n /**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.io/design/components/tooltips.html#behavior\n */\n _handleBodyInteraction(): void {\n if (this._closeOnInteraction) {\n this.hide(0);\n }\n }\n\n /**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n */\n _markForCheck(): void {\n this._changeDetectorRef.markForCheck();\n }\n\n _handleMouseLeave({relatedTarget}: MouseEvent) {\n if (!relatedTarget || !this._triggerElement.contains(relatedTarget as Node)) {\n if (this.isVisible()) {\n this.hide(this._mouseLeaveHideDelay);\n } else {\n this._finalizeAnimation(false);\n }\n }\n }\n\n /**\n * Callback for when the timeout in this.show() gets completed.\n * This method is only needed by the mdc-tooltip, and so it is only implemented\n * in the mdc-tooltip, not here.\n */\n protected _onShow(): void {\n this._isMultiline = this._isTooltipMultiline();\n this._markForCheck();\n }\n\n /** Whether the tooltip text has overflown to the next line */\n private _isTooltipMultiline() {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return rect.height > MIN_HEIGHT && rect.width >= MAX_WIDTH;\n }\n\n /** Event listener dispatched when an animation on the tooltip finishes. */\n _handleAnimationEnd({animationName}: AnimationEvent) {\n if (animationName === this._showAnimation || animationName === this._hideAnimation) {\n this._finalizeAnimation(animationName === this._showAnimation);\n }\n }\n\n /** Cancels any pending animation sequences. */\n _cancelPendingAnimations() {\n if (this._showTimeoutId != null) {\n clearTimeout(this._showTimeoutId);\n }\n\n if (this._hideTimeoutId != null) {\n clearTimeout(this._hideTimeoutId);\n }\n\n this._showTimeoutId = this._hideTimeoutId = undefined;\n }\n\n /** Handles the cleanup after an animation has finished. */\n private _finalizeAnimation(toVisible: boolean) {\n if (toVisible) {\n this._closeOnInteraction = true;\n } else if (!this.isVisible()) {\n this._onHide.next();\n }\n }\n\n /** Toggles the visibility of the tooltip element. */\n private _toggleVisibility(isVisible: boolean) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this._tooltip.nativeElement;\n const showClass = this._showAnimation;\n const hideClass = this._hideAnimation;\n tooltip.classList.remove(isVisible ? hideClass : showClass);\n tooltip.classList.add(isVisible ? showClass : hideClass);\n if (this._isVisible !== isVisible) {\n this._isVisible = isVisible;\n this._changeDetectorRef.markForCheck();\n }\n\n // It's common for internal apps to disable animations using `* { animation: none !important }`\n // which can break the opening sequence. Try to detect such cases and work around them.\n if (isVisible && !this._animationsDisabled && typeof getComputedStyle === 'function') {\n const styles = getComputedStyle(tooltip);\n\n // Use `getPropertyValue` to avoid issues with property renaming.\n if (\n styles.getPropertyValue('animation-duration') === '0s' ||\n styles.getPropertyValue('animation-name') === 'none'\n ) {\n this._animationsDisabled = true;\n }\n }\n\n if (isVisible) {\n this._onShow();\n }\n\n if (this._animationsDisabled) {\n tooltip.classList.add('_mat-animation-noopable');\n this._finalizeAnimation(isVisible);\n }\n }\n}\n","<div\n #tooltip\n class=\"mdc-tooltip mat-mdc-tooltip\"\n [class]=\"tooltipClass\"\n (animationend)=\"_handleAnimationEnd($event)\"\n [class.mdc-tooltip--multiline]=\"_isMultiline\">\n <div class=\"mat-mdc-tooltip-surface mdc-tooltip__surface\">{{message}}</div>\n</div>\n"],"names":[],"mappings":"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"}