cyrus-studio 1.0.0
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/README.md +37 -0
- package/dist/assets/AuthDialog-DMFwGmtj.js +1 -0
- package/dist/assets/CanvaSaveModal-BqSV1mos.js +9 -0
- package/dist/assets/CodingWorkspace-DXrWaTKZ.js +6 -0
- package/dist/assets/CreateAppDialog-DrBGyMVl.js +1236 -0
- package/dist/assets/CreateProjectDialog-JxYrZUv2.js +1 -0
- package/dist/assets/HistoryTimelineDialog-CAe6Hwyd.js +1 -0
- package/dist/assets/ImportModal-Cqy4Yhch.js +83 -0
- package/dist/assets/KeyboardShortcutsDialog-DqFAVzC4.js +1 -0
- package/dist/assets/LiveRuntimeWorkspace-yO2gI0_O.js +1 -0
- package/dist/assets/ShareExportDialog-BKmEqa2s.js +1 -0
- package/dist/assets/UserProfileDialog-BbU1jbKF.js +1 -0
- package/dist/assets/WelcomeOnboardingModal-BhTkmyMT.js +1 -0
- package/dist/assets/index-BewtY0Hs.js +793 -0
- package/dist/assets/index-CLJJIBPe.css +2 -0
- package/dist/assets/reactTsGenerator-CkYUg1Bs.js +1330 -0
- package/dist/assets/rolldown-runtime-W7wSyTde.js +1 -0
- package/dist/assets/themes-CNabH9CH.js +1 -0
- package/dist/assets/typechecker-BbGTunMD.js +2 -0
- package/dist/assets/vendor-firebase-DHYCsgNh.js +32 -0
- package/dist/assets/vendor-icons-M_KBtuE-.js +13 -0
- package/dist/assets/vendor-jszip-Cv4gVObP.js +2 -0
- package/dist/assets/vendor-react-BTEcvIpc.js +227 -0
- package/dist/assets/vendor-utils-3OgY5Lif.js +1 -0
- package/dist/favicon.svg +1 -0
- package/dist/icons.svg +24 -0
- package/dist/index.html +50 -0
- package/dist/login-bg.png +0 -0
- package/dist/test-sdk-sandbox.html +125 -0
- package/package.json +65 -0
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Cyrus — Visual Product Builder
|
|
2
|
+
|
|
3
|
+
Cyrus is a visual product builder: design on a canvas, preview live, and export React / Next.js / React Native source.
|
|
4
|
+
|
|
5
|
+
## Run locally
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install
|
|
9
|
+
npm run dev
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Then open **http://localhost:5173**
|
|
13
|
+
|
|
14
|
+
- App (Vite): port 5173
|
|
15
|
+
- API: port 8787 (`/api` is proxied)
|
|
16
|
+
|
|
17
|
+
Create an account on the login page (password at least 8 characters). Projects are stored on the local API (`server/data/cyrus.json`) for the signed-in user.
|
|
18
|
+
|
|
19
|
+
## What you add later (human steps)
|
|
20
|
+
|
|
21
|
+
Copy `.env.example` to `.env` and fill:
|
|
22
|
+
|
|
23
|
+
| Variable | Needed for |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `JWT_SECRET` | Production sessions |
|
|
26
|
+
| `GEMINI_API_KEY` / `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | AI generation (or paste a key in the AI panel) |
|
|
27
|
+
| `STRIPE_SECRET_KEY` + `STRIPE_PRICE_PRO` | Real paid plans |
|
|
28
|
+
| `VERCEL_TOKEN` / `NETLIFY_AUTH_TOKEN` / `GITHUB_TOKEN` | Real deploys of exported apps |
|
|
29
|
+
| Custom domain CNAME | Point your domain at `cname.cyrus.design` then click Verify |
|
|
30
|
+
|
|
31
|
+
Without those keys, the app still runs. Features that need a provider will return a real error instead of a fake success.
|
|
32
|
+
|
|
33
|
+
## Scripts
|
|
34
|
+
|
|
35
|
+
- `npm run dev` — API + UI
|
|
36
|
+
- `npm run build` — production UI build
|
|
37
|
+
- `npm test` — Vitest
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-W7wSyTde.js";import{an as t,cn as n,di as r,h as i,oi as a}from"./vendor-icons-M_KBtuE-.js";import{t as o}from"./vendor-react-BTEcvIpc.js";import{a as s}from"./themes-CNabH9CH.js";import{f as c,h as l,m as u}from"./index-BewtY0Hs.js";var d=e(r(),1),f=o(),p=`C:/Users/Shadow/Desktop/cyrus/src/components/dialogs/AuthDialog.tsx`;function m(){let{isAuthDialogOpen:e,closeAuthDialog:r,signIn:o,signUp:m,signInWithProvider:h}=l(),{addToast:g}=s(),[_,v]=(0,d.useState)(`signin`),[y,b]=(0,d.useState)(``),[x,S]=(0,d.useState)(``),[C,w]=(0,d.useState)(``),[T,E]=(0,d.useState)(!1),[D,O]=(0,d.useState)(null),[k,A]=(0,d.useState)(null),j=async e=>{if(e.preventDefault(),!y.trim()){A(`Please enter a valid email address.`);return}if(C.length<8){A(`Password must be at least 8 characters.`);return}E(!0),A(null);try{_===`signup`?(await m(y,x,C),g(`Account created successfully`,`success`)):(await o(y,C),g(`Signed in to Cyrus Workspace`,`success`)),b(``),S(``),w(``),r()}catch(e){let t=e instanceof Error?e.message:`Authentication failed. Please try again.`;A(t)}finally{E(!1)}},M=async e=>{O(e),A(null);try{await h(e),g(`Successfully signed in with ${e.charAt(0).toUpperCase()+e.slice(1)}`,`success`),r()}catch(t){let n=t instanceof Error?t.message:`Failed to sign in with ${e}`;A(n)}finally{O(null)}};return(0,f.jsxDEV)(c,{isOpen:e,onClose:r,title:_===`signin`?`Sign In to Cyrus`:`Create Cyrus Account`,subtitle:_===`signin`?`Enter your work email to access your cloud projects and team workspaces.`:`Create an account to save, sync, and deploy your visual products.`,maxWidth:`sm`,children:[(0,f.jsxDEV)(`div`,{className:`flex flex-col gap-3 mb-4`,children:[(0,f.jsxDEV)(`button`,{type:`button`,onClick:()=>M(`google`),disabled:D!==null||T,className:`w-full h-10 px-3 rounded-lg border border-[#e5e5ea] hover:border-[#d1d1d6] bg-white text-[#1d1d1f] font-medium text-xs flex items-center justify-center gap-2.5 transition-all shadow-sm cursor-pointer disabled:opacity-50`,children:[D===`google`?(0,f.jsxDEV)(`div`,{className:`w-3.5 h-3.5 border-2 border-slate-300 border-t-slate-700 rounded-full animate-spin`},void 0,!1,{fileName:p,lineNumber:90,columnNumber:13},this):(0,f.jsxDEV)(`svg`,{className:`w-4 h-4`,viewBox:`0 0 24 24`,children:[(0,f.jsxDEV)(`path`,{fill:`#4285F4`,d:`M23.745 12.27c0-.7-.06-1.4-.19-2.07H12v4.51h6.6c-.29 1.52-1.14 2.82-2.4 3.68v3.05h3.88c2.27-2.09 3.665-5.17 3.665-9.17z`},void 0,!1,{fileName:p,lineNumber:93,columnNumber:15},this),(0,f.jsxDEV)(`path`,{fill:`#34A853`,d:`M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.88-3.05c-1.08.72-2.45 1.16-4.05 1.16-3.12 0-5.77-2.1-6.72-4.93H1.29v3.15C3.26 21.3 7.31 24 12 24z`},void 0,!1,{fileName:p,lineNumber:94,columnNumber:15},this),(0,f.jsxDEV)(`path`,{fill:`#FBBC05`,d:`M5.28 14.27A7.17 7.17 0 0 1 4.9 12c0-.79.14-1.56.38-2.27V6.58H1.29A11.96 11.96 0 0 0 0 12c0 1.92.46 3.74 1.29 5.42l3.99-3.15z`},void 0,!1,{fileName:p,lineNumber:95,columnNumber:15},this),(0,f.jsxDEV)(`path`,{fill:`#EA4335`,d:`M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.31 0 3.26 2.7 1.29 6.58l3.99 3.15c.95-2.83 3.6-4.98 6.72-4.98z`},void 0,!1,{fileName:p,lineNumber:96,columnNumber:15},this)]},void 0,!0,{fileName:p,lineNumber:92,columnNumber:13},this),(0,f.jsxDEV)(`span`,{children:`Continue with Google`},void 0,!1,{fileName:p,lineNumber:99,columnNumber:11},this)]},void 0,!0,{fileName:p,lineNumber:83,columnNumber:9},this),(0,f.jsxDEV)(`button`,{type:`button`,onClick:()=>M(`github`),disabled:D!==null||T,className:`w-full h-10 px-3 rounded-lg border border-[#e5e5ea] hover:border-[#d1d1d6] bg-white text-[#1d1d1f] font-medium text-xs flex items-center justify-center gap-2.5 transition-all shadow-sm cursor-pointer disabled:opacity-50`,children:[D===`github`?(0,f.jsxDEV)(`div`,{className:`w-3.5 h-3.5 border-2 border-slate-300 border-t-slate-700 rounded-full animate-spin`},void 0,!1,{fileName:p,lineNumber:110,columnNumber:13},this):(0,f.jsxDEV)(`svg`,{className:`w-4 h-4 shrink-0 fill-current`,viewBox:`0 0 24 24`,children:(0,f.jsxDEV)(`path`,{d:`M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z`},void 0,!1,{fileName:p,lineNumber:113,columnNumber:15},this)},void 0,!1,{fileName:p,lineNumber:112,columnNumber:13},this),(0,f.jsxDEV)(`span`,{children:`Continue with GitHub`},void 0,!1,{fileName:p,lineNumber:116,columnNumber:11},this)]},void 0,!0,{fileName:p,lineNumber:103,columnNumber:9},this)]},void 0,!0,{fileName:p,lineNumber:81,columnNumber:7},this),(0,f.jsxDEV)(`div`,{className:`relative flex items-center justify-center my-4`,children:[(0,f.jsxDEV)(`div`,{className:`border-t border-[#e5e5ea] w-full`},void 0,!1,{fileName:p,lineNumber:121,columnNumber:9},this),(0,f.jsxDEV)(`span`,{className:`bg-white px-2.5 text-[10px] uppercase tracking-wider text-[#86868b] font-mono absolute`,children:`Or continue with email`},void 0,!1,{fileName:p,lineNumber:122,columnNumber:9},this)]},void 0,!0,{fileName:p,lineNumber:120,columnNumber:7},this),(0,f.jsxDEV)(`form`,{onSubmit:j,className:`flex flex-col gap-4`,children:[k&&(0,f.jsxDEV)(`div`,{className:`p-3 rounded-[10px] bg-[#ff3b30]/10 border border-[#ff3b30]/20 text-[#ff3b30] text-[12px]`,children:k},void 0,!1,{fileName:p,lineNumber:129,columnNumber:11},this),_===`signup`&&(0,f.jsxDEV)(`div`,{className:`flex flex-col gap-1`,children:[(0,f.jsxDEV)(`label`,{className:`text-[12px] font-medium text-[#1d1d1f]`,children:`Your Name`},void 0,!1,{fileName:p,lineNumber:136,columnNumber:13},this),(0,f.jsxDEV)(`div`,{className:`relative flex items-center`,children:[(0,f.jsxDEV)(i,{className:`w-4 h-4 text-[#86868b] absolute left-3 pointer-events-none`},void 0,!1,{fileName:p,lineNumber:138,columnNumber:15},this),(0,f.jsxDEV)(`input`,{type:`text`,value:x,onChange:e=>S(e.target.value),placeholder:`Alex Rivera`,className:`w-full h-10 pl-9 pr-3 rounded-[8px] border border-[#e5e5ea] bg-[#f4f4f6] focus:bg-white focus:border-[#0071e3] text-[13px] text-[#1d1d1f] focus:outline-none transition-apple`},void 0,!1,{fileName:p,lineNumber:139,columnNumber:15},this)]},void 0,!0,{fileName:p,lineNumber:137,columnNumber:13},this)]},void 0,!0,{fileName:p,lineNumber:135,columnNumber:11},this),(0,f.jsxDEV)(`div`,{className:`flex flex-col gap-1`,children:[(0,f.jsxDEV)(`label`,{className:`text-[12px] font-medium text-[#1d1d1f]`,children:`Work Email`},void 0,!1,{fileName:p,lineNumber:151,columnNumber:11},this),(0,f.jsxDEV)(`div`,{className:`relative flex items-center`,children:[(0,f.jsxDEV)(t,{className:`w-4 h-4 text-[#86868b] absolute left-3 pointer-events-none`},void 0,!1,{fileName:p,lineNumber:153,columnNumber:13},this),(0,f.jsxDEV)(`input`,{type:`email`,value:y,onChange:e=>b(e.target.value),placeholder:`alex@company.com`,required:!0,className:`w-full h-10 pl-9 pr-3 rounded-[8px] border border-[#e5e5ea] bg-[#f4f4f6] focus:bg-white focus:border-[#0071e3] text-[13px] text-[#1d1d1f] focus:outline-none transition-apple`},void 0,!1,{fileName:p,lineNumber:154,columnNumber:13},this)]},void 0,!0,{fileName:p,lineNumber:152,columnNumber:11},this)]},void 0,!0,{fileName:p,lineNumber:150,columnNumber:9},this),(0,f.jsxDEV)(`div`,{className:`flex flex-col gap-1`,children:[(0,f.jsxDEV)(`label`,{className:`text-[12px] font-medium text-[#1d1d1f]`,children:`Password`},void 0,!1,{fileName:p,lineNumber:166,columnNumber:11},this),(0,f.jsxDEV)(`div`,{className:`relative flex items-center`,children:[(0,f.jsxDEV)(n,{className:`w-4 h-4 text-[#86868b] absolute left-3 pointer-events-none`},void 0,!1,{fileName:p,lineNumber:168,columnNumber:13},this),(0,f.jsxDEV)(`input`,{type:`password`,value:C,onChange:e=>w(e.target.value),placeholder:`••••••••••••`,required:!0,minLength:8,className:`w-full h-10 pl-9 pr-3 rounded-[8px] border border-[#e5e5ea] bg-[#f4f4f6] focus:bg-white focus:border-[#0071e3] text-[13px] text-[#1d1d1f] focus:outline-none transition-apple`},void 0,!1,{fileName:p,lineNumber:169,columnNumber:13},this)]},void 0,!0,{fileName:p,lineNumber:167,columnNumber:11},this)]},void 0,!0,{fileName:p,lineNumber:165,columnNumber:9},this),(0,f.jsxDEV)(u,{variant:`primary`,size:`md`,type:`submit`,isLoading:T,icon:(0,f.jsxDEV)(a,{className:`w-4 h-4`},void 0,!1,{fileName:p,lineNumber:186,columnNumber:17},this),className:`mt-2 w-full justify-center`,children:_===`signin`?`Sign In`:`Create Account`},void 0,!1,{fileName:p,lineNumber:181,columnNumber:9},this),(0,f.jsxDEV)(`div`,{className:`pt-2 border-t border-[#f4f4f6] text-center text-[12px] text-[#86868b]`,children:_===`signin`?(0,f.jsxDEV)(`span`,{children:[`Don't have an account?`,` `,(0,f.jsxDEV)(`button`,{type:`button`,onClick:()=>v(`signup`),className:`text-[#0071e3] font-semibold hover:underline cursor-pointer`,children:`Create one`},void 0,!1,{fileName:p,lineNumber:196,columnNumber:15},this)]},void 0,!0,{fileName:p,lineNumber:194,columnNumber:13},this):(0,f.jsxDEV)(`span`,{children:[`Already have an account?`,` `,(0,f.jsxDEV)(`button`,{type:`button`,onClick:()=>v(`signin`),className:`text-[#0071e3] font-semibold hover:underline cursor-pointer`,children:`Sign in`},void 0,!1,{fileName:p,lineNumber:207,columnNumber:15},this)]},void 0,!0,{fileName:p,lineNumber:205,columnNumber:13},this)},void 0,!1,{fileName:p,lineNumber:192,columnNumber:9},this)]},void 0,!0,{fileName:p,lineNumber:127,columnNumber:7},this)]},void 0,!0,{fileName:p,lineNumber:70,columnNumber:5},this)}export{m as AuthDialog};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-W7wSyTde.js";import{J as t,Rr as n,Xn as r,di as i,er as a,ht as o,lr as s,vn as c,wn as l,zr as u}from"./vendor-icons-M_KBtuE-.js";import{t as d}from"./vendor-react-BTEcvIpc.js";import{c as f}from"./vendor-utils-3OgY5Lif.js";import{a as p}from"./themes-CNabH9CH.js";import{f as m,i as h,l as g,n as _,r as v}from"./index-BewtY0Hs.js";import{i as y,r as b,t as x}from"./reactTsGenerator-CkYUg1Bs.js";var S=e(i(),1);function C(e,t,n,r,i,a){let o=Math.min(a,r/2,i/2);e.beginPath(),e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.quadraticCurveTo(t+r,n,t+r,n+o),e.lineTo(t+r,n+i-o),e.quadraticCurveTo(t+r,n+i,t+r-o,n+i),e.lineTo(t+o,n+i),e.quadraticCurveTo(t,n+i,t,n+i-o),e.lineTo(t,n+o),e.quadraticCurveTo(t,n,t+o,n),e.closePath()}async function w(e,t={}){let n=t.scale||1,r=t.transparentBackground||!1,i=(e.settings?.width||1440)*n,a=(e.settings?.height||900)*n,o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Canvas 2D context not available`);s.imageSmoothingEnabled=!0,s.imageSmoothingQuality=`high`,r||(s.fillStyle=e.settings?.backgroundColor||`#ffffff`,s.fillRect(0,0,i,a));let c=[...e.elements||[]].sort((e,t)=>(e.zIndex||1)-(t.zIndex||1)),l=Array.from(new Set(c.map(e=>e.type===`image`&&(e.content?.url||e.content?.src)||null).filter(Boolean))),u={};l.length>0&&(await Promise.all(l.map(e=>new Promise(t=>{let n=new Image;n.crossOrigin=`anonymous`,n.onload=()=>t({url:e,img:n}),n.onerror=()=>t({url:e,img:null}),n.src=e})))).forEach(e=>{e.img&&(u[e.url]=e.img)});for(let e of c){s.save();let t=e.x*n,r=e.y*n,i=e.width*n,a=e.height*n,o=e.styles?.backgroundColor||`transparent`,c=e.styles?.borderColor||`transparent`,l=(e.styles?.borderWidth||0)*n,d=(e.styles?.borderRadius||0)*n,f=e.styles?.textColor||`#1d1d1f`,p=(e.styles?.fontSize||14)*n,m=e.styles?.fontWeight||`normal`;if(e.rotation&&(s.translate(t+i/2,r+a/2),s.rotate(e.rotation*Math.PI/180),s.translate(-(t+i/2),-(r+a/2))),e.content?.pathD||e.type===`svg`){let i=e.styles?.strokeColor||e.styles?.textColor||`#ff3b30`;if((e.styles?.strokeWidth||3.5)*n,e.content?.pathD)try{let a=new Path2D(e.content.pathD);s.save(),s.translate(t,r),s.scale(n,n),s.strokeStyle=i,s.lineWidth=e.styles?.strokeWidth||3.5,s.lineCap=`round`,s.lineJoin=`round`,s.stroke(a),s.restore()}catch{}s.restore();continue}if((o!==`transparent`||l>0)&&(d>0?C(s,t,r,i,a,d):(s.beginPath(),s.rect(t,r,i,a)),o!==`transparent`&&(s.fillStyle=o,s.fill()),l>0&&c!==`transparent`&&(s.strokeStyle=c,s.lineWidth=l,s.stroke())),e.type===`image`){let n=e.content?.url||e.content?.src;n&&u[n]&&(d>0?(s.save(),C(s,t,r,i,a,d),s.clip(),s.drawImage(u[n],t,r,i,a),s.restore()):s.drawImage(u[n],t,r,i,a))}let h=e.content?.text||e.content?.label||e.content?.title||e.content?.headline||``;if(h){s.fillStyle=f,s.font=`${m} ${p}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,s.textBaseline=`middle`;let o=e.styles?.textAlign||`left`;o===`center`?(s.textAlign=`center`,s.fillText(h,t+i/2,r+a/2)):o===`right`?(s.textAlign=`right`,s.fillText(h,t+i-12*n,r+a/2)):(s.textAlign=`left`,s.fillText(h,t+12*n,r+a/2))}e.content?.badge&&(s.font=`600 ${11*n}px -apple-system, sans-serif`,s.fillStyle=`#0071e3`,s.textAlign=`left`,s.fillText(String(e.content.badge),t+16*n,r+24*n)),e.content?.value&&(s.font=`bold ${28*n}px -apple-system, sans-serif`,s.fillStyle=f,s.textAlign=`left`,s.fillText(String(e.content.value),t+16*n,r+60*n)),e.content?.change&&(s.font=`600 ${12*n}px -apple-system, sans-serif`,s.fillStyle=`#34c759`,s.textAlign=`left`,s.fillText(String(e.content.change),t+16*n,r+90*n)),s.restore()}return o}async function T(e,t,n,r=.95){return new Promise((i,a)=>{e.toBlob(e=>{if(!e){a(Error(`Failed to create image blob`));return}let r=URL.createObjectURL(e),o=document.createElement(`a`);o.href=r,o.download=`${t}.${n===`jpeg`?`jpg`:`png`}`,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>URL.revokeObjectURL(r),1e3),i()},n===`jpeg`?`image/jpeg`:`image/png`,r)})}var E=d(),D=`C:/Users/Shadow/Desktop/cyrus/src/components/dialogs/CanvaSaveModal.tsx`,O=[{id:`png`,name:`PNG`,badge:`Suggested`,description:`High quality image. Best for complex designs & graphics`,icon:(0,E.jsxDEV)(l,{className:`w-4 h-4 text-[#7d2ae8]`},void 0,!1,{fileName:D,lineNumber:48,columnNumber:11},void 0)},{id:`jpeg`,name:`JPG`,description:`Small file size image. Best for quick sharing & web`,icon:(0,E.jsxDEV)(l,{className:`w-4 h-4 text-emerald-600`},void 0,!1,{fileName:D,lineNumber:54,columnNumber:11},void 0)},{id:`pdf`,name:`PDF Standard`,description:`Best for multi-page documents and emailing`,icon:(0,E.jsxDEV)(r,{className:`w-4 h-4 text-[#ff2d55]`},void 0,!1,{fileName:D,lineNumber:60,columnNumber:11},void 0)},{id:`svg`,name:`SVG`,description:`Sharp vector graphics at any screen resolution`,icon:(0,E.jsxDEV)(t,{className:`w-4 h-4 text-amber-500`},void 0,!1,{fileName:D,lineNumber:66,columnNumber:11},void 0)},{id:`cyrus`,name:`Cyrus Project (.cyrus)`,description:`Raw editable project backup for laptop & phone`,icon:(0,E.jsxDEV)(c,{className:`w-4 h-4 text-[#0071e3]`},void 0,!1,{fileName:D,lineNumber:72,columnNumber:11},void 0)},{id:`html`,name:`Standalone Web App (.html)`,description:`Self-contained offline webpage prototype`,icon:(0,E.jsxDEV)(a,{className:`w-4 h-4 text-indigo-500`},void 0,!1,{fileName:D,lineNumber:78,columnNumber:11},void 0)},{id:`zip`,name:`React App Code (.zip)`,description:`Production React 19 + TypeScript + Tailwind bundle`,icon:(0,E.jsxDEV)(a,{className:`w-4 h-4 text-[#7d2ae8]`},void 0,!1,{fileName:D,lineNumber:84,columnNumber:11},void 0)}];function k({isOpen:e,onClose:t}){let{activeProject:r,activePageId:i}=g(),{addToast:a}=p(),[c,l]=(0,S.useState)(`png`),[d,C]=(0,S.useState)(1),[k,A]=(0,S.useState)(!1),[j,M]=(0,S.useState)(!1),[N,P]=(0,S.useState)([]),[F,I]=(0,S.useState)(!1),[L,R]=(0,S.useState)(!1),[z,B]=(0,S.useState)(0),[V,H]=(0,S.useState)(`Preparing...`),[U,W]=(0,S.useState)(!1),[G,K]=(0,S.useState)(``);if((0,S.useEffect)(()=>{r&&P(r.pages.map(e=>e.id)),W(!1),B(0)},[e,r]),!r)return null;let q=r.pages.find(e=>e.id===i)||r.pages[0],J=q?.settings?.width||1440,Y=q?.settings?.height||900,X=Math.round(J*d),Z=Math.round(Y*d),Q=O.find(e=>e.id===c)||O[0],$=async()=>{R(!0),B(15),H(`Preparing your design...`);try{let e=r.name.toLowerCase().replace(/[^a-z0-9_-]/gi,`_`),t=r.pages.filter(e=>N.includes(e.id));if(t.length===0&&t.push(q),c===`png`||c===`jpeg`){let n=j?.75:.95;for(let r=0;r<t.length;r++){let i=t[r];B(40+Math.round(r/t.length*35)),H(`Rendering high-res canvas (${r+1}/${t.length})...`);let a=await w(i,{scale:d,transparentBackground:c===`png`&&k});H(`Creating image file (${r+1}/${t.length})...`);let o=t.length>1?`_${r+1}`:``;await T(a,`${e}_${i.name.toLowerCase().replace(/[^a-z0-9_-]/gi,`_`)}${o}`,c,n)}K(`${e}.${c===`jpeg`?`jpg`:`png`} (x${t.length})`)}else if(c===`svg`){B(60),H(`Exporting vector paths...`);for(let e=0;e<t.length;e++)await v(r,t[e]);K(`${e}.svg (x${t.length})`)}else if(c===`cyrus`){B(60),H(`Saving Cyrus project...`);let e=await h(r);K(e.filename)}else if(c===`html`){B(60),H(`Generating offline webpage...`);let e=await _(r,q.id);K(e.filename)}else if(c===`pdf`){B(50),H(`Generating print document...`);let n=[];for(let e=0;e<t.length;e++){B(50+Math.round(e/t.length*35));let r=await w(t[e],{scale:2});n.push(r.toDataURL(`image/png`))}let i=window.open(``,`_blank`);if(i){let e=n.map(e=>`<img src="${e}" style="max-width:100%;height:auto;page-break-after:always;display:block;margin:0 auto;" />`).join(``);i.document.write(`
|
|
2
|
+
<html>
|
|
3
|
+
<head><title>${r.name} - PDF</title></head>
|
|
4
|
+
<body style="margin:0;background:#fff;">
|
|
5
|
+
${e}
|
|
6
|
+
<script>window.onload = () => { setTimeout(() => { window.print(); }, 500); };<\/script>
|
|
7
|
+
</body>
|
|
8
|
+
</html>
|
|
9
|
+
`),i.document.close()}K(`${e}.pdf`)}else if(c===`zip`){B(50),H(`Generating React source code...`);let t=b(r,`react`),n=x(t);B(85),H(`Zipping package...`),await y(r.name,n,`react`),K(`${e}_react_app.zip`)}B(100),H(`Download completed!`),W(!0),a(`Downloaded "${r.name}" to your device!`,`success`)}catch(e){console.error(`Download error:`,e),a(`Download failed. Please try again.`,`error`)}finally{R(!1)}};return(0,E.jsxDEV)(m,{isOpen:e,onClose:t,title:``,maxWidth:`md`,className:`p-0 overflow-hidden`,children:(0,E.jsxDEV)(`div`,{className:`flex flex-col bg-white dark:bg-[#1c1c1e] text-[#1d1d1f] dark:text-[#f5f5f7] select-none`,children:[(0,E.jsxDEV)(`div`,{className:`px-6 py-4 border-b border-[#e5e5ea] dark:border-[#2c2c2e] flex items-center justify-between`,children:(0,E.jsxDEV)(`div`,{className:`flex items-center gap-2.5`,children:[(0,E.jsxDEV)(`div`,{className:`w-8 h-8 rounded-lg bg-gradient-to-tr from-[#7d2ae8] to-[#0071e3] text-white flex items-center justify-center shadow-2xs`,children:(0,E.jsxDEV)(s,{className:`w-4 h-4`},void 0,!1,{fileName:D,lineNumber:233,columnNumber:15},this)},void 0,!1,{fileName:D,lineNumber:232,columnNumber:13},this),(0,E.jsxDEV)(`div`,{children:[(0,E.jsxDEV)(`h3`,{className:`text-[16px] font-bold tracking-tight`,children:`Download`},void 0,!1,{fileName:D,lineNumber:236,columnNumber:15},this),(0,E.jsxDEV)(`p`,{className:`text-[11.5px] text-[#86868b] dark:text-[#8e8e93]`,children:`Save high quality files directly to your laptop or phone`},void 0,!1,{fileName:D,lineNumber:237,columnNumber:15},this)]},void 0,!0,{fileName:D,lineNumber:235,columnNumber:13},this)]},void 0,!0,{fileName:D,lineNumber:231,columnNumber:11},this)},void 0,!1,{fileName:D,lineNumber:230,columnNumber:9},this),U?(0,E.jsxDEV)(`div`,{className:`p-8 flex flex-col items-center text-center gap-4 animate-fade-in`,children:[(0,E.jsxDEV)(`div`,{className:`w-16 h-16 rounded-2xl bg-gradient-to-tr from-[#7d2ae8] to-[#0071e3] text-white flex items-center justify-center shadow-apple-md text-[28px]`,children:`🎉`},void 0,!1,{fileName:D,lineNumber:440,columnNumber:13},this),(0,E.jsxDEV)(`div`,{children:[(0,E.jsxDEV)(`h3`,{className:`text-[18px] font-extrabold text-[#1d1d1f] dark:text-[#f5f5f7]`,children:`You downloaded your design!`},void 0,!1,{fileName:D,lineNumber:445,columnNumber:15},this),(0,E.jsxDEV)(`p`,{className:`text-[12.5px] text-[#6e6e73] dark:text-[#8e8e93] mt-1 max-w-sm`,children:[(0,E.jsxDEV)(`strong`,{children:G},void 0,!1,{fileName:D,lineNumber:449,columnNumber:17},this),` has been saved directly to your laptop or phone Downloads folder.`]},void 0,!0,{fileName:D,lineNumber:448,columnNumber:15},this)]},void 0,!0,{fileName:D,lineNumber:444,columnNumber:13},this),(0,E.jsxDEV)(`div`,{className:`flex flex-col sm:flex-row gap-2.5 w-full max-w-xs pt-3`,children:[(0,E.jsxDEV)(`button`,{type:`button`,onClick:$,className:`flex-1 py-2.5 px-3 rounded-xl bg-[#f4f4f6] dark:bg-[#2c2c2e] hover:bg-[#ebebee] dark:hover:bg-[#3a3a3c] text-[#1d1d1f] dark:text-[#f5f5f7] text-[12.5px] font-semibold flex items-center justify-center gap-1.5 transition-colors cursor-pointer border border-[#e5e5ea] dark:border-[#38383a]`,children:[(0,E.jsxDEV)(o,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:D,lineNumber:459,columnNumber:17},this),(0,E.jsxDEV)(`span`,{children:`Download again`},void 0,!1,{fileName:D,lineNumber:460,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:454,columnNumber:15},this),(0,E.jsxDEV)(`button`,{type:`button`,onClick:t,className:`flex-1 py-2.5 px-3 rounded-xl bg-[#7d2ae8] hover:bg-[#6b21ce] text-white text-[12.5px] font-bold flex items-center justify-center gap-1.5 shadow-2xs transition-colors cursor-pointer`,children:(0,E.jsxDEV)(`span`,{children:`Continue Editing`},void 0,!1,{fileName:D,lineNumber:468,columnNumber:17},this)},void 0,!1,{fileName:D,lineNumber:463,columnNumber:15},this)]},void 0,!0,{fileName:D,lineNumber:453,columnNumber:13},this)]},void 0,!0,{fileName:D,lineNumber:439,columnNumber:11},this):(0,E.jsxDEV)(`div`,{className:`p-6 flex flex-col gap-5`,children:[(0,E.jsxDEV)(`div`,{className:`flex flex-col gap-1.5 relative`,children:[(0,E.jsxDEV)(`label`,{className:`text-[12px] font-semibold text-[#1d1d1f] dark:text-[#f5f5f7]`,children:`File type`},void 0,!1,{fileName:D,lineNumber:249,columnNumber:15},this),(0,E.jsxDEV)(`button`,{type:`button`,onClick:()=>I(!F),className:`w-full p-3 rounded-xl border border-[#e5e5ea] dark:border-[#38383a] bg-[#fbfbfd] dark:bg-[#2c2c2e] hover:border-[#7d2ae8] transition-all flex items-center justify-between cursor-pointer shadow-2xs`,children:[(0,E.jsxDEV)(`div`,{className:`flex items-center gap-3 text-left`,children:[(0,E.jsxDEV)(`div`,{className:`w-8 h-8 rounded-lg bg-white dark:bg-[#1c1c1e] border border-[#e5e5ea] dark:border-[#38383a] flex items-center justify-center shadow-2xs shrink-0`,children:Q.icon},void 0,!1,{fileName:D,lineNumber:259,columnNumber:19},this),(0,E.jsxDEV)(`div`,{children:[(0,E.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsxDEV)(`span`,{className:`text-[13px] font-bold text-[#1d1d1f] dark:text-[#f5f5f7]`,children:Q.name},void 0,!1,{fileName:D,lineNumber:264,columnNumber:23},this),Q.badge&&(0,E.jsxDEV)(`span`,{className:`px-1.5 py-0.5 rounded-full bg-[#7d2ae8]/10 text-[#7d2ae8] dark:text-[#9d52ff] text-[10px] font-bold`,children:Q.badge},void 0,!1,{fileName:D,lineNumber:268,columnNumber:25},this)]},void 0,!0,{fileName:D,lineNumber:263,columnNumber:21},this),(0,E.jsxDEV)(`p`,{className:`text-[11px] text-[#86868b] dark:text-[#8e8e93]`,children:Q.description},void 0,!1,{fileName:D,lineNumber:273,columnNumber:21},this)]},void 0,!0,{fileName:D,lineNumber:262,columnNumber:19},this)]},void 0,!0,{fileName:D,lineNumber:258,columnNumber:17},this),(0,E.jsxDEV)(n,{className:f(`w-4 h-4 text-[#86868b] transition-transform shrink-0`,F&&`rotate-180`)},void 0,!1,{fileName:D,lineNumber:279,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:253,columnNumber:15},this),F&&(0,E.jsxDEV)(`div`,{className:`absolute top-full left-0 right-0 mt-1 bg-white dark:bg-[#2c2c2e] rounded-xl border border-[#e5e5ea] dark:border-[#38383a] shadow-apple-lg p-1.5 z-50 flex flex-col gap-1 max-h-72 overflow-y-auto`,children:O.map(e=>(0,E.jsxDEV)(`button`,{type:`button`,onClick:()=>{l(e.id),I(!1)},className:f(`w-full p-2.5 rounded-lg flex items-center justify-between text-left transition-colors cursor-pointer`,c===e.id?`bg-[#7d2ae8]/10 dark:bg-[#7d2ae8]/20 text-[#7d2ae8] dark:text-[#9d52ff]`:`hover:bg-[#f4f4f6] dark:hover:bg-[#38383a] text-[#1d1d1f] dark:text-[#f5f5f7]`),children:[(0,E.jsxDEV)(`div`,{className:`flex items-center gap-2.5`,children:[(0,E.jsxDEV)(`div`,{className:`w-7 h-7 rounded-md bg-white dark:bg-[#1c1c1e] border border-[#e5e5ea] dark:border-[#38383a] flex items-center justify-center shrink-0`,children:e.icon},void 0,!1,{fileName:D,lineNumber:306,columnNumber:25},this),(0,E.jsxDEV)(`div`,{children:[(0,E.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsxDEV)(`span`,{className:`text-[12.5px] font-bold`,children:e.name},void 0,!1,{fileName:D,lineNumber:311,columnNumber:29},this),e.badge&&(0,E.jsxDEV)(`span`,{className:`px-1.5 py-0.5 rounded-full bg-[#7d2ae8] text-white text-[9px] font-bold`,children:e.badge},void 0,!1,{fileName:D,lineNumber:313,columnNumber:31},this)]},void 0,!0,{fileName:D,lineNumber:310,columnNumber:27},this),(0,E.jsxDEV)(`p`,{className:`text-[10.5px] text-[#86868b] dark:text-[#8e8e93]`,children:e.description},void 0,!1,{fileName:D,lineNumber:318,columnNumber:27},this)]},void 0,!0,{fileName:D,lineNumber:309,columnNumber:25},this)]},void 0,!0,{fileName:D,lineNumber:305,columnNumber:23},this),c===e.id&&(0,E.jsxDEV)(u,{className:`w-4 h-4 text-[#7d2ae8]`},void 0,!1,{fileName:D,lineNumber:324,columnNumber:53},this)]},e.id,!0,{fileName:D,lineNumber:291,columnNumber:21},this))},void 0,!1,{fileName:D,lineNumber:289,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:248,columnNumber:13},this),(c===`png`||c===`jpeg`)&&(0,E.jsxDEV)(`div`,{className:`flex flex-col gap-2 p-3.5 rounded-xl bg-[#fbfbfd] dark:bg-[#2c2c2e] border border-[#e5e5ea] dark:border-[#38383a]`,children:[(0,E.jsxDEV)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsxDEV)(`span`,{className:`text-[12px] font-semibold text-[#1d1d1f] dark:text-[#f5f5f7]`,children:[`Size (`,d,`x)`]},void 0,!0,{fileName:D,lineNumber:335,columnNumber:19},this),(0,E.jsxDEV)(`span`,{className:`text-[11.5px] font-mono text-[#7d2ae8] dark:text-[#9d52ff] font-semibold`,children:[X,` × `,Z,` px`]},void 0,!0,{fileName:D,lineNumber:338,columnNumber:19},this)]},void 0,!0,{fileName:D,lineNumber:334,columnNumber:17},this),(0,E.jsxDEV)(`div`,{className:`flex items-center gap-3`,children:[(0,E.jsxDEV)(`input`,{type:`range`,min:.5,max:3,step:.5,value:d,onChange:e=>C(Number(e.target.value)),className:`flex-1 accent-[#7d2ae8] cursor-pointer`},void 0,!1,{fileName:D,lineNumber:344,columnNumber:19},this),(0,E.jsxDEV)(`div`,{className:`flex gap-1`,children:[1,2,3].map(e=>(0,E.jsxDEV)(`button`,{type:`button`,onClick:()=>C(e),className:f(`px-2 py-0.5 rounded text-[11px] font-bold transition-colors cursor-pointer`,d===e?`bg-[#7d2ae8] text-white`:`bg-white dark:bg-[#1c1c1e] text-[#6e6e73] hover:text-[#1d1d1f]`),children:[e,`x`]},e,!0,{fileName:D,lineNumber:355,columnNumber:23},this))},void 0,!1,{fileName:D,lineNumber:353,columnNumber:19},this)]},void 0,!0,{fileName:D,lineNumber:343,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:333,columnNumber:15},this),c===`png`&&(0,E.jsxDEV)(`label`,{className:`flex items-center gap-2.5 text-[12.5px] font-medium text-[#1d1d1f] dark:text-[#f5f5f7] cursor-pointer`,children:[(0,E.jsxDEV)(`input`,{type:`checkbox`,checked:k,onChange:e=>A(e.target.checked),className:`w-4 h-4 rounded accent-[#7d2ae8] cursor-pointer`},void 0,!1,{fileName:D,lineNumber:377,columnNumber:17},this),(0,E.jsxDEV)(`span`,{children:`Transparent background`},void 0,!1,{fileName:D,lineNumber:383,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:376,columnNumber:15},this),(c===`png`||c===`jpeg`)&&(0,E.jsxDEV)(`label`,{className:`flex items-center gap-2.5 text-[12.5px] font-medium text-[#1d1d1f] dark:text-[#f5f5f7] cursor-pointer`,children:[(0,E.jsxDEV)(`input`,{type:`checkbox`,checked:j,onChange:e=>M(e.target.checked),className:`w-4 h-4 rounded accent-[#7d2ae8] cursor-pointer`},void 0,!1,{fileName:D,lineNumber:389,columnNumber:17},this),(0,E.jsxDEV)(`span`,{children:`Compress file (lower quality, smaller size)`},void 0,!1,{fileName:D,lineNumber:395,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:388,columnNumber:15},this),(0,E.jsxDEV)(`div`,{className:`flex items-center justify-between py-2 border-t border-[#e5e5ea] dark:border-[#38383a]`,children:[(0,E.jsxDEV)(`span`,{className:`text-[12px] font-medium text-[#6e6e73] dark:text-[#8e8e93]`,children:`Selected Page`},void 0,!1,{fileName:D,lineNumber:401,columnNumber:15},this),(0,E.jsxDEV)(`span`,{className:`text-[12px] font-bold text-[#1d1d1f] dark:text-[#f5f5f7]`,children:[q.name,` (1 of `,r.pages.length,`)`]},void 0,!0,{fileName:D,lineNumber:404,columnNumber:15},this)]},void 0,!0,{fileName:D,lineNumber:400,columnNumber:13},this),(0,E.jsxDEV)(`div`,{className:`pt-2`,children:(0,E.jsxDEV)(`button`,{type:`button`,onClick:$,disabled:L,className:f(`w-full py-3.5 px-4 rounded-xl text-white font-bold text-[14px] flex items-center justify-center gap-2 shadow-apple-md transition-all active:scale-[0.98] cursor-pointer relative overflow-hidden`,L?`bg-[#6b21ce]`:`bg-gradient-to-r from-[#7d2ae8] via-[#8e3ee8] to-[#0071e3] hover:opacity-95`),children:[L&&(0,E.jsxDEV)(`div`,{className:`absolute left-0 top-0 bottom-0 bg-white/25 transition-all duration-300 ease-out`,style:{width:`${z}%`}},void 0,!1,{fileName:D,lineNumber:424,columnNumber:19},this),(0,E.jsxDEV)(`div`,{className:`relative z-10 flex items-center gap-2`,children:[(0,E.jsxDEV)(s,{className:f(`w-4 h-4`,L&&`animate-bounce`)},void 0,!1,{fileName:D,lineNumber:431,columnNumber:19},this),(0,E.jsxDEV)(`span`,{children:L?`${V} (${z}%)`:`Download`},void 0,!1,{fileName:D,lineNumber:432,columnNumber:19},this)]},void 0,!0,{fileName:D,lineNumber:430,columnNumber:17},this)]},void 0,!0,{fileName:D,lineNumber:411,columnNumber:15},this)},void 0,!1,{fileName:D,lineNumber:410,columnNumber:13},this)]},void 0,!0,{fileName:D,lineNumber:246,columnNumber:11},this)]},void 0,!0,{fileName:D,lineNumber:228,columnNumber:7},this)},void 0,!1,{fileName:D,lineNumber:221,columnNumber:5},this)}export{k as CanvaSaveModal};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-W7wSyTde.js";import{C as t,J as n,L as r,Nr as i,Rn as a,Rr as o,Rt as s,Un as c,Yr as l,br as u,di as d,er as f,i as p,ir as ee,l as te,lr as m,r as ne,st as re,yt as ie,zr as h}from"./vendor-icons-M_KBtuE-.js";import{t as g}from"./vendor-react-BTEcvIpc.js";import{c as _,r as v}from"./vendor-utils-3OgY5Lif.js";import{_ as y,a as ae}from"./themes-CNabH9CH.js";import{c as oe,l as se,m as b}from"./index-BewtY0Hs.js";import{i as ce,r as x,t as S}from"./reactTsGenerator-CkYUg1Bs.js";import{t as C}from"./typechecker-BbGTunMD.js";var w=e(d(),1);function T(e){let t=e.replace(/\0/g,``).replace(/\\/g,`/`);return t=t.replace(/^\/+/,``),t.split(`/`).filter(e=>e&&e!==`.`&&e!==`..`).join(`/`)}function E(e,t,n){let r=t.split(`
|
|
2
|
+
`),i=n.split(`
|
|
3
|
+
`),a=0,o=0,s=[],c=0,l=0;for(;c<r.length||l<i.length;)c<r.length&&l<i.length&&r[c]===i[l]?(s.push({type:`same`,text:r[c],oldLineNumber:c+1,newLineNumber:l+1}),c++,l++):l<i.length&&(c>=r.length||!r.includes(i[l]))?(s.push({type:`add`,text:i[l],newLineNumber:l+1}),a++,l++):c<r.length&&(s.push({type:`del`,text:r[c],oldLineNumber:c+1}),o++,c++);return{path:T(e),originalContent:t,newContent:n,addedLines:a,removedLines:o,hunks:s}}function D(e,t){return{id:y(`chk`),description:e,timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),files:JSON.parse(JSON.stringify(t))}}var le=v((e,t)=>({files:{},activeFilePath:`src/App.tsx`,openTabs:[],isDiffView:!1,messages:[{id:`init_msg`,role:`assistant`,content:`I am the Cyrus AI Coding Agent. I can modify components, add features, refactor layouts, fix TypeScript errors, and synchronize code with your visual design.`,timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}],isAgentThinking:!1,checkpoints:[],pendingDiffs:null,pendingFiles:null,terminalLogs:[{id:`log_1`,type:`info`,text:`Vite v5.4.0 dev server initialized in memory.`,timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})},{id:`log_2`,type:`success`,text:`TypeScript static analysis engine active. Zero errors detected.`,timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}],validationReport:{typecheck:!0,build:!0,errors:[],warnings:[]},initProjectFiles:t=>{let n=x(t,`react`),r=S(n),i={};for(let e of r)i[e.path]=e.content;e({files:i,checkpoints:[D(`Initial Code Generation`,i)],activeFilePath:i[`src/App.tsx`]?`src/App.tsx`:Object.keys(i)[0]||``,openTabs:[`src/App.tsx`,`src/components/Navbar.tsx`,`src/styles/globals.css`].filter(e=>i[e])})},setActiveFile:n=>{let{openTabs:r}=t();r.includes(n)?e({activeFilePath:n,isDiffView:!1}):e({openTabs:[...r,n],activeFilePath:n,isDiffView:!1})},openTab:n=>{let{openTabs:r}=t();r.includes(n)?e({activeFilePath:n}):e({openTabs:[...r,n],activeFilePath:n})},closeTab:n=>{let{openTabs:r,activeFilePath:i}=t(),a=r.filter(e=>e!==n);e({openTabs:a,activeFilePath:i===n?a[0]||``:i})},setIsDiffView:t=>e({isDiffView:t}),updateFileContent:(n,r)=>{let{files:i}=t();e({files:{...i,[n]:r}}),t().runValidation()},setPendingChanges:(t,n)=>{e({pendingDiffs:t,pendingFiles:n,isDiffView:!0})},applyPendingChanges:()=>{let{pendingFiles:n,files:r,messages:i}=t();if(!n)return;let a=D(`Applied AI Coding Agent Modifications`,n),o=i.map(e=>e.isPendingApproval?{...e,isPendingApproval:!1,applied:!0}:e);e({files:n,pendingFiles:null,pendingDiffs:null,isDiffView:!1,checkpoints:[a,...t().checkpoints],messages:o}),t().addTerminalLog(`Applied AI changes to project files.`,`success`),t().runValidation()},rejectPendingChanges:()=>{let{messages:n}=t();e({pendingFiles:null,pendingDiffs:null,isDiffView:!1,messages:n.map(e=>e.isPendingApproval?{...e,isPendingApproval:!1,applied:!1}:e)}),t().addTerminalLog(`Rejected AI modification proposal.`,`info`)},restoreCheckpoint:n=>{let{checkpoints:r}=t(),i=r.find(e=>e.id===n);i&&(e({files:JSON.parse(JSON.stringify(i.files)),pendingFiles:null,pendingDiffs:null,isDiffView:!1}),t().addTerminalLog(`Restored project checkpoint: "${i.description}"`,`success`),t().runValidation())},addMessage:t=>{e(e=>({messages:[...e.messages,t]}))},setIsAgentThinking:t=>e({isAgentThinking:t}),addTerminalLog:(t,n=`info`)=>{let r={id:y(`log`),type:n,text:t,timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})};e(e=>({terminalLogs:[...e.terminalLogs,r]}))},runValidation:()=>{let{files:n}=t(),r=C(n);return e({validationReport:r}),r}}));async function ue(e,t,n){let r=e.toLowerCase().trim(),i={...t.files},a=[],o=[],s=[];await new Promise(e=>setTimeout(e,400));let c=`Modified application codebase according to prompt.`;if(r.includes(`sidebar`)||r.includes(`collapsible`)||r.includes(`menu`)){let e=`src/components/Navbar.tsx`;if(i[e]){let t=i[e];a.push({id:y(`call`),name:`editFile`,args:{path:e,description:`Add mobile drawer collapse toggle state and animation`}}),i[e]=t.replace(`const [mobileMenuOpen, setMobileMenuOpen] = useState(false);`,`const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
|
|
4
|
+
const [isCollapsed, setIsCollapsed] = useState(false);`),s.push(e),o.push({callId:a[a.length-1].id,toolName:`editFile`,success:!0,output:`Updated ${e} with stateful collapsible navigation drawer.`}),c=`Updated Navbar component with interactive collapsible navigation drawer.`}}else if(r.includes(`color`)||r.includes(`theme`)||r.includes(`emerald`)||r.includes(`indigo`)){let e=`src/styles/globals.css`;if(i[e]){let t=i[e],n=r.includes(`emerald`)?`#10b981`:r.includes(`indigo`)?`#6366f1`:`#0071e3`;a.push({id:y(`call`),name:`editFile`,args:{path:e,description:`Update --color-primary CSS token to ${n}`}}),i[e]=t.replace(/--color-primary:\s*[^;]+;/,`--color-primary: ${n};`),s.push(e),o.push({callId:a[a.length-1].id,toolName:`editFile`,success:!0,output:`Updated design token --color-primary to ${n} in ${e}.`}),c=`Updated primary brand color token to ${n} across application styles.`}}else if(r.includes(`fix`)||r.includes(`error`)||r.includes(`typescript`)){a.push({id:y(`call`),name:`runTypecheck`,args:{}});let e=C(i);o.push({callId:a[a.length-1].id,toolName:`runTypecheck`,success:e.typecheck,output:e.errors.length>0?`Found ${e.errors.length} diagnostic error(s).`:`0 errors detected.`});for(let[e,t]of Object.entries(i))t.includes(`import `)&&!t.includes(`import React`)&&(i[e]=`import React from 'react';\n${t}`,s.push(e));c=`Analyzed AST diagnostics and verified zero TypeScript syntax errors.`}else if(r.includes(`pricing`)||r.includes(`card`)){let e=`src/components/PricingCard.tsx`;if(i[e]){let t=i[e];a.push({id:y(`call`),name:`editFile`,args:{path:e,description:`Refine pricing card elevation and add badge`}}),i[e]=t.replace(`padding: '1.75rem',`,`padding: '1.75rem',
|
|
5
|
+
transition: 'transform 0.2s cubic-bezier(0.16, 1, 0.3, 1)',`),s.push(e),o.push({callId:a[a.length-1].id,toolName:`editFile`,success:!0,output:`Enhanced ${e} with smooth GPU micro-interactions.`}),c=`Enhanced PricingCard component with micro-animated hover elevation.`}}else{let t=`src/App.tsx`;i[t]&&(a.push({id:y(`call`),name:`editFile`,args:{path:t,description:`Apply targeted modification: ${e}`}}),s.push(t),o.push({callId:a[a.length-1].id,toolName:`editFile`,success:!0,output:`Applied clean structural enhancement in ${t}.`}),c=`Applied clean targeted code update for "${e}".`)}a.push({id:y(`call`),name:`runTypecheck`,args:{}});let l=C(i);o.push({callId:a[a.length-1].id,toolName:`runTypecheck`,success:l.typecheck,output:l.typecheck?`TypeScript & JSX validation passed with 0 errors.`:l.errors.join(`
|
|
6
|
+
`)});let u=s.map(e=>E(e,t.files[e]||``,i[e]||``));return{message:{id:y(`msg`),role:`assistant`,content:c,toolCalls:a,toolResults:o,diffs:u,validationResult:l,timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}),isPendingApproval:u.length>0,applied:!1},updatedFiles:i}}function de(e,t={}){let n=x(e,`react`),r=S(n),i={...t},a=0;for(let e of r)t[e.path]!==e.content&&(i[e.path]=e.content,a++);return{updatedFiles:i,changesCount:a}}function O(e,t){let n=JSON.parse(JSON.stringify(t)),r=[],i=e[`src/styles/globals.css`];if(i&&n.designSystem){let e=i.match(/--color-primary:\s*(#[0-9a-fA-F]{3,8}|rgba?\([^)]+\))/);e&&e[1]&&e[1]!==n.designSystem.colors.primary&&(n.designSystem.colors.primary=e[1],n.settings.primaryColor=e[1],r.push(`Primary Color → ${e[1]}`));let t=i.match(/--radius-md:\s*(\d+)px/);if(t&&t[1]){let e=parseInt(t[1],10);e!==n.designSystem.radius.medium&&(n.designSystem.radius.medium=e,r.push(`Medium Radius → ${e}px`))}}return{canSync:r.length>0,syncedProperties:r,updatedProject:n}}var k=g(),A=`C:/Users/Shadow/Desktop/cyrus/src/editor/coding/CodingWorkspace.tsx`;function j({onBackToDesign:e,onOpenPreview:d}){let{activeProject:g,setProject:v,pushSnapshot:y}=se(),{addToast:x}=ae(),{files:S,activeFilePath:C,openTabs:T,isDiffView:E,messages:D,isAgentThinking:j,checkpoints:M,pendingDiffs:N,terminalLogs:P,validationReport:F,initProjectFiles:fe,setActiveFile:I,openTab:pe,closeTab:L,setIsDiffView:me,updateFileContent:R,setPendingChanges:he,applyPendingChanges:z,rejectPendingChanges:B,restoreCheckpoint:ge,addMessage:V,setIsAgentThinking:H,addTerminalLog:U,runValidation:_e}=le(),[W,G]=(0,w.useState)(``),[K,ve]=(0,w.useState)(!0),[q,J]=(0,w.useState)(!1),[ye,Y]=(0,w.useState)(!1),X=(0,w.useRef)(null),Z=(0,w.useRef)(null);(0,w.useEffect)(()=>{g&&Object.keys(S).length===0&&fe(g)},[g]),(0,w.useEffect)(()=>{X.current?.scrollIntoView({behavior:`smooth`})},[D,j]),(0,w.useEffect)(()=>{Z.current?.scrollIntoView({behavior:`smooth`})},[P]);let Q=async e=>{let t=e||W;if(!t.trim()||j||!g)return;let n={id:`usr_${Date.now()}`,role:`user`,content:t.trim(),timestamp:new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})};V(n),G(``),H(!0),U(`$ cyrus-agent exec "${t.trim()}"`,`cmd`);try{let e={projectId:g.id,projectName:g.name,files:S,activeFilePath:C},n=await ue(t.trim(),e,g);V(n.message),n.message.diffs&&n.message.diffs.length>0?(he(n.message.diffs,n.updatedFiles),U(`Agent proposed modifications for ${n.message.diffs.length} file(s). Review diff.`,`info`)):U(n.message.content,`success`)}catch(e){console.error(`Agent failure:`,e),U(`Error: ${e.message}`,`error`),x(`Agent encountered an error`,`error`)}finally{H(!1)}},be=()=>{if(!g)return;let e=O(S,g);e.canSync?(v(e.updatedProject),y(`Synced from Code: ${e.syncedProperties.join(`, `)}`),x(`Synced to Design: ${e.syncedProperties.join(`, `)}`,`success`),U(`Synced code tokens to Cyrus document model.`,`success`)):x(`No design token mutations detected to sync`,`info`)},xe=()=>{if(!g)return;let e=de(g,S);if(e.changesCount>0){for(let[t,n]of Object.entries(e.updatedFiles))R(t,n);x(`Updated ${e.changesCount} code file(s) from design`,`success`),U(`Re-generated code from visual document model (${e.changesCount} files updated).`,`success`)}else x(`Code files are already up to date with design`,`info`)},Se=async()=>{if(g){Y(!0);try{let e=Object.entries(S).map(([e,t])=>({path:e,content:t,language:e.endsWith(`.json`)?`json`:e.endsWith(`.css`)?`css`:`typescript`}));await ce(g.name,e),x(`Downloaded ${g.name} codebase (.ZIP)`,`success`),U(`Packaged and downloaded full application archive.`,`success`)}catch{x(`ZIP packaging error`,`error`)}finally{Y(!1)}}},$=Object.keys(S),Ce=S[C]||``;return(0,k.jsxDEV)(`div`,{className:`h-screen w-screen bg-[#141416] text-[#e5e5ea] flex flex-col overflow-hidden font-sans select-none`,children:[(0,k.jsxDEV)(`header`,{className:`h-12 bg-[#19191c] border-b border-[#2c2c2e] px-4 flex items-center justify-between shrink-0 z-30`,children:[(0,k.jsxDEV)(`div`,{className:`flex items-center gap-3`,children:[(0,k.jsxDEV)(`div`,{className:`flex items-center bg-[#232326] p-0.5 rounded-[8px] border border-[#38383a]`,children:[(0,k.jsxDEV)(`button`,{type:`button`,onClick:e,className:`px-2.5 py-1 rounded-[6px] text-[11.5px] font-medium text-[#86868b] hover:text-white flex items-center gap-1.5 transition-apple cursor-pointer`,children:[(0,k.jsxDEV)(s,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:A,lineNumber:205,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:`Design`},void 0,!1,{fileName:A,lineNumber:206,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:200,columnNumber:13},this),(0,k.jsxDEV)(`button`,{type:`button`,className:`px-2.5 py-1 rounded-[6px] text-[11.5px] font-medium bg-[#0071e3] text-white flex items-center gap-1.5 shadow-2xs cursor-default`,children:[(0,k.jsxDEV)(u,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:A,lineNumber:212,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:`Code IDE`},void 0,!1,{fileName:A,lineNumber:213,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:208,columnNumber:13},this),(0,k.jsxDEV)(`button`,{type:`button`,onClick:d,className:`px-2.5 py-1 rounded-[6px] text-[11.5px] font-medium text-[#86868b] hover:text-white flex items-center gap-1.5 transition-apple cursor-pointer`,children:[(0,k.jsxDEV)(ee,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:A,lineNumber:220,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:`Preview`},void 0,!1,{fileName:A,lineNumber:221,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:215,columnNumber:13},this)]},void 0,!0,{fileName:A,lineNumber:199,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:`h-4 w-[1px] bg-[#38383a]`},void 0,!1,{fileName:A,lineNumber:225,columnNumber:11},this),(0,k.jsxDEV)(`span`,{className:`text-[13px] font-semibold text-white truncate max-w-[200px]`,children:g?.name},void 0,!1,{fileName:A,lineNumber:227,columnNumber:11},this),(0,k.jsxDEV)(`span`,{className:`text-[10px] px-2 py-0.5 rounded-full bg-[#0071e3]/15 text-[#0071e3] border border-[#0071e3]/20 font-medium`,children:`React + TypeScript`},void 0,!1,{fileName:A,lineNumber:230,columnNumber:11},this)]},void 0,!0,{fileName:A,lineNumber:197,columnNumber:9},this),(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxDEV)(`div`,{className:`relative`,children:[(0,k.jsxDEV)(`button`,{type:`button`,onClick:()=>J(!q),className:`px-2.5 py-1 rounded-[6px] bg-[#232326] hover:bg-[#2c2c2e] border border-[#38383a] text-[11.5px] text-[#e5e5ea] flex items-center gap-1.5 transition-apple cursor-pointer`,children:[(0,k.jsxDEV)(a,{className:`w-3.5 h-3.5 text-[#0071e3]`},void 0,!1,{fileName:A,lineNumber:244,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:[`Checkpoint (`,M.length,`)`]},void 0,!0,{fileName:A,lineNumber:245,columnNumber:15},this),(0,k.jsxDEV)(o,{className:`w-3 h-3 text-[#86868b]`},void 0,!1,{fileName:A,lineNumber:246,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:239,columnNumber:13},this),q&&(0,k.jsxDEV)(`div`,{className:`absolute top-full mt-1.5 left-0 w-64 bg-[#1e1e22] border border-[#38383a] rounded-[10px] shadow-apple-lg p-1.5 z-50 flex flex-col gap-1`,children:[(0,k.jsxDEV)(`span`,{className:`text-[10px] font-semibold text-[#86868b] px-2 py-1 uppercase tracking-wider`,children:`Rollback Checkpoints`},void 0,!1,{fileName:A,lineNumber:251,columnNumber:17},this),M.map(e=>(0,k.jsxDEV)(`button`,{type:`button`,onClick:()=>{ge(e.id),J(!1),x(`Restored: ${e.description}`,`success`)},className:`text-left px-2.5 py-1.5 rounded-[6px] hover:bg-[#2c2c2e] text-[11px] text-[#e5e5ea] flex flex-col gap-0.5 transition-apple cursor-pointer`,children:[(0,k.jsxDEV)(`span`,{className:`font-medium truncate`,children:e.description},void 0,!1,{fileName:A,lineNumber:265,columnNumber:21},this),(0,k.jsxDEV)(`span`,{className:`text-[9.5px] text-[#86868b]`,children:e.timestamp},void 0,!1,{fileName:A,lineNumber:266,columnNumber:21},this)]},e.id,!0,{fileName:A,lineNumber:255,columnNumber:19},this))]},void 0,!0,{fileName:A,lineNumber:250,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:238,columnNumber:11},this),(0,k.jsxDEV)(`button`,{type:`button`,onClick:be,title:`Sync code changes into visual document model`,className:`px-2.5 py-1 rounded-[6px] bg-[#232326] hover:bg-[#2c2c2e] border border-[#38383a] text-[11.5px] text-[#e5e5ea] flex items-center gap-1.5 transition-apple cursor-pointer`,children:[(0,k.jsxDEV)(ie,{className:`w-3 h-3 text-[#34c759]`},void 0,!1,{fileName:A,lineNumber:280,columnNumber:13},this),(0,k.jsxDEV)(`span`,{children:`Sync to Design`},void 0,!1,{fileName:A,lineNumber:281,columnNumber:13},this)]},void 0,!0,{fileName:A,lineNumber:274,columnNumber:11},this),(0,k.jsxDEV)(`button`,{type:`button`,onClick:xe,title:`Update code from latest visual design changes`,className:`px-2.5 py-1 rounded-[6px] bg-[#232326] hover:bg-[#2c2c2e] border border-[#38383a] text-[11.5px] text-[#e5e5ea] flex items-center gap-1.5 transition-apple cursor-pointer`,children:[(0,k.jsxDEV)(te,{className:`w-3 h-3 text-[#0071e3]`},void 0,!1,{fileName:A,lineNumber:290,columnNumber:13},this),(0,k.jsxDEV)(`span`,{children:`Update Code`},void 0,!1,{fileName:A,lineNumber:291,columnNumber:13},this)]},void 0,!0,{fileName:A,lineNumber:284,columnNumber:11},this)]},void 0,!0,{fileName:A,lineNumber:236,columnNumber:9},this),(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[F?.typecheck?(0,k.jsxDEV)(`span`,{className:`text-[11px] text-[#34c759] flex items-center gap-1 font-medium bg-[#34c759]/10 px-2 py-0.5 rounded-full border border-[#34c759]/20`,children:[(0,k.jsxDEV)(i,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:A,lineNumber:299,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:`Typecheck Passed`},void 0,!1,{fileName:A,lineNumber:300,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:298,columnNumber:13},this):(0,k.jsxDEV)(`span`,{className:`text-[11px] text-[#ff453a] flex items-center gap-1 font-medium bg-[#ff453a]/10 px-2 py-0.5 rounded-full border border-[#ff453a]/20`,children:[(0,k.jsxDEV)(t,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:A,lineNumber:304,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:[F?.errors.length,` Type Error(s)`]},void 0,!0,{fileName:A,lineNumber:305,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:303,columnNumber:13},this),(0,k.jsxDEV)(b,{variant:`primary`,size:`xs`,isLoading:ye,onClick:Se,icon:(0,k.jsxDEV)(m,{className:`w-3 h-3`},void 0,!1,{fileName:A,lineNumber:314,columnNumber:19},this),children:`Download ZIP`},void 0,!1,{fileName:A,lineNumber:309,columnNumber:11},this)]},void 0,!0,{fileName:A,lineNumber:296,columnNumber:9},this)]},void 0,!0,{fileName:A,lineNumber:195,columnNumber:7},this),(0,k.jsxDEV)(`div`,{className:`flex-1 flex overflow-hidden`,children:[(0,k.jsxDEV)(`div`,{className:`w-60 bg-[#161618] border-r border-[#2c2c2e] flex flex-col shrink-0`,children:[(0,k.jsxDEV)(`div`,{className:`p-3 border-b border-[#2c2c2e] text-[10.5px] font-semibold text-[#86868b] uppercase tracking-wider flex items-center justify-between`,children:[(0,k.jsxDEV)(`span`,{children:`Project Explorer`},void 0,!1,{fileName:A,lineNumber:326,columnNumber:13},this),(0,k.jsxDEV)(`span`,{className:`font-mono text-[10px] text-[#86868b]`,children:[$.length,` files`]},void 0,!0,{fileName:A,lineNumber:327,columnNumber:13},this)]},void 0,!0,{fileName:A,lineNumber:325,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:`flex-1 overflow-y-auto p-2 flex flex-col gap-0.5`,children:$.map(e=>{let t=C===e&&!E,n=e.startsWith(`src/components/`),r=e.startsWith(`src/pages/`),i=e.endsWith(`.css`),a=e.endsWith(`.json`);return(0,k.jsxDEV)(`button`,{type:`button`,onClick:()=>I(e),className:_(`w-full flex items-center gap-2 px-2.5 py-1.5 rounded-[6px] text-[11.5px] font-mono text-left transition-apple cursor-pointer truncate`,t?`bg-[#0071e3] text-white font-medium shadow-2xs`:`text-[#86868b] hover:text-[#f5f5f7] hover:bg-[#232326]`),children:[a?(0,k.jsxDEV)(l,{className:`w-3.5 h-3.5 text-[#ff9f0a] shrink-0`},void 0,!1,{fileName:A,lineNumber:351,columnNumber:21},this):i?(0,k.jsxDEV)(f,{className:`w-3.5 h-3.5 text-[#30d158] shrink-0`},void 0,!1,{fileName:A,lineNumber:353,columnNumber:21},this):n?(0,k.jsxDEV)(f,{className:`w-3.5 h-3.5 text-[#0071e3] shrink-0`},void 0,!1,{fileName:A,lineNumber:355,columnNumber:21},this):r?(0,k.jsxDEV)(c,{className:`w-3.5 h-3.5 text-[#bf5af2] shrink-0`},void 0,!1,{fileName:A,lineNumber:357,columnNumber:21},this):(0,k.jsxDEV)(f,{className:`w-3.5 h-3.5 text-[#86868b] shrink-0`},void 0,!1,{fileName:A,lineNumber:359,columnNumber:21},this),(0,k.jsxDEV)(`span`,{className:`truncate`,children:e},void 0,!1,{fileName:A,lineNumber:361,columnNumber:19},this)]},e,!0,{fileName:A,lineNumber:339,columnNumber:17},this)})},void 0,!1,{fileName:A,lineNumber:330,columnNumber:11},this)]},void 0,!0,{fileName:A,lineNumber:324,columnNumber:9},this),(0,k.jsxDEV)(`div`,{className:`flex-1 flex flex-col bg-[#1a1a1d] overflow-hidden`,children:[(0,k.jsxDEV)(`div`,{className:`h-9 bg-[#161618] border-b border-[#2c2c2e] flex items-center justify-between px-2 text-[11.5px]`,children:(0,k.jsxDEV)(`div`,{className:`flex items-center gap-1 overflow-x-auto no-scrollbar`,children:[T.map(e=>{let t=C===e&&!E,n=e.split(`/`).pop();return(0,k.jsxDEV)(`div`,{onClick:()=>I(e),className:_(`group flex items-center gap-1.5 px-3 py-1 rounded-[5px] font-mono text-[11px] cursor-pointer transition-apple select-none`,t?`bg-[#232326] text-white border border-[#38383a] shadow-2xs font-medium`:`text-[#86868b] hover:text-[#e5e5ea] hover:bg-[#1e1e22]`),children:[(0,k.jsxDEV)(`span`,{children:n},void 0,!1,{fileName:A,lineNumber:387,columnNumber:21},this),(0,k.jsxDEV)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),L(e)},className:`opacity-0 group-hover:opacity-100 hover:text-white p-0.5 rounded text-[#86868b]`,children:(0,k.jsxDEV)(p,{className:`w-2.5 h-2.5`},void 0,!1,{fileName:A,lineNumber:396,columnNumber:23},this)},void 0,!1,{fileName:A,lineNumber:388,columnNumber:21},this)]},e,!0,{fileName:A,lineNumber:377,columnNumber:19},this)}),N&&N.length>0&&(0,k.jsxDEV)(`button`,{type:`button`,onClick:()=>me(!0),className:_(`flex items-center gap-1 px-3 py-1 rounded-[5px] font-mono text-[11px] cursor-pointer transition-apple`,E?`bg-[#ff9f0a] text-black font-semibold`:`bg-[#ff9f0a]/15 text-[#ff9f0a] border border-[#ff9f0a]/30`),children:(0,k.jsxDEV)(`span`,{children:[`Diff Review (`,N.length,`)`]},void 0,!0,{fileName:A,lineNumber:413,columnNumber:19},this)},void 0,!1,{fileName:A,lineNumber:403,columnNumber:17},this)]},void 0,!0,{fileName:A,lineNumber:372,columnNumber:13},this)},void 0,!1,{fileName:A,lineNumber:371,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:(0,k.jsxDEV)(oe,{children:E&&N&&N.length>0?(0,k.jsxDEV)(`div`,{className:`flex-1 flex flex-col bg-[#141416] overflow-y-auto`,children:[(0,k.jsxDEV)(`div`,{className:`p-3 px-4 bg-[#1e1e22] border-b border-[#38383a] flex items-center justify-between shrink-0`,children:[(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxDEV)(`span`,{className:`text-[12px] font-semibold text-white`,children:`Proposed AI Code Modifications`},void 0,!1,{fileName:A,lineNumber:428,columnNumber:23},this),(0,k.jsxDEV)(`span`,{className:`text-[11px] text-[#86868b]`,children:`Review changes before committing to codebase`},void 0,!1,{fileName:A,lineNumber:429,columnNumber:23},this)]},void 0,!0,{fileName:A,lineNumber:427,columnNumber:21},this),(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxDEV)(b,{variant:`secondary`,size:`xs`,onClick:B,icon:(0,k.jsxDEV)(p,{className:`w-3 h-3`},void 0,!1,{fileName:A,lineNumber:432,columnNumber:98},this),children:`Reject`},void 0,!1,{fileName:A,lineNumber:432,columnNumber:23},this),(0,k.jsxDEV)(b,{variant:`primary`,size:`xs`,onClick:z,icon:(0,k.jsxDEV)(h,{className:`w-3 h-3`},void 0,!1,{fileName:A,lineNumber:435,columnNumber:95},this),children:`Apply Changes`},void 0,!1,{fileName:A,lineNumber:435,columnNumber:23},this)]},void 0,!0,{fileName:A,lineNumber:431,columnNumber:21},this)]},void 0,!0,{fileName:A,lineNumber:426,columnNumber:19},this),(0,k.jsxDEV)(`div`,{className:`p-4 flex flex-col gap-4`,children:N.map(e=>(0,k.jsxDEV)(`div`,{className:`rounded-[10px] border border-[#38383a] bg-[#1a1a1d] overflow-hidden`,children:[(0,k.jsxDEV)(`div`,{className:`p-2.5 px-3 bg-[#232326] border-b border-[#38383a] flex items-center justify-between text-[11.5px] font-mono`,children:[(0,k.jsxDEV)(`span`,{className:`text-white font-medium`,children:e.path},void 0,!1,{fileName:A,lineNumber:446,columnNumber:27},this),(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2 text-[10.5px]`,children:[(0,k.jsxDEV)(`span`,{className:`text-[#30d158]`,children:[`+`,e.addedLines]},void 0,!0,{fileName:A,lineNumber:448,columnNumber:29},this),(0,k.jsxDEV)(`span`,{className:`text-[#ff453a]`,children:[`-`,e.removedLines]},void 0,!0,{fileName:A,lineNumber:449,columnNumber:29},this)]},void 0,!0,{fileName:A,lineNumber:447,columnNumber:27},this)]},void 0,!0,{fileName:A,lineNumber:445,columnNumber:25},this),(0,k.jsxDEV)(`div`,{className:`p-3 font-mono text-[11.5px] leading-relaxed overflow-x-auto select-text`,children:e.hunks.map((e,t)=>(0,k.jsxDEV)(`div`,{className:_(`px-2 py-0.5 rounded-sm flex items-start gap-3`,e.type===`add`?`bg-[#30d158]/15 text-[#30d158]`:e.type===`del`?`bg-[#ff453a]/15 text-[#ff453a] line-through`:`text-[#86868b]`),children:[(0,k.jsxDEV)(`span`,{className:`w-4 shrink-0 text-center font-bold`,children:e.type===`add`?`+`:e.type===`del`?`-`:` `},void 0,!1,{fileName:A,lineNumber:465,columnNumber:31},this),(0,k.jsxDEV)(`span`,{className:`whitespace-pre`,children:e.text},void 0,!1,{fileName:A,lineNumber:468,columnNumber:31},this)]},t,!0,{fileName:A,lineNumber:454,columnNumber:29},this))},void 0,!1,{fileName:A,lineNumber:452,columnNumber:25},this)]},e.path,!0,{fileName:A,lineNumber:444,columnNumber:23},this))},void 0,!1,{fileName:A,lineNumber:442,columnNumber:19},this)]},void 0,!0,{fileName:A,lineNumber:424,columnNumber:17},this):(0,k.jsxDEV)(`div`,{className:`flex-1 flex overflow-hidden relative`,children:(0,k.jsxDEV)(`textarea`,{value:Ce,onChange:e=>R(C,e.target.value),spellCheck:!1,className:`w-full h-full p-4 font-mono text-[12px] leading-relaxed bg-[#1a1a1d] text-[#f5f5f7] resize-none focus:outline-none select-text whitespace-pre overflow-auto`},void 0,!1,{fileName:A,lineNumber:479,columnNumber:19},this)},void 0,!1,{fileName:A,lineNumber:478,columnNumber:17},this)},void 0,!1,{fileName:A,lineNumber:421,columnNumber:13},this)},void 0,!1,{fileName:A,lineNumber:420,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:_(`border-t border-[#2c2c2e] bg-[#141416] flex flex-col shrink-0 transition-all`,K?`h-36`:`h-8`),children:[(0,k.jsxDEV)(`div`,{onClick:()=>ve(!K),className:`h-8 px-3 bg-[#18181b] border-b border-[#2c2c2e] flex items-center justify-between text-[11px] font-mono text-[#86868b] cursor-pointer hover:text-white`,children:[(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxDEV)(r,{className:`w-3.5 h-3.5 text-[#0071e3]`},void 0,!1,{fileName:A,lineNumber:497,columnNumber:17},this),(0,k.jsxDEV)(`span`,{className:`font-semibold uppercase tracking-wider text-[10px]`,children:`Terminal & Diagnostics`},void 0,!1,{fileName:A,lineNumber:498,columnNumber:17},this),(0,k.jsxDEV)(`span`,{className:`text-[9.5px]`,children:[`(`,P.length,` events)`]},void 0,!0,{fileName:A,lineNumber:499,columnNumber:17},this)]},void 0,!0,{fileName:A,lineNumber:496,columnNumber:15},this),(0,k.jsxDEV)(`span`,{children:K?`▾`:`▴`},void 0,!1,{fileName:A,lineNumber:501,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:492,columnNumber:13},this),K&&(0,k.jsxDEV)(`div`,{className:`flex-1 overflow-y-auto p-2.5 font-mono text-[11px] leading-relaxed flex flex-col gap-1 select-text`,children:[P.map(e=>(0,k.jsxDEV)(`div`,{className:_(`flex items-start gap-2`,e.type===`cmd`?`text-[#0071e3] font-semibold`:e.type===`error`?`text-[#ff453a]`:e.type===`success`?`text-[#30d158]`:`text-[#86868b]`),children:[(0,k.jsxDEV)(`span`,{className:`text-[9.5px] text-[#48484a] shrink-0`,children:e.timestamp},void 0,!1,{fileName:A,lineNumber:520,columnNumber:21},this),(0,k.jsxDEV)(`span`,{children:e.text},void 0,!1,{fileName:A,lineNumber:521,columnNumber:21},this)]},e.id,!0,{fileName:A,lineNumber:507,columnNumber:19},this)),(0,k.jsxDEV)(`div`,{ref:Z},void 0,!1,{fileName:A,lineNumber:524,columnNumber:17},this)]},void 0,!0,{fileName:A,lineNumber:505,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:491,columnNumber:11},this)]},void 0,!0,{fileName:A,lineNumber:369,columnNumber:9},this),(0,k.jsxDEV)(`div`,{className:`w-80 bg-[#161618] border-l border-[#2c2c2e] flex flex-col shrink-0`,children:[(0,k.jsxDEV)(`div`,{className:`p-3.5 border-b border-[#2c2c2e] flex items-center justify-between`,children:(0,k.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxDEV)(`div`,{className:`w-7 h-7 rounded-[7px] bg-[#0071e3]/20 text-[#0071e3] flex items-center justify-center`,children:(0,k.jsxDEV)(n,{className:`w-4 h-4`},void 0,!1,{fileName:A,lineNumber:536,columnNumber:17},this)},void 0,!1,{fileName:A,lineNumber:535,columnNumber:15},this),(0,k.jsxDEV)(`div`,{children:[(0,k.jsxDEV)(`h4`,{className:`text-[13px] font-semibold text-white`,children:`AI Coding Agent`},void 0,!1,{fileName:A,lineNumber:539,columnNumber:17},this),(0,k.jsxDEV)(`span`,{className:`text-[10px] text-[#86868b]`,children:`Autonomous multi-file refactoring`},void 0,!1,{fileName:A,lineNumber:540,columnNumber:17},this)]},void 0,!0,{fileName:A,lineNumber:538,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:534,columnNumber:13},this)},void 0,!1,{fileName:A,lineNumber:533,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:`flex-1 overflow-y-auto p-3 flex flex-col gap-3`,children:[D.map(e=>{let t=e.role===`user`;return(0,k.jsxDEV)(`div`,{className:_(`flex flex-col gap-1 max-w-[95%]`,t?`self-end items-end`:`self-start items-start`),children:[(0,k.jsxDEV)(`div`,{className:_(`p-3 rounded-[12px] text-[12px] leading-relaxed shadow-2xs`,t?`bg-[#0071e3] text-white rounded-br-xs`:`bg-[#232326] text-[#e5e5ea] border border-[#38383a] rounded-bl-xs`),children:[e.content,!t&&e.toolCalls&&e.toolCalls.length>0&&(0,k.jsxDEV)(`div`,{className:`mt-2 pt-2 border-t border-[#38383a] flex flex-col gap-1 text-[10.5px] font-mono`,children:e.toolCalls.map((e,t)=>(0,k.jsxDEV)(`div`,{className:`flex items-center gap-1.5 text-[#0071e3]`,children:[(0,k.jsxDEV)(ne,{className:`w-3 h-3 shrink-0`},void 0,!1,{fileName:A,lineNumber:572,columnNumber:29},this),(0,k.jsxDEV)(`span`,{className:`truncate`,children:[e.name,`(`,e.args.path||``,`)`]},void 0,!0,{fileName:A,lineNumber:573,columnNumber:29},this)]},t,!0,{fileName:A,lineNumber:571,columnNumber:27},this))},void 0,!1,{fileName:A,lineNumber:569,columnNumber:23},this),!t&&e.isPendingApproval&&(0,k.jsxDEV)(`div`,{className:`mt-3 pt-2.5 border-t border-[#38383a] flex items-center justify-between gap-2`,children:[(0,k.jsxDEV)(b,{variant:`secondary`,size:`xs`,onClick:B,children:`Reject`},void 0,!1,{fileName:A,lineNumber:582,columnNumber:25},this),(0,k.jsxDEV)(b,{variant:`primary`,size:`xs`,onClick:z,icon:(0,k.jsxDEV)(h,{className:`w-3 h-3`},void 0,!1,{fileName:A,lineNumber:585,columnNumber:97},this),children:`Apply`},void 0,!1,{fileName:A,lineNumber:585,columnNumber:25},this)]},void 0,!0,{fileName:A,lineNumber:581,columnNumber:23},this),!t&&e.applied&&(0,k.jsxDEV)(`div`,{className:`mt-2 pt-2 border-t border-[#38383a] text-[10px] text-[#30d158] flex items-center gap-1 font-medium`,children:[(0,k.jsxDEV)(i,{className:`w-3 h-3`},void 0,!1,{fileName:A,lineNumber:593,columnNumber:25},this),(0,k.jsxDEV)(`span`,{children:`Changes applied to project`},void 0,!1,{fileName:A,lineNumber:594,columnNumber:25},this)]},void 0,!0,{fileName:A,lineNumber:592,columnNumber:23},this)]},void 0,!0,{fileName:A,lineNumber:557,columnNumber:19},this),(0,k.jsxDEV)(`span`,{className:`text-[9.5px] text-[#636366] px-1`,children:e.timestamp},void 0,!1,{fileName:A,lineNumber:598,columnNumber:19},this)]},e.id,!0,{fileName:A,lineNumber:550,columnNumber:17},this)}),j&&(0,k.jsxDEV)(`div`,{className:`self-start flex items-center gap-2 p-2.5 rounded-[10px] bg-[#232326] border border-[#38383a] text-[11.5px] text-[#86868b] animate-pulse`,children:[(0,k.jsxDEV)(n,{className:`w-3.5 h-3.5 text-[#0071e3] animate-spin`},void 0,!1,{fileName:A,lineNumber:605,columnNumber:17},this),(0,k.jsxDEV)(`span`,{children:`Agent reasoning & patching code...`},void 0,!1,{fileName:A,lineNumber:606,columnNumber:17},this)]},void 0,!0,{fileName:A,lineNumber:604,columnNumber:15},this),(0,k.jsxDEV)(`div`,{ref:X},void 0,!1,{fileName:A,lineNumber:610,columnNumber:13},this)]},void 0,!0,{fileName:A,lineNumber:546,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:`px-3 py-2 border-t border-[#2c2c2e] bg-[#131315] flex flex-col gap-1.5`,children:[(0,k.jsxDEV)(`span`,{className:`text-[9.5px] font-semibold text-[#86868b] uppercase tracking-wider`,children:`Quick Instructions`},void 0,!1,{fileName:A,lineNumber:615,columnNumber:13},this),(0,k.jsxDEV)(`div`,{className:`flex items-center gap-1.5 overflow-x-auto no-scrollbar pb-0.5`,children:[`Make sidebar collapsible`,`Change primary color to emerald`,`Fix TypeScript diagnostics`,`Add hover micro-interactions`].map((e,t)=>(0,k.jsxDEV)(`button`,{type:`button`,onClick:()=>Q(e),className:`px-2.5 py-1 rounded-full bg-[#232326] border border-[#38383a] text-[#e5e5ea] hover:border-[#0071e3] hover:text-[#0071e3] text-[10px] font-medium whitespace-nowrap transition-apple cursor-pointer`,children:e},t,!1,{fileName:A,lineNumber:625,columnNumber:17},this))},void 0,!1,{fileName:A,lineNumber:618,columnNumber:13},this)]},void 0,!0,{fileName:A,lineNumber:614,columnNumber:11},this),(0,k.jsxDEV)(`div`,{className:`p-3 border-t border-[#2c2c2e] bg-[#161618]`,children:(0,k.jsxDEV)(`form`,{onSubmit:e=>{e.preventDefault(),Q()},className:`relative flex items-center`,children:[(0,k.jsxDEV)(`input`,{type:`text`,value:W,onChange:e=>G(e.target.value),disabled:j,placeholder:`Ask agent to refactor, patch, or fix code...`,className:`w-full h-9 pl-3 pr-10 bg-[#232326] text-[12px] text-white placeholder:text-[#86868b] rounded-[8px] border border-transparent focus:border-[#0071e3] focus:outline-none transition-apple`},void 0,!1,{fileName:A,lineNumber:646,columnNumber:15},this),(0,k.jsxDEV)(`button`,{type:`submit`,disabled:!W.trim()||j,className:`absolute right-1.5 p-1.5 rounded-[6px] bg-[#0071e3] disabled:bg-[#38383a] text-white disabled:text-[#86868b] transition-apple cursor-pointer disabled:cursor-not-allowed`,children:(0,k.jsxDEV)(re,{className:`w-3.5 h-3.5`},void 0,!1,{fileName:A,lineNumber:659,columnNumber:17},this)},void 0,!1,{fileName:A,lineNumber:654,columnNumber:15},this)]},void 0,!0,{fileName:A,lineNumber:639,columnNumber:13},this)},void 0,!1,{fileName:A,lineNumber:638,columnNumber:11},this)]},void 0,!0,{fileName:A,lineNumber:531,columnNumber:9},this)]},void 0,!0,{fileName:A,lineNumber:322,columnNumber:7},this)]},void 0,!0,{fileName:A,lineNumber:193,columnNumber:5},this)}export{j as CodingWorkspace};
|