UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

2 lines 4.04 kB
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{et as t,tt as n}from"./control-ui-core-vvcQQV2m.js";function r(e){e.setAttribute(`aria-haspopup`,`dialog`),e.setAttribute(`aria-expanded`,`false`)}function i(e){e?.removeAttribute(`aria-controls`),e?.removeAttribute(`aria-expanded`),e?.removeAttribute(`aria-haspopup`)}function a(e,t){let n=document.createElement(`div`);return n.id=e,n.className=t,n.dataset.open=`true`,n.setAttribute(`role`,`dialog`),n}function o(e){(e.anchor.closest(`openclaw-modal-dialog`)??document.body).append(e.card),n(e.card),e.trigger.setAttribute(`aria-controls`,e.card.id),e.trigger.setAttribute(`aria-expanded`,`true`);let t=()=>s(e.anchor,e.card,e.placement);return window.addEventListener(`resize`,t),window.addEventListener(`scroll`,t,!0),e.observeVisualViewport!==!1&&(window.visualViewport?.addEventListener(`resize`,t),window.visualViewport?.addEventListener(`scroll`,t)),t(),()=>{window.removeEventListener(`resize`,t),window.removeEventListener(`scroll`,t,!0),window.visualViewport?.removeEventListener(`resize`,t),window.visualViewport?.removeEventListener(`scroll`,t)}}function s(e,t,n){let r=e.getBoundingClientRect(),i=t.offsetWidth,a=t.offsetHeight,o=Math.max(l,innerWidth-i-l),s=Math.max(l,innerHeight-a-l);if(n===`horizontal`){let e=r.right+c+i+l<=innerWidth,n=e?r.right+c:r.left-i-c;t.dataset.side=e?`right`:`left`,t.style.left=`${Math.min(Math.max(l,n),o)}px`,t.style.top=`${Math.min(Math.max(l,r.top),s)}px`;return}let u=r.bottom+c+a+l<=innerHeight,d=u?`bottom`:`top`,f=u?r.bottom+c:r.top-a-c;t.dataset.side=d,t.style.left=`${Math.min(Math.max(l,r.left),o)}px`,t.style.top=`${Math.min(Math.max(l,f),s)}px`}var c,l,u;function d(){return(d=e((()=>{t(),c=10,l=12,u=class{constructor(e,t=120){this.close=e,this.closeDelayMs=t,this.card=null,this.pointerInside=!1,this.pointerOverCard=!1,this.focusInside=!1,this.cardFocusInside=!1,this.explicitHold=!1,this.closeTimer=null,this.exitCleanup=null,this.anchor=null,this.openTimer=null,this.placement=`vertical`,this.stopPositioning=null,this.trigger=null,this.unmountContents=null}get held(){return this.explicitHold||this.pointerInside||this.pointerOverCard||this.focusInside||this.cardFocusInside}schedulePointerExit(e=220){this.pointerInside=!1,this.scheduleClose(e)}focusables(){return[...this.card?.querySelectorAll(`a[href]:not([tabindex="-1"])`)??[]]}scheduleOpen(e,t){this.openTimer=window.setTimeout(()=>{this.openTimer=null,t()},e)}clearClose(){this.closeTimer!==null&&(window.clearTimeout(this.closeTimer),this.closeTimer=null)}scheduleClose(e=this.closeDelayMs){if(this.clearClose(),!this.held){if(!this.card){this.close();return}this.closeTimer=window.setTimeout(()=>{this.closeTimer=null,this.held||this.close()},e)}}markTrigger(e){this.trigger=e,r(e)}mount(e,t,n,r=!0,i){this.clearCard(),this.anchor=e,this.card=t,this.placement=n,this.unmountContents=i??null,this.stopPositioning=o({anchor:e,trigger:this.trigger??e,card:t,placement:n,observeVisualViewport:r})}clearCard(e=0){this.stopPositioning?.(),this.stopPositioning=null,this.exitCleanup?.(),this.exitCleanup=null;let t=this.card,n=this.unmountContents;if(this.card=null,this.unmountContents=null,!t)return;if(e<=0||!t.isConnected){n?.(),t.remove();return}t.dataset.open=`false`,t.style.pointerEvents=`none`;let r=null,i=()=>{r!==null&&(window.clearTimeout(r),r=null),t.removeEventListener(`transitionend`,a),n?.(),t.remove(),this.exitCleanup===i&&(this.exitCleanup=null)},a=e=>{e.target===t&&e.propertyName===`opacity`&&i()};t.addEventListener(`transitionend`,a),r=window.setTimeout(i,e+50),this.exitCleanup=i}position(){this.anchor&&this.card&&s(this.anchor,this.card,this.placement)}reset(e=0){this.openTimer!==null&&(window.clearTimeout(this.openTimer),this.openTimer=null),this.clearClose(),this.pointerInside=!1,this.pointerOverCard=!1,this.focusInside=!1,this.cardFocusInside=!1,this.explicitHold=!1,i(this.trigger),this.clearCard(e),this.anchor=null,this.trigger=null}}})))()}export{a as n,d as r,u as t}; //# sourceMappingURL=portaled-hovercard-CdHol2CK.js.map