sliccy 5.29.4 → 5.29.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/ui/assets/{account-store-D4VPSOZh.js → account-store-Bu5ljYss.js} +1 -1
- package/dist/ui/assets/{account-store-VpQvyu1p.js → account-store-DEsArzGl.js} +2 -2
- package/dist/ui/assets/{adobe-wV64hSzE.js → adobe-BqsDg6Cy.js} +1 -1
- package/dist/ui/assets/{adobe-CrQDf60l.js → adobe-DRKyOCC6.js} +1 -1
- package/dist/ui/assets/{adobe-oauth-state-Lb_JvwyB.js → adobe-oauth-state-BFUgKuRa.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-CMRDw7bs.js → agent-message-to-chat-D68DzRjd.js} +1 -1
- package/dist/ui/assets/{apps-CQ4XhYtC.js → apps-CWr2BYSy.js} +1 -1
- package/dist/ui/assets/{azure-openai-CiQGm0QY.js → azure-openai-UPQHa8Li.js} +1 -1
- package/dist/ui/assets/{azure-openai-CQfo8rRO.js → azure-openai-UdyB_ZyI.js} +1 -1
- package/dist/ui/assets/{cerebras-BENM2dyC.js → cerebras-DXj5EoBh.js} +1 -1
- package/dist/ui/assets/{cerebras-C9eHh-1F.js → cerebras-DaUWBKgC.js} +1 -1
- package/dist/ui/assets/{connect-surface-qjZ2FMfY.js → connect-surface-BmpmvkhF.js} +1 -1
- package/dist/ui/assets/dialog-Dk5NB8fi.css +1 -0
- package/dist/ui/assets/dip-C9ThQEer.js +1 -0
- package/dist/ui/assets/{dist-CnzHTw9v.js → dist-CMuKibZa.js} +1 -1
- package/dist/ui/assets/{dist-1TyX2c44.js → dist-DkroiWss.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-DaeIAQfC.js → ensure-speech-assets-Dptn65YB.js} +1 -1
- package/dist/ui/assets/esp8266-B2AYXK24.js +1 -0
- package/dist/ui/assets/{esptool-operations-Cu6VuGRF.js → esptool-operations-bCa0mCcG.js} +2 -2
- package/dist/ui/assets/{fs-OaP73ltC.js → fs--_upV_U7.js} +2 -2
- package/dist/ui/assets/{fs-DQkvQxLZ.js → fs-CBpCKI5r.js} +1 -1
- package/dist/ui/assets/{github-ChNzgKRA.js → github-CGmUbc2v.js} +1 -1
- package/dist/ui/assets/{github-wdfcKJD0.js → github-Dkn78JF5.js} +2 -2
- package/dist/ui/assets/{github-copilot-EgYYz7oV.js → github-copilot-BkyuuCBU.js} +1 -1
- package/dist/ui/assets/{github-copilot-HtFFZDRW.js → github-copilot-D17I3ZKc.js} +1 -1
- package/dist/ui/assets/{hear-DuYXld7l.js → hear-DGVQzABs.js} +1 -1
- package/dist/ui/assets/{kernel-worker-BWyneFfa.js → kernel-worker-BdGtIGLb.js} +18 -18
- package/dist/ui/assets/{kokoro-engine-Bm8eIOW-.js → kokoro-engine-DLM6_rLC.js} +1 -1
- package/dist/ui/assets/{legacy-styles-CF6h7ytf.js → legacy-styles-CuB1P3LZ.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-NAIC4TXa.js → lick-ws-bridge-BWmCiOAI.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CmOpOEQD.js → lick-ws-bridge-B_02JAC_.js} +1 -1
- package/dist/ui/assets/{local-llm-BgoR8fjn.js → local-llm-B2GPTM7K.js} +1 -1
- package/dist/ui/assets/{main-B8BQYvi-.js → main-BZD1yR6G.js} +4 -4
- package/dist/ui/assets/{mount-BbFL5MYZ.js → mount-BaYNkpZw.js} +1 -1
- package/dist/ui/assets/{mount-DlA63DrP.js → mount-C2lk3YAP.js} +2 -2
- package/dist/ui/assets/{new-session-CZfgFwDC.js → new-session-CIhwlqgm.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-2veX7GNG.js → oauth-bootstrap-BngDQ0uw.js} +2 -2
- package/dist/ui/assets/{openai-codex-DCiGBxcR.js → openai-codex-CO5fvxJB.js} +1 -1
- package/dist/ui/assets/{openai-codex-CF9OcH8y.js → openai-codex-E_5210yw.js} +1 -1
- package/dist/ui/assets/{page-follower-tray-WVE2qN_F.js → page-follower-tray-D1DcEOnN.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-CNZbJjzK.js → panel-rpc-handlers-YEVJgq-Z.js} +2 -2
- package/dist/ui/assets/{provider-BSJWO4cD.js → provider-Cx6oGDaH.js} +2 -2
- package/dist/ui/assets/{provider-CdzO8rlB.js → provider-DfvZs9II.js} +1 -1
- package/dist/ui/assets/provider-store-access-BIOAmBGb.js +1 -0
- package/dist/ui/assets/provider-store-access-DDSYNfbW.js +1 -0
- package/dist/ui/assets/{providers-DukNl5RZ.js → providers-BBxlkWE4.js} +2 -2
- package/dist/ui/assets/{providers-BXaY5J0E.js → providers-BZhHIFg0.js} +1 -1
- package/dist/ui/assets/{quick-llm-DugUbqXs.js → quick-llm-SrUvWlQL.js} +1 -1
- package/dist/ui/assets/session-freezer-gSz0mPiW.js +1 -0
- package/dist/ui/assets/{speak-CEPJy7PQ.js → speak-pzPxTGme.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BaM7BWWg.js → sprinkle-manager-BJl27Tzb.js} +1 -1
- package/dist/ui/assets/sprinkle-renderer-CR39pmoz.js +192 -0
- package/dist/ui/assets/{store-_QG0EqLZ.js → store-zX0NOf7_.js} +1 -1
- package/dist/ui/assets/{sudo-CbM-xH4s.js → sudo-DhYYIx_B.js} +1 -1
- package/dist/ui/assets/{transformers-env-By7HyBRw.js → transformers-env-BLN55aPP.js} +1 -1
- package/dist/ui/assets/{tray-leader-JDSZRBe-.js → tray-leader-G0KMHsg0.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-CUEC2s79.js → tray-leave-runtime-BQQJXben.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-C2pqxEvT.js → upgrade-detection-CZFt06Im.js} +1 -1
- package/dist/ui/assets/{voice-reply-C3JNppH1.js → voice-reply-BRGIoGzh.js} +1 -1
- package/dist/ui/assets/{wc-attach-CmziQAkQ.js → wc-attach-DNO7iG8W.js} +2 -2
- package/dist/ui/assets/{wc-extension-DPZifef9.js → wc-extension-RuJWbaRx.js} +2 -2
- package/dist/ui/assets/{wc-follower-CkxAS8sj.js → wc-follower-COrvTmMD.js} +3 -3
- package/dist/ui/assets/{wc-live-Bkjczn8x.js → wc-live-CxkQzku9.js} +7 -7
- package/dist/ui/assets/{wc-nav-C82YIWHr.js → wc-nav-DhAPutCa.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DBuOe-4Z.js → wc-onboarding-4zmaOgF7.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DwXu4by3.js → wc-placeholder-DCOTxmJU.js} +3 -3
- package/dist/ui/assets/{wc-settings-DjxFnySy.js → wc-settings-ZQp5gK1o.js} +2 -2
- package/dist/ui/assets/{wc-shell-F4c_qK1k.js → wc-shell-CknN8aLi.js} +3 -3
- package/dist/ui/assets/{wc-sprinkles-7cEAdNxM.js → wc-sprinkles-BNucIG8d.js} +2 -2
- package/dist/ui/assets/{wc-tray-Bx75xP9b.js → wc-tray-DBqj4dPt.js} +2 -2
- package/dist/ui/assets/{whisper-engine-CDmwra_0.js → whisper-engine-COnODX5X.js} +1 -1
- package/dist/ui/assets/{xai-grok-Cl1-gLNY.js → xai-grok-DaihEjGG.js} +1 -1
- package/dist/ui/assets/{xai-grok-B1aUHswl.js → xai-grok-VfSb4aSC.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/dialog-DnPdZfH5.css +0 -1
- package/dist/ui/assets/dip-BgbJ3HkB.js +0 -1
- package/dist/ui/assets/esp8266-CDOU0Qhl.js +0 -1
- package/dist/ui/assets/provider-store-access-DY2cvTIj.js +0 -1
- package/dist/ui/assets/provider-store-access-DjSbII6f.js +0 -1
- package/dist/ui/assets/session-freezer-1vroog1g.js +0 -1
- 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};
|