UNPKG

@piiano/forms

Version:
2 lines (1 loc) 1.84 kB
import{sendSizeEvents as w}from"../common/size.js";import{getElement as f}from"../element-selector.js";import{newSenderToTarget as p}from"../common/events.js";import{newLogger as l}from"../common/logger.js";import{ViewInitOptionsValidator as u}from"../common/models.js";function h(m,{hooks:o,...s}){if(!u.parse(s))throw new Error("Invalid options provided");const a=f(m,"div"),t=document.createElement("iframe"),c="https://cdn.piiano.com/pvault-view-iframe-v2.4.3.html",d=l("parent",s.debug);let i;t.src=c,t.style.border="none",t.style.outline="none",t.style.display="block",t.style.margin="0",t.onload=()=>{setTimeout(()=>{i=p(t.contentWindow,d),i("init",s),w(i,"container-size",a)})};const e=v(d,t,{onError(r){o?.onError?.(r)},onClick(r){o?.onClick?.(r)},onMouseEnter(r){o?.onMouseEnter?.(r)},onMouseLeave(r){o?.onMouseLeave?.(r)}});return e.catch(r=>{}),a.appendChild(t),{async destroy(){await e,a.removeChild(t)},async update({hooks:r,...n}){if(await e,!u.parse(n))throw new Error("Invalid options provided");o=r,i("update",n)},async copy({path:r,trustedEventKey:n}){await e,t.contentWindow?.focus(),i("copy",{path:r,trustedEventKey:n})}}}function v(m,o,s){return new Promise((a,t)=>{let c=!1;window.onmessage=({origin:d,data:{event:i,payload:e}})=>{if(d==="https://cdn.piiano.com")switch(m(`Received "${i}" event from iframe`),i){case"ready":c=!0,a();break;case"content-size":o.style.height=e.height+"px",o.style.width=e.width+"px";break;case"error":{const n=Object.assign(new Error(e.message),e);if(s?.onError?.(n),!c){t(n);return}break}case"click":s?.onClick?.(e);break;case"mouseenter":s?.onMouseEnter?.(e);break;case"mouseleave":s?.onMouseLeave?.(e);break;case"keydown":case"keyup":case"keypress":{const n=new KeyboardEvent(i,e);n.trustedEventKey=e.trustedEventKey,o.dispatchEvent(n);break}}}})}export{h as createProtectedView};