PageSourceSearch

https://frenly.ai/assets/AppsPage-Dz_OeRq0.js

js frenly.ai collected 2026-10-05 12:00:46 UTC 93,453 bytes, 6 lines download raw bytes

1import{j as e,r as f}from"./index-CgBQMxba.js";import{aQ as ue,H as oe,S as C,at as Q,a$ as L,W as S,L as P,ae as T,h as k,B as x,N as M,R as g,Y as H,C as o,u as Ne,aS as U,aq as j,aL as O,c7 as I,bu as J,c2 as Z,ac as de,o as ee,bd as ge,bO as se,aE as R,as as w,aJ as h,d as A,aX as _,aF as ae,aP as z,z as xe,a2 as ie,bc as be,ah as he,aI as fe,aa as ve,G as te,aT as Pe,A as Ae,bU as W,aB as je}from"./App-D-LVkmRX.js";import{F as ye}from"./FeatureGateLanding-Va1x2M-Z.js";import{A as Ee}from"./AuthGate-DiB9Ipdd.js";import{t as le}from"./vibeml-BjW5Jo8k.js";import{C as Y}from"./circle-play-Bu5FpRUa.js";import{C as B}from"./code-xml-HrVBjgw1.js";import{P as K}from"./plug-DX8cgH3a.js";import{U as Ve}from"./upload-e80Un4CK.js";import{C as re}from"./circle-x-CXWXf4Ad.js";import{S as G}from"./shield-alert-D4AlwM1f.js";import{L as X}from"./link-2-Bqkd_FI2.js";import"./client-error-reporter-m7mtHKpe.js";import"./BlindTestOrbitalHero-DS32qU0y.js";import"./SignInRequired-xLWB0URy.js";/**
2 * @license lucide-react v0.453.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const De=ue("PencilLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}],["path",{d:"m15 5 3 3",key:"1w25hb"}]]);function we(){const{data:a,isLoading:n}=S({queryKey:["/api/imagine/apps"]}),[i,l]=f.useState("all"),r=s=>i==="all"?!0:i==="private"?s.visibility==="private":i==="shared"?s.visibility==="unlisted":s.visibility==="public",m=(a||[]).filter(r);return e.jsxDEV("div",{className:"max-w-3xl mx-auto px-4 py-8 sm:py-12",children:[e.jsxDEV("div",{className:"relative rounded-3xl overflow-hidden mb-6",style:{background:"linear-gradient(135deg,#1e0a3c 0%,#2d1265 50%,#4a1d96 100%)"},children:[e.jsxDEV("div",{className:"absolute inset-0 pointer-events-none",style:{backgroundImage:"radial-gradient(circle at 10% 60%, rgba(167,139,250,0.45) 0%, transparent 45%), radial-gradient(circle at 88% 15%, rgba(52,211,153,0.2) 0%, transparent 40%)"}},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:86,columnNumber:9},this),e.jsxDEV("div",{className:"relative px-6 py-8 flex flex-col sm:flex-row items-start sm:items-center gap-4",children:[e.jsxDEV("div",{className:"flex-1 min-w-0",children:[e.jsxDEV("div",{className:"inline-flex items-center gap-1.5 px-3 py-1 rounded-full mb-3 text-[11px] font-semibold tracking-wide",style:{background:"rgba(167,139,250,0.18)",border:"1px solid rgba(167,139,250,0.35)",color:"#c4b5fd"},children:[e.jsxDEV(L,{className:"h-3 w-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:90,columnNumber:15},this)," My Apps · Imagine Studio"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:89,columnNumber:13},this),e.jsxDEV("h1",{className:"text-2xl sm:text-3xl font-bold text-white tracking-tight mb-1",children:"My Apps"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:92,columnNumber:13},this),e.jsxDEV("p",{className:"text-sm leading-relaxed max-w-lg",style:{color:"rgba(196,181,253,0.75)"},children:"Everything you've imagined — real AI-powered apps built from a wish. Run them, share them, or remix them into something new."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:93,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center gap-2 mt-3 flex-wrap",children:["Run","Share","Remix","Version history","Connectors"].map(s=>e.jsxDEV("span",{className:"text-[10px] px-2 py-1 rounded-full",style:{background:"rgba(167,139,250,0.15)",border:"1px solid rgba(167,139,250,0.25)",color:"rgba(196,181,253,0.8)"},children:s},s,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:98,columnNumber:17},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:96,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:88,columnNumber:11},this),e.jsxDEV("div",{className:"flex-shrink-0",children:e.jsxDEV(k,{href:"/imagine",children:e.jsxDEV(x,{className:"gap-2 text-purple-700 bg-white hover:bg-purple-50 font-semibold shadow-lg","data-testid":"button-new-app",children:[e.jsxDEV(M,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:107,columnNumber:17},this)," Imagine"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:106,columnNumber:15},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:105,columnNumber:13},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:104,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:87,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:85,columnNumber:7},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mb-6",children:["all","private","shared","published"].map(s=>e.jsxDEV("button",{onClick:()=>l(s),"data-testid":`filter-${s}`,className:`px-3 py-1.5 rounded-full text-xs font-medium capitalize transition-colors ${i===s?"bg-purple-600 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,children:s},s,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:116,columnNumber:11},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:114,columnNumber:7},this),n?e.jsxDEV("div",{className:"flex justify-center py-16",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:130,columnNumber:52},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:130,columnNumber:9},this):m.length===0?e.jsxDEV(o,{className:"p-10 text-center",children:[e.jsxDEV(M,{className:"w-10 h-10 text-purple-300 mx-auto mb-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:133,columnNumber:11},this),e.jsxDEV("p",{className:"font-medium text-gray-900",children:!a||a.length===0?"N
6o apps yet":"Nothing here"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:134,columnNumber:11},this),e.jsxDEV("p",{className:"text-sm text-gray-500 mt-1 mb-4",children:!a||a.length===0?"Make a wish and Frenly will build your first little app.":"No apps match this filter."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:135,columnNumber:11},this),(!a||a.length===0)&&e.jsxDEV(k,{href:"/imagine",children:e.jsxDEV(x,{className:"gap-2",children:[e.jsxDEV(M,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:141,columnNumber:61},this)," Start imagining"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:141,columnNumber:35},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:141,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:132,columnNumber:9},this):e.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:m.map(s=>e.jsxDEV(k,{href:`/apps/${s.id}`,children:e.jsxDEV(o,{className:"p-4 hover:border-purple-200 hover:shadow-sm transition-all cursor-pointer h-full","data-testid":`app-card-${s.id}`,children:[e.jsxDEV("div",{className:"flex items-start justify-between gap-2",children:[e.jsxDEV("h3",{className:"font-semibold text-gray-900",children:s.name},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:150,columnNumber:19},this),s.isValid?e.jsxDEV(g,{className:"bg-green-100 text-green-700 gap-1 text-[10px]",children:[e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:152,columnNumber:88},this)," ",s.status==="active"?"Active":"Ready"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:152,columnNumber:23},this):e.jsxDEV(g,{className:"bg-amber-100 text-amber-700 gap-1 text-[10px]",children:[e.jsxDEV(O,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:153,columnNumber:88},this)," Draft"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:153,columnNumber:23},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:149,columnNumber:17},this),e.jsxDEV("p",{className:"text-xs text-gray-500 mt-1 line-clamp-2",children:['"',s.wish,'"']},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:155,columnNumber:17},this),e.jsxDEV("div",{className:"flex items-center gap-2 mt-3 text-[11px] text-gray-400",children:[e.jsxDEV("span",{children:s.runtimeTemplate.replace(/_/g," ")},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:157,columnNumber:19},this),e.jsxDEV("span",{children:"·"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:158,columnNumber:19},this),e.jsxDEV("span",{children:["v",s.currentVersion]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:159,columnNumber:19},this),e.jsxDEV("span",{children:"·"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:160,columnNumber:19},this),e.jsxDEV("span",{className:"capitalize",children:s.visibility},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:161,columnNumber:19},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:156,columnNumber:17},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:148,columnNumber:15},this)},s.id,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:147,columnNumber:13},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:145,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:83,columnNumber:5},this)}function ke({appId:a}){var q,F;const[,n]=Ne(),[i,l]=f.useState("run"),[r,m]=f.useState(!1),s=f.useRef(null),{data:p,isLoading:N,error:b}=S({queryKey:["/api/imagine/apps",a],queryFn:async()=>(await A(`/api/imagine/apps/${a}`)).json()});if(f.useEffect(()=>{const u=t=>{s.current&&!s.current.contains(t.target)&&m(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[]),N)return e.jsxDEV("div",{className:"flex justify-center py-20",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:213,columnNumber:55},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:213,columnNumber:12},this);if(b||!p)return e.jsxDEV("div",{className:"max-w-3xl mx-auto px-4 py-12 text-center",children:[e.jsxDEV("p",{className:"text-gray-600 mb-4",children:"We couldn't find that app."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:218,columnNumber:9},this),e.jsxDEV(k,{href:"/apps",children:e.jsxDEV(x,{variant:"outline",className:"gap-1",children:[e.jsxDEV(U,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:219,columnNumber:72},this)," Back to My Apps"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:219,columnNumber:28},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:219,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:217,columnNumber:7},this);const{app:d,doc:c}=p,V=[{id:"run",label:"Run",icon:e.jsxDEV(ge,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:227,columnNumber:46},this)},{id:"history",label:"History",icon:e.jsxDEV(se,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:228,columnNumber:46},this)}],v=[{id:"connectors",label:"Connectors",icon:e.jsxDEV(K,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:231,columnNumber:52},this)},{id:"activity",label:"Activity",icon:e.jsxDEV(Z,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:232,columnNumber:52},this)},{id:"settings",label:"Settings",icon:e.jsxDEV(de,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:233,columnNumber:52},this)},{id:"versions",label:"Versions",icon:e.jsxDEV(ee,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:234,columnNumber:52},this)},{id:"design",label:"Design",icon:e.jsxDEV(B,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:235,columnNumber:52},this)}],y=v.some(u=>u.id===i);return e.jsxDEV("div",{className:"max-w-3xl mx-auto px-4 py-8 sm:py-10",children:[e.jsxDEV(k,{href:"/apps",children:e.jsxDEV("button",{className:"text-sm text-gray-500 hover:text-purple-600 flex items-center gap-1 mb-5","data-testid":"link-back-apps",children:[e.jsxDEV(U,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:243,columnNumber:11},this)," My Apps"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:242,columnNumber:9},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:241,columnNumber:7},this),e.jsxDEV("div",{className:"rounded-2xl border border-purple-100 bg-gradient-to-br from-purple-50 to-white p-5 mb-5 flex items-start gap-4",children:[e.jsxDEV("div",{className:"w-12 h-12 rounded-2xl bg-purple-600 flex items-center justify-center flex-shrink-0 shadow-sm",children:e.jsxDEV(C,{className:"w-6 h-6 text-white"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:250,columnNumber:11},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:249,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 min-w-0",children:[e.jsxDEV("div",{className:"flex items-start justify-between gap-2",children:[e.jsxDEV("h1",{className:"text-xl font-bold text-gray-900 leading-tight",children:d.name},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:254,columnNumber:13},this),d.isValid?e.jsxDEV(g,{className:"bg-green-100 text-green-700 gap-1 flex-shrink-0",children:[e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:256,columnNumber:84},this)," Ready"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:256,columnNumber:17},this):e.jsxDEV(g,{className:"bg-amber-100 text-amber-700 gap-1 flex-shrink-0",children:[e.jsxDEV(O,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:257,columnNumber:84},this)," Needs fix"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:257,columnNumber:17},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:253,columnNumber:11},this),e.jsxDEV("p",{className:"text-sm text-purple-700 mt-1 italic",children:['"',d.wish,'"']},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:259,columnNumber:11},this),(((q=c.vibeml)==null?void 0:q.outputs)||[]).length>0&&e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-2",children:[e.jsxDEV("span",{className:"text-[11px] text-gray-500 mr-0.5",children:"Produces:"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:262,columnNumber:15},this),(c.vibeml.outputs||[]).map(u=>e.jsxDEV("span",{className:"text-[11px] px-2 py-0.5 rounded-full bg-purple-100 text-purple-700 font-medium",children:u.label},u.id,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:264,columnNumber:17},this))]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:261,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:252,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:248,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1 border-b mb-5",children:[V.map(u=>e.jsxDEV("button",{onClick:()=>{l(u.id),m(!1)},"data-testid":`tab-${u.id}`,className:`px-4 py-2.5 text-sm font-medium flex items-center gap-1.5 whitespace-nowrap border-b-2 -mb-px transition-colors ${i===u.id?"text-purple-600 border-purple-600":"text-gray-500 border-transparent hover:text-gray-700"}`,children:[u.icon," ",u.label]},u.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:274,columnNumber:11},this)),e.jsxDEV("div",{className:"relative ml-auto",ref:s,children:[e.jsxDEV("button",{onClick:()=>m(u=>!u),"data-testid":"tab-more",className:`px-3 py-2.5 text-sm font-medium flex items-center gap-1 whitespace-nowrap border-b-2 -mb-px transition-colors ${y?"text-purple-600 border-purple-600":"text-gray-400 border-transparent hover:text-gray-600"}`,children:[y?(F=v.find(u=>u.id===i))==null?void 0:F.label:"More",r?e.jsxDEV(I,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:294,columnNumber:25},this):e.jsxDEV(J,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:294,columnNumber:65},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:286,columnNumber:11},this),r&&e.jsxDEV("div",{className:"absolute right-0 top-full mt-1 w-44 bg-white rounded-xl border border-gray-200 shadow-lg z-20 py-1 overflow-hidden",children:v.map(u=>e.jsxDEV("button",{onClick:()=>{l(u.id),m(!1)},"data-testid":`tab-${u.id}`,className:`w-full text-left px-4 py-2.5 text-sm flex items-center gap-2 hover:bg-gray-50 transition-colors ${i===u.id?"text-purple-600 font-medium":"text-gray-700"}`,children:[u.icon," ",u.label]},u.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:299,columnNumber:17},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:297,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:285,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:272,columnNumber:7},this),i==="run"&&e.jsxDEV(qe,{appId:a,app:d,doc:c.vibeml},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:315,columnNumber:32},this),i==="connectors"&&e.jsxDEV(Le,{appId:a},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:316,columnNumber:32},this),i==="activity"&&e.jsxDEV(Fe,{appId:a},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:317,columnNumber:32},this),i==="history"&&e.jsxDEV(Re,{appId:a,doc:c.vibeml},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:318,columnNumber:32},this),i==="settings"&&e.jsxDEV(Me,{appId:a},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:319,columnNumber:32},this),i==="versions"&&e.jsxDEV(Ke,{appId:a,app:d},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:320,columnNumber:32},this),i==="design"&&e.jsxDEV(ze,{appId:a,app:d,doc:c,onDeleted:()=>n("/apps")},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:321,columnNumber:32},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:240,columnNumber:5},this)}function Ce(a){const n=(a.type||"").toLowerCase();return(a.source||"").toLowerCase().includes("upload")||n.includes("document")||n.includes("file")||n.includes("pdf")||n.includes("doc")?"file":"text"}function Se(a,n,i){const l=n.toLowerCase();return i==="file"?`Paste the content of your ${l} here, or upload a file above…`:l.includes("task")||l.includes("todo")?"e.g. Finish the report, Call Alice, Book dentist…":l.includes("domain")?"e.g. mystore.com, myblog.io, startup.ai…":l.includes("topic")||l.includes("subject")?"e.g. climate change, machine learning, running a startup…":l.includes("url")||l.includes("link")?"https://…":l.includes("note")||l.includes("text")||l.includes("content")?`Type or paste your ${l} here…`:l.includes("question")?"e.g. What is the main theme? How should I respond?":l.includes("goal")||l.includes("objective")?"Describe what you want to achieve…":l.includes("name")?"e.g. Project Phoenix, My Blog…":`Enter your ${l} here…`}function qe({appId:a,app:n,doc:i}){const{toast:l}=R(),[r,m]=f.useState({}),[s,p]=f.useState(null),[N,b]=f.useState(!1),d=f.useRef({}),c=w({mutationFn:async t=>(await A("POST",`/api/imagine/apps/${a}/run`,t)).json(),onSuccess:t=>{p(t),h.invalidateQueries({queryKey:["/api/imagine/apps",a,"runs"]})},onError:t=>l({title:"Something went wrong",description:"We couldn't run this app. Please try again.",variant:"destructive"})}),v=(i.inputs||[]).filter(t=>t.required).filter(t=>!(r[t.id]||"").trim()),y=n.isValid&&v.length===0&&!c.isPending,q=(t,D)=>{if(!D)return;const E=new FileReader;E.onload=()=>m($=>({...$,[t]:String(E.result||"")})),E.readAsText(D)};if(!n.isValid)return e.jsxDEV(o,{className:"p-6 text-center border-amber-200 bg-amber-50/60",children:[e.jsxDEV(Q,{className:"w-8 h-8 text-amber-500 mx-auto mb-2"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:380,columnNumber:9},this),e.jsxDEV("p",{className:"font-medium text-amber-800",children:"This app needs a quick fix before it can run"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:381,columnNumber:9},this),e.jsxDEV("p",{className:"text-sm text-amber-700 mt-1 mb-4",children:["Go to More → Design and tap ",e.jsxDEV("strong",{children:"Auto-Repair"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:382,columnNumber:85},this)," — it usually fixes things in one click."]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:382,columnNumber:9},this),e.jsxDEV(x,{size:"sm",variant:"outline",className:"border-amber-300 text-amber-700",onClick:()=>{var t;return(t=document.querySelector('[data-testid="tab-more"]'))==null?void 0:t.click()},children:"Open Design"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:383,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:379,columnNumber:7},this);const u=(i.workflows||[]).flatMap(t=>t.steps||[]);return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV(o,{className:"p-5",children:[(i.inputs||[]).length===0?e.jsxDEV("p",{className:"text-sm text-gray-500 mb-4",children:"This app doesn't need any input — just hit Run and it'll do its thing."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:398,columnNumber:11},this):e.jsxDEV("div",{className:"space-y-4 mb-4",children:(i.inputs||[]).map(t=>{const D=Ce(t);return e.jsxDEV("div",{children:[e.jsxDEV(_,{className:"text-sm font-medium text-gray-800 flex items-center gap-1.5",children:[t.label,t.required&&e.jsxDEV("span",{className:"text-purple-500 text-xs font-no
6rmal",children:"(required)"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:407,columnNumber:38},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:405,columnNumber:19},this),t.description&&e.jsxDEV("p",{className:"text-xs text-gray-500 mt-0.5 mb-1",children:t.description},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:410,columnNumber:21},this),D==="file"&&e.jsxDEV("div",{className:"mt-1.5 mb-1 flex items-center gap-2",children:[e.jsxDEV("input",{type:"file",accept:".txt,.md,.csv,.json,.text",ref:E=>{d.current[t.id]=E},onChange:E=>{var $;return q(t.id,($=E.target.files)==null?void 0:$[0])},className:"hidden"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:414,columnNumber:23},this),e.jsxDEV(x,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",onClick:()=>{var E;return(E=d.current[t.id])==null?void 0:E.click()},"data-testid":`upload-${t.id}`,children:[e.jsxDEV(Ve,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:422,columnNumber:25},this)," Upload file"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:421,columnNumber:23},this),e.jsxDEV("span",{className:"text-xs text-gray-400",children:"or paste below"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:424,columnNumber:23},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:413,columnNumber:21},this),e.jsxDEV(ae,{value:r[t.id]||"",onChange:E=>m($=>({...$,[t.id]:E.target.value})),placeholder:Se(n.wish,t.label,D),rows:D==="file"?5:3,className:"mt-1","data-testid":`input-${t.id}`},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:427,columnNumber:19},this)]},t.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:404,columnNumber:17},this)})},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:400,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxDEV(x,{onClick:()=>c.mutate({inputs:r}),disabled:!y,size:"lg",className:"gap-2 px-6","data-testid":"button-run",children:c.isPending?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(P,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:450,columnNumber:19},this)," Running…"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:450,columnNumber:17},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(C,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:451,columnNumber:19},this)," Run it"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:451,columnNumber:17},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:442,columnNumber:11},this),!c.isPending&&v.length>0&&e.jsxDEV("span",{className:"text-sm text-gray-400",children:["Still needed: ",v.map(t=>t.label).join(", ")]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:454,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:441,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:396,columnNumber:7},this),u.length>0&&e.jsxDEV("button",{className:"w-full text-left flex items-center justify-between px-4 py-3 rounded-xl border border-gray-100 bg-gray-50 hover:bg-gray-100 transition-colors text-sm text-gray-600",onClick:()=>b(t=>!t),children:[e.jsxDEV("span",{className:"font-medium",children:"How this app works"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:467,columnNumber:11},this),N?e.jsxDEV(I,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:468,columnNumber:22},this):e.jsxDEV(J,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:468,columnNumber:58},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:463,columnNumber:9},this),N&&u.length>0&&e.jsxDEV(o,{className:"p-4",children:e.jsxDEV("ol",{className:"space-y-3",children:u.map((t,D)=>e.jsxDEV("li",{className:"flex items-start gap-3",children:[e.jsxDEV("span",{className:"w-5 h-5 rounded-full bg-purple-100 text-purple-700 text-[11px] font-bold flex items-center justify-center flex-shrink-0 mt-0.5",children:D+1},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:476,
6columnNumber:17},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-gray-800",children:t.description},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:478,columnNumber:19},this),t.requiresApproval&&e.jsxDEV("p",{className:"text-[11px] text-amber-600 mt-0.5 flex items-center gap-1",children:[e.jsxDEV(z,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:480,columnNumber:94},this)," You'll be asked to approve this step"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:480,columnNumber:21},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:477,columnNumber:17},this)]},t.id||D,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:475,columnNumber:15},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:473,columnNumber:11},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:472,columnNumber:9},this),s&&e.jsxDEV(pe,{run:s,doc:i,onApprove:()=>c.mutate({inputs:r,approvals:["all"]}),approving:c.isPending},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:490,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:394,columnNumber:5},this)}function ne(a){switch(a){case"success":return e.jsxDEV(g,{className:"bg-green-100 text-green-700 gap-1",children:[e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:504,columnNumber:81},this)," Done"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:504,columnNumber:28},this);case"error":return e.jsxDEV(g,{className:"bg-red-100 text-red-700 gap-1",children:[e.jsxDEV(re,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:505,columnNumber:75},this)," Error"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:505,columnNumber:26},this);case"awaiting_approval":return e.jsxDEV(g,{className:"bg-amber-100 text-amber-700 gap-1",children:[e.jsxDEV(z,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:506,columnNumber:91},this)," Needs approval"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:506,columnNumber:38},this);default:return e.jsxDEV(g,{className:"bg-gray-100 text-gray-600 gap-1",children:[e.jsxDEV(P,{className:"w-3 h-3 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:507,columnNumber:72},this)," Running"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:507,columnNumber:21},this)}}function pe({run:a,doc:n,onApprove:i,approving:l}){const r=n.outputs||[],m=Object.keys(a.outputPayload||{}).length>0;return e.jsxDEV(o,{className:"p-5",children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[e.jsxDEV("h3",{className:"font-semibold text-gray-900",children:"Result"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:520,columnNumber:9},this),ne(a.status)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:519,columnNumber:7},this),a.error&&e.jsxDEV("p",{className:"text-sm text-red-600 mb-3",children:a.error},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:524,columnNumber:21},this),m&&e.jsxDEV("div",{className:"space-y-3 mb-4",children:[r.map(s=>{const p=a.outputPayload[s.id];return p?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1",children:s.label},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:533,columnNumber:17},this),e.jsxDEV("div",{className:"text-sm text-gray-800 whitespace-pre-wrap rounded-lg bg-gray-50 border border-gray-100 p-3",children:p},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:534,columnNumber:17},this)]},s.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:532,columnNumber:15},this):null}),Object.entries(a.outputPayload).filter(([s])=>!r.some(p=>p.id===s)).map(([s,p])=>e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1",children:s},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:543,columnNumber:17},this),e.jsxDEV("div",{className:"text-sm text-gray-800 whitespace-pre-wrap rounded-lg bg-gray-50 border border-gray-100 p-3",children:p},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:544,columnNumber:17},this)]},s,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:542,columnNumber:15},this))]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:527,columnNumber:9},this),a.status==="awaiting_approval"&&i&&e.jsxDEV("div",{className:"rounded-lg border border-amber-200 bg-amber-50/60 p-3 mb-4",children:[e.jsxDEV("p",{className:"text-sm text-amber-800 flex items-center gap-1.5 mb-2",children:[e.jsxDEV(z,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:553,columnNumber:13}
6,this)," Some steps need your OK before they run."]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:552,columnNumber:11},this),e.jsxDEV(x,{size:"sm",onClick:i,disabled:l,className:"gap-1.5","data-testid":"button-approve",children:[l?e.jsxDEV(P,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:556,columnNumber:26},this):e.jsxDEV(j,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:556,columnNumber:77},this),"Approve & continue"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:555,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:551,columnNumber:9},this),Array.isArray(a.steps)&&a.steps.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-2",children:"How it ran"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:565,columnNumber:11},this),e.jsxDEV("ol",{className:"space-y-2",children:a.steps.map((s,p)=>e.jsxDEV("li",{className:"rounded-lg border border-gray-100 p-2.5",children:[e.jsxDEV("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsxDEV(g,{variant:"secondary",className:"text-[10px]",children:s.action},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:570,columnNumber:19},this),e.jsxDEV("span",{className:"text-xs text-gray-700",children:s.description},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:571,columnNumber:19},this),s.status==="success"&&e.jsxDEV(j,{className:"w-3.5 h-3.5 text-green-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:572,columnNumber:46},this),s.status==="error"&&e.jsxDEV(re,{className:"w-3.5 h-3.5 text-red-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:573,columnNumber:44},this),s.status==="awaiting_approval"&&e.jsxDEV(z,{className:"w-3.5 h-3.5 text-amber-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:574,columnNumber:56},this),s.provider&&e.jsxDEV("span",{className:"text-[10px] text-gray-400 ml-auto",children:s.provider},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:575,columnNumber:34},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:569,columnNumber:17},this),s.error&&e.jsxDEV("p",{className:"text-[11px] text-red-500 mt-1",children:s.error},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:577,columnNumber:29},this)]},s.id||p,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:568,columnNumber:15},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:566,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:564,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:518,columnNumber:5},this)}function Re({appId:a,doc:n}){const{data:i,isLoading:l}=S({queryKey:["/api/imagine/apps",a,"runs"],queryFn:()=>fetch(`/api/imagine/apps/${a}/runs`,{credentials:"include"}).then(s=>s.json())}),[r,m]=f.useState(null);return l?e.jsxDEV("div",{className:"flex justify-center py-10",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:595,columnNumber:68},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:595,columnNumber:25},this):!i||i.length===0?e.jsxDEV(o,{className:"p-8 text-center",children:[e.jsxDEV(se,{className:"w-8 h-8 text-gray-300 mx-auto mb-2"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:599,columnNumber:9},this),e.jsxDEV("p",{className:"text-gray-600",children:"No runs yet. Head to the Run tab to try it."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:600,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:598,columnNumber:7},this):e.jsxDEV("div",{className:"space-y-3",children:i.map(s=>e.jsxDEV(o,{className:"p-0 overflow-hidden",children:[e.jsxDEV("button",{onClick:()=>m(p=>p===s.id?null:s.id),className:"w-full flex items-center gap-3 p-4 text-left hover:bg-gray-50","data-testid":`run-row-${s.id}`,children:[ne(s.status),e.jsxDEV("span",{className:"text-sm text-gray-700",children:new Date(s.createdAt).toLocaleStr
6ing()},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:615,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-gray-400 ml-auto",children:["v",s.version]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:616,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:609,columnNumber:11},this),r===s.id&&e.jsxDEV("div",{className:"border-t p-4",children:e.jsxDEV(pe,{run:s,doc:n},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:620,columnNumber:15},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:619,columnNumber:13},this)]},s.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:608,columnNumber:9},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:606,columnNumber:5},this)}function $e(a){switch(a){case"available":return{badge:"bg-green-100 text-green-700",icon:e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:632,columnNumber:76},this)};case"needs_auth":return{badge:"bg-blue-100 text-blue-700",icon:e.jsxDEV(T,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:633,columnNumber:75},this)};case"needs_connector":return{badge:"bg-amber-100 text-amber-700",icon:e.jsxDEV(K,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:634,columnNumber:82},this)};case"coming_soon":return{badge:"bg-purple-100 text-purple-700",icon:e.jsxDEV(ee,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:635,columnNumber:80},this)};default:return{badge:"bg-gray-100 text-gray-600",icon:e.jsxDEV(O,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:636,columnNumber:65},this)}}}function Le({appId:a}){const{toast:n}=R(),{data:i,isLoading:l}=S({queryKey:["/api/imagine/apps",a,"connectors"],queryFn:async()=>(await A(`/api/imagine/apps/${a}/connectors`)).json()}),r=w({mutationFn:async s=>(await A("POST",`/api/imagine/apps/${a}/connectors/request`,{connectorId:s})).json(),onSuccess:s=>{n({title:s.alreadyRequested?"Already requested":"Request received",description:s.message}),h.invalidateQueries({queryKey:["/api/imagine/apps",a,"connectors"]}),h.invalidateQueries({queryKey:["/api/imagine/apps",a,"audit"]})},onError:s=>n({title:"Couldn't request",description:(s==null?void 0:s.message)||"Please try again.",variant:"destructive"})});if(l)return e.jsxDEV("div",{className:"flex justify-center py-10",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:658,columnNumber:68},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:658,columnNumber:25},this);if(!i)return e.jsxDEV(o,{className:"p-8 text-center",children:e.jsxDEV("p",{className:"text-gray-600",children:"Couldn't load connectors."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:659,columnNumber:55},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:659,columnNumber:21},this);const m=s=>s==="confirmed_write"?"Confirmed write":s==="draft"?"Draft":"Read";return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV(o,{className:"p-5",children:[e.jsxDEV("h3",{className:"font-semibold text-gray-900 mb-1 flex items-center gap-1.5",children:[e.jsxDEV(K,{className:"w-4 h-4 text-purple-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:666,columnNumber:84},this)," What this app connects to"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:666,columnNumber:9},this),e.jsxDEV("p",{className:"text-sm text-gray-600",children:i.summary},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:667,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-2 mt-3 text-xs",children:[e.jsxDEV(g,{className:"bg-green-100 text-green-700 gap-1",children:[e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:669,columnNumber:64},this)," ",i.readyCount," ready"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:669,columnNumber:11},this),i.needsActionCount>0&&e.jsxDEV(g,{className:"bg-amber-100 text-amber-700 gap-1",children:[e.jsxDEV(K,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:670,columnNumber:94},this)," ",i.needsActionCount," need a path"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:670,columnNumber:41},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:668,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:665,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-2.5",children:i.connectors.map(s=>{const p=$e(s.status);return e.jsxDEV(o,{className:"p-4","data-testid":`connector-${s.id}`,children:e.jsxDEV("div",{className:"flex items-start justify-between gap-3",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxDEV("span",{className:"font-medium text-gray-900",children:s.name},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:682,columnNumber:21},this),e.jsxDEV(g,{className:`${p.badge} gap-1 text-[10px]`,children:[p.icon," ",s.statusLabel]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:683,columnNumber:21},this),s.realInV1&&e.jsxDEV(g,{variant:"secondary",className:"text-[10px]",children:"Works now"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:684,columnNumber:36},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:681,columnNumber:19},this),e.jsxDEV("p",{className:"text-xs text-gray-500 mt-1",children:s.capability},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:686,columnNumber:19},this),s.reasons.length>0&&e.jsxDEV("p",{className:"text-[11px] text-gray-400 mt-1",children:s.reasons.join(" · ")},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:688,columnNumber:21},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:680,columnNumber:17},this),s.requestable&&s.status!=="available"&&(s.requested?e.jsxDEV(g,{className:"bg-gray-100 text-gray-600 gap-1 shrink-0",children:[e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:693,columnNumber:81},this)," Requested"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:693,columnNumber:21},this):e.jsxDEV(x,{size:"sm",variant:"outline",className:"gap-1.5 shrink-0",disabled:r.isPending,onClick:()=>r.mutate(s.id),"data-testid":`button-request-${s.id}`,children:[r.isPending&&r.variables===s.id?e.jsxDEV(P,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:701,columnNumber:74},this):e.jsxDEV(K,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:701,columnNumber:125},this),"Request"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:695,columnNumber:21},this))]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:679,columnNumber:15},this)},s.id,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:678,columnNumber:13},this)})},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:674,columnNumber:7},this),e.jsxDEV(o,{className:"p-5 border-purple-100 bg-purple-50/40",children:[e.jsxDEV("h4",{className:"font-semibold text-gray-900 mb-1 flex items-center gap-1.5",children:[e.jsxDEV(z,{className:"w-4 h-4 text-purple-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:713,columnNumber:84},this)," Safety & permissions"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:713,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-1.5 flex-wrap mb-2",children:i.security.levels.map(s=>e.jsxDEV(g,{variant:"secondary",className:"text-[10px] gap-1",children:[s==="read"?e.jsxDEV(H,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:717,columnNumber:31},this):s==="draft"?e.jsxDEV(De,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:717,columnNumber:77},this):e.jsxDEV(xe,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:717,columnNumber:114},this),m(s)]},s,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:716,columnNumber:13},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:714,columnNumber:9},this),e.jsxDEV("ul",{className:"text-xs text-gray-600 space-y-1",children:i.security.notes.map((s,p)=>e.jsxDEV("li",{className:"flex gap-1.5",children:[e.jsxDEV(j,{className:"w-3.5 h-3.5 text-green-500 shrink-0 mt-px"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:723,columnNumber:83},this)," ",s]},p,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:723,columnNumber:46},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:722,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:712,columnNumber:7},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:664,columnNumber:5},this)}function Te(a){switch(a){case"executed":case"approved":return"bg-green-100 text-green-700";case"prepared":return"bg-blue-100 text-blue-700";case"denied":return"bg-amber-100 text-amber-700";case"error":return"bg-red-100 text-red-700";default:return"bg-gray-100 text-gray-600"}}function Fe({appId:a}){const{data:n,isLoading:i}=S({queryKey:["/api/imagine/apps",a,"audit"],queryFn:async()=>(await A(`/api/imagine/apps/${a}/audit`)).json()});if(i)return e.jsxDEV("div",{className:"flex justify-center py-10",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:747,columnNumber:68},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:747,columnNumber:25},this);if(!n||n.length===0)return e.jsxDEV(o,{className:"p-8 text-center",children:[e.jsxDEV(Z,{className:"w-8 h-8 text-gray-300 mx-auto mb-2"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:751,columnNumber:9},this),e.jsxDEV("p",{className:"text-gray-600",children:"No sensitive activity yet."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:752,columnNumber:9},this),e.jsxDEV("p",{className:"text-sm text-gray-500 mt-1",children:"Writes, web searches and connector requests show up here once they happen."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:753,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:750,columnNumber:7},this);const l=r=>r==="confirmed_write"?"Confirmed write":r==="draft"?"Draft":"Read";return e.jsxDEV("div",{className:"space-y-2.5",children:n.map(r=>e.jsxDEV(o,{className:"p-3.5","data-testid":`audit-${r.id}`,children:e.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxDEV(g,{variant:"secondary",className:"text-[10px]",children:r.action.replace(/_/g," ")},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:765,columnNumber:13},this),e.jsxDEV(g,{className:`${Te(r.status)} text-[10px] capitalize`,children:r.status},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:766,columnNumber:13},this),e.jsxDEV(g,{variant:"outline",className:"text-[10px]",children:l(r.permissionLevel)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:767,columnNumber:13},this),r.connectorId&&e.jsxDEV("span",{className:"text-[11px] text-gray-400",children:["via ",r.connectorId.replace(/_/g," ")
6]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:768,columnNumber:31},this),e.jsxDEV("span",{className:"text-[11px] text-gray-400 ml-auto",children:new Date(r.createdAt).toLocaleString()},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:769,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:764,columnNumber:11},this)},r.id,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:763,columnNumber:9},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:761,columnNumber:5},this)}function Me({appId:a}){var V;const{toast:n}=R(),{data:i,isLoading:l}=S({queryKey:["/api/imagine/apps",a,"settings"]}),[r,m]=f.useState(""),[s,p]=f.useState(!0),[N,b]=f.useState(!1);f.useEffect(()=>{var v,y;i&&!N&&(m(typeof((v=i.settings)==null?void 0:v.tone)=="string"?i.settings.tone:""),p(((y=i.settings)==null?void 0:y.useMemory)!==!1),b(!0))},[i,N]);const d=w({mutationFn:async()=>(await A("PUT",`/api/imagine/apps/${a}/settings`,{settings:{tone:r,useMemory:s}})).json(),onSuccess:()=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a,"settings"]}),n({title:"Saved"})},onError:()=>n({title:"Couldn't save",description:"Please try again.",variant:"destructive"})});if(l)return e.jsxDEV("div",{className:"flex justify-center py-10",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:807,columnNumber:68},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:807,columnNumber:25},this);const c=Array.isArray((V=i==null?void 0:i.memory)==null?void 0:V.recent)?i.memory.recent:[];return e.jsxDEV(o,{className:"p-5 space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV(_,{className:"text-sm font-medium text-gray-700",children:"Tone & style"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:814,columnNumber:9},this),e.jsxDEV("p",{className:"text-xs text-gray-400 mb-1.5",children:'How should it sound? e.g. "warm and concise", "formal".'},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:815,columnNumber:9},this),e.jsxDEV(ie,{value:r,onChange:v=>m(v.target.value),placeholder:"Default","data-testid":"input-tone"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:816,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:813,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("div",{children:[e.jsxDEV(_,{className:"text-sm font-medium text-gray-700",children:"Remember across runs"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:821,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-gray-400",children:"Let this app recall recent runs for context."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:822,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:820,columnNumber:9},this),e.jsxDEV(be,{checked:s,onCheckedChange:p,"data-testid":"switch-memory"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:824,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:819,columnNumber:7},this),c.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1.5",children:"What it remembers"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:829,columnNumber:11},this),e.jsxDEV("ul",{className:"space-y-1",children:c.slice(-5).reverse().map((v,y)=>e.jsxDEV("li",{className:"text-xs text-gray-600 flex items-start gap-1.5",children:[e.jsxDEV(he,{className:"w-3 h-3 mt-0.5 text-gray-300 flex-shrink-0"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:833,columnNumber:17},this)," ",e.jsxDEV("span",{className:"line-clamp-1",children:v},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:833,columnNumber:85},this)]},y,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:832,columnNumber:15},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:830,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:828,columnNumber:9},this),e.jsxDEV(x,{onClick:()=>d.mutate(),disabled:d.isPending,className:"gap-1.5","data-testid":"button-save-settings",children:[d.isPending?e.jsxDEV(P,{className:"w-4 h-4 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:841,columnNumber:27},this):e.jsxDEV(j,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:841,columnNumber:74},this)," Save settings"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:840,columnNumber:7},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:812,columnNumber:5},this)}function Ke({appId:a,app:n}){const{toast:i}=R(),{data:l,isLoading:r}=S({queryKey:["/api/imagine/apps",a,"versions"]}),m=w({mutationFn:async s=>(await A("POST",`/api/imagine/apps/${a}/rollback`,{version:s})).json(),onSuccess:()=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a]}),h.invalidateQueries({queryKey:["/api/imagine/apps",a,"versions"]}),h.invalidateQueries({queryKey:["/api/imagine/apps"]}),i({title:"Rolled back",description:"Restored as a new version."})},onError:()=>i({title:"Couldn't roll back",description:"Please try again.",variant:"destructive"})});return r?e.jsxDEV("div",{className:"flex justify-center py-10",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:866,columnNumber:68},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:866,columnNumber:25},this):!l||l.length===0?e.jsxDEV(o,{className:"p-8 text-center text-gray-600",children:"No version history yet."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:868,columnNumber:12},this):e.jsxDEV(o,{className:"p-4",children:[e.jsxDEV("p",{className:"font-semibold text-gray-900 mb-3 text-sm",children:"Version history"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:873,columnNumber:7},this),e.jsxDEV("ul",{className:"space-y-2",children:l.map(s=>e.jsxDEV("li",{className:"flex items-center gap-2 text-sm text-gray-700","data-testid":`version-${s.version}`,children:[e.jsxDEV(g,{variant:"secondary",className:"text-[10px]",children:["v",s.version]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:877,columnNumber:13},this),e.jsxDEV("span",{children:s.label||"Version"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:878,columnNumber:13},this),s.isValid?e.jsxDEV(j,{className:"w-3.5 h-3.5 text-green-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:879,columnNumber:26},this):e.jsxDEV(O,{className:"w-3.5 h-3.5 text-amber-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:879,columnNumber:77},this),s.version===n.currentVersion?e.jsxDEV("span",{className:"text-[10px] text-purple-500 ml-auto",children:"current"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:881,columnNumber:15},this):e.jsxDEV(x,{size:"sm",variant:"ghost",className:"gap-1 ml-auto text-purple-600 hover:text-purple-700 h-
67",onClick:()=>m.mutate(s.version),disabled:m.isPending,"data-testid":`button-rollback-${s.version}`,children:[e.jsxDEV(fe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:891,columnNumber:17},this)," Restore"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:883,columnNumber:15},this)]},s.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:876,columnNumber:11},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:874,columnNumber:7},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:872,columnNumber:5},this)}function ze({appId:a,app:n,doc:i,onDeleted:l}){const{toast:r}=R(),[m,s]=f.useState("visual"),[p,N]=f.useState(""),b=w({mutationFn:async()=>(await A("POST",`/api/imagine/apps/${a}/repair`)).json(),onSuccess:t=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a]}),h.invalidateQueries({queryKey:["/api/imagine/apps"]}),h.invalidateQueries({queryKey:["/api/imagine/apps",a,"versions"]}),r({title:t.isValid?"All fixed!":"Repaired what we could",description:t.isValid?"Your app is valid now.":"Some things still need a human touch."})},onError:()=>r({title:"Repair failed",description:"Please try again.",variant:"destructive"})}),d=w({mutationFn:async t=>(await A("POST",`/api/imagine/apps/${a}/edit`,{instruction:t})).json(),onSuccess:t=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a]}),h.invalidateQueries({queryKey:["/api/imagine/apps"]}),h.invalidateQueries({queryKey:["/api/imagine/apps",a,"versions"]}),N(""),r({title:"Frenly made the change",description:t.isValid?"A new version is ready.":"Saved a new version — a couple of things still need a fix."})},onError:t=>r({title:"Could not make that change",description:(t==null?void 0:t.message)||"Please try again.",variant:"destructive"})}),c=w({mutationFn:async t=>(await A("PATCH",`/api/imagine/apps/${a}`,{status:t})).json(),onSuccess:()=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a]}),h.invalidateQueries({queryKey:["/api/imagine/apps"]})},onError:t=>r({title:"Could not update",description:(t==null?void 0:t.message)||"Please try again.",variant:"destructive"})}),V=w({mutationFn:async t=>(await A("PATCH",`/api/imagine/apps/${a}`,{visibility:t})).json(),onSuccess:()=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a]}),h.invalidateQueries({queryKey:["/api/imagine/apps"]})},onError:()=>r({title:"Could not update sharing",description:"Please try again.",variant:"destructive"})}),v=w({mutationFn:async()=>(await A("DELETE",`/api/imagine/apps/${a}`)).json(),onSuccess:()=>{h.invalidateQueries({queryKey:["/api/imagine/apps"]}),r({title:"Deleted"}),l()},onError:()=>r({title:"Could not delete",description:"Please try again.",variant:"destructive"})}),y=i.validationIssues||[],q=y.filter(t=>t.severity==="error"),F=y.filter(t=>t.severity==="warning"),u=i.blueprint;return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV(o,{className:"p-5",children:e.jsxDEV("div",{className:"flex flex-wrap items-center gap-2",children:[!n.isValid&&e.jsxDEV(x,{size:"sm",onClick:()=>b.mutate(),disabled:b.isPending,className:"gap-1.5","data-testid":"button-repair",children:[b.isPending?e.jsxDEV(P,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:981,columnNumber:35},this):e.jsxDEV(ve,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:981,columnNumber:86},this),"Auto-Repair"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:980,columnNumber:13},this),n.isValid&&e.jsxDEV(x,{size:"sm",variant:n.status==="active"?"outline":"default",onClick:()=>c.mutate(n.status==="active"?"draft":"active"),disabled:c.isPending,className:"gap-1.5","data-testid":"button-toggle-status",children:n.status==="active"?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(T,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:994,columnNumber:44},this)," Set to draft"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:994,columnNumber:42},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(te,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:994,columnNumber:97},this)," Activate"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:994,columnNumber:95},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:986,columnNumber:13},this),e.jsxDEV(x,{size:"sm",variant:"ghost",onClick:()=>{confirm(`Delete "${n.name}
6"? This can't be undone.`)&&v.mutate()},disabled:v.isPending,className:"gap-1.5 text-red-500 hover:text-red-600 ml-auto","data-testid":"button-delete",children:[e.jsxDEV(Pe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1005,columnNumber:13},this)," Delete"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:997,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:978,columnNumber:9},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:977,columnNumber:7},this),e.jsxDEV(o,{className:"p-5 border-purple-100 bg-purple-50/40",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxDEV(C,{className:"w-4 h-4 text-purple-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1012,columnNumber:11},this),e.jsxDEV("h3",{className:"font-semibold text-gray-900",children:"Talk to Frenly to change it"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1013,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1011,columnNumber:9},this),e.jsxDEV("p",{className:"text-sm text-gray-500 mb-3",children:"Describe what you'd like in plain English — Frenly will tweak the labels and intent and save a new version."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1015,columnNumber:9},this),e.jsxDEV(ae,{value:p,onChange:t=>N(t.target.value),placeholder:'e.g. "make the summary shorter" or "rename the upload screen to Drop files"',rows:2,className:"resize-none bg-white",disabled:d.isPending,"data-testid":"input-edit-instruction",onKeyDown:t=>{(t.metaKey||t.ctrlKey)&&t.key==="Enter"&&p.trim()&&!d.isPending&&d.mutate(p.trim())}},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1018,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center justify-between mt-3",children:[e.jsxDEV("p",{className:"text-[11px] text-gray-400",children:"Frenly can rename things, never add or remove screens."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1033,columnNumber:11},this),e.jsxDEV(x,{size:"sm",onClick:()=>d.mutate(p.trim()),disabled:!p.trim()||d.isPending,className:"gap-1.5","data-testid":"button-edit",children:[d.isPending?e.jsxDEV(P,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1041,columnNumber:31},this):e.jsxDEV(Q,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1041,columnNumber:82},this),"Make the change"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1034,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1032,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1010,columnNumber:7},this),e.jsxDEV(Qe,{app:n},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1047,columnNumber:7},this),e.jsxDEV(He,{app:n,onSetVisibility:t=>V.mutate(t),pending:V.isPending},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1049,columnNumber:7},this),!n.isValid&&q.length>0&&e.jsxDEV(o,{className:"p-4 border-amber-200 bg-amber-50/60",children:[e.jsxDEV("p",{className:"font-medium text-amber-800 flex items-center gap-1.5 mb-2",children:[e.jsxDEV(O,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1054,columnNumber:13},this)," Needs fixing before it can run"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1053,columnNumber:11},this),e.jsxDEV("ul",{className:"text-sm text-amber-700 space-y-1 list-disc pl-5",children:q.map((t,D)=>e.jsxDEV("li",{children:t.message},D,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1057,columnNumber:35},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1056,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1052,columnNumber:9},this),u&&e.jsxDEV(o,{className:"p-5",children:[e.jsxDEV("h3",{className:"font-semibold text-gray-900 mb-3",children:"The plan, in plain English"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1064,columnNumber:11},this),e.jsxDEV(me,{blueprint:u},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1065,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1063,columnNumber:9},this),e.jsxDEV(o,{className:"p-0 overflow-hidden",children:[e.jsxDEV("div",{className:"flex border-b",children:[e.jsxDEV("button",{onClick:()=>s("visual"),className:`flex-1 py-2.5 text-sm font-medium flex items-center justify-center gap-1.5 ${m==="visual"?"text-purple-600 border-b-2 border-purple-600":"text-gray-500"}`,"data-testid":"tab-visual",children:[e.jsxDEV(L,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1072,columnNumber:13},this)," Visual"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1071,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>s("yaml"),className:`flex-1 py-2.5 text-sm font-medium flex items-center justify-center gap-1.5 ${m==="yaml"?"text-purple-600 border-b-2 border-purple-600":"text-gray-500"}`,"data-testid":"tab-yaml",children:[e.jsxDEV(B,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1075,columnNumber:13},this)," VibeML"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1074,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1070,columnNumber:9},this),e.jsxDEV("div",{className:"p-4",children:m==="visual"?e.jsxDEV(ce,{doc:i.vibeml,warnings:F},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1080,columnNumber:15},this):e.jsxDEV("pre",{className:"text-xs leading-relaxed bg-gray-900 text-gray-100 rounded-lg p-4 overflow-x-auto",children:e.jsxDEV("code",{children:le(i.vibeml)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1081,columnNumber:113},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1081,columnNumber:15},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1078,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1069,columnNumber:7},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:976,columnNumber:5},this)}const Oe=["productivity","writing","research","education","fun","business","creative","other"];function Qe({app:a}){const{toast:n}=R(),i=a.publishStatus==="published",l=a.publishStatus==="unpublished_by_admin",[r,m]=f.useState(a.tagline??""),[s,p]=f.useState(a.category??""),N=()=>{h.invalidateQueries({queryKey:["/api/imagine/apps",a.id]}),h.invalidateQueries({queryKey:["/api/imagine/apps"]})},b=w({mutationFn:async()=>(await A("POST",`/api/imagine/apps/${a.id}/publish`,{tagline:r.trim()||void 0,category:s||void 0})).json(),onSuccess:()=>{N(),n({title:"Published!",description:"Your app is now in the Marketplace."})},onError:c=>{var V;N(),n({title:(V=c==null?void 0:c.message)!=null&&V.includes("safety")?"Didn't pass the safety check":"Could not publish",description:(c==null?void 0:c.message)||"Please try again.",variant:"destructive"})}}),d=w({mutationFn:async()=>(await A("POST",`/api/imagine/apps/${a.id}/unpublish`)).json(),onSuccess:()=>{N(),n({title:"Unpublished",description:"Removed from the Marketplace. The share link still works."})},onError:()=>n({title:"Could not unpublish",description:"Please try again.",variant:"destructive"})});return e.jsxDEV(o,{className:"p-5 mb-5","data-testid":"card-publish",children:[e.jsxDEV("div",{className:"flex items-center justify-between gap-2 mb-1",children:[e.jsxDEV("p",{className:"font-semibold text-gray-900 text-sm flex items-center gap-1.5",children:[e.jsxDEV(W,{className:"w-4 h-4 text-purple-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1140,columnNumber:11},this)," Marketplace"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1139,columnNumber:9},this),i?e.jsxDEV(g,{className:"bg-green-100 text-green-700 gap-1",children:[e.jsxDEV(j,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1143,columnNumber:66},this)," Published"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1143,columnNumber:13},this):e.jsxDEV(g,{variant:"secondary",className:"gap-1",children:[e.jsxDEV(T,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1144,columnNumber:58},this)," Not published"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1144,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1138,columnNumber:7},this),e.jsxDEV("p",{className:"text-xs text-gray-500 mb-3",children:"Publishing runs an automated safety check, then lists your app for everyone to discover, use, and remix."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1146,columnNumber:7},this),l&&e.jsxDEV("div",{className:"mb-3 rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700 flex items-start gap-2","data-testid":"banner-admin-removed",children:[e.jsxDEV(G,{className:"w-4 h-4 mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1152,columnNumber:11},this),e.jsxDEV("span",{children:a.safetyReason||"An administrator removed this app from the Marketplace."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1153,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1151,columnNumber:9},this),!i&&a.safetyStatus==="failed"&&a.safetyReason&&e.jsxDEV("div",{className:"mb-3 rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-700 flex items-start gap-2","data-testid":"banner-safety-failed",children:[e.jsxDEV(G,{className:"w-4 h-4 mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1159,columnNumber:11},this),e.jsxDEV("span",{children:["Safety check: ",a.safetyReason]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1160,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1158,columnNumber:9},this),!i&&e.jsxDEV("div",{className:"space-y-3 mb-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"text-xs font-medium text-gray-600 block mb-1",children:["Tagline ",e.jsxDEV("span",{className:"text-gray-400",children:"(optional)"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1167,c
6olumnNumber:85},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1167,columnNumber:13},this),e.jsxDEV(ie,{value:r,onChange:c=>m(c.target.value),maxLength:160,placeholder:"One line on what your app does","data-testid":"input-publish-tagline"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1168,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1166,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"text-xs font-medium text-gray-600 block mb-1",children:["Category ",e.jsxDEV("span",{className:"text-gray-400",children:"(optional)"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1177,columnNumber:86},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1177,columnNumber:13},this),e.jsxDEV("select",{value:s,onChange:c=>p(c.target.value),className:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm capitalize","data-testid":"select-publish-category",children:[e.jsxDEV("option",{value:"",children:"Choose a category…"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1184,columnNumber:15},this),Oe.map(c=>e.jsxDEV("option",{value:c,className:"capitalize",children:c},c,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1185,columnNumber:50},this))]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1178,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1176,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1165,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:i?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(x,{size:"sm",variant:"outline",onClick:()=>d.mutate(),disabled:d.isPending,className:"gap-1.5","data-testid":"button-unpublish",children:[d.isPending?e.jsxDEV(P,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1198,columnNumber:38},this):e.jsxDEV(T,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1198,columnNumber:89},this)," Unpublish"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1194,columnNumber:13},this),e.jsxDEV(k,{href:`/marketplace/apps/${a.id}`,children:e.jsxDEV(x,{size:"sm",variant:"ghost",className:"gap-1.5","data-testid":"button-view-in-market",children:[e.jsxDEV(H,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1202,columnNumber:17},this)," View in Marketplace"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1201,columnNumber:15},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1200,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1193,columnNumber:11},this):e.jsxDEV(x,{size:"sm",onClick:()=>b.mutate(),disabled:b.isPending||!a.isValid,className:"gap-1.5","data-testid":"button-publish",children:[b.isPending?e.jsxDEV(P,{className:"w-3.5 h-3.5 animate-spin"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1211,columnNumber:34},this):e.jsxDEV(W,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1211,columnNumber:85},this)," Publish to Marketplace"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1207,columnNumber:11},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1191,columnNumber:7},this),!a.isValid&&!i&&e.jsxDEV("p",{className:"text-[11px] text-gray-400 mt-2",children:"Your app needs to be valid (no errors) before you can publish it."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1216,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1137,columnNumber:5},this)}function He({app:a,onSetVisibility:n,pending:i}){const{toast:l}=R(),r=a.visibility!=="private",m=`${window.location.origin}/a/${a.id}`,s=[{value:"private",label:"Private",help:"Only you can see it.",icon:e.jsxDEV(T,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1235,columnNumber:79},this)},{value:"unlisted",label:"Unlisted",help:"Anyone with the link can view.",icon:e.jsxDEV(X,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1236,columnNumber:91},this)},{value:"public",label:"Public",help:"Anyone with the link can view.",icon:e.jsxDEV(te,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1237,columnNumber:87},this)}],p=async()=>{try{await navigator.clipboard.writeText(m),l({title:"Link copied",description:"Share it anywhere."})}catch{l({title:"Copy failed",description:m,variant:"destructive"})}};
6return e.jsxDEV(o,{className:"p-5 mb-5","data-testid":"card-share",children:[e.jsxDEV("p",{className:"font-semibold text-gray-900 mb-1 text-sm flex items-center gap-1.5",children:[e.jsxDEV(X,{className:"w-4 h-4 text-purple-500"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1252,columnNumber:9},this)," Sharing"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1251,columnNumber:7},this),e.jsxDEV("p",{className:"text-xs text-gray-500 mb-3",children:"Choose who can see this app."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1254,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2",children:s.map(N=>{const b=a.visibility===N.value;return e.jsxDEV("button",{onClick:()=>!b&&n(N.value),disabled:i,"data-testid":`button-visibility-${N.value}`,className:`text-left rounded-xl border p-3 transition-all ${b?"border-purple-400 bg-purple-50":"border-gray-200 hover:border-purple-200"}`,children:[e.jsxDEV("span",{className:`flex items-center gap-1.5 text-sm font-medium ${b?"text-purple-700":"text-gray-700"}`,children:[N.icon," ",N.label,b&&e.jsxDEV(j,{className:"w-3.5 h-3.5 ml-auto"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1268,columnNumber:28},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1266,columnNumber:15},this),e.jsxDEV("span",{className:"block text-[11px] text-gray-500 mt-1",children:N.help},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1270,columnNumber:15},this)]},N.value,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1259,columnNumber:13},this)})},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1255,columnNumber:7},this),r&&e.jsxDEV("div",{className:"mt-4 flex items-center gap-2",children:[e.jsxDEV("div",{className:"flex-1 truncate rounded-lg bg-gray-50 border border-gray-200 px-3 py-2 text-xs text-gray-600","data-testid":"text-share-url",children:m},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1278,columnNumber:11},this),e.jsxDEV(x,{size:"sm",variant:"outline",onClick:p,className:"gap-1.5","data-testid":"button-copy-link",children:[e.jsxDEV(je,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1282,columnNumber:13},this)," Copy"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1281,columnNumber:11},this),e.jsxDEV(k,{href:`/a/${a.id}`,children:e.jsxDEV(x,{size:"sm",variant:"ghost",className:"gap-1.5","data-testid":"button-preview-public",children:[e.jsxDEV(H,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1286,columnNumber:15},this)," Preview"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1285,columnNumber:13},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1284,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1277,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1250,columnNumber:5},this)}function me({blueprint:a}){const n=({title:i,items:l})=>!l||l.length===0?null:e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1",children:i},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1299,columnNumber:9},this),e.jsxDEV("ul",{className:"space-y-1",children:l.map((r,m)=>e.jsxDEV("li",{className:"text-sm text-gray-700 flex items-start gap-2",children:[e.jsxDEV(Ae,{className:"w-3.5 h-3.5 mt-0.5 text-purple-400 flex-shrink-0"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1303,columnNumber:15},this)," ",e.jsxDEV("span",{children:r},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1303,columnNumber:91},this)]},m,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1302,columnNumber:13},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1300,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1298,columnNumber:7},this);return e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("p",{className:"text-gray-700",children:a.goal},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1312,columnNumber:7},this),e.jsxDEV(n,{title:"It takes in",items:a.inputs},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1313,columnNumber:7},this),e.jsxDEV(n,{title:"It does",items:a.actions},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1314,columnNumber:7},this),e.jsxDEV(n,{title:"You get",items:a.outputs},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1315,columnNumber:7},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1311,columnNumber:5},this)}function ce({doc:a,warnings:n}){const i=({children:l})=>e.jsxDEV("span",{className:"inline-block px-2.5 py-1 rounded-lg bg-purple-50 text-purple-700 text-xs",children:l},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1322,columnNumber:5},this);return e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1.5",children:"Screens"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1327,columnNumber:9},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:a.screens.map(l=>e.jsxDEV(i,{children:[l.title," ",e.jsxDEV("span",{className:"opacity-60",children:["· ",l.type]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1329,columnNumber:62},this)]},l.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1329,columnNumber:35},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1328,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1326,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1.5",children:"Workflows"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1333,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-2",children:a.workflows.map(l=>e.jsxDEV("div",{className:"rounded-lg border border-gray-100 p-3",children:[e.jsxDEV("p",{className:"text-sm font-medium text-gray-800",children:[l.name," ",e.jsxDEV("span",{className:"text-xs text-gray-400",children:["· on ",l.trigger]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1337,columnNumber:73},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1337,columnNumber:15},this),e.jsxDEV("ol",{className:"mt-1.5 space-y-1",children:l.steps.map(r=>e.jsxDEV("li",{className:"text-xs text-gray-600 flex items-center gap-1.5",children:[e.jsxDEV(g,{variant:"secondary",className:"text-[10px]",children:r.action},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1341,columnNumber:21},this),r.description,r.requiresApproval&&e.jsxDEV(g,{className:"bg-amber-100 text-amber-700 text-[10px]",children:"approval"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1343,columnNumber:45},this)]},r.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1340,columnNumber:19},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1338,columnNumber:15},this)]},l.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1336,columnNumber:13},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1334,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1332,columnNumber:7},this),a.connectors.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs font-semibold uppercase tracking-wide text-gray-400 mb-1.5",children:"Connectors"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1353,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:a.connectors.map(l
6=>e.jsxDEV(i,{children:[l.name," ",e.jsxDEV("span",{className:"opacity-60",children:["· ",l.status]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1355,columnNumber:66},this)]},l.id,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1355,columnNumber:40},this))},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1354,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1352,columnNumber:9},this),n.length>0&&e.jsxDEV("div",{className:"text-xs text-gray-400",children:[n.length," suggestion",n.length>1?"s":""," (won't block)"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1360,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1325,columnNumber:5},this)}function ls({appId:a}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV(oe,{children:[e.jsxDEV("title",{children:"My Apps — Your AI-built mini-apps | FrenlyAI"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1370,columnNumber:9},this),e.jsxDEV("meta",{name:"description",content:"Every mini-app you build with Frenly lives here. Open, run, edit, and manage your collection from one tidy home."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1371,columnNumber:9},this),e.jsxDEV("meta",{property:"og:description",content:"Every app you build with Frenly lives here — open, run, edit, manage your AI-built collection."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1372,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1369,columnNumber:7},this),e.jsxDEV(Ee,{feature:"My Apps",fallback:e.jsxDEV(ye,{next:"/apps",accent:"violet",heroIcons:[L,Q,Y,C],seoTitle:"My Apps · FrenlyAI",eyebrow:"My Apps",eyebrowIcon:L,title:"Every app you build, in one place.",tagline:"The mini-apps you create with Frenly live here — open, run, and manage them all from one tidy home. Sign in to see your collection.",ctaLabel:"Sign in to view your apps",stepsHeading:"How it works",steps:[{icon:Q,title:"Imagine an app",body:"Describe what you want over on Imagine."},{icon:L,title:"It lands here",body:"Every app you make is saved automatically."},{icon:Y,title:"Open & run",body:"Launch any app with a single tap."},{icon:C,title:"Manage & remix",body:"Update, rerun, or build on what you have."}],samplesHeading:"Your apps could include…",samples:[{icon:C,title:"A habit tracker",body:"The streak app you imagined, ready to run."},{icon:C,title:"A budget splitter",body:"Reopen it any time from your shelf."},{icon:C,title:"A quiz maker",body:"All your creations, neatly in one spot."}]},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1377,columnNumber:9},this),children:typeof a=="number"&&!Number.isNaN(a)?e.jsxDEV(ke,{appId:a},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1404,columnNumber:11},this):e.jsxDEV(we,{},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1405,columnNumber:11},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1374,columnNumber:7},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1368,columnNumber:5},this)}function rs({appId:a}){const[n,i]=f.useState("visual"),{data:l,isLoading:r,error:m}=S({queryKey:["/api/imagine/apps",a,"public"],queryFn:async()=>(await A(`/api/imagine/apps/${a}/public`)).json(),enabled:Number.isInteger(a),retry:!1});if(r)return e.jsxDEV("div",{className:"min-h-screen flex justify-center items-center bg-gradient-to-br from-purple-50 via-white to-pink-50",children:e.jsxDEV(P,{className:"w-6 h-6 animate-spin text-purple-400"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1432,columnNumber:9},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1431,columnNumber:7},this);if(m||!l)return e.jsxDEV("div",{className:"min-h-screen flex flex-col items-center justify-center bg-gradient-to-br from-purple-50 via-white to-pink-50 px-4 text-center",children:[e.jsxDEV(T,{className:"w-10 h-10 text-purple-300 mb-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1439,columnNumber:9},this),e.jsxDEV("p",{className:"font-medium text-gray-900",children:"This app isn't available"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1440,columnNumber:9},this),e.jsxDEV("p",{className:"text-sm text-gray-500 mt-1 mb-5",children:"It may be private or no longer shared."},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1441,columnNumber:9},this),e.jsxDEV(k,{href:"/imagine",children:e.jsxDEV(x,{className:"gap-2",children:[e.jsxDEV(M,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1442,columnNumber:57},this)," Imagine your own"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1442,columnNumber:31},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1442,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1438,columnNumber:7},this);const{app:s,doc:p}=l,N=(p.validationIssues||[]).filter(b=>b.severity==="warning");return e.jsxDEV("div",{className:"min-h-screen bg-gradient-to-br from-purple-50 via-white to-pink-50",children:e.jsxDEV("div",{className:"max-w-3xl mx-auto px-4 py-8 sm:py-12",children:[e.jsxDEV("header",{className:"mb-6",children:[e.jsxDEV(g,{className:"bg-purple-100 text-purple-700 gap-1 mb-3",children:[e.jsxDEV(H,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1454,columnNumber:71},this)," Shared app"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1454,columnNumber:11},this),e.jsxDEV("h1",{className:"text-2xl font-bold text-gray-900","data-testid":"text-public-name",children:s.name},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1455,columnNumber:11},this),e.jsxDEV("p",{className:"text-sm text-gray-500 mt-1",children:['"',s.wish,'"']},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1456,
6columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-gray-400 mt-1",children:s.runtimeTemplate.replace(/_/g," ")},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1457,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1453,columnNumber:9},this),p.blueprint&&e.jsxDEV(o,{className:"p-5 mb-5",children:[e.jsxDEV("h3",{className:"font-semibold text-gray-900 mb-3",children:"The plan, in plain English"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1462,columnNumber:13},this),e.jsxDEV(me,{blueprint:p.blueprint},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1463,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1461,columnNumber:11},this),e.jsxDEV(o,{className:"p-0 overflow-hidden mb-6",children:[e.jsxDEV("div",{className:"flex border-b",children:[e.jsxDEV("button",{onClick:()=>i("visual"),className:`flex-1 py-2.5 text-sm font-medium flex items-center justify-center gap-1.5 ${n==="visual"?"text-purple-600 border-b-2 border-purple-600":"text-gray-500"}`,"data-testid":"tab-public-visual",children:[e.jsxDEV(L,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1470,columnNumber:15},this)," Visual"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1469,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>i("yaml"),className:`flex-1 py-2.5 text-sm font-medium flex items-center justify-center gap-1.5 ${n==="yaml"?"text-purple-600 border-b-2 border-purple-600":"text-gray-500"}`,"data-testid":"tab-public-yaml",children:[e.jsxDEV(B,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1473,columnNumber:15},this)," VibeML"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1472,columnNumber:13},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1468,columnNumber:11},this),e.jsxDEV("div",{className:"p-4",children:n==="visual"?e.jsxDEV(ce,{doc:p.vibeml,warnings:N},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1478,columnNumber:17},this):e.jsxDEV("pre",{className:"text-xs leading-relaxed bg-gray-900 text-gray-100 rounded-lg p-4 overflow-x-auto",children:e.jsxDEV("code",{children:le(p.vibeml)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1479,columnNumber:115},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1479,columnNumber:17},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1476,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1467,columnNumber:9},this),e.jsxDEV("div",{className:"text-center",children:[e.jsxDEV("p",{className:"text-sm text-gray-500 mb-2",children:"Made with Frenly"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1484,columnNumber:11},this),e.jsxDEV(k,{href:"/imagine",children:e.jsxDEV(x,{className:"gap-2",children:[e.jsxDEV(M,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1485,columnNumber:59},this)," Imagine your own app"]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1485,columnNumber:33},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1485,columnNumber:11},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1483,columnNumber:9},this)]},void 0,!0,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1452,columnNumber:7},this)},void 0,!1,{fileName:"/app/client/src/pages/AppsPage.tsx",lineNumber:1451,columnNumber:5},this)}export{rs as PublicAppView,ls as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.