New:Socket for Asana Is Now Available.Learn more
Get Started

@glbforge/studio

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glbforge/studio - npm Package Compare versions

Comparing version
0.2.0
to
0.3.0
+1
dist/assets/empty-FmFgRqLi.js
const t={};export{t as default};

Sorry, the diff of this file is too big to display

:root{--bg: #0e0f12;--panel: #16181d;--panel-2: #1c1f26;--line: #262a33;--text: #e8eaf0;--dim: #8b91a0;--accent: #ff8a3d;--accent-2: #ffb547;--good: #4ade80;--warn: #fbbf24;--bad: #f87171}*{box-sizing:border-box;margin:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font:13px/1.5 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.studio{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:0 14px;height:46px;background:var(--panel);border-bottom:1px solid var(--line);flex:none}.brand{font-weight:700;font-size:15px;letter-spacing:.2px}.brand-mark{color:var(--accent)}.brand-sub{color:var(--dim);font-weight:400}.busy{color:var(--accent-2)}.error{color:var(--bad);cursor:pointer;margin-left:auto;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panes{display:grid;grid-template-columns:250px 1fr 330px;flex:1;min-height:0}.rail{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto}.drop{margin:10px;padding:18px 10px;border:1.5px dashed var(--line);border-radius:8px;color:var(--dim);text-align:center;cursor:pointer;transition:border-color .15s}.drop:hover,.drop.over{border-color:var(--accent);color:var(--text)}.rail-section{padding:6px 12px 2px;color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.asset{display:flex;align-items:center;gap:8px;padding:7px 12px;cursor:pointer;border-left:2px solid transparent}.asset:hover{background:var(--panel-2)}.asset.selected{background:var(--panel-2);border-left-color:var(--accent)}.asset.variant{padding-left:26px}.asset-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-score{font-weight:600;font-size:11px}.asset-score.pass{color:var(--good)}.asset-score.fail{color:var(--bad)}.viewport{position:relative;min-width:0;background:radial-gradient(ellipse at 50% 40%,#191c22 0%,var(--bg) 75%)}.viewport-empty{display:flex;height:100%;align-items:center;justify-content:center;color:var(--dim);flex-direction:column;gap:8px}.compare-slider{position:absolute;left:10%;right:10%;bottom:22px;z-index:5}.compare-slider input{width:100%;accent-color:var(--accent)}.compare-labels{display:flex;justify-content:space-between;color:var(--dim);font-size:11px}.viewport-badge{position:absolute;top:10px;left:12px;color:var(--dim);font-size:11px;z-index:5}.inspector{background:var(--panel);border-left:1px solid var(--line);overflow-y:auto;padding:14px}.score-row{display:flex;align-items:center;gap:14px;margin-bottom:14px}.score-ring{position:relative;width:74px;height:74px;flex:none}.score-ring svg{transform:rotate(-90deg)}.score-num{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700}.verdict{font-weight:600}.verdict.pass{color:var(--good)}.verdict.fail{color:var(--bad)}.profile-name{color:var(--dim);font-size:12px}.budget{margin:4px 0 10px}.budget-row{margin-bottom:7px}.budget-head{display:flex;justify-content:space-between;font-size:12px;margin-bottom:2px}.budget-head .val{color:var(--dim)}.bar{height:4px;background:var(--line);border-radius:2px;overflow:hidden}.bar-fill{height:100%;border-radius:2px;background:var(--good)}.bar-fill.over{background:var(--bad)}.section-title{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);margin:14px 0 6px}.finding{padding:7px 9px;border:1px solid var(--line);border-radius:6px;margin-bottom:6px;font-size:12px}.finding .rule{font-family:ui-monospace,monospace;font-size:11px}.finding.error .rule{color:var(--bad)}.finding.warn .rule{color:var(--warn)}.finding.info .rule{color:var(--dim)}.finding .hint{color:var(--dim);margin-top:3px}.actions{display:flex;flex-direction:column;gap:8px;margin-top:10px}.row{display:flex;gap:8px;align-items:center}select,input[type=number],input[type=text]{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:6px 8px;font:inherit;width:100%}button{background:var(--accent);color:#1a1206;border:0;border-radius:6px;padding:8px 12px;font:inherit;font-weight:600;cursor:pointer;width:100%}button:hover{background:var(--accent-2)}button:disabled{opacity:.5;cursor:default}button.ghost{background:var(--panel-2);color:var(--text);border:1px solid var(--line)}label.check{display:flex;gap:6px;align-items:center;color:var(--dim);cursor:pointer}.delta{display:flex;justify-content:space-between;font-size:12px;padding:2px 0}.delta .to{color:var(--good);font-weight:600}.choice{margin:0 10px 10px;padding:10px;border:1px solid var(--line);border-radius:8px;display:flex;flex-direction:column;gap:7px}.choice-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.choice-sub{display:block;font-weight:400;font-size:11px;opacity:.75}.asset.task .asset-score{color:var(--accent-2);cursor:default}.mode-badge{color:var(--good);font-size:12px;border:1px solid var(--line);border-radius:999px;padding:3px 10px;cursor:help}
import{_ as o}from"./index-BahkaXqU.js";import{l as L,K as P}from"./local-engine-CLD2bJjW.js";async function k(){const[{execFile:r},{promisify:t},e,s,m,i]=await Promise.all([o(()=>import("node:child_process"),[]),o(()=>import("node:util"),[]),o(()=>import("node:fs/promises"),[]),o(()=>import("node:os"),[]),o(()=>import("node:path"),[]),o(()=>import("./empty-FmFgRqLi.js"),[])]);return{run:t(r),fs:e,os:s,path:m,sharp:i.default}}async function M(){const{run:r}=await k();for(const[t,e]of[["basisu",["-version"]],["toktx",["--version"]]])try{return await r(t,[...e]),t}catch{}return null}const O=/baseColor|emissive/i,S=/normal/i;async function $(r,t){var d;const e=t.encoder??await M();if(!e)throw new Error("No KTX2 encoder found. Install one: `brew install basis_universal` (preferred) or KTX-Software for `toktx`.");const s=r.getRoot().listTextures().filter(a=>a.getMimeType()!=="image/ktx2"&&a.getImage());if(s.length===0)return 0;const{run:m,fs:i,os:R,path:l,sharp:b}=await k(),_=await i.mkdtemp(l.join(R.tmpdir(),"glbforge-ktx2-"));try{for(const[a,c]of s.entries()){const p=L(c),n=p.some(h=>S.test(h)),x=!n&&p.some(h=>O.test(h)),w=b(Buffer.from(c.getImage())),u=await w.metadata(),E=Math.min(1,t.maxSize/Math.max(u.width??1,u.height??1)),T=Math.max(4,Math.floor((u.width??4)*E/4)*4),v=Math.max(4,Math.floor((u.height??4)*E/4)*4),f=l.join(_,`t${a}.png`),g=l.join(_,`t${a}.ktx2`);await i.writeFile(f,await w.resize(T,v,{fit:"fill"}).png().toBuffer());const I=e==="basisu"?[f,"-output_file",g,"-mipmap",...n?["-uastc","-uastc_level","2","-uastc_rdo_l","0.5"]:["-q","160"],...x?[]:["-linear"]]:["--genmipmap","--encode",n?"uastc":"etc1s",...n?["--uastc_quality","2","--zcmp","18"]:["--qlevel","160"],"--assign_oetf",x?"srgb":"linear",g,f];await m(e,I);const y=await i.readFile(g);c.setImage(new Uint8Array(y)).setMimeType("image/ktx2"),(d=t.log)==null||d.call(t,`ktx2 (${n?"uastc":"etc1s"}): ${c.getName()||"t"+a} ${T}x${v} -> ${(y.byteLength/1024).toFixed(0)}KB`)}return r.createExtension(P).setRequired(!0),s.length}finally{await i.rm(_,{recursive:!0,force:!0})}}export{M as detectKtx2Encoder,$ as ktx2Compress};

Sorry, the diff of this file is too big to display

+2
-2

@@ -7,4 +7,4 @@ <!doctype html>

<title>GLBForge Studio</title>
<script type="module" crossorigin src="/assets/index-BbdbbaKe.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-B7mOmjF7.css">
<script type="module" crossorigin src="/assets/index-BahkaXqU.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-COhCF8Xv.css">
</head>

@@ -11,0 +11,0 @@ <body>

{
"name": "@glbforge/studio",
"version": "0.2.0",
"version": "0.3.0",
"description": "GLBForge Studio — local web UI for the GLBForge pipeline, served by `glbforge ui`.",

@@ -21,9 +21,7 @@ "type": "module",

},
"dependencies": {},
"devDependencies": {
"react": "^18.3.0",
"react-dom": "^18.3.0",
"three": "^0.169.0",
"@gltf-transform/core": "^4.4.2",
"@gltf-transform/extensions": "^4.4.2",
"@react-three/drei": "^9.114.0",
"@react-three/fiber": "^8.18.0",
"@react-three/drei": "^9.114.0",
"@types/react": "^18.3.0",

@@ -33,5 +31,10 @@ "@types/react-dom": "^18.3.0",

"@vitejs/plugin-react": "^4.3.0",
"meshoptimizer": "^0.22.0",
"react": "^18.3.0",
"react-dom": "^18.3.0",
"three": "^0.169.0",
"typescript": "^5.6.0",
"vite": "^5.4.0",
"vitest": "^2.1.0"
"vitest": "^2.1.0",
"@glbforge/core": "^0.3.0"
},

@@ -41,4 +44,5 @@ "scripts": {

"build": "node copy-basis.mjs && vite build",
"test": "vitest run --passWithNoTests"
"test": "vitest run --passWithNoTests",
"build:site": "node copy-basis.mjs && vite build --base=/studio/ --outDir ../../site/studio --emptyOutDir"
}
}
:root{--bg: #0e0f12;--panel: #16181d;--panel-2: #1c1f26;--line: #262a33;--text: #e8eaf0;--dim: #8b91a0;--accent: #ff8a3d;--accent-2: #ffb547;--good: #4ade80;--warn: #fbbf24;--bad: #f87171}*{box-sizing:border-box;margin:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font:13px/1.5 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.studio{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:0 14px;height:46px;background:var(--panel);border-bottom:1px solid var(--line);flex:none}.brand{font-weight:700;font-size:15px;letter-spacing:.2px}.brand-mark{color:var(--accent)}.brand-sub{color:var(--dim);font-weight:400}.busy{color:var(--accent-2)}.error{color:var(--bad);cursor:pointer;margin-left:auto;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panes{display:grid;grid-template-columns:250px 1fr 330px;flex:1;min-height:0}.rail{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto}.drop{margin:10px;padding:18px 10px;border:1.5px dashed var(--line);border-radius:8px;color:var(--dim);text-align:center;cursor:pointer;transition:border-color .15s}.drop:hover,.drop.over{border-color:var(--accent);color:var(--text)}.rail-section{padding:6px 12px 2px;color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.asset{display:flex;align-items:center;gap:8px;padding:7px 12px;cursor:pointer;border-left:2px solid transparent}.asset:hover{background:var(--panel-2)}.asset.selected{background:var(--panel-2);border-left-color:var(--accent)}.asset.variant{padding-left:26px}.asset-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asset-score{font-weight:600;font-size:11px}.asset-score.pass{color:var(--good)}.asset-score.fail{color:var(--bad)}.viewport{position:relative;min-width:0;background:radial-gradient(ellipse at 50% 40%,#191c22 0%,var(--bg) 75%)}.viewport-empty{display:flex;height:100%;align-items:center;justify-content:center;color:var(--dim);flex-direction:column;gap:8px}.compare-slider{position:absolute;left:10%;right:10%;bottom:22px;z-index:5}.compare-slider input{width:100%;accent-color:var(--accent)}.compare-labels{display:flex;justify-content:space-between;color:var(--dim);font-size:11px}.viewport-badge{position:absolute;top:10px;left:12px;color:var(--dim);font-size:11px;z-index:5}.inspector{background:var(--panel);border-left:1px solid var(--line);overflow-y:auto;padding:14px}.score-row{display:flex;align-items:center;gap:14px;margin-bottom:14px}.score-ring{position:relative;width:74px;height:74px;flex:none}.score-ring svg{transform:rotate(-90deg)}.score-num{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700}.verdict{font-weight:600}.verdict.pass{color:var(--good)}.verdict.fail{color:var(--bad)}.profile-name{color:var(--dim);font-size:12px}.budget{margin:4px 0 10px}.budget-row{margin-bottom:7px}.budget-head{display:flex;justify-content:space-between;font-size:12px;margin-bottom:2px}.budget-head .val{color:var(--dim)}.bar{height:4px;background:var(--line);border-radius:2px;overflow:hidden}.bar-fill{height:100%;border-radius:2px;background:var(--good)}.bar-fill.over{background:var(--bad)}.section-title{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);margin:14px 0 6px}.finding{padding:7px 9px;border:1px solid var(--line);border-radius:6px;margin-bottom:6px;font-size:12px}.finding .rule{font-family:ui-monospace,monospace;font-size:11px}.finding.error .rule{color:var(--bad)}.finding.warn .rule{color:var(--warn)}.finding.info .rule{color:var(--dim)}.finding .hint{color:var(--dim);margin-top:3px}.actions{display:flex;flex-direction:column;gap:8px;margin-top:10px}.row{display:flex;gap:8px;align-items:center}select,input[type=number],input[type=text]{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:6px 8px;font:inherit;width:100%}button{background:var(--accent);color:#1a1206;border:0;border-radius:6px;padding:8px 12px;font:inherit;font-weight:600;cursor:pointer;width:100%}button:hover{background:var(--accent-2)}button:disabled{opacity:.5;cursor:default}button.ghost{background:var(--panel-2);color:var(--text);border:1px solid var(--line)}label.check{display:flex;gap:6px;align-items:center;color:var(--dim);cursor:pointer}.delta{display:flex;justify-content:space-between;font-size:12px;padding:2px 0}.delta .to{color:var(--good);font-weight:600}.choice{margin:0 10px 10px;padding:10px;border:1px solid var(--line);border-radius:8px;display:flex;flex-direction:column;gap:7px}.choice-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.choice-sub{display:block;font-weight:400;font-size:11px;opacity:.75}.asset.task .asset-score{color:var(--accent-2);cursor:default}

Sorry, the diff of this file is too big to display