@flexkit/studio 0.2.2 → 0.2.3
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/activity-nav-button-Z6M3FURW.js +2 -0
- package/dist/activity-nav-button-Z6M3FURW.js.map +1 -0
- package/dist/chat-page-J7I5V6G4.js +4 -0
- package/dist/{chat-page-YWENJEUP.js.map → chat-page-J7I5V6G4.js.map} +1 -1
- package/dist/chunk-32ZU4MLE.js +2 -0
- package/dist/{chunk-ODORXGGY.js.map → chunk-32ZU4MLE.js.map} +1 -1
- package/dist/chunk-3C2EG3SI.js +2 -0
- package/dist/{chunk-GW37ZTR2.js.map → chunk-3C2EG3SI.js.map} +1 -1
- package/dist/chunk-6NRQMG26.js +2 -0
- package/dist/chunk-6NRQMG26.js.map +1 -0
- package/dist/chunk-72TZUR4Q.js +2 -0
- package/dist/{chunk-4BX7OJJ6.js.map → chunk-72TZUR4Q.js.map} +1 -1
- package/dist/chunk-76CL7HSO.js +3 -0
- package/dist/chunk-76CL7HSO.js.map +1 -0
- package/dist/chunk-AN4APNXO.js +2 -0
- package/dist/chunk-AN4APNXO.js.map +1 -0
- package/dist/chunk-BP27UNNR.js +2 -0
- package/dist/{chunk-OFLU53AC.js.map → chunk-BP27UNNR.js.map} +1 -1
- package/dist/{chunk-7ZDMZVDA.js → chunk-G74PT7Z7.js} +5 -5
- package/dist/{chunk-7ZDMZVDA.js.map → chunk-G74PT7Z7.js.map} +1 -1
- package/dist/{chunk-Z6IEBNKV.js → chunk-IAA4CEBW.js} +2 -2
- package/dist/{chunk-Z6IEBNKV.js.map → chunk-IAA4CEBW.js.map} +1 -1
- package/dist/{chunk-2FQWBOU6.js → chunk-K7FD54PW.js} +6 -6
- package/dist/chunk-K7FD54PW.js.map +1 -0
- package/dist/chunk-MM356YIK.js +3 -0
- package/dist/chunk-MM356YIK.js.map +1 -0
- package/dist/chunk-MPLNRUP3.js +4 -0
- package/dist/{chunk-3FIKCGSP.js.map → chunk-MPLNRUP3.js.map} +1 -1
- package/dist/chunk-QDXGSL5B.js +2 -0
- package/dist/chunk-QDXGSL5B.js.map +1 -0
- package/dist/{chunk-LYGHDJ5A.js → chunk-QJDD73JR.js} +2 -2
- package/dist/{chunk-LYGHDJ5A.js.map → chunk-QJDD73JR.js.map} +1 -1
- package/dist/chunk-TWMX2IQ2.js +3 -0
- package/dist/chunk-TWMX2IQ2.js.map +1 -0
- package/dist/chunk-U45E5X3H.js +2 -0
- package/dist/chunk-U45E5X3H.js.map +1 -0
- package/dist/chunk-USNXQOMJ.js +2 -0
- package/dist/chunk-USNXQOMJ.js.map +1 -0
- package/dist/chunk-YCCFUGWJ.js +7 -0
- package/dist/chunk-YCCFUGWJ.js.map +1 -0
- package/dist/index.css +22 -0
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/list-IBUZ2LXU.js +2 -0
- package/dist/{list-3K2PBGML.js.map → list-IBUZ2LXU.js.map} +1 -1
- package/dist/logo-JAWR6P43.js +2 -0
- package/dist/logo-JAWR6P43.js.map +1 -0
- package/dist/pages-ZKDDV5T3.js +3 -0
- package/dist/pages-ZKDDV5T3.js.map +1 -0
- package/dist/plugin-pages-HQPZQSZT.js +2 -0
- package/dist/{plugin-pages-Q77CBW45.js.map → plugin-pages-HQPZQSZT.js.map} +1 -1
- package/dist/root-4UVGZZRU.js +2 -0
- package/dist/{root-4TME2KMP.js.map → root-4UVGZZRU.js.map} +1 -1
- package/dist/{root-4ZVGVCYY.js → root-HUJPHUHL.js} +10 -10
- package/dist/{root-4ZVGVCYY.js.map → root-HUJPHUHL.js.map} +1 -1
- package/dist/root-XGNAKO5P.js +2 -0
- package/dist/root-XGNAKO5P.js.map +1 -0
- package/dist/root-ZY2HGDBT.js +31 -0
- package/dist/{root-EZWV5VA4.js.map → root-ZY2HGDBT.js.map} +1 -1
- package/dist/search-N7G6BVN6.js +2 -0
- package/dist/{search-7NX232AW.js.map → search-N7G6BVN6.js.map} +1 -1
- package/dist/skills-pages-VP32HFUN.js +2 -0
- package/dist/{skills-pages-SMJ4EWZW.js.map → skills-pages-VP32HFUN.js.map} +1 -1
- package/dist/spec-renderer-EX7SCFWH.js +2 -0
- package/dist/{spec-renderer-5YGDRF52.js.map → spec-renderer-EX7SCFWH.js.map} +1 -1
- package/dist/ui.js +1 -1
- package/dist/user-nav-QZTYBG45.js +2 -0
- package/dist/user-nav-QZTYBG45.js.map +1 -0
- package/package.json +3 -3
- package/dist/chat-page-YWENJEUP.js +0 -4
- package/dist/chunk-2FQWBOU6.js.map +0 -1
- package/dist/chunk-3FIKCGSP.js +0 -4
- package/dist/chunk-4BX7OJJ6.js +0 -2
- package/dist/chunk-5DHOBLAE.js +0 -2
- package/dist/chunk-5DHOBLAE.js.map +0 -1
- package/dist/chunk-66N44IKJ.js +0 -3
- package/dist/chunk-66N44IKJ.js.map +0 -1
- package/dist/chunk-GW37ZTR2.js +0 -2
- package/dist/chunk-H6TOYVW2.js +0 -3
- package/dist/chunk-H6TOYVW2.js.map +0 -1
- package/dist/chunk-ODORXGGY.js +0 -2
- package/dist/chunk-OFLU53AC.js +0 -2
- package/dist/chunk-YIGEER6B.js +0 -7
- package/dist/chunk-YIGEER6B.js.map +0 -1
- package/dist/list-3K2PBGML.js +0 -2
- package/dist/logo-MU7MGYDH.js +0 -3
- package/dist/logo-MU7MGYDH.js.map +0 -1
- package/dist/pages-BDZ4ZXBS.js +0 -3
- package/dist/pages-BDZ4ZXBS.js.map +0 -1
- package/dist/plugin-pages-Q77CBW45.js +0 -2
- package/dist/root-4TME2KMP.js +0 -2
- package/dist/root-EZWV5VA4.js +0 -31
- package/dist/root-YKNISFWH.js +0 -2
- package/dist/root-YKNISFWH.js.map +0 -1
- package/dist/search-7NX232AW.js +0 -2
- package/dist/skills-pages-SMJ4EWZW.js +0 -2
- package/dist/spec-renderer-5YGDRF52.js +0 -2
- package/dist/user-nav-QZFCICK3.js +0 -2
- package/dist/user-nav-QZFCICK3.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {c}from'./chunk-72TZUR4Q.js';import {f,g,d as d$1}from'./chunk-MM356YIK.js';import {b}from'./chunk-7SK5YPHT.js';import {f as f$1}from'./chunk-76CL7HSO.js';import {h}from'./chunk-NNA4MLFC.js';import {Rc,Tc,s,ma,oa,N,e as e$2,ga,ha,ia}from'./chunk-YCCFUGWJ.js';import {v,w,b as b$3}from'./chunk-32ZU4MLE.js';import {a,d,c as c$1,e,g as g$1}from'./chunk-HDOIOXMP.js';import {t}from'./chunk-SZEGGBOC.js';import'./chunk-U45E5X3H.js';import {b as b$2,c as c$2,e as e$1}from'./chunk-USNXQOMJ.js';import {b as b$1}from'./chunk-6NRQMG26.js';import'./chunk-O2QMYUPS.js';import {useState,useRef,useMemo,useEffect}from'react';import {Plus,LoaderCircle,Trash2,GraduationCapIcon,ArrowLeft,Info,PenLine,Eye}from'lucide-react';import Pt from'react-markdown';import {useNavigate,Link,useParams}from'react-router-dom';import ve from'swr';import At from'swr/infinite';import {history,defaultKeymap,historyKeymap,indentWithTab}from'@codemirror/commands';import {markdown}from'@codemirror/lang-markdown';import {languages}from'@codemirror/language-data';import {foldGutter,indentOnInput,bracketMatching,foldKeymap}from'@codemirror/language';import {highlightSelectionMatches,searchKeymap}from'@codemirror/search';import {Compartment,EditorState,Prec}from'@codemirror/state';import {EditorView,lineNumbers,highlightActiveLineGutter,highlightSpecialChars,drawSelection,dropCursor,highlightActiveLine,keymap,placeholder}from'@codemirror/view';import {tags}from'@lezer/highlight';import {createTheme}from'@uiw/codemirror-themes';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var je="var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",Q="#212121",Y="#fafafa";function ze(t,i,o){return [t,EditorView.theme({"&":{backgroundColor:i},".cm-scroller":{backgroundColor:i},".cm-gutters":{backgroundColor:o}})]}var ce=ze(createTheme({settings:{background:Q,caret:"#f8f8f0",fontFamily:je,foreground:"#f8f8f2",gutterBackground:Q,gutterBorder:"transparent",gutterForeground:"#6d8a88",lineHighlight:"rgba(255, 255, 255, 0.1)",selection:"rgba(255, 255, 255, 0.1)",selectionMatch:"rgba(255, 255, 255, 0.2)"},styles:[{color:"#6272a4",tag:[tags.comment,tags.quote,tags.strikethrough]},{color:"#6272a4",tag:[tags.meta,tags.processingInstruction]},{color:"#f1fa8c",tag:tags.string},{color:"#f91f6f",tag:[tags.atom,tags.bool,tags.number,tags.heading]},{color:"#ff79c6",tag:[tags.keyword,tags.operator,tags.tagName]},{color:"#8be9fd",tag:[tags.typeName,tags.link,tags.url]},{color:"#009fb8",tag:[tags.className,tags.attributeName,tags.monospace]},{color:"#66d9ef",tag:[tags.propertyName,tags.function(tags.propertyName)]},{color:"#009fb8",tag:[tags.definition(tags.variableName),tags.function(tags.variableName)]},{color:"#0072f5",tag:[tags.strong,tags.emphasis]},{color:"#ff5555",tag:tags.invalid}],theme:"dark"}),Q,Q),de=ze(createTheme({settings:{background:Y,caret:"#526fff",fontFamily:je,foreground:"#383a42",gutterBackground:Y,gutterBorder:"transparent",gutterForeground:"#9d9d9f",lineHighlight:"#383a420c",selection:"#e5e5e6",selectionMatch:"#e5e5e6"},styles:[{color:"#a0a1a7",tag:[tags.comment,tags.quote,tags.strikethrough]},{color:"#a0a1a7",tag:[tags.meta,tags.processingInstruction]},{color:"#50a14f",tag:tags.string},{color:"#986801",tag:[tags.attributeName]},{color:"#a626a4",tag:tags.keyword},{color:"#0072f5",tag:[tags.operator,tags.strong,tags.emphasis]},{color:"#f91f6f",tag:[tags.atom,tags.bool,tags.number,tags.heading]},{color:"#c18401",tag:[tags.typeName,tags.className]},{color:"#009fb8",tag:[tags.tagName,tags.propertyName,tags.monospace]},{color:"#4078f2",tag:[tags.link,tags.url,tags.function(tags.variableName),tags.definition(tags.variableName)]},{color:"#f91f6f",tag:tags.invalid}],theme:"light"}),Y,Y);function me(){let t=document.documentElement;return t.getAttribute("data-theme")==="dark"||t.classList.contains("dark")||t.style.colorScheme==="dark"}var xt=EditorView.theme({"&":{fontSize:"13px",height:"100%",maxHeight:"100%",maxWidth:"100%",minHeight:"0",minWidth:"0",width:"100%"},"&.cm-focused":{outline:"none"},".cm-scroller":{height:"100%",lineHeight:"1.6",minHeight:"0",minWidth:"0",overflow:"auto",width:"100%"},".cm-content":{fontSize:"13px",fontStyle:"normal",fontWeight:"400",minWidth:"0 !important",padding:"12px 0"},".cm-line, .cm-line span":{fontSize:"inherit",fontStyle:"inherit",fontWeight:"inherit",lineHeight:"inherit"},".cm-gutters":{borderRight:"1px solid transparent"},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none"}});function ue(t){return [t?ce:de,xt]}function He(t){return [EditorState.readOnly.of(t),EditorView.editable.of(!t)]}function Oe(t){let i={"aria-multiline":"true",role:"textbox"};return t.ariaLabel&&(i["aria-label"]=t.ariaLabel),t.ariaLabelledBy&&(i["aria-labelledby"]=t.ariaLabelledBy),t.ariaDescribedBy&&(i["aria-describedby"]=t.ariaDescribedBy),t.ariaInvalid&&(i["aria-invalid"]="true"),t.readOnly&&(i["aria-readonly"]="true"),i}function Xe({ariaDescribedBy:t,ariaInvalid:i,ariaLabel:o,ariaLabelledBy:l,className:f,onBlur:d,onChange:k,onSave:u,placeholder:m,readOnly:c=false,value:p}){let h=useRef(null),y=useRef(null),L=useRef(new Compartment),P=useRef(new Compartment),N=useRef(new Compartment),C=useRef(d),w=useRef(k),I=useRef(u),v=useRef(p);return C.current=d,w.current=k,I.current=u,v.current=p,useEffect(()=>{let s=h.current;if(!s)return;let g=new EditorView({parent:s,state:EditorState.create({doc:v.current,extensions:[lineNumbers(),highlightActiveLineGutter(),highlightSpecialChars(),history(),foldGutter(),drawSelection(),dropCursor(),EditorState.allowMultipleSelections.of(true),indentOnInput(),bracketMatching(),highlightActiveLine(),highlightSelectionMatches(),EditorView.lineWrapping,markdown({codeLanguages:languages}),keymap.of([...defaultKeymap,...historyKeymap,...searchKeymap,...foldKeymap,indentWithTab]),Prec.highest(keymap.of([{key:"Mod-s",run:()=>(I.current?.(),true)}])),EditorView.updateListener.of(B=>{B.docChanged&&w.current?.(B.state.doc.toString()),B.focusChanged&&!B.view.hasFocus&&C.current?.();}),L.current.of(ue(me())),P.current.of(He(c)),N.current.of(EditorView.contentAttributes.of(Oe({ariaDescribedBy:t,ariaInvalid:i,ariaLabel:o,ariaLabelledBy:l,readOnly:c}))),...m?[placeholder(m)]:[]]})});y.current=g;let K=new ResizeObserver(()=>{g.requestMeasure();});K.observe(s);let G=new MutationObserver(()=>{g.dispatch({effects:L.current.reconfigure(ue(me()))});});return G.observe(document.documentElement,{attributeFilter:["class","data-theme","style"],attributes:true}),()=>{K.disconnect(),G.disconnect(),g.destroy(),y.current=null;}},[]),useEffect(()=>{let s=y.current;s&&s.dispatch({effects:L.current.reconfigure(ue(me()))});},[de,ce]),useEffect(()=>{let s=y.current;if(!s)return;let g=s.state.doc.toString();g!==p&&s.dispatch({changes:{from:0,to:g.length,insert:p}});},[p]),useEffect(()=>{let s=y.current;s&&s.dispatch({effects:[P.current.reconfigure(He(c)),N.current.reconfigure(EditorView.contentAttributes.of(Oe({ariaDescribedBy:t,ariaInvalid:i,ariaLabel:o,ariaLabelledBy:l,readOnly:c})))]});},[t,i,o,l,c]),jsx("div",{className:f??"fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden",ref:h})}var Je=25,Bt=[{descriptionWidth:"fk:w-44",id:"skill-a",nameWidth:"fk:w-28"},{descriptionWidth:"fk:w-52",id:"skill-b",nameWidth:"fk:w-20"},{descriptionWidth:"fk:w-40",id:"skill-c",nameWidth:"fk:w-36"},{descriptionWidth:"fk:w-48",id:"skill-d",nameWidth:"fk:w-24"},{descriptionWidth:"fk:w-36",id:"skill-e",nameWidth:"fk:w-32"},{descriptionWidth:"fk:w-56",id:"skill-f",nameWidth:"fk:w-16"}];function Wt(){return jsxs("div",{"aria-busy":"true",className:"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2",children:[jsx("span",{className:"fk:sr-only",children:"Loading skills"}),Bt.map(t$1=>jsxs("div",{className:"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:px-3 fk:py-2",children:[jsx(t,{className:"fk:size-10 fk:shrink-0 fk:rounded-lg"}),jsxs("span",{className:"fk:flex fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5",children:[jsx(t,{className:`fk:h-4 ${t$1.nameWidth}`}),jsx(t,{className:`fk:h-4 ${t$1.descriptionWidth}`})]})]},t$1.id))]})}var Rt={code({children:t,className:i,node:o,...l}){return typeof i=="string"&&i.split(" ").some(d=>d.startsWith("language-"))?jsx("code",{className:i,...l,children:t}):jsx("code",{className:"fk:rounded fk:bg-muted fk:px-1.5 fk:py-0.5 fk:font-mono fk:text-[0.875em] fk:font-medium fk:before:content-none fk:after:content-none fk:corner-squircle",...l,children:t})}};function be(){let{currentProjectId:t}=f$1();return {api:useMemo(()=>t?d$1(t):null,[t]),projectId:t}}function ie({children:t}){return jsx("div",{className:"fk:rounded-md fk:border fk:border-dashed fk:p-8 fk:text-center fk:text-sm fk:text-muted-foreground fk:corner-squircle",children:t})}function jt({onVisible:t}){let i=useRef(null),o=useRef(t);return o.current=t,useEffect(()=>{let l=i.current;if(!l)return;let f=new IntersectionObserver(d=>{d.some(k=>k.isIntersecting)&&o.current();});return f.observe(l),()=>{f.disconnect();}},[]),jsx("div",{"aria-hidden":true,className:"fk:h-px",ref:i})}function zt(t,i){return t.visibility==="space"?(t.spaceId?i.get(t.spaceId):void 0)??"Space":t.visibility==="personal"?"Personal":"Project"}function Dt({skill:t}){return t.logoUrl?jsx("img",{alt:"",className:"fk:size-10 fk:shrink-0 fk:rounded-lg fk:corner-squircle",src:t.logoUrl}):jsx("span",{className:"fk:flex fk:size-10 fk:shrink-0 fk:items-center fk:justify-center fk:rounded-lg fk:bg-muted fk:text-muted-foreground fk:corner-squircle",children:jsx(GraduationCapIcon,{className:"fk:size-5"})})}function hi(){let{api:t,projectId:i}=be(),o=useNavigate(),[l,f$1]=useState(""),d=b(),k=l.trim().length>0,u=(s,g$1)=>!i||g$1&&!g$1.hasMore?null:g(i).skills({limit:Je,offset:s*Je,search:l.trim()||void 0}),{data:m,isLoading:c$1,setSize:p,size:h}=At(u,f),y=m?.flatMap(s=>s.skills)??[],P=m?.[m.length-1]?.hasMore??false,N=m!==void 0&&h>m.length,C=c$1&&y.length===0;if(!i||!t)return jsx(ie,{children:"Select a project to view skills."});function w(){p(s=>s+1);}let I="No skills yet.";k&&(I="No skills match your search.");let v=jsx("div",{className:"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2",children:y.map(s=>jsxs("button",{type:"button",onClick:()=>o(s.id),className:"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:rounded-lg fk:px-3 fk:py-2 fk:text-left fk:transition-colors fk:hover:bg-accent fk:focus-visible:bg-accent fk:focus-visible:outline-none fk:corner-squircle",children:[jsx(Dt,{skill:s}),jsxs("span",{className:"fk:min-w-0 fk:flex-1",children:[jsx("span",{className:"fk:block fk:truncate fk:text-sm fk:font-medium",children:s.name}),jsx("span",{className:"fk:block fk:truncate fk:text-sm fk:text-muted-foreground",children:s.description})]})]},s.id))});return C?v=jsx(Wt,{}):y.length===0&&(v=jsx(Rc,{children:jsx(Tc,{children:I})})),jsxs("main",{className:"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col",children:[jsx(c,{}),jsx("div",{className:"fk:min-h-0 fk:flex-1 fk:overflow-auto",children:jsxs("div",{className:"fk:mx-auto fk:flex fk:w-full fk:max-w-4xl fk:flex-col fk:gap-8 fk:py-6 fk:pl-4 fk:pr-6",children:[jsxs("div",{children:[jsx("h2",{className:"fk:text-2xl fk:font-semibold",children:"Skills for your agents"}),jsx("p",{className:"fk:mt-2 fk:text-muted-foreground",children:"Reusable Markdown instructions that agents load when relevant, or always when attached to an automation."})]}),jsxs("div",{className:"fk:flex fk:flex-wrap fk:items-center fk:gap-3",children:[jsx(s,{"aria-label":"Search skills",className:"fk:w-full fk:max-w-xs",placeholder:"Search skills\u2026",value:l,onChange:s=>{p(1),f$1(s.target.value);}}),d?jsx(b$1,{asChild:true,className:"fk:ml-auto",size:"sm",children:jsxs(Link,{to:"new",children:[jsx(Plus,{}),"New Skill"]})}):jsx(ma,{disabled:true,children:jsxs(b$1,{className:"fk:ml-auto",disabled:true,size:"sm",children:[jsx(Plus,{}),"New Skill"]})})]}),v,P&&!N?jsx(jt,{onVisible:w}):null,N?jsxs("div",{className:"fk:flex fk:items-center fk:justify-center fk:gap-2 fk:py-4 fk:text-sm fk:text-muted-foreground",children:[jsx(LoaderCircle,{className:"fk:size-4 fk:animate-spin"}),jsx("span",{children:"Loading more skills..."})]}):null]})})]})}function te({className:t,id:i,message:o}){return jsx("p",{className:`fk:text-sm fk:text-destructive ${t??""}`,id:i,children:o})}function D({children:t,hint:i,htmlFor:o,id:l}){return jsxs("div",{className:"fk:mb-1.5 fk:pl-2.5 fk:flex fk:items-center fk:gap-1",children:[jsx(e$2,{htmlFor:o,id:l,children:t}),jsxs(b$2,{children:[jsx(c$2,{asChild:true,children:jsx("button",{"aria-label":`About ${t.toLowerCase()}`,className:"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle",type:"button",children:jsx(Info,{className:"fk:size-3.5"})})}),jsx(e$1,{className:"fk:max-w-xs",children:i})]})]})}function Se({actions:t,title:i}){return jsxs(Fragment,{children:[jsxs("div",{className:"fk:flex fk:shrink-0 fk:items-center fk:gap-2 fk:pr-4",children:[jsxs(b$2,{children:[jsx(c$2,{asChild:true,children:jsx(N,{className:"fk:-ml-1 fk:h-4 fk:w-4"})}),jsx(e$1,{children:"Toggle Sidebar"})]}),jsx(v,{orientation:"vertical",className:"fk:h-4"}),jsx("h1",{className:"fk:min-w-0 fk:flex-1 fk:truncate fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight",children:i}),t]}),jsx(b$1,{asChild:true,className:"fk:shrink-0 fk:w-fit",size:"sm",variant:"ghost",children:jsxs(Link,{relative:"path",to:"..",children:[jsx(ArrowLeft,{className:"fk:mr-2 fk:size-4"}),"Skills"]})})]})}function Ht(){return jsxs("div",{"aria-busy":"true",className:"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:overflow-hidden fk:pb-3",children:[jsx("span",{className:"fk:sr-only",children:"Loading skill"}),jsx(Se,{actions:jsx(t,{className:"fk:h-8 fk:w-24"}),title:jsx(t,{className:"fk:h-5 fk:w-40"})}),jsxs("div",{className:"fk:m-auto fk:flex fk:min-h-0 fk:w-full fk:max-w-6xl fk:flex-1 fk:flex-col fk:gap-8 fk:px-6",children:[jsxs("div",{className:"fk:grid fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]",children:[["name","description"].map(t$1=>jsxs("div",{className:"fk:flex fk:flex-col fk:gap-2",children:[jsx(t,{className:"fk:h-4 fk:w-20"}),jsx(t,{className:"fk:h-9 fk:w-full"})]},t$1)),jsxs("div",{className:"fk:flex fk:flex-col fk:gap-2",children:[jsx(t,{className:"fk:h-4 fk:w-20"}),jsx(t,{className:"fk:h-9 fk:w-32"})]})]}),jsxs("div",{className:"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:gap-1.5",children:[jsx(t,{className:"fk:h-4 fk:w-16"}),jsx(t,{className:"fk:min-h-48 fk:flex-1 fk:rounded-md"})]})]})]})}function Ke({content:t,onBlur:i,onChange:o,onSave:l,readOnly:f=false,showContentError:d,validationMessage:k}){let[u,m]=useState("write"),c=t.length>5e4,p;return t.trim()?p=jsx(Pt,{components:Rt,children:t}):p=jsx("p",{className:"fk:text-muted-foreground",children:"Nothing to preview."}),jsxs("div",{className:"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5",children:[jsxs("div",{className:"fk:pl-3.25 fk:flex fk:shrink-0 fk:items-center fk:gap-1",children:[jsx(e$2,{htmlFor:"skill-content",id:"skill-content-label",children:"Content"}),jsxs(b$2,{children:[jsx(c$2,{asChild:true,children:jsx("button",{"aria-label":"About skill content",className:"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle",type:"button",children:jsx(Info,{className:"fk:size-3.5"})})}),jsx(e$1,{className:"fk:max-w-sm",children:"The skill itself, in Markdown. Write it like instructions for a capable colleague: procedures, rules, examples, and edge cases. Attached skills are always loaded; other visible skills are loaded on demand."})]})]}),jsxs("div",{className:`fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:ml-0.75 fk:overflow-hidden fk:rounded-md fk:border ${d?"fk:border-destructive":""} fk:corner-squircle`,children:[jsxs("div",{className:"fk:flex fk:shrink-0 fk:items-center fk:justify-between fk:gap-2 fk:border-b fk:px-2.5 fk:py-1",children:[jsx(ga,{value:u,onValueChange:h=>{m(h==="preview"?"preview":"write");},children:jsxs(ha,{children:[jsxs(b$2,{children:[jsx(c$2,{asChild:true,children:jsx("span",{className:"fk:inline-flex",children:jsx(ia,{"aria-label":"Write",className:"fk:px-2.5",value:"write",children:jsx(PenLine,{className:"fk:size-3.5"})})})}),jsx(e$1,{children:"Write"})]}),jsxs(b$2,{children:[jsx(c$2,{asChild:true,children:jsx("span",{className:"fk:inline-flex",children:jsx(ia,{"aria-label":"Preview",className:"fk:px-2.5",value:"preview",children:jsx(Eye,{className:"fk:size-3.5"})})})}),jsx(e$1,{children:"Preview"})]})]})}),jsxs("span",{className:c?"fk:text-xs fk:text-destructive":"fk:text-xs fk:text-muted-foreground",children:[t.length.toLocaleString()," / ",5e4.toLocaleString()]})]}),jsx("div",{className:"fk:min-h-0 fk:min-w-0 fk:flex-1 fk:overflow-hidden",hidden:u!=="write",children:jsx(Xe,{ariaDescribedBy:d?"skill-content-error":void 0,ariaInvalid:d,ariaLabelledBy:"skill-content-label",className:"fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden",readOnly:f,value:t,onBlur:i,onChange:o,onSave:l})}),u==="preview"?jsx(w,{className:"fk:min-h-0 fk:flex-1",children:jsx("div",{className:"fk:prose fk:prose-sm fk:dark:prose-invert fk:max-w-none fk:px-4 fk:py-3",children:p})}):null,d&&k?jsx(te,{className:"fk:border-t fk:px-3 fk:py-2",id:"skill-content-error",message:k}):null]})]})}function Ge({api:t,mode:i,onSaved:o,projectId:l,skill:f$1}){let[d$1,k]=useState(f$1?.name??""),[u,m]=useState(f$1?.description??""),[c,p]=useState(f$1?.content??""),[h$1,y]=useState(f$1?.visibility??"project"),[L,P]=useState(f$1?.spaceId??null),[N,C]=useState(false),w=useRef(false),[I,v]=useState(""),[s$1,g$2]=useState({content:false,description:false,name:false}),K=useNavigate(),{data:G}=ve(g(l).spaces,f),[,B]=h(),H=b(),$e=B.user?.spaces??[],xe=(G?.spaces??[]).filter(a=>$e.includes(a.code)),ne="";c.trim()?c.length>5e4&&(ne=`Content must be at most ${String(5e4)} characters`):ne="Content is required";let b$2={content:ne,description:u.trim()?"":"Description is required",name:d$1.trim()?"":"Name is required",space:h$1==="space"&&!L?"Select a space":""},ae=!b$2.content&&!b$2.description&&!b$2.name&&!b$2.space,$=s$1.name&&!!b$2.name,U=s$1.description&&!!b$2.description,Ue=s$1.content&&!!b$2.content,Ze=i==="create"?"New Skill":f$1?.name??"Skill",se="Update skill";N?se="Saving...":i==="create"&&(se="Create skill");async function ye(){if(!H||w.current)return;if(!ae){g$2({content:true,description:true,name:true});return}w.current=true,C(true),v("");let a={content:c,description:u,name:d$1,spaceId:h$1==="space"?L:null,visibility:h$1};try{let M=i==="create"||!f$1?await t.createSkill(a):await t.updateSkill(f$1.id,a);if(!M.success){v(Array.isArray(M.errorMessage)?M.errorMessage.join(", "):M.errorMessage);return}oa.success(i==="create"||!f$1?"Skill created.":"Skill saved."),o(M.skill);}catch(M){v(M instanceof Error?M.message:"Failed to save skill.");}finally{w.current=false,C(false);}}async function Qe(a){a.preventDefault(),await ye();}async function Ye(){if(!(!f$1||!H||w.current)){w.current=true,C(true),v("");try{let a=await t.deleteSkill(f$1.id);if(!a.success){v(Array.isArray(a.errorMessage)?a.errorMessage.join(", "):a.errorMessage);return}K("..",{relative:"path"});}catch(a){v(a instanceof Error?a.message:"Failed to delete skill.");}finally{w.current=false,C(false);}}}return jsxs("div",{className:"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3",children:[jsx(Se,{actions:jsxs("div",{className:"fk:flex fk:items-center fk:gap-3",children:[ae?null:jsx("span",{className:"fk:text-xs fk:text-muted-foreground",children:"Complete the required fields to save"}),i==="edit"&&f$1?jsxs(b$1,{disabled:N||!H,size:"sm",type:"button",variant:"outline",onClick:()=>{Ye();},children:[jsx(Trash2,{}),"Delete"]}):null,jsx(ma,{disabled:!H,children:jsx(b$1,{disabled:N||!ae||!H,form:"skill-editor-form",size:"sm",type:"submit",children:se})})]}),title:Ze}),I?jsx("div",{className:"fk:shrink-0 fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle",children:I}):null,jsxs("form",{className:"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-6 fk:w-full fk:max-w-6xl fk:m-auto fk:gap-8 fk:px-4",id:"skill-editor-form",onSubmit:a=>{Qe(a);},children:[jsxs("div",{className:"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:px-0.75 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]",children:[jsxs("div",{children:[jsx(D,{hint:"Identifying label for this skill",htmlFor:"skill-name",children:"Name"}),jsx(s,{"aria-describedby":$?"skill-name-error":void 0,"aria-invalid":$,className:$?"fk:border-destructive focus-visible:fk:ring-destructive":"",id:"skill-name",value:d$1,onBlur:()=>g$2(a=>({...a,name:true})),onChange:a=>k(a.target.value)}),$?jsx(te,{id:"skill-name-error",message:b$2.name}):null]}),jsxs("div",{children:[jsx(D,{hint:"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.",htmlFor:"skill-description",children:"Description"}),jsx(s,{"aria-describedby":U?"skill-description-error":void 0,"aria-invalid":U,className:U?"fk:border-destructive focus-visible:fk:ring-destructive":"",id:"skill-description",placeholder:"e.g. Rules for writing product descriptions in our brand voice",value:u,onBlur:()=>g$2(a=>({...a,description:true})),onChange:a=>m(a.target.value)}),U?jsx(te,{id:"skill-description-error",message:b$2.description}):null]}),jsxs("div",{children:[jsx(D,{hint:"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.",htmlFor:"skill-visibility",children:"Visibility"}),jsxs("div",{className:"fk:flex fk:items-center fk:gap-2",children:[jsxs(a,{value:h$1,onValueChange:a=>{y(a==="space"||a==="personal"?a:"project"),a!=="space"&&P(null);},children:[jsx(d,{"aria-label":"Visibility",className:"fk:w-fit fk:min-w-26",id:"skill-visibility",children:jsx(c$1,{})}),jsxs(e,{align:"start",children:[jsx(g$1,{value:"project",children:"Project"}),jsx(g$1,{disabled:xe.length===0,value:"space",children:"Space"}),jsx(g$1,{value:"personal",children:"Personal"})]})]}),h$1==="space"?jsxs(a,{value:L??"",onValueChange:a=>{P(a||null);},children:[jsx(d,{"aria-label":"Space",className:"fk:w-fit fk:min-w-34",children:jsx(c$1,{placeholder:"Select a space"})}),jsx(e,{align:"start",children:xe.map(a=>jsx(g$1,{value:a.id,children:a.label},a.id))})]}):null]}),h$1==="space"&&b$2.space?jsx(te,{message:b$2.space}):null]})]}),jsx(Ke,{content:c,showContentError:Ue,validationMessage:b$2.content,onBlur:()=>g$2(a=>({...a,content:true})),onChange:p,onSave:()=>{ye();}})]})]})}function Ot({projectId:t,skill:i,spaceLabelById:o}){let l=b(),f=useNavigate(),[d$1,k]=useState(false),[u,m]=useState("");async function c(){k(true),m("");let p;try{p=await fetch(`/api/flexkit/${t}/skills/${i.id}/fork`,{method:"POST",credentials:"include"});}catch{m("Unable to create a copy. Try again."),k(false);return}if(k(false),!p.ok){m("Unable to create a copy. Check your permissions.");return}f("..",{relative:"path"});}return jsxs("div",{className:"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3",children:[jsx(Se,{actions:jsxs("div",{className:"fk:flex fk:items-center fk:gap-2",children:[jsx(b$3,{variant:"secondary",children:i.source==="plugin"?"Plugin":"Code"}),i.source==="plugin"&&jsx(b$1,{type:"button",disabled:d$1||!l,onClick:()=>{c();},size:"sm",children:"Edit a copy"})]}),title:i.name}),jsxs("div",{className:"fk:flex fk:flex-col fk:h-full fk:px-4 fk:gap-3 fk:max-w-6xl fk:m-auto",children:[jsxs("div",{className:"fk:shrink-0 fk:rounded-md fk:border fk:bg-muted/30 fk:px-3 fk:py-2 fk:corner-squircle",children:[jsx("p",{className:"fk:text-sm fk:font-medium",children:"Version-controlled skill"}),jsx("p",{className:"fk:text-sm fk:text-muted-foreground",children:i.source==="plugin"?"This skill is managed by its plugin. Edit a copy to create a personal Studio skill.":"Edit this skill in your repository and re-sync it from the Custom Tools settings."})]}),jsxs("div",{className:"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]",children:[jsxs("div",{children:[jsx(D,{hint:"Identifying label for this skill",htmlFor:"skill-name",children:"Name"}),jsx(s,{className:"fk:opacity-100!",disabled:true,id:"skill-name",value:i.name})]}),jsxs("div",{children:[jsx(D,{hint:"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.",htmlFor:"skill-description",children:"Description"}),jsx(s,{className:"fk:opacity-100!",disabled:true,id:"skill-description",placeholder:"e.g. Rules for writing product descriptions in our brand voice",value:i.description})]}),jsxs("div",{children:[jsx(D,{hint:"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.",htmlFor:"skill-visibility",children:"Visibility"}),jsxs("div",{className:"fk:flex fk:items-center fk:gap-2",children:[jsxs(a,{disabled:true,value:i.visibility,children:[jsx(d,{"aria-label":"Visibility",className:"fk:w-fit fk:min-w-26 fk:opacity-100!",id:"skill-visibility",children:jsx(c$1,{})}),jsxs(e,{align:"start",children:[jsx(g$1,{value:"project",children:"Project"}),jsx(g$1,{disabled:!i.spaceId,value:"space",children:"Space"}),jsx(g$1,{value:"personal",children:"Personal"})]})]}),i.visibility==="space"?jsxs(a,{disabled:true,value:i.spaceId??"",children:[jsx(d,{"aria-label":"Space",className:"fk:w-fit fk:min-w-34 fk:opacity-100!",children:jsx(c$1,{placeholder:"Select a space"})}),jsx(e,{align:"start",children:jsx(g$1,{value:i.spaceId??"",children:zt(i,o)})})]}):null]})]})]}),u&&jsx("p",{role:"alert",children:u}),jsx(Ke,{content:i.content,readOnly:true})]})]})}function vi(){let{api:t,projectId:i}=be(),o=useNavigate();return !i||!t?jsx(ie,{children:"Select a project to create skills."}):jsx(Ge,{api:t,mode:"create",projectId:i,onSaved:()=>o("..",{relative:"path"})})}function bi(){let{api:t,projectId:i}=be(),{skillId:o}=useParams(),{data:l,error:f$1,isLoading:d,mutate:k}=ve(i&&o?g(i).skill(o):null,f),{data:u}=ve(i?g(i).spaces:null,f);if(!i||!t||!o)return jsx(ie,{children:"Select a skill."});if(f$1)return jsx(ie,{children:"Failed to load skill."});if(d||!l?.skill)return jsx(Ht,{});let m=new Map((u?.spaces??[]).map(c=>[c.id,c.label]));return l.skill.source!=="studio"?jsx(Ot,{projectId:i,skill:l.skill,spaceLabelById:m}):jsx(Ge,{api:t,mode:"edit",projectId:i,skill:l.skill,onSaved:c=>{c?k({skill:c},{revalidate:false}):k();}})}export{vi as CreateSkillPage,bi as SkillDetailPage,Ge as SkillForm,hi as SkillsPage};//# sourceMappingURL=skills-pages-VP32HFUN.js.map
|
|
2
|
+
//# sourceMappingURL=skills-pages-VP32HFUN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/apps/ai/markdown-editor-themes.ts","../src/apps/ai/markdown-editor.tsx","../src/apps/ai/skills-pages.tsx"],"names":["EDITOR_FONT","DARK_THEME_BACKGROUND","LIGHT_THEME_BACKGROUND","withEditorSurface","theme","background","gutterBackground","EditorView","darkTheme","createTheme","t","lightTheme","isDarkTheme","root","editorChrome","themeExtensions","dark","readOnlyExtensions","readOnly","EditorState","contentAttributes","options","attributes","MarkdownEditor","ariaDescribedBy","ariaInvalid","ariaLabel","ariaLabelledBy","className","onBlur","onChange","onSave","placeholder","value","parentRef","useRef","viewRef","themeCompartmentRef","Compartment","readOnlyCompartmentRef","a11yCompartmentRef","onBlurRef","onChangeRef","onSaveRef","valueRef","useEffect","parent","view","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","indentOnInput","bracketMatching","highlightActiveLine","highlightSelectionMatches","markdown","languages","keymap","defaultKeymap","historyKeymap","searchKeymap","foldKeymap","indentWithTab","Prec","update","placeholderExtension","resizeObserver","themeObserver","current","jsx","SKILLS_PAGE_SIZE","SKILL_SKELETON_ROWS","SkillListSkeleton","jsxs","row","Skeleton","skillMarkdownComponents","children","_node","props","part","useProjectApi","currentProjectId","useConfig","useMemo","createApiClient","PageMessage","InfiniteScrollSentinel","onVisible","sentinelRef","onVisibleRef","node","observer","entries","entry","getSkillVisibilityLabel","skill","spaceLabelById","SkillLogo","GraduationCapIcon","SkillsPage","api","projectId","navigate","useNavigate","search","setSearch","useState","canMutate","useCanMutate","hasActiveFilters","getSkillsKey","pageIndex","previousPage","paths","skillPages","isLoading","setSize","size","useSWRInfinite","fetcher","skills","page","hasMore","isLoadingMore","isInitialLoading","handleLoadMore","currentSize","emptyMessage","content","Alert","AlertDescription","CatalogHeader","Input","event","Button","Link","Plus","PermissionTooltip","LoaderCircle","FieldError","id","message","FieldHintLabel","hint","htmlFor","Label","Tooltip","TooltipTrigger","Info","TooltipContent","SkillPageHeader","actions","title","Fragment","SidebarTrigger","Separator","ArrowLeft","SkillDetailSkeleton","field","SkillContentPane","showContentError","validationMessage","viewMode","setViewMode","isOverLimit","preview","Markdown","Tabs","TabsList","TabsTrigger","PenLine","Eye","ScrollArea","SkillForm","mode","onSaved","name","setName","description","setDescription","setContent","visibility","setVisibility","spaceId","setSpaceId","isSaving","setIsSaving","isSavingRef","setMessage","touched","setTouched","spacesData","useSWR","auth","useAuth","userSpaceCodes","selectableSpaces","space","contentError","validation","isValid","showNameError","showDescriptionError","saveLabel","save","input","result","toast","error","handleSubmit","deleteSkill","Trash2","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ReadOnlyCodeSkill","forking","setForking","forkError","setForkError","fork","response","Badge","CreateSkillPage","SkillDetailPage","skillId","useParams","data","mutate"],"mappings":"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","file":"skills-pages-SMJ4EWZW.js","sourcesContent":["import type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { createTheme } from '@uiw/codemirror-themes';\n\nconst EDITOR_FONT = 'var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace';\nconst DARK_THEME_BACKGROUND = '#212121';\nconst LIGHT_THEME_BACKGROUND = '#fafafa';\n\nfunction withEditorSurface(theme: Extension, background: string, gutterBackground: string): Extension {\n return [\n theme,\n EditorView.theme({\n '&': {\n backgroundColor: background,\n },\n '.cm-scroller': {\n backgroundColor: background,\n },\n '.cm-gutters': {\n backgroundColor: gutterBackground,\n },\n }),\n ];\n}\n\nexport const darkTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: DARK_THEME_BACKGROUND,\n caret: '#f8f8f0',\n fontFamily: EDITOR_FONT,\n foreground: '#f8f8f2',\n gutterBackground: DARK_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#6d8a88',\n lineHighlight: 'rgba(255, 255, 255, 0.1)',\n selection: 'rgba(255, 255, 255, 0.1)',\n selectionMatch: 'rgba(255, 255, 255, 0.2)',\n },\n styles: [\n { color: '#6272a4', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#6272a4', tag: [t.meta, t.processingInstruction] },\n { color: '#f1fa8c', tag: t.string },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#ff79c6', tag: [t.keyword, t.operator, t.tagName] },\n { color: '#8be9fd', tag: [t.typeName, t.link, t.url] },\n { color: '#009fb8', tag: [t.className, t.attributeName, t.monospace] },\n { color: '#66d9ef', tag: [t.propertyName, t.function(t.propertyName)] },\n {\n color: '#009fb8',\n tag: [t.definition(t.variableName), t.function(t.variableName)],\n },\n { color: '#0072f5', tag: [t.strong, t.emphasis] },\n { color: '#ff5555', tag: t.invalid },\n ],\n theme: 'dark',\n }),\n DARK_THEME_BACKGROUND,\n DARK_THEME_BACKGROUND\n);\n\nexport const lightTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: LIGHT_THEME_BACKGROUND,\n caret: '#526fff',\n fontFamily: EDITOR_FONT,\n foreground: '#383a42',\n gutterBackground: LIGHT_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#9d9d9f',\n lineHighlight: '#383a420c',\n selection: '#e5e5e6',\n selectionMatch: '#e5e5e6',\n },\n styles: [\n { color: '#a0a1a7', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#a0a1a7', tag: [t.meta, t.processingInstruction] },\n { color: '#50a14f', tag: t.string },\n { color: '#986801', tag: [t.attributeName] },\n { color: '#a626a4', tag: t.keyword },\n { color: '#0072f5', tag: [t.operator, t.strong, t.emphasis] },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#c18401', tag: [t.typeName, t.className] },\n { color: '#009fb8', tag: [t.tagName, t.propertyName, t.monospace] },\n { color: '#4078f2', tag: [t.link, t.url, t.function(t.variableName), t.definition(t.variableName)] },\n { color: '#f91f6f', tag: t.invalid },\n ],\n theme: 'light',\n }),\n LIGHT_THEME_BACKGROUND,\n LIGHT_THEME_BACKGROUND\n);\n","import type { JSX } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';\nimport { markdown } from '@codemirror/lang-markdown';\nimport { languages } from '@codemirror/language-data';\nimport { bracketMatching, foldGutter, foldKeymap, indentOnInput } from '@codemirror/language';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { Compartment, EditorState, Prec } from '@codemirror/state';\nimport {\n drawSelection,\n dropCursor,\n EditorView,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n placeholder as placeholderExtension,\n} from '@codemirror/view';\nimport { lightTheme, darkTheme } from './markdown-editor-themes';\n\nexport interface MarkdownEditorProps {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n className?: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n placeholder?: string;\n readOnly?: boolean;\n value: string;\n}\n\nfunction isDarkTheme(): boolean {\n const root = document.documentElement;\n\n return (\n root.getAttribute('data-theme') === 'dark' || root.classList.contains('dark') || root.style.colorScheme === 'dark'\n );\n}\n\nconst editorChrome = EditorView.theme({\n '&': {\n fontSize: '13px',\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n minHeight: '0',\n minWidth: '0',\n width: '100%',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n height: '100%',\n lineHeight: '1.6',\n minHeight: '0',\n minWidth: '0',\n overflow: 'auto',\n width: '100%',\n },\n '.cm-content': {\n fontSize: '13px',\n fontStyle: 'normal',\n fontWeight: '400',\n minWidth: '0 !important',\n padding: '12px 0',\n },\n '.cm-line, .cm-line span': {\n fontSize: 'inherit',\n fontStyle: 'inherit',\n fontWeight: 'inherit',\n lineHeight: 'inherit',\n },\n '.cm-gutters': {\n borderRight: '1px solid transparent',\n },\n '.cm-foldPlaceholder': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n});\n\nfunction themeExtensions(dark: boolean) {\n return [dark ? darkTheme : lightTheme, editorChrome];\n}\n\nfunction readOnlyExtensions(readOnly: boolean) {\n return [EditorState.readOnly.of(readOnly), EditorView.editable.of(!readOnly)];\n}\n\nfunction contentAttributes(options: {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n readOnly?: boolean;\n}): { [name: string]: string } {\n const attributes: { [name: string]: string } = {\n 'aria-multiline': 'true',\n role: 'textbox',\n };\n\n if (options.ariaLabel) {\n attributes['aria-label'] = options.ariaLabel;\n }\n\n if (options.ariaLabelledBy) {\n attributes['aria-labelledby'] = options.ariaLabelledBy;\n }\n\n if (options.ariaDescribedBy) {\n attributes['aria-describedby'] = options.ariaDescribedBy;\n }\n\n if (options.ariaInvalid) {\n attributes['aria-invalid'] = 'true';\n }\n\n if (options.readOnly) {\n attributes['aria-readonly'] = 'true';\n }\n\n return attributes;\n}\n\nexport function MarkdownEditor({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n className,\n onBlur,\n onChange,\n onSave,\n placeholder,\n readOnly = false,\n value,\n}: MarkdownEditorProps): JSX.Element {\n const parentRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const themeCompartmentRef = useRef(new Compartment());\n const readOnlyCompartmentRef = useRef(new Compartment());\n const a11yCompartmentRef = useRef(new Compartment());\n const onBlurRef = useRef(onBlur);\n const onChangeRef = useRef(onChange);\n const onSaveRef = useRef(onSave);\n const valueRef = useRef(value);\n\n onBlurRef.current = onBlur;\n onChangeRef.current = onChange;\n onSaveRef.current = onSave;\n valueRef.current = value;\n\n useEffect(() => {\n const parent = parentRef.current;\n\n if (!parent) {\n return;\n }\n\n const view = new EditorView({\n parent,\n state: EditorState.create({\n doc: valueRef.current,\n extensions: [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n bracketMatching(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n EditorView.lineWrapping,\n markdown({ codeLanguages: languages }),\n keymap.of([...defaultKeymap, ...historyKeymap, ...searchKeymap, ...foldKeymap, indentWithTab]),\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-s',\n run: () => {\n onSaveRef.current?.();\n\n return true;\n },\n },\n ])\n ),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChangeRef.current?.(update.state.doc.toString());\n }\n\n if (update.focusChanged && !update.view.hasFocus) {\n onBlurRef.current?.();\n }\n }),\n themeCompartmentRef.current.of(themeExtensions(isDarkTheme())),\n readOnlyCompartmentRef.current.of(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.of(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ...(placeholder ? [placeholderExtension(placeholder)] : []),\n ],\n }),\n });\n\n viewRef.current = view;\n\n const resizeObserver = new ResizeObserver(() => {\n view.requestMeasure();\n });\n\n resizeObserver.observe(parent);\n\n const themeObserver = new MutationObserver(() => {\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n });\n\n themeObserver.observe(document.documentElement, {\n attributeFilter: ['class', 'data-theme', 'style'],\n attributes: true,\n });\n\n return () => {\n resizeObserver.disconnect();\n themeObserver.disconnect();\n view.destroy();\n viewRef.current = null;\n };\n // Mount once; later prop changes are applied through compartments / document transactions.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- editor view is created once\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n // Imported palettes live at module scope; this re-applies them after tsup/HMR.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- theme extensions change on hot reload\n }, [lightTheme, darkTheme]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n const current = view.state.doc.toString();\n\n if (current === value) {\n return;\n }\n\n view.dispatch({\n changes: { from: 0, to: current.length, insert: value },\n });\n }, [value]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: [\n readOnlyCompartmentRef.current.reconfigure(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.reconfigure(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ],\n });\n }, [ariaDescribedBy, ariaInvalid, ariaLabel, ariaLabelledBy, readOnly]);\n\n return (\n <div className={className ?? 'fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden'} ref={parentRef} />\n );\n}\n","import type { FormEvent, JSX } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowLeft, Eye, GraduationCapIcon, Info, LoaderCircle, PenLine, Plus, Trash2 } from 'lucide-react';\nimport Markdown, { type Components } from 'react-markdown';\nimport { Link, useNavigate, useParams } from 'react-router-dom';\nimport { useAuth } from '../../auth/auth-context';\nimport { useCanMutate } from '../../core/permissions';\nimport { useConfig } from '../../core/config/config-context';\nimport { MAX_SKILL_CONTENT_LENGTH } from './skill-limits';\nimport {\n Alert,\n AlertDescription,\n Badge,\n Button,\n Input,\n Label,\n PermissionTooltip,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Separator,\n SidebarTrigger,\n Skeleton,\n Tabs,\n TabsList,\n TabsTrigger,\n toast,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '../../ui';\nimport useSWR from 'swr';\nimport useSWRInfinite from 'swr/infinite';\nimport { createApiClient, fetcher, paths, type ApiClient } from './api';\nimport { MarkdownEditor } from './markdown-editor';\nimport { CatalogHeader } from './plugin-pages';\nimport type { AutomationVisibility, ProjectSpace, Skill, SkillInput, SkillsList } from './types';\n\nconst SKILLS_PAGE_SIZE = 25;\n\nconst SKILL_SKELETON_ROWS: { descriptionWidth: string; id: string; nameWidth: string }[] = [\n { descriptionWidth: 'fk:w-44', id: 'skill-a', nameWidth: 'fk:w-28' },\n { descriptionWidth: 'fk:w-52', id: 'skill-b', nameWidth: 'fk:w-20' },\n { descriptionWidth: 'fk:w-40', id: 'skill-c', nameWidth: 'fk:w-36' },\n { descriptionWidth: 'fk:w-48', id: 'skill-d', nameWidth: 'fk:w-24' },\n { descriptionWidth: 'fk:w-36', id: 'skill-e', nameWidth: 'fk:w-32' },\n { descriptionWidth: 'fk:w-56', id: 'skill-f', nameWidth: 'fk:w-16' },\n];\n\nfunction SkillListSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n <span className=\"fk:sr-only\">Loading skills</span>\n {SKILL_SKELETON_ROWS.map((row) => (\n <div className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:px-3 fk:py-2\" key={row.id}>\n <Skeleton className=\"fk:size-10 fk:shrink-0 fk:rounded-lg\" />\n <span className=\"fk:flex fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className={`fk:h-4 ${row.nameWidth}`} />\n <Skeleton className={`fk:h-4 ${row.descriptionWidth}`} />\n </span>\n </div>\n ))}\n </div>\n );\n}\n\nconst skillMarkdownComponents: Components = {\n code({ children, className, node: _node, ...props }) {\n const isFenced = typeof className === 'string' && className.split(' ').some((part) => part.startsWith('language-'));\n\n if (isFenced) {\n return (\n <code className={className} {...props}>\n {children}\n </code>\n );\n }\n\n return (\n <code\n className=\"fk:rounded fk:bg-muted fk:px-1.5 fk:py-0.5 fk:font-mono fk:text-[0.875em] fk:font-medium fk:before:content-none fk:after:content-none fk:corner-squircle\"\n {...props}\n >\n {children}\n </code>\n );\n },\n};\n\nfunction useProjectApi(): { api: ApiClient | null; projectId: string | undefined } {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n\n return { api, projectId: currentProjectId };\n}\n\nfunction PageMessage({ children }: { children: string }): JSX.Element {\n return (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-8 fk:text-center fk:text-sm fk:text-muted-foreground fk:corner-squircle\">\n {children}\n </div>\n );\n}\n\nfunction InfiniteScrollSentinel({ onVisible }: { onVisible: () => void }): JSX.Element {\n const sentinelRef = useRef<HTMLDivElement>(null);\n const onVisibleRef = useRef(onVisible);\n\n onVisibleRef.current = onVisible;\n\n useEffect(() => {\n const node = sentinelRef.current;\n\n if (!node) {\n return;\n }\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n onVisibleRef.current();\n }\n });\n\n observer.observe(node);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return <div aria-hidden className=\"fk:h-px\" ref={sentinelRef} />;\n}\n\nfunction getSkillVisibilityLabel(skill: Skill, spaceLabelById: Map<string, string>): string {\n if (skill.visibility === 'space') {\n return (skill.spaceId ? spaceLabelById.get(skill.spaceId) : undefined) ?? 'Space';\n }\n\n if (skill.visibility === 'personal') {\n return 'Personal';\n }\n\n return 'Project';\n}\n\nfunction SkillLogo({ skill }: { skill: Skill }): JSX.Element {\n if (skill.logoUrl) {\n return <img alt=\"\" className=\"fk:size-10 fk:shrink-0 fk:rounded-lg fk:corner-squircle\" src={skill.logoUrl} />;\n }\n\n return (\n <span className=\"fk:flex fk:size-10 fk:shrink-0 fk:items-center fk:justify-center fk:rounded-lg fk:bg-muted fk:text-muted-foreground fk:corner-squircle\">\n <GraduationCapIcon className=\"fk:size-5\" />\n </span>\n );\n}\n\nexport function SkillsPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n const [search, setSearch] = useState('');\n const canMutate = useCanMutate();\n const hasActiveFilters = search.trim().length > 0;\n\n const getSkillsKey = (pageIndex: number, previousPage: SkillsList | null): string | null => {\n if (!projectId) {\n return null;\n }\n\n if (previousPage && !previousPage.hasMore) {\n return null;\n }\n\n return paths(projectId).skills({\n limit: SKILLS_PAGE_SIZE,\n offset: pageIndex * SKILLS_PAGE_SIZE,\n search: search.trim() || undefined,\n });\n };\n const { data: skillPages, isLoading, setSize, size } = useSWRInfinite<SkillsList>(getSkillsKey, fetcher);\n const skills = skillPages?.flatMap((page) => page.skills) ?? [];\n const lastPage = skillPages?.[skillPages.length - 1];\n const hasMore = lastPage?.hasMore ?? false;\n const isLoadingMore = skillPages !== undefined && size > skillPages.length;\n const isInitialLoading = isLoading && skills.length === 0;\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to view skills.</PageMessage>;\n }\n\n function handleLoadMore(): void {\n void setSize((currentSize) => currentSize + 1);\n }\n\n let emptyMessage = 'No skills yet.';\n\n if (hasActiveFilters) {\n emptyMessage = 'No skills match your search.';\n }\n\n let content: JSX.Element = (\n <div className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n {skills.map((skill) => (\n <button\n key={skill.id}\n type=\"button\"\n onClick={() => navigate(skill.id)}\n className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:rounded-lg fk:px-3 fk:py-2 fk:text-left fk:transition-colors fk:hover:bg-accent fk:focus-visible:bg-accent fk:focus-visible:outline-none fk:corner-squircle\"\n >\n <SkillLogo skill={skill} />\n <span className=\"fk:min-w-0 fk:flex-1\">\n <span className=\"fk:block fk:truncate fk:text-sm fk:font-medium\">{skill.name}</span>\n <span className=\"fk:block fk:truncate fk:text-sm fk:text-muted-foreground\">{skill.description}</span>\n </span>\n </button>\n ))}\n </div>\n );\n\n if (isInitialLoading) {\n content = <SkillListSkeleton />;\n } else if (skills.length === 0) {\n content = (\n <Alert>\n <AlertDescription>{emptyMessage}</AlertDescription>\n </Alert>\n );\n }\n\n return (\n <main className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col\">\n <CatalogHeader />\n <div className=\"fk:min-h-0 fk:flex-1 fk:overflow-auto\">\n <div className=\"fk:mx-auto fk:flex fk:w-full fk:max-w-4xl fk:flex-col fk:gap-8 fk:py-6 fk:pl-4 fk:pr-6\">\n <div>\n <h2 className=\"fk:text-2xl fk:font-semibold\">Skills for your agents</h2>\n <p className=\"fk:mt-2 fk:text-muted-foreground\">\n Reusable Markdown instructions that agents load when relevant, or always when attached to an automation.\n </p>\n </div>\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-3\">\n <Input\n aria-label=\"Search skills\"\n className=\"fk:w-full fk:max-w-xs\"\n placeholder=\"Search skills…\"\n value={search}\n onChange={(event) => {\n void setSize(1);\n setSearch(event.target.value);\n }}\n />\n {canMutate ? (\n <Button asChild className=\"fk:ml-auto\" size=\"sm\">\n <Link to=\"new\">\n <Plus />\n New Skill\n </Link>\n </Button>\n ) : (\n <PermissionTooltip disabled>\n <Button className=\"fk:ml-auto\" disabled size=\"sm\">\n <Plus />\n New Skill\n </Button>\n </PermissionTooltip>\n )}\n </div>\n {content}\n {hasMore && !isLoadingMore ? <InfiniteScrollSentinel onVisible={handleLoadMore} /> : null}\n {isLoadingMore ? (\n <div className=\"fk:flex fk:items-center fk:justify-center fk:gap-2 fk:py-4 fk:text-sm fk:text-muted-foreground\">\n <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />\n <span>Loading more skills...</span>\n </div>\n ) : null}\n </div>\n </div>\n </main>\n );\n}\n\nfunction FieldError({ className, id, message }: { className?: string; id?: string; message: string }): JSX.Element {\n return (\n <p className={`fk:text-sm fk:text-destructive ${className ?? ''}`} id={id}>\n {message}\n </p>\n );\n}\n\nfunction FieldHintLabel({\n children,\n hint,\n htmlFor,\n id,\n}: {\n children: string;\n hint: string;\n htmlFor?: string;\n id?: string;\n}): JSX.Element {\n return (\n <div className=\"fk:mb-1.5 fk:pl-2.5 fk:flex fk:items-center fk:gap-1\">\n <Label htmlFor={htmlFor} id={id}>\n {children}\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={`About ${children.toLowerCase()}`}\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-xs\">{hint}</TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\nfunction SkillPageHeader({ actions, title }: { actions?: JSX.Element; title: string | JSX.Element }): JSX.Element {\n return (\n <>\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:gap-2 fk:pr-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarTrigger className=\"fk:-ml-1 fk:h-4 fk:w-4\" />\n </TooltipTrigger>\n <TooltipContent>Toggle Sidebar</TooltipContent>\n </Tooltip>\n <Separator orientation=\"vertical\" className=\"fk:h-4\" />\n <h1 className=\"fk:min-w-0 fk:flex-1 fk:truncate fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight\">\n {title}\n </h1>\n {actions}\n </div>\n <Button asChild className=\"fk:shrink-0 fk:w-fit\" size=\"sm\" variant=\"ghost\">\n <Link relative=\"path\" to=\"..\">\n <ArrowLeft className=\"fk:mr-2 fk:size-4\" />\n Skills\n </Link>\n </Button>\n </>\n );\n}\n\nfunction SkillDetailSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:overflow-hidden fk:pb-3\">\n <span className=\"fk:sr-only\">Loading skill</span>\n <SkillPageHeader actions={<Skeleton className=\"fk:h-8 fk:w-24\" />} title={<Skeleton className=\"fk:h-5 fk:w-40\" />} />\n <div className=\"fk:m-auto fk:flex fk:min-h-0 fk:w-full fk:max-w-6xl fk:flex-1 fk:flex-col fk:gap-8 fk:px-6\">\n <div className=\"fk:grid fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n {['name', 'description'].map((field) => (\n <div className=\"fk:flex fk:flex-col fk:gap-2\" key={field}>\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-full\" />\n </div>\n ))}\n <div className=\"fk:flex fk:flex-col fk:gap-2\">\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-32\" />\n </div>\n </div>\n <div className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className=\"fk:h-4 fk:w-16\" />\n <Skeleton className=\"fk:min-h-48 fk:flex-1 fk:rounded-md\" />\n </div>\n </div>\n </div>\n );\n}\n\nfunction SkillContentPane({\n content,\n onBlur,\n onChange,\n onSave,\n readOnly = false,\n showContentError,\n validationMessage,\n}: {\n content: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n readOnly?: boolean;\n showContentError?: boolean;\n validationMessage?: string;\n}): JSX.Element {\n const [viewMode, setViewMode] = useState<'preview' | 'write'>('write');\n const isOverLimit = content.length > MAX_SKILL_CONTENT_LENGTH;\n let preview: JSX.Element;\n\n if (content.trim()) {\n preview = <Markdown components={skillMarkdownComponents}>{content}</Markdown>;\n } else {\n preview = <p className=\"fk:text-muted-foreground\">Nothing to preview.</p>;\n }\n\n return (\n <div className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <div className=\"fk:pl-3.25 fk:flex fk:shrink-0 fk:items-center fk:gap-1\">\n <Label htmlFor=\"skill-content\" id=\"skill-content-label\">\n Content\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label=\"About skill content\"\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-sm\">\n The skill itself, in Markdown. Write it like instructions for a capable colleague: procedures, rules,\n examples, and edge cases. Attached skills are always loaded; other visible skills are loaded on demand.\n </TooltipContent>\n </Tooltip>\n </div>\n <div\n className={`fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:ml-0.75 fk:overflow-hidden fk:rounded-md fk:border ${showContentError ? 'fk:border-destructive' : ''} fk:corner-squircle`}\n >\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:justify-between fk:gap-2 fk:border-b fk:px-2.5 fk:py-1\">\n <Tabs\n value={viewMode}\n onValueChange={(value) => {\n setViewMode(value === 'preview' ? 'preview' : 'write');\n }}\n >\n <TabsList>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Write\" className=\"fk:px-2.5\" value=\"write\">\n <PenLine className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Write</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Preview\" className=\"fk:px-2.5\" value=\"preview\">\n <Eye className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Preview</TooltipContent>\n </Tooltip>\n </TabsList>\n </Tabs>\n <span className={isOverLimit ? 'fk:text-xs fk:text-destructive' : 'fk:text-xs fk:text-muted-foreground'}>\n {content.length.toLocaleString()} / {MAX_SKILL_CONTENT_LENGTH.toLocaleString()}\n </span>\n </div>\n <div className=\"fk:min-h-0 fk:min-w-0 fk:flex-1 fk:overflow-hidden\" hidden={viewMode !== 'write'}>\n <MarkdownEditor\n ariaDescribedBy={showContentError ? 'skill-content-error' : undefined}\n ariaInvalid={showContentError}\n ariaLabelledBy=\"skill-content-label\"\n className=\"fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden\"\n readOnly={readOnly}\n value={content}\n onBlur={onBlur}\n onChange={onChange}\n onSave={onSave}\n />\n </div>\n {viewMode === 'preview' ? (\n <ScrollArea className=\"fk:min-h-0 fk:flex-1\">\n <div className=\"fk:prose fk:prose-sm fk:dark:prose-invert fk:max-w-none fk:px-4 fk:py-3\">{preview}</div>\n </ScrollArea>\n ) : null}\n {showContentError && validationMessage ? (\n <FieldError className=\"fk:border-t fk:px-3 fk:py-2\" id=\"skill-content-error\" message={validationMessage} />\n ) : null}\n </div>\n </div>\n );\n}\n\ninterface SkillFormProps {\n api: ApiClient;\n mode: 'create' | 'edit';\n onSaved: (_skill?: Skill) => void;\n projectId: string;\n skill?: Skill;\n}\n\nexport function SkillForm({ api, mode, onSaved, projectId, skill }: SkillFormProps): JSX.Element {\n const [name, setName] = useState(skill?.name ?? '');\n const [description, setDescription] = useState(skill?.description ?? '');\n const [content, setContent] = useState(skill?.content ?? '');\n const [visibility, setVisibility] = useState<AutomationVisibility>(skill?.visibility ?? 'project');\n const [spaceId, setSpaceId] = useState<string | null>(skill?.spaceId ?? null);\n const [isSaving, setIsSaving] = useState(false);\n const isSavingRef = useRef(false);\n const [message, setMessage] = useState('');\n const [touched, setTouched] = useState({ content: false, description: false, name: false });\n const navigate = useNavigate();\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(paths(projectId).spaces, fetcher);\n const [, auth] = useAuth();\n const canMutate = useCanMutate();\n const userSpaceCodes = auth.user?.spaces ?? [];\n // Only spaces the caller belongs to are offered; the server rejects\n // bindings to spaces outside the caller's membership anyway.\n const selectableSpaces = (spacesData?.spaces ?? []).filter((space) => userSpaceCodes.includes(space.code));\n let contentError = '';\n\n if (!content.trim()) {\n contentError = 'Content is required';\n } else if (content.length > MAX_SKILL_CONTENT_LENGTH) {\n contentError = `Content must be at most ${String(MAX_SKILL_CONTENT_LENGTH)} characters`;\n }\n\n const validation = {\n content: contentError,\n description: description.trim() ? '' : 'Description is required',\n name: name.trim() ? '' : 'Name is required',\n space: visibility === 'space' && !spaceId ? 'Select a space' : '',\n };\n const isValid = !validation.content && !validation.description && !validation.name && !validation.space;\n const showNameError = touched.name && Boolean(validation.name);\n const showDescriptionError = touched.description && Boolean(validation.description);\n const showContentError = touched.content && Boolean(validation.content);\n const title = mode === 'create' ? 'New Skill' : (skill?.name ?? 'Skill');\n let saveLabel = 'Update skill';\n\n if (isSaving) {\n saveLabel = 'Saving...';\n } else if (mode === 'create') {\n saveLabel = 'Create skill';\n }\n\n async function save(): Promise<void> {\n if (!canMutate || isSavingRef.current) {\n return;\n }\n\n if (!isValid) {\n setTouched({ content: true, description: true, name: true });\n\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n const input: SkillInput = {\n content,\n description,\n name,\n spaceId: visibility === 'space' ? spaceId : null,\n visibility,\n };\n\n try {\n const result =\n mode === 'create' || !skill ? await api.createSkill(input) : await api.updateSkill(skill.id, input);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n toast.success(mode === 'create' || !skill ? 'Skill created.' : 'Skill saved.');\n onSaved(result.skill);\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to save skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>): Promise<void> {\n event.preventDefault();\n await save();\n }\n\n async function deleteSkill(): Promise<void> {\n if (!skill || !canMutate || isSavingRef.current) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n try {\n const result = await api.deleteSkill(skill.id);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to delete skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-3\">\n {!isValid ? (\n <span className=\"fk:text-xs fk:text-muted-foreground\">Complete the required fields to save</span>\n ) : null}\n {mode === 'edit' && skill ? (\n <Button disabled={isSaving || !canMutate} size=\"sm\" type=\"button\" variant=\"outline\" onClick={() => void deleteSkill()}>\n <Trash2 />\n Delete\n </Button>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button disabled={isSaving || !isValid || !canMutate} form=\"skill-editor-form\" size=\"sm\" type=\"submit\">\n {saveLabel}\n </Button>\n </PermissionTooltip>\n </div>\n }\n title={title}\n />\n {message ? (\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle\">\n {message}\n </div>\n ) : null}\n <form\n className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-6 fk:w-full fk:max-w-6xl fk:m-auto fk:gap-8 fk:px-4\"\n id=\"skill-editor-form\"\n onSubmit={(event) => void handleSubmit(event)}\n >\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:px-0.75 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n aria-describedby={showNameError ? 'skill-name-error' : undefined}\n aria-invalid={showNameError}\n className={showNameError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-name\"\n value={name}\n onBlur={() => setTouched((current) => ({ ...current, name: true }))}\n onChange={(event) => setName(event.target.value)}\n />\n {showNameError ? <FieldError id=\"skill-name-error\" message={validation.name} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n aria-describedby={showDescriptionError ? 'skill-description-error' : undefined}\n aria-invalid={showDescriptionError}\n className={showDescriptionError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={description}\n onBlur={() => setTouched((current) => ({ ...current, description: true }))}\n onChange={(event) => setDescription(event.target.value)}\n />\n {showDescriptionError ? <FieldError id=\"skill-description-error\" message={validation.description} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n value={visibility}\n onValueChange={(value) => {\n setVisibility(value === 'space' || value === 'personal' ? value : 'project');\n\n if (value !== 'space') {\n setSpaceId(null);\n }\n }}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={selectableSpaces.length === 0} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {visibility === 'space' ? (\n <Select\n value={spaceId ?? ''}\n onValueChange={(value) => {\n setSpaceId(value || null);\n }}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n {selectableSpaces.map((space) => (\n <SelectItem key={space.id} value={space.id}>\n {space.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n {visibility === 'space' && validation.space ? <FieldError message={validation.space} /> : null}\n </div>\n </div>\n <SkillContentPane\n content={content}\n showContentError={showContentError}\n validationMessage={validation.content}\n onBlur={() => setTouched((current) => ({ ...current, content: true }))}\n onChange={setContent}\n onSave={() => {\n void save();\n }}\n />\n </form>\n </div>\n );\n}\n\nfunction ReadOnlyCodeSkill({\n projectId,\n skill,\n spaceLabelById,\n}: {\n skill: Skill;\n projectId: string;\n spaceLabelById: Map<string, string>;\n}): JSX.Element {\n const canMutate = useCanMutate();\n const navigate = useNavigate();\n const [forking, setForking] = useState(false);\n const [forkError, setForkError] = useState('');\n\n async function fork(): Promise<void> {\n setForking(true);\n setForkError('');\n let response: Response;\n\n try {\n response = await fetch(`/api/flexkit/${projectId}/skills/${skill.id}/fork`, { method: 'POST', credentials: 'include' });\n } catch {\n setForkError('Unable to create a copy. Try again.');\n setForking(false);\n\n return;\n }\n\n setForking(false);\n\n if (!response.ok) {\n setForkError('Unable to create a copy. Check your permissions.');\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Badge variant=\"secondary\">{skill.source === 'plugin' ? 'Plugin' : 'Code'}</Badge>\n {skill.source === 'plugin' && <Button type=\"button\" disabled={forking || !canMutate} onClick={() => void fork()} size=\"sm\">Edit a copy</Button>}\n </div>\n }\n title={skill.name}\n />\n <div className=\"fk:flex fk:flex-col fk:h-full fk:px-4 fk:gap-3 fk:max-w-6xl fk:m-auto\">\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:bg-muted/30 fk:px-3 fk:py-2 fk:corner-squircle\">\n <p className=\"fk:text-sm fk:font-medium\">Version-controlled skill</p>\n <p className=\"fk:text-sm fk:text-muted-foreground\">\n {skill.source === 'plugin' ? 'This skill is managed by its plugin. Edit a copy to create a personal Studio skill.' : 'Edit this skill in your repository and re-sync it from the Custom Tools settings.'}\n </p>\n </div>\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-name\"\n value={skill.name}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={skill.description}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n disabled={true}\n value={skill.visibility}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26 fk:opacity-100!\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={!skill.spaceId} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {skill.visibility === 'space' ? (\n <Select\n disabled={true}\n value={skill.spaceId ?? ''}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34 fk:opacity-100!\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value={skill.spaceId ?? ''}>\n {getSkillVisibilityLabel(skill, spaceLabelById)}\n </SelectItem>\n </SelectContent>\n </Select>\n ) : null}\n </div>\n </div>\n </div>\n {forkError && <p role=\"alert\">{forkError}</p>}\n <SkillContentPane content={skill.content} readOnly />\n </div>\n </div>\n );\n}\n\nexport function CreateSkillPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to create skills.</PageMessage>;\n }\n\n return (\n <SkillForm api={api} mode=\"create\" projectId={projectId} onSaved={() => navigate('..', { relative: 'path' })} />\n );\n}\n\nexport function SkillDetailPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const { skillId } = useParams<{ skillId: string }>();\n const { data, error, isLoading, mutate } = useSWR<{ skill: Skill }>(\n projectId && skillId ? paths(projectId).skill(skillId) : null,\n fetcher\n );\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(projectId ? paths(projectId).spaces : null, fetcher);\n\n if (!projectId || !api || !skillId) {\n return <PageMessage>Select a skill.</PageMessage>;\n }\n\n if (error) {\n return <PageMessage>Failed to load skill.</PageMessage>;\n }\n\n if (isLoading || !data?.skill) {\n return <SkillDetailSkeleton />;\n }\n\n const spaceLabelById = new Map((spacesData?.spaces ?? []).map((space) => [space.id, space.label]));\n\n if (data.skill.source !== 'studio') {\n return <ReadOnlyCodeSkill projectId={projectId} skill={data.skill} spaceLabelById={spaceLabelById} />;\n }\n\n return (\n <SkillForm\n api={api}\n mode=\"edit\"\n projectId={projectId}\n skill={data.skill}\n onSaved={(skill) => {\n if (skill) {\n void mutate({ skill }, { revalidate: false });\n } else {\n void mutate();\n }\n }}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/apps/ai/markdown-editor-themes.ts","../src/apps/ai/markdown-editor.tsx","../src/apps/ai/skills-pages.tsx"],"names":["EDITOR_FONT","DARK_THEME_BACKGROUND","LIGHT_THEME_BACKGROUND","withEditorSurface","theme","background","gutterBackground","EditorView","darkTheme","createTheme","t","lightTheme","isDarkTheme","root","editorChrome","themeExtensions","dark","readOnlyExtensions","readOnly","EditorState","contentAttributes","options","attributes","MarkdownEditor","ariaDescribedBy","ariaInvalid","ariaLabel","ariaLabelledBy","className","onBlur","onChange","onSave","placeholder","value","parentRef","useRef","viewRef","themeCompartmentRef","Compartment","readOnlyCompartmentRef","a11yCompartmentRef","onBlurRef","onChangeRef","onSaveRef","valueRef","useEffect","parent","view","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","indentOnInput","bracketMatching","highlightActiveLine","highlightSelectionMatches","markdown","languages","keymap","defaultKeymap","historyKeymap","searchKeymap","foldKeymap","indentWithTab","Prec","update","placeholderExtension","resizeObserver","themeObserver","current","jsx","SKILLS_PAGE_SIZE","SKILL_SKELETON_ROWS","SkillListSkeleton","jsxs","row","Skeleton","skillMarkdownComponents","children","_node","props","part","useProjectApi","currentProjectId","useConfig","useMemo","createApiClient","PageMessage","InfiniteScrollSentinel","onVisible","sentinelRef","onVisibleRef","node","observer","entries","entry","getSkillVisibilityLabel","skill","spaceLabelById","SkillLogo","GraduationCapIcon","SkillsPage","api","projectId","navigate","useNavigate","search","setSearch","useState","canMutate","useCanMutate","hasActiveFilters","getSkillsKey","pageIndex","previousPage","paths","skillPages","isLoading","setSize","size","useSWRInfinite","fetcher","skills","page","hasMore","isLoadingMore","isInitialLoading","handleLoadMore","currentSize","emptyMessage","content","Alert","AlertDescription","CatalogHeader","Input","event","Button","Link","Plus","PermissionTooltip","LoaderCircle","FieldError","id","message","FieldHintLabel","hint","htmlFor","Label","Tooltip","TooltipTrigger","Info","TooltipContent","SkillPageHeader","actions","title","Fragment","SidebarTrigger","Separator","ArrowLeft","SkillDetailSkeleton","field","SkillContentPane","showContentError","validationMessage","viewMode","setViewMode","isOverLimit","preview","Markdown","Tabs","TabsList","TabsTrigger","PenLine","Eye","ScrollArea","SkillForm","mode","onSaved","name","setName","description","setDescription","setContent","visibility","setVisibility","spaceId","setSpaceId","isSaving","setIsSaving","isSavingRef","setMessage","touched","setTouched","spacesData","useSWR","auth","useAuth","userSpaceCodes","selectableSpaces","space","contentError","validation","isValid","showNameError","showDescriptionError","saveLabel","save","input","result","toast","error","handleSubmit","deleteSkill","Trash2","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ReadOnlyCodeSkill","forking","setForking","forkError","setForkError","fork","response","Badge","CreateSkillPage","SkillDetailPage","skillId","useParams","data","mutate"],"mappings":"6iDAKA,IAAMA,EAAAA,CAAc,0FAAA,CACdC,CAAAA,CAAwB,SAAA,CACxBC,CAAAA,CAAyB,SAAA,CAE/B,SAASC,EAAAA,CAAkBC,CAAAA,CAAkBC,EAAoBC,CAAAA,CAAqC,CACpG,OAAO,CACLF,CAAAA,CACAG,UAAAA,CAAW,KAAA,CAAM,CACf,GAAA,CAAK,CACH,eAAA,CAAiBF,CACnB,CAAA,CACA,cAAA,CAAgB,CACd,eAAA,CAAiBA,CACnB,CAAA,CACA,aAAA,CAAe,CACb,eAAA,CAAiBC,CACnB,CACF,CAAC,CACH,CACF,CAEO,IAAME,EAAAA,CAAuBL,GAClCM,WAAAA,CAAY,CACV,QAAA,CAAU,CACR,UAAA,CAAYR,CAAAA,CACZ,KAAA,CAAO,SAAA,CACP,UAAA,CAAYD,EAAAA,CACZ,UAAA,CAAY,SAAA,CACZ,gBAAA,CAAkBC,CAAAA,CAClB,aAAc,aAAA,CACd,gBAAA,CAAkB,SAAA,CAClB,aAAA,CAAe,0BAAA,CACf,SAAA,CAAW,0BAAA,CACX,cAAA,CAAgB,0BAClB,CAAA,CACA,MAAA,CAAQ,CACN,CAAE,KAAA,CAAO,UAAW,GAAA,CAAK,CAACS,IAAAA,CAAE,OAAA,CAASA,IAAAA,CAAE,KAAA,CAAOA,IAAAA,CAAE,aAAa,CAAE,CAAA,CAC/D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,qBAAqB,CAAE,CAAA,CAC3D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAKA,IAAAA,CAAE,MAAO,CAAA,CAClC,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,MAAA,CAAQA,IAAAA,CAAE,OAAO,CAAE,CAAA,CAC/D,CAAE,KAAA,CAAO,UAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,OAAA,CAASA,IAAAA,CAAE,QAAA,CAAUA,IAAAA,CAAE,OAAO,CAAE,CAAA,CAC5D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,QAAA,CAAUA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,GAAG,CAAE,CAAA,CACrD,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,UAAWA,IAAAA,CAAE,aAAA,CAAeA,IAAAA,CAAE,SAAS,CAAE,CAAA,CACrE,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,YAAA,CAAcA,IAAAA,CAAE,SAASA,IAAAA,CAAE,YAAY,CAAC,CAAE,CAAA,CACtE,CACE,KAAA,CAAO,SAAA,CACP,GAAA,CAAK,CAACA,IAAAA,CAAE,UAAA,CAAWA,IAAAA,CAAE,YAAY,EAAGA,IAAAA,CAAE,QAAA,CAASA,IAAAA,CAAE,YAAY,CAAC,CAChE,CAAA,CACA,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,MAAA,CAAQA,KAAE,QAAQ,CAAE,CAAA,CAChD,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAKA,IAAAA,CAAE,OAAQ,CACrC,CAAA,CACA,KAAA,CAAO,MACT,CAAC,EACDT,CAAAA,CACAA,CACF,CAAA,CAEaU,EAAAA,CAAwBR,EAAAA,CACnCM,WAAAA,CAAY,CACV,QAAA,CAAU,CACR,UAAA,CAAYP,CAAAA,CACZ,KAAA,CAAO,SAAA,CACP,UAAA,CAAYF,EAAAA,CACZ,UAAA,CAAY,SAAA,CACZ,gBAAA,CAAkBE,CAAAA,CAClB,YAAA,CAAc,aAAA,CACd,gBAAA,CAAkB,SAAA,CAClB,aAAA,CAAe,WAAA,CACf,SAAA,CAAW,SAAA,CACX,cAAA,CAAgB,SAClB,CAAA,CACA,OAAQ,CACN,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACQ,IAAAA,CAAE,OAAA,CAASA,IAAAA,CAAE,KAAA,CAAOA,IAAAA,CAAE,aAAa,CAAE,CAAA,CAC/D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,qBAAqB,CAAE,CAAA,CAC3D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAKA,KAAE,MAAO,CAAA,CAClC,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,aAAa,CAAE,CAAA,CAC3C,CAAE,KAAA,CAAO,SAAA,CAAW,IAAKA,IAAAA,CAAE,OAAQ,CAAA,CACnC,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,QAAA,CAAUA,IAAAA,CAAE,MAAA,CAAQA,IAAAA,CAAE,QAAQ,CAAE,CAAA,CAC5D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,MAAA,CAAQA,IAAAA,CAAE,OAAO,CAAE,CAAA,CAC/D,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,QAAA,CAAUA,IAAAA,CAAE,SAAS,CAAE,CAAA,CACnD,CAAE,KAAA,CAAO,UAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,OAAA,CAASA,IAAAA,CAAE,YAAA,CAAcA,IAAAA,CAAE,SAAS,CAAE,CAAA,CAClE,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAK,CAACA,IAAAA,CAAE,IAAA,CAAMA,IAAAA,CAAE,GAAA,CAAKA,IAAAA,CAAE,QAAA,CAASA,IAAAA,CAAE,YAAY,CAAA,CAAGA,IAAAA,CAAE,UAAA,CAAWA,IAAAA,CAAE,YAAY,CAAC,CAAE,EACnG,CAAE,KAAA,CAAO,SAAA,CAAW,GAAA,CAAKA,IAAAA,CAAE,OAAQ,CACrC,CAAA,CACA,KAAA,CAAO,OACT,CAAC,CAAA,CACDR,CAAAA,CACAA,CACF,EC1DA,SAASU,EAAAA,EAAuB,CAC9B,IAAMC,CAAAA,CAAO,QAAA,CAAS,eAAA,CAEtB,OACEA,CAAAA,CAAK,YAAA,CAAa,YAAY,IAAM,MAAA,EAAUA,CAAAA,CAAK,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAKA,CAAAA,CAAK,KAAA,CAAM,WAAA,GAAgB,MAEhH,CAEA,IAAMC,EAAAA,CAAeP,UAAAA,CAAW,MAAM,CACpC,GAAA,CAAK,CACH,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,MAAA,CACR,SAAA,CAAW,MAAA,CACX,QAAA,CAAU,MAAA,CACV,SAAA,CAAW,GAAA,CACX,QAAA,CAAU,IACV,KAAA,CAAO,MACT,CAAA,CACA,cAAA,CAAgB,CACd,OAAA,CAAS,MACX,CAAA,CACA,cAAA,CAAgB,CACd,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,KAAA,CACZ,UAAW,GAAA,CACX,QAAA,CAAU,GAAA,CACV,QAAA,CAAU,MAAA,CACV,KAAA,CAAO,MACT,CAAA,CACA,aAAA,CAAe,CACb,QAAA,CAAU,MAAA,CACV,SAAA,CAAW,QAAA,CACX,WAAY,KAAA,CACZ,QAAA,CAAU,cAAA,CACV,OAAA,CAAS,QACX,CAAA,CACA,yBAAA,CAA2B,CACzB,QAAA,CAAU,SAAA,CACV,SAAA,CAAW,SAAA,CACX,UAAA,CAAY,SAAA,CACZ,UAAA,CAAY,SACd,CAAA,CACA,aAAA,CAAe,CACb,WAAA,CAAa,uBACf,CAAA,CACA,qBAAA,CAAuB,CACrB,eAAA,CAAiB,aAAA,CACjB,MAAA,CAAQ,MACV,CACF,CAAC,EAED,SAASQ,EAAAA,CAAgBC,CAAAA,CAAe,CACtC,OAAO,CAACA,CAAAA,CAAOR,EAAAA,CAAYG,EAAAA,CAAYG,EAAY,CACrD,CAEA,SAASG,EAAAA,CAAmBC,EAAmB,CAC7C,OAAO,CAACC,WAAAA,CAAY,QAAA,CAAS,EAAA,CAAGD,CAAQ,CAAA,CAAGX,UAAAA,CAAW,QAAA,CAAS,EAAA,CAAG,CAACW,CAAQ,CAAC,CAC9E,CAEA,SAASE,EAAAA,CAAkBC,CAAAA,CAMI,CAC7B,IAAMC,CAAAA,CAAyC,CAC7C,gBAAA,CAAkB,MAAA,CAClB,IAAA,CAAM,SACR,CAAA,CAEA,OAAID,EAAQ,SAAA,GACVC,CAAAA,CAAW,YAAY,CAAA,CAAID,CAAAA,CAAQ,SAAA,CAAA,CAGjCA,CAAAA,CAAQ,cAAA,GACVC,CAAAA,CAAW,iBAAiB,CAAA,CAAID,CAAAA,CAAQ,cAAA,CAAA,CAGtCA,CAAAA,CAAQ,kBACVC,CAAAA,CAAW,kBAAkB,CAAA,CAAID,CAAAA,CAAQ,eAAA,CAAA,CAGvCA,CAAAA,CAAQ,WAAA,GACVC,CAAAA,CAAW,cAAc,CAAA,CAAI,MAAA,CAAA,CAG3BD,CAAAA,CAAQ,QAAA,GACVC,CAAAA,CAAW,eAAe,CAAA,CAAI,MAAA,CAAA,CAGzBA,CACT,CAEO,SAASC,EAAAA,CAAe,CAC7B,eAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,QAAA,CAAAd,CAAAA,CAAW,KAAA,CACX,KAAA,CAAAe,CACF,CAAA,CAAqC,CACnC,IAAMC,CAAAA,CAAYC,MAAAA,CAAuB,IAAI,CAAA,CACvCC,CAAAA,CAAUD,MAAAA,CAA0B,IAAI,CAAA,CACxCE,CAAAA,CAAsBF,MAAAA,CAAO,IAAIG,WAAa,EAC9CC,CAAAA,CAAyBJ,MAAAA,CAAO,IAAIG,WAAa,CAAA,CACjDE,CAAAA,CAAqBL,MAAAA,CAAO,IAAIG,WAAa,CAAA,CAC7CG,CAAAA,CAAYN,MAAAA,CAAON,CAAM,CAAA,CACzBa,EAAcP,MAAAA,CAAOL,CAAQ,CAAA,CAC7Ba,CAAAA,CAAYR,MAAAA,CAAOJ,CAAM,CAAA,CACzBa,CAAAA,CAAWT,MAAAA,CAAOF,CAAK,CAAA,CAE7B,OAAAQ,CAAAA,CAAU,OAAA,CAAUZ,EACpBa,CAAAA,CAAY,OAAA,CAAUZ,CAAAA,CACtBa,CAAAA,CAAU,OAAA,CAAUZ,CAAAA,CACpBa,CAAAA,CAAS,OAAA,CAAUX,CAAAA,CAEnBY,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAASZ,EAAU,OAAA,CAEzB,GAAI,CAACY,CAAAA,CACH,OAGF,IAAMC,CAAAA,CAAO,IAAIxC,UAAAA,CAAW,CAC1B,MAAA,CAAAuC,CAAAA,CACA,KAAA,CAAO3B,WAAAA,CAAY,OAAO,CACxB,GAAA,CAAKyB,CAAAA,CAAS,OAAA,CACd,UAAA,CAAY,CACVI,WAAAA,EAAY,CACZC,yBAAAA,EAA0B,CAC1BC,qBAAAA,EAAsB,CACtBC,OAAAA,EAAQ,CACRC,YAAW,CACXC,aAAAA,EAAc,CACdC,UAAAA,EAAW,CACXnC,WAAAA,CAAY,uBAAA,CAAwB,EAAA,CAAG,IAAI,CAAA,CAC3CoC,aAAAA,EAAc,CACdC,eAAAA,EAAgB,CAChBC,qBAAoB,CACpBC,yBAAAA,EAA0B,CAC1BnD,UAAAA,CAAW,YAAA,CACXoD,QAAAA,CAAS,CAAE,aAAA,CAAeC,SAAU,CAAC,CAAA,CACrCC,MAAAA,CAAO,EAAA,CAAG,CAAC,GAAGC,aAAAA,CAAe,GAAGC,aAAAA,CAAe,GAAGC,YAAAA,CAAc,GAAGC,UAAAA,CAAYC,aAAa,CAAC,CAAA,CAC7FC,IAAAA,CAAK,OAAA,CACHN,MAAAA,CAAO,EAAA,CAAG,CACR,CACE,GAAA,CAAK,OAAA,CACL,GAAA,CAAK,KACHlB,CAAAA,CAAU,OAAA,IAAU,CAEb,IAAA,CAEX,CACF,CAAC,CACH,CAAA,CACApC,UAAAA,CAAW,cAAA,CAAe,GAAI6D,CAAAA,EAAW,CACnCA,CAAAA,CAAO,UAAA,EACT1B,CAAAA,CAAY,OAAA,GAAU0B,CAAAA,CAAO,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,CAAA,CAG/CA,CAAAA,CAAO,YAAA,EAAgB,CAACA,CAAAA,CAAO,IAAA,CAAK,QAAA,EACtC3B,CAAAA,CAAU,OAAA,KAEd,CAAC,CAAA,CACDJ,CAAAA,CAAoB,OAAA,CAAQ,EAAA,CAAGtB,EAAAA,CAAgBH,EAAAA,EAAa,CAAC,CAAA,CAC7D2B,CAAAA,CAAuB,OAAA,CAAQ,EAAA,CAAGtB,EAAAA,CAAmBC,CAAQ,CAAC,CAAA,CAC9DsB,CAAAA,CAAmB,OAAA,CAAQ,EAAA,CACzBjC,UAAAA,CAAW,iBAAA,CAAkB,EAAA,CAC3Ba,EAAAA,CAAkB,CAChB,eAAA,CAAAI,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,QAAA,CAAAT,CACF,CAAC,CACH,CACF,CAAA,CACA,GAAIc,CAAAA,CAAc,CAACqC,WAAAA,CAAqBrC,CAAW,CAAC,CAAA,CAAI,EAC1D,CACF,CAAC,CACH,CAAC,CAAA,CAEDI,CAAAA,CAAQ,QAAUW,CAAAA,CAElB,IAAMuB,CAAAA,CAAiB,IAAI,cAAA,CAAe,IAAM,CAC9CvB,CAAAA,CAAK,cAAA,GACP,CAAC,CAAA,CAEDuB,CAAAA,CAAe,OAAA,CAAQxB,CAAM,CAAA,CAE7B,IAAMyB,CAAAA,CAAgB,IAAI,gBAAA,CAAiB,IAAM,CAC/CxB,CAAAA,CAAK,QAAA,CAAS,CACZ,OAAA,CAASV,CAAAA,CAAoB,OAAA,CAAQ,WAAA,CAAYtB,EAAAA,CAAgBH,IAAa,CAAC,CACjF,CAAC,EACH,CAAC,CAAA,CAED,OAAA2D,CAAAA,CAAc,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAiB,CAC9C,eAAA,CAAiB,CAAC,OAAA,CAAS,YAAA,CAAc,OAAO,CAAA,CAChD,UAAA,CAAY,IACd,CAAC,CAAA,CAEM,IAAM,CACXD,CAAAA,CAAe,UAAA,EAAW,CAC1BC,CAAAA,CAAc,YAAW,CACzBxB,CAAAA,CAAK,OAAA,EAAQ,CACbX,CAAAA,CAAQ,OAAA,CAAU,KACpB,CAGF,CAAA,CAAG,EAAE,CAAA,CAELS,SAAAA,CAAU,IAAM,CACd,IAAME,CAAAA,CAAOX,CAAAA,CAAQ,OAAA,CAEhBW,CAAAA,EAILA,CAAAA,CAAK,QAAA,CAAS,CACZ,OAAA,CAASV,CAAAA,CAAoB,OAAA,CAAQ,WAAA,CAAYtB,EAAAA,CAAgBH,EAAAA,EAAa,CAAC,CACjF,CAAC,EAGH,CAAA,CAAG,CAACD,EAAAA,CAAYH,EAAS,CAAC,CAAA,CAE1BqC,SAAAA,CAAU,IAAM,CACd,IAAME,EAAOX,CAAAA,CAAQ,OAAA,CAErB,GAAI,CAACW,CAAAA,CACH,OAGF,IAAMyB,CAAAA,CAAUzB,CAAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAS,CAEpCyB,CAAAA,GAAYvC,GAIhBc,CAAAA,CAAK,QAAA,CAAS,CACZ,OAAA,CAAS,CAAE,IAAA,CAAM,CAAA,CAAG,EAAA,CAAIyB,CAAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQvC,CAAM,CACxD,CAAC,EACH,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEVY,SAAAA,CAAU,IAAM,CACd,IAAME,CAAAA,CAAOX,CAAAA,CAAQ,OAAA,CAEhBW,CAAAA,EAILA,CAAAA,CAAK,QAAA,CAAS,CACZ,OAAA,CAAS,CACPR,CAAAA,CAAuB,OAAA,CAAQ,WAAA,CAAYtB,EAAAA,CAAmBC,CAAQ,CAAC,CAAA,CACvEsB,CAAAA,CAAmB,OAAA,CAAQ,WAAA,CACzBjC,UAAAA,CAAW,iBAAA,CAAkB,GAC3Ba,EAAAA,CAAkB,CAChB,eAAA,CAAAI,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,QAAA,CAAAT,CACF,CAAC,CACH,CACF,CACF,CACF,CAAC,EACH,CAAA,CAAG,CAACM,CAAAA,CAAiBC,CAAAA,CAAaC,CAAAA,CAAWC,CAAAA,CAAgBT,CAAQ,CAAC,CAAA,CAGpEuD,GAAAA,CAAC,OAAI,SAAA,CAAW7C,CAAAA,EAAa,8DAAA,CAAgE,GAAA,CAAKM,CAAAA,CAAW,CAEjH,CC/QA,IAAMwC,EAAAA,CAAmB,EAAA,CAEnBC,EAAAA,CAAqF,CACzF,CAAE,gBAAA,CAAkB,SAAA,CAAW,EAAA,CAAI,SAAA,CAAW,SAAA,CAAW,SAAU,CAAA,CACnE,CAAE,iBAAkB,SAAA,CAAW,EAAA,CAAI,SAAA,CAAW,SAAA,CAAW,SAAU,CAAA,CACnE,CAAE,gBAAA,CAAkB,SAAA,CAAW,EAAA,CAAI,SAAA,CAAW,SAAA,CAAW,SAAU,CAAA,CACnE,CAAE,gBAAA,CAAkB,SAAA,CAAW,EAAA,CAAI,SAAA,CAAW,SAAA,CAAW,SAAU,CAAA,CACnE,CAAE,gBAAA,CAAkB,SAAA,CAAW,EAAA,CAAI,SAAA,CAAW,SAAA,CAAW,SAAU,CAAA,CACnE,CAAE,gBAAA,CAAkB,SAAA,CAAW,EAAA,CAAI,SAAA,CAAW,SAAA,CAAW,SAAU,CACrE,CAAA,CAEA,SAASC,EAAAA,EAAiC,CACxC,OACEC,IAAAA,CAAC,KAAA,CAAA,CAAI,YAAU,MAAA,CAAO,SAAA,CAAU,iEAAA,CAC9B,QAAA,CAAA,CAAAJ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,gBAAA,CAAc,CAAA,CAC1CE,EAAAA,CAAoB,GAAA,CAAKG,GAAAA,EACxBD,IAAAA,CAAC,OAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,sCAAA,CAAuC,CAAA,CAC3DF,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qDAAA,CACd,QAAA,CAAA,CAAAJ,IAACM,CAAAA,CAAA,CAAS,SAAA,CAAW,CAAA,OAAA,EAAUD,GAAAA,CAAI,SAAS,CAAA,CAAA,CAAI,CAAA,CAChDL,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAW,CAAA,OAAA,EAAUD,GAAAA,CAAI,gBAAgB,CAAA,CAAA,CAAI,CAAA,CAAA,CACzD,CAAA,CAAA,CAAA,CALyFA,GAAAA,CAAI,EAM/F,CACD,CAAA,CAAA,CACH,CAEJ,CAEA,IAAME,EAAAA,CAAsC,CAC1C,IAAA,CAAK,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAArD,CAAAA,CAAW,IAAA,CAAMsD,CAAAA,CAAO,GAAGC,CAAM,CAAA,CAAG,CAGnD,OAFiB,OAAOvD,CAAAA,EAAc,QAAA,EAAYA,CAAAA,CAAU,MAAM,GAAG,CAAA,CAAE,IAAA,CAAMwD,CAAAA,EAASA,CAAAA,CAAK,UAAA,CAAW,WAAW,CAAC,CAAA,CAI9GX,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAW7C,CAAAA,CAAY,GAAGuD,EAC7B,QAAA,CAAAF,CAAAA,CACH,CAAA,CAKFR,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,0JAAA,CACT,GAAGU,CAAAA,CAEH,QAAA,CAAAF,CAAAA,CACH,CAEJ,CACF,CAAA,CAEA,SAASI,EAAAA,EAA0E,CACjF,GAAM,CAAE,gBAAA,CAAAC,CAAiB,CAAA,CAAIC,GAAAA,EAAU,CAGvC,OAAO,CAAE,GAAA,CAFGC,OAAAA,CAAQ,IAAOF,CAAAA,CAAmBG,IAAgBH,CAAgB,CAAA,CAAI,IAAA,CAAO,CAACA,CAAgB,CAAC,CAAA,CAE7F,SAAA,CAAWA,CAAiB,CAC5C,CAEA,SAASI,EAAAA,CAAY,CAAE,SAAAT,CAAS,CAAA,CAAsC,CACpE,OACER,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uHAAA,CACZ,QAAA,CAAAQ,CAAAA,CACH,CAEJ,CAEA,SAASU,EAAAA,CAAuB,CAAE,SAAA,CAAAC,CAAU,CAAA,CAA2C,CACrF,IAAMC,CAAAA,CAAc1D,MAAAA,CAAuB,IAAI,CAAA,CACzC2D,CAAAA,CAAe3D,MAAAA,CAAOyD,CAAS,CAAA,CAErC,OAAAE,EAAa,OAAA,CAAUF,CAAAA,CAEvB/C,SAAAA,CAAU,IAAM,CACd,IAAMkD,CAAAA,CAAOF,CAAAA,CAAY,OAAA,CAEzB,GAAI,CAACE,CAAAA,CACH,OAGF,IAAMC,EAAW,IAAI,oBAAA,CAAsBC,CAAAA,EAAY,CACjDA,CAAAA,CAAQ,IAAA,CAAMC,CAAAA,EAAUA,CAAAA,CAAM,cAAc,CAAA,EAC9CJ,CAAAA,CAAa,OAAA,GAEjB,CAAC,EAED,OAAAE,CAAAA,CAAS,OAAA,CAAQD,CAAI,CAAA,CAEd,IAAM,CACXC,CAAAA,CAAS,UAAA,GACX,CACF,CAAA,CAAG,EAAE,EAEEvB,GAAAA,CAAC,KAAA,CAAA,CAAI,aAAA,CAAW,IAAA,CAAC,SAAA,CAAU,SAAA,CAAU,GAAA,CAAKoB,CAAAA,CAAa,CAChE,CAEA,SAASM,EAAAA,CAAwBC,CAAAA,CAAcC,CAAAA,CAA6C,CAC1F,OAAID,CAAAA,CAAM,UAAA,GAAe,OAAA,CAAA,CACfA,CAAAA,CAAM,OAAA,CAAUC,CAAAA,CAAe,GAAA,CAAID,CAAAA,CAAM,OAAO,CAAA,CAAI,MAAA,GAAc,OAAA,CAGxEA,CAAAA,CAAM,UAAA,GAAe,WAChB,UAAA,CAGF,SACT,CAEA,SAASE,EAAAA,CAAU,CAAE,KAAA,CAAAF,CAAM,CAAA,CAAkC,CAC3D,OAAIA,CAAAA,CAAM,OAAA,CACD3B,GAAAA,CAAC,OAAI,GAAA,CAAI,EAAA,CAAG,SAAA,CAAU,yDAAA,CAA0D,GAAA,CAAK2B,CAAAA,CAAM,OAAA,CAAS,CAAA,CAI3G3B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wIAAA,CACd,QAAA,CAAAA,GAAAA,CAAC8B,kBAAA,CAAkB,SAAA,CAAU,WAAA,CAAY,CAAA,CAC3C,CAEJ,CAEO,SAASC,EAAAA,EAA0B,CACxC,GAAM,CAAE,GAAA,CAAAC,CAAAA,CAAK,SAAA,CAAAC,CAAU,CAAA,CAAIrB,EAAAA,EAAc,CACnCsB,CAAAA,CAAWC,WAAAA,EAAY,CACvB,CAACC,CAAAA,CAAQC,GAAS,CAAA,CAAIC,QAAAA,CAAS,EAAE,CAAA,CACjCC,CAAAA,CAAYC,GAAa,CACzBC,CAAAA,CAAmBL,CAAAA,CAAO,IAAA,EAAK,CAAE,MAAA,CAAS,CAAA,CAE1CM,CAAAA,CAAe,CAACC,CAAAA,CAAmBC,GAAAA,GACnC,CAACX,CAAAA,EAIDW,GAAAA,EAAgB,CAACA,GAAAA,CAAa,OAAA,CACzB,IAAA,CAGFC,CAAAA,CAAMZ,CAAS,CAAA,CAAE,MAAA,CAAO,CAC7B,KAAA,CAAOhC,EAAAA,CACP,MAAA,CAAQ0C,CAAAA,CAAY1C,EAAAA,CACpB,MAAA,CAAQmC,EAAO,IAAA,EAAK,EAAK,MAC3B,CAAC,CAAA,CAEG,CAAE,IAAA,CAAMU,CAAAA,CAAY,SAAA,CAAAC,GAAAA,CAAW,OAAA,CAAAC,CAAAA,CAAS,IAAA,CAAAC,CAAK,CAAA,CAAIC,EAAAA,CAA2BR,CAAAA,CAAcS,CAAO,CAAA,CACjGC,CAAAA,CAASN,CAAAA,EAAY,OAAA,CAASO,CAAAA,EAASA,CAAAA,CAAK,MAAM,CAAA,EAAK,EAAC,CAExDC,CAAAA,CADWR,CAAAA,GAAaA,EAAW,MAAA,CAAS,CAAC,CAAA,EACzB,OAAA,EAAW,KAAA,CAC/BS,CAAAA,CAAgBT,CAAAA,GAAe,MAAA,EAAaG,CAAAA,CAAOH,CAAAA,CAAW,MAAA,CAC9DU,CAAAA,CAAmBT,GAAAA,EAAaK,CAAAA,CAAO,SAAW,CAAA,CAExD,GAAI,CAACnB,CAAAA,EAAa,CAACD,CAAAA,CACjB,OAAOhC,GAAAA,CAACiB,EAAAA,CAAA,CAAY,QAAA,CAAA,kCAAA,CAAgC,CAAA,CAGtD,SAASwC,CAAAA,EAAuB,CACzBT,CAAAA,CAASU,CAAAA,EAAgBA,CAAAA,CAAc,CAAC,EAC/C,CAEA,IAAIC,CAAAA,CAAe,gBAAA,CAEflB,CAAAA,GACFkB,CAAAA,CAAe,8BAAA,CAAA,CAGjB,IAAIC,CAAAA,CACF5D,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iEAAA,CACZ,QAAA,CAAAoD,CAAAA,CAAO,GAAA,CAAKzB,CAAAA,EACXvB,IAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM8B,CAAAA,CAASP,EAAM,EAAE,CAAA,CAChC,SAAA,CAAU,qNAAA,CAEV,QAAA,CAAA,CAAA3B,GAAAA,CAAC6B,EAAAA,CAAA,CAAU,KAAA,CAAOF,CAAAA,CAAO,CAAA,CACzBvB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uBACd,QAAA,CAAA,CAAAJ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gDAAA,CAAkD,QAAA,CAAA2B,CAAAA,CAAM,IAAA,CAAK,CAAA,CAC7E3B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0DAAA,CAA4D,QAAA,CAAA2B,EAAM,WAAA,CAAY,CAAA,CAAA,CAChG,CAAA,CAAA,CAAA,CATKA,CAAAA,CAAM,EAUb,CACD,CAAA,CACH,CAAA,CAGF,OAAI6B,CAAAA,CACFI,CAAAA,CAAU5D,GAAAA,CAACG,EAAAA,CAAA,EAAkB,CAAA,CACpBiD,CAAAA,CAAO,MAAA,GAAW,CAAA,GAC3BQ,CAAAA,CACE5D,GAAAA,CAAC6D,EAAAA,CAAA,CACC,QAAA,CAAA7D,GAAAA,CAAC8D,EAAAA,CAAA,CAAkB,QAAA,CAAAH,CAAAA,CAAa,CAAA,CAClC,CAAA,CAAA,CAKFvD,KAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CACd,QAAA,CAAA,CAAAJ,GAAAA,CAAC+D,CAAAA,CAAA,EAAc,CAAA,CACf/D,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uCAAA,CACb,QAAA,CAAAI,IAAAA,CAAC,OAAI,SAAA,CAAU,wFAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8BAAA,CAA+B,QAAA,CAAA,wBAAA,CAAsB,CAAA,CACnEA,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,kCAAA,CAAmC,QAAA,CAAA,0GAAA,CAEhD,CAAA,CAAA,CACF,CAAA,CACAI,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+CAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACgE,CAAAA,CAAA,CACC,YAAA,CAAW,eAAA,CACX,UAAU,uBAAA,CACV,WAAA,CAAY,qBAAA,CACZ,KAAA,CAAO5B,CAAAA,CACP,QAAA,CAAW6B,CAAAA,EAAU,CACdjB,CAAAA,CAAQ,CAAC,CAAA,CACdX,GAAAA,CAAU4B,CAAAA,CAAM,MAAA,CAAO,KAAK,EAC9B,CAAA,CACF,CAAA,CACC1B,CAAAA,CACCvC,GAAAA,CAACkE,GAAAA,CAAA,CAAO,OAAA,CAAO,IAAA,CAAC,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,IAAA,CAC1C,QAAA,CAAA9D,KAAC+D,IAAAA,CAAA,CAAK,EAAA,CAAG,KAAA,CACP,QAAA,CAAA,CAAAnE,GAAAA,CAACoE,IAAAA,CAAA,EAAK,CAAA,CAAE,WAAA,CAAA,CAEV,CAAA,CACF,CAAA,CAEApE,GAAAA,CAACqE,EAAAA,CAAA,CAAkB,QAAA,CAAQ,IAAA,CACzB,QAAA,CAAAjE,IAAAA,CAAC8D,GAAAA,CAAA,CAAO,SAAA,CAAU,YAAA,CAAa,QAAA,CAAQ,IAAA,CAAC,IAAA,CAAK,IAAA,CAC3C,QAAA,CAAA,CAAAlE,GAAAA,CAACoE,IAAAA,CAAA,EAAK,CAAA,CAAE,WAAA,CAAA,CAEV,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACCR,CAAAA,CACAN,CAAAA,EAAW,CAACC,CAAAA,CAAgBvD,GAAAA,CAACkB,EAAAA,CAAA,CAAuB,SAAA,CAAWuC,CAAAA,CAAgB,EAAK,IAAA,CACpFF,CAAAA,CACCnD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gGAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACsE,YAAAA,CAAA,CAAa,SAAA,CAAU,2BAAA,CAA4B,CAAA,CACpDtE,GAAAA,CAAC,QAAK,QAAA,CAAA,wBAAA,CAAsB,CAAA,CAAA,CAC9B,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASuE,EAAAA,CAAW,CAAE,SAAA,CAAApH,CAAAA,CAAW,EAAA,CAAAqH,EAAI,OAAA,CAAAC,CAAQ,CAAA,CAAsE,CACjH,OACEzE,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAW,CAAA,+BAAA,EAAkC7C,CAAAA,EAAa,EAAE,CAAA,CAAA,CAAI,EAAA,CAAIqH,CAAAA,CACpE,QAAA,CAAAC,CAAAA,CACH,CAEJ,CAEA,SAASC,CAAAA,CAAe,CACtB,QAAA,CAAAlE,CAAAA,CACA,IAAA,CAAAmE,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,EAAA,CAAAJ,CACF,CAAA,CAKgB,CACd,OACEpE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAAC6E,GAAAA,CAAA,CAAM,OAAA,CAASD,CAAAA,CAAS,EAAA,CAAIJ,CAAAA,CAC1B,QAAA,CAAAhE,EACH,CAAA,CACAJ,IAAAA,CAAC0E,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA9E,GAAAA,CAAC+E,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/E,GAAAA,CAAC,QAAA,CAAA,CACC,YAAA,CAAY,SAASQ,CAAAA,CAAS,WAAA,EAAa,CAAA,CAAA,CAC3C,SAAA,CAAU,oFAAA,CACV,IAAA,CAAK,QAAA,CAEL,QAAA,CAAAR,GAAAA,CAACgF,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAA,CAChC,CAAA,CACF,CAAA,CACAhF,GAAAA,CAACiF,GAAAA,CAAA,CAAe,SAAA,CAAU,aAAA,CAAe,QAAA,CAAAN,CAAAA,CAAK,CAAA,CAAA,CAChD,CAAA,CAAA,CACF,CAEJ,CAEA,SAASO,EAAAA,CAAgB,CAAE,OAAA,CAAAC,CAAAA,CAAS,KAAA,CAAAC,CAAM,CAAA,CAAwE,CAChH,OACEhF,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAjF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uDACb,QAAA,CAAA,CAAAA,IAAAA,CAAC0E,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA9E,GAAAA,CAAC+E,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/E,GAAAA,CAACsF,CAAAA,CAAA,CAAe,UAAU,wBAAA,CAAyB,CAAA,CACrD,CAAA,CACAtF,GAAAA,CAACiF,GAAAA,CAAA,CAAe,QAAA,CAAA,gBAAA,CAAc,CAAA,CAAA,CAChC,CAAA,CACAjF,GAAAA,CAACuF,CAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,UAAU,QAAA,CAAS,CAAA,CACrDvF,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,gGAAA,CACX,QAAA,CAAAoF,CAAAA,CACH,CAAA,CACCD,CAAAA,CAAAA,CACH,CAAA,CACAnF,GAAAA,CAACkE,GAAAA,CAAA,CAAO,QAAO,IAAA,CAAC,SAAA,CAAU,sBAAA,CAAuB,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,CACjE,QAAA,CAAA9D,IAAAA,CAAC+D,IAAAA,CAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAA,CAAG,KACvB,QAAA,CAAA,CAAAnE,GAAAA,CAACwF,SAAAA,CAAA,CAAU,SAAA,CAAU,mBAAA,CAAoB,CAAA,CAAE,QAAA,CAAA,CAE7C,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASC,EAAAA,EAAmC,CAC1C,OACErF,IAAAA,CAAC,KAAA,CAAA,CAAI,WAAA,CAAU,MAAA,CAAO,SAAA,CAAU,yFAAA,CAC9B,QAAA,CAAA,CAAAJ,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,eAAA,CAAa,CAAA,CAC1CA,GAAAA,CAACkF,EAAAA,CAAA,CAAgB,OAAA,CAASlF,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,gBAAA,CAAiB,CAAA,CAAI,KAAA,CAAON,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,gBAAA,CAAiB,EAAI,CAAA,CACnHF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4FAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mFAAA,CACZ,QAAA,CAAA,CAAA,CAAC,MAAA,CAAQ,aAAa,CAAA,CAAE,IAAKsF,GAAAA,EAC5BtF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8BAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,gBAAA,CAAiB,CAAA,CACrCN,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,kBAAA,CAAmB,CAAA,CAAA,CAAA,CAFUoF,GAGnD,CACD,CAAA,CACDtF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8BAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACM,CAAAA,CAAA,CAAS,UAAU,gBAAA,CAAiB,CAAA,CACrCN,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,gBAAA,CAAiB,CAAA,CAAA,CACvC,CAAA,CAAA,CACF,CAAA,CACAF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CACb,UAAAJ,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,gBAAA,CAAiB,CAAA,CACrCN,GAAAA,CAACM,CAAAA,CAAA,CAAS,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAA,CAC5D,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASqF,EAAAA,CAAiB,CACxB,OAAA,CAAA/B,CAAAA,CACA,MAAA,CAAAxG,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,QAAA,CAAAb,CAAAA,CAAW,MACX,gBAAA,CAAAmJ,CAAAA,CACA,iBAAA,CAAAC,CACF,CAAA,CAQgB,CACd,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIzD,QAAAA,CAA8B,OAAO,CAAA,CAC/D0D,CAAAA,CAAcpC,CAAAA,CAAQ,MAAA,CAAS,GAAA,CACjCqC,CAAAA,CAEJ,OAAIrC,CAAAA,CAAQ,IAAA,EAAK,CACfqC,CAAAA,CAAUjG,GAAAA,CAACkG,EAAAA,CAAA,CAAS,UAAA,CAAY3F,EAAAA,CAA0B,QAAA,CAAAqD,EAAQ,CAAA,CAElEqC,CAAAA,CAAUjG,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,0BAAA,CAA2B,QAAA,CAAA,qBAAA,CAAmB,CAAA,CAIrEI,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gEAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,yDAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAAC6E,GAAAA,CAAA,CAAM,OAAA,CAAQ,eAAA,CAAgB,EAAA,CAAG,qBAAA,CAAsB,QAAA,CAAA,SAAA,CAExD,CAAA,CACAzE,IAAAA,CAAC0E,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA9E,GAAAA,CAAC+E,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/E,GAAAA,CAAC,QAAA,CAAA,CACC,YAAA,CAAW,qBAAA,CACX,SAAA,CAAU,oFAAA,CACV,IAAA,CAAK,SAEL,QAAA,CAAAA,GAAAA,CAACgF,IAAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAA,CAChC,CAAA,CACF,CAAA,CACAhF,GAAAA,CAACiF,GAAAA,CAAA,CAAe,SAAA,CAAU,aAAA,CAAc,yNAGxC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACA7E,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,0GAAA,EAA6GwF,CAAAA,CAAmB,uBAAA,CAA0B,EAAE,CAAA,mBAAA,CAAA,CAEvK,QAAA,CAAA,CAAAxF,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+FAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACmG,EAAAA,CAAA,CACC,KAAA,CAAOL,CAAAA,CACP,aAAA,CAAgBtI,CAAAA,EAAU,CACxBuI,CAAAA,CAAYvI,CAAAA,GAAU,SAAA,CAAY,SAAA,CAAY,OAAO,EACvD,CAAA,CAEA,QAAA,CAAA4C,IAAAA,CAACgG,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAhG,IAAAA,CAAC0E,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA9E,GAAAA,CAAC+E,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/E,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gBAAA,CACd,QAAA,CAAAA,GAAAA,CAACqG,EAAAA,CAAA,CAAY,YAAA,CAAW,OAAA,CAAQ,SAAA,CAAU,WAAA,CAAY,KAAA,CAAM,QAC1D,QAAA,CAAArG,GAAAA,CAACsG,OAAAA,CAAA,CAAQ,SAAA,CAAU,aAAA,CAAc,CAAA,CACnC,CAAA,CACF,CAAA,CACF,CAAA,CACAtG,GAAAA,CAACiF,GAAAA,CAAA,CAAe,QAAA,CAAA,OAAA,CAAK,GACvB,CAAA,CACA7E,IAAAA,CAAC0E,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA9E,GAAAA,CAAC+E,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/E,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,iBACd,QAAA,CAAAA,GAAAA,CAACqG,EAAAA,CAAA,CAAY,YAAA,CAAW,SAAA,CAAU,SAAA,CAAU,WAAA,CAAY,KAAA,CAAM,SAAA,CAC5D,QAAA,CAAArG,GAAAA,CAACuG,GAAAA,CAAA,CAAI,UAAU,aAAA,CAAc,CAAA,CAC/B,CAAA,CACF,CAAA,CACF,CAAA,CACAvG,GAAAA,CAACiF,GAAAA,CAAA,CAAe,QAAA,CAAA,SAAA,CAAO,CAAA,CAAA,CACzB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA7E,IAAAA,CAAC,QAAK,SAAA,CAAW4F,CAAAA,CAAc,gCAAA,CAAmC,qCAAA,CAC/D,QAAA,CAAA,CAAApC,CAAAA,CAAQ,MAAA,CAAO,cAAA,EAAe,CAAE,KAAA,CAAI,GAAA,CAAyB,cAAA,EAAe,CAAA,CAC/E,CAAA,CAAA,CACF,EACA5D,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDAAA,CAAqD,MAAA,CAAQ8F,CAAAA,GAAa,OAAA,CACvF,QAAA,CAAA9F,GAAAA,CAAClD,EAAAA,CAAA,CACC,eAAA,CAAiB8I,CAAAA,CAAmB,qBAAA,CAAwB,OAC5D,WAAA,CAAaA,CAAAA,CACb,cAAA,CAAe,qBAAA,CACf,SAAA,CAAU,8DAAA,CACV,QAAA,CAAUnJ,CAAAA,CACV,KAAA,CAAOmH,CAAAA,CACP,MAAA,CAAQxG,CAAAA,CACR,QAAA,CAAUC,CAAAA,CACV,MAAA,CAAQC,CAAAA,CACV,CAAA,CACF,CAAA,CACCwI,CAAAA,GAAa,SAAA,CACZ9F,GAAAA,CAACwG,CAAAA,CAAA,CAAW,SAAA,CAAU,sBAAA,CACpB,QAAA,CAAAxG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yEAAA,CAA2E,SAAAiG,CAAAA,CAAQ,CAAA,CACpG,CAAA,CACE,IAAA,CACHL,CAAAA,EAAoBC,CAAAA,CACnB7F,GAAAA,CAACuE,EAAAA,CAAA,CAAW,SAAA,CAAU,6BAAA,CAA8B,EAAA,CAAG,qBAAA,CAAsB,OAAA,CAASsB,EAAmB,CAAA,CACvG,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAUO,SAASY,EAAAA,CAAU,CAAE,GAAA,CAAAzE,CAAAA,CAAK,IAAA,CAAA0E,CAAAA,CAAM,OAAA,CAAAC,CAAAA,CAAS,UAAA1E,CAAAA,CAAW,KAAA,CAAAN,GAAM,CAAA,CAAgC,CAC/F,GAAM,CAACiF,GAAAA,CAAMC,CAAO,CAAA,CAAIvE,QAAAA,CAASX,GAAAA,EAAO,IAAA,EAAQ,EAAE,EAC5C,CAACmF,CAAAA,CAAaC,CAAc,CAAA,CAAIzE,QAAAA,CAASX,GAAAA,EAAO,WAAA,EAAe,EAAE,CAAA,CACjE,CAACiC,CAAAA,CAASoD,CAAU,CAAA,CAAI1E,QAAAA,CAASX,KAAO,OAAA,EAAW,EAAE,CAAA,CACrD,CAACsF,GAAAA,CAAYC,CAAa,CAAA,CAAI5E,QAAAA,CAA+BX,GAAAA,EAAO,UAAA,EAAc,SAAS,CAAA,CAC3F,CAACwF,CAAAA,CAASC,CAAU,CAAA,CAAI9E,QAAAA,CAAwBX,GAAAA,EAAO,OAAA,EAAW,IAAI,CAAA,CACtE,CAAC0F,CAAAA,CAAUC,CAAW,CAAA,CAAIhF,QAAAA,CAAS,KAAK,CAAA,CACxCiF,CAAAA,CAAc7J,OAAO,KAAK,CAAA,CAC1B,CAAC+G,CAAAA,CAAS+C,CAAU,CAAA,CAAIlF,QAAAA,CAAS,EAAE,CAAA,CACnC,CAACmF,GAAAA,CAASC,GAAU,CAAA,CAAIpF,QAAAA,CAAS,CAAE,OAAA,CAAS,KAAA,CAAO,WAAA,CAAa,KAAA,CAAO,IAAA,CAAM,KAAM,CAAC,CAAA,CACpFJ,CAAAA,CAAWC,WAAAA,EAAY,CACvB,CAAE,IAAA,CAAMwF,CAAW,CAAA,CAAIC,GAAmC/E,CAAAA,CAAMZ,CAAS,CAAA,CAAE,MAAA,CAAQkB,CAAO,CAAA,CAC1F,EAAG0E,CAAI,CAAA,CAAIC,CAAAA,EAAQ,CACnBvF,CAAAA,CAAYC,CAAAA,GACZuF,EAAAA,CAAiBF,CAAAA,CAAK,IAAA,EAAM,MAAA,EAAU,EAAC,CAGvCG,EAAAA,CAAAA,CAAoBL,CAAAA,EAAY,MAAA,EAAU,EAAC,EAAG,MAAA,CAAQM,CAAAA,EAAUF,EAAAA,CAAe,SAASE,CAAAA,CAAM,IAAI,CAAC,CAAA,CACrGC,EAAAA,CAAe,EAAA,CAEdtE,CAAAA,CAAQ,IAAA,EAAK,CAEPA,CAAAA,CAAQ,MAAA,CAAS,GAAA,GAC1BsE,EAAAA,CAAe,CAAA,wBAAA,EAA2B,OAAO,GAAwB,CAAC,CAAA,WAAA,CAAA,CAAA,CAF1EA,EAAAA,CAAe,qBAAA,CAKjB,IAAMC,GAAAA,CAAa,CACjB,OAAA,CAASD,EAAAA,CACT,WAAA,CAAapB,CAAAA,CAAY,IAAA,EAAK,CAAI,GAAK,yBAAA,CACvC,IAAA,CAAMF,GAAAA,CAAK,IAAA,EAAK,CAAI,EAAA,CAAK,kBAAA,CACzB,KAAA,CAAOK,GAAAA,GAAe,OAAA,EAAW,CAACE,CAAAA,CAAU,gBAAA,CAAmB,EACjE,EACMiB,EAAAA,CAAU,CAACD,GAAAA,CAAW,OAAA,EAAW,CAACA,GAAAA,CAAW,WAAA,EAAe,CAACA,GAAAA,CAAW,IAAA,EAAQ,CAACA,GAAAA,CAAW,KAAA,CAC5FE,CAAAA,CAAgBZ,IAAQ,IAAA,EAAQ,CAAA,CAAQU,GAAAA,CAAW,IAAA,CACnDG,CAAAA,CAAuBb,GAAAA,CAAQ,WAAA,EAAe,CAAA,CAAQU,GAAAA,CAAW,WAAA,CACjEvC,EAAAA,CAAmB6B,GAAAA,CAAQ,OAAA,EAAW,CAAA,CAAQU,GAAAA,CAAW,OAAA,CACzD/C,EAAAA,CAAQsB,CAAAA,GAAS,QAAA,CAAW,WAAA,CAAe/E,GAAAA,EAAO,IAAA,EAAQ,OAAA,CAC5D4G,EAAAA,CAAY,cAAA,CAEZlB,CAAAA,CACFkB,EAAAA,CAAY,WAAA,CACH7B,CAAAA,GAAS,QAAA,GAClB6B,GAAY,cAAA,CAAA,CAGd,eAAeC,EAAAA,EAAsB,CACnC,GAAI,CAACjG,CAAAA,EAAagF,CAAAA,CAAY,OAAA,CAC5B,OAGF,GAAI,CAACa,EAAAA,CAAS,CACZV,IAAW,CAAE,OAAA,CAAS,IAAA,CAAM,WAAA,CAAa,IAAA,CAAM,IAAA,CAAM,IAAK,CAAC,CAAA,CAE3D,MACF,CAEAH,CAAAA,CAAY,OAAA,CAAU,IAAA,CACtBD,EAAY,IAAI,CAAA,CAChBE,CAAAA,CAAW,EAAE,CAAA,CAEb,IAAMiB,CAAAA,CAAoB,CACxB,OAAA,CAAA7E,CAAAA,CACA,WAAA,CAAAkD,CAAAA,CACA,IAAA,CAAAF,GAAAA,CACA,QAASK,GAAAA,GAAe,OAAA,CAAUE,CAAAA,CAAU,IAAA,CAC5C,UAAA,CAAAF,GACF,CAAA,CAEA,GAAI,CACF,IAAMyB,CAAAA,CACJhC,CAAAA,GAAS,QAAA,EAAY,CAAC/E,IAAQ,MAAMK,CAAAA,CAAI,WAAA,CAAYyG,CAAK,CAAA,CAAI,MAAMzG,CAAAA,CAAI,WAAA,CAAYL,GAAAA,CAAM,EAAA,CAAI8G,CAAK,CAAA,CAEpG,GAAI,CAACC,EAAO,OAAA,CAAS,CACnBlB,CAAAA,CAAW,KAAA,CAAM,OAAA,CAAQkB,CAAAA,CAAO,YAAY,CAAA,CAAIA,CAAAA,CAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAIA,CAAAA,CAAO,YAAY,CAAA,CAEpG,MACF,CAEAC,EAAAA,CAAM,OAAA,CAAQjC,CAAAA,GAAS,QAAA,EAAY,CAAC/E,GAAAA,CAAQ,gBAAA,CAAmB,cAAc,CAAA,CAC7EgF,CAAAA,CAAQ+B,CAAAA,CAAO,KAAK,EACtB,CAAA,MAASE,CAAAA,CAAO,CACdpB,CAAAA,CAAWoB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,uBAAuB,EAC7E,CAAA,OAAE,CACArB,CAAAA,CAAY,OAAA,CAAU,MACtBD,CAAAA,CAAY,KAAK,EACnB,CACF,CAEA,eAAeuB,EAAAA,CAAa5E,CAAAA,CAAkD,CAC5EA,CAAAA,CAAM,cAAA,EAAe,CACrB,MAAMuE,EAAAA,GACR,CAEA,eAAeM,EAAAA,EAA6B,CAC1C,GAAI,EAAA,CAACnH,GAAAA,EAAS,CAACY,CAAAA,EAAagF,CAAAA,CAAY,OAAA,CAAA,CAIxC,CAAAA,CAAAA,CAAY,OAAA,CAAU,KACtBD,CAAAA,CAAY,IAAI,CAAA,CAChBE,CAAAA,CAAW,EAAE,CAAA,CAEb,GAAI,CACF,IAAMkB,CAAAA,CAAS,MAAM1G,CAAAA,CAAI,WAAA,CAAYL,GAAAA,CAAM,EAAE,CAAA,CAE7C,GAAI,CAAC+G,CAAAA,CAAO,OAAA,CAAS,CACnBlB,CAAAA,CAAW,KAAA,CAAM,OAAA,CAAQkB,CAAAA,CAAO,YAAY,CAAA,CAAIA,CAAAA,CAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAIA,CAAAA,CAAO,YAAY,CAAA,CAEpG,MACF,CAEAxG,CAAAA,CAAS,IAAA,CAAM,CAAE,QAAA,CAAU,MAAO,CAAC,EACrC,CAAA,MAAS0G,EAAO,CACdpB,CAAAA,CAAWoB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,yBAAyB,EAC/E,CAAA,OAAE,CACArB,CAAAA,CAAY,OAAA,CAAU,KAAA,CACtBD,CAAAA,CAAY,KAAK,EACnB,CAAA,CACF,CAEA,OACElH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACkF,EAAAA,CAAA,CACC,OAAA,CACE9E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACZ,QAAA,CAAA,CAACgI,EAAAA,CAEE,IAAA,CADFpI,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qCAAA,CAAsC,QAAA,CAAA,sCAAA,CAAoC,CAAA,CAE3F0G,CAAAA,GAAS,MAAA,EAAU/E,GAAAA,CAClBvB,IAAAA,CAAC8D,IAAA,CAAO,QAAA,CAAUmD,CAAAA,EAAY,CAAC9E,CAAAA,CAAW,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAS,IAAG,CAAQuG,KAAY,CAAA,CAClH,QAAA,CAAA,CAAA9I,GAAAA,CAAC+I,MAAAA,CAAA,EAAO,CAAA,CAAE,QAAA,CAAA,CAEZ,CAAA,CACE,IAAA,CACJ/I,GAAAA,CAACqE,EAAAA,CAAA,CAAkB,QAAA,CAAU,CAAC9B,EAC5B,QAAA,CAAAvC,GAAAA,CAACkE,GAAAA,CAAA,CAAO,QAAA,CAAUmD,CAAAA,EAAY,CAACe,EAAAA,EAAW,CAAC7F,CAAAA,CAAW,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,KAAK,QAAA,CAC3F,QAAA,CAAAgG,EAAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEF,KAAA,CAAOnD,EAAAA,CACT,CAAA,CACCX,CAAAA,CACCzE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2IAAA,CACZ,SAAAyE,CAAAA,CACH,CAAA,CACE,IAAA,CACJrE,IAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,gHAAA,CACV,EAAA,CAAG,mBAAA,CACH,QAAA,CAAW6D,CAAAA,EAAO,CAAQ4E,EAAAA,CAAa5E,CAAK,IAE5C,QAAA,CAAA,CAAA7D,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yGAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC0E,CAAAA,CAAA,CAAe,IAAA,CAAK,kCAAA,CAAmC,QAAQ,YAAA,CAAa,QAAA,CAAA,MAAA,CAE7E,CAAA,CACA1E,GAAAA,CAACgE,CAAAA,CAAA,CACC,kBAAA,CAAkBqE,CAAAA,CAAgB,kBAAA,CAAqB,MAAA,CACvD,cAAA,CAAcA,CAAAA,CACd,SAAA,CAAWA,CAAAA,CAAgB,yDAAA,CAA4D,EAAA,CACvF,EAAA,CAAG,YAAA,CACH,KAAA,CAAOzB,GAAAA,CACP,MAAA,CAAQ,IAAMc,GAAAA,CAAY3H,CAAAA,GAAa,CAAE,GAAGA,CAAAA,CAAS,IAAA,CAAM,IAAK,CAAA,CAAE,EAClE,QAAA,CAAWkE,CAAAA,EAAU4C,CAAAA,CAAQ5C,CAAAA,CAAM,MAAA,CAAO,KAAK,CAAA,CACjD,CAAA,CACCoE,CAAAA,CAAgBrI,GAAAA,CAACuE,EAAAA,CAAA,CAAW,EAAA,CAAG,kBAAA,CAAmB,QAAS4D,GAAAA,CAAW,IAAA,CAAM,CAAA,CAAK,IAAA,CAAA,CACpF,CAAA,CACA/H,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC0E,CAAAA,CAAA,CACC,IAAA,CAAK,sIAAA,CACL,OAAA,CAAQ,oBACT,QAAA,CAAA,aAAA,CAED,CAAA,CACA1E,GAAAA,CAACgE,CAAAA,CAAA,CACC,kBAAA,CAAkBsE,CAAAA,CAAuB,yBAAA,CAA4B,MAAA,CACrE,cAAA,CAAcA,CAAAA,CACd,SAAA,CAAWA,CAAAA,CAAuB,yDAAA,CAA4D,GAC9F,EAAA,CAAG,mBAAA,CACH,WAAA,CAAY,gEAAA,CACZ,KAAA,CAAOxB,CAAAA,CACP,MAAA,CAAQ,IAAMY,GAAAA,CAAY3H,CAAAA,GAAa,CAAE,GAAGA,CAAAA,CAAS,WAAA,CAAa,IAAK,CAAA,CAAE,CAAA,CACzE,QAAA,CAAWkE,CAAAA,EAAU8C,CAAAA,CAAe9C,CAAAA,CAAM,MAAA,CAAO,KAAK,CAAA,CACxD,CAAA,CACCqE,CAAAA,CAAuBtI,GAAAA,CAACuE,EAAAA,CAAA,CAAW,GAAG,yBAAA,CAA0B,OAAA,CAAS4D,GAAAA,CAAW,WAAA,CAAa,CAAA,CAAK,IAAA,CAAA,CACzG,CAAA,CACA/H,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC0E,CAAAA,CAAA,CACC,IAAA,CAAK,mLACL,OAAA,CAAQ,kBAAA,CACT,QAAA,CAAA,YAAA,CAED,CAAA,CACAtE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC4I,CAAAA,CAAA,CACC,KAAA,CAAO/B,GAAAA,CACP,aAAA,CAAgBzJ,CAAAA,EAAU,CACxB0J,CAAAA,CAAc1J,CAAAA,GAAU,OAAA,EAAWA,CAAAA,GAAU,UAAA,CAAaA,CAAAA,CAAQ,SAAS,CAAA,CAEvEA,CAAAA,GAAU,OAAA,EACZ4J,CAAAA,CAAW,IAAI,EAEnB,EAEA,QAAA,CAAA,CAAApH,GAAAA,CAACiJ,CAAAA,CAAA,CAAc,YAAA,CAAW,YAAA,CAAa,SAAA,CAAU,sBAAA,CAAuB,EAAA,CAAG,kBAAA,CACzE,QAAA,CAAAjJ,GAAAA,CAACkJ,GAAAA,CAAA,EAAY,EACf,CAAA,CACA9I,IAAAA,CAAC+I,CAAAA,CAAA,CAAc,KAAA,CAAM,OAAA,CACnB,QAAA,CAAA,CAAAnJ,GAAAA,CAACoJ,GAAAA,CAAA,CAAW,KAAA,CAAM,SAAA,CAAU,QAAA,CAAA,SAAA,CAAO,CAAA,CACnCpJ,IAACoJ,GAAAA,CAAA,CAAW,QAAA,CAAUpB,EAAAA,CAAiB,MAAA,GAAW,CAAA,CAAG,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAA,OAAA,CAEnE,CAAA,CACAhI,GAAAA,CAACoJ,GAAAA,CAAA,CAAW,KAAA,CAAM,WAAW,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CACvC,CAAA,CAAA,CACF,CAAA,CACCnC,GAAAA,GAAe,OAAA,CACd7G,IAAAA,CAAC4I,CAAAA,CAAA,CACC,KAAA,CAAO7B,CAAAA,EAAW,EAAA,CAClB,aAAA,CAAgB3J,CAAAA,EAAU,CACxB4J,CAAAA,CAAW5J,CAAAA,EAAS,IAAI,EAC1B,CAAA,CAEA,QAAA,CAAA,CAAAwC,GAAAA,CAACiJ,CAAAA,CAAA,CAAc,YAAA,CAAW,OAAA,CAAQ,SAAA,CAAU,sBAAA,CAC1C,QAAA,CAAAjJ,IAACkJ,GAAAA,CAAA,CAAY,WAAA,CAAY,gBAAA,CAAiB,CAAA,CAC5C,CAAA,CACAlJ,GAAAA,CAACmJ,CAAAA,CAAA,CAAc,KAAA,CAAM,OAAA,CAClB,QAAA,CAAAnB,EAAAA,CAAiB,GAAA,CAAKC,GACrBjI,GAAAA,CAACoJ,GAAAA,CAAA,CAA0B,KAAA,CAAOnB,CAAAA,CAAM,EAAA,CACrC,QAAA,CAAAA,CAAAA,CAAM,KAAA,CAAA,CADQA,CAAAA,CAAM,EAEvB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACChB,GAAAA,GAAe,OAAA,EAAWkB,GAAAA,CAAW,KAAA,CAAQnI,GAAAA,CAACuE,EAAAA,CAAA,CAAW,OAAA,CAAS4D,GAAAA,CAAW,KAAA,CAAO,CAAA,CAAK,IAAA,CAAA,CAC5F,CAAA,CAAA,CACF,EACAnI,GAAAA,CAAC2F,EAAAA,CAAA,CACC,OAAA,CAAS/B,CAAAA,CACT,gBAAA,CAAkBgC,EAAAA,CAClB,iBAAA,CAAmBuC,GAAAA,CAAW,OAAA,CAC9B,MAAA,CAAQ,IAAMT,GAAAA,CAAY3H,CAAAA,GAAa,CAAE,GAAGA,CAAAA,CAAS,OAAA,CAAS,IAAK,CAAA,CAAE,CAAA,CACrE,QAAA,CAAUiH,CAAAA,CACV,MAAA,CAAQ,IAAM,CACPwB,EAAAA,GACP,CAAA,CACF,GACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASa,EAAAA,CAAkB,CACzB,SAAA,CAAApH,CAAAA,CACA,KAAA,CAAAN,CAAAA,CACA,cAAA,CAAAC,CACF,CAAA,CAIgB,CACd,IAAMW,CAAAA,CAAYC,CAAAA,EAAa,CACzBN,CAAAA,CAAWC,WAAAA,EAAY,CACvB,CAACmH,GAAAA,CAASC,CAAU,CAAA,CAAIjH,QAAAA,CAAS,KAAK,CAAA,CACtC,CAACkH,CAAAA,CAAWC,CAAY,CAAA,CAAInH,QAAAA,CAAS,EAAE,CAAA,CAE7C,eAAeoH,CAAAA,EAAsB,CACnCH,CAAAA,CAAW,IAAI,CAAA,CACfE,CAAAA,CAAa,EAAE,CAAA,CACf,IAAIE,EAEJ,GAAI,CACFA,CAAAA,CAAW,MAAM,KAAA,CAAM,CAAA,aAAA,EAAgB1H,CAAS,CAAA,QAAA,EAAWN,CAAAA,CAAM,EAAE,CAAA,KAAA,CAAA,CAAS,CAAE,MAAA,CAAQ,MAAA,CAAQ,YAAa,SAAU,CAAC,EACxH,CAAA,KAAQ,CACN8H,CAAAA,CAAa,qCAAqC,CAAA,CAClDF,CAAAA,CAAW,KAAK,CAAA,CAEhB,MACF,CAIA,GAFAA,CAAAA,CAAW,KAAK,CAAA,CAEZ,CAACI,CAAAA,CAAS,EAAA,CAAI,CAChBF,CAAAA,CAAa,kDAAkD,CAAA,CAE/D,MACF,CAEAvH,CAAAA,CAAS,IAAA,CAAM,CAAE,QAAA,CAAU,MAAO,CAAC,EACrC,CAEA,OACE9B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAACkF,EAAAA,CAAA,CACC,OAAA,CACE9E,IAAAA,CAAC,OAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAAC4J,GAAAA,CAAA,CAAM,OAAA,CAAQ,WAAA,CAAa,QAAA,CAAAjI,CAAAA,CAAM,MAAA,GAAW,QAAA,CAAW,QAAA,CAAW,MAAA,CAAO,EACzEA,CAAAA,CAAM,MAAA,GAAW,QAAA,EAAY3B,GAAAA,CAACkE,GAAAA,CAAA,CAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAUoF,GAAAA,EAAW,CAAC/G,CAAAA,CAAW,OAAA,CAAS,IAAG,CAAQmH,CAAAA,GAAK,CAAA,CAAG,IAAA,CAAK,IAAA,CAAK,QAAA,CAAA,aAAA,CAAW,CAAA,CAAA,CACxI,CAAA,CAEF,KAAA,CAAO/H,CAAAA,CAAM,IAAA,CACf,CAAA,CACAvB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wEACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uFAAA,CACb,QAAA,CAAA,CAAAJ,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2BAAA,CAA4B,QAAA,CAAA,0BAAA,CAAwB,CAAA,CACjEA,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,qCAAA,CACV,QAAA,CAAA2B,CAAAA,CAAM,MAAA,GAAW,QAAA,CAAW,qFAAA,CAAwF,mFAAA,CACvH,CAAA,CAAA,CACF,CAAA,CACAvB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8FAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC0E,CAAAA,CAAA,CAAe,IAAA,CAAK,kCAAA,CAAmC,OAAA,CAAQ,YAAA,CAAa,QAAA,CAAA,MAAA,CAE7E,CAAA,CACA1E,GAAAA,CAACgE,CAAAA,CAAA,CACC,SAAA,CAAU,iBAAA,CACV,QAAA,CAAU,IAAA,CACV,EAAA,CAAG,YAAA,CACH,KAAA,CAAOrC,CAAAA,CAAM,IAAA,CACf,CAAA,CAAA,CACF,CAAA,CACAvB,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC0E,CAAAA,CAAA,CACC,IAAA,CAAK,sIAAA,CACL,OAAA,CAAQ,mBAAA,CACT,QAAA,CAAA,aAAA,CAED,CAAA,CACA1E,GAAAA,CAACgE,CAAAA,CAAA,CACC,SAAA,CAAU,iBAAA,CACV,QAAA,CAAU,IAAA,CACV,EAAA,CAAG,oBACH,WAAA,CAAY,gEAAA,CACZ,KAAA,CAAOrC,CAAAA,CAAM,WAAA,CACf,CAAA,CAAA,CACF,CAAA,CACAvB,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAJ,GAAAA,CAAC0E,CAAAA,CAAA,CACC,IAAA,CAAK,mLACL,OAAA,CAAQ,kBAAA,CACT,QAAA,CAAA,YAAA,CAED,CAAA,CACAtE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC4I,CAAAA,CAAA,CACC,QAAA,CAAU,IAAA,CACV,MAAOrH,CAAAA,CAAM,UAAA,CAEb,QAAA,CAAA,CAAA3B,GAAAA,CAACiJ,CAAAA,CAAA,CAAc,YAAA,CAAW,YAAA,CAAa,SAAA,CAAU,sCAAA,CAAuC,EAAA,CAAG,kBAAA,CACzF,QAAA,CAAAjJ,GAAAA,CAACkJ,IAAA,EAAY,CAAA,CACf,CAAA,CACA9I,IAAAA,CAAC+I,CAAAA,CAAA,CAAc,KAAA,CAAM,OAAA,CACnB,QAAA,CAAA,CAAAnJ,GAAAA,CAACoJ,GAAAA,CAAA,CAAW,KAAA,CAAM,SAAA,CAAU,mBAAO,CAAA,CACnCpJ,GAAAA,CAACoJ,GAAAA,CAAA,CAAW,QAAA,CAAU,CAACzH,CAAAA,CAAM,OAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAA,OAAA,CAEpD,CAAA,CACA3B,GAAAA,CAACoJ,GAAAA,CAAA,CAAW,KAAA,CAAM,UAAA,CAAW,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CACvC,CAAA,CAAA,CACF,CAAA,CACCzH,CAAAA,CAAM,UAAA,GAAe,OAAA,CACpBvB,IAAAA,CAAC4I,CAAAA,CAAA,CACC,QAAA,CAAU,IAAA,CACV,KAAA,CAAOrH,CAAAA,CAAM,OAAA,EAAW,EAAA,CAExB,QAAA,CAAA,CAAA3B,GAAAA,CAACiJ,CAAAA,CAAA,CAAc,YAAA,CAAW,OAAA,CAAQ,SAAA,CAAU,sCAAA,CAC1C,QAAA,CAAAjJ,GAAAA,CAACkJ,GAAAA,CAAA,CAAY,YAAY,gBAAA,CAAiB,CAAA,CAC5C,CAAA,CACAlJ,GAAAA,CAACmJ,CAAAA,CAAA,CAAc,KAAA,CAAM,OAAA,CACnB,QAAA,CAAAnJ,GAAAA,CAACoJ,GAAAA,CAAA,CAAW,KAAA,CAAOzH,CAAAA,CAAM,SAAW,EAAA,CACjC,QAAA,CAAAD,EAAAA,CAAwBC,CAAAA,CAAOC,CAAc,CAAA,CAChD,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACC4H,CAAAA,EAAaxJ,IAAC,GAAA,CAAA,CAAE,IAAA,CAAK,OAAA,CAAS,QAAA,CAAAwJ,CAAAA,CAAU,CAAA,CACzCxJ,GAAAA,CAAC2F,EAAAA,CAAA,CAAiB,OAAA,CAAShE,CAAAA,CAAM,OAAA,CAAS,QAAA,CAAQ,IAAA,CAAC,GACrD,CAAA,CAAA,CACF,CAEJ,CAEO,SAASkI,EAAAA,EAA+B,CAC7C,GAAM,CAAE,GAAA,CAAA7H,CAAAA,CAAK,SAAA,CAAAC,CAAU,CAAA,CAAIrB,EAAAA,GACrBsB,CAAAA,CAAWC,WAAAA,EAAY,CAE7B,OAAI,CAACF,CAAAA,EAAa,CAACD,CAAAA,CACVhC,GAAAA,CAACiB,EAAAA,CAAA,CAAY,QAAA,CAAA,oCAAA,CAAkC,CAAA,CAItDjB,GAAAA,CAACyG,GAAA,CAAU,GAAA,CAAKzE,CAAAA,CAAK,IAAA,CAAK,QAAA,CAAS,SAAA,CAAWC,CAAAA,CAAW,OAAA,CAAS,IAAMC,CAAAA,CAAS,IAAA,CAAM,CAAE,QAAA,CAAU,MAAO,CAAC,CAAA,CAAG,CAElH,CAEO,SAAS4H,EAAAA,EAA+B,CAC7C,GAAM,CAAE,GAAA,CAAA9H,CAAAA,CAAK,SAAA,CAAAC,CAAU,CAAA,CAAIrB,EAAAA,EAAc,CACnC,CAAE,OAAA,CAAAmJ,CAAQ,CAAA,CAAIC,SAAAA,EAA+B,CAC7C,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAArB,GAAAA,CAAO,SAAA,CAAA7F,CAAAA,CAAW,MAAA,CAAAmH,CAAO,EAAItC,EAAAA,CACzC3F,CAAAA,EAAa8H,CAAAA,CAAUlH,CAAAA,CAAMZ,CAAS,CAAA,CAAE,KAAA,CAAM8H,CAAO,CAAA,CAAI,IAAA,CACzD5G,CACF,CAAA,CACM,CAAE,IAAA,CAAMwE,CAAW,CAAA,CAAIC,EAAAA,CAAmC3F,CAAAA,CAAYY,CAAAA,CAAMZ,CAAS,CAAA,CAAE,MAAA,CAAS,IAAA,CAAMkB,CAAO,CAAA,CAEnH,GAAI,CAAClB,CAAAA,EAAa,CAACD,GAAO,CAAC+H,CAAAA,CACzB,OAAO/J,GAAAA,CAACiB,EAAAA,CAAA,CAAY,QAAA,CAAA,iBAAA,CAAe,CAAA,CAGrC,GAAI2H,GAAAA,CACF,OAAO5I,GAAAA,CAACiB,EAAAA,CAAA,CAAY,QAAA,CAAA,uBAAA,CAAqB,CAAA,CAG3C,GAAI8B,CAAAA,EAAa,CAACkH,CAAAA,EAAM,KAAA,CACtB,OAAOjK,GAAAA,CAACyF,EAAAA,CAAA,EAAoB,CAAA,CAG9B,IAAM7D,CAAAA,CAAiB,IAAI,GAAA,CAAA,CAAK+F,GAAY,MAAA,EAAU,EAAC,EAAG,GAAA,CAAKM,CAAAA,EAAU,CAACA,CAAAA,CAAM,EAAA,CAAIA,CAAAA,CAAM,KAAK,CAAC,CAAC,CAAA,CAEjG,OAAIgC,EAAK,KAAA,CAAM,MAAA,GAAW,QAAA,CACjBjK,GAAAA,CAACqJ,EAAAA,CAAA,CAAkB,SAAA,CAAWpH,CAAAA,CAAW,KAAA,CAAOgI,CAAAA,CAAK,KAAA,CAAO,cAAA,CAAgBrI,CAAAA,CAAgB,CAAA,CAInG5B,IAACyG,EAAAA,CAAA,CACC,GAAA,CAAKzE,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,SAAA,CAAWC,CAAAA,CACX,KAAA,CAAOgI,CAAAA,CAAK,KAAA,CACZ,OAAA,CAAUtI,CAAAA,EAAU,CACdA,CAAAA,CACGuI,CAAAA,CAAO,CAAE,KAAA,CAAAvI,CAAM,CAAA,CAAG,CAAE,UAAA,CAAY,KAAM,CAAC,CAAA,CAEvCuI,CAAAA,GAET,CAAA,CACF,CAEJ","file":"skills-pages-VP32HFUN.js","sourcesContent":["import type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { createTheme } from '@uiw/codemirror-themes';\n\nconst EDITOR_FONT = 'var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace';\nconst DARK_THEME_BACKGROUND = '#212121';\nconst LIGHT_THEME_BACKGROUND = '#fafafa';\n\nfunction withEditorSurface(theme: Extension, background: string, gutterBackground: string): Extension {\n return [\n theme,\n EditorView.theme({\n '&': {\n backgroundColor: background,\n },\n '.cm-scroller': {\n backgroundColor: background,\n },\n '.cm-gutters': {\n backgroundColor: gutterBackground,\n },\n }),\n ];\n}\n\nexport const darkTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: DARK_THEME_BACKGROUND,\n caret: '#f8f8f0',\n fontFamily: EDITOR_FONT,\n foreground: '#f8f8f2',\n gutterBackground: DARK_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#6d8a88',\n lineHighlight: 'rgba(255, 255, 255, 0.1)',\n selection: 'rgba(255, 255, 255, 0.1)',\n selectionMatch: 'rgba(255, 255, 255, 0.2)',\n },\n styles: [\n { color: '#6272a4', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#6272a4', tag: [t.meta, t.processingInstruction] },\n { color: '#f1fa8c', tag: t.string },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#ff79c6', tag: [t.keyword, t.operator, t.tagName] },\n { color: '#8be9fd', tag: [t.typeName, t.link, t.url] },\n { color: '#009fb8', tag: [t.className, t.attributeName, t.monospace] },\n { color: '#66d9ef', tag: [t.propertyName, t.function(t.propertyName)] },\n {\n color: '#009fb8',\n tag: [t.definition(t.variableName), t.function(t.variableName)],\n },\n { color: '#0072f5', tag: [t.strong, t.emphasis] },\n { color: '#ff5555', tag: t.invalid },\n ],\n theme: 'dark',\n }),\n DARK_THEME_BACKGROUND,\n DARK_THEME_BACKGROUND\n);\n\nexport const lightTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: LIGHT_THEME_BACKGROUND,\n caret: '#526fff',\n fontFamily: EDITOR_FONT,\n foreground: '#383a42',\n gutterBackground: LIGHT_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#9d9d9f',\n lineHighlight: '#383a420c',\n selection: '#e5e5e6',\n selectionMatch: '#e5e5e6',\n },\n styles: [\n { color: '#a0a1a7', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#a0a1a7', tag: [t.meta, t.processingInstruction] },\n { color: '#50a14f', tag: t.string },\n { color: '#986801', tag: [t.attributeName] },\n { color: '#a626a4', tag: t.keyword },\n { color: '#0072f5', tag: [t.operator, t.strong, t.emphasis] },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#c18401', tag: [t.typeName, t.className] },\n { color: '#009fb8', tag: [t.tagName, t.propertyName, t.monospace] },\n { color: '#4078f2', tag: [t.link, t.url, t.function(t.variableName), t.definition(t.variableName)] },\n { color: '#f91f6f', tag: t.invalid },\n ],\n theme: 'light',\n }),\n LIGHT_THEME_BACKGROUND,\n LIGHT_THEME_BACKGROUND\n);\n","import type { JSX } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';\nimport { markdown } from '@codemirror/lang-markdown';\nimport { languages } from '@codemirror/language-data';\nimport { bracketMatching, foldGutter, foldKeymap, indentOnInput } from '@codemirror/language';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { Compartment, EditorState, Prec } from '@codemirror/state';\nimport {\n drawSelection,\n dropCursor,\n EditorView,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n placeholder as placeholderExtension,\n} from '@codemirror/view';\nimport { lightTheme, darkTheme } from './markdown-editor-themes';\n\nexport interface MarkdownEditorProps {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n className?: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n placeholder?: string;\n readOnly?: boolean;\n value: string;\n}\n\nfunction isDarkTheme(): boolean {\n const root = document.documentElement;\n\n return (\n root.getAttribute('data-theme') === 'dark' || root.classList.contains('dark') || root.style.colorScheme === 'dark'\n );\n}\n\nconst editorChrome = EditorView.theme({\n '&': {\n fontSize: '13px',\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n minHeight: '0',\n minWidth: '0',\n width: '100%',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n height: '100%',\n lineHeight: '1.6',\n minHeight: '0',\n minWidth: '0',\n overflow: 'auto',\n width: '100%',\n },\n '.cm-content': {\n fontSize: '13px',\n fontStyle: 'normal',\n fontWeight: '400',\n minWidth: '0 !important',\n padding: '12px 0',\n },\n '.cm-line, .cm-line span': {\n fontSize: 'inherit',\n fontStyle: 'inherit',\n fontWeight: 'inherit',\n lineHeight: 'inherit',\n },\n '.cm-gutters': {\n borderRight: '1px solid transparent',\n },\n '.cm-foldPlaceholder': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n});\n\nfunction themeExtensions(dark: boolean) {\n return [dark ? darkTheme : lightTheme, editorChrome];\n}\n\nfunction readOnlyExtensions(readOnly: boolean) {\n return [EditorState.readOnly.of(readOnly), EditorView.editable.of(!readOnly)];\n}\n\nfunction contentAttributes(options: {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n readOnly?: boolean;\n}): { [name: string]: string } {\n const attributes: { [name: string]: string } = {\n 'aria-multiline': 'true',\n role: 'textbox',\n };\n\n if (options.ariaLabel) {\n attributes['aria-label'] = options.ariaLabel;\n }\n\n if (options.ariaLabelledBy) {\n attributes['aria-labelledby'] = options.ariaLabelledBy;\n }\n\n if (options.ariaDescribedBy) {\n attributes['aria-describedby'] = options.ariaDescribedBy;\n }\n\n if (options.ariaInvalid) {\n attributes['aria-invalid'] = 'true';\n }\n\n if (options.readOnly) {\n attributes['aria-readonly'] = 'true';\n }\n\n return attributes;\n}\n\nexport function MarkdownEditor({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n className,\n onBlur,\n onChange,\n onSave,\n placeholder,\n readOnly = false,\n value,\n}: MarkdownEditorProps): JSX.Element {\n const parentRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const themeCompartmentRef = useRef(new Compartment());\n const readOnlyCompartmentRef = useRef(new Compartment());\n const a11yCompartmentRef = useRef(new Compartment());\n const onBlurRef = useRef(onBlur);\n const onChangeRef = useRef(onChange);\n const onSaveRef = useRef(onSave);\n const valueRef = useRef(value);\n\n onBlurRef.current = onBlur;\n onChangeRef.current = onChange;\n onSaveRef.current = onSave;\n valueRef.current = value;\n\n useEffect(() => {\n const parent = parentRef.current;\n\n if (!parent) {\n return;\n }\n\n const view = new EditorView({\n parent,\n state: EditorState.create({\n doc: valueRef.current,\n extensions: [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n bracketMatching(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n EditorView.lineWrapping,\n markdown({ codeLanguages: languages }),\n keymap.of([...defaultKeymap, ...historyKeymap, ...searchKeymap, ...foldKeymap, indentWithTab]),\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-s',\n run: () => {\n onSaveRef.current?.();\n\n return true;\n },\n },\n ])\n ),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChangeRef.current?.(update.state.doc.toString());\n }\n\n if (update.focusChanged && !update.view.hasFocus) {\n onBlurRef.current?.();\n }\n }),\n themeCompartmentRef.current.of(themeExtensions(isDarkTheme())),\n readOnlyCompartmentRef.current.of(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.of(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ...(placeholder ? [placeholderExtension(placeholder)] : []),\n ],\n }),\n });\n\n viewRef.current = view;\n\n const resizeObserver = new ResizeObserver(() => {\n view.requestMeasure();\n });\n\n resizeObserver.observe(parent);\n\n const themeObserver = new MutationObserver(() => {\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n });\n\n themeObserver.observe(document.documentElement, {\n attributeFilter: ['class', 'data-theme', 'style'],\n attributes: true,\n });\n\n return () => {\n resizeObserver.disconnect();\n themeObserver.disconnect();\n view.destroy();\n viewRef.current = null;\n };\n // Mount once; later prop changes are applied through compartments / document transactions.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- editor view is created once\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n // Imported palettes live at module scope; this re-applies them after tsup/HMR.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- theme extensions change on hot reload\n }, [lightTheme, darkTheme]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n const current = view.state.doc.toString();\n\n if (current === value) {\n return;\n }\n\n view.dispatch({\n changes: { from: 0, to: current.length, insert: value },\n });\n }, [value]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: [\n readOnlyCompartmentRef.current.reconfigure(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.reconfigure(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ],\n });\n }, [ariaDescribedBy, ariaInvalid, ariaLabel, ariaLabelledBy, readOnly]);\n\n return (\n <div className={className ?? 'fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden'} ref={parentRef} />\n );\n}\n","import type { FormEvent, JSX } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowLeft, Eye, GraduationCapIcon, Info, LoaderCircle, PenLine, Plus, Trash2 } from 'lucide-react';\nimport Markdown, { type Components } from 'react-markdown';\nimport { Link, useNavigate, useParams } from 'react-router-dom';\nimport { useAuth } from '../../auth/auth-context';\nimport { useCanMutate } from '../../core/permissions';\nimport { useConfig } from '../../core/config/config-context';\nimport { MAX_SKILL_CONTENT_LENGTH } from './skill-limits';\nimport {\n Alert,\n AlertDescription,\n Badge,\n Button,\n Input,\n Label,\n PermissionTooltip,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Separator,\n SidebarTrigger,\n Skeleton,\n Tabs,\n TabsList,\n TabsTrigger,\n toast,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '../../ui';\nimport useSWR from 'swr';\nimport useSWRInfinite from 'swr/infinite';\nimport { createApiClient, fetcher, paths, type ApiClient } from './api';\nimport { MarkdownEditor } from './markdown-editor';\nimport { CatalogHeader } from './plugin-pages';\nimport type { AutomationVisibility, ProjectSpace, Skill, SkillInput, SkillsList } from './types';\n\nconst SKILLS_PAGE_SIZE = 25;\n\nconst SKILL_SKELETON_ROWS: { descriptionWidth: string; id: string; nameWidth: string }[] = [\n { descriptionWidth: 'fk:w-44', id: 'skill-a', nameWidth: 'fk:w-28' },\n { descriptionWidth: 'fk:w-52', id: 'skill-b', nameWidth: 'fk:w-20' },\n { descriptionWidth: 'fk:w-40', id: 'skill-c', nameWidth: 'fk:w-36' },\n { descriptionWidth: 'fk:w-48', id: 'skill-d', nameWidth: 'fk:w-24' },\n { descriptionWidth: 'fk:w-36', id: 'skill-e', nameWidth: 'fk:w-32' },\n { descriptionWidth: 'fk:w-56', id: 'skill-f', nameWidth: 'fk:w-16' },\n];\n\nfunction SkillListSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n <span className=\"fk:sr-only\">Loading skills</span>\n {SKILL_SKELETON_ROWS.map((row) => (\n <div className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:px-3 fk:py-2\" key={row.id}>\n <Skeleton className=\"fk:size-10 fk:shrink-0 fk:rounded-lg\" />\n <span className=\"fk:flex fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className={`fk:h-4 ${row.nameWidth}`} />\n <Skeleton className={`fk:h-4 ${row.descriptionWidth}`} />\n </span>\n </div>\n ))}\n </div>\n );\n}\n\nconst skillMarkdownComponents: Components = {\n code({ children, className, node: _node, ...props }) {\n const isFenced = typeof className === 'string' && className.split(' ').some((part) => part.startsWith('language-'));\n\n if (isFenced) {\n return (\n <code className={className} {...props}>\n {children}\n </code>\n );\n }\n\n return (\n <code\n className=\"fk:rounded fk:bg-muted fk:px-1.5 fk:py-0.5 fk:font-mono fk:text-[0.875em] fk:font-medium fk:before:content-none fk:after:content-none fk:corner-squircle\"\n {...props}\n >\n {children}\n </code>\n );\n },\n};\n\nfunction useProjectApi(): { api: ApiClient | null; projectId: string | undefined } {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n\n return { api, projectId: currentProjectId };\n}\n\nfunction PageMessage({ children }: { children: string }): JSX.Element {\n return (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-8 fk:text-center fk:text-sm fk:text-muted-foreground fk:corner-squircle\">\n {children}\n </div>\n );\n}\n\nfunction InfiniteScrollSentinel({ onVisible }: { onVisible: () => void }): JSX.Element {\n const sentinelRef = useRef<HTMLDivElement>(null);\n const onVisibleRef = useRef(onVisible);\n\n onVisibleRef.current = onVisible;\n\n useEffect(() => {\n const node = sentinelRef.current;\n\n if (!node) {\n return;\n }\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n onVisibleRef.current();\n }\n });\n\n observer.observe(node);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return <div aria-hidden className=\"fk:h-px\" ref={sentinelRef} />;\n}\n\nfunction getSkillVisibilityLabel(skill: Skill, spaceLabelById: Map<string, string>): string {\n if (skill.visibility === 'space') {\n return (skill.spaceId ? spaceLabelById.get(skill.spaceId) : undefined) ?? 'Space';\n }\n\n if (skill.visibility === 'personal') {\n return 'Personal';\n }\n\n return 'Project';\n}\n\nfunction SkillLogo({ skill }: { skill: Skill }): JSX.Element {\n if (skill.logoUrl) {\n return <img alt=\"\" className=\"fk:size-10 fk:shrink-0 fk:rounded-lg fk:corner-squircle\" src={skill.logoUrl} />;\n }\n\n return (\n <span className=\"fk:flex fk:size-10 fk:shrink-0 fk:items-center fk:justify-center fk:rounded-lg fk:bg-muted fk:text-muted-foreground fk:corner-squircle\">\n <GraduationCapIcon className=\"fk:size-5\" />\n </span>\n );\n}\n\nexport function SkillsPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n const [search, setSearch] = useState('');\n const canMutate = useCanMutate();\n const hasActiveFilters = search.trim().length > 0;\n\n const getSkillsKey = (pageIndex: number, previousPage: SkillsList | null): string | null => {\n if (!projectId) {\n return null;\n }\n\n if (previousPage && !previousPage.hasMore) {\n return null;\n }\n\n return paths(projectId).skills({\n limit: SKILLS_PAGE_SIZE,\n offset: pageIndex * SKILLS_PAGE_SIZE,\n search: search.trim() || undefined,\n });\n };\n const { data: skillPages, isLoading, setSize, size } = useSWRInfinite<SkillsList>(getSkillsKey, fetcher);\n const skills = skillPages?.flatMap((page) => page.skills) ?? [];\n const lastPage = skillPages?.[skillPages.length - 1];\n const hasMore = lastPage?.hasMore ?? false;\n const isLoadingMore = skillPages !== undefined && size > skillPages.length;\n const isInitialLoading = isLoading && skills.length === 0;\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to view skills.</PageMessage>;\n }\n\n function handleLoadMore(): void {\n void setSize((currentSize) => currentSize + 1);\n }\n\n let emptyMessage = 'No skills yet.';\n\n if (hasActiveFilters) {\n emptyMessage = 'No skills match your search.';\n }\n\n let content: JSX.Element = (\n <div className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n {skills.map((skill) => (\n <button\n key={skill.id}\n type=\"button\"\n onClick={() => navigate(skill.id)}\n className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:rounded-lg fk:px-3 fk:py-2 fk:text-left fk:transition-colors fk:hover:bg-accent fk:focus-visible:bg-accent fk:focus-visible:outline-none fk:corner-squircle\"\n >\n <SkillLogo skill={skill} />\n <span className=\"fk:min-w-0 fk:flex-1\">\n <span className=\"fk:block fk:truncate fk:text-sm fk:font-medium\">{skill.name}</span>\n <span className=\"fk:block fk:truncate fk:text-sm fk:text-muted-foreground\">{skill.description}</span>\n </span>\n </button>\n ))}\n </div>\n );\n\n if (isInitialLoading) {\n content = <SkillListSkeleton />;\n } else if (skills.length === 0) {\n content = (\n <Alert>\n <AlertDescription>{emptyMessage}</AlertDescription>\n </Alert>\n );\n }\n\n return (\n <main className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col\">\n <CatalogHeader />\n <div className=\"fk:min-h-0 fk:flex-1 fk:overflow-auto\">\n <div className=\"fk:mx-auto fk:flex fk:w-full fk:max-w-4xl fk:flex-col fk:gap-8 fk:py-6 fk:pl-4 fk:pr-6\">\n <div>\n <h2 className=\"fk:text-2xl fk:font-semibold\">Skills for your agents</h2>\n <p className=\"fk:mt-2 fk:text-muted-foreground\">\n Reusable Markdown instructions that agents load when relevant, or always when attached to an automation.\n </p>\n </div>\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-3\">\n <Input\n aria-label=\"Search skills\"\n className=\"fk:w-full fk:max-w-xs\"\n placeholder=\"Search skills…\"\n value={search}\n onChange={(event) => {\n void setSize(1);\n setSearch(event.target.value);\n }}\n />\n {canMutate ? (\n <Button asChild className=\"fk:ml-auto\" size=\"sm\">\n <Link to=\"new\">\n <Plus />\n New Skill\n </Link>\n </Button>\n ) : (\n <PermissionTooltip disabled>\n <Button className=\"fk:ml-auto\" disabled size=\"sm\">\n <Plus />\n New Skill\n </Button>\n </PermissionTooltip>\n )}\n </div>\n {content}\n {hasMore && !isLoadingMore ? <InfiniteScrollSentinel onVisible={handleLoadMore} /> : null}\n {isLoadingMore ? (\n <div className=\"fk:flex fk:items-center fk:justify-center fk:gap-2 fk:py-4 fk:text-sm fk:text-muted-foreground\">\n <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />\n <span>Loading more skills...</span>\n </div>\n ) : null}\n </div>\n </div>\n </main>\n );\n}\n\nfunction FieldError({ className, id, message }: { className?: string; id?: string; message: string }): JSX.Element {\n return (\n <p className={`fk:text-sm fk:text-destructive ${className ?? ''}`} id={id}>\n {message}\n </p>\n );\n}\n\nfunction FieldHintLabel({\n children,\n hint,\n htmlFor,\n id,\n}: {\n children: string;\n hint: string;\n htmlFor?: string;\n id?: string;\n}): JSX.Element {\n return (\n <div className=\"fk:mb-1.5 fk:pl-2.5 fk:flex fk:items-center fk:gap-1\">\n <Label htmlFor={htmlFor} id={id}>\n {children}\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={`About ${children.toLowerCase()}`}\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-xs\">{hint}</TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\nfunction SkillPageHeader({ actions, title }: { actions?: JSX.Element; title: string | JSX.Element }): JSX.Element {\n return (\n <>\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:gap-2 fk:pr-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarTrigger className=\"fk:-ml-1 fk:h-4 fk:w-4\" />\n </TooltipTrigger>\n <TooltipContent>Toggle Sidebar</TooltipContent>\n </Tooltip>\n <Separator orientation=\"vertical\" className=\"fk:h-4\" />\n <h1 className=\"fk:min-w-0 fk:flex-1 fk:truncate fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight\">\n {title}\n </h1>\n {actions}\n </div>\n <Button asChild className=\"fk:shrink-0 fk:w-fit\" size=\"sm\" variant=\"ghost\">\n <Link relative=\"path\" to=\"..\">\n <ArrowLeft className=\"fk:mr-2 fk:size-4\" />\n Skills\n </Link>\n </Button>\n </>\n );\n}\n\nfunction SkillDetailSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:overflow-hidden fk:pb-3\">\n <span className=\"fk:sr-only\">Loading skill</span>\n <SkillPageHeader actions={<Skeleton className=\"fk:h-8 fk:w-24\" />} title={<Skeleton className=\"fk:h-5 fk:w-40\" />} />\n <div className=\"fk:m-auto fk:flex fk:min-h-0 fk:w-full fk:max-w-6xl fk:flex-1 fk:flex-col fk:gap-8 fk:px-6\">\n <div className=\"fk:grid fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n {['name', 'description'].map((field) => (\n <div className=\"fk:flex fk:flex-col fk:gap-2\" key={field}>\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-full\" />\n </div>\n ))}\n <div className=\"fk:flex fk:flex-col fk:gap-2\">\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-32\" />\n </div>\n </div>\n <div className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className=\"fk:h-4 fk:w-16\" />\n <Skeleton className=\"fk:min-h-48 fk:flex-1 fk:rounded-md\" />\n </div>\n </div>\n </div>\n );\n}\n\nfunction SkillContentPane({\n content,\n onBlur,\n onChange,\n onSave,\n readOnly = false,\n showContentError,\n validationMessage,\n}: {\n content: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n readOnly?: boolean;\n showContentError?: boolean;\n validationMessage?: string;\n}): JSX.Element {\n const [viewMode, setViewMode] = useState<'preview' | 'write'>('write');\n const isOverLimit = content.length > MAX_SKILL_CONTENT_LENGTH;\n let preview: JSX.Element;\n\n if (content.trim()) {\n preview = <Markdown components={skillMarkdownComponents}>{content}</Markdown>;\n } else {\n preview = <p className=\"fk:text-muted-foreground\">Nothing to preview.</p>;\n }\n\n return (\n <div className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <div className=\"fk:pl-3.25 fk:flex fk:shrink-0 fk:items-center fk:gap-1\">\n <Label htmlFor=\"skill-content\" id=\"skill-content-label\">\n Content\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label=\"About skill content\"\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-sm\">\n The skill itself, in Markdown. Write it like instructions for a capable colleague: procedures, rules,\n examples, and edge cases. Attached skills are always loaded; other visible skills are loaded on demand.\n </TooltipContent>\n </Tooltip>\n </div>\n <div\n className={`fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:ml-0.75 fk:overflow-hidden fk:rounded-md fk:border ${showContentError ? 'fk:border-destructive' : ''} fk:corner-squircle`}\n >\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:justify-between fk:gap-2 fk:border-b fk:px-2.5 fk:py-1\">\n <Tabs\n value={viewMode}\n onValueChange={(value) => {\n setViewMode(value === 'preview' ? 'preview' : 'write');\n }}\n >\n <TabsList>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Write\" className=\"fk:px-2.5\" value=\"write\">\n <PenLine className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Write</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Preview\" className=\"fk:px-2.5\" value=\"preview\">\n <Eye className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Preview</TooltipContent>\n </Tooltip>\n </TabsList>\n </Tabs>\n <span className={isOverLimit ? 'fk:text-xs fk:text-destructive' : 'fk:text-xs fk:text-muted-foreground'}>\n {content.length.toLocaleString()} / {MAX_SKILL_CONTENT_LENGTH.toLocaleString()}\n </span>\n </div>\n <div className=\"fk:min-h-0 fk:min-w-0 fk:flex-1 fk:overflow-hidden\" hidden={viewMode !== 'write'}>\n <MarkdownEditor\n ariaDescribedBy={showContentError ? 'skill-content-error' : undefined}\n ariaInvalid={showContentError}\n ariaLabelledBy=\"skill-content-label\"\n className=\"fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden\"\n readOnly={readOnly}\n value={content}\n onBlur={onBlur}\n onChange={onChange}\n onSave={onSave}\n />\n </div>\n {viewMode === 'preview' ? (\n <ScrollArea className=\"fk:min-h-0 fk:flex-1\">\n <div className=\"fk:prose fk:prose-sm fk:dark:prose-invert fk:max-w-none fk:px-4 fk:py-3\">{preview}</div>\n </ScrollArea>\n ) : null}\n {showContentError && validationMessage ? (\n <FieldError className=\"fk:border-t fk:px-3 fk:py-2\" id=\"skill-content-error\" message={validationMessage} />\n ) : null}\n </div>\n </div>\n );\n}\n\ninterface SkillFormProps {\n api: ApiClient;\n mode: 'create' | 'edit';\n onSaved: (_skill?: Skill) => void;\n projectId: string;\n skill?: Skill;\n}\n\nexport function SkillForm({ api, mode, onSaved, projectId, skill }: SkillFormProps): JSX.Element {\n const [name, setName] = useState(skill?.name ?? '');\n const [description, setDescription] = useState(skill?.description ?? '');\n const [content, setContent] = useState(skill?.content ?? '');\n const [visibility, setVisibility] = useState<AutomationVisibility>(skill?.visibility ?? 'project');\n const [spaceId, setSpaceId] = useState<string | null>(skill?.spaceId ?? null);\n const [isSaving, setIsSaving] = useState(false);\n const isSavingRef = useRef(false);\n const [message, setMessage] = useState('');\n const [touched, setTouched] = useState({ content: false, description: false, name: false });\n const navigate = useNavigate();\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(paths(projectId).spaces, fetcher);\n const [, auth] = useAuth();\n const canMutate = useCanMutate();\n const userSpaceCodes = auth.user?.spaces ?? [];\n // Only spaces the caller belongs to are offered; the server rejects\n // bindings to spaces outside the caller's membership anyway.\n const selectableSpaces = (spacesData?.spaces ?? []).filter((space) => userSpaceCodes.includes(space.code));\n let contentError = '';\n\n if (!content.trim()) {\n contentError = 'Content is required';\n } else if (content.length > MAX_SKILL_CONTENT_LENGTH) {\n contentError = `Content must be at most ${String(MAX_SKILL_CONTENT_LENGTH)} characters`;\n }\n\n const validation = {\n content: contentError,\n description: description.trim() ? '' : 'Description is required',\n name: name.trim() ? '' : 'Name is required',\n space: visibility === 'space' && !spaceId ? 'Select a space' : '',\n };\n const isValid = !validation.content && !validation.description && !validation.name && !validation.space;\n const showNameError = touched.name && Boolean(validation.name);\n const showDescriptionError = touched.description && Boolean(validation.description);\n const showContentError = touched.content && Boolean(validation.content);\n const title = mode === 'create' ? 'New Skill' : (skill?.name ?? 'Skill');\n let saveLabel = 'Update skill';\n\n if (isSaving) {\n saveLabel = 'Saving...';\n } else if (mode === 'create') {\n saveLabel = 'Create skill';\n }\n\n async function save(): Promise<void> {\n if (!canMutate || isSavingRef.current) {\n return;\n }\n\n if (!isValid) {\n setTouched({ content: true, description: true, name: true });\n\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n const input: SkillInput = {\n content,\n description,\n name,\n spaceId: visibility === 'space' ? spaceId : null,\n visibility,\n };\n\n try {\n const result =\n mode === 'create' || !skill ? await api.createSkill(input) : await api.updateSkill(skill.id, input);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n toast.success(mode === 'create' || !skill ? 'Skill created.' : 'Skill saved.');\n onSaved(result.skill);\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to save skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>): Promise<void> {\n event.preventDefault();\n await save();\n }\n\n async function deleteSkill(): Promise<void> {\n if (!skill || !canMutate || isSavingRef.current) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n try {\n const result = await api.deleteSkill(skill.id);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to delete skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-3\">\n {!isValid ? (\n <span className=\"fk:text-xs fk:text-muted-foreground\">Complete the required fields to save</span>\n ) : null}\n {mode === 'edit' && skill ? (\n <Button disabled={isSaving || !canMutate} size=\"sm\" type=\"button\" variant=\"outline\" onClick={() => void deleteSkill()}>\n <Trash2 />\n Delete\n </Button>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button disabled={isSaving || !isValid || !canMutate} form=\"skill-editor-form\" size=\"sm\" type=\"submit\">\n {saveLabel}\n </Button>\n </PermissionTooltip>\n </div>\n }\n title={title}\n />\n {message ? (\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle\">\n {message}\n </div>\n ) : null}\n <form\n className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-6 fk:w-full fk:max-w-6xl fk:m-auto fk:gap-8 fk:px-4\"\n id=\"skill-editor-form\"\n onSubmit={(event) => void handleSubmit(event)}\n >\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:px-0.75 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n aria-describedby={showNameError ? 'skill-name-error' : undefined}\n aria-invalid={showNameError}\n className={showNameError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-name\"\n value={name}\n onBlur={() => setTouched((current) => ({ ...current, name: true }))}\n onChange={(event) => setName(event.target.value)}\n />\n {showNameError ? <FieldError id=\"skill-name-error\" message={validation.name} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n aria-describedby={showDescriptionError ? 'skill-description-error' : undefined}\n aria-invalid={showDescriptionError}\n className={showDescriptionError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={description}\n onBlur={() => setTouched((current) => ({ ...current, description: true }))}\n onChange={(event) => setDescription(event.target.value)}\n />\n {showDescriptionError ? <FieldError id=\"skill-description-error\" message={validation.description} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n value={visibility}\n onValueChange={(value) => {\n setVisibility(value === 'space' || value === 'personal' ? value : 'project');\n\n if (value !== 'space') {\n setSpaceId(null);\n }\n }}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={selectableSpaces.length === 0} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {visibility === 'space' ? (\n <Select\n value={spaceId ?? ''}\n onValueChange={(value) => {\n setSpaceId(value || null);\n }}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n {selectableSpaces.map((space) => (\n <SelectItem key={space.id} value={space.id}>\n {space.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n {visibility === 'space' && validation.space ? <FieldError message={validation.space} /> : null}\n </div>\n </div>\n <SkillContentPane\n content={content}\n showContentError={showContentError}\n validationMessage={validation.content}\n onBlur={() => setTouched((current) => ({ ...current, content: true }))}\n onChange={setContent}\n onSave={() => {\n void save();\n }}\n />\n </form>\n </div>\n );\n}\n\nfunction ReadOnlyCodeSkill({\n projectId,\n skill,\n spaceLabelById,\n}: {\n skill: Skill;\n projectId: string;\n spaceLabelById: Map<string, string>;\n}): JSX.Element {\n const canMutate = useCanMutate();\n const navigate = useNavigate();\n const [forking, setForking] = useState(false);\n const [forkError, setForkError] = useState('');\n\n async function fork(): Promise<void> {\n setForking(true);\n setForkError('');\n let response: Response;\n\n try {\n response = await fetch(`/api/flexkit/${projectId}/skills/${skill.id}/fork`, { method: 'POST', credentials: 'include' });\n } catch {\n setForkError('Unable to create a copy. Try again.');\n setForking(false);\n\n return;\n }\n\n setForking(false);\n\n if (!response.ok) {\n setForkError('Unable to create a copy. Check your permissions.');\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Badge variant=\"secondary\">{skill.source === 'plugin' ? 'Plugin' : 'Code'}</Badge>\n {skill.source === 'plugin' && <Button type=\"button\" disabled={forking || !canMutate} onClick={() => void fork()} size=\"sm\">Edit a copy</Button>}\n </div>\n }\n title={skill.name}\n />\n <div className=\"fk:flex fk:flex-col fk:h-full fk:px-4 fk:gap-3 fk:max-w-6xl fk:m-auto\">\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:bg-muted/30 fk:px-3 fk:py-2 fk:corner-squircle\">\n <p className=\"fk:text-sm fk:font-medium\">Version-controlled skill</p>\n <p className=\"fk:text-sm fk:text-muted-foreground\">\n {skill.source === 'plugin' ? 'This skill is managed by its plugin. Edit a copy to create a personal Studio skill.' : 'Edit this skill in your repository and re-sync it from the Custom Tools settings.'}\n </p>\n </div>\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-name\"\n value={skill.name}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={skill.description}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n disabled={true}\n value={skill.visibility}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26 fk:opacity-100!\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={!skill.spaceId} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {skill.visibility === 'space' ? (\n <Select\n disabled={true}\n value={skill.spaceId ?? ''}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34 fk:opacity-100!\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value={skill.spaceId ?? ''}>\n {getSkillVisibilityLabel(skill, spaceLabelById)}\n </SelectItem>\n </SelectContent>\n </Select>\n ) : null}\n </div>\n </div>\n </div>\n {forkError && <p role=\"alert\">{forkError}</p>}\n <SkillContentPane content={skill.content} readOnly />\n </div>\n </div>\n );\n}\n\nexport function CreateSkillPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to create skills.</PageMessage>;\n }\n\n return (\n <SkillForm api={api} mode=\"create\" projectId={projectId} onSaved={() => navigate('..', { relative: 'path' })} />\n );\n}\n\nexport function SkillDetailPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const { skillId } = useParams<{ skillId: string }>();\n const { data, error, isLoading, mutate } = useSWR<{ skill: Skill }>(\n projectId && skillId ? paths(projectId).skill(skillId) : null,\n fetcher\n );\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(projectId ? paths(projectId).spaces : null, fetcher);\n\n if (!projectId || !api || !skillId) {\n return <PageMessage>Select a skill.</PageMessage>;\n }\n\n if (error) {\n return <PageMessage>Failed to load skill.</PageMessage>;\n }\n\n if (isLoading || !data?.skill) {\n return <SkillDetailSkeleton />;\n }\n\n const spaceLabelById = new Map((spacesData?.spaces ?? []).map((space) => [space.id, space.label]));\n\n if (data.skill.source !== 'studio') {\n return <ReadOnlyCodeSkill projectId={projectId} skill={data.skill} spaceLabelById={spaceLabelById} />;\n }\n\n return (\n <SkillForm\n api={api}\n mode=\"edit\"\n projectId={projectId}\n skill={data.skill}\n onSaved={(skill) => {\n if (skill) {\n void mutate({ skill }, { revalidate: false });\n } else {\n void mutate();\n }\n }}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {ga,ha,ia,_,fa,$,ca,da,aa,ea,ja,f}from'./chunk-YCCFUGWJ.js';import {v as v$1,b as b$1}from'./chunk-32ZU4MLE.js';import'./chunk-HDOIOXMP.js';import {t}from'./chunk-SZEGGBOC.js';import'./chunk-U45E5X3H.js';import'./chunk-USNXQOMJ.js';import'./chunk-6NRQMG26.js';import'./chunk-O2QMYUPS.js';import {useMemo,useId,useState,useEffect}from'react';import {buildSpecFromParts,StateProvider,VisibilityProvider,ActionProvider,Renderer}from'@json-render/react';import {TrendingUpIcon,TrendingDownIcon,MinusIcon,InfoIcon,OctagonAlertIcon,AlertTriangleIcon,LightbulbIcon,XCircleIcon,CheckCircle2Icon}from'lucide-react';import {PieChart,Tooltip,Pie,Cell,LineChart,CartesianGrid,XAxis,YAxis,Line,BarChart,Bar,ResponsiveContainer}from'recharts';import {jsx,jsxs}from'react/jsx-runtime';var ke={sm:"fk:max-w-sm",md:"fk:max-w-md",lg:"fk:max-w-lg",full:"fk:max-w-full"},pe=({children:e,element:t})=>{let{props:n}=t,s=n.maxWidth?ke[n.maxWidth]:"",a=n.centered?"fk:mx-auto":"";return jsxs("div",{className:`fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:gap-2 fk:flex fk:flex-col ${s} ${a} ${n.className??""} fk:corner-squircle`,children:[n.title&&jsx("div",{className:"fk:text-sm fk:font-medium",children:n.title}),n.description&&jsx("div",{className:"fk:mt-0.5 fk:text-xs fk:text-muted-foreground",children:n.description}),(n.title??n.description)&&e?jsx("div",{className:"fk:mt-3"}):null,e]})},me={none:"fk:gap-0",sm:"fk:gap-2",md:"fk:gap-3",lg:"fk:gap-4",xl:"fk:gap-6"},ge={start:"fk:items-start",center:"fk:items-center",end:"fk:items-end",stretch:"fk:items-stretch"},he={start:"fk:justify-start",center:"fk:justify-center",end:"fk:justify-end",between:"fk:justify-between",around:"fk:justify-around"},be=({children:e,element:t})=>{let{props:n}=t,s=n.direction==="horizontal"?"fk:flex-row fk:flex-wrap":"fk:flex-col",a=me[n.gap??"md"],i=n.align?ge[n.align]:"",l=n.justify?he[n.justify]:"";return jsx("div",{className:`fk:flex fk:w-full ${s} ${a} ${i} ${l} ${n.className??""}`,children:e})},ve={1:"fk:grid-cols-1",2:"fk:grid-cols-2",3:"fk:grid-cols-3",4:"fk:grid-cols-4",5:"fk:grid-cols-5",6:"fk:grid-cols-6"},ye={sm:"fk:gap-2",md:"fk:gap-3",lg:"fk:gap-4",xl:"fk:gap-6"},xe=({children:e,element:t})=>{let{props:n}=t,s=ve[n.columns??1]??"fk:grid-cols-1",a=ye[n.gap??"md"];return jsx("div",{className:`fk:grid fk:w-full ${s} ${a} ${n.className??""}`,children:e})},Ce=({element:e})=>jsx(v$1,{orientation:e.props.orientation??"horizontal"}),Pe={h1:"fk:text-xl fk:font-semibold fk:tracking-tight",h2:"fk:text-lg fk:font-semibold fk:tracking-tight",h3:"fk:text-base fk:font-medium",h4:"fk:text-sm fk:font-medium"},we=({element:e})=>{let t=e.props.level??"h2";return jsx(t,{className:Pe[t],children:e.props.text})},Ne={body:"fk:text-sm",muted:"fk:text-sm fk:text-muted-foreground",caption:"fk:text-xs fk:text-muted-foreground",lead:"fk:text-base",code:"fk:rounded fk:bg-muted fk:px-1 fk:py-0.5 fk:font-mono fk:text-xs fk:corner-squircle"},Se=({element:e})=>jsx("p",{className:Ne[e.props.variant??"body"],children:e.props.text}),Te=({element:e})=>jsx(b$1,{variant:e.props.variant??"default",children:e.props.text});function Re({type:e}){switch(e){case "success":return jsx(CheckCircle2Icon,{className:"fk:size-4 fk:translate-y-0.5"});case "warning":return jsx(AlertTriangleIcon,{className:"fk:size-4 fk:translate-y-0.5"});case "error":return jsx(XCircleIcon,{className:"fk:size-4 fk:translate-y-0.5"});default:return jsx(InfoIcon,{className:"fk:size-4 fk:translate-y-0.5"})}}var Ae=({element:e})=>{let{props:t}=e,n=t.type==="error"?"fk:border-destructive/50 fk:text-destructive":"fk:text-foreground";return jsxs("div",{className:`fk:flex fk:w-full fk:gap-3 fk:rounded-lg fk:border fk:bg-card fk:px-4 fk:py-3 fk:text-sm ${n} fk:corner-squircle`,role:"alert",children:[jsx(Re,{type:t.type}),jsxs("div",{className:"fk:min-w-0",children:[jsx("div",{className:"fk:font-medium",children:t.title}),t.message&&jsx("div",{className:"fk:text-muted-foreground",children:t.message})]})]})},Le=({element:e})=>{let t=e.props.columns??[],n=(e.props.rows??[]).map(s=>s.map(String));return jsx("div",{className:"fk:w-full fk:overflow-hidden fk:rounded-md fk:mt-2 fk:corner-squircle",children:jsxs(_,{children:[e.props.caption&&jsx(fa,{children:e.props.caption}),jsx($,{children:jsx(ca,{children:t.map((s,a)=>jsx(da,{children:s},`${a.toString()}-${s}`))})}),jsx(aa,{children:n.map((s,a)=>jsx(ca,{children:s.map((i,l)=>jsx(ea,{children:i},l))},a))})]})})},ze=({element:e})=>{let{props:t}=e,n=t.max??100,s=n>0?Math.min(100,Math.max(0,t.value/n*100)):0;return jsxs("div",{className:"fk:w-full",children:[t.label&&jsxs("div",{className:"fk:mb-1 fk:flex fk:items-center fk:justify-between fk:text-xs fk:text-muted-foreground",children:[jsx("span",{children:t.label}),jsxs("span",{className:"fk:tabular-nums",children:[Math.round(s),"%"]})]}),jsx("div",{className:"fk:h-2 fk:w-full fk:overflow-hidden fk:rounded-full fk:bg-secondary fk:corner-squircle",children:jsx("div",{className:"fk:h-full fk:rounded-full fk:bg-primary fk:corner-squircle",style:{width:`${s.toString()}%`}})})]})},Ke=({element:e})=>jsx(t,{className:e.props.rounded?"fk:rounded-full fk:corner-squircle":"",style:{height:e.props.height??"1rem",width:e.props.width??"100%"}}),Me=({element:e})=>jsx(f,{href:e.props.href,children:e.props.label}),$e=({element:e})=>e.props.src?jsx("img",{alt:e.props.alt,className:"fk:max-w-full fk:rounded-md fk:corner-squircle",height:e.props.height??void 0,src:e.props.src,width:e.props.width??void 0}):null,Ie=({element:e})=>jsx("div",{className:"fk:w-full fk:divide-y fk:divide-border fk:rounded-md fk:border fk:border-border fk:corner-squircle",children:(e.props.items??[]).map((t,n)=>jsxs("details",{className:"fk:group fk:px-4 fk:py-3",children:[jsx("summary",{className:"fk:cursor-pointer fk:list-none fk:text-sm fk:font-medium",children:t.title}),jsx("p",{className:"fk:mt-2 fk:text-sm fk:text-muted-foreground",children:t.content})]},n))}),Ee=({children:e,element:t})=>{let n=t.props.tabs??[];return jsxs(ga,{defaultValue:t.props.value??t.props.defaultValue??n[0]?.value,children:[jsx(ha,{children:n.map(s=>jsx(ia,{value:s.value,children:s.label},s.value))}),e]})},qe=({children:e,element:t})=>jsx(ja,{value:t.props.value,children:e}),je={up:"fk:text-success",down:"fk:text-destructive",neutral:"fk:text-muted-foreground"};function Be({trend:e}){return e==="up"?jsx(TrendingUpIcon,{className:"fk:size-4"}):e==="down"?jsx(TrendingDownIcon,{className:"fk:size-4"}):jsx(MinusIcon,{className:"fk:size-4"})}var He=({element:e})=>{let{props:t}=e;return jsxs("div",{className:"fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:corner-squircle",children:[jsx("div",{className:"fk:text-xs fk:font-medium fk:text-muted-foreground",children:t.label}),jsxs("div",{className:"fk:mt-1 fk:flex fk:items-center fk:gap-2",children:[jsx("span",{className:"fk:text-2xl fk:font-semibold fk:tabular-nums fk:tracking-tight",children:t.value}),t.trend&&jsx("span",{className:je[t.trend],children:jsx(Be,{trend:t.trend})})]}),t.detail&&jsx("div",{className:"fk:mt-1 fk:text-xs fk:text-muted-foreground",children:t.detail})]})},Je={info:"fk:border-blue-500/30 fk:bg-blue-500/5 fk:text-blue-700 fk:dark:text-blue-400",tip:"fk:border-emerald-500/30 fk:bg-emerald-500/5 fk:text-emerald-700 fk:dark:text-emerald-400",warning:"fk:border-amber-500/30 fk:bg-amber-500/5 fk:text-amber-700 fk:dark:text-amber-400",important:"fk:border-red-500/30 fk:bg-red-500/5 fk:text-red-700 fk:dark:text-red-400"};function Xe({type:e}){switch(e){case "tip":return jsx(LightbulbIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"});case "warning":return jsx(AlertTriangleIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"});case "important":return jsx(OctagonAlertIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"});default:return jsx(InfoIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"})}}var Fe=({element:e})=>{let{props:t}=e,n=t.type??"info";return jsxs("div",{className:`fk:flex fk:w-full fk:gap-3 fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:text-sm ${Je[n]} fk:corner-squircle`,children:[jsx(Xe,{type:n}),jsxs("div",{className:"fk:min-w-0",children:[t.title&&jsx("div",{className:"fk:font-medium",children:t.title}),jsx("div",{className:"fk:text-foreground",children:t.content})]})]})},Oe={completed:"fk:border-success fk:bg-success",current:"fk:border-primary fk:bg-primary",upcoming:"fk:border-border fk:bg-background"},Ge=({element:e})=>jsx("div",{className:"fk:w-full",children:(e.props.items??[]).map((t,n,s)=>jsxs("div",{className:"fk:relative fk:flex fk:gap-3 fk:pb-4 fk:last:pb-0",children:[n<s.length-1&&jsx("div",{className:"fk:absolute fk:left-[5px] fk:top-4 fk:h-full fk:w-px fk:bg-border"}),jsx("div",{className:`fk:mt-1 fk:size-[11px] fk:shrink-0 fk:rounded-full fk:border-2 ${Oe[t.status??"upcoming"]} fk:corner-squircle`}),jsxs("div",{className:"fk:min-w-0",children:[jsxs("div",{className:"fk:flex fk:flex-wrap fk:items-baseline fk:gap-x-2",children:[jsx("span",{className:"fk:text-sm fk:font-medium",children:t.title}),t.date&&jsx("span",{className:"fk:text-xs fk:text-muted-foreground",children:t.date})]}),t.description&&jsx("div",{className:"fk:text-sm fk:text-muted-foreground",children:t.description})]})]},n))}),c=["#6366f1","#10b981","#f59e0b","#ef4444","#06b6d4"],b={background:"hsl(var(--background))",border:"1px solid hsl(var(--border))",borderRadius:6,color:"hsl(var(--foreground))",fontSize:12},v={color:"hsl(var(--foreground))"},y={color:"hsl(var(--foreground))"},u={fill:"hsl(var(--muted-foreground))",fontSize:11};function g(e){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:0}function X(e){let t=e.data??[];if(!e.aggregate)return t.map(s=>({x:String(s[e.xKey]??""),y:g(s[e.yKey])}));let n=new Map;for(let s of t){let a=String(s[e.xKey]??""),i=n.get(a)??{count:0,sum:0};i.count+=1,i.sum+=g(s[e.yKey]),n.set(a,i);}return Array.from(n.entries()).map(([s,a])=>e.aggregate==="count"?{x:s,y:a.count}:e.aggregate==="avg"?{x:s,y:a.count===0?0:a.sum/a.count}:{x:s,y:a.sum})}function x({children:e,height:t,title:n}){return jsxs("div",{className:"fk:w-full",children:[n&&jsx("div",{className:"fk:mb-2 fk:text-sm fk:font-medium",children:n}),jsx("div",{style:{height:t??256},children:jsx(ResponsiveContainer,{height:"100%",width:"100%",children:e})})]})}var We=({element:e})=>{let t=X(e.props),n=e.props.color??c[0];return jsx(x,{height:e.props.height,title:e.props.title,children:jsxs(BarChart,{data:t,children:[jsx(CartesianGrid,{stroke:"hsl(var(--border))",vertical:false}),jsx(XAxis,{axisLine:false,dataKey:"x",tick:u,tickLine:false,tickMargin:8}),jsx(YAxis,{axisLine:false,tick:u,tickLine:false,width:40}),jsx(Tooltip,{contentStyle:b,cursor:{fill:"hsl(var(--muted))"},itemStyle:v,labelStyle:y}),jsx(Bar,{dataKey:"y",fill:n,isAnimationActive:false,name:e.props.yKey,radius:4})]})})},_e=({element:e})=>{let t=X(e.props),n=e.props.color??c[0];return jsx(x,{height:e.props.height,title:e.props.title,children:jsxs(LineChart,{data:t,children:[jsx(CartesianGrid,{stroke:"hsl(var(--border))",vertical:false}),jsx(XAxis,{axisLine:false,dataKey:"x",tick:u,tickLine:false,tickMargin:8}),jsx(YAxis,{axisLine:false,tick:u,tickLine:false,width:40}),jsx(Tooltip,{contentStyle:b,itemStyle:v,labelStyle:y}),jsx(Line,{dataKey:"y",dot:false,isAnimationActive:false,name:e.props.yKey,stroke:n,strokeWidth:2,type:"monotone"})]})})},Ve=({element:e})=>{let t=(e.props.data??[]).map(n=>({name:String(n[e.props.nameKey]??""),value:g(n[e.props.valueKey])}));return jsx(x,{height:e.props.height,title:e.props.title,children:jsxs(PieChart,{children:[jsx(Tooltip,{contentStyle:b,itemStyle:v,labelStyle:y}),jsx(Pie,{data:t,dataKey:"value",innerRadius:"45%",isAnimationActive:false,nameKey:"name",children:t.map((n,s)=>jsx(Cell,{fill:c[s%c.length]},`${n.name}-${s.toString()}`))})]})})},De=({element:e})=>{let{chart:t$1,title:n}=e.props,s=useId().replace(/[^a-zA-Z0-9]/g,""),[a,i]=useState(null),[l,f]=useState(null);return useEffect(()=>{let k=false;return (async()=>{try{let{default:d}=await import('mermaid'),F=document.documentElement.classList.contains("dark");d.initialize({securityLevel:"strict",startOnLoad:!1,theme:F?"dark":"default"});let O=await d.render(`fk-mermaid-${s}`,t$1);k||(i(O.svg),f(null));}catch(d){k||f(d instanceof Error?d.message:"Failed to render the diagram.");}})(),()=>{k=true;}},[t$1,s]),jsxs("div",{className:"fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:corner-squircle",children:[n&&jsx("div",{className:"fk:mb-2 fk:text-sm fk:font-medium",children:n}),l?jsx("pre",{className:"fk:overflow-x-auto fk:whitespace-pre-wrap fk:text-xs fk:text-muted-foreground",children:t$1}):null,!l&&a?jsx("div",{className:"fk:flex fk:justify-center fk:overflow-x-auto",dangerouslySetInnerHTML:{__html:a}}):null,!l&&!a?jsx(t,{className:"fk:h-40 fk:w-full"}):null]})},Ue={Accordion:Ie,Alert:Ae,Badge:Te,BarChart:We,Callout:Fe,Card:pe,Grid:xe,Heading:we,Image:$e,LineChart:_e,Link:Me,Mermaid:De,Metric:He,PieChart:Ve,Progress:ze,Separator:Ce,Skeleton:Ke,Stack:be,TabContent:qe,Table:Le,Tabs:Ee,Text:Se,Timeline:Ge},Ye=({element:e})=>jsxs("div",{className:"fk:rounded-md fk:border fk:border-dashed fk:border-border fk:p-3 fk:text-sm fk:text-muted-foreground fk:corner-squircle",children:["Unsupported component: ",e.type]});function Ze(e,t){let n=new Set,s=[];for(let a of e??[]){let i=String(a);n.has(i)||!t[i]||(n.add(i),s.push(i));}return s}function Qe(e,t){return e.length!==t.length?true:t.some((n,s)=>n!==e[s])}function et(e){if(!e.elements[e.root])return null;let t=false,n={};for(let s of Object.keys(e.elements)){let a=e.elements[s];if(!a)continue;let i=a.children??[],l=Ze(i,e.elements),f=Qe(i,l);f&&(t=true),n[s]=f?{...a,children:l}:a;}return t?{...e,elements:n}:e}var tt="data-spec";function rt(e){let t=new Set,n=[];for(let s of e){if(s.type!==tt)continue;let a=s.data;if(a&&typeof a=="object"&&"type"in a&&a.type==="patch"&&"patch"in a){let i=JSON.stringify(a.patch);if(t.has(i))continue;t.add(i);}n.push(s);}return n}function ft({parts:e}){let t=useMemo(()=>{let s=buildSpecFromParts(rt(e));return s?et(s):null},[e]),n=useMemo(()=>JSON.stringify(t?.state??{}),[t]);return t?jsx(StateProvider,{initialState:t.state,children:jsx(VisibilityProvider,{children:jsx(ActionProvider,{children:jsx(Renderer,{fallback:Ye,registry:Ue,spec:t})})})},n):null}export{ft as RunSpecPart};//# sourceMappingURL=spec-renderer-EX7SCFWH.js.map
|
|
2
|
+
//# sourceMappingURL=spec-renderer-EX7SCFWH.js.map
|