sliccy 5.27.1 → 5.27.2

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.
Files changed (80) hide show
  1. package/dist/ui/assets/{account-store-BYtS_MJG.js → account-store-BFup3fQv.js} +2 -2
  2. package/dist/ui/assets/{account-store-UcO7qfdF.js → account-store-CyTIxjml.js} +1 -1
  3. package/dist/ui/assets/{adobe-n4YtxkW-.js → adobe-C3ICTjkQ.js} +1 -1
  4. package/dist/ui/assets/{adobe-fHh_r5ek.js → adobe-Cwn9LSa3.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-1V78_tmU.js → adobe-oauth-state-CJxatA-w.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-CcPpGXUQ.js → agent-message-to-chat-Cnwu7Uug.js} +1 -1
  7. package/dist/ui/assets/{apps-DLUcfmty.js → apps-_Ru-zeOq.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-B6d_3N1t.js → azure-openai-C5BnoYfB.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-BTCz80Nk.js → azure-openai-GOAwvC0d.js} +1 -1
  10. package/dist/ui/assets/{cerebras-D79VbZTh.js → cerebras-DnmvEnzf.js} +1 -1
  11. package/dist/ui/assets/{cerebras-Db1ZGIBL.js → cerebras-kkt6JWkZ.js} +1 -1
  12. package/dist/ui/assets/{connect-surface-BC2h7KGD.js → connect-surface-xExKp6k4.js} +1 -1
  13. package/dist/ui/assets/dip-vOI0dNhU.js +1 -0
  14. package/dist/ui/assets/{dist-BLXRMmLi.js → dist-rO_zI7c5.js} +1 -1
  15. package/dist/ui/assets/{dist-CbZGMa0z.js → dist-wcq5kRyy.js} +1 -1
  16. package/dist/ui/assets/{ensure-speech-assets-221hqA0v.js → ensure-speech-assets-DVNIpxHE.js} +1 -1
  17. package/dist/ui/assets/esp8266-J41qncWu.js +1 -0
  18. package/dist/ui/assets/{esptool-operations-D9FK25dN.js → esptool-operations-BMcyf6lU.js} +2 -2
  19. package/dist/ui/assets/{fs-kEkBPguN.js → fs-Djs11fgL.js} +1 -1
  20. package/dist/ui/assets/{fs-pcubAdbg.js → fs-IUJNLCle.js} +2 -2
  21. package/dist/ui/assets/{github-APF01zSC.js → github-B2Q7d9d9.js} +1 -1
  22. package/dist/ui/assets/{github-CzMUNwD2.js → github-V9F2Kwc3.js} +2 -2
  23. package/dist/ui/assets/{github-copilot-DSpVbWJK.js → github-copilot-DrbeG1qM.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-CRqJKdlV.js → github-copilot-_wD9vWLP.js} +1 -1
  25. package/dist/ui/assets/{hear-DfCn4f-T.js → hear-B6wdzPMD.js} +1 -1
  26. package/dist/ui/assets/{kernel-worker-t64MUE9M.js → kernel-worker-D6FiY4In.js} +18 -18
  27. package/dist/ui/assets/{kokoro-engine-DcBeTbNQ.js → kokoro-engine-CdpBgmxP.js} +1 -1
  28. package/dist/ui/assets/{lick-ws-bridge-wcIP1fCX.js → lick-ws-bridge-Cstvd5df.js} +1 -1
  29. package/dist/ui/assets/{lick-ws-bridge-Cfb9Jd6Z.js → lick-ws-bridge-DUmVUuCv.js} +1 -1
  30. package/dist/ui/assets/{local-llm-kRU-0KTk.js → local-llm-COSrJK26.js} +1 -1
  31. package/dist/ui/assets/{main-lcRuHUVm.js → main-C--nD5g7.js} +4 -4
  32. package/dist/ui/assets/{mount-yBLV9qpb.js → mount-CKi0fTDP.js} +2 -2
  33. package/dist/ui/assets/{mount-CbT9t0SK.js → mount-CihzCUsg.js} +1 -1
  34. package/dist/ui/assets/{new-session-D2IjdWrR.js → new-session-AM3XtlDe.js} +2 -2
  35. package/dist/ui/assets/{oauth-bootstrap-vVyyX-79.js → oauth-bootstrap-Bh2RA718.js} +2 -2
  36. package/dist/ui/assets/{openai-codex-DHKUKnWs.js → openai-codex-DetPrslk.js} +1 -1
  37. package/dist/ui/assets/{openai-codex-deus7kuD.js → openai-codex-IbPQB6G0.js} +1 -1
  38. package/dist/ui/assets/{page-follower-tray-Cef2ySsq.js → page-follower-tray-C6-y2wCt.js} +1 -1
  39. package/dist/ui/assets/{panel-rpc-handlers-D6y4zlvT.js → panel-rpc-handlers-BR7koM3e.js} +2 -2
  40. package/dist/ui/assets/{provider-Cv8J_qMJ.js → provider-C2DK-tou.js} +2 -2
  41. package/dist/ui/assets/{provider-DCydPYzn.js → provider-Kdt5mnJz.js} +1 -1
  42. package/dist/ui/assets/provider-store-access-BILn3hmx.js +1 -0
  43. package/dist/ui/assets/provider-store-access-CbFUIJuP.js +1 -0
  44. package/dist/ui/assets/{providers-03UqTQOI.js → providers-D-lbA45B.js} +2 -2
  45. package/dist/ui/assets/{providers-CgaiwwNp.js → providers-uxcBDh6N.js} +1 -1
  46. package/dist/ui/assets/{quick-llm-D6tM1_V9.js → quick-llm-4arXh_DA.js} +1 -1
  47. package/dist/ui/assets/session-freezer-DpwXCapf.js +1 -0
  48. package/dist/ui/assets/{speak-BFnsda0B.js → speak-BdzRzg-l.js} +1 -1
  49. package/dist/ui/assets/{sprinkle-manager-BUiDPhHv.js → sprinkle-manager-CRspU-wp.js} +1 -1
  50. package/dist/ui/assets/sprinkle-renderer-Ck9jaWXg.js +192 -0
  51. package/dist/ui/assets/{store-K-xvBi8w.js → store-AZEbHS5U.js} +1 -1
  52. package/dist/ui/assets/{sudo-BumyrB7W.js → sudo-CTuXr4DQ.js} +1 -1
  53. package/dist/ui/assets/{transformers-env-DVdKu5st.js → transformers-env-DLkBUkpw.js} +1 -1
  54. package/dist/ui/assets/{tray-leader-BJj1yP2r.js → tray-leader-DM9rswbl.js} +1 -1
  55. package/dist/ui/assets/{tray-leave-runtime-BcQSXe-W.js → tray-leave-runtime-BtIR6gOV.js} +1 -1
  56. package/dist/ui/assets/{upgrade-detection-M985riEk.js → upgrade-detection-DxQBYy82.js} +1 -1
  57. package/dist/ui/assets/{voice-reply-CIAcTu5o.js → voice-reply-fuBAYbo5.js} +1 -1
  58. package/dist/ui/assets/{wc-attach-BC5WlTU0.js → wc-attach-CzeWLPFm.js} +2 -2
  59. package/dist/ui/assets/{wc-extension-D39k7fk8.js → wc-extension-CQkPmWB-.js} +2 -2
  60. package/dist/ui/assets/{wc-follower-CmV-WqsR.js → wc-follower-6OLDQClB.js} +3 -3
  61. package/dist/ui/assets/{wc-live-BqY1FhFp.js → wc-live-DBfgEvvH.js} +5 -5
  62. package/dist/ui/assets/{wc-nav-WmgHBpu1.js → wc-nav-DpdrDmzV.js} +2 -2
  63. package/dist/ui/assets/{wc-onboarding-CZlfk8jg.js → wc-onboarding-Dl8IrgMO.js} +2 -2
  64. package/dist/ui/assets/{wc-placeholder-BHPJ-0Nm.js → wc-placeholder-9KOVYHkL.js} +3 -3
  65. package/dist/ui/assets/{wc-settings-ClF67RP6.js → wc-settings-DK6xQJ9c.js} +2 -2
  66. package/dist/ui/assets/{wc-shell-DmihvKaj.js → wc-shell-BEzti5I0.js} +3 -3
  67. package/dist/ui/assets/{wc-sprinkles-DkhHXeWh.js → wc-sprinkles-BwQjnMOV.js} +2 -2
  68. package/dist/ui/assets/{wc-tray-DfUsCYsC.js → wc-tray-Bfd9GvZL.js} +2 -2
  69. package/dist/ui/assets/{whisper-engine-DrT9kVGM.js → whisper-engine-Dbg5R3v1.js} +1 -1
  70. package/dist/ui/assets/{xai-grok-BiHP46gq.js → xai-grok-BSlNsl2K.js} +1 -1
  71. package/dist/ui/assets/{xai-grok-DhFS8EgP.js → xai-grok-COz57XiQ.js} +1 -1
  72. package/dist/ui/index.html +3 -3
  73. package/dist/ui/packages/webapp/index.html +3 -3
  74. package/package.json +1 -1
  75. package/dist/ui/assets/dip-CzCatNyu.js +0 -1
  76. package/dist/ui/assets/esp8266-CbV1uXa4.js +0 -1
  77. package/dist/ui/assets/provider-store-access-CBrTIXMl.js +0 -1
  78. package/dist/ui/assets/provider-store-access-DDneicDp.js +0 -1
  79. package/dist/ui/assets/session-freezer-BJKV5uQH.js +0 -1
  80. package/dist/ui/assets/sprinkle-renderer-BMzJnQXh.js +0 -192
