@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 CHANGED
@@ -178,7 +178,12 @@ function createWidget(options) {
178
178
  }
179
179
  };
180
180
  // Set up button click handler
181
- button.addEventListener('click', toggleIframe);
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', toggleIframe);
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 S=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var I=(r,n)=>{for(var i in n)v(r,i,{get:n[i],enumerable:!0})},M=(r,n,i,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of W(n))!C.call(r,o)&&o!==i&&v(r,o,{get:()=>n[o],enumerable:!(s=S(n,o))||s.enumerable});return r};var P=r=>M(v({},"__esModule",{value:!0}),r);var T={};I(T,{createChangelogWidget:()=>z,createFeedbackWidget:()=>N,createRoadmapWidget:()=>U,createWidget:()=>x});var L="https://squelette.app";function U(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:c,...h}=i;return x({...h,url:o})}function z(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,...c}=n;return x({...c,url:s})}function N(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:c,...h}=i;return x({...h,url:o})}function x(r){let{url:n,buttonSelector:i,position:s="top",onLoad:o,onOpenChange:c}=r,h=n,e=document.createElement("iframe");e.src=n,e.loading="eager";let k=t=>{let a=new URL(t).pathname,g=a.endsWith("/feedback"),w=a.endsWith("/changelog"),y=a.endsWith("/roadmap"),p="400px",d="540px";switch(!0){case g:d="250px";break;case w:d="500px";break;case y:d="400px";break;default:d="540px";break}e.style.width=p,e.style.height=d};k(n);let f=document.querySelector(i);if(!f)return console.error(`Button element not found with selector: ${i}`),{destroy:()=>{}};let O=(t,a,g,w)=>{let y={width:window.innerWidth,height:window.innerHeight},p=12,d,l;switch(w){case"right":d=t.right+p,l=t.top;break;case"left":d=t.left-a-p,l=t.top;break;case"top":d=t.left-(a-t.width)/2,l=t.top-g-p;break;case"bottom":d=t.left-(a-t.width)/2,l=t.bottom+p;break;default:d=t.left-(a-t.width)/2,l=t.top-g-p}return d=Math.max(10,Math.min(d,y.width-a-10)),l=Math.max(10,Math.min(l,y.height-g-10)),{left:d,top:l}},u=()=>{if(!f)return;let t=f.getBoundingClientRect(),a=Number.parseInt(e.style.width||"400px",10),g=Number.parseInt(e.style.height||"540px",10),w=O(t,a,g,s);e.style.left=`${w.left}px`,e.style.top=`${w.top}px`,e.style.bottom="auto",e.style.right="auto"};e.style.cssText=`
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",u),window.addEventListener("resize",u),u(),window.addEventListener("message",t=>{t.source===e.contentWindow&&(t.data?.type==="navigation"?(k(t.data.url),u()):t.data?.type==="close-iframe"&&m&&(e.src=h,b()))});let m=!1,b=()=>{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),c&&c(m)};f.addEventListener("click",b);let E=t=>{let a=t.target;m&&!e.contains(a)&&!f.contains(a)&&b()};document.addEventListener("click",E),e.addEventListener("load",()=>{o&&o()});let $=document.querySelector(`iframe[data-widget-button="${i}"]`);return $&&$.remove(),e.setAttribute("data-widget-button",i),document.body.appendChild(e),{destroy:()=>{m&&c&&c(!1),window.removeEventListener("scroll",u),window.removeEventListener("resize",u),f.removeEventListener("click",b),document.removeEventListener("click",E),e.removeEventListener("load",()=>{o&&o()}),e.parentNode&&e.parentNode.removeChild(e)}}}return P(T);})();
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.0",
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": "tsc --watch",
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": [