import type { ComponentInterface, EventEmitter } from '@stencil/core'; import { Component, Event, Host, Listen, Prop, h } from '@stencil/core'; import { getIonTheme } from '../../global/ionic-global'; /** * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component. */ @Component({ tag: 'ion-backdrop', styleUrls: { ios: 'backdrop.ios.scss', md: 'backdrop.md.scss', ionic: 'backdrop.md.scss', }, shadow: true, }) export class Backdrop implements ComponentInterface { /** * If `true`, the backdrop will be visible. */ @Prop() visible = true; /** * If `true`, the backdrop will can be clicked and will emit the `ionBackdropTap` event. */ @Prop() tappable = true; /** * If `true`, the backdrop will stop propagation on tap. */ @Prop() stopPropagation = true; /** * Emitted when the backdrop is tapped. */ @Event() ionBackdropTap!: EventEmitter; @Listen('click', { passive: false, capture: true }) protected onMouseDown(ev: TouchEvent) { this.emitTap(ev); } private emitTap(ev: Event) { if (this.stopPropagation) { ev.preventDefault(); ev.stopPropagation(); } if (this.tappable) { this.ionBackdropTap.emit(); } } render() { const theme = getIonTheme(this); return ( ); } }