sliccy 5.29.3 → 5.29.5

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-D26pqZ0j.js → account-store-BOQSAAw2.js} +2 -2
  2. package/dist/ui/assets/{account-store-CzCtM2Wh.js → account-store-D1vX2S8R.js} +1 -1
  3. package/dist/ui/assets/{adobe-Bm_AUr_g.js → adobe-8G2v8kLP.js} +1 -1
  4. package/dist/ui/assets/{adobe-ByZZa83D.js → adobe-BbLdWJ-W.js} +1 -1
  5. package/dist/ui/assets/{adobe-oauth-state-CmmHXB5E.js → adobe-oauth-state-DJ7VH-jH.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-B9ptU8o8.js → agent-message-to-chat-DqWuf7gs.js} +1 -1
  7. package/dist/ui/assets/{apps-Czs4iIXk.js → apps-CJ1_ZWQU.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-6usVrgbN.js → azure-openai-35p4JBb3.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-Bbrdrt2c.js → azure-openai-3jxO-1pi.js} +1 -1
  10. package/dist/ui/assets/{cerebras-DLdzzue5.js → cerebras-D0jPDXH7.js} +1 -1
  11. package/dist/ui/assets/{cerebras-DTvwbDzA.js → cerebras-DYlQwxnz.js} +1 -1
  12. package/dist/ui/assets/{connect-surface-BY7BrCDm.js → connect-surface-DK1bem9f.js} +1 -1
  13. package/dist/ui/assets/dip-DzjIaURI.js +1 -0
  14. package/dist/ui/assets/{dist-D-Ghteo_.js → dist-CdDdxFLX.js} +1 -1
  15. package/dist/ui/assets/{dist-kB5POLOF.js → dist-CuX41KVr.js} +1 -1
  16. package/dist/ui/assets/{ensure-speech-assets-CDvajruj.js → ensure-speech-assets-T2bKervX.js} +1 -1
  17. package/dist/ui/assets/esp8266-Bd_NZLuK.js +1 -0
  18. package/dist/ui/assets/{esptool-operations-Cl2oiluH.js → esptool-operations-BDTeQPYu.js} +2 -2
  19. package/dist/ui/assets/{fs-BZjSIEk4.js → fs-CfBsSj3i.js} +1 -1
  20. package/dist/ui/assets/{fs-CQbztwYL.js → fs-DhrC_KsM.js} +2 -2
  21. package/dist/ui/assets/{github-BseQu_TR.js → github-BYPcD5fg.js} +2 -2
  22. package/dist/ui/assets/{github-DhUFH2Yi.js → github-D79uT3aU.js} +1 -1
  23. package/dist/ui/assets/{github-copilot-C-NLcSKj.js → github-copilot-BiG99o3N.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-CXi-FuY-.js → github-copilot-Biv2HPYJ.js} +1 -1
  25. package/dist/ui/assets/{hear-DlcYp9Tf.js → hear-BVhX7uti.js} +1 -1
  26. package/dist/ui/assets/{kernel-worker-BxiK1sFB.js → kernel-worker-BkuxJ-XR.js} +18 -18
  27. package/dist/ui/assets/{kokoro-engine--kJUq8p5.js → kokoro-engine-CvcH9uTQ.js} +1 -1
  28. package/dist/ui/assets/{lick-ws-bridge-BkZNp1Jc.js → lick-ws-bridge-37Y-4T4Z.js} +1 -1
  29. package/dist/ui/assets/{lick-ws-bridge-CLcDOR9V.js → lick-ws-bridge-K6tOpKEY.js} +1 -1
  30. package/dist/ui/assets/{local-llm-CVi2x2A2.js → local-llm-DKQSFtbC.js} +1 -1
  31. package/dist/ui/assets/{main-DPmmLsAp.js → main-T2zzZ3Sw.js} +4 -4
  32. package/dist/ui/assets/{mount-BivN7Df-.js → mount-DkN8vR9V.js} +2 -2
  33. package/dist/ui/assets/{mount-K218WKlJ.js → mount-xktZI6uF.js} +1 -1
  34. package/dist/ui/assets/{new-session-BVcQigwc.js → new-session-CRISwS0H.js} +2 -2
  35. package/dist/ui/assets/{oauth-bootstrap-CHr80wBD.js → oauth-bootstrap-DfvQLY9B.js} +2 -2
  36. package/dist/ui/assets/{openai-codex-C9xJPmjw.js → openai-codex-CCax-RCb.js} +1 -1
  37. package/dist/ui/assets/{openai-codex-B1nEdpH-.js → openai-codex-cI0JeN83.js} +1 -1
  38. package/dist/ui/assets/{page-follower-tray-DjNdYyq6.js → page-follower-tray-D8iEwGy8.js} +1 -1
  39. package/dist/ui/assets/{panel-rpc-handlers-Daq7vshK.js → panel-rpc-handlers-CEO_O0t_.js} +2 -2
  40. package/dist/ui/assets/{provider-D0m3oxQv.js → provider-BxV7g0Lt.js} +2 -2
  41. package/dist/ui/assets/{provider-CMQ6DyBZ.js → provider-DLyS_lWj.js} +1 -1
  42. package/dist/ui/assets/provider-store-access-B26RWR8x.js +1 -0
  43. package/dist/ui/assets/provider-store-access-thThMW75.js +1 -0
  44. package/dist/ui/assets/{providers-BNzGrdlz.js → providers-B6-YJziw.js} +2 -2
  45. package/dist/ui/assets/{providers-MlrcX7HY.js → providers-i46HO3nQ.js} +1 -1
  46. package/dist/ui/assets/{quick-llm-DNOaejSe.js → quick-llm-zgKUio15.js} +1 -1
  47. package/dist/ui/assets/session-freezer-B-TbRaJg.js +1 -0
  48. package/dist/ui/assets/{speak-zBDdggtn.js → speak-ClI_MkGe.js} +1 -1
  49. package/dist/ui/assets/{sprinkle-manager-CEWtVCAV.js → sprinkle-manager-D7qmT51R.js} +1 -1
  50. package/dist/ui/assets/sprinkle-renderer-CR39pmoz.js +192 -0
  51. package/dist/ui/assets/{store-vSUBcrbZ.js → store-GlrlyvUg.js} +1 -1
  52. package/dist/ui/assets/{sudo-D1KAY9SF.js → sudo-C06t2aTM.js} +1 -1
  53. package/dist/ui/assets/{transformers-env-Dw3DyDdF.js → transformers-env-CkxFVUkV.js} +1 -1
  54. package/dist/ui/assets/{tray-leader-DKqvjswl.js → tray-leader-BrXDH5hG.js} +1 -1
  55. package/dist/ui/assets/{tray-leave-runtime-Cb_nfgbz.js → tray-leave-runtime-DDtKrogi.js} +1 -1
  56. package/dist/ui/assets/{upgrade-detection-dh5fFdt-.js → upgrade-detection-DzAqTSop.js} +1 -1
  57. package/dist/ui/assets/{voice-reply-BiHDoY1e.js → voice-reply-DpNDCrUL.js} +1 -1
  58. package/dist/ui/assets/{wc-attach-CzfwSpwH.js → wc-attach-B25JvLdU.js} +2 -2
  59. package/dist/ui/assets/{wc-extension-BPgdn_g-.js → wc-extension-Drv-xO2B.js} +2 -2
  60. package/dist/ui/assets/{wc-follower-CQIKG5Dt.js → wc-follower-COzlOPC3.js} +3 -3
  61. package/dist/ui/assets/{wc-live-CHAXRrjR.js → wc-live-0Ra2u7P1.js} +12 -7
  62. package/dist/ui/assets/{wc-nav-5eb9iCN5.js → wc-nav-B5EJeK2H.js} +2 -2
  63. package/dist/ui/assets/{wc-onboarding-D3VlEIpe.js → wc-onboarding-B8bU63TM.js} +2 -2
  64. package/dist/ui/assets/{wc-placeholder-CTTRoRn8.js → wc-placeholder-CEWmxKVg.js} +3 -3
  65. package/dist/ui/assets/{wc-settings-5phm_W1r.js → wc-settings-z-_FY61c.js} +2 -2
  66. package/dist/ui/assets/{wc-shell-F6tvLhb9.js → wc-shell-l50vLtIL.js} +3 -3
  67. package/dist/ui/assets/{wc-sprinkles-jyVo8RUK.js → wc-sprinkles-Bcm6Esda.js} +2 -2
  68. package/dist/ui/assets/{wc-tray-8Erd9wmb.js → wc-tray-BdFUcuzA.js} +2 -2
  69. package/dist/ui/assets/{whisper-engine-DJDZdLIa.js → whisper-engine-D3ClG74j.js} +1 -1
  70. package/dist/ui/assets/{xai-grok-BrU0R9AU.js → xai-grok-CLlL0NXH.js} +1 -1
  71. package/dist/ui/assets/{xai-grok-OpJzmw5c.js → xai-grok-CYPTfdyJ.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-B04l556e.js +0 -1
  76. package/dist/ui/assets/esp8266-HIQY_ZDD.js +0 -1
  77. package/dist/ui/assets/provider-store-access-Bl2UpQc2.js +0 -1
  78. package/dist/ui/assets/provider-store-access-DpV1e0z4.js +0 -1
  79. package/dist/ui/assets/session-freezer-DZxhXNVw.js +0 -1
  80. package/dist/ui/assets/sprinkle-renderer-gM4_fsfp.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;function a(){try{return window.self!==window.top}catch{return!0}}function o(e){let t=e.style.display;e.style.display=`none`,requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.style.display=t})})}var s=/<script\b([^>]*)\bsrc\s*=\s*["'](https?:\/\/[^"']+)["']([^>]*)><\/script>/gi;async function c(e){let t=[],n;for(;(n=s.exec(e))!==null;)t.push({full:n[0],url:n[2],index:n.index});if(s.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 l(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}function u(e,t,n,r={}){e.contentWindow?.postMessage({type:t,id:n,...r},`*`)}function d(e,t,n,r,i){r.then(r=>u(e,t,n,i(r)),r=>u(e,t,n,{error:r instanceof Error?r.message:String(r)}))}function f(e){return{"sprinkle-lick":(t,n)=>e.lick({action:n.action,data:n.data}),"sprinkle-set-state":(t,n)=>e.setState(n.data),"sprinkle-close":()=>e.close(),"sprinkle-minimize":()=>e.minimize(),"sprinkle-stop-cone":()=>e.stopCone(),"sprinkle-attach-image":(t,n)=>e.attachImage(n.base64,n.name,n.mimeType),"sprinkle-readfile":(t,n)=>d(t,`sprinkle-readfile-response`,n.id,e.readFile(n.path),e=>({content:e})),"sprinkle-writefile":(t,n)=>d(t,`sprinkle-writefile-response`,n.id,e.writeFile(n.path,n.content),()=>({})),"sprinkle-readdir":(t,n)=>d(t,`sprinkle-readdir-response`,n.id,e.readDir(n.path),e=>({entries:e})),"sprinkle-exists":(t,n)=>d(t,`sprinkle-exists-response`,n.id,e.exists(n.path),e=>({exists:e})),"sprinkle-stat":(t,n)=>d(t,`sprinkle-stat-response`,n.id,e.stat(n.path),e=>({stat:e})),"sprinkle-mkdir":(t,n)=>d(t,`sprinkle-mkdir-response`,n.id,e.mkdir(n.path),()=>({})),"sprinkle-rm":(t,n)=>d(t,`sprinkle-rm-response`,n.id,e.rm(n.path),()=>({})),"sprinkle-capture-screen":(t,n)=>d(t,`sprinkle-capture-screen-response`,n.id,e.captureScreen(),e=>({base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType})),"sprinkle-exec":(t,n)=>d(t,`sprinkle-exec-response`,n.id,e.exec(n.cmd),e=>({result:e})),"sprinkle-agent":(t,n)=>d(t,`sprinkle-agent-response`,n.id,e.agent(n.prompt,n.opts),e=>({result:e})),"sprinkle-jsh":(t,n)=>d(t,`sprinkle-jsh-response`,n.id,e._jsh(n.op,n.args),e=>({result:e})),"sprinkle-device-op":(t,n)=>d(t,`sprinkle-device-op-response`,n.id,e._device(n.channel,n.op,n.args??[]),e=>({result:e}))}}function p(e,t){return n=>{if(n.source!==e.contentWindow)return;let r=n.data;r?.type&&t[r.type]?.(e,r)}}function m(t){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)}}function h(e){for(let t of e.querySelectorAll(`.fill[data-value]`)){let e=parseFloat(t.dataset.value||`0`);e>=0&&e<=100&&(t.style.width=`${e}%`)}}function g(e,t){let n=`window.__slicc_sprinkles[${JSON.stringify(t)}]`;for(let t of e.querySelectorAll(`[onclick]`)){let e=t.getAttribute(`onclick`)||``;/\b(slicc|bridge)\b/.test(e)&&t.setAttribute(`onclick`,e.replace(/\b(slicc|bridge)\b/g,n))}return n}function _(e){let t=new Set;for(let n of e.querySelectorAll(`[onclick]`)){let e=n.getAttribute(`onclick`)||``;for(let n of e.matchAll(/\b(\w+)\s*\(/g)){let e=n[1];[`slicc`,`bridge`,`lick`,`close`,`exec`,`agent`].includes(e)||t.add(e)}}return t}function v(e,t){let n=[];for(let r of Array.from(e.querySelectorAll(`script`))){r.remove();let i=document.createElement(`script`);for(let e of r.attributes)i.setAttribute(e.name,e.value);if(!r.src){let n=[..._(e)].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
3
- `);i.textContent=`(function() { var slicc = ${t}; var bridge = slicc;\n`+r.textContent+(n?`
4
- `+n:``)+`
5
- })();`}e.appendChild(i),n.push(i)}return n}var y=class e{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,l(e)):l(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=p(a,{...f(this.bridge),"sprinkle-storage-set":(e,n)=>{try{localStorage.setItem(`slicc-sprinkle-ls:${t}:${n.key}`,n.value)}catch(e){console.warn(`[sprinkle-renderer] localStorage setItem failed:`,n.key,e)}},"sprinkle-storage-remove":(e,n)=>{try{localStorage.removeItem(`slicc-sprinkle-ls:${t}:${n.key}`)}catch(e){console.warn(`[sprinkle-renderer] localStorage removeItem failed:`,n.key,e)}},"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)}},"sprinkle-open":(e,t)=>this.bridge.open(t.path,t.projectRoot?{projectRoot:t.projectRoot}:void 0),"sprinkle-fetch-script":(e,t)=>{let n=t.url,r=t.id;fetch(n).then(e=>e.ok?e.text():Promise.reject(Error(`HTTP ${e.status}`))).then(t=>u(e,`sprinkle-fetch-script-response`,r,{url:n,text:t})).catch(t=>u(e,`sprinkle-fetch-script-response`,r,{url:n,error:t instanceof Error?t.message:String(t)}))}}),window.addEventListener(`message`,this.messageHandler);let o=this.collectThemeCSS(),s={},l=`slicc-sprinkle-ls:${t}:`;for(let e=0;e<localStorage.length;e++){let t=localStorage.key(e);t?.startsWith(l)&&(s[t.slice(l.length)]=localStorage.getItem(t)??``)}let d=this.bridge.getState(),m=``,h=``;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=>{m=e}).catch(()=>{})),e.includes(`<slicc-diff`)&&t.push(fetch(chrome.runtime.getURL(`slicc-diff.js`)).then(e=>e.ok?e.text():``).then(e=>{h=e}).catch(()=>{})),await Promise.all(t)}let g=await this.getLucideScript(),_=i?await c(e):e;a.contentWindow.postMessage({type:`sprinkle-render`,content:_,name:t,themeCSS:o,savedState:d,savedStorage:s,fullDoc:i,editorScript:m,diffScript:h,lucideScript:g,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 x()}generateBridgeScript(){return`(function() {
6
- var _updateListeners = new Set();
7
- var _hidInputReportListeners = new Set();
8
- var _sprinkleName = '';
9
- var _state = null;
10
- var _cbId = 0;
11
- var _callbacks = {};
12
-
13
- window.addEventListener('message', function(event) {
14
- var msg = event.data;
15
- if (!msg || !msg.type) return;
16
- if (msg.type === 'sprinkle-init') {
17
- _sprinkleName = msg.name || '';
18
- _state = msg.savedState || null;
19
- if (window.slicc) window.slicc.name = _sprinkleName;
20
- } else if (msg.type === 'sprinkle-update') {
21
- _updateListeners.forEach(function(cb) { try { cb(msg.data); } catch(e) { console.error(e); } });
22
- } else if (msg.type === 'sprinkle-device-event') {
23
- if (msg.channel === 'hid:inputreport') {
24
- _hidInputReportListeners.forEach(function(cb) {
25
- try { cb(msg.payload); } catch(e) { console.error(e); }
26
- });
27
- }
28
- } else if (msg.type === 'slicc-theme') {
29
- document.documentElement.classList.toggle('theme-light', !!msg.isLight);
30
- } else if (msg.id && _callbacks[msg.id]) {
31
- var cb = _callbacks[msg.id];
32
- delete _callbacks[msg.id];
33
- cb(msg);
34
- }
35
- });
36
-
37
- function _vfsCall(type, params, extractResult) {
38
- return new Promise(function(resolve, reject) {
39
- var id = ++_cbId;
40
- _callbacks[id] = function(msg) {
41
- if (msg.error) reject(new Error(msg.error));
42
- else resolve(extractResult ? extractResult(msg) : undefined);
43
- };
44
- var m = { type: type, id: id };
45
- if (params) { for (var k in params) m[k] = params[k]; }
46
- parent.postMessage(m, '*');
47
- });
48
- }
49
-
50
- function _jshCall(op, args) {
51
- return _vfsCall('sprinkle-jsh', { op: op, args: args }, function(m) { return m.result; });
52
- }
53
- function _deviceCall(channel, op, args) {
54
- return _vfsCall('sprinkle-device-op', { channel: channel, op: op, args: args || [] },
55
- function(m) { return m.result; });
56
- }
57
- function _b64ToU8(b64) {
58
- var bin = atob(b64); var u8 = new Uint8Array(bin.length);
59
- for (var i = 0; i < bin.length; i++) u8[i] = bin.charCodeAt(i);
60
- return u8;
61
- }
62
- function _u8ToB64(bytes) {
63
- var bin = ''; for (var i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);
64
- return btoa(bin);
65
- }
66
-
67
- var api = {
68
- lick: function(event) {
69
- var action, data;
70
- if (typeof event === 'string') { action = event; } else { action = event.action; data = event.data; }
71
- parent.postMessage({ type: 'sprinkle-lick', action: action, data: data }, '*');
72
- },
73
- on: function(event, callback) { if (event === 'update') _updateListeners.add(callback); },
74
- off: function(event, callback) { if (event === 'update') _updateListeners.delete(callback); },
75
- readFile: function(path) {
76
- return _vfsCall('sprinkle-readfile', { path: path }, function(m) { return m.content; });
77
- },
78
- writeFile: function(path, content) {
79
- return _vfsCall('sprinkle-writefile', { path: path, content: content });
80
- },
81
- readDir: function(path) {
82
- return _vfsCall('sprinkle-readdir', { path: path }, function(m) { return m.entries; });
83
- },
84
- exists: function(path) {
85
- return _vfsCall('sprinkle-exists', { path: path }, function(m) { return m.exists; });
86
- },
87
- stat: function(path) {
88
- return _vfsCall('sprinkle-stat', { path: path }, function(m) { return m.stat; });
89
- },
90
- mkdir: function(path) {
91
- return _vfsCall('sprinkle-mkdir', { path: path });
92
- },
93
- rm: function(path) {
94
- return _vfsCall('sprinkle-rm', { path: path });
95
- },
96
- screenshot: function(selector) {
97
- return new Promise(function(resolve, reject) {
98
- try {
99
- var target = selector ? document.querySelector(selector) : document.body;
100
- if (!target) { reject(new Error('Element not found: ' + selector)); return; }
101
- var rect = target.getBoundingClientRect();
102
- var w = Math.ceil(rect.width);
103
- var h = Math.ceil(rect.height);
104
- if (w === 0 || h === 0) { reject(new Error('Element has zero dimensions')); return; }
105
- var canvas = document.createElement('canvas');
106
- var dpr = window.devicePixelRatio || 1;
107
- canvas.width = w * dpr;
108
- canvas.height = h * dpr;
109
- var ctx = canvas.getContext('2d');
110
- ctx.scale(dpr, dpr);
111
- var clone = target.cloneNode(true);
112
- var svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + w + '" height="' + h + '">' +
113
- '<foreignObject width="100%" height="100%">' +
114
- new XMLSerializer().serializeToString(clone) +
115
- '</foreignObject></svg>';
116
- var img = new Image();
117
- img.onload = function() { ctx.drawImage(img, 0, 0); resolve(canvas.toDataURL('image/png')); };
118
- img.onerror = function() { reject(new Error('Screenshot rendering failed')); };
119
- img.src = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);
120
- } catch(e) { reject(e); }
121
- });
122
- },
123
- setState: function(data) { _state = data; parent.postMessage({ type: 'sprinkle-set-state', data: data }, '*'); },
124
- getState: function() { return _state; },
125
- close: function() { parent.postMessage({ type: 'sprinkle-close' }, '*'); },
126
- minimize: function() { parent.postMessage({ type: 'sprinkle-minimize' }, '*'); },
127
- stopCone: function() { parent.postMessage({ type: 'sprinkle-stop-cone' }, '*'); },
128
- attachImage: function(base64, name, mimeType) { parent.postMessage({ type: 'sprinkle-attach-image', base64: base64, name: name, mimeType: mimeType }, '*'); },
129
- captureScreen: function() {
130
- return _vfsCall('sprinkle-capture-screen', {}, function(m) {
131
- return { base64: m.base64, width: m.width, height: m.height, mimeType: m.mimeType };
132
- });
133
- },
134
- exec: Object.assign(function(cmd) {
135
- return _vfsCall('sprinkle-exec', { cmd: cmd }, function(m) { return m.result; });
136
- }, { spawn: function(argv) { return _jshCall('spawn', [argv]); } }),
137
- agent: function(prompt, opts) {
138
- return _vfsCall('sprinkle-agent', { prompt: prompt, opts: opts }, function(m) { return m.result; });
139
- },
140
- fetch: function(url, init) { return _jshCall('fetch', [url, init || null]); },
141
- http: {
142
- client: function(cfg) {
143
- function mk(method) { return function(path, opts) { return _jshCall('http', [cfg, method, path, opts || null]); }; }
144
- return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
145
- }
146
- },
147
- browser: {
148
- findTab: function(q) { return _jshCall('browser', ['findTab', q]); },
149
- ensureTab: function(url, options) { return _jshCall('browser', ['ensureTab', url, options || {}]); },
150
- eval: function(tab, code) { return _jshCall('browser', ['eval', tab, code]); },
151
- evalAsync: function(tab, code) { return _jshCall('browser', ['evalAsync', tab, code]); },
152
- cookie: function(tab, name) { return _jshCall('browser', ['cookie', tab, name]); },
153
- localStorage: function(tab, key) { return _jshCall('browser', ['localStorage', tab, key]); },
154
- fetch: function(tab, url, opts) { return _jshCall('browser', ['fetch', tab, url, opts || {}]); }
155
- },
156
- hid: {
157
- list: function() { return _deviceCall('hid', 'list', []); },
158
- request: function(filters) { return _deviceCall('hid', 'request', [filters || []]); },
159
- open: function(handle) { return _deviceCall('hid', 'open', [handle]).then(function() {}); },
160
- close: function(handle) { return _deviceCall('hid', 'close', [handle]).then(function() {}); },
161
- sendReport: function(handle, reportId, data) {
162
- return _deviceCall('hid', 'sendReport', [handle, reportId, data]).then(function() {});
163
- },
164
- on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
165
- off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners['delete'](cb); }
166
- },
167
- serial: {
168
- list: function() { return _deviceCall('serial', 'list', []); },
169
- request: function(filters) { return _deviceCall('serial', 'request', [filters || []]); },
170
- open: function(handle, options) { return _deviceCall('serial', 'open', [handle, options]).then(function() {}); },
171
- close: function(handle) { return _deviceCall('serial', 'close', [handle]).then(function() {}); }
172
- },
173
- usb: {
174
- list: function() { return _deviceCall('usb', 'list', []); },
175
- request: function(filters) { return _deviceCall('usb', 'request', [filters || []]); },
176
- open: function(handle) { return _deviceCall('usb', 'open', [handle]).then(function() {}); },
177
- close: function(handle) { return _deviceCall('usb', 'close', [handle]).then(function() {}); }
178
- },
179
- readFileBinary: function(path) { return _jshCall('readFileBinary', [path]).then(function(r) { return _b64ToU8(r.base64); }); },
180
- writeFileBinary: function(path, bytes) { return _jshCall('writeFileBinary', [path, _u8ToB64(bytes)]); },
181
- fetchToFile: function(url, path) { return _jshCall('fetchToFile', [url, path]); },
182
- _jsh: function(op, args) { return _jshCall(op, args); },
183
- name: ''
184
- };
185
- window.slicc = api;
186
- window.bridge = api;
187
- })();`}async renderFullDoc(e,t){let i=`<script>${this.generateBridgeScript()}<\/script>`,s=this.collectThemeCSS(),c=s?`<style>${s}</style>`:``,l=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,u=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,d=`<script>(function(){try{if(${n()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+i+c+l+u+`<script src="/lucide-icons.js"><\/script>`,m,h=e.match(/<head\b[^>]*>/i);if(h){let t=h.index+h[0].length;m=e.slice(0,t)+d+e.slice(t)}else{let t=e.match(/<script\b/i);if(t)m=e.slice(0,t.index)+d+e.slice(t.index);else{let t=e.match(/<html\b[^>]*>/i);if(t){let n=t.index+t[0].length;m=e.slice(0,n)+d+e.slice(n)}else m=d+e}}let g=document.createElement(`iframe`),_=a()?`allow-scripts allow-same-origin allow-popups`:`allow-scripts allow-same-origin`;g.setAttribute(`sandbox`,_),g.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`,g.srcdoc=m,this.iframe=g,await new Promise((e,n)=>{let i=setTimeout(()=>{n(Error(`full-doc iframe load timed out`))},5e3);g.addEventListener(`load`,()=>{clearTimeout(i),r(g.contentWindow);let n=this.bridge.getState();g.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:n},`*`),a()&&o(g),e()},{once:!0}),g.addEventListener(`error`,e=>{clearTimeout(i),n(Error(`full-doc iframe failed to load`))},{once:!0}),this.container.appendChild(g)}),this.messageHandler=p(g,f(this.bridge)),window.addEventListener(`message`,this.messageHandler)}renderInline(e,t){m(e),window.__slicc_sprinkles||(window.__slicc_sprinkles={}),window.__slicc_sprinkles[t]=this.bridge,this.bridge._container=this.container;let n=document.createElement(`div`);n.className=`sprinkle-content`,n.innerHTML=e,this.container.appendChild(n),h(n);let r=g(n,t);this.scripts=v(n,r)}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 e.cachedLucideScript===null?(e.lucideScriptPromise===null&&(e.lucideScriptPromise=(async()=>{try{let t=await fetch(chrome.runtime.getURL(`lucide-icons.js`));if(t.ok){let n=await t.text();return e.cachedLucideScript=n,n}}catch{}return e.cachedLucideScript=``,``})()),e.lucideScriptPromise):e.cachedLucideScript}};function b(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 x(){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(b(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{x as n,y as t};