@runfusion/fusion 0.42.0 → 0.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +2454 -1618
- package/dist/client/.vite/manifest.json +74 -74
- package/dist/client/assets/AgentDetailView-BGN03dyz.css +1 -0
- package/dist/client/assets/{AgentDetailView-C5Lb3fd3.js → AgentDetailView-DKMz3r04.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-DtRcvE6M.js → AgentPermissionPolicyEditor-BiY1a4KR.js} +2 -2
- package/dist/client/assets/{AgentsView-BVW-NOYD.js → AgentsView-Co-k4vjh.js} +3 -3
- package/dist/client/assets/ChatView-BkAG99bj.js +6 -0
- package/dist/client/assets/{DevServerView-DLsFSP4s.js → DevServerView-C6DC0URX.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-_QawX-uL.js → DirectoryPicker-CkcGjyv0.js} +1 -1
- package/dist/client/assets/{DocumentsView-DierUJsj.js → DocumentsView-OCK1Vsw_.js} +1 -1
- package/dist/client/assets/{EvalsView-B83lYKQl.js → EvalsView-CUfyj5GW.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-CTctYTPU.js → ExperimentalAgentOnboardingModal-Dau9RTU_.js} +1 -1
- package/dist/client/assets/{GoalsView-CKn8i0i0.js → GoalsView-CNLTn0rX.js} +1 -1
- package/dist/client/assets/{InsightsView-EpRHCD8G.js → InsightsView-BQPxHxKI.js} +1 -1
- package/dist/client/assets/{MemoryView-Df_ocTc5.js → MemoryView-D3xQIFjj.js} +1 -1
- package/dist/client/assets/{NodesView-DF7xJ_3z.js → NodesView-CSMvGwDU.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-BOooOEDx.js → PiExtensionsManager-BtqXF3fl.js} +1 -1
- package/dist/client/assets/{PluginManager-CHrDAzK6.js → PluginManager-CSSDb3VO.js} +1 -1
- package/dist/client/assets/{PullRequestView-CJU21OZ6.js → PullRequestView-Bjyfffdu.js} +1 -1
- package/dist/client/assets/{ReliabilityView-uHkW1Qeu.js → ReliabilityView-QKMUDebT.js} +1 -1
- package/dist/client/assets/{ResearchView-oZ2-vbjL.js → ResearchView-CRU_NPho.js} +1 -1
- package/dist/client/assets/{SecretsView-BpkqSV_E.js → SecretsView-Bs8ySyC5.js} +1 -1
- package/dist/client/assets/SecretsView-Djo1rahi.css +1 -0
- package/dist/client/assets/{SessionTerminal-D9IW4cDj.js → SessionTerminal-Dk1NgmN2.js} +1 -1
- package/dist/client/assets/SettingsModal-DpAxDq6M.css +1 -0
- package/dist/client/assets/{SettingsModal-C8gsAazm.js → SettingsModal-JCaNvdAb.js} +6 -6
- package/dist/client/assets/{SettingsModal-BmB5l2bA.js → SettingsModal-Nw5cTKAK.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-BYLEU_7o.js → SetupWizardModal-CE79myEy.js} +1 -1
- package/dist/client/assets/{SkillsView-8GgQ8Z_Z.js → SkillsView-Dc8YskAX.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-CT1t1Uf2.js → StashRecoveryView-CqKOFiXT.js} +1 -1
- package/dist/client/assets/{TodoView-BUj6ITAb.js → TodoView-BqIRwcZw.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-CN7GPmvV.js → WorkflowNodeEditor-2jDuk2FR.js} +1 -1
- package/dist/client/assets/WorkflowNodeEditor-BokhW3de.css +1 -0
- package/dist/client/assets/{app-DCot4oXA.js → app-CUu1sm3x.js} +2 -2
- package/dist/client/assets/{dashboard-view-CrYwb0oQ.js → dashboard-view-BhbN8LPh.js} +1 -1
- package/dist/client/assets/{folder-open-CREXTATY.js → folder-open-Bw1mxVfa.js} +1 -1
- package/dist/client/assets/index-CpTBp1RG.js +793 -0
- package/dist/client/assets/index-DqhCiU35.css +1 -0
- package/dist/client/assets/{upload-BvLUlwaH.js → upload-BCmd-1I0.js} +1 -1
- package/dist/client/assets/{users-CjhbU-sF.js → users-DO_t3V1p.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +1892 -1107
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +6260 -86
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +177 -18
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -9
- package/dist/automation-store-EKXXEE2S.js +0 -10
- package/dist/automation-store-PLNG3X72.js +0 -10
- package/dist/automation-store-RDDYZFUJ.js +0 -10
- package/dist/chunk-2JI3F6MG.js +0 -948
- package/dist/chunk-4L6CLWJC.js +0 -8345
- package/dist/chunk-4VNS5WPM.js +0 -42
- package/dist/chunk-5RGECGQL.js +0 -1139
- package/dist/chunk-6JDLN7IL.js +0 -409
- package/dist/chunk-AICJATVW.js +0 -948
- package/dist/chunk-AWKNRUOR.js +0 -1148
- package/dist/chunk-BHM3UYWS.js +0 -4651
- package/dist/chunk-BMUXDSBF.js +0 -4647
- package/dist/chunk-GETECT6V.js +0 -353
- package/dist/chunk-GUV4QQT3.js +0 -1143
- package/dist/chunk-JKQO7YYZ.js +0 -8369
- package/dist/chunk-LYZVU6UV.js +0 -409
- package/dist/chunk-MAN4WYHO.js +0 -353
- package/dist/chunk-MCUG2Z7M.js +0 -4651
- package/dist/chunk-PSDYB45U.js +0 -948
- package/dist/chunk-RR2HM46R.js +0 -8345
- package/dist/chunk-RXMQ5OMY.js +0 -9226
- package/dist/chunk-S2EVJUY3.js +0 -353
- package/dist/chunk-UXR5XZFZ.js +0 -409
- package/dist/client/assets/AgentDetailView-DiWELtb1.css +0 -1
- package/dist/client/assets/ChatView-Dy-oIkrK.js +0 -6
- package/dist/client/assets/SecretsView-D5bHZ-wM.css +0 -1
- package/dist/client/assets/SettingsModal-bJvc9aHl.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-aPj8cv81.css +0 -1
- package/dist/client/assets/index-2kYpdJrx.js +0 -793
- package/dist/client/assets/index-CJUfvGdC.css +0 -1
- package/dist/extract-zip-WL55Z3AU.js +0 -2497
- package/dist/index.min-CHQ3ABYJ.js +0 -2926
- package/dist/memory-dreams-7USISKVE.js +0 -32
- package/dist/memory-dreams-PBPISUDD.js +0 -32
- package/dist/memory-dreams-XNO2B2QF.js +0 -32
- package/dist/migration-EH2YOCYQ.js +0 -15
- package/dist/migration-PLGTTKL5.js +0 -15
- package/dist/migration-WZEZK22R.js +0 -15
- package/dist/routine-store-GIJ6MXWY.js +0 -10
- package/dist/routine-store-HTVC2PUQ.js +0 -10
- package/dist/routine-store-KGHZBPDF.js +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./vendor-react-D37HfzIf.js";import{cV as C}from"./index-
|
|
1
|
+
import{r as e}from"./vendor-react-D37HfzIf.js";import{cV as C}from"./index-CpTBp1RG.js";function L(k={}){const{projectId:d,pollInterval:b=6e4,autoRefresh:p=!1,enabled:t=!0}=k,[S,o]=e.useState(null),[m,l]=e.useState(t),[E,c]=e.useState(null),[R,v]=e.useState(null),r=e.useRef(null),n=e.useRef(null),a=e.useRef(!0),s=e.useCallback(async()=>{if(!t){l(!1),c(null),o(null);return}r.current&&r.current.abort(),r.current=new AbortController,l(!0),c(null),o(null);try{const u=await C(d);if(!a.current)return;o(u),c(null),v(new Date),l(!1)}catch(u){if(u instanceof Error&&u.name==="AbortError"||!a.current)return;const A=u instanceof Error?u.message:"Failed to fetch memory backend status";c(A),l(!1)}},[t,d]);e.useEffect(()=>(a.current=!0,t?(s(),()=>{a.current=!1}):(r.current&&r.current.abort(),o(null),c(null),l(!1),()=>{a.current=!1})),[t,s]),e.useEffect(()=>{if(!(!t||!p))return n.current=setInterval(()=>{s()},b),()=>{n.current&&(clearInterval(n.current),n.current=null)}},[t,p,b,s]),e.useEffect(()=>()=>{a.current=!1,r.current&&r.current.abort(),n.current&&(clearInterval(n.current),n.current=null)},[]);const h=e.useCallback(()=>s(),[s]),f=m?null:S,B=f?.currentBackend??null,i=f?.capabilities??null,y=f?.availableBackends??[],I=i?.readable??!1,g=i?.writable??!1,w=i?.supportsAtomicWrite??!1;return{status:f,currentBackend:B,capabilities:i,availableBackends:y,isReadable:I,isWritable:g,supportsAtomicWrite:w,loading:m,error:E,lastUpdated:R,refresh:h}}export{L as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-D37HfzIf.js";import{cW as b,bd as L,cX as O,cY as W,cZ as _,X as G,b as Y,C,L as $}from"./index-2kYpdJrx.js";import{D as X}from"./DirectoryPicker-_QawX-uL.js";import{s as f}from"./projectDetection-G3XuxD2X.js";import{u as Z}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";import"./folder-open-CREXTATY.js";function oe({onProjectRegistered:m,onClose:j}){const{t:s}=Z("app"),y="https://github.com/runfusion/fusion/discussions",[z,P]=l.useState(!0),[t,n]=l.useState(()=>({step:b()?"manual":"auth",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",isRegistering:!1,error:null})),[x,M]=l.useState(!1),[i,u]=l.useState(""),[p,g]=l.useState(()=>b()),{nodes:N,loading:S}=L(),T=N.find(a=>a.type==="local")?.id,k=l.useCallback(()=>{P(!1),j?.()},[j]),I=l.useCallback(a=>{n(o=>{const d={manualPath:a};return a&&(!o.manualName||o.manualName===f(o.manualPath))&&(d.manualName=f(a)),{...o,...d}})},[]),R=l.useCallback(async()=>{const a=t.manualPath.trim(),o=t.manualName.trim(),d=t.manualCloneUrl.trim();if(!(!a||!o)&&!(t.manualMode==="clone"&&!d)){n(c=>({...c,isRegistering:!0,error:null}));try{const c={name:o,path:a,isolationMode:t.manualIsolationMode,nodeId:t.manualNodeId||void 0,cloneUrl:t.manualMode==="clone"?d:void 0},h=await O(c);m(h),n(B=>({...B,step:"complete",isRegistering:!1}))}catch(c){n(h=>({...h,isRegistering:!1,error:c instanceof Error?c.message:"Failed to register project"}))}}},[t.manualPath,t.manualName,t.manualCloneUrl,t.manualMode,t.manualIsolationMode,t.manualNodeId,m]),v=l.useCallback(()=>{const a=i.trim();a&&(W(a),g(a),u(""),n(o=>o.step==="auth"?{...o,step:"manual"}:o))},[i]),A=l.useCallback(()=>{_(),g(void 0),u("")},[]),F=l.useCallback(()=>{n(a=>({...a,step:"manual"}))},[]);if(!z)return null;const w=t.manualMode==="existing",r=t.manualMode==="clone",U=t.manualPath.trim().length>0,D=t.manualName.trim().length>0,E=t.manualCloneUrl.trim().length>0,H=t.isRegistering||!U||!D||r&&!E;return e.jsx("div",{className:"modal-overlay open setup-wizard-overlay",role:"dialog","aria-modal":"true","aria-labelledby":"wizard-title",children:e.jsxs("div",{className:"modal setup-wizard-modal",children:[e.jsxs("div",{className:"setup-wizard-header",children:[e.jsxs("div",{className:"setup-wizard-heading",children:[e.jsxs("div",{className:"setup-wizard-brand","aria-label":"Fusion",children:[e.jsxs("svg",{className:"setup-wizard-brand-logo",width:28,height:28,viewBox:"0 0 128 128",fill:"none","aria-label":"Fusion logo",role:"img",children:[e.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),e.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),e.jsx("span",{className:"setup-wizard-brand-name",children:"Fusion"})]}),e.jsxs("h2",{id:"wizard-title",className:"setup-wizard-title",children:[t.step==="auth"&&s("setup.setAuthToken","Set Auth Token"),t.step==="manual"&&s("setup.welcomeToFusion","Welcome to Fusion"),t.step==="complete"&&s("setup.setupComplete","Setup Complete!")]})]}),t.step!=="complete"&&e.jsx("button",{className:"modal-close",onClick:k,"aria-label":s("setup.closeWizard","Close wizard"),children:e.jsx(G,{size:20})})]}),e.jsxs("div",{className:"setup-wizard-content",children:[t.step==="auth"&&e.jsxs("div",{className:"setup-wizard-auth-step",children:[e.jsx("p",{className:"setup-wizard-auth-step-description",children:s("setup.authDescription","This dashboard requires an auth token to communicate with the Fusion daemon. Paste the token below to continue.")}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"setup-auth-token",children:s("setup.authToken","Auth Token")}),e.jsx("input",{id:"setup-auth-token",type:"password",value:i,onChange:a=>u(a.target.value),placeholder:s("setup.pasteTokenPlaceholder","Paste the daemon auth token"),autoComplete:"off",spellCheck:!1,autoFocus:!0}),e.jsx("p",{className:"form-hint",children:s("setup.tokenEnvVar","The token was set via the {{env}} environment variable when starting the dashboard.",{env:"FUSION_DAEMON_TOKEN"})})]}),t.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:t.error})]}),t.step==="manual"&&e.jsxs("div",{className:"setup-wizard-manual",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-name",children:s("setup.projectName","Project Name")}),e.jsx("input",{id:"project-name",type:"text",value:t.manualName,onChange:a=>n(o=>({...o,manualName:a.target.value})),placeholder:s("setup.projectNamePlaceholder","my-project")}),e.jsx("p",{className:"form-hint",children:r?s("setup.projectNameHintClone","By default this follows the destination folder name unless you edit it."):s("setup.projectNameHintExisting","By default this follows the selected directory name unless you edit it.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:r?s("setup.destinationDirectory","Destination Directory"):s("setup.projectDirectory","Project Directory")}),e.jsx(X,{value:t.manualPath,onChange:I,nodeId:t.manualNodeId||void 0,localNodeId:T,placeholder:r?s("setup.clonePathPlaceholder","/path/for/new-clone"):s("setup.projectPathPlaceholder","/path/to/your/project")}),e.jsx("p",{className:"form-hint",children:r?s("setup.clonePathHint","Select or type an absolute destination path. Fusion will clone into this directory."):s("setup.projectPathHint","Select or type the absolute path to your project")})]}),e.jsxs("div",{className:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":x,onClick:()=>M(a=>!a),children:[e.jsx(Y,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:s("setup.advancedSettings","Advanced settings")})]}),x&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[e.jsxs("fieldset",{className:"setup-wizard-mode-switch","aria-label":"Project setup mode",children:[e.jsx("legend",{children:s("setup.setupMode","Setup Mode")}),e.jsxs("label",{className:`setup-wizard-mode-option${w?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"existing",checked:w,onChange:()=>n(a=>({...a,manualMode:"existing",error:null}))}),e.jsx("span",{children:s("setup.useExistingDirectory","Use Existing Directory")})]}),e.jsxs("label",{className:`setup-wizard-mode-option${r?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"clone",checked:r,onChange:()=>n(a=>({...a,manualMode:"clone",error:null}))}),e.jsx("span",{children:s("setup.cloneGitRepository","Clone Git Repository")})]})]}),r&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-clone-url",children:s("setup.repositoryUrl","Repository URL")}),e.jsx("input",{id:"project-clone-url",type:"text",value:t.manualCloneUrl,onChange:a=>n(o=>({...o,manualCloneUrl:a.target.value})),placeholder:s("setup.repositoryUrlPlaceholder","https://github.com/owner/repo.git")}),e.jsx("p",{className:"form-hint",children:s("setup.cloneGitHint","Fusion will run git clone into the destination directory, then register that cloned folder.")})]}),e.jsx("div",{className:"form-group",children:e.jsxs("div",{className:"project-node-selector",children:[e.jsx("span",{className:"project-node-selector__label",children:s("setup.runtimeNode","Runtime Node")}),e.jsxs("select",{value:t.manualNodeId,onChange:a=>n(o=>({...o,manualNodeId:a.target.value})),disabled:S||t.isRegistering,children:[e.jsx("option",{value:"",children:s("setup.localNode","Local node")}),N.map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.type,")"]},a.id))]})]})}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:s("setup.isolationMode","Isolation Mode")}),e.jsxs("div",{className:"setup-wizard-isolation-options",children:[e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="in-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"in-process",checked:t.manualIsolationMode==="in-process",onChange:()=>n(a=>({...a,manualIsolationMode:"in-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.inProcess","In-Process")}),e.jsx("span",{children:s("setup.inProcessDesc","Lower overhead, shared memory. Best for most projects.")}),e.jsx("span",{className:"wizard-option-recommended",children:s("setup.recommended","Recommended")})]})]}),e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="child-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"child-process",checked:t.manualIsolationMode==="child-process",onChange:()=>n(a=>({...a,manualIsolationMode:"child-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.childProcess","Child-Process")}),e.jsx("span",{children:s("setup.childProcessDesc","Isolated execution with crash containment.")})]})]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"advanced-auth-token",children:s("setup.browserAuthToken","Browser Auth Token")}),e.jsxs("div",{className:"setup-wizard-auth-token",children:[e.jsx("input",{id:"advanced-auth-token",type:"password",value:i,onChange:a=>u(a.target.value),placeholder:p?s("setup.replaceTokenPlaceholder","Enter a new token to replace the stored one"):s("setup.pasteTokenForBrowserPlaceholder","Paste the auth token for this browser"),autoComplete:"off",spellCheck:!1}),e.jsxs("div",{className:"setup-wizard-auth-token-actions",children:[e.jsx("button",{type:"button",className:"btn",onClick:v,disabled:i.trim().length===0,children:p?s("setup.updateToken","Update token"):s("setup.setToken","Set token")}),p&&e.jsx("button",{type:"button",className:"btn",onClick:A,children:s("setup.resetToken","Reset token")})]})]}),e.jsx("p",{className:"form-hint",children:p?s("setup.tokenStoredHint","A token is already stored in this browser. You can update or reset it below."):s("setup.noTokenHint","No token is stored. Use the auth prompt at the top of the wizard, or set one here.")})]})]})]}),t.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:t.error})]}),t.step==="complete"&&e.jsxs("div",{className:"setup-wizard-complete",children:[e.jsxs("div",{className:"setup-wizard-success-streak","aria-hidden":"true",children:[e.jsx("div",{className:"setup-wizard-success-streak-core"}),e.jsx("div",{className:"setup-wizard-success-streak-glow"})]}),e.jsx(C,{size:64,className:"success-icon"}),e.jsx("h3",{children:s("setup.allSet","All Set!")}),e.jsx("p",{children:s("setup.projectRegisteredSuccess","Your project has been registered successfully.")}),e.jsx("p",{children:s("setup.addMoreProjectsHint","You can add more projects anytime from the project overview.")})]})]}),e.jsxs("div",{className:"setup-wizard-footer",children:[e.jsx("a",{className:"btn setup-wizard-help-link",href:y,target:"_blank",rel:"noreferrer",children:s("setup.needHelp","Need help?")}),t.step==="auth"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:F,children:s("setup.skip","Skip")}),e.jsx("button",{className:"btn btn-primary",onClick:v,disabled:i.trim().length===0,children:e.jsx("span",{children:s("setup.setTokenContinue","Set Token & Continue")})})]}),t.step==="manual"&&e.jsx("button",{className:"btn btn-primary",onClick:R,disabled:H,children:t.isRegistering?e.jsxs(e.Fragment,{children:[e.jsx($,{size:16,className:"animate-spin"}),e.jsx("span",{children:s("setup.registering","Registering...")})]}):e.jsx("span",{children:s("setup.registerProject","Register Project")})}),t.step==="complete"&&e.jsxs("button",{className:"btn btn-primary",onClick:k,children:[e.jsx(C,{size:16}),e.jsx("span",{children:s("setup.getStarted","Get Started")})]})]})]})})}export{oe as SetupWizardModal};
|
|
1
|
+
import{r as l,j as e}from"./vendor-react-D37HfzIf.js";import{cW as b,bd as L,cX as O,cY as W,cZ as _,X as G,b as Y,C,L as $}from"./index-CpTBp1RG.js";import{D as X}from"./DirectoryPicker-CkcGjyv0.js";import{s as f}from"./projectDetection-G3XuxD2X.js";import{u as Z}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";import"./folder-open-Bw1mxVfa.js";function oe({onProjectRegistered:m,onClose:j}){const{t:s}=Z("app"),y="https://github.com/runfusion/fusion/discussions",[z,P]=l.useState(!0),[t,n]=l.useState(()=>({step:b()?"manual":"auth",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",isRegistering:!1,error:null})),[x,M]=l.useState(!1),[i,u]=l.useState(""),[p,g]=l.useState(()=>b()),{nodes:N,loading:S}=L(),T=N.find(a=>a.type==="local")?.id,k=l.useCallback(()=>{P(!1),j?.()},[j]),I=l.useCallback(a=>{n(o=>{const d={manualPath:a};return a&&(!o.manualName||o.manualName===f(o.manualPath))&&(d.manualName=f(a)),{...o,...d}})},[]),R=l.useCallback(async()=>{const a=t.manualPath.trim(),o=t.manualName.trim(),d=t.manualCloneUrl.trim();if(!(!a||!o)&&!(t.manualMode==="clone"&&!d)){n(c=>({...c,isRegistering:!0,error:null}));try{const c={name:o,path:a,isolationMode:t.manualIsolationMode,nodeId:t.manualNodeId||void 0,cloneUrl:t.manualMode==="clone"?d:void 0},h=await O(c);m(h),n(B=>({...B,step:"complete",isRegistering:!1}))}catch(c){n(h=>({...h,isRegistering:!1,error:c instanceof Error?c.message:"Failed to register project"}))}}},[t.manualPath,t.manualName,t.manualCloneUrl,t.manualMode,t.manualIsolationMode,t.manualNodeId,m]),v=l.useCallback(()=>{const a=i.trim();a&&(W(a),g(a),u(""),n(o=>o.step==="auth"?{...o,step:"manual"}:o))},[i]),A=l.useCallback(()=>{_(),g(void 0),u("")},[]),F=l.useCallback(()=>{n(a=>({...a,step:"manual"}))},[]);if(!z)return null;const w=t.manualMode==="existing",r=t.manualMode==="clone",U=t.manualPath.trim().length>0,D=t.manualName.trim().length>0,E=t.manualCloneUrl.trim().length>0,H=t.isRegistering||!U||!D||r&&!E;return e.jsx("div",{className:"modal-overlay open setup-wizard-overlay",role:"dialog","aria-modal":"true","aria-labelledby":"wizard-title",children:e.jsxs("div",{className:"modal setup-wizard-modal",children:[e.jsxs("div",{className:"setup-wizard-header",children:[e.jsxs("div",{className:"setup-wizard-heading",children:[e.jsxs("div",{className:"setup-wizard-brand","aria-label":"Fusion",children:[e.jsxs("svg",{className:"setup-wizard-brand-logo",width:28,height:28,viewBox:"0 0 128 128",fill:"none","aria-label":"Fusion logo",role:"img",children:[e.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),e.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),e.jsx("span",{className:"setup-wizard-brand-name",children:"Fusion"})]}),e.jsxs("h2",{id:"wizard-title",className:"setup-wizard-title",children:[t.step==="auth"&&s("setup.setAuthToken","Set Auth Token"),t.step==="manual"&&s("setup.welcomeToFusion","Welcome to Fusion"),t.step==="complete"&&s("setup.setupComplete","Setup Complete!")]})]}),t.step!=="complete"&&e.jsx("button",{className:"modal-close",onClick:k,"aria-label":s("setup.closeWizard","Close wizard"),children:e.jsx(G,{size:20})})]}),e.jsxs("div",{className:"setup-wizard-content",children:[t.step==="auth"&&e.jsxs("div",{className:"setup-wizard-auth-step",children:[e.jsx("p",{className:"setup-wizard-auth-step-description",children:s("setup.authDescription","This dashboard requires an auth token to communicate with the Fusion daemon. Paste the token below to continue.")}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"setup-auth-token",children:s("setup.authToken","Auth Token")}),e.jsx("input",{id:"setup-auth-token",type:"password",value:i,onChange:a=>u(a.target.value),placeholder:s("setup.pasteTokenPlaceholder","Paste the daemon auth token"),autoComplete:"off",spellCheck:!1,autoFocus:!0}),e.jsx("p",{className:"form-hint",children:s("setup.tokenEnvVar","The token was set via the {{env}} environment variable when starting the dashboard.",{env:"FUSION_DAEMON_TOKEN"})})]}),t.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:t.error})]}),t.step==="manual"&&e.jsxs("div",{className:"setup-wizard-manual",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-name",children:s("setup.projectName","Project Name")}),e.jsx("input",{id:"project-name",type:"text",value:t.manualName,onChange:a=>n(o=>({...o,manualName:a.target.value})),placeholder:s("setup.projectNamePlaceholder","my-project")}),e.jsx("p",{className:"form-hint",children:r?s("setup.projectNameHintClone","By default this follows the destination folder name unless you edit it."):s("setup.projectNameHintExisting","By default this follows the selected directory name unless you edit it.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:r?s("setup.destinationDirectory","Destination Directory"):s("setup.projectDirectory","Project Directory")}),e.jsx(X,{value:t.manualPath,onChange:I,nodeId:t.manualNodeId||void 0,localNodeId:T,placeholder:r?s("setup.clonePathPlaceholder","/path/for/new-clone"):s("setup.projectPathPlaceholder","/path/to/your/project")}),e.jsx("p",{className:"form-hint",children:r?s("setup.clonePathHint","Select or type an absolute destination path. Fusion will clone into this directory."):s("setup.projectPathHint","Select or type the absolute path to your project")})]}),e.jsxs("div",{className:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":x,onClick:()=>M(a=>!a),children:[e.jsx(Y,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:s("setup.advancedSettings","Advanced settings")})]}),x&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[e.jsxs("fieldset",{className:"setup-wizard-mode-switch","aria-label":"Project setup mode",children:[e.jsx("legend",{children:s("setup.setupMode","Setup Mode")}),e.jsxs("label",{className:`setup-wizard-mode-option${w?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"existing",checked:w,onChange:()=>n(a=>({...a,manualMode:"existing",error:null}))}),e.jsx("span",{children:s("setup.useExistingDirectory","Use Existing Directory")})]}),e.jsxs("label",{className:`setup-wizard-mode-option${r?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"clone",checked:r,onChange:()=>n(a=>({...a,manualMode:"clone",error:null}))}),e.jsx("span",{children:s("setup.cloneGitRepository","Clone Git Repository")})]})]}),r&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-clone-url",children:s("setup.repositoryUrl","Repository URL")}),e.jsx("input",{id:"project-clone-url",type:"text",value:t.manualCloneUrl,onChange:a=>n(o=>({...o,manualCloneUrl:a.target.value})),placeholder:s("setup.repositoryUrlPlaceholder","https://github.com/owner/repo.git")}),e.jsx("p",{className:"form-hint",children:s("setup.cloneGitHint","Fusion will run git clone into the destination directory, then register that cloned folder.")})]}),e.jsx("div",{className:"form-group",children:e.jsxs("div",{className:"project-node-selector",children:[e.jsx("span",{className:"project-node-selector__label",children:s("setup.runtimeNode","Runtime Node")}),e.jsxs("select",{value:t.manualNodeId,onChange:a=>n(o=>({...o,manualNodeId:a.target.value})),disabled:S||t.isRegistering,children:[e.jsx("option",{value:"",children:s("setup.localNode","Local node")}),N.map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.type,")"]},a.id))]})]})}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:s("setup.isolationMode","Isolation Mode")}),e.jsxs("div",{className:"setup-wizard-isolation-options",children:[e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="in-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"in-process",checked:t.manualIsolationMode==="in-process",onChange:()=>n(a=>({...a,manualIsolationMode:"in-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.inProcess","In-Process")}),e.jsx("span",{children:s("setup.inProcessDesc","Lower overhead, shared memory. Best for most projects.")}),e.jsx("span",{className:"wizard-option-recommended",children:s("setup.recommended","Recommended")})]})]}),e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="child-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"child-process",checked:t.manualIsolationMode==="child-process",onChange:()=>n(a=>({...a,manualIsolationMode:"child-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.childProcess","Child-Process")}),e.jsx("span",{children:s("setup.childProcessDesc","Isolated execution with crash containment.")})]})]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"advanced-auth-token",children:s("setup.browserAuthToken","Browser Auth Token")}),e.jsxs("div",{className:"setup-wizard-auth-token",children:[e.jsx("input",{id:"advanced-auth-token",type:"password",value:i,onChange:a=>u(a.target.value),placeholder:p?s("setup.replaceTokenPlaceholder","Enter a new token to replace the stored one"):s("setup.pasteTokenForBrowserPlaceholder","Paste the auth token for this browser"),autoComplete:"off",spellCheck:!1}),e.jsxs("div",{className:"setup-wizard-auth-token-actions",children:[e.jsx("button",{type:"button",className:"btn",onClick:v,disabled:i.trim().length===0,children:p?s("setup.updateToken","Update token"):s("setup.setToken","Set token")}),p&&e.jsx("button",{type:"button",className:"btn",onClick:A,children:s("setup.resetToken","Reset token")})]})]}),e.jsx("p",{className:"form-hint",children:p?s("setup.tokenStoredHint","A token is already stored in this browser. You can update or reset it below."):s("setup.noTokenHint","No token is stored. Use the auth prompt at the top of the wizard, or set one here.")})]})]})]}),t.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:t.error})]}),t.step==="complete"&&e.jsxs("div",{className:"setup-wizard-complete",children:[e.jsxs("div",{className:"setup-wizard-success-streak","aria-hidden":"true",children:[e.jsx("div",{className:"setup-wizard-success-streak-core"}),e.jsx("div",{className:"setup-wizard-success-streak-glow"})]}),e.jsx(C,{size:64,className:"success-icon"}),e.jsx("h3",{children:s("setup.allSet","All Set!")}),e.jsx("p",{children:s("setup.projectRegisteredSuccess","Your project has been registered successfully.")}),e.jsx("p",{children:s("setup.addMoreProjectsHint","You can add more projects anytime from the project overview.")})]})]}),e.jsxs("div",{className:"setup-wizard-footer",children:[e.jsx("a",{className:"btn setup-wizard-help-link",href:y,target:"_blank",rel:"noreferrer",children:s("setup.needHelp","Need help?")}),t.step==="auth"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:F,children:s("setup.skip","Skip")}),e.jsx("button",{className:"btn btn-primary",onClick:v,disabled:i.trim().length===0,children:e.jsx("span",{children:s("setup.setTokenContinue","Set Token & Continue")})})]}),t.step==="manual"&&e.jsx("button",{className:"btn btn-primary",onClick:R,disabled:H,children:t.isRegistering?e.jsxs(e.Fragment,{children:[e.jsx($,{size:16,className:"animate-spin"}),e.jsx("span",{children:s("setup.registering","Registering...")})]}):e.jsx("span",{children:s("setup.registerProject","Register Project")})}),t.step==="complete"&&e.jsxs("button",{className:"btn btn-primary",onClick:k,children:[e.jsx(C,{size:16}),e.jsx("span",{children:s("setup.getStarted","Get Started")})]})]})]})})}export{oe as SetupWizardModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as a,j as s}from"./vendor-react-D37HfzIf.js";import{bU as H,bV as J,bW as O,bX as T,bY as Z,bT as ss,X as V,R as es,a as ls,b as is,L as U,ay as as}from"./index-
|
|
1
|
+
import{r as a,j as s}from"./vendor-react-D37HfzIf.js";import{bU as H,bV as J,bW as O,bX as T,bY as Z,bT as ss,X as V,R as es,a as ls,b as is,L as U,ay as as}from"./index-CpTBp1RG.js";import{u as ts}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";function us({projectId:o,addToast:r,onClose:W}){const{t:l}=ts("app"),[m,v]=a.useState([]),[C,L]=a.useState(!0),[$,D]=a.useState(!1),[F,N]=a.useState(null),[z,K]=a.useState([]),[u,X]=a.useState(""),[S,R]=a.useState(null),[k,b]=a.useState(null),[x,j]=a.useState(null),[B,P]=a.useState(!1),[A,w]=a.useState(null),d=a.useRef(null),[y,I]=a.useState(""),M=u.trim()?m.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.relativePath.toLowerCase().includes(u.toLowerCase())):m,g=a.useCallback(async()=>{L(!0);try{const e=await H(o);v(e)}catch(e){const t=e instanceof Error?e.message:l("skills.loadDiscoveredError","Failed to load discovered skills");r(t,"error")}finally{L(!1)}},[o,r]),h=a.useCallback(async e=>{const t=i=>{if(!i||typeof i!="object")return!1;const n=i;if(typeof n.status=="number"&&n.status>=500)return!0;if(n.details&&typeof n.details=="object"){const p=n.details;if(typeof p.code=="string"&&p.code.startsWith("upstream_"))return!0}const c=i;return typeof c.error=="string"&&typeof c.code=="string"};D(!0),N(null);try{const i=await J(e,20,o);K(i.entries)}catch(i){if(t(i))N(l("skills.catalogUnavailable","Catalog is temporarily unavailable. Please try again later."));else{const n=i instanceof Error?i.message:l("skills.loadCatalogError","Failed to load catalog");N(n)}}finally{D(!1)}},[o]);a.useEffect(()=>{g(),h("")},[g,h]);const Y=a.useCallback(e=>{X(e),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{I(e),d.current=null},300)},[]);a.useEffect(()=>()=>{d.current&&(clearTimeout(d.current),d.current=null)},[]),a.useEffect(()=>{h(y)},[y,h]);const _=a.useCallback(async(e,t)=>{const i=!t;v(n=>n.map(c=>c.id===e?{...c,toggling:!0}:c));try{await O(e,i,o),v(n=>n.map(c=>c.id===e?{...c,enabled:i,toggling:!1}:c)),r(l(`skills.${i?"enabled":"disabled"}`,i?"Skill enabled":"Skill disabled"),"success")}catch(n){v(p=>p.map(E=>E.id===e?{...E,toggling:!1}:E));const c=n instanceof Error?n.message:l("skills.toggleError","Failed to toggle skill");r(l("skills.toggleFailed","Failed to toggle skill: {{message}}",{message:c}),"error")}},[o,r]),q=a.useCallback(async e=>{const t=e.repo?.trim();if(!(!t||S===e.id)){R(e.id);try{await T(t,e.slug||e.name,o),r(l("skills.installSuccess","Installed {{name}}",{name:e.name}),"success"),await g()}catch(i){const n=i instanceof Error?i.message:l("skills.installError","Failed to install skill");r(l("skills.installFailed","Failed to install {{name}}: {{message}}",{name:e.name,message:n}),"error")}finally{R(i=>i===e.id?null:i)}}},[r,S,g,o]),f=a.useCallback(async e=>{P(!0),w(null),j(null);try{const t=await Z(e,o);j(t)}catch(t){const i=t instanceof Error?t.message:l("skills.loadContentError","Failed to load skill content");w(i)}finally{P(!1)}},[o]),Q=a.useCallback((e,t)=>{if(!(t&&t.target.closest(".skills-view-item-toggle"))){if(k===e){b(null),j(null),w(null);return}b(e),f(e)}},[k,f]),G=a.useCallback(e=>{k!==e&&b(e),f(e)},[f,k]);return s.jsxs("div",{className:"skills-view","data-testid":"skills-view",children:[s.jsxs("div",{className:"skills-view-header",children:[s.jsxs("div",{className:"skills-view-title",children:[s.jsxs("h2",{children:[s.jsx(ss,{size:20}),l("skills.title","Skills")]}),s.jsxs("span",{className:"skills-view-count","aria-label":l("skills.discoveredCount","{{count}} discovered skills",{count:m.length}),children:[m.length," ",l("skills.discovered","discovered")]})]}),s.jsxs("div",{className:"skills-view-actions",children:[s.jsx("button",{className:"btn-icon skills-view-close touch-target",onClick:W,"aria-label":l("skills.closeView","Close skills view"),children:s.jsx(V,{size:16})}),s.jsxs("button",{className:"btn btn-sm touch-target",onClick:()=>void g(),disabled:C,children:[s.jsx(es,{size:14,className:C?"spin":""}),l("common.refresh","Refresh")]})]})]}),s.jsxs("div",{className:"skills-view-content",children:[s.jsx("div",{className:"skills-view-search",children:s.jsx("input",{type:"text",className:"form-input",placeholder:l("skills.searchPlaceholder","Search skills..."),value:u,onChange:e=>Y(e.target.value),"aria-label":l("skills.searchLabel","Search skills")})}),s.jsxs("section",{className:"skills-view-section","aria-labelledby":"discovered-skills-title",children:[s.jsx("h3",{id:"discovered-skills-title",className:"skills-view-section-title",children:l("skills.discoveredSection","Discovered Skills")}),C?s.jsxs("div",{className:"skills-view-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.loadingDiscovered","Loading discovered skills...")]}):m.length===0?s.jsx("div",{className:"skills-view-empty",children:s.jsx("p",{children:l("skills.noDiscovered","No skills discovered in this project.")})}):M.length===0?s.jsx("div",{className:"skills-view-empty",children:s.jsx("p",{children:l("skills.noMatchingDiscovered","No discovered skills match your search.")})}):s.jsx("div",{className:"skills-view-list",children:M.map(e=>{const t=k===e.id;return s.jsxs("div",{children:[s.jsxs("div",{className:`skills-view-item${t?" skills-view-item--selected":""}`,onClick:i=>Q(e.id,i),role:"button",tabIndex:0,onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),Q(e.id))},"aria-expanded":t,"aria-label":l("skills.viewDetails","View details for {{name}}",{name:e.name}),children:[s.jsxs("div",{className:"skills-view-item-info",children:[s.jsxs("span",{className:"skills-view-item-name",children:[t?s.jsx(ls,{size:14}):s.jsx(is,{size:14}),e.name]}),s.jsx("span",{className:"skills-view-item-path",children:e.relativePath}),s.jsx("span",{className:"skills-view-item-source",children:e.metadata.source})]}),s.jsxs("label",{className:"skills-view-item-toggle",onClick:i=>i.stopPropagation(),children:[s.jsx("input",{type:"checkbox",checked:e.enabled,disabled:e.toggling,onChange:()=>void _(e.id,e.enabled),"aria-label":l(`skills.${e.enabled?"disable":"enable"}Skill`,e.enabled?"Disable {{name}}":"Enable {{name}}",{name:e.name})}),s.jsx("span",{className:"skills-view-toggle-slider"})]})]}),t&&s.jsxs("div",{className:"skills-view-detail","data-testid":"skill-detail",children:[s.jsxs("div",{className:"skills-view-detail-header",children:[s.jsx("span",{className:"skills-view-detail-title",children:e.name}),s.jsxs("button",{className:"btn btn-sm skills-view-detail-close",onClick:()=>{b(null),j(null),w(null)},"aria-label":l("skills.closeDetail","Close skill detail"),children:[s.jsx(V,{size:14}),l("common.close","Close")]})]}),B?s.jsxs("div",{className:"skills-view-detail-loading",children:[s.jsx(U,{size:16,className:"spin"}),l("skills.loadingContent","Loading skill content...")]}):A?s.jsxs("div",{className:"skills-view-detail-error",children:[s.jsx(as,{size:14}),s.jsx("span",{children:A}),s.jsx("button",{className:"btn btn-sm",onClick:()=>G(e.id),children:l("common.retry","Retry")})]}):x?s.jsxs(s.Fragment,{children:[s.jsx("pre",{className:"skills-view-detail-content",children:x.skillMd||l("skills.noSkillMd","(No SKILL.md found)")}),x.files.length>0&&s.jsxs("div",{className:"skills-view-detail-files",children:[s.jsxs("span",{className:"skills-view-detail-files-label",children:[l("skills.filesLabel","Files"),":"]}),x.files.map(i=>s.jsxs("span",{className:"badge badge--sm",children:[i.name,i.type==="directory"&&"/"]},i.relativePath))]})]}):null]})]},e.id)})})]}),s.jsxs("section",{className:"skills-view-section","aria-labelledby":"catalog-title",children:[s.jsx("h3",{id:"catalog-title",className:"skills-view-section-title",children:l("skills.catalogSection","Skills Catalog")}),F?s.jsxs("div",{className:"skills-view-error",children:[s.jsx("p",{children:F}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void h(y),children:l("common.tryAgain","Try Again")})]}):$?s.jsxs("div",{className:"skills-view-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.loadingCatalog","Loading catalog...")]}):z.length===0?s.jsx("div",{className:"skills-view-empty",children:u?s.jsx("p",{children:l("skills.noMatchingSearch","No skills match your search.")}):s.jsx("p",{children:l("skills.noCatalogAvailable","No skills available in the catalog.")})}):s.jsx("div",{className:"skills-view-grid",children:z.map(e=>{const i=!!e.repo?.trim(),n=S===e.id;return s.jsxs("div",{className:"skills-view-card",children:[s.jsxs("div",{className:"skills-view-card-header",children:[s.jsx("h4",{className:"skills-view-card-title",children:e.name}),i?s.jsxs("button",{type:"button",className:"btn btn-sm skills-view-card-install",onClick:()=>void q(e),disabled:n,"aria-label":l("skills.installSkill","Install {{name}}",{name:e.name}),children:[n?s.jsx(U,{size:14,className:"spin"}):null,n?l("skills.installing","Installing…"):l("skills.install","Install")]}):null]}),e.description&&s.jsx("p",{className:"skills-view-card-description",children:e.description}),e.tags&&e.tags.length>0&&s.jsx("div",{className:"skills-view-card-tags",children:e.tags.map(c=>s.jsx("span",{className:"badge badge--sm",children:c},c))}),e.installs!==void 0&&s.jsx("span",{className:"skills-view-card-installs",children:l("skills.installsCount","{{value}} installs",{value:e.installs.toLocaleString()})})]},e.id)})})]})]})]})}export{us as SkillsView};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as s}from"./vendor-react-D37HfzIf.js";import{v as g,cH as d}from"./index-
|
|
1
|
+
import{r as n,j as s}from"./vendor-react-D37HfzIf.js";import{v as g,cH as d}from"./index-CpTBp1RG.js";import{u as R}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";function L(){const{t:e}=R("app"),{confirm:f}=g(),[i,v]=n.useState([]),[h,p]=n.useState(null),[u,y]=n.useState({}),[t,c]=n.useState(null),l=n.useCallback(async()=>{try{p(null);const a=await d("/stash-recovery/orphans");v(a.records??[])}catch(a){p(a instanceof Error?a.message:e("stashRecovery.failedToLoadOrphans","Failed to load orphans"))}},[e]);n.useEffect(()=>{l()},[l]);const x=n.useMemo(()=>{const a=new Map;for(const r of i){const o=r.sourceTaskId??e("stashRecovery.unknownSource","Unknown source"),m=a.get(o)??[];m.push(r),a.set(o,m)}return Array.from(a.entries())},[i,e]),j=n.useCallback(async a=>{const r=await d(`/stash-recovery/orphans/${a}/apply`,{method:"POST"});y(o=>({...o,[a]:r.ok?e("stashRecovery.applied","Applied"):r.stderr??r.reason??e("stashRecovery.applyFailed","Apply failed")}))},[e]),b=n.useCallback(async a=>{await f({title:e("stashRecovery.dropTitle","Drop orphaned stash?"),message:e("stashRecovery.dropMessage","This removes the stash entry permanently."),confirmLabel:e("stashRecovery.dropConfirm","Drop"),danger:!0})&&(await d(`/stash-recovery/orphans/${a}/drop`,{method:"POST",body:JSON.stringify({confirm:!0})}),await l())},[f,l,e]),N=n.useCallback(async a=>{c({sha:a,diff:"",truncated:!1,loading:!0,error:null});try{const r=await d(`/stash-recovery/orphans/${a}/diff`);c({sha:a,diff:r.diff??"",truncated:!!r.truncated,loading:!1,error:null})}catch(r){c({sha:a,diff:"",truncated:!1,loading:!1,error:r instanceof Error?r.message:e("stashRecovery.failedToLoadDiff","Failed to load diff")})}},[e]);return i.length===0&&!h?s.jsxs("div",{className:"card stash-recovery-view",children:[s.jsx("p",{children:e("stashRecovery.noOrphans","No orphaned merger autostashes found.")}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void l(),children:e("actions.refresh","Refresh")})]}):s.jsxs("div",{className:"card stash-recovery-view",children:[s.jsxs("div",{className:"stash-recovery-header",children:[s.jsx("h2",{children:e("stashRecovery.title","Stash Recovery")}),s.jsx("span",{children:e("stashRecovery.orphanCount","{{count}} orphans",{count:i.length})}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void l(),children:e("actions.refresh","Refresh")})]}),h&&s.jsx("div",{className:"form-error",children:h}),x.map(([a,r])=>s.jsxs("section",{children:[s.jsx("h3",{children:a}),r.map(o=>s.jsxs("div",{className:"stash-row",children:[s.jsxs("div",{className:"stash-field",children:[s.jsx("span",{className:"stash-field-label",children:e("stashRecovery.shaLabel","SHA")}),s.jsx("span",{children:o.sha.slice(0,7)})]}),s.jsxs("div",{className:"stash-field",children:[s.jsx("span",{className:"stash-field-label",children:e("stashRecovery.classificationLabel","Classification")}),s.jsx("span",{children:o.classification})]}),s.jsxs("div",{className:"stash-field",children:[s.jsx("span",{className:"stash-field-label",children:e("stashRecovery.changedPathsLabel","Changed paths")}),s.jsx("span",{children:e("stashRecovery.fileCount","{{count}} files",{count:o.changedPaths.length})})]}),s.jsxs("div",{className:"stash-row-actions",children:[s.jsx("button",{className:"btn btn-sm stash-action-btn",onClick:()=>void N(o.sha),children:e("stashRecovery.inspectDiff","Inspect diff")}),s.jsx("button",{className:"btn btn-sm stash-action-btn",onClick:()=>void j(o.sha),children:e("stashRecovery.apply","Apply")})]}),s.jsx("div",{className:"stash-row-actions-danger",children:s.jsx("button",{className:"btn btn-sm btn-danger stash-action-btn",onClick:()=>void b(o.sha),children:e("stashRecovery.drop","Drop")})}),u[o.sha]&&s.jsx("div",{className:"stash-status",children:u[o.sha]})]},o.sha))]},a)),t&&s.jsx("div",{className:"modal-overlay open",onClick:()=>c(null),children:s.jsxs("div",{className:"modal stash-recovery-diff-modal",role:"dialog","aria-modal":"true","aria-label":e("stashRecovery.diffDialogLabel","Diff for {{sha}}",{sha:t.sha}),onClick:a=>a.stopPropagation(),children:[s.jsxs("div",{className:"modal-header",children:[s.jsx("h3",{children:e("stashRecovery.diffHeader","Diff for {{sha}}",{sha:t.sha.slice(0,7)})}),s.jsx("button",{className:"modal-close",onClick:()=>c(null),"aria-label":e("stashRecovery.closeDiffDialog","Close diff dialog"),children:"×"})]}),t.loading&&s.jsx("p",{children:e("stashRecovery.loadingDiff","Loading diff…")}),t.error&&s.jsx("div",{className:"form-error",children:t.error}),!t.loading&&!t.error&&s.jsxs(s.Fragment,{children:[s.jsx("pre",{className:"stash-recovery-diff-pre",children:t.diff||e("stashRecovery.noDiffOutput","No diff output available.")}),t.truncated&&s.jsx("p",{className:"stash-status",children:e("stashRecovery.diffTruncated","Diff output truncated.")})]}),s.jsx("div",{className:"modal-actions",children:s.jsx("button",{className:"btn",onClick:()=>c(null),children:e("actions.close","Close")})})]})})]})}export{L as StashRecoveryView};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as c,j as e}from"./vendor-react-D37HfzIf.js";import{c as Et,a7 as ut,a8 as bt,a9 as Tt,cv as Dt,cw as Ft,cx as $t,cy as Rt,cz as Mt,cA as Ot,cB as _t,cC as Ut,ac as Pt,v as Kt,j as Bt,z as q,cD as pt,L as Xt,J as zt,bJ as Q,X as Z,cE as ft,b6 as ht,U as xt,aj as Jt,a as Wt,aA as Gt,B as gt}from"./index-
|
|
1
|
+
import{r as c,j as e}from"./vendor-react-D37HfzIf.js";import{c as Et,a7 as ut,a8 as bt,a9 as Tt,cv as Dt,cw as Ft,cx as $t,cy as Rt,cz as Mt,cA as Ot,cB as _t,cC as Ut,ac as Pt,v as Kt,j as Bt,z as q,cD as pt,L as Xt,J as zt,bJ as Q,X as Z,cE as ft,b6 as ht,U as xt,aj as Jt,a as Wt,aA as Gt,B as gt}from"./index-CpTBp1RG.js";import{u as Lt}from"./vendor-i18n-CV0mwX_-.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";/**
|
|
2
2
|
* @license lucide-react v1.7.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
package/dist/client/assets/{WorkflowNodeEditor-CN7GPmvV.js → WorkflowNodeEditor-2jDuk2FR.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as o,j as e,b as Ga}from"./vendor-react-D37HfzIf.js";import{R as Ha,u as Ua,a as Ka,b as Ya,i as Ja,B as Xa,C as Qa,M as Za}from"./vendor-reactflow-CRZcPCXF.js";import{c as eo,
|
|
1
|
+
import{r as o,j as e,b as Ga}from"./vendor-react-D37HfzIf.js";import{R as Ha,u as Ua,a as Ka,b as Ya,i as Ja,B as Xa,C as Qa,M as Za}from"./vendor-reactflow-CRZcPCXF.js";import{c as eo,ew as Vt,ex as _e,ey as la,ez as to,eA as so,eB as ao,eC as ia,z as ae,j as ut,J as Ne,T as Re,B as oo,aj as no,a as je,U as ke,b8 as ra,dP as lo,i as ft,dQ as Fs,ao as da,b7 as qt,b as Pe,m as Gt,b6 as io,eD as ro,eE as co,eF as uo,eG as fo,dV as mo,p as po,cS as Is,v as wo,eH as ho,eI as go,eJ as xo,eK as bo,eL as ko,eM as vo,dN as jo,eN as No,eO as yo,eP as Co,eQ as Ms,eR as As,eS as Ps,eT as So,eU as Eo,eV as Fo,eW as Io,eX as Mo,eY as Ao,eZ as Po,e_ as Ro,e$ as Do,f0 as zo,f1 as Rs,f2 as To,f3 as Ds,f4 as zs,f5 as Lo,f6 as Lt,f7 as Oo,f8 as ca,f9 as $o,fa as Ts,fb as Wo,bU as Ls,em as ua,M as _o,X as Ht,L as Fe,bL as Bo,fc as Ot,cE as fa,bx as Vo,eq as qo,by as Go,b0 as Ho,cI as Uo,fd as Ko,fe as Yo,ff as Jo,fg as Os,fh as Xo,fi as Qo,fj as Zo,b3 as ct,av as $e,fk as en,fl as tn,fm as sn,fn as an,cs as on,fo as nn,fp as ln}from"./index-CpTBp1RG.js";import{u as ve}from"./vendor-i18n-CV0mwX_-.js";import{U as rn}from"./upload-BCmd-1I0.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.js";/**
|
|
2
2
|
* @license lucide-react v1.7.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.wf-editor-modal{--wf-editor-touch-target: calc(var(--space-xl) + var(--space-lg) + var(--space-xs));display:flex;flex-direction:column;width:min(1200px,95vw);height:min(820px,92vh);min-width:640px;min-height:480px;resize:both;overflow:hidden;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md)}.wf-create-modal{--wf-editor-touch-target: calc(var(--space-xl) + var(--space-lg) + var(--space-xs))}.wf-editor-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);border-bottom:1px solid var(--border)}.wf-editor-header h2{margin:0;font-size:1rem;color:var(--text)}.wf-editor-close{display:inline-flex;align-items:center;background:transparent;border:none;color:var(--text-muted);cursor:pointer}.wf-migration-notice{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--accent-subtle, color-mix(in srgb, #3b82f6 12%, transparent));border-bottom:1px solid var(--border);color:var(--text);font-size:.85rem}.wf-migration-notice-text{flex:1}.wf-migration-notice-dismiss{display:inline-flex;align-items:center;background:transparent;border:none;color:var(--text-muted);cursor:pointer;flex-shrink:0}.wf-migration-notice-dismiss:hover,.wf-editor-close:hover{color:var(--text)}.wf-editor-body{display:flex;flex:1;min-width:0;min-height:0}.wf-editor-sidebar{display:flex;flex-direction:column;gap:var(--space-xs);width:300px;min-width:0;padding:var(--space-sm);border-right:1px solid var(--border);overflow-x:hidden;overflow-y:auto}.wf-sidebar-panels{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0;margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--border)}.wf-sidebar-section{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.wf-sidebar-section-toggle{display:flex;align-items:center;gap:var(--space-xs);width:100%;min-width:0;padding:var(--space-xs) var(--space-sm);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;cursor:pointer}.wf-sidebar-section-toggle:hover{background:var(--bg-secondary)}.wf-sidebar-section .wf-column-panel,.wf-sidebar-section .wf-fields-panel{width:auto;min-width:0;padding:0 var(--space-xs) var(--space-xs);border-left:none;overflow-y:visible}.wf-sidebar-section .wf-column-panel-header h3,.wf-sidebar-section .wf-fields-panel-header h3{display:none}.wf-sidebar-section .wf-column-panel-header,.wf-sidebar-section .wf-fields-panel-header{justify-content:flex-end}.wf-editor-new{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer}.wf-editor-new:hover{background:var(--bg-tertiary)}.wf-editor-import{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer}.wf-editor-import:hover{background:var(--bg-tertiary)}.wf-editor-import:disabled{opacity:.6;cursor:default}.wf-editor-import-error{padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-error) 8%,var(--bg-secondary));border:1px solid var(--ws-error);border-radius:var(--radius-sm);color:var(--ws-error);font-size:.8rem}.wf-editor-import-warnings{padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-warning) 8%,var(--bg-secondary));border:1px solid var(--ws-warning);border-radius:var(--radius-sm);color:var(--ws-warning);font-size:.8rem}.wf-editor-import-warning{margin:0}.wf-editor-import-warning+.wf-editor-import-warning{margin-top:var(--space-xs)}.wf-editor-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0}.wf-editor-list li{min-width:0}.wf-editor-list-item{width:100%;min-width:0;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;padding:var(--space-xs) var(--space-sm);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text);cursor:pointer}.wf-editor-list-item:hover{background:var(--bg-secondary)}.wf-editor-list-item.active{background:var(--bg-tertiary);border-color:var(--border)}.wf-editor-empty{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-md);color:var(--text-muted);font-size:.85rem}.wf-editor-select-note{padding:var(--space-sm) var(--space-md);background:color-mix(in srgb,var(--ws-info) 8%,var(--bg-secondary));border:1px solid var(--ws-info);border-radius:var(--radius-sm);color:var(--text);font-size:.85rem}.wf-editor-canvas-wrap{display:flex;flex-direction:column;flex:1;min-width:0}.wf-editor-mobile-back{display:none}.wf-editor-canvas-empty{flex:1;justify-content:center}.wf-editor-onboard{flex-direction:column;text-align:center;gap:var(--space-sm);padding:var(--space-lg)}.wf-editor-onboard-icon{color:var(--text-muted)}.wf-editor-onboard-title{margin:0;font-size:1rem;color:var(--text)}.wf-editor-onboard-text{margin:0;max-width:36ch;color:var(--text-muted)}.wf-editor-onboard-cta{margin-top:var(--space-xs)}.wf-trivial-hint{position:absolute;top:var(--space-sm);left:50%;transform:translate(-50%);z-index:5;pointer-events:none;max-width:min(90%,42ch);padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-info) 8%,var(--bg-secondary));border:1px solid var(--ws-info);border-radius:var(--radius-sm);color:var(--ws-info);font-size:.8rem;text-align:center}.wf-editor-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border-bottom:1px solid var(--border);flex-wrap:wrap}.wf-editor-palette{display:flex;gap:var(--space-xs);flex-wrap:wrap;min-width:0}.wf-palette-btn,.wf-editor-action,.wf-editor-delete,.wf-editor-save{display:inline-flex;align-items:center;gap:var(--space-xs);min-width:0;padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer;overflow-wrap:anywhere;transition:background var(--transition-fast)}.wf-palette-btn:hover,.wf-editor-action:hover,.wf-editor-delete:hover{background:var(--bg-tertiary)}.wf-editor-action:disabled{opacity:.6;cursor:default}.wf-editor-actions{display:flex;align-items:center;gap:var(--space-xs)}.wf-editor-readonly-note{font-size:.75rem;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em}.wf-templates{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border-bottom:1px solid var(--border)}.wf-templates-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.wf-templates-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text);font-weight:600;cursor:pointer}.wf-templates-toggle:hover{background:var(--bg-tertiary)}.wf-templates-filter{flex:0 1 220px;padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem}.wf-templates-body{display:flex;flex-direction:column;gap:var(--space-sm)}.wf-templates-conflict{padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-error) 8%,var(--bg-secondary));border:1px solid var(--ws-error);border-radius:var(--radius-sm);color:var(--ws-error);font-size:.8rem}.wf-templates-group{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-templates-group-title{margin:0;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary)}.wf-templates-entries{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wf-templates-entry{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem;cursor:pointer;transition:background var(--transition-fast)}.wf-templates-entry:hover{background:var(--bg-tertiary)}.wf-templates-entry:disabled{opacity:.6;cursor:default}.wf-templates-badge{padding:0 var(--space-xs);background:var(--accent-subtle, color-mix(in srgb, #3b82f6 12%, transparent));border-radius:var(--radius-sm);color:var(--text-muted);font-size:.7rem}.wf-inspector-fields{display:contents;border:none;margin:0;padding:0;min-inline-size:0}.wf-editor-save{background:var(--todo);border-color:var(--todo);color:var(--bg)}.wf-editor-save:disabled{opacity:.6;cursor:default}.wf-editor-delete{color:var(--ws-error)}.wf-inspector-delete{margin-top:var(--space-sm);justify-content:center}.wf-editor-banner{padding:var(--space-sm) var(--space-md);background:var(--bg-secondary);border-bottom:1px solid var(--ws-warning);color:var(--ws-warning);font-size:.85rem}.wf-editor-banner--info{border-bottom-color:var(--ws-info);color:var(--ws-info);background:color-mix(in srgb,var(--ws-info) 6%,var(--bg-secondary))}.wf-editor-canvas{flex:1;width:100%;min-width:0;min-height:0;overflow:hidden;position:relative}.wf-mobile-shell{display:none}.wf-layout-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);width:fit-content;min-height:30px;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text-muted);font:inherit;font-size:.8rem;cursor:pointer}.wf-layout-toggle:hover{background:var(--bg-tertiary);color:var(--text)}.wf-layout-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wf-editor-body--simple-layout :where(.wf-editor-readonly-banner),.wf-editor-body--simple-layout :where(.wf-editor-toolbar),.wf-editor-body--simple-layout :where(.wf-templates),.wf-editor-body--simple-layout :where(.wf-editor-canvas){display:none}.wf-editor-body--simple-layout .wf-mobile-shell{display:flex;flex:1 1 auto;min-height:0;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.wf-mobile-tabs{display:flex;flex:0 0 auto;gap:var(--space-xs);padding:var(--space-sm);overflow-x:auto;overflow-y:visible;border-bottom:1px solid var(--border)}.wf-mobile-tab{flex:0 0 auto;min-height:var(--wf-editor-touch-target);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.wf-mobile-tab--active{border-color:var(--accent, var(--ws-info));background:var(--bg-tertiary)}.wf-mobile-tab:hover{background:var(--bg-tertiary)}.wf-mobile-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.wf-mobile-tab:active{transform:scale(.97)}.wf-mobile-panel{flex:1 1 auto;min-height:0;overflow-y:auto}.wf-mobile-add,.wf-mobile-actions,.wf-mobile-destination{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm)}.wf-mobile-add-section{display:flex;flex-direction:column;gap:var(--space-sm)}.wf-mobile-add-section h3,.wf-mobile-template-group h4{margin:0;color:var(--text);font-size:.85rem}.wf-mobile-add-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-xs)}.wf-mobile-add-option,.wf-mobile-template-option{display:inline-flex;align-items:center;justify-content:flex-start;gap:var(--space-xs);min-width:0;min-height:var(--wf-editor-touch-target);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);cursor:pointer;text-align:left;overflow-wrap:anywhere;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.wf-mobile-add-option:hover,.wf-mobile-template-option:hover{background:var(--bg-tertiary)}.wf-mobile-add-option:focus-visible,.wf-mobile-template-option:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.wf-mobile-add-option:active,.wf-mobile-template-option:active{transform:scale(.97)}.wf-mobile-template-filter{width:100%}.wf-mobile-template-group{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-mobile-actions .wf-editor-action,.wf-mobile-actions .wf-editor-delete,.wf-mobile-actions .wf-editor-save{justify-content:center;min-height:var(--wf-editor-touch-target)}.wf-mobile-ai-panel{position:static;inset:auto;width:100%;box-shadow:none}.wf-editor-inspector{display:flex;flex-direction:column;gap:var(--space-sm);width:280px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto}.wf-editor-inspector h3{margin:0;font-size:.9rem;color:var(--text)}.wf-inspector-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.wf-inspector-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);font:inherit;cursor:pointer}.wf-inspector-toggle:hover{background:var(--bg-tertiary)}.wf-inspector-toggle--collapsed{position:absolute;right:var(--space-sm);bottom:var(--space-sm);z-index:5;box-shadow:var(--shadow-sm)}.wf-field{display:flex;flex-direction:column;gap:var(--space-xs);font-size:.8rem;color:var(--text-muted)}.wf-field input,.wf-field textarea,.wf-field select{padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:inherit}.wf-field input:focus,.wf-field textarea:focus,.wf-field select:focus{outline:none;box-shadow:var(--focus-ring)}.wf-prompt-editor{position:relative}.wf-prompt-editor--fullscreen{position:fixed;inset:0;z-index:10000;background:var(--surface);padding:max(var(--space-lg),env(safe-area-inset-top,0)) max(var(--space-lg),env(safe-area-inset-right,0)) max(var(--space-lg),env(safe-area-inset-bottom,0)) max(var(--space-lg),env(safe-area-inset-left,0));display:flex;flex-direction:column}.wf-prompt-editor--fullscreen .wf-field{flex:1;display:flex;flex-direction:column}.wf-prompt-editor--fullscreen textarea{flex:1;min-height:unset;resize:none;border-radius:var(--radius-md);font-size:.9375rem;line-height:1.6}.wf-prompt-fullscreen-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);font-size:.8125rem;font-weight:600;color:var(--text-muted)}.wf-prompt-expand-btn{display:inline-flex;align-items:center;gap:var(--space-xs)}.wf-prompt-expand-btn--inline{position:absolute;top:calc(var(--space-xs) + 1.2em + var(--space-xs));right:var(--space-xs);z-index:2;color:var(--text-muted);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:calc(var(--space-xs) / 2) var(--space-xs)}.wf-prompt-expand-btn--inline:hover{background:var(--bg-tertiary);color:var(--text)}.wf-prompt-editor:not(.wf-prompt-editor--fullscreen) textarea{padding-right:calc(var(--space-xl) + var(--space-md))}.wf-inspector-note{margin:0;font-size:.78rem;color:var(--text-tertiary)}.wf-inspector-note--info{color:var(--ws-warning)}.wf-field--checkbox{flex-direction:row;align-items:center;gap:var(--space-sm);cursor:pointer}.wf-field--checkbox input[type=checkbox]{width:auto;padding:0;margin:0;background:none;border:none;accent-color:var(--todo);cursor:pointer}.wf-node{display:flex;flex-direction:column;gap:2px;box-sizing:border-box;width:200px;max-width:240px;padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem}.wf-node-header{display:flex;align-items:center;gap:var(--space-xs);min-width:0}.wf-node-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.68rem;color:var(--text-muted)}.wf-node-start{border-left-color:var(--ws-success)}.wf-node-end{border-left-color:var(--text-muted)}.wf-node-prompt{border-left-color:var(--accent, var(--todo));background:color-mix(in srgb,var(--accent, var(--todo)) 5%,var(--bg-secondary))}.wf-node-script{border-left-color:var(--text-muted);font-family:var(--font-mono, monospace)}.wf-node-gate{border-left-color:var(--ws-warning);background:color-mix(in srgb,var(--ws-warning) 6%,var(--bg-secondary))}.wf-node-hold{border-left-color:var(--ws-warning)}.wf-node-split,.wf-node-join{border-left-color:var(--accent, var(--ws-info))}.wf-node-merge{border-left-color:var(--ws-info);border-style:dashed}.wf-node-step-execute{border-left-color:var(--accent, var(--ws-info));background:color-mix(in srgb,var(--accent, var(--ws-info)) 5%,var(--bg-secondary))}.wf-node-step-review{border-left-color:var(--ws-info);background:color-mix(in srgb,var(--ws-info) 6%,var(--bg-secondary))}.wf-node-parse-steps{border-left-color:var(--ws-info)}.wf-node-code{border-left-color:var(--text-muted);font-family:var(--font-mono, monospace)}.wf-foreach-group{width:100%;height:100%;box-sizing:border-box;border:1px dashed var(--accent, var(--ws-info));border-radius:var(--radius-md);background:color-mix(in srgb,var(--accent, var(--ws-info)) 6%,transparent);padding:var(--space-xs)}.wf-foreach-group.wf-node--error{border-color:var(--ws-error)}.wf-foreach-header{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:.8rem;color:var(--text)}.wf-foreach-empty{margin-top:var(--space-sm);padding:var(--space-sm);border:1px dashed var(--border);border-radius:var(--radius-sm);font-size:.7rem;color:var(--text-muted);text-align:center}.wf-edge-rework .react-flow__edge-path{stroke:var(--accent, var(--ws-info));stroke-dasharray:5 4;stroke-width:2}.react-flow__edge.wf-edge-failure .react-flow__edge-path{stroke:var(--ws-error);stroke-dasharray:2 4;stroke-width:2}.wf-code-source{font-family:var(--font-mono, monospace);font-size:.72rem;white-space:pre;overflow-x:auto}.wf-editor-sidebar .wf-code-source{overflow-x:hidden;overflow-wrap:anywhere;white-space:pre-wrap}.wf-node-icon{display:inline-flex;flex-shrink:0;color:var(--text-muted)}.wf-node-label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-node-badge{flex-shrink:0;font-size:.65rem;text-transform:uppercase;padding:1px var(--space-xs);border-radius:var(--radius-sm);background:var(--ws-warning);color:var(--bg)}.wf-spin{animation:wf-spin 1s linear infinite}@keyframes wf-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.wf-column-band{border:1px dashed var(--border);background:color-mix(in srgb,var(--bg-secondary) 65%,transparent);border-radius:var(--radius-md);pointer-events:none}.wf-node--error{border-color:var(--ws-error);border-left-color:var(--ws-error)}.wf-node-error-badge{display:inline-flex;align-items:center;gap:var(--space-xs);flex-shrink:0;font-size:.65rem;padding:1px var(--space-xs);border-radius:var(--radius-sm);background:var(--ws-error);color:var(--bg)}.wf-editor-readonly-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) var(--space-md);background:var(--bg-tertiary);border-bottom:1px solid var(--border)}.wf-editor-duplicate-primary{font-weight:600}.wf-editor-banner--warn{background:var(--ws-warning);color:var(--bg)}.wf-name-strip{display:flex;align-items:baseline;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border);flex-wrap:wrap}.wf-workflow-name,.wf-workflow-name--readonly{font-size:.95rem;font-weight:600;color:var(--text);background:none;border:1px solid transparent;border-radius:var(--radius-sm);padding:2px var(--space-xs);cursor:pointer;text-align:left}.wf-workflow-name:hover{background:var(--bg-tertiary)}.wf-workflow-name--readonly{cursor:default}.wf-workflow-name-input{font-size:.95rem;font-weight:600;color:var(--text);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px var(--space-xs)}.wf-workflow-description,.wf-workflow-description--readonly{font-size:.78rem;color:var(--text-tertiary);background:none;border:1px solid transparent;border-radius:var(--radius-sm);padding:2px var(--space-xs);cursor:pointer;text-align:left}.wf-workflow-description:hover{background:var(--bg-tertiary)}.wf-workflow-description--readonly{cursor:default}.wf-workflow-description-input{font-size:.78rem;color:var(--text);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px var(--space-xs);min-width:220px}.wf-template-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:220px;overflow-y:auto;padding:var(--space-xs);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary)}.wf-template-section{margin:var(--space-xs) 0 var(--space-xs);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary)}.wf-template-option{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);border:1px solid transparent;border-radius:var(--radius-sm);cursor:pointer;color:var(--text)}.wf-template-option:hover{background:var(--bg-hover)}.wf-template-option.selected{border-color:var(--accent);background:var(--bg-active)}.wf-template-option:focus-visible{outline:none;box-shadow:var(--focus-ring)}.wf-template-option-name{font-size:.85rem;font-weight:600}.wf-template-option-desc{font-size:.78rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-template-option-count{font-size:.72rem;color:var(--text-tertiary)}.wf-create-error{margin:var(--space-xs) 0 0;font-size:.8rem;color:var(--ws-error)}.wf-column-panel{display:flex;flex-direction:column;gap:var(--space-sm);width:280px;min-width:260px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto}.wf-column-panel-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.wf-column-add,.wf-column-move,.wf-column-remove{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-xs);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),opacity var(--transition-fast)}.wf-column-add{flex:0 0 auto;padding:var(--space-xs) var(--space-sm);font-size:.72rem;font-weight:600;color:var(--accent)}.wf-column-move,.wf-column-remove{width:1.75rem;min-width:1.75rem;height:1.75rem;padding:0}.wf-column-add:hover:not(:disabled),.wf-column-move:hover:not(:disabled){border-color:var(--accent);background:var(--surface-hover);color:var(--accent)}.wf-column-remove:hover:not(:disabled){border-color:var(--ws-error);background:color-mix(in srgb,var(--ws-error) 12%,transparent);color:var(--ws-error)}.wf-column-add:focus-visible,.wf-column-move:focus-visible,.wf-column-remove:focus-visible{outline:none;box-shadow:var(--focus-ring)}.wf-column-add:disabled,.wf-column-move:disabled,.wf-column-remove:disabled{cursor:not-allowed;border-color:var(--border);background:var(--bg-tertiary);color:var(--text-tertiary)}.wf-column-panel-empty{font-size:.75rem;color:var(--text-muted);margin:0}.wf-column-panel-errors{display:flex;flex-direction:column;gap:var(--space-xs);margin:0;padding:var(--space-sm);border:1px solid var(--ws-error);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--ws-error) 10%,transparent)}.wf-column-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.wf-column-item{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.wf-column-item--error{border-color:var(--ws-error)}.wf-column-item-head{display:flex;align-items:center;gap:var(--space-xs)}.wf-column-name{flex:1;min-width:0}.wf-column-item-actions{display:flex;gap:2px}.wf-column-violation{display:flex;align-items:center;gap:var(--space-xs);font-size:.7rem;color:var(--ws-error);margin:0}.wf-column-traits,.wf-column-agent{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-column-trait-options{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wf-column-trait{display:inline-flex;align-items:center;gap:2px;font-size:.7rem;color:var(--text-muted)}.wf-column-traits-label,.wf-column-agent-label{font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary)}.wf-column-agent-select{width:100%;min-width:0;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font-size:.72rem;transition:border-color var(--transition-fast),box-shadow var(--transition-fast),background var(--transition-fast)}.wf-column-agent-select:hover:not(:disabled){border-color:var(--accent);background:var(--surface-hover)}.wf-column-agent-select:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.wf-column-agent-select:disabled{background:var(--bg-tertiary);color:var(--text-tertiary);cursor:not-allowed}.wf-column-agent-badge{display:inline-flex;align-items:center;gap:var(--space-xs);flex:0 1 auto;min-width:0;max-width:100%;padding:1px var(--space-xs);border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));border-radius:var(--radius-sm);background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-size:.65rem;font-weight:600}.wf-column-agent-badge--stale{border-color:color-mix(in srgb,var(--ws-warning) 55%,var(--border));background:color-mix(in srgb,var(--ws-warning) 12%,transparent);color:var(--ws-warning)}.wf-column-agent-error,.wf-column-agent-stale{display:flex;align-items:center;gap:var(--space-xs);margin:0;font-size:.68rem}.wf-column-agent-error{color:var(--ws-error)}.wf-column-agent-stale{color:var(--ws-warning)}.wf-column-agent-mode{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wf-column-agent-mode-option{display:inline-flex;align-items:center;gap:var(--space-xs);padding:1px var(--space-xs);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text-muted);font-size:.68rem}.wf-column-agent-mode-option:has(input:checked){border-color:color-mix(in srgb,var(--accent) 55%,var(--border));background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--text)}.wf-column-agent-mode-option:has(input:disabled){background:var(--bg-tertiary);color:var(--text-tertiary);cursor:not-allowed}.wf-ai-create{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary)}.wf-ai-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);align-self:flex-start;padding:var(--space-xs) var(--space-xs);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--accent);font-size:.82rem;font-weight:600;cursor:pointer}.wf-ai-toggle:hover{background:var(--bg-hover)}.wf-ai-create-body{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-ai-prompt{width:100%;resize:vertical;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);font-size:.85rem}.wf-ai-prompt:focus-visible{outline:none;box-shadow:var(--focus-ring)}.wf-ai-actions{display:flex;gap:var(--space-xs)}.wf-ai-edit-wrap{position:relative}.wf-ai-panel{position:absolute;top:calc(100% + var(--space-xs));right:0;z-index:20;width:320px;display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);box-shadow:var(--shadow-md)}@media(max-width:768px){.wf-prompt-editor--fullscreen{padding:var(--space-sm)}.modal-overlay:has(.wf-editor-modal),.modal-overlay:has(.wf-create-modal){padding-top:0;align-items:stretch;justify-content:stretch}.wf-editor-modal,.wf-create-modal{width:100vw;min-width:0;max-width:100vw;height:100vh;height:100dvh;min-height:0;max-height:100dvh;margin:0;border:none;border-radius:0;resize:none;flex:1 1 auto}.wf-editor-header,.wf-migration-notice,.wf-editor-readonly-banner{flex-wrap:wrap}.wf-migration-notice,.wf-editor-readonly-banner{gap:var(--space-sm)}.wf-editor-body{flex-direction:column;width:100%;min-width:0;overflow-x:hidden}.wf-editor-body--list-stage .wf-editor-sidebar{display:flex;width:100%;min-width:0;flex:1 1 auto;max-height:none;border-right:none;border-bottom:none;overflow-x:hidden;overflow-y:auto}.wf-editor-body--list-stage .wf-editor-canvas-wrap,.wf-editor-body--list-stage .wf-editor-inspector,.wf-editor-body--editor-stage .wf-editor-sidebar{display:none}.wf-editor-body--editor-stage .wf-editor-canvas-wrap{display:flex;flex:0 1 auto;width:100%;min-width:0;min-height:0;overflow:hidden}.wf-editor-body--editor-stage .wf-editor-canvas{flex:1 1 auto;min-height:0}.wf-editor-body--editor-stage .wf-editor-inspector{width:100%;min-width:0;max-height:none;flex:1 1 auto;min-height:0;border-left:none;border-top:1px solid var(--border);overflow-y:auto}.wf-editor-mobile-back{display:inline-flex;align-items:center;align-self:flex-start;gap:var(--space-xs);min-height:var(--wf-editor-touch-target);margin:var(--space-sm) var(--space-sm) 0;padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font-size:.8rem;cursor:pointer}.wf-editor-sidebar .wf-column-panel{width:100%;min-width:0;border-left:none;border-top:1px solid var(--border)}.wf-editor-body .wf-settings-panel{width:100%;min-width:0;max-height:50vh;border-left:none;border-top:1px solid var(--border);overflow-y:auto}.wf-editor-canvas-wrap{flex:1 1 auto;width:100%;min-width:0;min-height:0}.wf-editor-canvas{width:100%;min-width:0;max-width:100%;overflow:hidden}.wf-editor-body--editor-stage :where(.wf-editor-readonly-banner),.wf-editor-body--editor-stage :where(.wf-editor-toolbar),.wf-editor-body--editor-stage :where(.wf-templates),.wf-editor-body--editor-stage :where(.wf-editor-canvas){display:none}.wf-mobile-shell{display:flex;flex:1 1 auto;min-height:0;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.wf-editor-canvas .react-flow,.wf-editor-canvas .react-flow__renderer,.wf-editor-canvas .react-flow__pane,.wf-editor-canvas .react-flow__viewport{width:100%;min-width:0;max-width:100%;height:100%}.wf-editor-list-item,.wf-editor-new,.wf-editor-import,.wf-sidebar-section-toggle,.wf-palette-btn,.wf-editor-action,.wf-editor-delete,.wf-editor-save,.wf-templates-toggle,.wf-templates-entry,.wf-template-option,.wf-ai-toggle,.wf-workflow-name,.wf-workflow-name-input,.wf-column-panel button,.wf-fields-panel button,.wf-settings-panel button{min-height:var(--wf-editor-touch-target)}.wf-editor-list-item,.wf-editor-new,.wf-editor-import,.wf-palette-btn,.wf-editor-action,.wf-editor-delete,.wf-editor-save,.wf-templates-toggle,.wf-templates-entry,.wf-ai-toggle{padding:var(--space-sm) var(--space-md)}.wf-field input,.wf-field textarea,.wf-field select,.wf-column-name,.wf-column-agent-select,.wf-templates-filter,.wf-ai-prompt{min-height:var(--wf-editor-touch-target);padding:var(--space-sm) var(--space-md)}.wf-template-list{max-height:40vh}.wf-editor-toolbar{flex-wrap:nowrap;overflow-x:auto}.wf-editor-palette,.wf-editor-actions{flex:0 0 auto;flex-wrap:nowrap}.wf-templates{flex:0 0 auto}.wf-templates-header{flex-wrap:nowrap}.wf-templates-toggle{flex:0 0 auto}.wf-inspector-toggle{min-height:var(--wf-editor-touch-target);padding:var(--space-sm) var(--space-md)}.wf-ai-panel{position:fixed;inset:var(--space-sm);top:auto;right:auto;z-index:30;width:auto}.wf-editor-inspector{width:100%;max-height:40vh;border-left:none;border-top:1px solid var(--border);overflow-y:auto}.wf-editor-body--mobile-node-detail .wf-editor-canvas-wrap{display:none;min-height:0}.wf-editor-body--mobile-node-detail .wf-editor-inspector{display:flex;flex:1 1 auto;width:100%;min-width:0;min-height:0;max-height:none;border-left:none;border-top:none;overflow-y:auto}.wf-editor-body--mobile-edge-detail .wf-editor-canvas-wrap{display:none;min-height:0}.wf-editor-body--mobile-edge-detail .wf-editor-inspector{display:flex;flex:1 1 auto;width:100%;min-width:0;min-height:0;max-height:none;border-left:none;border-top:none;overflow-y:auto}}.wf-fields-panel{display:flex;flex-direction:column;gap:var(--space-sm);width:300px;min-width:280px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto}.wf-fields-panel-header{display:flex;align-items:center;justify-content:space-between}.wf-fields-add{display:inline-flex;align-items:center;gap:4px}.wf-fields-panel-empty{font-size:.75rem;color:var(--text-muted);margin:0}.wf-fields-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.wf-field-item{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.wf-field-item-head{display:flex;align-items:center;gap:var(--space-xs)}.wf-field-name{flex:1;min-width:0}.wf-field-id-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs)}.wf-field-id-static{font-family:var(--font-mono, monospace);font-size:.7rem;color:var(--text-tertiary);background:var(--surface-2, color-mix(in srgb, #ffffff 4%, transparent));padding:1px 6px;border-radius:var(--radius-sm)}.wf-field-id-edit{font-size:.65rem;background:none;border:none;color:var(--accent, #4f7cff);cursor:pointer;padding:0}.wf-field-id-warn{display:flex;align-items:center;gap:4px;width:100%;margin:0;font-size:.65rem;color:var(--ws-warning, #f59e0b)}.wf-field-row{display:flex;align-items:flex-end;gap:var(--space-sm)}.wf-field-sub{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;font-size:.7rem;color:var(--text-muted)}.wf-field-sub>span{font-size:.65rem;text-transform:uppercase;color:var(--text-tertiary)}.wf-field--checkbox{display:inline-flex;align-items:center;gap:4px;font-size:.7rem;color:var(--text-muted)}.wf-field-required{flex:0 0 auto;white-space:nowrap}.wf-field-options{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-field-options-label{font-size:.65rem;text-transform:uppercase;color:var(--text-tertiary)}.wf-field-option-row{display:flex;align-items:center;gap:4px}.wf-field-option-value,.wf-field-option-label{flex:1;min-width:0}.wf-field-option-colors{display:inline-flex;gap:2px}.wf-field-color-swatch{width:14px;height:14px;border-radius:50%;border:1px solid var(--border);padding:0;cursor:pointer}.wf-field-color-swatch.is-active{outline:2px solid var(--text-primary, #fff);outline-offset:1px}.wf-field-option-add{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;font-size:.7rem}.wf-field-render{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-field-preview{padding-top:var(--space-xs)}@media(max-width:768px){.wf-fields-panel{width:100%;min-width:0;padding:var(--space-sm);border-left:none;border-top:1px solid var(--border)}.wf-field-row,.wf-field-option-row{flex-wrap:wrap}}.settings-field-row{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm) 0}.settings-field-row.is-disabled{opacity:.6}.settings-field-row-head{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap}.settings-field-row-label{font-size:.8rem;font-weight:500;color:var(--text)}.settings-field-row-scope{font-size:.6rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);background:var(--surface-muted, color-mix(in srgb, #ffffff 4%, transparent));border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 6px}.settings-field-row-scope--global{color:var(--accent, #7c5cbf);border-color:var(--accent, #7c5cbf)}.settings-field-row-control{display:flex;align-items:center;gap:var(--space-xs)}.settings-field-row-control>input:not([type=checkbox]),.settings-field-row-control>select,.settings-field-row-control>textarea{flex:1;min-width:0}.settings-field-row-clear{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;background:none;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;padding:2px;transition:color var(--duration-fast) ease,border-color var(--duration-fast) ease}.settings-field-row-clear:hover:not(:disabled){color:var(--text);border-color:var(--text-muted)}.settings-field-row-clear:disabled{cursor:default;opacity:.5}.settings-field-row-help{margin:0;font-size:.7rem;color:var(--text-muted)}.settings-field-row-error{margin:0;font-size:.7rem;color:var(--color-error, #f85149)}.settings-toggle{display:inline-flex;align-items:center}.settings-toggle>input[type=checkbox]{cursor:pointer}.settings-toggle>input[type=checkbox]:disabled{cursor:default}.settings-number,.settings-select,.settings-text{width:100%}.settings-textarea{width:100%;resize:vertical;font-family:inherit}.settings-section{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md) 0;border-bottom:1px solid var(--border)}.settings-section:last-child{border-bottom:none}.settings-section-head{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-section-title{margin:0;font-size:.9rem;font-weight:600;color:var(--text)}.settings-section-desc{margin:0;font-size:.75rem;color:var(--text-muted)}.settings-section-body{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-settings-panel-wrap{display:flex;min-height:0}.wf-settings-panel{display:flex;flex-direction:column;gap:var(--space-sm);width:320px;min-width:300px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto;color:var(--text)}.wf-settings-panel-header{display:flex;align-items:center;justify-content:space-between}.wf-settings-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border)}.wf-settings-tab{flex:1;padding:6px 8px;font-size:.72rem;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);cursor:pointer;transition:color var(--duration-fast) ease,border-color var(--duration-fast) ease}.wf-settings-tab.is-active{color:var(--text);border-bottom-color:var(--accent, #4f7cff)}.wf-settings-tabpanel{display:flex;flex-direction:column;gap:var(--space-sm)}.wf-settings-tabpanel-head{display:flex;align-items:center;justify-content:flex-end}.wf-settings-add,.wf-settings-save-values,.wf-settings-option-add{display:inline-flex;align-items:center;gap:4px}.wf-settings-empty{font-size:.75rem;color:var(--text-muted);margin:0}.wf-settings-note{display:flex;align-items:center;gap:4px;margin:0;font-size:.7rem}.wf-settings-note--info,.wf-settings-note--muted{color:var(--text-muted)}.wf-settings-note--warn{color:var(--ws-warning, #f59e0b)}.wf-settings-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.wf-setting-item{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.wf-setting-item-head{display:flex;align-items:center;gap:var(--space-xs)}.wf-setting-name{flex:1;min-width:0}.wf-setting-id-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs)}.wf-setting-id-static{font-family:var(--font-mono, monospace);font-size:.7rem;color:var(--text-muted);background:var(--surface-2, color-mix(in srgb, #ffffff 4%, transparent));padding:1px 6px;border-radius:var(--radius-sm)}.wf-setting-id-edit{font-size:.65rem;background:none;border:none;color:var(--accent, #4f7cff);cursor:pointer;padding:0}.wf-setting-id-warn{display:flex;align-items:center;gap:4px;width:100%;margin:0;font-size:.65rem;color:var(--ws-warning, #f59e0b)}.wf-setting-row{display:flex;align-items:flex-end;gap:var(--space-sm)}.wf-setting-sub{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;font-size:.7rem;color:var(--text-muted)}.wf-setting-sub>span{font-size:.65rem;text-transform:uppercase;color:var(--text-muted)}.wf-setting--checkbox{display:inline-flex;align-items:center;gap:4px;font-size:.7rem;color:var(--text-muted)}.wf-setting-options{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-setting-options-label{font-size:.65rem;text-transform:uppercase;color:var(--text-muted)}.wf-setting-option-row{display:flex;align-items:center;gap:4px}.wf-setting-option-value,.wf-setting-option-label{flex:1;min-width:0}.wf-setting-option-colors{display:inline-flex;gap:2px}.wf-setting-color-swatch{width:14px;height:14px;border-radius:50%;border:1px solid var(--border);padding:0;cursor:pointer}.wf-setting-color-swatch.is-active{outline:2px solid var(--text);outline-offset:1px}.wf-settings-values-head{display:flex;align-items:center;justify-content:flex-end}.wf-settings-values-list{display:flex;flex-direction:column;gap:var(--space-md)}.wf-settings-value-group{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-settings-value-group-title{margin:0;font-size:.72rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:0}.wf-settings-value-item{position:relative;display:flex;flex-direction:column;gap:2px}.wf-settings-customized{align-self:flex-start;font-size:.6rem;text-transform:uppercase;letter-spacing:.04em;color:var(--accent, #4f7cff)}.wf-settings-reset-hint{display:flex;align-items:center;gap:4px;margin:0;font-size:.65rem;color:var(--text-muted)}.wf-settings-orphaned{border-top:1px dashed var(--border);padding-top:var(--space-xs)}.wf-settings-orphaned-toggle{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:var(--text-muted);font-size:.72rem;cursor:pointer;padding:0}.wf-settings-orphaned-body{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs)}.wf-settings-orphaned-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.wf-settings-orphaned-row{display:flex;align-items:center;gap:var(--space-xs)}.wf-settings-orphan-id{font-family:var(--font-mono, monospace);font-size:.7rem;color:var(--text-muted)}.wf-settings-orphan-value{flex:1;min-width:0;font-size:.7rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-settings-orphan-delete{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:0}@media(max-width:768px){.wf-settings-panel-wrap{flex-direction:column}.wf-settings-panel{width:100%;min-width:0;padding:var(--space-sm);border-left:none;border-top:1px solid var(--border)}.wf-setting-row,.wf-setting-option-row,.wf-settings-orphaned-row{flex-wrap:wrap}}.mobile-wf-graph{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm);overflow-y:auto}.mobile-wf-node-group{display:flex;flex-direction:column;gap:var(--space-xs)}.mobile-wf-node-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-xs);padding-left:calc(var(--mobile-wf-depth, 0) * var(--space-md))}.mobile-wf-node-main{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-width:0;min-height:var(--wf-editor-touch-target, 44px);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.mobile-wf-node-main:hover{background:var(--bg-tertiary)}.mobile-wf-node-main:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.mobile-wf-node-main:active{transform:scale(.97)}.mobile-wf-node-row--selected .mobile-wf-node-main{border-color:var(--accent, var(--ws-info));box-shadow:var(--focus-ring)}.mobile-wf-node-kind{min-width:4.5rem;max-width:6rem;padding:calc(var(--space-xs) / 2) var(--space-xs);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);font-size:.7rem;text-align:center;overflow-wrap:anywhere}.mobile-wf-node-text{display:flex;flex-direction:column;min-width:0;gap:calc(var(--space-xs) / 2)}.mobile-wf-node-title,.mobile-wf-node-summary,.mobile-wf-edge-target{min-width:0;overflow-wrap:anywhere}.mobile-wf-node-title{color:var(--text);font-size:.9rem;font-weight:600}.mobile-wf-node-summary{color:var(--text-muted);font-size:.78rem}.mobile-wf-node-expand{display:inline-flex;align-items:center;justify-content:center;width:var(--wf-editor-touch-target, 44px);min-height:var(--wf-editor-touch-target, 44px);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.mobile-wf-node-expand:hover{background:var(--bg-tertiary)}.mobile-wf-node-expand:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.mobile-wf-node-expand:active{transform:scale(.97)}.mobile-wf-node-meta{display:flex;flex-wrap:wrap;gap:var(--space-xs);padding-left:calc((var(--mobile-wf-depth, 0) * var(--space-md)) + var(--space-xs))}.mobile-wf-column-chip,.mobile-wf-edge-chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:34px;max-width:100%;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-size:.75rem}.mobile-wf-edge-chip{color:var(--text);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.mobile-wf-edge-chip:hover{background:var(--bg-secondary)}.mobile-wf-edge-chip:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.mobile-wf-edge-chip:active{transform:scale(.97)}.mobile-wf-edge-chip--selected{border-color:var(--accent, var(--ws-info))}.mobile-wf-edge-target{color:var(--text-muted)}.mobile-wf-node-children{display:flex;flex-direction:column;gap:var(--space-sm)}.mobile-wf-graph-empty{padding:var(--space-lg);color:var(--text-muted);text-align:center}
|