@inploi/plugin-collaborate 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cdn/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // This is an inploi sdk script. Learn more at https://inploi.com
2
2
 
3
- "use strict";(()=>{var C=Object.defineProperty;var m=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var b=(e,t,n)=>t in e?C(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,y=(e,t)=>{for(var n in t||(t={}))M.call(t,n)&&b(e,n,t[n]);if(m)for(var n of m(t))A.call(t,n)&&b(e,n,t[n]);return e};var h=e=>e;var v="isdk_session";var z=new RegExp(`${v}=([^;]+)`);var P=e=>{var i,o,l,s,a,g,p,r;if(((i=e.element)==null?void 0:i.getAttribute("id"))!==null&&!((o=e.id)!=null&&o.length))return e.id=`#${(l=e.element)==null?void 0:l.getAttribute("id")}`,e;if(e.element&&e.element.className.length>0&&!((s=e.classes)!=null&&s.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((a=e.element)==null?void 0:a.tagName),n=(g=e.element)==null?void 0:g.parentElement;if(n){let c=Array.from(n.children).findIndex(d=>d===e.element);return{element:(p=e.element)==null?void 0:p.parentElement,children:[`${t}:nth-child(${c+1})`,...(r=e.children)!=null?r:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},E=(e,t)=>{let n=i=>{var a;let o=P(i),l=[[o.classes,o.id].filter(Boolean).join(""),...(a=o.children)!=null?a:[]].filter(Boolean).join(">"),s=t.querySelectorAll(l);return s.length>1&&s.length<100?n(o):s.length===1?l:null};return n({element:e,children:[]})};var S=e=>{e.preventDefault(),e.stopPropagation()},f=["mousedown","mouseup","blur","input","mouseenter","mouseleave","mouseover","pointerdown","pointerup","pointerenter","pointerleave","pointerover","pointermove","beforeinput","dblclick","focus","focusin","keydown","keypress","touchend","touchmove","touchstart","touchcancel","transitionstart","transitionend"],u=e=>{window.parent.postMessage(y({source:"inploi-collaborate"},e),"*")};var D=e=>e.data.source==="inploi-collaborate";var x="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",N=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${x}) 6 2, crosshair !important; }`,document.head.appendChild(t)},I=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:window.scrollX+t.x,y:window.scrollY+t.y,width:t.width,height:t.height}},Z=e=>{let t={};for(let n of e){let i=document.querySelector(n);t[n]=i?I(i):null}return t};function R(e,t){let n;return(...i)=>{clearTimeout(n),n=setTimeout(()=>e(...i),t)}}var j=({logger:e,signal:t,onDispose:n})=>{let i=[],o;u({type:"READY"}),e.info("Collaborate bridge: Ready");let l=R(()=>{u({type:"SELECTOR_RECTS",selectorRects:Z(i)})},50),s=()=>{o&&u({type:"HOVER_ELEMENT",rect:I(o)})},a=g=>{if(D(g)===!1)return;let p=g.data;switch(p.type){case"WATCH_SELECTORS":{i=p.selectors,l();break}case"SETUP_EVENT_HANDLERS":e.info("Collaborate bridge: Setting up event handlers"),N(),window.addEventListener("beforeunload",()=>{n==null||n()}),window.addEventListener("resize",()=>{l(),u({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",r=>{r.preventDefault(),r.stopPropagation();let c=document.elementsFromPoint(r.clientX,r.clientY)[0];c!==o&&(o=c,s())},{signal:t}),document.body.addEventListener("click",r=>{if(r.preventDefault(),r.stopPropagation(),!o)return;let c=E(o,document.body);if(!c)return;let d=o.getBoundingClientRect();s(),u({type:"DROP_PIN",pin:{rect:I(o),selector:c,xPercent:(r.clientX-d.x)/d.width,yPercent:(r.clientY-d.y)/d.height}})},{signal:t}),window.addEventListener("scroll",()=>{l(),s(),u({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),f.map(r=>document.body.addEventListener(r,S,{signal:t})),e.info("Collaborate bridge: Event handlers set up")}};window.addEventListener("message",a,{signal:t}),t==null||t.addEventListener("abort",()=>{e.info("Collaborate bridge: disposing"),n==null||n(),window.removeEventListener("message",a)})},w=()=>h(({logger:e})=>({setupBridge:t=>j({logger:e,signal:t==null?void 0:t.signal})}));if(!window.inploi)throw new Error("Please insert the SDK script tag above the plugins.");window.inploi.collaboratePlugin=w;})();
3
+ "use strict";(()=>{var C=Object.defineProperty;var I=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var m=(e,t,n)=>t in e?C(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b=(e,t)=>{for(var n in t||(t={}))M.call(t,n)&&m(e,n,t[n]);if(I)for(var n of I(t))A.call(t,n)&&m(e,n,t[n]);return e};var y=e=>e;var v="isdk_session";var z=new RegExp(`${v}=([^;]+)`);var P=e=>{var o,i,s,l,a,g,r,c;if(((o=e.element)==null?void 0:o.getAttribute("id"))!==null&&!((i=e.id)!=null&&i.length))return e.id=`#${(s=e.element)==null?void 0:s.getAttribute("id")}`,e;if(e.element&&e.element.className.length>0&&!((l=e.classes)!=null&&l.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((a=e.element)==null?void 0:a.tagName),n=(g=e.element)==null?void 0:g.parentElement;if(n){let u=Array.from(n.children).findIndex(w=>w===e.element);return{element:(r=e.element)==null?void 0:r.parentElement,children:[`${t}:nth-child(${u+1})`,...(c=e.children)!=null?c:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},h=(e,t)=>{let n=o=>{var a;let i=P(o),s=[[i.classes,i.id].filter(Boolean).join(""),...(a=i.children)!=null?a:[]].filter(Boolean).join(">"),l=t.querySelectorAll(s);return l.length>1&&l.length<100?n(i):l.length===1?s:null};return n({element:e,children:[]})};var S=e=>{e.preventDefault(),e.stopPropagation()},D=["mousedown","mouseup","blur","input","mouseenter","mouseleave","mouseover","pointerdown","pointerup","pointerenter","pointerleave","pointerover","pointermove","beforeinput","dblclick","focus","focusin","keydown","keypress","touchend","touchmove","touchstart","touchcancel","transitionstart","transitionend"],d=e=>{window.parent.postMessage(b({source:"inploi-collaborate"},e),"*")};var f=e=>e.data.source==="inploi-collaborate";var x="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",N=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${x}) 6 2, crosshair !important; }`,document.head.appendChild(t)},p=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:window.scrollX+t.x,y:window.scrollY+t.y,width:t.width,height:t.height}},Z=e=>{let t={};for(let n of e){let o=document.querySelector(n);t[n]=o?p(o):null}return t};function R(e,t){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>e(...o),t)}}var j=({logger:e,signal:t})=>{let n=[],o;d({type:"READY"}),e.info("Collaborate bridge: Ready");let i=R(()=>{d({type:"SELECTOR_RECTS",selectorRects:Z(n)})},50),s=()=>{o&&d({type:"HOVER_ELEMENT",rect:p(o)})},l=a=>{if(f(a)===!1)return;let g=a.data;switch(g.type){case"WATCH_SELECTORS":{n=g.selectors,i();break}case"SETUP_EVENT_HANDLERS":e.info("Collaborate bridge: Setting up event handlers"),N(),window.addEventListener("beforeunload",()=>{d({type:"DISPOSE"})}),window.addEventListener("resize",()=>{i(),d({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",r=>{r.preventDefault(),r.stopPropagation();let c=document.elementsFromPoint(r.clientX,r.clientY)[0];c!==o&&(o=c,s())},{signal:t}),document.body.addEventListener("click",r=>{if(r.preventDefault(),r.stopPropagation(),!o)return;let c=h(o,document.body);if(!c)return;let u=o.getBoundingClientRect();s(),d({type:"DROP_PIN",pin:{rect:p(o),selector:c,xPercent:(r.clientX-u.x)/u.width,yPercent:(r.clientY-u.y)/u.height}})},{signal:t}),window.addEventListener("scroll",()=>{i(),s(),d({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),D.map(r=>document.body.addEventListener(r,S,{signal:t})),e.info("Collaborate bridge: Event handlers set up")}};window.addEventListener("message",l,{signal:t}),t==null||t.addEventListener("abort",()=>{e.info("Collaborate bridge: disposing"),d({type:"DISPOSE"}),window.removeEventListener("message",l)})},E=()=>y(({logger:e})=>({setupBridge:t=>j({logger:e,signal:t==null?void 0:t.signal})}));if(!window.inploi)throw new Error("Please insert the SDK script tag above the plugins.");window.inploi.collaboratePlugin=E;})();
package/dist/index.d.mts CHANGED
@@ -22,6 +22,8 @@ type CollaborateOutboundEvent = {
22
22
  } | {
23
23
  type: 'DROP_PIN';
24
24
  pin: DroppedPin;
25
+ } | {
26
+ type: 'DISPOSE';
25
27
  } | {
26
28
  type: 'SELECTOR_RECTS';
27
29
  selectorRects: SelectorRects;
package/dist/index.d.ts CHANGED
@@ -22,6 +22,8 @@ type CollaborateOutboundEvent = {
22
22
  } | {
23
23
  type: 'DROP_PIN';
24
24
  pin: DroppedPin;
25
+ } | {
26
+ type: 'DISPOSE';
25
27
  } | {
26
28
  type: 'SELECTOR_RECTS';
27
29
  selectorRects: SelectorRects;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var b=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames,E=Object.getOwnPropertySymbols;var p=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var y=(e,t,n)=>t in e?b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,m=(e,t)=>{for(var n in t||(t={}))p.call(t,n)&&y(e,n,t[n]);if(E)for(var n of E(t))Z.call(t,n)&&y(e,n,t[n]);return e};var D=(e,t)=>{for(var n in t)b(e,n,{get:t[n],enumerable:!0})},N=(e,t,n,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of S(t))!p.call(e,o)&&o!==n&&b(e,o,{get:()=>t[o],enumerable:!(l=w(t,o))||l.enumerable});return e};var P=e=>N(b({},"__esModule",{value:!0}),e);var W={};D(W,{PIN_CURSOR_BASE64:()=>h,collaboratePlugin:()=>Y,createInboundEventSender:()=>j,isCollaborateOutboundEvent:()=>T});module.exports=P(W);var C=require("@inploi/sdk");var v=e=>{var l,o,c,i,s,g,u,r;if(((l=e.element)==null?void 0:l.getAttribute("id"))!==null&&!((o=e.id)!=null&&o.length))return e.id=`#${(c=e.element)==null?void 0:c.getAttribute("id")}`,e;if(e.element&&e.element.className.length>0&&!((i=e.classes)!=null&&i.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((s=e.element)==null?void 0:s.tagName),n=(g=e.element)==null?void 0:g.parentElement;if(n){let d=Array.from(n.children).findIndex(I=>I===e.element);return{element:(u=e.element)==null?void 0:u.parentElement,children:[`${t}:nth-child(${d+1})`,...(r=e.children)!=null?r:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},A=(e,t)=>{let n=l=>{var s;let o=v(l),c=[[o.classes,o.id].filter(Boolean).join(""),...(s=o.children)!=null?s:[]].filter(Boolean).join(">"),i=t.querySelectorAll(c);return i.length>1&&i.length<100?n(o):i.length===1?c:null};return n({element:e,children:[]})};var R=e=>{e.preventDefault(),e.stopPropagation()},x=["mousedown","mouseup","blur","input","mouseenter","mouseleave","mouseover","pointerdown","pointerup","pointerenter","pointerleave","pointerover","pointermove","beforeinput","dblclick","focus","focusin","keydown","keypress","touchend","touchmove","touchstart","touchcancel","transitionstart","transitionend"],a=e=>{window.parent.postMessage(m({source:"inploi-collaborate"},e),"*")},j=e=>({sendInboundEvent:t=>{var n;return(n=e.source)==null?void 0:n.postMessage(m({source:"inploi-collaborate"},t),{targetOrigin:e.origin})}}),z=e=>e.data.source==="inploi-collaborate",T=e=>e.data.source==="inploi-collaborate",h="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",B=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${h}) 6 2, crosshair !important; }`,document.head.appendChild(t)},M=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:window.scrollX+t.x,y:window.scrollY+t.y,width:t.width,height:t.height}},X=e=>{let t={};for(let n of e){let l=document.querySelector(n);t[n]=l?M(l):null}return t};function L(e,t){let n;return(...l)=>{clearTimeout(n),n=setTimeout(()=>e(...l),t)}}var V=({logger:e,signal:t,onDispose:n})=>{let l=[],o;a({type:"READY"}),e.info("Collaborate bridge: Ready");let c=L(()=>{a({type:"SELECTOR_RECTS",selectorRects:X(l)})},50),i=()=>{o&&a({type:"HOVER_ELEMENT",rect:M(o)})},s=g=>{if(z(g)===!1)return;let u=g.data;switch(u.type){case"WATCH_SELECTORS":{l=u.selectors,c();break}case"SETUP_EVENT_HANDLERS":e.info("Collaborate bridge: Setting up event handlers"),B(),window.addEventListener("beforeunload",()=>{n==null||n()}),window.addEventListener("resize",()=>{c(),a({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",r=>{r.preventDefault(),r.stopPropagation();let d=document.elementsFromPoint(r.clientX,r.clientY)[0];d!==o&&(o=d,i())},{signal:t}),document.body.addEventListener("click",r=>{if(r.preventDefault(),r.stopPropagation(),!o)return;let d=A(o,document.body);if(!d)return;let I=o.getBoundingClientRect();i(),a({type:"DROP_PIN",pin:{rect:M(o),selector:d,xPercent:(r.clientX-I.x)/I.width,yPercent:(r.clientY-I.y)/I.height}})},{signal:t}),window.addEventListener("scroll",()=>{c(),i(),a({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),x.map(r=>document.body.addEventListener(r,R,{signal:t})),e.info("Collaborate bridge: Event handlers set up")}};window.addEventListener("message",s,{signal:t}),t==null||t.addEventListener("abort",()=>{e.info("Collaborate bridge: disposing"),n==null||n(),window.removeEventListener("message",s)})},Y=()=>(0,C.createPlugin)(({logger:e})=>({setupBridge:t=>V({logger:e,signal:t==null?void 0:t.signal})}));0&&(module.exports={PIN_CURSOR_BASE64,collaboratePlugin,createInboundEventSender,isCollaborateOutboundEvent});
1
+ "use strict";var u=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable;var E=(e,t,n)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b=(e,t)=>{for(var n in t||(t={}))M.call(t,n)&&E(e,n,t[n]);if(p)for(var n of p(t))w.call(t,n)&&E(e,n,t[n]);return e};var P=(e,t)=>{for(var n in t)u(e,n,{get:t[n],enumerable:!0})},Z=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of h(t))!M.call(e,l)&&l!==n&&u(e,l,{get:()=>t[l],enumerable:!(o=S(t,l))||o.enumerable});return e};var N=e=>Z(u({},"__esModule",{value:!0}),e);var W={};P(W,{PIN_CURSOR_BASE64:()=>C,collaboratePlugin:()=>Y,createInboundEventSender:()=>j,isCollaborateOutboundEvent:()=>T});module.exports=N(W);var A=require("@inploi/sdk");var R=e=>{var o,l,i,c,s,g,r,d;if(((o=e.element)==null?void 0:o.getAttribute("id"))!==null&&!((l=e.id)!=null&&l.length))return e.id=`#${(i=e.element)==null?void 0:i.getAttribute("id")}`,e;if(e.element&&e.element.className.length>0&&!((c=e.classes)!=null&&c.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((s=e.element)==null?void 0:s.tagName),n=(g=e.element)==null?void 0:g.parentElement;if(n){let a=Array.from(n.children).findIndex(D=>D===e.element);return{element:(r=e.element)==null?void 0:r.parentElement,children:[`${t}:nth-child(${a+1})`,...(d=e.children)!=null?d:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},y=(e,t)=>{let n=o=>{var s;let l=R(o),i=[[l.classes,l.id].filter(Boolean).join(""),...(s=l.children)!=null?s:[]].filter(Boolean).join(">"),c=t.querySelectorAll(i);return c.length>1&&c.length<100?n(l):c.length===1?i:null};return n({element:e,children:[]})};var v=e=>{e.preventDefault(),e.stopPropagation()},x=["mousedown","mouseup","blur","input","mouseenter","mouseleave","mouseover","pointerdown","pointerup","pointerenter","pointerleave","pointerover","pointermove","beforeinput","dblclick","focus","focusin","keydown","keypress","touchend","touchmove","touchstart","touchcancel","transitionstart","transitionend"],I=e=>{window.parent.postMessage(b({source:"inploi-collaborate"},e),"*")},j=e=>({sendInboundEvent:t=>{var n;return(n=e.source)==null?void 0:n.postMessage(b({source:"inploi-collaborate"},t),{targetOrigin:e.origin})}}),z=e=>e.data.source==="inploi-collaborate",T=e=>e.data.source==="inploi-collaborate",C="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",B=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${C}) 6 2, crosshair !important; }`,document.head.appendChild(t)},m=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:window.scrollX+t.x,y:window.scrollY+t.y,width:t.width,height:t.height}},X=e=>{let t={};for(let n of e){let o=document.querySelector(n);t[n]=o?m(o):null}return t};function L(e,t){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>e(...o),t)}}var V=({logger:e,signal:t})=>{let n=[],o;I({type:"READY"}),e.info("Collaborate bridge: Ready");let l=L(()=>{I({type:"SELECTOR_RECTS",selectorRects:X(n)})},50),i=()=>{o&&I({type:"HOVER_ELEMENT",rect:m(o)})},c=s=>{if(z(s)===!1)return;let g=s.data;switch(g.type){case"WATCH_SELECTORS":{n=g.selectors,l();break}case"SETUP_EVENT_HANDLERS":e.info("Collaborate bridge: Setting up event handlers"),B(),window.addEventListener("beforeunload",()=>{I({type:"DISPOSE"})}),window.addEventListener("resize",()=>{l(),I({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",r=>{r.preventDefault(),r.stopPropagation();let d=document.elementsFromPoint(r.clientX,r.clientY)[0];d!==o&&(o=d,i())},{signal:t}),document.body.addEventListener("click",r=>{if(r.preventDefault(),r.stopPropagation(),!o)return;let d=y(o,document.body);if(!d)return;let a=o.getBoundingClientRect();i(),I({type:"DROP_PIN",pin:{rect:m(o),selector:d,xPercent:(r.clientX-a.x)/a.width,yPercent:(r.clientY-a.y)/a.height}})},{signal:t}),window.addEventListener("scroll",()=>{l(),i(),I({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),x.map(r=>document.body.addEventListener(r,v,{signal:t})),e.info("Collaborate bridge: Event handlers set up")}};window.addEventListener("message",c,{signal:t}),t==null||t.addEventListener("abort",()=>{e.info("Collaborate bridge: disposing"),I({type:"DISPOSE"}),window.removeEventListener("message",c)})},Y=()=>(0,A.createPlugin)(({logger:e})=>({setupBridge:t=>V({logger:e,signal:t==null?void 0:t.signal})}));0&&(module.exports={PIN_CURSOR_BASE64,collaboratePlugin,createInboundEventSender,isCollaborateOutboundEvent});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/collaborate.ts","../src/collaborate.selector.ts"],"sourcesContent":["export * from './collaborate';\n","import { Logger, createPlugin } from '@inploi/sdk';\n\nimport { getElementUniqueSelector } from './collaborate.selector';\n\nconst preventIt = (e: Event) => {\n\te.preventDefault();\n\te.stopPropagation();\n};\n\nconst eventsToPrevent: (keyof HTMLElementEventMap)[] = [\n\t'mousedown',\n\t'mouseup',\n\t'blur',\n\t'input',\n\t'mouseenter',\n\t'mouseleave',\n\t'mouseover',\n\t'pointerdown',\n\t'pointerup',\n\t'pointerenter',\n\t'pointerleave',\n\t'pointerover',\n\t'pointermove',\n\t'beforeinput',\n\t'dblclick',\n\t'focus',\n\t'focusin',\n\t'keydown',\n\t'keypress',\n\t'touchend',\n\t'touchmove',\n\t'touchstart',\n\t'touchcancel',\n\t'transitionstart',\n\t'transitionend',\n];\n\nexport type CollaborateInboundEvent =\n\t| {\n\t\t\ttype: 'SETUP_EVENT_HANDLERS';\n\t }\n\t| { type: 'WATCH_SELECTORS'; selectors: string[] };\n\nexport type CollaborateOutboundEvent =\n\t| { type: 'READY' }\n\t| {\n\t\t\ttype: 'RESIZE';\n\t\t\tscrollHeight: number;\n\t }\n\t| { type: 'SCROLL'; scrollY: number; scrollX: number }\n\t| {\n\t\t\ttype: 'HOVER_ELEMENT';\n\t\t\trect: PinRect | null;\n\t }\n\t| {\n\t\t\ttype: 'DROP_PIN';\n\t\t\tpin: DroppedPin;\n\t }\n\t| {\n\t\t\ttype: 'SELECTOR_RECTS';\n\t\t\tselectorRects: SelectorRects;\n\t };\n\nexport type DroppedPin = { selector: string; xPercent: number; yPercent: number; rect: PinRect };\n\nconst sendOutboundEvent = (data: CollaborateOutboundEvent) => {\n\twindow.parent.postMessage({ source: 'inploi-collaborate', ...data }, '*');\n};\n\nexport const createInboundEventSender = (e: MessageEvent) => {\n\treturn {\n\t\tsendInboundEvent: (data: CollaborateInboundEvent) =>\n\t\t\te.source?.postMessage({ source: 'inploi-collaborate', ...data }, { targetOrigin: e.origin }),\n\t};\n};\n\nconst isCollaborateInboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateInboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const isCollaborateOutboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateOutboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const PIN_CURSOR_BASE64 =\n\t'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==';\n\nconst setCursor = () => {\n\tconst id = 'isdk-collaborate-cursor';\n\tif (document.getElementById(id)) return;\n\tconst style = document.createElement('style');\n\tstyle.id = id;\n\tstyle.innerHTML = `* { cursor: url(${PIN_CURSOR_BASE64}) 6 2, crosshair !important; }`;\n\tdocument.head.appendChild(style);\n};\n\nexport type PinRect = {\n\t_brand: 'pin';\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nconst getElementPinRect = (element: Element): PinRect => {\n\tconst boundingBox = element.getBoundingClientRect();\n\treturn {\n\t\t_brand: 'pin',\n\t\tx: window.scrollX + boundingBox.x,\n\t\ty: window.scrollY + boundingBox.y,\n\t\twidth: boundingBox.width,\n\t\theight: boundingBox.height,\n\t};\n};\n\nexport type SelectorRects = { [selector: string]: PinRect | null };\n\nconst getSelectorRects = (selectors: string[]) => {\n\tconst selectorRects: SelectorRects = {};\n\tfor (const selector of selectors) {\n\t\tconst element = document.querySelector(selector);\n\t\tselectorRects[selector] = element ? getElementPinRect(element) : null;\n\t}\n\treturn selectorRects;\n};\n\nfunction debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n\tfunc: F,\n\twaitFor: number,\n): (...args: Parameters<F>) => void {\n\tlet timeout: ReturnType<typeof setTimeout>;\n\n\treturn (...args: Parameters<F>): void => {\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(() => func(...args), waitFor);\n\t};\n}\n\n/** Sets up the bridge for Collaborate to be able to communicate with the host page */\nconst setupBridge = ({\n\tlogger,\n\tsignal,\n\tonDispose,\n}: {\n\tsignal?: AbortSignal;\n\tlogger: Logger;\n\tonDispose?: () => void;\n}) => {\n\tlet watchedSelectors: string[] = [];\n\tlet hoveredElement: Element | undefined;\n\tsendOutboundEvent({ type: 'READY' });\n\tlogger.info('Collaborate bridge: Ready');\n\n\tconst broadcastSelectors = debounce(() => {\n\t\tsendOutboundEvent({ type: 'SELECTOR_RECTS', selectorRects: getSelectorRects(watchedSelectors) });\n\t}, 50);\n\n\tconst broadcastHoveredElement = () => {\n\t\tif (!hoveredElement) return;\n\t\tsendOutboundEvent({\n\t\t\ttype: 'HOVER_ELEMENT',\n\t\t\trect: getElementPinRect(hoveredElement),\n\t\t});\n\t};\n\n\tconst handleEvent = (messageEvent: MessageEvent) => {\n\t\tif (isCollaborateInboundEvent(messageEvent) === false) return;\n\t\tconst collaborateEvent = messageEvent.data;\n\t\tswitch (collaborateEvent.type) {\n\t\t\tcase 'WATCH_SELECTORS': {\n\t\t\t\twatchedSelectors = collaborateEvent.selectors;\n\t\t\t\tbroadcastSelectors();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SETUP_EVENT_HANDLERS': {\n\t\t\t\tlogger.info('Collaborate bridge: Setting up event handlers');\n\t\t\t\tsetCursor();\n\t\t\t\twindow.addEventListener('beforeunload', () => {\n\t\t\t\t\tonDispose?.();\n\t\t\t\t});\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'resize',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'RESIZE', scrollHeight: document.body.scrollHeight });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tconst newElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\tif (newElement === hoveredElement) return;\n\t\t\t\t\t\thoveredElement = newElement;\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'click',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tif (!hoveredElement) return;\n\t\t\t\t\t\tconst selector = getElementUniqueSelector(hoveredElement, document.body);\n\t\t\t\t\t\tif (!selector) return;\n\t\t\t\t\t\tconst rect = hoveredElement.getBoundingClientRect();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\ttype: 'DROP_PIN',\n\t\t\t\t\t\t\tpin: {\n\t\t\t\t\t\t\t\trect: getElementPinRect(hoveredElement),\n\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\txPercent: (event.clientX - rect.x) / rect.width,\n\t\t\t\t\t\t\t\tyPercent: (event.clientY - rect.y) / rect.height,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'scroll',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'SCROLL', scrollY: window.scrollY, scrollX: window.scrollX });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\teventsToPrevent.map(type => document.body.addEventListener(type, preventIt, { signal }));\n\t\t\t\tlogger.info('Collaborate bridge: Event handlers set up');\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener('message', handleEvent, { signal });\n\tsignal?.addEventListener('abort', () => {\n\t\tlogger.info('Collaborate bridge: disposing');\n\t\tonDispose?.();\n\t\twindow.removeEventListener('message', handleEvent);\n\t});\n};\n\nexport const collaboratePlugin = () =>\n\tcreatePlugin(({ logger }) => ({\n\t\tsetupBridge: (params?: { signal?: AbortSignal }) =>\n\t\t\tsetupBridge({\n\t\t\t\tlogger,\n\t\t\t\tsignal: params?.signal,\n\t\t\t}),\n\t}));\n","type SelectorProperties = {\n\telement: Element | null | undefined;\n\tid?: string;\n\tclasses?: string;\n\tchildren?: string[];\n};\n\nconst getSelectorProperties = (from: SelectorProperties): SelectorProperties => {\n\tif (from.element?.getAttribute('id') !== null && !from.id?.length) {\n\t\tfrom.id = `#${from.element?.getAttribute('id')}`;\n\t\treturn from;\n\t}\n\n\tif (from.element && from.element.className.length > 0 && !from.classes?.length) {\n\t\tfrom.classes = `.${from.element.className.split(' ').join('.')}`;\n\t\treturn from;\n\t}\n\n\tconst newSelector = [from.classes, from.id].filter(Boolean).join('') || from.element?.tagName;\n\n\tconst parent = from.element?.parentElement;\n\tif (parent) {\n\t\tconst childIndex = Array.from(parent.children).findIndex(child => child === from.element);\n\t\treturn {\n\t\t\telement: from.element?.parentElement,\n\t\t\tchildren: [`${newSelector}:nth-child(${childIndex + 1})`, ...(from.children ?? [])],\n\t\t};\n\t}\n\tthrow new Error('Unable to uniquely identify selector: not unique enough');\n};\n\nexport const getElementUniqueSelector = (element: Element, context: Element) => {\n\tconst getSelector = (prefilled: SelectorProperties): string | null => {\n\t\tconst properties = getSelectorProperties(prefilled);\n\n\t\tconst newSelector = [[properties.classes, properties.id].filter(Boolean).join(''), ...(properties.children ?? [])]\n\t\t\t.filter(Boolean)\n\t\t\t.join('>');\n\n\t\tconst matchingSelectors = context.querySelectorAll(newSelector);\n\n\t\tif (matchingSelectors.length > 1 && matchingSelectors.length < 100) return getSelector(properties);\n\t\tif (matchingSelectors.length === 1) return newSelector;\n\n\t\treturn null;\n\t};\n\n\treturn getSelector({ element, children: [] });\n};\n"],"mappings":"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","names":["src_exports","__export","PIN_CURSOR_BASE64","collaboratePlugin","createInboundEventSender","isCollaborateOutboundEvent","__toCommonJS","import_sdk","getSelectorProperties","from","_a","_b","_c","_d","_e","_f","_g","_h","newSelector","parent","childIndex","child","getElementUniqueSelector","element","context","getSelector","prefilled","properties","matchingSelectors","preventIt","eventsToPrevent","sendOutboundEvent","data","__spreadValues","createInboundEventSender","_a","isCollaborateInboundEvent","event","isCollaborateOutboundEvent","PIN_CURSOR_BASE64","setCursor","id","style","getElementPinRect","element","boundingBox","getSelectorRects","selectors","selectorRects","selector","debounce","func","waitFor","timeout","args","setupBridge","logger","signal","onDispose","watchedSelectors","hoveredElement","broadcastSelectors","broadcastHoveredElement","handleEvent","messageEvent","collaborateEvent","newElement","getElementUniqueSelector","rect","type","collaboratePlugin","params"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/collaborate.ts","../src/collaborate.selector.ts"],"sourcesContent":["export * from './collaborate';\n","import { Logger, createPlugin } from '@inploi/sdk';\n\nimport { getElementUniqueSelector } from './collaborate.selector';\n\nconst preventIt = (e: Event) => {\n\te.preventDefault();\n\te.stopPropagation();\n};\n\nconst eventsToPrevent: (keyof HTMLElementEventMap)[] = [\n\t'mousedown',\n\t'mouseup',\n\t'blur',\n\t'input',\n\t'mouseenter',\n\t'mouseleave',\n\t'mouseover',\n\t'pointerdown',\n\t'pointerup',\n\t'pointerenter',\n\t'pointerleave',\n\t'pointerover',\n\t'pointermove',\n\t'beforeinput',\n\t'dblclick',\n\t'focus',\n\t'focusin',\n\t'keydown',\n\t'keypress',\n\t'touchend',\n\t'touchmove',\n\t'touchstart',\n\t'touchcancel',\n\t'transitionstart',\n\t'transitionend',\n];\n\nexport type CollaborateInboundEvent =\n\t| {\n\t\t\ttype: 'SETUP_EVENT_HANDLERS';\n\t }\n\t| { type: 'WATCH_SELECTORS'; selectors: string[] };\n\nexport type CollaborateOutboundEvent =\n\t| { type: 'READY' }\n\t| {\n\t\t\ttype: 'RESIZE';\n\t\t\tscrollHeight: number;\n\t }\n\t| { type: 'SCROLL'; scrollY: number; scrollX: number }\n\t| {\n\t\t\ttype: 'HOVER_ELEMENT';\n\t\t\trect: PinRect | null;\n\t }\n\t| {\n\t\t\ttype: 'DROP_PIN';\n\t\t\tpin: DroppedPin;\n\t }\n\t| {\n\t\t\ttype: 'DISPOSE';\n\t }\n\t| {\n\t\t\ttype: 'SELECTOR_RECTS';\n\t\t\tselectorRects: SelectorRects;\n\t };\n\nexport type DroppedPin = { selector: string; xPercent: number; yPercent: number; rect: PinRect };\n\nconst sendOutboundEvent = (data: CollaborateOutboundEvent) => {\n\twindow.parent.postMessage({ source: 'inploi-collaborate', ...data }, '*');\n};\n\nexport const createInboundEventSender = (e: MessageEvent) => {\n\treturn {\n\t\tsendInboundEvent: (data: CollaborateInboundEvent) =>\n\t\t\te.source?.postMessage({ source: 'inploi-collaborate', ...data }, { targetOrigin: e.origin }),\n\t};\n};\n\nconst isCollaborateInboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateInboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const isCollaborateOutboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateOutboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const PIN_CURSOR_BASE64 =\n\t'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==';\n\nconst setCursor = () => {\n\tconst id = 'isdk-collaborate-cursor';\n\tif (document.getElementById(id)) return;\n\tconst style = document.createElement('style');\n\tstyle.id = id;\n\tstyle.innerHTML = `* { cursor: url(${PIN_CURSOR_BASE64}) 6 2, crosshair !important; }`;\n\tdocument.head.appendChild(style);\n};\n\nexport type PinRect = {\n\t_brand: 'pin';\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nconst getElementPinRect = (element: Element): PinRect => {\n\tconst boundingBox = element.getBoundingClientRect();\n\treturn {\n\t\t_brand: 'pin',\n\t\tx: window.scrollX + boundingBox.x,\n\t\ty: window.scrollY + boundingBox.y,\n\t\twidth: boundingBox.width,\n\t\theight: boundingBox.height,\n\t};\n};\n\nexport type SelectorRects = { [selector: string]: PinRect | null };\n\nconst getSelectorRects = (selectors: string[]) => {\n\tconst selectorRects: SelectorRects = {};\n\tfor (const selector of selectors) {\n\t\tconst element = document.querySelector(selector);\n\t\tselectorRects[selector] = element ? getElementPinRect(element) : null;\n\t}\n\treturn selectorRects;\n};\n\nfunction debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n\tfunc: F,\n\twaitFor: number,\n): (...args: Parameters<F>) => void {\n\tlet timeout: ReturnType<typeof setTimeout>;\n\n\treturn (...args: Parameters<F>): void => {\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(() => func(...args), waitFor);\n\t};\n}\n\n/** Sets up the bridge for Collaborate to be able to communicate with the host page */\nconst setupBridge = ({ logger, signal }: { signal?: AbortSignal; logger: Logger }) => {\n\tlet watchedSelectors: string[] = [];\n\tlet hoveredElement: Element | undefined;\n\tsendOutboundEvent({ type: 'READY' });\n\tlogger.info('Collaborate bridge: Ready');\n\n\tconst broadcastSelectors = debounce(() => {\n\t\tsendOutboundEvent({ type: 'SELECTOR_RECTS', selectorRects: getSelectorRects(watchedSelectors) });\n\t}, 50);\n\n\tconst broadcastHoveredElement = () => {\n\t\tif (!hoveredElement) return;\n\t\tsendOutboundEvent({\n\t\t\ttype: 'HOVER_ELEMENT',\n\t\t\trect: getElementPinRect(hoveredElement),\n\t\t});\n\t};\n\n\tconst handleEvent = (messageEvent: MessageEvent) => {\n\t\tif (isCollaborateInboundEvent(messageEvent) === false) return;\n\t\tconst collaborateEvent = messageEvent.data;\n\t\tswitch (collaborateEvent.type) {\n\t\t\tcase 'WATCH_SELECTORS': {\n\t\t\t\twatchedSelectors = collaborateEvent.selectors;\n\t\t\t\tbroadcastSelectors();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SETUP_EVENT_HANDLERS': {\n\t\t\t\tlogger.info('Collaborate bridge: Setting up event handlers');\n\t\t\t\tsetCursor();\n\t\t\t\twindow.addEventListener('beforeunload', () => {\n\t\t\t\t\tsendOutboundEvent({ type: 'DISPOSE' });\n\t\t\t\t});\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'resize',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'RESIZE', scrollHeight: document.body.scrollHeight });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tconst newElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\tif (newElement === hoveredElement) return;\n\t\t\t\t\t\thoveredElement = newElement;\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'click',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tif (!hoveredElement) return;\n\t\t\t\t\t\tconst selector = getElementUniqueSelector(hoveredElement, document.body);\n\t\t\t\t\t\tif (!selector) return;\n\t\t\t\t\t\tconst rect = hoveredElement.getBoundingClientRect();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\ttype: 'DROP_PIN',\n\t\t\t\t\t\t\tpin: {\n\t\t\t\t\t\t\t\trect: getElementPinRect(hoveredElement),\n\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\txPercent: (event.clientX - rect.x) / rect.width,\n\t\t\t\t\t\t\t\tyPercent: (event.clientY - rect.y) / rect.height,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'scroll',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'SCROLL', scrollY: window.scrollY, scrollX: window.scrollX });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\teventsToPrevent.map(type => document.body.addEventListener(type, preventIt, { signal }));\n\t\t\t\tlogger.info('Collaborate bridge: Event handlers set up');\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener('message', handleEvent, { signal });\n\tsignal?.addEventListener('abort', () => {\n\t\tlogger.info('Collaborate bridge: disposing');\n\t\tsendOutboundEvent({ type: 'DISPOSE' });\n\t\twindow.removeEventListener('message', handleEvent);\n\t});\n};\n\nexport const collaboratePlugin = () =>\n\tcreatePlugin(({ logger }) => ({\n\t\tsetupBridge: (params?: { signal?: AbortSignal }) =>\n\t\t\tsetupBridge({\n\t\t\t\tlogger,\n\t\t\t\tsignal: params?.signal,\n\t\t\t}),\n\t}));\n","type SelectorProperties = {\n\telement: Element | null | undefined;\n\tid?: string;\n\tclasses?: string;\n\tchildren?: string[];\n};\n\nconst getSelectorProperties = (from: SelectorProperties): SelectorProperties => {\n\tif (from.element?.getAttribute('id') !== null && !from.id?.length) {\n\t\tfrom.id = `#${from.element?.getAttribute('id')}`;\n\t\treturn from;\n\t}\n\n\tif (from.element && from.element.className.length > 0 && !from.classes?.length) {\n\t\tfrom.classes = `.${from.element.className.split(' ').join('.')}`;\n\t\treturn from;\n\t}\n\n\tconst newSelector = [from.classes, from.id].filter(Boolean).join('') || from.element?.tagName;\n\n\tconst parent = from.element?.parentElement;\n\tif (parent) {\n\t\tconst childIndex = Array.from(parent.children).findIndex(child => child === from.element);\n\t\treturn {\n\t\t\telement: from.element?.parentElement,\n\t\t\tchildren: [`${newSelector}:nth-child(${childIndex + 1})`, ...(from.children ?? [])],\n\t\t};\n\t}\n\tthrow new Error('Unable to uniquely identify selector: not unique enough');\n};\n\nexport const getElementUniqueSelector = (element: Element, context: Element) => {\n\tconst getSelector = (prefilled: SelectorProperties): string | null => {\n\t\tconst properties = getSelectorProperties(prefilled);\n\n\t\tconst newSelector = [[properties.classes, properties.id].filter(Boolean).join(''), ...(properties.children ?? [])]\n\t\t\t.filter(Boolean)\n\t\t\t.join('>');\n\n\t\tconst matchingSelectors = context.querySelectorAll(newSelector);\n\n\t\tif (matchingSelectors.length > 1 && matchingSelectors.length < 100) return getSelector(properties);\n\t\tif (matchingSelectors.length === 1) return newSelector;\n\n\t\treturn null;\n\t};\n\n\treturn getSelector({ element, children: [] });\n};\n"],"mappings":"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","names":["src_exports","__export","PIN_CURSOR_BASE64","collaboratePlugin","createInboundEventSender","isCollaborateOutboundEvent","__toCommonJS","import_sdk","getSelectorProperties","from","_a","_b","_c","_d","_e","_f","_g","_h","newSelector","parent","childIndex","child","getElementUniqueSelector","element","context","getSelector","prefilled","properties","matchingSelectors","preventIt","eventsToPrevent","sendOutboundEvent","data","__spreadValues","createInboundEventSender","_a","isCollaborateInboundEvent","event","isCollaborateOutboundEvent","PIN_CURSOR_BASE64","setCursor","id","style","getElementPinRect","element","boundingBox","getSelectorRects","selectors","selectorRects","selector","debounce","func","waitFor","timeout","args","setupBridge","logger","signal","watchedSelectors","hoveredElement","broadcastSelectors","broadcastHoveredElement","handleEvent","messageEvent","collaborateEvent","newElement","getElementUniqueSelector","rect","type","collaboratePlugin","params"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var p=Object.defineProperty;var M=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var E=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b=(e,t)=>{for(var n in t||(t={}))A.call(t,n)&&E(e,n,t[n]);if(M)for(var n of M(t))C.call(t,n)&&E(e,n,t[n]);return e};import{createPlugin as w}from"@inploi/sdk";var h=e=>{var r,o,c,i,s,g,u,l;if(((r=e.element)==null?void 0:r.getAttribute("id"))!==null&&!((o=e.id)!=null&&o.length))return e.id=`#${(c=e.element)==null?void 0:c.getAttribute("id")}`,e;if(e.element&&e.element.className.length>0&&!((i=e.classes)!=null&&i.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((s=e.element)==null?void 0:s.tagName),n=(g=e.element)==null?void 0:g.parentElement;if(n){let d=Array.from(n.children).findIndex(I=>I===e.element);return{element:(u=e.element)==null?void 0:u.parentElement,children:[`${t}:nth-child(${d+1})`,...(l=e.children)!=null?l:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},y=(e,t)=>{let n=r=>{var s;let o=h(r),c=[[o.classes,o.id].filter(Boolean).join(""),...(s=o.children)!=null?s:[]].filter(Boolean).join(">"),i=t.querySelectorAll(c);return i.length>1&&i.length<100?n(o):i.length===1?c:null};return n({element:e,children:[]})};var S=e=>{e.preventDefault(),e.stopPropagation()},Z=["mousedown","mouseup","blur","input","mouseenter","mouseleave","mouseover","pointerdown","pointerup","pointerenter","pointerleave","pointerover","pointermove","beforeinput","dblclick","focus","focusin","keydown","keypress","touchend","touchmove","touchstart","touchcancel","transitionstart","transitionend"],a=e=>{window.parent.postMessage(b({source:"inploi-collaborate"},e),"*")},L=e=>({sendInboundEvent:t=>{var n;return(n=e.source)==null?void 0:n.postMessage(b({source:"inploi-collaborate"},t),{targetOrigin:e.origin})}}),D=e=>e.data.source==="inploi-collaborate",V=e=>e.data.source==="inploi-collaborate",N="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",P=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${N}) 6 2, crosshair !important; }`,document.head.appendChild(t)},m=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:window.scrollX+t.x,y:window.scrollY+t.y,width:t.width,height:t.height}},v=e=>{let t={};for(let n of e){let r=document.querySelector(n);t[n]=r?m(r):null}return t};function R(e,t){let n;return(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)}}var x=({logger:e,signal:t,onDispose:n})=>{let r=[],o;a({type:"READY"}),e.info("Collaborate bridge: Ready");let c=R(()=>{a({type:"SELECTOR_RECTS",selectorRects:v(r)})},50),i=()=>{o&&a({type:"HOVER_ELEMENT",rect:m(o)})},s=g=>{if(D(g)===!1)return;let u=g.data;switch(u.type){case"WATCH_SELECTORS":{r=u.selectors,c();break}case"SETUP_EVENT_HANDLERS":e.info("Collaborate bridge: Setting up event handlers"),P(),window.addEventListener("beforeunload",()=>{n==null||n()}),window.addEventListener("resize",()=>{c(),a({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",l=>{l.preventDefault(),l.stopPropagation();let d=document.elementsFromPoint(l.clientX,l.clientY)[0];d!==o&&(o=d,i())},{signal:t}),document.body.addEventListener("click",l=>{if(l.preventDefault(),l.stopPropagation(),!o)return;let d=y(o,document.body);if(!d)return;let I=o.getBoundingClientRect();i(),a({type:"DROP_PIN",pin:{rect:m(o),selector:d,xPercent:(l.clientX-I.x)/I.width,yPercent:(l.clientY-I.y)/I.height}})},{signal:t}),window.addEventListener("scroll",()=>{c(),i(),a({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),Z.map(l=>document.body.addEventListener(l,S,{signal:t})),e.info("Collaborate bridge: Event handlers set up")}};window.addEventListener("message",s,{signal:t}),t==null||t.addEventListener("abort",()=>{e.info("Collaborate bridge: disposing"),n==null||n(),window.removeEventListener("message",s)})},Y=()=>w(({logger:e})=>({setupBridge:t=>x({logger:e,signal:t==null?void 0:t.signal})}));export{N as PIN_CURSOR_BASE64,Y as collaboratePlugin,L as createInboundEventSender,V as isCollaborateOutboundEvent};
1
+ var y=Object.defineProperty;var m=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var p=(e,t,n)=>t in e?y(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,u=(e,t)=>{for(var n in t||(t={}))A.call(t,n)&&p(e,n,t[n]);if(m)for(var n of m(t))C.call(t,n)&&p(e,n,t[n]);return e};import{createPlugin as S}from"@inploi/sdk";var D=e=>{var o,r,i,c,s,g,l,d;if(((o=e.element)==null?void 0:o.getAttribute("id"))!==null&&!((r=e.id)!=null&&r.length))return e.id=`#${(i=e.element)==null?void 0:i.getAttribute("id")}`,e;if(e.element&&e.element.className.length>0&&!((c=e.classes)!=null&&c.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((s=e.element)==null?void 0:s.tagName),n=(g=e.element)==null?void 0:g.parentElement;if(n){let a=Array.from(n.children).findIndex(M=>M===e.element);return{element:(l=e.element)==null?void 0:l.parentElement,children:[`${t}:nth-child(${a+1})`,...(d=e.children)!=null?d:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},E=(e,t)=>{let n=o=>{var s;let r=D(o),i=[[r.classes,r.id].filter(Boolean).join(""),...(s=r.children)!=null?s:[]].filter(Boolean).join(">"),c=t.querySelectorAll(i);return c.length>1&&c.length<100?n(r):c.length===1?i:null};return n({element:e,children:[]})};var h=e=>{e.preventDefault(),e.stopPropagation()},w=["mousedown","mouseup","blur","input","mouseenter","mouseleave","mouseover","pointerdown","pointerup","pointerenter","pointerleave","pointerover","pointermove","beforeinput","dblclick","focus","focusin","keydown","keypress","touchend","touchmove","touchstart","touchcancel","transitionstart","transitionend"],I=e=>{window.parent.postMessage(u({source:"inploi-collaborate"},e),"*")},L=e=>({sendInboundEvent:t=>{var n;return(n=e.source)==null?void 0:n.postMessage(u({source:"inploi-collaborate"},t),{targetOrigin:e.origin})}}),P=e=>e.data.source==="inploi-collaborate",V=e=>e.data.source==="inploi-collaborate",Z="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",N=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${Z}) 6 2, crosshair !important; }`,document.head.appendChild(t)},b=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:window.scrollX+t.x,y:window.scrollY+t.y,width:t.width,height:t.height}},R=e=>{let t={};for(let n of e){let o=document.querySelector(n);t[n]=o?b(o):null}return t};function v(e,t){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>e(...o),t)}}var x=({logger:e,signal:t})=>{let n=[],o;I({type:"READY"}),e.info("Collaborate bridge: Ready");let r=v(()=>{I({type:"SELECTOR_RECTS",selectorRects:R(n)})},50),i=()=>{o&&I({type:"HOVER_ELEMENT",rect:b(o)})},c=s=>{if(P(s)===!1)return;let g=s.data;switch(g.type){case"WATCH_SELECTORS":{n=g.selectors,r();break}case"SETUP_EVENT_HANDLERS":e.info("Collaborate bridge: Setting up event handlers"),N(),window.addEventListener("beforeunload",()=>{I({type:"DISPOSE"})}),window.addEventListener("resize",()=>{r(),I({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",l=>{l.preventDefault(),l.stopPropagation();let d=document.elementsFromPoint(l.clientX,l.clientY)[0];d!==o&&(o=d,i())},{signal:t}),document.body.addEventListener("click",l=>{if(l.preventDefault(),l.stopPropagation(),!o)return;let d=E(o,document.body);if(!d)return;let a=o.getBoundingClientRect();i(),I({type:"DROP_PIN",pin:{rect:b(o),selector:d,xPercent:(l.clientX-a.x)/a.width,yPercent:(l.clientY-a.y)/a.height}})},{signal:t}),window.addEventListener("scroll",()=>{r(),i(),I({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),w.map(l=>document.body.addEventListener(l,h,{signal:t})),e.info("Collaborate bridge: Event handlers set up")}};window.addEventListener("message",c,{signal:t}),t==null||t.addEventListener("abort",()=>{e.info("Collaborate bridge: disposing"),I({type:"DISPOSE"}),window.removeEventListener("message",c)})},Y=()=>S(({logger:e})=>({setupBridge:t=>x({logger:e,signal:t==null?void 0:t.signal})}));export{Z as PIN_CURSOR_BASE64,Y as collaboratePlugin,L as createInboundEventSender,V as isCollaborateOutboundEvent};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/collaborate.ts","../src/collaborate.selector.ts"],"sourcesContent":["import { Logger, createPlugin } from '@inploi/sdk';\n\nimport { getElementUniqueSelector } from './collaborate.selector';\n\nconst preventIt = (e: Event) => {\n\te.preventDefault();\n\te.stopPropagation();\n};\n\nconst eventsToPrevent: (keyof HTMLElementEventMap)[] = [\n\t'mousedown',\n\t'mouseup',\n\t'blur',\n\t'input',\n\t'mouseenter',\n\t'mouseleave',\n\t'mouseover',\n\t'pointerdown',\n\t'pointerup',\n\t'pointerenter',\n\t'pointerleave',\n\t'pointerover',\n\t'pointermove',\n\t'beforeinput',\n\t'dblclick',\n\t'focus',\n\t'focusin',\n\t'keydown',\n\t'keypress',\n\t'touchend',\n\t'touchmove',\n\t'touchstart',\n\t'touchcancel',\n\t'transitionstart',\n\t'transitionend',\n];\n\nexport type CollaborateInboundEvent =\n\t| {\n\t\t\ttype: 'SETUP_EVENT_HANDLERS';\n\t }\n\t| { type: 'WATCH_SELECTORS'; selectors: string[] };\n\nexport type CollaborateOutboundEvent =\n\t| { type: 'READY' }\n\t| {\n\t\t\ttype: 'RESIZE';\n\t\t\tscrollHeight: number;\n\t }\n\t| { type: 'SCROLL'; scrollY: number; scrollX: number }\n\t| {\n\t\t\ttype: 'HOVER_ELEMENT';\n\t\t\trect: PinRect | null;\n\t }\n\t| {\n\t\t\ttype: 'DROP_PIN';\n\t\t\tpin: DroppedPin;\n\t }\n\t| {\n\t\t\ttype: 'SELECTOR_RECTS';\n\t\t\tselectorRects: SelectorRects;\n\t };\n\nexport type DroppedPin = { selector: string; xPercent: number; yPercent: number; rect: PinRect };\n\nconst sendOutboundEvent = (data: CollaborateOutboundEvent) => {\n\twindow.parent.postMessage({ source: 'inploi-collaborate', ...data }, '*');\n};\n\nexport const createInboundEventSender = (e: MessageEvent) => {\n\treturn {\n\t\tsendInboundEvent: (data: CollaborateInboundEvent) =>\n\t\t\te.source?.postMessage({ source: 'inploi-collaborate', ...data }, { targetOrigin: e.origin }),\n\t};\n};\n\nconst isCollaborateInboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateInboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const isCollaborateOutboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateOutboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const PIN_CURSOR_BASE64 =\n\t'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==';\n\nconst setCursor = () => {\n\tconst id = 'isdk-collaborate-cursor';\n\tif (document.getElementById(id)) return;\n\tconst style = document.createElement('style');\n\tstyle.id = id;\n\tstyle.innerHTML = `* { cursor: url(${PIN_CURSOR_BASE64}) 6 2, crosshair !important; }`;\n\tdocument.head.appendChild(style);\n};\n\nexport type PinRect = {\n\t_brand: 'pin';\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nconst getElementPinRect = (element: Element): PinRect => {\n\tconst boundingBox = element.getBoundingClientRect();\n\treturn {\n\t\t_brand: 'pin',\n\t\tx: window.scrollX + boundingBox.x,\n\t\ty: window.scrollY + boundingBox.y,\n\t\twidth: boundingBox.width,\n\t\theight: boundingBox.height,\n\t};\n};\n\nexport type SelectorRects = { [selector: string]: PinRect | null };\n\nconst getSelectorRects = (selectors: string[]) => {\n\tconst selectorRects: SelectorRects = {};\n\tfor (const selector of selectors) {\n\t\tconst element = document.querySelector(selector);\n\t\tselectorRects[selector] = element ? getElementPinRect(element) : null;\n\t}\n\treturn selectorRects;\n};\n\nfunction debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n\tfunc: F,\n\twaitFor: number,\n): (...args: Parameters<F>) => void {\n\tlet timeout: ReturnType<typeof setTimeout>;\n\n\treturn (...args: Parameters<F>): void => {\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(() => func(...args), waitFor);\n\t};\n}\n\n/** Sets up the bridge for Collaborate to be able to communicate with the host page */\nconst setupBridge = ({\n\tlogger,\n\tsignal,\n\tonDispose,\n}: {\n\tsignal?: AbortSignal;\n\tlogger: Logger;\n\tonDispose?: () => void;\n}) => {\n\tlet watchedSelectors: string[] = [];\n\tlet hoveredElement: Element | undefined;\n\tsendOutboundEvent({ type: 'READY' });\n\tlogger.info('Collaborate bridge: Ready');\n\n\tconst broadcastSelectors = debounce(() => {\n\t\tsendOutboundEvent({ type: 'SELECTOR_RECTS', selectorRects: getSelectorRects(watchedSelectors) });\n\t}, 50);\n\n\tconst broadcastHoveredElement = () => {\n\t\tif (!hoveredElement) return;\n\t\tsendOutboundEvent({\n\t\t\ttype: 'HOVER_ELEMENT',\n\t\t\trect: getElementPinRect(hoveredElement),\n\t\t});\n\t};\n\n\tconst handleEvent = (messageEvent: MessageEvent) => {\n\t\tif (isCollaborateInboundEvent(messageEvent) === false) return;\n\t\tconst collaborateEvent = messageEvent.data;\n\t\tswitch (collaborateEvent.type) {\n\t\t\tcase 'WATCH_SELECTORS': {\n\t\t\t\twatchedSelectors = collaborateEvent.selectors;\n\t\t\t\tbroadcastSelectors();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SETUP_EVENT_HANDLERS': {\n\t\t\t\tlogger.info('Collaborate bridge: Setting up event handlers');\n\t\t\t\tsetCursor();\n\t\t\t\twindow.addEventListener('beforeunload', () => {\n\t\t\t\t\tonDispose?.();\n\t\t\t\t});\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'resize',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'RESIZE', scrollHeight: document.body.scrollHeight });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tconst newElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\tif (newElement === hoveredElement) return;\n\t\t\t\t\t\thoveredElement = newElement;\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'click',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tif (!hoveredElement) return;\n\t\t\t\t\t\tconst selector = getElementUniqueSelector(hoveredElement, document.body);\n\t\t\t\t\t\tif (!selector) return;\n\t\t\t\t\t\tconst rect = hoveredElement.getBoundingClientRect();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\ttype: 'DROP_PIN',\n\t\t\t\t\t\t\tpin: {\n\t\t\t\t\t\t\t\trect: getElementPinRect(hoveredElement),\n\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\txPercent: (event.clientX - rect.x) / rect.width,\n\t\t\t\t\t\t\t\tyPercent: (event.clientY - rect.y) / rect.height,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'scroll',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'SCROLL', scrollY: window.scrollY, scrollX: window.scrollX });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\teventsToPrevent.map(type => document.body.addEventListener(type, preventIt, { signal }));\n\t\t\t\tlogger.info('Collaborate bridge: Event handlers set up');\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener('message', handleEvent, { signal });\n\tsignal?.addEventListener('abort', () => {\n\t\tlogger.info('Collaborate bridge: disposing');\n\t\tonDispose?.();\n\t\twindow.removeEventListener('message', handleEvent);\n\t});\n};\n\nexport const collaboratePlugin = () =>\n\tcreatePlugin(({ logger }) => ({\n\t\tsetupBridge: (params?: { signal?: AbortSignal }) =>\n\t\t\tsetupBridge({\n\t\t\t\tlogger,\n\t\t\t\tsignal: params?.signal,\n\t\t\t}),\n\t}));\n","type SelectorProperties = {\n\telement: Element | null | undefined;\n\tid?: string;\n\tclasses?: string;\n\tchildren?: string[];\n};\n\nconst getSelectorProperties = (from: SelectorProperties): SelectorProperties => {\n\tif (from.element?.getAttribute('id') !== null && !from.id?.length) {\n\t\tfrom.id = `#${from.element?.getAttribute('id')}`;\n\t\treturn from;\n\t}\n\n\tif (from.element && from.element.className.length > 0 && !from.classes?.length) {\n\t\tfrom.classes = `.${from.element.className.split(' ').join('.')}`;\n\t\treturn from;\n\t}\n\n\tconst newSelector = [from.classes, from.id].filter(Boolean).join('') || from.element?.tagName;\n\n\tconst parent = from.element?.parentElement;\n\tif (parent) {\n\t\tconst childIndex = Array.from(parent.children).findIndex(child => child === from.element);\n\t\treturn {\n\t\t\telement: from.element?.parentElement,\n\t\t\tchildren: [`${newSelector}:nth-child(${childIndex + 1})`, ...(from.children ?? [])],\n\t\t};\n\t}\n\tthrow new Error('Unable to uniquely identify selector: not unique enough');\n};\n\nexport const getElementUniqueSelector = (element: Element, context: Element) => {\n\tconst getSelector = (prefilled: SelectorProperties): string | null => {\n\t\tconst properties = getSelectorProperties(prefilled);\n\n\t\tconst newSelector = [[properties.classes, properties.id].filter(Boolean).join(''), ...(properties.children ?? [])]\n\t\t\t.filter(Boolean)\n\t\t\t.join('>');\n\n\t\tconst matchingSelectors = context.querySelectorAll(newSelector);\n\n\t\tif (matchingSelectors.length > 1 && matchingSelectors.length < 100) return getSelector(properties);\n\t\tif (matchingSelectors.length === 1) return newSelector;\n\n\t\treturn null;\n\t};\n\n\treturn getSelector({ element, children: [] });\n};\n"],"mappings":"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","names":["createPlugin","getSelectorProperties","from","_a","_b","_c","_d","_e","_f","_g","_h","newSelector","parent","childIndex","child","getElementUniqueSelector","element","context","getSelector","prefilled","properties","matchingSelectors","preventIt","eventsToPrevent","sendOutboundEvent","data","__spreadValues","createInboundEventSender","_a","isCollaborateInboundEvent","event","isCollaborateOutboundEvent","PIN_CURSOR_BASE64","setCursor","id","style","getElementPinRect","element","boundingBox","getSelectorRects","selectors","selectorRects","selector","debounce","func","waitFor","timeout","args","setupBridge","logger","signal","onDispose","watchedSelectors","hoveredElement","broadcastSelectors","broadcastHoveredElement","handleEvent","messageEvent","collaborateEvent","newElement","getElementUniqueSelector","rect","type","collaboratePlugin","createPlugin","params"]}
1
+ {"version":3,"sources":["../src/collaborate.ts","../src/collaborate.selector.ts"],"sourcesContent":["import { Logger, createPlugin } from '@inploi/sdk';\n\nimport { getElementUniqueSelector } from './collaborate.selector';\n\nconst preventIt = (e: Event) => {\n\te.preventDefault();\n\te.stopPropagation();\n};\n\nconst eventsToPrevent: (keyof HTMLElementEventMap)[] = [\n\t'mousedown',\n\t'mouseup',\n\t'blur',\n\t'input',\n\t'mouseenter',\n\t'mouseleave',\n\t'mouseover',\n\t'pointerdown',\n\t'pointerup',\n\t'pointerenter',\n\t'pointerleave',\n\t'pointerover',\n\t'pointermove',\n\t'beforeinput',\n\t'dblclick',\n\t'focus',\n\t'focusin',\n\t'keydown',\n\t'keypress',\n\t'touchend',\n\t'touchmove',\n\t'touchstart',\n\t'touchcancel',\n\t'transitionstart',\n\t'transitionend',\n];\n\nexport type CollaborateInboundEvent =\n\t| {\n\t\t\ttype: 'SETUP_EVENT_HANDLERS';\n\t }\n\t| { type: 'WATCH_SELECTORS'; selectors: string[] };\n\nexport type CollaborateOutboundEvent =\n\t| { type: 'READY' }\n\t| {\n\t\t\ttype: 'RESIZE';\n\t\t\tscrollHeight: number;\n\t }\n\t| { type: 'SCROLL'; scrollY: number; scrollX: number }\n\t| {\n\t\t\ttype: 'HOVER_ELEMENT';\n\t\t\trect: PinRect | null;\n\t }\n\t| {\n\t\t\ttype: 'DROP_PIN';\n\t\t\tpin: DroppedPin;\n\t }\n\t| {\n\t\t\ttype: 'DISPOSE';\n\t }\n\t| {\n\t\t\ttype: 'SELECTOR_RECTS';\n\t\t\tselectorRects: SelectorRects;\n\t };\n\nexport type DroppedPin = { selector: string; xPercent: number; yPercent: number; rect: PinRect };\n\nconst sendOutboundEvent = (data: CollaborateOutboundEvent) => {\n\twindow.parent.postMessage({ source: 'inploi-collaborate', ...data }, '*');\n};\n\nexport const createInboundEventSender = (e: MessageEvent) => {\n\treturn {\n\t\tsendInboundEvent: (data: CollaborateInboundEvent) =>\n\t\t\te.source?.postMessage({ source: 'inploi-collaborate', ...data }, { targetOrigin: e.origin }),\n\t};\n};\n\nconst isCollaborateInboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateInboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const isCollaborateOutboundEvent = (event: MessageEvent): event is MessageEvent<CollaborateOutboundEvent> => {\n\treturn event.data.source === 'inploi-collaborate';\n};\n\nexport const PIN_CURSOR_BASE64 =\n\t'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==';\n\nconst setCursor = () => {\n\tconst id = 'isdk-collaborate-cursor';\n\tif (document.getElementById(id)) return;\n\tconst style = document.createElement('style');\n\tstyle.id = id;\n\tstyle.innerHTML = `* { cursor: url(${PIN_CURSOR_BASE64}) 6 2, crosshair !important; }`;\n\tdocument.head.appendChild(style);\n};\n\nexport type PinRect = {\n\t_brand: 'pin';\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n};\n\nconst getElementPinRect = (element: Element): PinRect => {\n\tconst boundingBox = element.getBoundingClientRect();\n\treturn {\n\t\t_brand: 'pin',\n\t\tx: window.scrollX + boundingBox.x,\n\t\ty: window.scrollY + boundingBox.y,\n\t\twidth: boundingBox.width,\n\t\theight: boundingBox.height,\n\t};\n};\n\nexport type SelectorRects = { [selector: string]: PinRect | null };\n\nconst getSelectorRects = (selectors: string[]) => {\n\tconst selectorRects: SelectorRects = {};\n\tfor (const selector of selectors) {\n\t\tconst element = document.querySelector(selector);\n\t\tselectorRects[selector] = element ? getElementPinRect(element) : null;\n\t}\n\treturn selectorRects;\n};\n\nfunction debounce<F extends (...args: Parameters<F>) => ReturnType<F>>(\n\tfunc: F,\n\twaitFor: number,\n): (...args: Parameters<F>) => void {\n\tlet timeout: ReturnType<typeof setTimeout>;\n\n\treturn (...args: Parameters<F>): void => {\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(() => func(...args), waitFor);\n\t};\n}\n\n/** Sets up the bridge for Collaborate to be able to communicate with the host page */\nconst setupBridge = ({ logger, signal }: { signal?: AbortSignal; logger: Logger }) => {\n\tlet watchedSelectors: string[] = [];\n\tlet hoveredElement: Element | undefined;\n\tsendOutboundEvent({ type: 'READY' });\n\tlogger.info('Collaborate bridge: Ready');\n\n\tconst broadcastSelectors = debounce(() => {\n\t\tsendOutboundEvent({ type: 'SELECTOR_RECTS', selectorRects: getSelectorRects(watchedSelectors) });\n\t}, 50);\n\n\tconst broadcastHoveredElement = () => {\n\t\tif (!hoveredElement) return;\n\t\tsendOutboundEvent({\n\t\t\ttype: 'HOVER_ELEMENT',\n\t\t\trect: getElementPinRect(hoveredElement),\n\t\t});\n\t};\n\n\tconst handleEvent = (messageEvent: MessageEvent) => {\n\t\tif (isCollaborateInboundEvent(messageEvent) === false) return;\n\t\tconst collaborateEvent = messageEvent.data;\n\t\tswitch (collaborateEvent.type) {\n\t\t\tcase 'WATCH_SELECTORS': {\n\t\t\t\twatchedSelectors = collaborateEvent.selectors;\n\t\t\t\tbroadcastSelectors();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SETUP_EVENT_HANDLERS': {\n\t\t\t\tlogger.info('Collaborate bridge: Setting up event handlers');\n\t\t\t\tsetCursor();\n\t\t\t\twindow.addEventListener('beforeunload', () => {\n\t\t\t\t\tsendOutboundEvent({ type: 'DISPOSE' });\n\t\t\t\t});\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'resize',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'RESIZE', scrollHeight: document.body.scrollHeight });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tconst newElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\tif (newElement === hoveredElement) return;\n\t\t\t\t\t\thoveredElement = newElement;\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t'click',\n\t\t\t\t\tevent => {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tif (!hoveredElement) return;\n\t\t\t\t\t\tconst selector = getElementUniqueSelector(hoveredElement, document.body);\n\t\t\t\t\t\tif (!selector) return;\n\t\t\t\t\t\tconst rect = hoveredElement.getBoundingClientRect();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\ttype: 'DROP_PIN',\n\t\t\t\t\t\t\tpin: {\n\t\t\t\t\t\t\t\trect: getElementPinRect(hoveredElement),\n\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\txPercent: (event.clientX - rect.x) / rect.width,\n\t\t\t\t\t\t\t\tyPercent: (event.clientY - rect.y) / rect.height,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'scroll',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\tbroadcastHoveredElement();\n\t\t\t\t\t\tsendOutboundEvent({ type: 'SCROLL', scrollY: window.scrollY, scrollX: window.scrollX });\n\t\t\t\t\t},\n\t\t\t\t\t{ signal },\n\t\t\t\t);\n\t\t\t\teventsToPrevent.map(type => document.body.addEventListener(type, preventIt, { signal }));\n\t\t\t\tlogger.info('Collaborate bridge: Event handlers set up');\n\t\t\t}\n\t\t}\n\t};\n\n\twindow.addEventListener('message', handleEvent, { signal });\n\tsignal?.addEventListener('abort', () => {\n\t\tlogger.info('Collaborate bridge: disposing');\n\t\tsendOutboundEvent({ type: 'DISPOSE' });\n\t\twindow.removeEventListener('message', handleEvent);\n\t});\n};\n\nexport const collaboratePlugin = () =>\n\tcreatePlugin(({ logger }) => ({\n\t\tsetupBridge: (params?: { signal?: AbortSignal }) =>\n\t\t\tsetupBridge({\n\t\t\t\tlogger,\n\t\t\t\tsignal: params?.signal,\n\t\t\t}),\n\t}));\n","type SelectorProperties = {\n\telement: Element | null | undefined;\n\tid?: string;\n\tclasses?: string;\n\tchildren?: string[];\n};\n\nconst getSelectorProperties = (from: SelectorProperties): SelectorProperties => {\n\tif (from.element?.getAttribute('id') !== null && !from.id?.length) {\n\t\tfrom.id = `#${from.element?.getAttribute('id')}`;\n\t\treturn from;\n\t}\n\n\tif (from.element && from.element.className.length > 0 && !from.classes?.length) {\n\t\tfrom.classes = `.${from.element.className.split(' ').join('.')}`;\n\t\treturn from;\n\t}\n\n\tconst newSelector = [from.classes, from.id].filter(Boolean).join('') || from.element?.tagName;\n\n\tconst parent = from.element?.parentElement;\n\tif (parent) {\n\t\tconst childIndex = Array.from(parent.children).findIndex(child => child === from.element);\n\t\treturn {\n\t\t\telement: from.element?.parentElement,\n\t\t\tchildren: [`${newSelector}:nth-child(${childIndex + 1})`, ...(from.children ?? [])],\n\t\t};\n\t}\n\tthrow new Error('Unable to uniquely identify selector: not unique enough');\n};\n\nexport const getElementUniqueSelector = (element: Element, context: Element) => {\n\tconst getSelector = (prefilled: SelectorProperties): string | null => {\n\t\tconst properties = getSelectorProperties(prefilled);\n\n\t\tconst newSelector = [[properties.classes, properties.id].filter(Boolean).join(''), ...(properties.children ?? [])]\n\t\t\t.filter(Boolean)\n\t\t\t.join('>');\n\n\t\tconst matchingSelectors = context.querySelectorAll(newSelector);\n\n\t\tif (matchingSelectors.length > 1 && matchingSelectors.length < 100) return getSelector(properties);\n\t\tif (matchingSelectors.length === 1) return newSelector;\n\n\t\treturn null;\n\t};\n\n\treturn getSelector({ element, children: [] });\n};\n"],"mappings":"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","names":["createPlugin","getSelectorProperties","from","_a","_b","_c","_d","_e","_f","_g","_h","newSelector","parent","childIndex","child","getElementUniqueSelector","element","context","getSelector","prefilled","properties","matchingSelectors","preventIt","eventsToPrevent","sendOutboundEvent","data","__spreadValues","createInboundEventSender","_a","isCollaborateInboundEvent","event","isCollaborateOutboundEvent","PIN_CURSOR_BASE64","setCursor","id","style","getElementPinRect","element","boundingBox","getSelectorRects","selectors","selectorRects","selector","debounce","func","waitFor","timeout","args","setupBridge","logger","signal","watchedSelectors","hoveredElement","broadcastSelectors","broadcastHoveredElement","handleEvent","messageEvent","collaborateEvent","newElement","getElementUniqueSelector","rect","type","collaboratePlugin","createPlugin","params"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inploi/plugin-collaborate",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -26,8 +26,8 @@
26
26
  "happy-dom": "^12.6.0",
27
27
  "tsup": "^7.2.0",
28
28
  "eslint-config-custom": "0.1.0",
29
- "tsconfig": "0.1.0",
30
- "@inploi/sdk": "1.14.4"
29
+ "@inploi/sdk": "1.14.4",
30
+ "tsconfig": "0.1.0"
31
31
  },
32
32
  "scripts": {
33
33
  "build:npm": "tsup --dts --dts-resolve",