@inploi/plugin-collaborate 0.0.1
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/README.md +51 -0
- package/cdn/index.js +3 -0
- package/dist/index.d.mts +51 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +37 -0
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# @inploi/plugin-collaborate
|
|
2
|
+
|
|
3
|
+
Zero dependency plugin for enabling inploi’s Collaborate product on any website.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
If you want to use it in your javascript project, you can install it via npm:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @inploi/plugin-collaborate
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
Whenever your page is done loading you may call `setupCollaborate` to enable the plugin. You may pass in an optional `signal` parameter to abort the setup process and remove all event listeners if you want.
|
|
16
|
+
|
|
17
|
+
E.g.:
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
import { setupCollaborate } from '@inploi/plugin-collaborate';
|
|
21
|
+
|
|
22
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
23
|
+
setupCollaborate();
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
React:
|
|
28
|
+
|
|
29
|
+
````javascript
|
|
30
|
+
import { setupCollaborate } from '@inploi/plugin-collaborate';
|
|
31
|
+
|
|
32
|
+
const App = () => {
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
const abortController = new AbortController();
|
|
35
|
+
setupCollaborate({signal: abortController.signal});
|
|
36
|
+
return () => abortController.abort();
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
return <div>Hello World</div>;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
## From the CDN
|
|
43
|
+
|
|
44
|
+
You can also use the plugin from the CDN by adding the following script tag to your HTML:
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<script src="https://unpkg.com/@inploi/plugin-collaborate@latest/cdn/index.js"></script>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This will already setup the plugin when the DOM is ready.
|
|
51
|
+
````
|
package/cdn/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// This is an inploi sdk script. Learn more at https://inploi.com
|
|
2
|
+
|
|
3
|
+
"use strict";(()=>{var E=Object.defineProperty;var u=Object.getOwnPropertySymbols;var y=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable;var b=(e,t,n)=>t in e?E(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,m=(e,t)=>{for(var n in t||(t={}))y.call(t,n)&&b(e,n,t[n]);if(u)for(var n of u(t))D.call(t,n)&&b(e,n,t[n]);return e};var h=e=>{var l,i,s,c,o,r,g,I;if(((l=e.element)==null?void 0:l.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&&!((c=e.classes)!=null&&c.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((o=e.element)==null?void 0:o.tagName),n=(r=e.element)==null?void 0:r.parentElement;if(n){let A=Array.from(n.children).findIndex(C=>C===e.element);return{element:(g=e.element)==null?void 0:g.parentElement,children:[`${t}:nth-child(${A+1})`,...(I=e.children)!=null?I:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},M=(e,t)=>{let n=l=>{var o;let i=h(l),s=[[i.classes,i.id].filter(Boolean).join(""),...(o=i.children)!=null?o:[]].filter(Boolean).join(">"),c=t.querySelectorAll(s);return c.length>1&&c.length<100?n(i):c.length===1?s:null};return n({element:e,children:[]})};var Z=e=>{e.preventDefault(),e.stopPropagation()},S=["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),"*")};var N=e=>e.data.source==="inploi-collaborate";var P="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",w=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${P}) 6 2, crosshair !important; }`,document.head.appendChild(t)},d=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:e.scrollLeft,y:e.scrollTop,width:t.width,height:t.height}},R=e=>{let t={};for(let n of e){let l=document.querySelector(n);t[n]=l?d(l):null}return t};function x(e,t){let n;return(...l)=>{clearTimeout(n),n=setTimeout(()=>e(...l),t)}}var p=e=>{var i;let t=(i=e==null?void 0:e.signal)!=null?i:new AbortController().signal,n=[];a({type:"READY"});let l=x(()=>{a({type:"SELECTOR_RECTS",selectorRects:R(n)})},50);window.addEventListener("message",s=>{if(N(s)===!1)return;let c=s.data;switch(c.type){case"WATCH_SELECTORS":{n=c.selectors,l();break}case"SETUP_EVENT_HANDLERS":w(),window.addEventListener("resize",()=>{l(),a({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",o=>{o.preventDefault(),o.stopPropagation();let r=document.elementsFromPoint(o.clientX,o.clientY)[0];a({type:"HOVER_ELEMENT",rect:r?d(r):null})},{signal:t}),document.body.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation();let r=document.elementsFromPoint(o.clientX,o.clientY)[0];if(!r)return;let g=M(r,document.body);if(!g)return;let I=r.getBoundingClientRect();a({type:"DROP_PIN",pin:{rect:d(r),selector:g,xPercent:(o.clientX-I.x)/I.width,yPercent:(o.clientY-I.y)/I.height}})},{signal:t}),window.addEventListener("scroll",()=>{l(),a({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),S.map(o=>document.addEventListener(o,Z,{signal:t}))}},{signal:t})};window.addEventListener("DOMContentLoaded",()=>{p()});})();
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
type CollaborateInboundEvent = {
|
|
2
|
+
type: 'SETUP_EVENT_HANDLERS';
|
|
3
|
+
} | {
|
|
4
|
+
type: 'WATCH_SELECTORS';
|
|
5
|
+
selectors: string[];
|
|
6
|
+
};
|
|
7
|
+
type CollaborateOutboundEvent = {
|
|
8
|
+
type: 'READY';
|
|
9
|
+
} | {
|
|
10
|
+
type: 'RESIZE';
|
|
11
|
+
scrollHeight: number;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'SCROLL';
|
|
14
|
+
scrollY: number;
|
|
15
|
+
scrollX: number;
|
|
16
|
+
} | {
|
|
17
|
+
type: 'HOVER_ELEMENT';
|
|
18
|
+
rect: PinRect | null;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'DROP_PIN';
|
|
21
|
+
pin: DroppedPin;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'SELECTOR_RECTS';
|
|
24
|
+
selectorRects: SelectorRects;
|
|
25
|
+
};
|
|
26
|
+
type DroppedPin = {
|
|
27
|
+
selector: string;
|
|
28
|
+
xPercent: number;
|
|
29
|
+
yPercent: number;
|
|
30
|
+
rect: PinRect;
|
|
31
|
+
};
|
|
32
|
+
declare const createInboundEventSender: (source: MessageEventSource) => {
|
|
33
|
+
sendInboundEvent: (data: CollaborateInboundEvent) => void;
|
|
34
|
+
};
|
|
35
|
+
declare const isCollaborateOutboundEvent: (event: MessageEvent) => event is MessageEvent<CollaborateOutboundEvent>;
|
|
36
|
+
declare const PIN_CURSOR_BASE64 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==";
|
|
37
|
+
type PinRect = {
|
|
38
|
+
_brand: 'pin';
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
};
|
|
44
|
+
type SelectorRects = {
|
|
45
|
+
[selector: string]: PinRect | null;
|
|
46
|
+
};
|
|
47
|
+
declare const setupCollaborate: (params?: {
|
|
48
|
+
signal?: AbortSignal;
|
|
49
|
+
}) => void;
|
|
50
|
+
|
|
51
|
+
export { CollaborateInboundEvent, CollaborateOutboundEvent, DroppedPin, PIN_CURSOR_BASE64, PinRect, SelectorRects, createInboundEventSender, isCollaborateOutboundEvent, setupCollaborate };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
type CollaborateInboundEvent = {
|
|
2
|
+
type: 'SETUP_EVENT_HANDLERS';
|
|
3
|
+
} | {
|
|
4
|
+
type: 'WATCH_SELECTORS';
|
|
5
|
+
selectors: string[];
|
|
6
|
+
};
|
|
7
|
+
type CollaborateOutboundEvent = {
|
|
8
|
+
type: 'READY';
|
|
9
|
+
} | {
|
|
10
|
+
type: 'RESIZE';
|
|
11
|
+
scrollHeight: number;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'SCROLL';
|
|
14
|
+
scrollY: number;
|
|
15
|
+
scrollX: number;
|
|
16
|
+
} | {
|
|
17
|
+
type: 'HOVER_ELEMENT';
|
|
18
|
+
rect: PinRect | null;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'DROP_PIN';
|
|
21
|
+
pin: DroppedPin;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'SELECTOR_RECTS';
|
|
24
|
+
selectorRects: SelectorRects;
|
|
25
|
+
};
|
|
26
|
+
type DroppedPin = {
|
|
27
|
+
selector: string;
|
|
28
|
+
xPercent: number;
|
|
29
|
+
yPercent: number;
|
|
30
|
+
rect: PinRect;
|
|
31
|
+
};
|
|
32
|
+
declare const createInboundEventSender: (source: MessageEventSource) => {
|
|
33
|
+
sendInboundEvent: (data: CollaborateInboundEvent) => void;
|
|
34
|
+
};
|
|
35
|
+
declare const isCollaborateOutboundEvent: (event: MessageEvent) => event is MessageEvent<CollaborateOutboundEvent>;
|
|
36
|
+
declare const PIN_CURSOR_BASE64 = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==";
|
|
37
|
+
type PinRect = {
|
|
38
|
+
_brand: 'pin';
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
};
|
|
44
|
+
type SelectorRects = {
|
|
45
|
+
[selector: string]: PinRect | null;
|
|
46
|
+
};
|
|
47
|
+
declare const setupCollaborate: (params?: {
|
|
48
|
+
signal?: AbortSignal;
|
|
49
|
+
}) => void;
|
|
50
|
+
|
|
51
|
+
export { CollaborateInboundEvent, CollaborateOutboundEvent, DroppedPin, PIN_CURSOR_BASE64, PinRect, SelectorRects, createInboundEventSender, isCollaborateOutboundEvent, setupCollaborate };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var d=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames,m=Object.getOwnPropertySymbols;var p=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var M=(e,t,n)=>t in e?d(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,u=(e,t)=>{for(var n in t||(t={}))p.call(t,n)&&M(e,n,t[n]);if(m)for(var n of m(t))Z.call(t,n)&&M(e,n,t[n]);return e};var S=(e,t)=>{for(var n in t)d(e,n,{get:t[n],enumerable:!0})},N=(e,t,n,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of h(t))!p.call(e,i)&&i!==n&&d(e,i,{get:()=>t[i],enumerable:!(l=D(t,i))||l.enumerable});return e};var P=e=>N(d({},"__esModule",{value:!0}),e);var Y={};S(Y,{PIN_CURSOR_BASE64:()=>y,createInboundEventSender:()=>j,isCollaborateOutboundEvent:()=>z,setupCollaborate:()=>V});module.exports=P(Y);var w=e=>{var l,i,s,c,o,r,a,I;if(((l=e.element)==null?void 0:l.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&&!((c=e.classes)!=null&&c.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((o=e.element)==null?void 0:o.tagName),n=(r=e.element)==null?void 0:r.parentElement;if(n){let E=Array.from(n.children).findIndex(C=>C===e.element);return{element:(a=e.element)==null?void 0:a.parentElement,children:[`${t}:nth-child(${E+1})`,...(I=e.children)!=null?I:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},A=(e,t)=>{let n=l=>{var o;let i=w(l),s=[[i.classes,i.id].filter(Boolean).join(""),...(o=i.children)!=null?o:[]].filter(Boolean).join(">"),c=t.querySelectorAll(s);return c.length>1&&c.length<100?n(i):c.length===1?s: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"],g=e=>{window.parent.postMessage(u({source:"inploi-collaborate"},e),"*")},j=e=>({sendInboundEvent:t=>e.postMessage(u({source:"inploi-collaborate"},t))}),v=e=>e.data.source==="inploi-collaborate",z=e=>e.data.source==="inploi-collaborate",y="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcgM0gxOEMyNC4wNzUxIDMgMjkgNy45MjQ4NyAyOSAxNEMyOSAyMC4wNzUxIDI0LjA3NTEgMjUgMTggMjVDMTEuOTI0OSAyNSA3IDIwLjA3NTEgNyAxNFYzWiIgZmlsbD0iIzNFNjNERCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kZF84NV8xMSkiPgo8cGF0aCBkPSJNNiAySDE4QzI0LjYyNzQgMiAzMCA3LjM3MjU4IDMwIDE0QzMwIDIwLjYyNzQgMjQuNjI3NCAyNiAxOCAyNkMxMS4zNzI2IDI2IDYgMjAuNjI3NCA2IDE0VjJaIiBmaWxsPSIjM0U2M0REIiBmaWxsLW9wYWNpdHk9IjAuMDEiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgo8L2c+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggNEg4VjE0QzggMTkuNTIyOCAxMi40NzcyIDI0IDE4IDI0QzIzLjUyMjggMjQgMjggMTkuNTIyOCAyOCAxNEMyOCA4LjQ3NzE1IDIzLjUyMjggNCAxOCA0Wk02IDJWMTRDNiAyMC42Mjc0IDExLjM3MjYgMjYgMTggMjZDMjQuNjI3NCAyNiAzMCAyMC42Mjc0IDMwIDE0QzMwIDcuMzcyNTggMjQuNjI3NCAyIDE4IDJINloiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RkXzg1XzExIiB4PSIwIiB5PSIwIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd184NV8xMSIgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfODVfMTEiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjwvZGVmcz4KPC9zdmc+Cg==",T=()=>{let e="isdk-collaborate-cursor";if(document.getElementById(e))return;let t=document.createElement("style");t.id=e,t.innerHTML=`* { cursor: url(${y}) 6 2, crosshair !important; }`,document.head.appendChild(t)},b=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:e.scrollLeft,y:e.scrollTop,width:t.width,height:t.height}},X=e=>{let t={};for(let n of e){let l=document.querySelector(n);t[n]=l?b(l):null}return t};function B(e,t){let n;return(...l)=>{clearTimeout(n),n=setTimeout(()=>e(...l),t)}}var V=e=>{var i;let t=(i=e==null?void 0:e.signal)!=null?i:new AbortController().signal,n=[];g({type:"READY"});let l=B(()=>{g({type:"SELECTOR_RECTS",selectorRects:X(n)})},50);window.addEventListener("message",s=>{if(v(s)===!1)return;let c=s.data;switch(c.type){case"WATCH_SELECTORS":{n=c.selectors,l();break}case"SETUP_EVENT_HANDLERS":T(),window.addEventListener("resize",()=>{l(),g({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",o=>{o.preventDefault(),o.stopPropagation();let r=document.elementsFromPoint(o.clientX,o.clientY)[0];g({type:"HOVER_ELEMENT",rect:r?b(r):null})},{signal:t}),document.body.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation();let r=document.elementsFromPoint(o.clientX,o.clientY)[0];if(!r)return;let a=A(r,document.body);if(!a)return;let I=r.getBoundingClientRect();g({type:"DROP_PIN",pin:{rect:b(r),selector:a,xPercent:(o.clientX-I.x)/I.width,yPercent:(o.clientY-I.y)/I.height}})},{signal:t}),window.addEventListener("scroll",()=>{l(),g({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),x.map(o=>document.addEventListener(o,R,{signal:t}))}},{signal:t})};0&&(module.exports={PIN_CURSOR_BASE64,createInboundEventSender,isCollaborateOutboundEvent,setupCollaborate});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/collaborate.selector.ts","../src/collaborate.ts"],"sourcesContent":["export * from './collaborate';\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","import { 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 = (source: MessageEventSource) => {\n\treturn {\n\t\tsendInboundEvent: (data: CollaborateInboundEvent) => source.postMessage({ source: 'inploi-collaborate', ...data }),\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: element.scrollLeft,\n\t\ty: element.scrollTop,\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\nexport const setupCollaborate = (params?: { signal?: AbortSignal }) => {\n\tconst signal = params?.signal ?? new AbortController().signal;\n\n\tlet watchedSelectors: string[] = [];\n\tsendOutboundEvent({ type: 'READY' });\n\tconst broadcastSelectors = debounce(() => {\n\t\tsendOutboundEvent({ type: 'SELECTOR_RECTS', selectorRects: getSelectorRects(watchedSelectors) });\n\t}, 50);\n\n\twindow.addEventListener(\n\t\t'message',\n\t\tmessageEvent => {\n\t\t\tif (isCollaborateInboundEvent(messageEvent) === false) return;\n\t\t\tconst collaborateEvent = messageEvent.data;\n\t\t\tswitch (collaborateEvent.type) {\n\t\t\t\tcase 'WATCH_SELECTORS': {\n\t\t\t\t\twatchedSelectors = collaborateEvent.selectors;\n\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'SETUP_EVENT_HANDLERS': {\n\t\t\t\t\tsetCursor();\n\t\t\t\t\twindow.addEventListener(\n\t\t\t\t\t\t'resize',\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\t\tsendOutboundEvent({ type: 'RESIZE', scrollHeight: document.body.scrollHeight });\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t\t'mousemove',\n\t\t\t\t\t\tevent => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tconst hoveredElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\t\ttype: 'HOVER_ELEMENT',\n\t\t\t\t\t\t\t\trect: hoveredElement ? getElementPinRect(hoveredElement) : null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t\t'click',\n\t\t\t\t\t\tevent => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tconst hoveredElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\t\tif (!hoveredElement) return;\n\t\t\t\t\t\t\tconst selector = getElementUniqueSelector(hoveredElement, document.body);\n\t\t\t\t\t\t\tif (!selector) return;\n\t\t\t\t\t\t\tconst rect = hoveredElement.getBoundingClientRect();\n\t\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\t\ttype: 'DROP_PIN',\n\t\t\t\t\t\t\t\tpin: {\n\t\t\t\t\t\t\t\t\trect: getElementPinRect(hoveredElement),\n\t\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\t\txPercent: (event.clientX - rect.x) / rect.width,\n\t\t\t\t\t\t\t\t\tyPercent: (event.clientY - rect.y) / rect.height,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\twindow.addEventListener(\n\t\t\t\t\t\t'scroll',\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\t\tsendOutboundEvent({ type: 'SCROLL', scrollY: window.scrollY, scrollX: window.scrollX });\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\teventsToPrevent.map(type => document.addEventListener(type, preventIt, { signal }));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ signal },\n\t);\n};\n"],"mappings":"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","names":["src_exports","__export","PIN_CURSOR_BASE64","createInboundEventSender","isCollaborateOutboundEvent","setupCollaborate","__toCommonJS","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","source","isCollaborateInboundEvent","event","isCollaborateOutboundEvent","PIN_CURSOR_BASE64","setCursor","id","style","getElementPinRect","element","boundingBox","getSelectorRects","selectors","selectorRects","selector","debounce","func","waitFor","timeout","args","setupCollaborate","params","_a","signal","watchedSelectors","broadcastSelectors","messageEvent","collaborateEvent","hoveredElement","getElementUniqueSelector","rect","type"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var y=Object.defineProperty;var b=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var m=(e,t,n)=>t in e?y(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,d=(e,t)=>{for(var n in t||(t={}))E.call(t,n)&&m(e,n,t[n]);if(b)for(var n of b(t))C.call(t,n)&&m(e,n,t[n]);return e};var D=e=>{var l,i,s,c,o,r,a,I;if(((l=e.element)==null?void 0:l.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&&!((c=e.classes)!=null&&c.length))return e.classes=`.${e.element.className.split(" ").join(".")}`,e;let t=[e.classes,e.id].filter(Boolean).join("")||((o=e.element)==null?void 0:o.tagName),n=(r=e.element)==null?void 0:r.parentElement;if(n){let p=Array.from(n.children).findIndex(A=>A===e.element);return{element:(a=e.element)==null?void 0:a.parentElement,children:[`${t}:nth-child(${p+1})`,...(I=e.children)!=null?I:[]]}}throw new Error("Unable to uniquely identify selector: not unique enough")},M=(e,t)=>{let n=l=>{var o;let i=D(l),s=[[i.classes,i.id].filter(Boolean).join(""),...(o=i.children)!=null?o:[]].filter(Boolean).join(">"),c=t.querySelectorAll(s);return c.length>1&&c.length<100?n(i):c.length===1?s:null};return n({element:e,children:[]})};var h=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"],g=e=>{window.parent.postMessage(d({source:"inploi-collaborate"},e),"*")},z=e=>({sendInboundEvent:t=>e.postMessage(d({source:"inploi-collaborate"},t))}),S=e=>e.data.source==="inploi-collaborate",T=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)},u=e=>{let t=e.getBoundingClientRect();return{_brand:"pin",x:e.scrollLeft,y:e.scrollTop,width:t.width,height:t.height}},w=e=>{let t={};for(let n of e){let l=document.querySelector(n);t[n]=l?u(l):null}return t};function R(e,t){let n;return(...l)=>{clearTimeout(n),n=setTimeout(()=>e(...l),t)}}var X=e=>{var i;let t=(i=e==null?void 0:e.signal)!=null?i:new AbortController().signal,n=[];g({type:"READY"});let l=R(()=>{g({type:"SELECTOR_RECTS",selectorRects:w(n)})},50);window.addEventListener("message",s=>{if(S(s)===!1)return;let c=s.data;switch(c.type){case"WATCH_SELECTORS":{n=c.selectors,l();break}case"SETUP_EVENT_HANDLERS":P(),window.addEventListener("resize",()=>{l(),g({type:"RESIZE",scrollHeight:document.body.scrollHeight})},{signal:t}),document.body.addEventListener("mousemove",o=>{o.preventDefault(),o.stopPropagation();let r=document.elementsFromPoint(o.clientX,o.clientY)[0];g({type:"HOVER_ELEMENT",rect:r?u(r):null})},{signal:t}),document.body.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation();let r=document.elementsFromPoint(o.clientX,o.clientY)[0];if(!r)return;let a=M(r,document.body);if(!a)return;let I=r.getBoundingClientRect();g({type:"DROP_PIN",pin:{rect:u(r),selector:a,xPercent:(o.clientX-I.x)/I.width,yPercent:(o.clientY-I.y)/I.height}})},{signal:t}),window.addEventListener("scroll",()=>{l(),g({type:"SCROLL",scrollY:window.scrollY,scrollX:window.scrollX})},{signal:t}),Z.map(o=>document.addEventListener(o,h,{signal:t}))}},{signal:t})};export{N as PIN_CURSOR_BASE64,z as createInboundEventSender,T as isCollaborateOutboundEvent,X as setupCollaborate};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/collaborate.selector.ts","../src/collaborate.ts"],"sourcesContent":["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","import { 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 = (source: MessageEventSource) => {\n\treturn {\n\t\tsendInboundEvent: (data: CollaborateInboundEvent) => source.postMessage({ source: 'inploi-collaborate', ...data }),\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: element.scrollLeft,\n\t\ty: element.scrollTop,\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\nexport const setupCollaborate = (params?: { signal?: AbortSignal }) => {\n\tconst signal = params?.signal ?? new AbortController().signal;\n\n\tlet watchedSelectors: string[] = [];\n\tsendOutboundEvent({ type: 'READY' });\n\tconst broadcastSelectors = debounce(() => {\n\t\tsendOutboundEvent({ type: 'SELECTOR_RECTS', selectorRects: getSelectorRects(watchedSelectors) });\n\t}, 50);\n\n\twindow.addEventListener(\n\t\t'message',\n\t\tmessageEvent => {\n\t\t\tif (isCollaborateInboundEvent(messageEvent) === false) return;\n\t\t\tconst collaborateEvent = messageEvent.data;\n\t\t\tswitch (collaborateEvent.type) {\n\t\t\t\tcase 'WATCH_SELECTORS': {\n\t\t\t\t\twatchedSelectors = collaborateEvent.selectors;\n\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'SETUP_EVENT_HANDLERS': {\n\t\t\t\t\tsetCursor();\n\t\t\t\t\twindow.addEventListener(\n\t\t\t\t\t\t'resize',\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\t\tsendOutboundEvent({ type: 'RESIZE', scrollHeight: document.body.scrollHeight });\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t\t'mousemove',\n\t\t\t\t\t\tevent => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tconst hoveredElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\t\ttype: 'HOVER_ELEMENT',\n\t\t\t\t\t\t\t\trect: hoveredElement ? getElementPinRect(hoveredElement) : null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\tdocument.body.addEventListener(\n\t\t\t\t\t\t'click',\n\t\t\t\t\t\tevent => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tconst hoveredElement = document.elementsFromPoint(event.clientX, event.clientY)[0];\n\t\t\t\t\t\t\tif (!hoveredElement) return;\n\t\t\t\t\t\t\tconst selector = getElementUniqueSelector(hoveredElement, document.body);\n\t\t\t\t\t\t\tif (!selector) return;\n\t\t\t\t\t\t\tconst rect = hoveredElement.getBoundingClientRect();\n\t\t\t\t\t\t\tsendOutboundEvent({\n\t\t\t\t\t\t\t\ttype: 'DROP_PIN',\n\t\t\t\t\t\t\t\tpin: {\n\t\t\t\t\t\t\t\t\trect: getElementPinRect(hoveredElement),\n\t\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\t\txPercent: (event.clientX - rect.x) / rect.width,\n\t\t\t\t\t\t\t\t\tyPercent: (event.clientY - rect.y) / rect.height,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\twindow.addEventListener(\n\t\t\t\t\t\t'scroll',\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tbroadcastSelectors();\n\t\t\t\t\t\t\tsendOutboundEvent({ type: 'SCROLL', scrollY: window.scrollY, scrollX: window.scrollX });\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t);\n\t\t\t\t\teventsToPrevent.map(type => document.addEventListener(type, preventIt, { signal }));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ signal },\n\t);\n};\n"],"mappings":"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","names":["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","source","isCollaborateInboundEvent","event","isCollaborateOutboundEvent","PIN_CURSOR_BASE64","setCursor","id","style","getElementPinRect","element","boundingBox","getSelectorRects","selectors","selectorRects","selector","debounce","func","waitFor","timeout","args","setupCollaborate","params","_a","signal","watchedSelectors","broadcastSelectors","messageEvent","collaborateEvent","hoveredElement","getElementUniqueSelector","rect","type"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@inploi/plugin-collaborate",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"files": [
|
|
8
|
+
"/dist",
|
|
9
|
+
"/cdn"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"require": "./dist/index.js",
|
|
14
|
+
"import": "./dist/index.mjs",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {},
|
|
19
|
+
"peerDependencies": {},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@happy-dom/global-registrator": "^13.6.2",
|
|
22
|
+
"@types/bun": "^1.0.8",
|
|
23
|
+
"eslint": "^7.32.0",
|
|
24
|
+
"happy-dom": "^12.6.0",
|
|
25
|
+
"tsup": "^7.2.0",
|
|
26
|
+
"tsconfig": "0.1.0",
|
|
27
|
+
"eslint-config-custom": "0.1.0"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build:npm": "tsup --dts --dts-resolve",
|
|
31
|
+
"build:cdn": "tsup --config tsup.cdn.config.ts",
|
|
32
|
+
"build": "concurrently 'pnpm run build:npm' 'pnpm run build:cdn'",
|
|
33
|
+
"dev": "tsup --watch --config tsup.cdn.config.ts",
|
|
34
|
+
"check": "eslint src --fix --max-warnings 0 && tsc",
|
|
35
|
+
"test": "bun test src/"
|
|
36
|
+
}
|
|
37
|
+
}
|