@spectrum-web-components/overlay
Version:
An `<sp-overlay>` element is used to decorate content that you would like to present to your visitors as "overlaid" on the rest of the application. This includes dialogs (modal and not), pickers, tooltips, context menus, et al.
3 lines (2 loc) • 1.61 kB
JavaScript
"use strict";import{firstFocusableIn as p,firstFocusableSlottedIn as f}from"@spectrum-web-components/shared/src/first-focusable-in.js";import{VirtualTrigger as d}from"./VirtualTrigger.js";import{guaranteedAllTransitionend as v,nextFrame as l,overlayTimer as c}from"./AbstractOverlay.js";import{BeforetoggleClosedEvent as y,BeforetoggleOpenEvent as E,OverlayStateEvent as s}from"./events.js";import{userFocusableSelector as b}from"@spectrum-web-components/shared";export function OverlayNoPopover(a){class m extends a{async managePopoverOpen(){await this.managePosition()}async manageDelay(e){if(e===!1||e!==this.open){c.close(this);return}this.delayed&&await c.openTimer(this)&&(this.open=!e)}async ensureOnDOM(e){document.body.offsetHeight}async makeTransition(e){if(this.open!==e)return null;let o=null;const h=(t,r)=>()=>{if(e!==this.open)return;if(t.open=e,r===0){const i=e?E:y;this.dispatchEvent(new i)}if(e!==!0||(t.matches(b)&&(o=t),o=o||p(t),o))return;t.querySelectorAll("slot").forEach(i=>{o||(o=f(i))})},u=(t,r)=>async()=>{if(this.open!==e)return;const n=e?"sp-opened":"sp-closed";if(t.dispatchEvent(new s(n,this,{interaction:this.type})),r>0)return;const i=this.triggerElement instanceof d;this.dispatchEvent(new s(n,this,{interaction:this.type,publish:i})),this.triggerElement&&!i&&this.triggerElement.dispatchEvent(new s(n,this,{interaction:this.type,publish:!0})),this.state=e?"opened":"closed",this.returnFocus(),await l(),await l(),e===this.open&&e===!1&&this.requestSlottable()};return this.elements.forEach((t,r)=>{v(t,h(t,r),u(t,r))}),o}}return m}
//# sourceMappingURL=OverlayNoPopover.js.map