@squeletteapp/widget 0.1.0 → 0.1.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/dist/index.js +7 -2
- package/dist/widget.js +2 -2
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -178,7 +178,12 @@ function createWidget(options) {
|
|
|
178
178
|
}
|
|
179
179
|
};
|
|
180
180
|
// Set up button click handler
|
|
181
|
-
|
|
181
|
+
const handleClick = (e) => {
|
|
182
|
+
e.preventDefault();
|
|
183
|
+
e.stopPropagation();
|
|
184
|
+
toggleIframe();
|
|
185
|
+
};
|
|
186
|
+
button.addEventListener('click', handleClick, true); // Use capture phase
|
|
182
187
|
// Close iframe on click outside
|
|
183
188
|
const handleClickOutside = (event) => {
|
|
184
189
|
const target = event.target;
|
|
@@ -214,7 +219,7 @@ function createWidget(options) {
|
|
|
214
219
|
// Remove event listeners
|
|
215
220
|
window.removeEventListener('scroll', updateIframePosition);
|
|
216
221
|
window.removeEventListener('resize', updateIframePosition);
|
|
217
|
-
button.removeEventListener('click',
|
|
222
|
+
button.removeEventListener('click', handleClick, true);
|
|
218
223
|
document.removeEventListener('click', handleClickOutside);
|
|
219
224
|
iframe.removeEventListener('load', () => {
|
|
220
225
|
if (onLoad) {
|
package/dist/widget.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var SqueletteWidget=(()=>{var v=Object.defineProperty;var
|
|
1
|
+
"use strict";var SqueletteWidget=(()=>{var v=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var M=(r,n)=>{for(var i in n)v(r,i,{get:n[i],enumerable:!0})},P=(r,n,i,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of C(n))!I.call(r,o)&&o!==i&&v(r,o,{get:()=>n[o],enumerable:!(s=W(n,o))||s.enumerable});return r};var U=r=>P(v({},"__esModule",{value:!0}),r);var q={};M(q,{createChangelogWidget:()=>N,createFeedbackWidget:()=>T,createRoadmapWidget:()=>z,createWidget:()=>y});var L="https://squelette.app";function z(r,n,i){let s=new URLSearchParams({board:n});i.theme&&s.set("theme",i.theme);let o=`${L}/widget/${r}/roadmap?${s.toString()}`,{theme:l,...h}=i;return y({...h,url:o})}function N(r,n){let i=new URLSearchParams;n.theme&&i.set("theme",n.theme);let s=`${L}/widget/${r}/changelog${i.toString()?`?${i.toString()}`:""}`,{theme:o,...l}=n;return y({...l,url:s})}function T(r,n,i){let s=new URLSearchParams;n&&s.set("board",n),i.theme&&s.set("theme",i.theme);let o=`${L}/widget/${r}/feedback${s.toString()?`?${s.toString()}`:""}`,{theme:l,...h}=i;return y({...h,url:o})}function y(r){let{url:n,buttonSelector:i,position:s="top",onLoad:o,onOpenChange:l}=r,h=n,e=document.createElement("iframe");e.src=n,e.loading="eager";let k=t=>{let a=new URL(t).pathname,p=a.endsWith("/feedback"),w=a.endsWith("/changelog"),b=a.endsWith("/roadmap"),g="400px",d="540px";switch(!0){case p:d="250px";break;case w:d="500px";break;case b:d="400px";break;default:d="540px";break}e.style.width=g,e.style.height=d};k(n);let u=document.querySelector(i);if(!u)return console.error(`Button element not found with selector: ${i}`),{destroy:()=>{}};let S=(t,a,p,w)=>{let b={width:window.innerWidth,height:window.innerHeight},g=12,d,c;switch(w){case"right":d=t.right+g,c=t.top;break;case"left":d=t.left-a-g,c=t.top;break;case"top":d=t.left-(a-t.width)/2,c=t.top-p-g;break;case"bottom":d=t.left-(a-t.width)/2,c=t.bottom+g;break;default:d=t.left-(a-t.width)/2,c=t.top-p-g}return d=Math.max(10,Math.min(d,b.width-a-10)),c=Math.max(10,Math.min(c,b.height-p-10)),{left:d,top:c}},f=()=>{if(!u)return;let t=u.getBoundingClientRect(),a=Number.parseInt(e.style.width||"400px",10),p=Number.parseInt(e.style.height||"540px",10),w=S(t,a,p,s);e.style.left=`${w.left}px`,e.style.top=`${w.top}px`,e.style.bottom="auto",e.style.right="auto"};e.style.cssText=`
|
|
2
2
|
position: fixed;
|
|
3
3
|
width: ${e.style.width||"400px"};
|
|
4
4
|
height: ${e.style.height||"540px"};
|
|
@@ -12,4 +12,4 @@
|
|
|
12
12
|
pointer-events: none;
|
|
13
13
|
border: none;
|
|
14
14
|
box-sizing: border-box;
|
|
15
|
-
`,window.addEventListener("scroll",
|
|
15
|
+
`,window.addEventListener("scroll",f),window.addEventListener("resize",f),f(),window.addEventListener("message",t=>{t.source===e.contentWindow&&(t.data?.type==="navigation"?(k(t.data.url),f()):t.data?.type==="close-iframe"&&m&&(e.src=h,x()))});let m=!1,x=()=>{m=!m,m?(e.style.pointerEvents="auto",e.style.opacity="1",e.style.transform="translateY(0)"):(e.style.pointerEvents="none",e.style.opacity="0",e.style.transform="translateY(20px)",e.src=h),l&&l(m)},E=t=>{t.preventDefault(),t.stopPropagation(),x()};u.addEventListener("click",E,!0);let $=t=>{let a=t.target;m&&!e.contains(a)&&!u.contains(a)&&x()};document.addEventListener("click",$),e.addEventListener("load",()=>{o&&o()});let O=document.querySelector(`iframe[data-widget-button="${i}"]`);return O&&O.remove(),e.setAttribute("data-widget-button",i),document.body.appendChild(e),{destroy:()=>{m&&l&&l(!1),window.removeEventListener("scroll",f),window.removeEventListener("resize",f),u.removeEventListener("click",E,!0),document.removeEventListener("click",$),e.removeEventListener("load",()=>{o&&o()}),e.parentNode&&e.parentNode.removeChild(e)}}}return U(q);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squeletteapp/widget",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build": "tsc && npm run build:browser",
|
|
17
17
|
"build:browser": "esbuild src/index.ts --bundle --format=iife --global-name=SqueletteWidget --outfile=dist/widget.js --minify --define:process.env.NEXT_PUBLIC_DASHBOARD_URL='\"https://squelette.app\"'",
|
|
18
|
-
"dev": "
|
|
18
|
+
"dev": "esbuild src/index.ts --bundle --format=iife --global-name=SqueletteWidget --outfile=dist/widget.js --minify --define:process.env.NEXT_PUBLIC_DASHBOARD_URL='\"https://squelette.app\"' --watch",
|
|
19
19
|
"prepublishOnly": "npm run build",
|
|
20
|
+
"publish": "npm publish --access public",
|
|
20
21
|
"publish:widget": "npm publish --access public"
|
|
21
22
|
},
|
|
22
23
|
"keywords": [
|