UNPKG

@public-ui/components

Version:

Contains all web components that belong to KoliBri - The accessible HTML-Standard.

4 lines 5.68 kB
/*! * KoliBri - The accessible HTML-Standard */ import{proxyCustomElement,HTMLElement,h,Host}from"@stencil/core/internal/client";import{a as alignFloatingElements,b as autoUpdate}from"./align-floating-elements.js";import{w as watchValidator,x as getDocument}from"./common.js";import{v as validateAlign}from"./align.js";import{v as validateShow}from"./show.js";import{c as clsx}from"./clsx.js";import{d as dispatchDomEvent,K as KolEvent}from"./events.js";const validatePopoverCallbacks=(e,t)=>{watchValidator(e,"_on",e=>"object"==typeof e&&null!==e,new Set(["PopoverCallbacksPropType {Events.onClose}"]),t)},KolPopover=proxyCustomElement(class extends HTMLElement{constructor(e){super(),!1!==e&&this.__registerHost(),this.alignPopover=async()=>{this.popoverElement&&(this.triggerElement&&await alignFloatingElements({align:this._align,referenceElement:this.triggerElement,arrowElement:this.arrowElement,floatingElement:this.popoverElement}),this.popoverElement.style.removeProperty("visibility"))},this.handleBeforeToggle=e=>{"open"===e.newState&&this.popoverElement&&(this.popoverElement.style.visibility="hidden")},this.handleToggle=e=>{var t,o,i,s,l,n;const r=e,a="open"===r.newState;if(this.state=Object.assign(Object.assign({},this.state),{_show:a,_visible:a}),a)null===(t=this.cleanupAutoUpdate)||void 0===t||t.call(this),this.triggerElement&&this.popoverElement&&(this.cleanupAutoUpdate=autoUpdate(this.triggerElement,this.popoverElement,()=>{this.alignPopover()})),this.addListenersToBody(),this.alignPopover();else{null===(o=this.cleanupAutoUpdate)||void 0===o||o.call(this),this.cleanupAutoUpdate=void 0,this.removeListenersFromBody();const e=null!==(i=this.lastCloseEvent)&&void 0!==i?i:r;this.lastCloseEvent=void 0,null===(s=this.triggerElement)||void 0===s||s.focus(),null===(n=null===(l=this.state._on)||void 0===l?void 0:l.onClose)||void 0===n||n.call(l,e),this.host&&dispatchDomEvent(this.host,KolEvent.close)}this._show!==a&&(this._show=a)},this.catchHostAndTriggerElement=e=>{e&&(this.host=e,this.triggerElement=e.previousElementSibling)},this.catchPopoverElement=e=>{this.popoverElement&&(this.popoverElement.removeEventListener("beforetoggle",this.handleBeforeToggle),this.popoverElement.removeEventListener("toggle",this.handleToggle)),this.popoverElement=e,this.popoverElement&&(this.popoverElement.addEventListener("beforetoggle",this.handleBeforeToggle),this.popoverElement.addEventListener("toggle",this.handleToggle),this.syncPopoverVisibility())},this.catchArrowElement=e=>{this.arrowElement=e},this.requestHide=e=>{var t;this.lastCloseEvent=e,null===(t=this.popoverElement)||void 0===t||t.hidePopover()},this.handleEscape=e=>{"Escape"===e.key&&this.requestHide(e)},this.hidePopoverByClickOutside=e=>{this.host&&!this.host.contains(e.target)&&this.requestHide(e)},this.handleScroll=()=>{this.alignPopover()},this._align="top",this._show=!1,this.state={_align:"top",_on:{},_show:!1,_visible:!1}}addListenersToBody(){var e;const t=getDocument(),o=t.body;o.addEventListener("keyup",this.handleEscape,{capture:!0}),o.addEventListener("click",this.hidePopoverByClickOutside,{capture:!0}),null===(e=t.scrollingElement)||void 0===e||e.addEventListener("scroll",this.handleScroll,{passive:!0})}removeListenersFromBody(){var e;const t=getDocument(),o=t.body;o.removeEventListener("keyup",this.handleEscape,{capture:!0}),o.removeEventListener("click",this.hidePopoverByClickOutside,{capture:!0}),null===(e=t.scrollingElement)||void 0===e||e.removeEventListener("scroll",this.handleScroll)}syncPopoverVisibility(){if(!this.popoverElement)return;const e=()=>{if(!this.popoverElement)return;const e=this.popoverElement.matches(":popover-open");this._show?e||this.popoverElement.showPopover():e&&this.popoverElement.hidePopover()};this.popoverElement.isConnected?e():requestAnimationFrame(()=>{e()})}render(){return h(Host,{key:"2f8909c00120d1d00d56f0a891bf137e968b482f",ref:this.catchHostAndTriggerElement,class:"kol-popover"},h("div",{key:"d04819e7919b23042debe87158f189889c95e9ca",class:clsx("kol-popover__content",{"kol-popover__content--visible":this.state._visible}),ref:this.catchPopoverElement,popover:"auto"},h("div",{key:"e5a08ef22c2ee7c3dc8f1ca25a9b34a14f6076b9",class:clsx("kol-popover__arrow",`kol-popover__arrow--${this.state._align}`),ref:this.catchArrowElement}),h("slot",{key:"e7d525b678723312037a84233c3d810663c8d4cd"})))}validateAlign(e){validateAlign(this,e),this.alignPopover()}validateOn(e){validatePopoverCallbacks(this,e)}validateShow(e){if(validateShow(this,e),this.popoverElement){const t=this.popoverElement.matches(":popover-open");if(e){if(!t)try{this.popoverElement.showPopover()}catch(e){}}else if(t)try{this.popoverElement.hidePopover()}catch(e){}}}componentWillLoad(){this.validateAlign(this._align),this.validateShow(this._show)}disconnectedCallback(){var e,t,o;null===(e=this.popoverElement)||void 0===e||e.removeEventListener("beforetoggle",this.handleBeforeToggle),null===(t=this.popoverElement)||void 0===t||t.removeEventListener("toggle",this.handleToggle),null===(o=this.cleanupAutoUpdate)||void 0===o||o.call(this),this.cleanupAutoUpdate=void 0,this.removeListenersFromBody()}static get watchers(){return{_align:["validateAlign"],_on:["validateOn"],_show:["validateShow"]}}},[260,"kol-popover-wc",{_align:[1],_on:[16],_show:[1540],state:[32]},void 0,{_align:["validateAlign"],_on:["validateOn"],_show:["validateShow"]}]);function defineCustomElement$1(){if("undefined"==typeof customElements)return;["kol-popover-wc"].forEach(e=>{if("kol-popover-wc"===e)customElements.get(e)||customElements.define(e,KolPopover)})}const KolPopoverWc=KolPopover,defineCustomElement=defineCustomElement$1;export{KolPopoverWc,defineCustomElement};