@@ -1,192 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/slicc-editor-DKckizoI.js","assets/preload-helper-CZgWQFsJ.js","assets/dist-BHXb30bf.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-CZgWQFsJ.js";import{a as t,n,r}from"./theme-Bgsl5v2i.js";var i=typeof chrome<`u`&&!!chrome?.runtime?.id,a=/<script\b([^>]*)\bsrc\s*=\s*["'](https?:\/\/[^"']+)["']([^>]*)><\/script>/gi;async function o(e){let t=[],n;for(;(n=a.exec(e))!==null;)t.push({full:n[0],url:n[2],index:n.index});if(a.lastIndex=0,t.length===0)return e;let r=await Promise.all(t.map(async e=>{try{let t=await fetch(e.url);if(!t.ok)throw Error(`HTTP ${t.status}`);return{...e,text:await t.text()}}catch(t){let n=t instanceof Error?t.message:String(t);return{...e,text:`console.error('[sprinkle] Failed to load ${e.url}: ${n}')`}}})),i=e;for(let e=r.length-1;e>=0;e--){let{full:t,text:n}=r[e],a=n.replace(/<\/script/gi,`<\\/script`);i=i.replace(t,()=>`<script>${a}<\/script>`)}return i}function s(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}var c=class a{container;bridge;scripts=[];iframe=null;static cachedLucideScript=null;static lucideScriptPromise=null;messageHandler=null;constructor(e,t){this.container=e,this.bridge=t}async render(e,t){this.dispose(),i?await this.renderInSandbox(e,t,s(e)):s(e)?await this.renderFullDoc(e,t):this.renderInline(e,t)}async renderInSandbox(e,t,i=!1){let a=document.createElement(`iframe`);a.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),a.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`,this.iframe=a,console.log(`[sprinkle-renderer] creating sandbox iframe`,a.src),await new Promise((e,t)=>{let n=setTimeout(()=>{console.error(`[sprinkle-renderer] iframe load timed out after 5s`),t(Error(`sprinkle sandbox iframe load timed out`))},5e3);a.addEventListener(`load`,()=>{clearTimeout(n),console.log(`[sprinkle-renderer] iframe loaded, contentWindow:`,!!a.contentWindow),r(a.contentWindow),e()},{once:!0}),a.addEventListener(`error`,e=>{clearTimeout(n),console.error(`[sprinkle-renderer] iframe error:`,e),t(Error(`sprinkle sandbox iframe failed to load`))},{once:!0}),this.container.appendChild(a)}),this.messageHandler=e=>{if(e.source!==a.contentWindow)return;let n=e.data;if(n?.type){if(n.type===`sprinkle-lick`)this.bridge.lick({action:n.action,data:n.data});else if(n.type===`sprinkle-set-state`)this.bridge.setState(n.data);else if(n.type===`sprinkle-close`)this.bridge.close();else if(n.type===`sprinkle-minimize`)this.bridge.minimize();else if(n.type===`sprinkle-stop-cone`)this.bridge.stopCone();else if(n.type===`sprinkle-storage-set`)try{localStorage.setItem(`slicc-sprinkle-ls:${t}:${n.key}`,n.value)}catch(e){console.warn(`[sprinkle-renderer] localStorage setItem failed:`,n.key,e)}else if(n.type===`sprinkle-storage-remove`)try{localStorage.removeItem(`slicc-sprinkle-ls:${t}:${n.key}`)}catch(e){console.warn(`[sprinkle-renderer] localStorage removeItem failed:`,n.key,e)}else if(n.type===`sprinkle-storage-clear`){let e=`slicc-sprinkle-ls:${t}:`;for(let t=localStorage.length-1;t>=0;t--){let n=localStorage.key(t);n?.startsWith(e)&&localStorage.removeItem(n)}}else if(n.type===`sprinkle-attach-image`)this.bridge.attachImage(n.base64,n.name,n.mimeType);else if(n.type===`sprinkle-open`)this.bridge.open(n.path,n.projectRoot?{projectRoot:n.projectRoot}:void 0);else if(n.type===`sprinkle-readfile`)this.bridge.readFile(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:n.id,content:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-writefile`)this.bridge.writeFile(n.path,n.content).then(()=>a.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:n.id},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-readdir`)this.bridge.readDir(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:n.id,entries:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-exists`)this.bridge.exists(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:n.id,exists:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-stat`)this.bridge.stat(n.path).then(e=>a.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:n.id,stat:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-mkdir`)this.bridge.mkdir(n.path).then(()=>a.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:n.id},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-rm`)this.bridge.rm(n.path).then(()=>a.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:n.id},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-capture-screen`)this.bridge.captureScreen().then(e=>a.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:n.id,base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-exec`)this.bridge.exec(n.cmd).then(e=>a.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-agent`)this.bridge.agent(n.prompt,n.opts).then(e=>a.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-jsh`)this.bridge._jsh(n.op,n.args).then(e=>a.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-device-op`)this.bridge._device(n.channel,n.op,n.args??[]).then(e=>a.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:n.id,result:e},`*`),e=>a.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:n.id,error:e instanceof Error?e.message:String(e)},`*`));else if(n.type===`sprinkle-fetch-script`){let e=n.url,t=n.id;fetch(e).then(e=>e.ok?e.text():Promise.reject(Error(`HTTP ${e.status}`))).then(n=>{a.contentWindow?.postMessage({type:`sprinkle-fetch-script-response`,id:t,url:e,text:n},`*`)}).catch(n=>{a.contentWindow?.postMessage({type:`sprinkle-fetch-script-response`,id:t,url:e,error:n instanceof Error?n.message:String(n)},`*`)})}}},window.addEventListener(`message`,this.messageHandler);let s=this.collectThemeCSS(),c={},l=`slicc-sprinkle-ls:${t}:`;for(let e=0;e<localStorage.length;e++){let t=localStorage.key(e);t?.startsWith(l)&&(c[t.slice(l.length)]=localStorage.getItem(t)??``)}let u=this.bridge.getState(),d=``,f=``;if(i){let t=[];e.includes(`<slicc-editor`)&&t.push(fetch(chrome.runtime.getURL(`slicc-editor.js`)).then(e=>e.ok?e.text():``).then(e=>{d=e}).catch(()=>{})),e.includes(`<slicc-diff`)&&t.push(fetch(chrome.runtime.getURL(`slicc-diff.js`)).then(e=>e.ok?e.text():``).then(e=>{f=e}).catch(()=>{})),await Promise.all(t)}let p=await this.getLucideScript(),m=i?await o(e):e;a.contentWindow.postMessage({type:`sprinkle-render`,content:m,name:t,themeCSS:s,savedState:u,savedStorage:c,fullDoc:i,editorScript:d,diffScript:f,lucideScript:p,isLight:n()},`*`)}pushUpdate(e){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-update`,data:e},`*`)}pushDeviceEvent(e,t){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-device-event`,channel:e,payload:t},`*`)}collectThemeCSS(){return u()}generateBridgeScript(){return`(function() {
3
- var _updateListeners = new Set();
4
- var _hidInputReportListeners = new Set();
5
- var _sprinkleName = '';
6
- var _state = null;
7
- var _cbId = 0;
8
- var _callbacks = {};
9
-
10
- window.addEventListener('message', function(event) {
11
- var msg = event.data;
12
- if (!msg || !msg.type) return;
13
- if (msg.type === 'sprinkle-init') {
14
- _sprinkleName = msg.name || '';
15
- _state = msg.savedState || null;
16
- if (window.slicc) window.slicc.name = _sprinkleName;
17
- } else if (msg.type === 'sprinkle-update') {
18
- _updateListeners.forEach(function(cb) { try { cb(msg.data); } catch(e) { console.error(e); } });
19
- } else if (msg.type === 'sprinkle-device-event') {
20
- if (msg.channel === 'hid:inputreport') {
21
- _hidInputReportListeners.forEach(function(cb) {
22
- try { cb(msg.payload); } catch(e) { console.error(e); }
23
- });
24
- }
25
- } else if (msg.type === 'slicc-theme') {
26
- document.documentElement.classList.toggle('theme-light', !!msg.isLight);
27
- } else if (msg.id && _callbacks[msg.id]) {
28
- var cb = _callbacks[msg.id];
29
- delete _callbacks[msg.id];
30
- cb(msg);
31
- }
32
- });
33
-
34
- function _vfsCall(type, params, extractResult) {
35
- return new Promise(function(resolve, reject) {
36
- var id = ++_cbId;
37
- _callbacks[id] = function(msg) {
38
- if (msg.error) reject(new Error(msg.error));
39
- else resolve(extractResult ? extractResult(msg) : undefined);
40
- };
41
- var m = { type: type, id: id };
42
- if (params) { for (var k in params) m[k] = params[k]; }
43
- parent.postMessage(m, '*');
44
- });
45
- }
46
-
47
- function _jshCall(op, args) {
48
- return _vfsCall('sprinkle-jsh', { op: op, args: args }, function(m) { return m.result; });
49
- }
50
- function _deviceCall(channel, op, args) {
51
- return _vfsCall('sprinkle-device-op', { channel: channel, op: op, args: args || [] },
52
- function(m) { return m.result; });
53
- }
54
- function _b64ToU8(b64) {
55
- var bin = atob(b64); var u8 = new Uint8Array(bin.length);
56
- for (var i = 0; i < bin.length; i++) u8[i] = bin.charCodeAt(i);
57
- return u8;
58
- }
59
- function _u8ToB64(bytes) {
60
- var bin = ''; for (var i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);
61
- return btoa(bin);
62
- }
63
-
64
- var api = {
65
- lick: function(event) {
66
- var action, data;
67
- if (typeof event === 'string') { action = event; } else { action = event.action; data = event.data; }
68
- parent.postMessage({ type: 'sprinkle-lick', action: action, data: data }, '*');
69
- },
70
- on: function(event, callback) { if (event === 'update') _updateListeners.add(callback); },
71
- off: function(event, callback) { if (event === 'update') _updateListeners.delete(callback); },
72
- readFile: function(path) {
73
- return _vfsCall('sprinkle-readfile', { path: path }, function(m) { return m.content; });
74
- },
75
- writeFile: function(path, content) {
76
- return _vfsCall('sprinkle-writefile', { path: path, content: content });
77
- },
78
- readDir: function(path) {
79
- return _vfsCall('sprinkle-readdir', { path: path }, function(m) { return m.entries; });
80
- },
81
- exists: function(path) {
82
- return _vfsCall('sprinkle-exists', { path: path }, function(m) { return m.exists; });
83
- },
84
- stat: function(path) {
85
- return _vfsCall('sprinkle-stat', { path: path }, function(m) { return m.stat; });
86
- },
87
- mkdir: function(path) {
88
- return _vfsCall('sprinkle-mkdir', { path: path });
89
- },
90
- rm: function(path) {
91
- return _vfsCall('sprinkle-rm', { path: path });
92
- },
93
- screenshot: function(selector) {
94
- return new Promise(function(resolve, reject) {
95
- try {
96
- var target = selector ? document.querySelector(selector) : document.body;
97
- if (!target) { reject(new Error('Element not found: ' + selector)); return; }
98
- var rect = target.getBoundingClientRect();
99
- var w = Math.ceil(rect.width);
100
- var h = Math.ceil(rect.height);
101
- if (w === 0 || h === 0) { reject(new Error('Element has zero dimensions')); return; }
102
- var canvas = document.createElement('canvas');
103
- var dpr = window.devicePixelRatio || 1;
104
- canvas.width = w * dpr;
105
- canvas.height = h * dpr;
106
- var ctx = canvas.getContext('2d');
107
- ctx.scale(dpr, dpr);
108
- var clone = target.cloneNode(true);
109
- var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + w + '" height="' + h + '">' +
110
- '<foreignObject width="100%" height="100%">' +
111
- new XMLSerializer().serializeToString(clone) +
112
- '</foreignObject></svg>';
113
- var img = new Image();
114
- img.onload = function() { ctx.drawImage(img, 0, 0); resolve(canvas.toDataURL('image/png')); };
115
- img.onerror = function() { reject(new Error('Screenshot rendering failed')); };
116
- img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
117
- } catch(e) { reject(e); }
118
- });
119
- },
120
- setState: function(data) { _state = data; parent.postMessage({ type: 'sprinkle-set-state', data: data }, '*'); },
121
- getState: function() { return _state; },
122
- close: function() { parent.postMessage({ type: 'sprinkle-close' }, '*'); },
123
- minimize: function() { parent.postMessage({ type: 'sprinkle-minimize' }, '*'); },
124
- stopCone: function() { parent.postMessage({ type: 'sprinkle-stop-cone' }, '*'); },
125
- attachImage: function(base64, name, mimeType) { parent.postMessage({ type: 'sprinkle-attach-image', base64: base64, name: name, mimeType: mimeType }, '*'); },
126
- captureScreen: function() {
127
- return _vfsCall('sprinkle-capture-screen', {}, function(m) {
128
- return { base64: m.base64, width: m.width, height: m.height, mimeType: m.mimeType };
129
- });
130
- },
131
- exec: Object.assign(function(cmd) {
132
- return _vfsCall('sprinkle-exec', { cmd: cmd }, function(m) { return m.result; });
133
- }, { spawn: function(argv) { return _jshCall('spawn', [argv]); } }),
134
- agent: function(prompt, opts) {
135
- return _vfsCall('sprinkle-agent', { prompt: prompt, opts: opts }, function(m) { return m.result; });
136
- },
137
- fetch: function(url, init) { return _jshCall('fetch', [url, init || null]); },
138
- http: {
139
- client: function(cfg) {
140
- function mk(method) { return function(path, opts) { return _jshCall('http', [cfg, method, path, opts || null]); }; }
141
- return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
142
- }
143
- },
144
- browser: {
145
- findTab: function(q) { return _jshCall('browser', ['findTab', q]); },
146
- ensureTab: function(url, options) { return _jshCall('browser', ['ensureTab', url, options || {}]); },
147
- eval: function(tab, code) { return _jshCall('browser', ['eval', tab, code]); },
148
- evalAsync: function(tab, code) { return _jshCall('browser', ['evalAsync', tab, code]); },
149
- cookie: function(tab, name) { return _jshCall('browser', ['cookie', tab, name]); },
150
- localStorage: function(tab, key) { return _jshCall('browser', ['localStorage', tab, key]); },
151
- fetch: function(tab, url, opts) { return _jshCall('browser', ['fetch', tab, url, opts || {}]); }
152
- },
153
- hid: {
154
- list: function() { return _deviceCall('hid', 'list', []); },
155
- request: function(filters) { return _deviceCall('hid', 'request', [filters || []]); },
156
- open: function(handle) { return _deviceCall('hid', 'open', [handle]).then(function() {}); },
157
- close: function(handle) { return _deviceCall('hid', 'close', [handle]).then(function() {}); },
158
- sendReport: function(handle, reportId, data) {
159
- return _deviceCall('hid', 'sendReport', [handle, reportId, data]).then(function() {});
160
- },
161
- on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
162
- off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners['delete'](cb); }
163
- },
164
- serial: {
165
- list: function() { return _deviceCall('serial', 'list', []); },
166
- request: function(filters) { return _deviceCall('serial', 'request', [filters || []]); },
167
- open: function(handle, options) { return _deviceCall('serial', 'open', [handle, options]).then(function() {}); },
168
- close: function(handle) { return _deviceCall('serial', 'close', [handle]).then(function() {}); }
169
- },
170
- usb: {
171
- list: function() { return _deviceCall('usb', 'list', []); },
172
- request: function(filters) { return _deviceCall('usb', 'request', [filters || []]); },
173
- open: function(handle) { return _deviceCall('usb', 'open', [handle]).then(function() {}); },
174
- close: function(handle) { return _deviceCall('usb', 'close', [handle]).then(function() {}); }
175
- },
176
- readFileBinary: function(path) { return _jshCall('readFileBinary', [path]).then(function(r) { return _b64ToU8(r.base64); }); },
177
- writeFileBinary: function(path, bytes) { return _jshCall('writeFileBinary', [path, _u8ToB64(bytes)]); },
178
- fetchToFile: function(url, path) { return _jshCall('fetchToFile', [url, path]); },
179
- _jsh: function(op, args) { return _jshCall(op, args); },
180
- name: ''
181
- };
182
- window.slicc = api;
183
- window.bridge = api;
184
- })();`}async renderFullDoc(e,t){let i=`<script>${this.generateBridgeScript()}<\/script>`,a=this.collectThemeCSS(),o=a?`<style>${a}</style>`:``,s=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,c=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,l=`<script>(function(){try{if(${n()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+i+o+s+c+`<script src="/lucide-icons.js"><\/script>`,u,d=e.match(/<head\b[^>]*>/i);if(d){let t=d.index+d[0].length;u=e.slice(0,t)+l+e.slice(t)}else{let t=e.match(/<script\b/i);if(t)u=e.slice(0,t.index)+l+e.slice(t.index);else{let t=e.match(/<html\b[^>]*>/i);if(t){let n=t.index+t[0].length;u=e.slice(0,n)+l+e.slice(n)}else u=l+e}}let f=document.createElement(`iframe`);f.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),f.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`,f.srcdoc=u,this.iframe=f,await new Promise((e,n)=>{let i=setTimeout(()=>{n(Error(`full-doc iframe load timed out`))},5e3);f.addEventListener(`load`,()=>{clearTimeout(i),r(f.contentWindow);let n=this.bridge.getState();f.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:n},`*`),e()},{once:!0}),f.addEventListener(`error`,e=>{clearTimeout(i),n(Error(`full-doc iframe failed to load`))},{once:!0}),this.container.appendChild(f)}),this.messageHandler=e=>{if(e.source!==f.contentWindow)return;let t=e.data;t?.type&&(t.type===`sprinkle-lick`?this.bridge.lick({action:t.action,data:t.data}):t.type===`sprinkle-set-state`?this.bridge.setState(t.data):t.type===`sprinkle-close`?this.bridge.close():t.type===`sprinkle-minimize`?this.bridge.minimize():t.type===`sprinkle-stop-cone`?this.bridge.stopCone():t.type===`sprinkle-attach-image`?this.bridge.attachImage(t.base64,t.name,t.mimeType):t.type===`sprinkle-readfile`?this.bridge.readFile(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:t.id,content:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-readfile-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-writefile`?this.bridge.writeFile(t.path,t.content).then(()=>f.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:t.id},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-writefile-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-readdir`?this.bridge.readDir(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:t.id,entries:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-readdir-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-exists`?this.bridge.exists(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:t.id,exists:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-exists-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-stat`?this.bridge.stat(t.path).then(e=>f.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:t.id,stat:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-stat-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-mkdir`?this.bridge.mkdir(t.path).then(()=>f.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:t.id},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-mkdir-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-rm`?this.bridge.rm(t.path).then(()=>f.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:t.id},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-rm-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-capture-screen`?this.bridge.captureScreen().then(e=>f.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:t.id,base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-capture-screen-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-exec`?this.bridge.exec(t.cmd).then(e=>f.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-exec-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-agent`?this.bridge.agent(t.prompt,t.opts).then(e=>f.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-agent-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-jsh`?this.bridge._jsh(t.op,t.args).then(e=>f.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-jsh-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)):t.type===`sprinkle-device-op`&&this.bridge._device(t.channel,t.op,t.args??[]).then(e=>f.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:t.id,result:e},`*`),e=>f.contentWindow?.postMessage({type:`sprinkle-device-op-response`,id:t.id,error:e instanceof Error?e.message:String(e)},`*`)))},window.addEventListener(`message`,this.messageHandler)}renderInline(t,n){if(t.includes(`<slicc-editor`)&&!customElements.get(`slicc-editor`)&&e(()=>import(`./slicc-editor-DKckizoI.js`),__vite__mapDeps([0,1,2])),t.includes(`<slicc-diff`)&&!customElements.get(`slicc-diff`)){let e=document.createElement(`script`);e.src=`/slicc-diff.js`,document.head.appendChild(e)}window.__slicc_sprinkles||(window.__slicc_sprinkles={}),window.__slicc_sprinkles[n]=this.bridge,this.bridge._container=this.container;let r=document.createElement(`div`);r.className=`sprinkle-content`,r.innerHTML=t,this.container.appendChild(r);for(let e of r.querySelectorAll(`.fill[data-value]`)){let t=parseFloat(e.dataset.value||`0`);t>=0&&t<=100&&(e.style.width=`${t}%`)}let i=`window.__slicc_sprinkles[${JSON.stringify(n)}]`;for(let e of r.querySelectorAll(`[onclick]`)){let t=e.getAttribute(`onclick`)||``;/\b(slicc|bridge)\b/.test(t)&&e.setAttribute(`onclick`,t.replace(/\b(slicc|bridge)\b/g,i))}let a=Array.from(r.querySelectorAll(`script`));for(let e of a){e.remove();let t=document.createElement(`script`);for(let n of e.attributes)t.setAttribute(n.name,n.value);if(!e.src){let n=new Set;for(let e of r.querySelectorAll(`[onclick]`)){let t=e.getAttribute(`onclick`)||``;for(let e of t.matchAll(/\b(\w+)\s*\(/g)){let t=e[1];[`slicc`,`bridge`,`lick`,`close`,`exec`,`agent`].includes(t)||n.add(t)}}let a=[...n].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
185
- `);t.textContent=`(function() { var slicc = ${i}; var bridge = slicc;\n`+e.textContent+(a?`
186
- `+a:``)+`
187
- })();`}r.appendChild(t),this.scripts.push(t)}}dispose(){this.messageHandler&&=(window.removeEventListener(`message`,this.messageHandler),null),this.iframe&&=(t(this.iframe.contentWindow),this.iframe.remove(),null);for(let e of this.scripts)e.remove();this.scripts=[];let e=this.container.querySelector(`.sprinkle-content`);e&&e.remove(),window.__slicc_sprinkles&&delete window.__slicc_sprinkles[this.bridge.name]}async getLucideScript(){return a.cachedLucideScript===null?(a.lucideScriptPromise===null&&(a.lucideScriptPromise=(async()=>{try{let e=await fetch(chrome.runtime.getURL(`lucide-icons.js`));if(e.ok){let t=await e.text();return a.cachedLucideScript=t,t}}catch{}return a.cachedLucideScript=``,``})()),a.lucideScriptPromise):a.cachedLucideScript}};function l(e,t){return e.replace(/url\(\s*['"]?([^'")]+)['"]?\s*\)/g,(e,n)=>{if(/^(https?:|data:|blob:)/i.test(n))return`url('${n}')`;try{return`url('${new URL(n,t).href}')`}catch{return`url('${n}')`}})}function u(){if(typeof getComputedStyle!=`function`)return``;let e=[],t=[],n=[],r=location.href,i=e=>e===`:root`||e===`:root.theme-light`||e.startsWith(`.theme-light `)||e===`.theme-light`||e.split(`,`).some(e=>{let t=e.trim();return t===`:root`||t===`:root.theme-light`||t.startsWith(`.theme-light `)||t===`.theme-light`});for(let a of document.styleSheets)try{for(let o of a.cssRules)if(o instanceof CSSFontFaceRule)e.push(l(o.cssText,r));else if(o instanceof CSSStyleRule){let e=o.selectorText;i(e)&&t.push(o.cssText),(e.includes(`.sprinkle-`)||e.includes(`.fill`))&&n.push(o.cssText)}}catch{}return e.join(`
188
- `)+`
189
- `+t.join(`
190
- `)+`
191
- `+n.join(`
192
- `)}export{u as n,c as t};