1import{j as e}from"./index-CfHooNjQ.js";import{d as i,a as s}from"./react-vendor-QaboSCKR.js";import{P as t}from"./useWelcomeProgress-9E0RMv5J.js";import{H as n}from"./Hero-_H0rS6wZ.js";import{p as a,an as r,M as l}from"./routes-aN95rY8g.js";import{C as o}from"./Cinzel-BoqX7UTZ.js";import{u as c}from"./useWorkspacesLive-BCAI2_tV.js";import{u as d}from"./useTenantId-BAzpvh6v.js";import{n as p}from"./Plus.es-VHcjStWY.js";import{F as u}from"./FieldModal-E2tnBvsx.js";import{F as f,a as m,b as g}from"./FormField-aB0771Lm.js";import{p as b}from"./toast-UW4uwVCl.js";import"./lenis-CYZ9w2j8.js";import"./framer-vv-CY5AZ.js";import"./gsap-CvrrfOyh.js";import"./firebase-firestore-9imLgH6W.js";import"./firebase-app-NszzeGgl.js";import"./firebase-C59sj7zD.js";import"./firestore-DsC8L1pI.js";import"./useFirestoreSnapshot-DnG3vPBf.js";import"./use-reduced-motion-CiAw0R6O.js";import"./livekit-UlB0541D.js";import"./nadia-CbP0KdC-.js";import"./priya-chat-Cooaxzza.js";import"./useAuth-CGdeD6Lm.js";import"./ops-v4-routes-D6xdeB8x.js";import"./index-COVke7E_.js";import"./x-BnI8hONJ.js";import"./SmallBtn-DitJjhhp.js";const j=["starter","growth","scale","enterprise"];function h({onClose:i,onCreate:t}){const[n,a]=s.useState(""),[r,l]=s.useState("starter"),[o,c]=s.useState(!1),[d,b]=s.useState(null),h=s.useCallback(async()=>{if(n.trim()&&!o){c(!0),b(null);try{await t({name:n.trim(),tier:r}),i()}catch(e){const i=e instanceof Error?e.message:"Unable to create workspace.";b(i),c(!1)}}},[n,r,o,t,i]),x=n.trim().length>0&&!o;return e.jsx(u,{open:!0,title:"New workspace",icon:p,onSubmit:h,onClose:i,submitLabel:"Create",cancelLabel:"Cancel",canSubmit:x,error:d,testId:"new-workspace-modal",children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12},children:[e.jsx(f,{label:"Name",children:e.jsx(m,{type:"text",value:n,maxLength:120,"aria-required":"true","aria-invalid":0===n.trim().length,onChange:e=>a(e.target.value)})}),e.jsx(f,{label:"Tier",children:e.jsx("select",{value:r,onChange:e=>l(e.target.value),style:{...g},children:j.map(i=>e.jsx("option",{value:i,children:i},i))})})]})})}function x({ws:i,actions:s}){const{open:n,duplicate:a,license:r,billing:c}=s;return e.jsxs("article",{role:"listitem","aria-label":`Workspace ${i.name}`,"data-testid":`workspace-${i.id}`,className:"tile",style:{borderLeft:`3px solid ${i.accent}`},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[e.jsx("div",{"aria-hidden":"true",style:{width:54,height:54,background:i.accent,display:"flex",alignItems:"center",justifyContent:"center",fontFamily:"Cinzel, serif",fontWeight:700,fontSize:22,color:t.black0,letterSpacing:"-.02em"},children:i.logo}),e.jsxs("div",{style:{flex:1},children:[e.jsx(o,{as:"div",size:"data",weight:"bold",tracking:"tight",children:i.name}),e.jsxs(l,{as:"div",size:"sm",tone:"ink3",letterSpacing:"wider",caps:!0,style:{marginTop:3},children:[i.role," · ",i.tier]})]})]}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:8,marginTop:14,paddingTop:12,borderTop:"1px solid var(--line)"},children:[e.jsxs("div",{children:[e.jsx(l,{as:"div",size:"xs",tone:"ink3",letterSpacing:"wider",caps:!0,children:"AGENTS"}),e.jsx("div",{style:{fontFamily:"IBM Plex Mono, monospace",fontSize:16,color:i.accent,marginTop:2},children:i.agents})]}),e.jsxs("div",{children:[e.jsx(l,{as:"div",size:"xs",tone:"ink3",letterSpacing:"wider",caps:!0,children:"FLOWS"}),e.jsx(l,{as:"div",size:"display",tone:"ink1",letterSpacing:"none",style:{marginTop:2},children:i.flows})]}),e.jsxs("div",{children:[e.jsx(l,{as:"div",size:"xs",tone:"ink3",letterSpacing:"wider",caps:!0,children:"LEADS"}),e.jsx(l,{as:"div",size:"display",tone:"ink1",letterSpacing:"none",style:{marginTop:2},children:i.leads})]})]}),e.jsxs("div",{style:{marginTop:12,display:"flex",gap:4,flexWrap:"wrap"},children:[e.jsx("button",{type:"button",className:"pill focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-beon-yellow focus-visible:ring-offset-2 focus-visible:ring-offset-beon-black","aria-label":`Open ${i.name}`,onClick:()=>n(i.id),children:"Open"}),e.jsx("button",{type:"button",className:"pill focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-beon-yellow focus-visible:ring-offset-2 focus-visible:ring-offset-beon-black","aria-label":`Duplicate ${i.name}`,onClick:()=>{a(i.id)},children:"Duplicate"}),e.jsx("button",{type:"button",className:"pill focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-beon-yellow focus-visible:ring-offset-2 focus-visible:ring-offset-beon-black","aria-label":`License to client ${i.name}`,onClick:()=>r(i.id),children:"License to client"}),e.jsx("button",{type:"button",className:"pill focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-beon-yellow focus-visible:ring-offset-2 focus-visible:ring-offset-beon-black","aria-label":`Billing ${i.name}`,onClick:()=>c(i.id),children:"Billing"})]})]})}function k(){const{workspaces:p,loading:u,error:f}=c(),m=function(){const e=i(),t=d();return{open:s.useCallback(i=>
1{e(`/v4/workspace/${i}`)},[e]),duplicate:s.useCallback(async e=>{const i=await a("/.netlify/functions/chain-template-crud",{method:"POST",json:{op:"duplicate-workspace",tenantId:t,sourceId:e}});if(!i.ok)throw new Error(`duplicate-workspace failed: ${i.status}`);const s=await i.json();if("object"==typeof s&&null!==s&&"id"in s&&"string"==typeof s.id)return{id:s.id};throw new Error("duplicate-workspace: missing id in response")},[t]),license:s.useCallback(i=>{e(`/v4/workspace/${i}/license`)},[e]),billing:s.useCallback(i=>{e(`/v4/workspace/${i}/billing`)},[e]),create:s.useCallback(async(e,i)=>{const s=await a("/.netlify/functions/chain-template-crud",{method:"POST",json:{op:"create-workspace",tenantId:t,name:e,tier:i}});if(!s.ok)throw new Error(`create-workspace failed: ${s.status}`);const n=await s.json();if("object"==typeof n&&null!==n&&"id"in n&&"string"==typeof n.id)return{id:n.id};throw new Error("create-workspace: missing id in response")},[t])}}(),g=i(),[j,k]=s.useState(!1),w=s.useRef(null),v=s.useCallback(()=>{k(!0)},[]),y=s.useCallback(()=>{k(!1),window.setTimeout(()=>{w.current&&w.current.focus()},0)},[]),C=s.useCallback(async e=>{try{const i=await m.create(e.name,e.tier);return b({level:"success",title:"Workspace created"}),window.setTimeout(()=>{g(`/v4/workspace/${i.id}`)},0),i}catch(i){const e=i instanceof Error?i.message:String(i);throw b({level:"error",title:"Workspace create failed â try again",body:e}),i}},[m,g]);return e.jsxs("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},"data-testid":"workspace-route",children:[e.jsx(n,{icon:r,mission:"TENANT DIRECTORY",title:"Workspaces",sub:"Your workspaces · duplicate · license to clients · push upgrades · per-run or per-seat billing"}),e.jsx("div",{style:{display:"flex",justifyContent:"flex-end",padding:"0 24px 12px"},children:e.jsx("button",{ref:w,type:"button",className:"pill on focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-beon-yellow focus-visible:ring-offset-2 focus-visible:ring-offset-beon-black",style:{background:t.yellow,color:t.black0},onClick:v,"data-testid":"new-workspace-trigger",children:"+ New workspace"})}),j?e.jsx(h,{onClose:y,onCreate:C}):null,e.jsxs("div",{className:"page-body",children:[u?e.jsx(l,{as:"p",size:"md",tone:"ink3",testid:"workspaces-loading",children:"Loadingâ¦"}):null,f?e.jsx(l,{as:"p",size:"md",tone:"red",role:"alert",testid:"workspaces-error",children:f.message}):null,u||0!==p.length||f?null:e.jsx(l,{as:"p",size:"md",tone:"ink3",testid:"workspaces-empty",children:"No workspaces yet."}),e.jsx("div",{role:"list","aria-label":"Workspaces","data-testid":"workspaces-grid",style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(360px, 1fr))",gap:14},children:p.map(i=>e.jsx(x,{ws:i,actions:m},i.id))}),e.jsxs("section",{"aria-label":"Client licensing","data-testid":"workspace-client-licensing",style:{marginTop:20,padding:16,border:"1px dashed var(--line-2)",background:t.black0},children:[e.jsxs(l,{as:"div",size:"data",tone:"yellow",letterSpacing:"widest",caps:!0,children:[e.jsx("span",{"aria-hidden":"true",children:"⸠"}),"CLIENT LICENSING"]}),e.jsx(o,{as:"div",size:"base",weight:"bold",tracking:"tight",style:{marginTop:6},children:"Turn any workspace into a licensed, billable product."}),e.jsx("div",{style:{fontSize:12,color:t.ink2,lineHeight:1.55,marginTop:8,maxWidth:800},children:"Duplicate, rebrand, set scope, grant client access (read-only default). Choose flat, per-seat, or per-run billing. Upgrades to your HQ can be pushed â or frozen â on licensed copies. All actions audited."})]})]})]})}export{k as WorkspaceRoute};
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.