Packages

Click-to-component functionality for LiveView apps.

Current section

Files

Jump to
click_to_component priv static click_to_component.min.js
Raw

priv/static/click_to_component.min.js

var LiveView=(()=>{var c=Object.defineProperty;var r=e=>c(e,"__esModule",{value:!0});var m=(e,n)=>{r(e);for(var t in n)c(e,t,{get:n[t],enumerable:!0})};var u={};m(u,{ClickToComponent:()=>a});var p=e=>{let n=document.createElement("div");return Object.assign(n.style,{display:"none",position:"fixed",top:"0px",left:"0px",background:"white",border:"1px solid #e4e4e7",borderRadius:"8px",padding:"8px 0px"}),{mount(){document.body.appendChild(n),document.addEventListener("click",t=>{n.contains(t.target)||(n.style.display="none")})},render(t,s){n.innerHTML="",n.style.top=`${t.clientY}px`,n.style.left=`${t.clientX}px`,n.style.display="block";for(let i of s){let o=document.createElement("div");Object.assign(o.style,{margin:"6px 0px",padding:"0px 12px",fontSize:"14px",cursor:"pointer"}),o.innerText=i.component,o.onclick=()=>e(i),n.appendChild(o)}}}};var d=e=>{let[n,t]=e.trim().split(" "),s=n.indexOf("/")===1;return{component:s?n.slice(2,-1):n.slice(1,-1),path:t,closing:s}},l=e=>{var s;let n=[],t=[];for(;;){let i=e.previousSibling;for(;i!==null;){if(i.nodeType===document.COMMENT_NODE){let o=d(i.nodeValue);o.closing?t.unshift(o):((s=t[0])==null?void 0:s.component)===o.component?t.shift():n.push(o)}i=i.previousSibling}if(e.parentElement==null)break;e=e.parentElement}return n};var a=()=>({mounted(){this.menu=p(this.onMenuClick.bind(this)),this.menu.mount(),document.addEventListener("click",this.onClick.bind(this))},onClick(e){if(e.altKey){e.preventDefault(),e.stopPropagation();let n=l(e.target);this.menu.render(e,n)}},onMenuClick(e){this.pushEventTo(this.el,"click_to_component:open",{path:e.path})}});return u;})();