UNPKG

@public-ui/components

Version:

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

4 lines 5.25 kB
/*! * KoliBri - The accessible HTML-Standard */ "use strict";var index=require("./index-C3uXtd6W.js"),alignFloatingElements=require("./align-floating-elements-DhQa2Mpw.js"),common=require("./common-1pTy2kta.js"),align=require("./align-CZMTZlEl.js"),show=require("./show-uOPnYOEA.js"),clsx=require("./clsx-CkZlkaek.js"),events=require("./events-Cd8febUV.js");const validatePopoverCallbacks=(e,t)=>{common.watchValidator(e,"_on",e=>"object"==typeof e&&null!==e,new Set(["PopoverCallbacksPropType {Events.onClose}"]),t)},KolPopover=class{constructor(e){index.registerInstance(this,e),this.alignPopover=async()=>{this.popoverElement&&(this.triggerElement&&await alignFloatingElements.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=alignFloatingElements.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&&events.dispatchDomEvent(this.host,events.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=common.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=common.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 index.h(index.Host,{key:"2f8909c00120d1d00d56f0a891bf137e968b482f",ref:this.catchHostAndTriggerElement,class:"kol-popover"},index.h("div",{key:"d04819e7919b23042debe87158f189889c95e9ca",class:clsx.clsx("kol-popover__content",{"kol-popover__content--visible":this.state._visible}),ref:this.catchPopoverElement,popover:"auto"},index.h("div",{key:"e5a08ef22c2ee7c3dc8f1ca25a9b34a14f6076b9",class:clsx.clsx("kol-popover__arrow",`kol-popover__arrow--${this.state._align}`),ref:this.catchArrowElement}),index.h("slot",{key:"e7d525b678723312037a84233c3d810663c8d4cd"})))}validateAlign(e){align.validateAlign(this,e),this.alignPopover()}validateOn(e){validatePopoverCallbacks(this,e)}validateShow(e){if(show.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"]}}};exports.kol_popover_wc=KolPopover;