@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.98 kB
JavaScript
"use strict";import{nothing as y,render as h}from"@spectrum-web-components/base";import{directive as v}from"@spectrum-web-components/base/src/async-directive.js";import{strategies as O}from"./strategies.js";import{removeSlottableRequest as m}from"./slottable-request-event.js";import{SlottableRequestDirective as c}from"./slottable-request-directive.js";import{AbstractOverlay as d}from"./AbstractOverlay.js";import{InteractionTypes as f}from"./InteractionController.js";export class OverlayTriggerDirective extends c{constructor(){super(...arguments);this.defaultOptions={triggerInteraction:"click",overlayOptions:{type:"auto",offset:0}};this.options={...this.defaultOptions.overlayOptions}}render(e,r){return y}update(e,[r,t]){var n,l,a,p;this.options={...this.defaultOptions.overlayOptions,...t==null?void 0:t.overlayOptions},this.insertionOptions=t==null?void 0:t.insertionOptions,this.template=r,this.host=(n=e.options)==null?void 0:n.host;let i=!1;const o=(t==null?void 0:t.triggerInteraction)||this.defaultOptions.triggerInteraction,s=f[(l=this.strategy)==null?void 0:l.type]!==o;this.target!==e.element&&(this.target=e.element,i=!0),(i||s)&&((a=this.strategy)==null||a.abort(),this.strategy=new O[o](this.target,{isPersistent:!0,handleOverlayReady:g=>{this.listenerHost=this.overlay=g,this.init()}})),this.strategy.open=(p=t==null?void 0:t.open)!=null?p:!1}handleSlottableRequest(e){var i,o;if(e.target!==e.currentTarget)return;const r=e.data===m,t={};if(this.host&&(t.host=this.host),h(r?void 0:this.template(),this.overlay,t),r)this.overlay.remove();else{d.applyOptions(this.overlay,{...this.options,trigger:this.target});const s=typeof((i=this.insertionOptions)==null?void 0:i.el)=="function"?this.insertionOptions.el():((o=this.insertionOptions)==null?void 0:o.el)||this.target,{where:n="afterend"}=this.insertionOptions||{};s.insertAdjacentElement(n,this.overlay)}}}export const trigger=v(OverlayTriggerDirective);
//# sourceMappingURL=overlay-trigger-directive.js.map