gotcha-feedback 1.1.4 → 1.1.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/dist/index.d.mts +68 -7
- package/dist/index.d.ts +68 -7
- package/dist/index.js +20 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -5
- package/dist/index.mjs.map +1 -1
- package/dist/screenshot-CTLYS27H.mjs +2 -0
- package/dist/screenshot-CTLYS27H.mjs.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
async function s(){try{let a=(await new Function('return import("html2canvas")')()).default,t=await a(document.body,{logging:!1,useCORS:!0,scale:1,width:window.innerWidth,height:window.innerHeight,windowWidth:window.innerWidth,windowHeight:window.innerHeight});return r(t)}catch{}try{if(!navigator.mediaDevices?.getDisplayMedia||typeof ImageCapture>"u")return null;let t=(await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"}})).getVideoTracks()[0],e=await new ImageCapture(t).grabFrame();t.stop();let n=document.createElement("canvas");n.width=e.width,n.height=e.height;let i=n.getContext("2d");return i?(i.drawImage(e,0,0),r(n)):null}catch{return null}}function r(a){let t=a.toDataURL("image/jpeg",.7);if(t.length>2097152&&(t=a.toDataURL("image/jpeg",.4)),t.length>2097152){let e=document.createElement("canvas");e.width=a.width*.5,e.height=a.height*.5;let n=e.getContext("2d");n&&(n.drawImage(a,0,0,e.width,e.height),t=e.toDataURL("image/jpeg",.5));}return t}export{s as captureScreenshot};//# sourceMappingURL=screenshot-CTLYS27H.mjs.map
|
|
2
|
+
//# sourceMappingURL=screenshot-CTLYS27H.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/screenshot.ts"],"names":["captureScreenshot","html2canvas","canvas","compressCanvas","track","bitmap","ctx","dataUrl","smaller"],"mappings":"AAOA,eAAsBA,CAAAA,EAA4C,CAEhE,GAAI,CAEF,IAAMC,CAAAA,CAAAA,CAAe,MAAO,IAAI,QAAA,CAAS,8BAA8B,GAAG,EAAG,OAAA,CACvEC,EAAS,MAAMD,CAAAA,CAAY,SAAS,IAAA,CAAM,CAC9C,QAAS,CAAA,CAAA,CACT,OAAA,CAAS,GACT,KAAA,CAAO,CAAA,CACP,MAAO,MAAA,CAAO,UAAA,CACd,OAAQ,MAAA,CAAO,WAAA,CACf,YAAa,MAAA,CAAO,UAAA,CACpB,aAAc,MAAA,CAAO,WACvB,CAAC,CAAA,CACD,OAAOE,EAAeD,CAAM,CAC9B,MAAQ,CAER,CAGA,GAAI,CACF,GAAI,CAAC,SAAA,CAAU,YAAA,EAAc,iBAAmB,OAAO,YAAA,CAAiB,IAAa,OAAO,IAAA,CAM5F,IAAME,CAAAA,CAAAA,CAJS,MAAM,UAAU,YAAA,CAAa,eAAA,CAAgB,CAC1D,KAAA,CAAO,CAAE,eAAgB,SAAU,CACrC,CAAC,CAAA,EAEoB,cAAA,GAAiB,CAAC,CAAA,CAEjCC,EAAS,MADM,IAAI,aAAaD,CAAK,CAAA,CACT,WAAU,CAC5CA,CAAAA,CAAM,MAAK,CAEX,IAAMF,EAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC9CA,CAAAA,CAAO,KAAA,CAAQG,EAAO,KAAA,CACtBH,CAAAA,CAAO,OAASG,CAAAA,CAAO,MAAA,CACvB,IAAMC,CAAAA,CAAMJ,CAAAA,CAAO,WAAW,IAAI,CAAA,CAClC,OAAKI,CAAAA,EACLA,CAAAA,CAAI,UAAUD,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,CAEnBF,CAAAA,CAAeD,CAAM,CAAA,EAHX,IAInB,MAAQ,CACN,OAAO,IACT,CACF,CAEA,SAASC,CAAAA,CAAeD,CAAAA,CAAmC,CAEzD,IAAIK,CAAAA,CAAUL,EAAO,SAAA,CAAU,YAAA,CAAc,EAAG,CAAA,CAQhD,GALIK,EAAQ,MAAA,CAAS,OAAA,GACnBA,CAAAA,CAAUL,CAAAA,CAAO,SAAA,CAAU,YAAA,CAAc,EAAG,CAAA,CAAA,CAI1CK,CAAAA,CAAQ,OAAS,OAAA,CAAgB,CAEnC,IAAMC,CAAAA,CAAU,QAAA,CAAS,cAAc,QAAQ,CAAA,CAC/CA,EAAQ,KAAA,CAAQN,CAAAA,CAAO,MAAQ,EAAA,CAC/BM,CAAAA,CAAQ,OAASN,CAAAA,CAAO,MAAA,CAAS,GACjC,IAAMI,CAAAA,CAAME,EAAQ,UAAA,CAAW,IAAI,EAC/BF,CAAAA,GACFA,CAAAA,CAAI,UAAUJ,CAAAA,CAAQ,CAAA,CAAG,EAAGM,CAAAA,CAAQ,KAAA,CAAOA,EAAQ,MAAM,CAAA,CACzDD,EAAUC,CAAAA,CAAQ,SAAA,CAAU,aAAc,EAAG,CAAA,EAEjD,CAEA,OAAOD,CACT","file":"screenshot-CTLYS27H.mjs","sourcesContent":["const MAX_SIZE_BYTES = 2 * 1024 * 1024; // 2MB\n\n/**\n * Capture a screenshot of the current page.\n * Tries html2canvas first (if installed), falls back to native Screen Capture API.\n * Returns a base64 data URL or null if both methods fail.\n */\nexport async function captureScreenshot(): Promise<string | null> {\n // Try html2canvas first (silent, no user prompt)\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const html2canvas = (await (new Function('return import(\"html2canvas\")'))()).default;\n const canvas = await html2canvas(document.body, {\n logging: false,\n useCORS: true,\n scale: 1,\n width: window.innerWidth,\n height: window.innerHeight,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n return compressCanvas(canvas);\n } catch {\n // html2canvas not installed or failed — try native API\n }\n\n // Fallback: native Screen Capture API\n try {\n if (!navigator.mediaDevices?.getDisplayMedia || typeof ImageCapture === 'undefined') return null;\n\n const stream = await navigator.mediaDevices.getDisplayMedia({\n video: { displaySurface: 'browser' } as MediaTrackConstraints,\n });\n\n const track = stream.getVideoTracks()[0];\n const imageCapture = new ImageCapture(track);\n const bitmap = await imageCapture.grabFrame();\n track.stop();\n\n const canvas = document.createElement('canvas');\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n ctx.drawImage(bitmap, 0, 0);\n\n return compressCanvas(canvas);\n } catch {\n return null;\n }\n}\n\nfunction compressCanvas(canvas: HTMLCanvasElement): string {\n // Start with JPEG 0.7 quality\n let dataUrl = canvas.toDataURL('image/jpeg', 0.7);\n\n // If still too large, reduce quality further\n if (dataUrl.length > MAX_SIZE_BYTES) {\n dataUrl = canvas.toDataURL('image/jpeg', 0.4);\n }\n\n // If still too large, scale down\n if (dataUrl.length > MAX_SIZE_BYTES) {\n const scale = 0.5;\n const smaller = document.createElement('canvas');\n smaller.width = canvas.width * scale;\n smaller.height = canvas.height * scale;\n const ctx = smaller.getContext('2d');\n if (ctx) {\n ctx.drawImage(canvas, 0, 0, smaller.width, smaller.height);\n dataUrl = smaller.toDataURL('image/jpeg', 0.5);\n }\n }\n\n return dataUrl;\n}\n"]}
|