bazilion 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +9 -15
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +22 -75
- package/dist/daemon.js.map +1 -1
- package/dist/web/client/assets/AgentTabs-B3hq5a3e.js +1 -0
- package/dist/web/client/assets/ConfigPage-BCwfgyjD.js +1 -0
- package/dist/web/client/assets/FieldRow-avAFLgYW.js +1 -0
- package/dist/web/client/assets/Page-CwNuDhWz.js +1 -0
- package/dist/web/client/assets/ProductionTeamPolicyEditor-CiQ-VVDo.js +7 -0
- package/dist/web/client/assets/{ProfileCommunicationEditor-D1OZ8WE5.js → ProfileCommunicationEditor-D84F5yfr.js} +1 -1
- package/dist/web/client/assets/SectionTabs-DZzy01az.js +1 -0
- package/dist/web/client/assets/TeamTabs-Btoe_FAE.js +1 -0
- package/dist/web/client/assets/TemplatesTabs-CAYY03F5.js +1 -0
- package/dist/web/client/assets/_id-BeauECmk.js +1 -0
- package/dist/web/client/assets/_id-BqU2BodK.js +1 -0
- package/dist/web/client/assets/_id-CKtoio3t.js +1 -0
- package/dist/web/client/assets/_id-Q98Of6k9.js +1 -0
- package/dist/web/client/assets/activity-DXN_N85w.js +1 -0
- package/dist/web/client/assets/agents-C5Xsdge1.js +1 -0
- package/dist/web/client/assets/agents-Cgxo4H5G.js +1 -0
- package/dist/web/client/assets/approvals-BnG7fbw-.js +1 -0
- package/dist/web/client/assets/chevron-down-BhcBspw3.js +1 -0
- package/dist/web/client/assets/config-xw4NyrXF.js +3 -0
- package/dist/web/client/assets/context-D2V1Oi4z.js +1 -0
- package/dist/web/client/assets/inbox-DK6hWCMp.js +1 -0
- package/dist/web/client/assets/index-VdURSoM4.js +12 -0
- package/dist/web/client/assets/login-CvptUoMR.js +1 -0
- package/dist/web/client/assets/mcp-BDFM_sW-.js +1 -0
- package/dist/web/client/assets/members-BJvph_TR.js +1 -0
- package/dist/web/client/assets/memory-DRytqZCD.js +1 -0
- package/dist/web/client/assets/plus-C9ee3SIO.js +1 -0
- package/dist/web/client/assets/policy-CGP50OtQ.js +1 -0
- package/dist/web/client/assets/preload-helper-mNuBjNXU.js +1 -0
- package/dist/web/client/assets/react-3W8R1pOO.js +1 -0
- package/dist/web/client/assets/routes-DJnWYvC9.js +1 -0
- package/dist/web/client/assets/services-DHheiv7L.js +1 -0
- package/dist/web/client/assets/skills-DmsitluU.js +1 -0
- package/dist/web/client/assets/styles-B5eQAwLP.css +2 -0
- package/dist/web/client/assets/team-policy-D0jpnn2b.js +1 -0
- package/dist/web/client/assets/teams-BdC4gthq.js +1 -0
- package/dist/web/client/assets/teams-CbxSaorm.js +1 -0
- package/dist/web/client/assets/telegram-D61G_alO.js +1 -0
- package/dist/web/client/assets/tokens-CjRplDrJ.js +1 -0
- package/dist/web/client/assets/triggers-MLzTm_DM.js +1 -0
- package/dist/web/client/assets/welcome-wBfX9dAd.js +1 -0
- package/dist/web/client/assets/{wire-constants-BY9Q9Z7d.js → wire-constants-BxfyUMXB.js} +2 -2
- package/dist/web/server/assets/{AgentTabs-BOjTN7QF.js → AgentTabs-DoMDJBXH.js} +10 -7
- package/dist/web/server/assets/{ChatPane-Dh3qxzdb.js → ChatPane-eUY_dga3.js} +15 -8
- package/dist/web/server/assets/ConfigPage-BKlh5vOU.js +68 -0
- package/dist/web/server/assets/{FieldRow-DwyqycWI.js → FieldRow-B4eTegH9.js} +5 -5
- package/dist/web/server/assets/Page-LENulSXY.js +111 -0
- package/dist/web/server/assets/{ProductionTeamPolicyEditor-Bke5doyl.js → ProductionTeamPolicyEditor-Y4mzFFvR.js} +4 -4
- package/dist/web/server/assets/SectionTabs-BJTPr5nU.js +8 -0
- package/dist/web/server/assets/{Sidebar-CGmtCnYU.js → Sidebar-O_CH1-JD.js} +228 -117
- package/dist/web/server/assets/{TeamTabs-BPxDBfqy.js → TeamTabs-zZzbP1t_.js} +9 -8
- package/dist/web/server/assets/{TemplatesTabs-zf4YhStd.js → TemplatesTabs-CcRxZhJe.js} +5 -4
- package/dist/web/server/assets/{_id-fpFQ9_Ya.js → _id-BhOB8Umi.js} +1 -1
- package/dist/web/server/assets/{_id-CCHA0gdR.js → _id-C3HY4lWg.js} +7 -10
- package/dist/web/server/assets/{_id-B6g9wmPR.js → _id-ClN9hY2x.js} +22 -28
- package/dist/web/server/assets/{_id-B04VaQlh.js → _id-CwyGjJeP.js} +2 -2
- package/dist/web/server/assets/{_id-_nFwi9gD.js → _id-D27T85mU.js} +1 -1
- package/dist/web/server/assets/{_id-5lLzLwcv.js → _id-D3Ap7zZA.js} +142 -144
- package/dist/web/server/assets/{_id-ButXHnRH.js → _id-DinTp_7X.js} +2 -2
- package/dist/web/server/assets/{_id-DdC9wpNN.js → _id-Dj1yZ3zJ.js} +2 -2
- package/dist/web/server/assets/{_id-DkFgCIb-.js → _id-DkYodSkG.js} +2 -2
- package/dist/web/server/assets/{_id-CUWgTqMS.js → _id-IzadFZV9.js} +1 -1
- package/dist/web/server/assets/{_id-C4AOhstq.js → _id-LrvXU4Nr.js} +6 -5
- package/dist/web/server/assets/{_id-DJkzwHjM.js → _id-tB47Vsfp.js} +1 -1
- package/dist/web/server/assets/{_tanstack-start-manifest_v-Div-TukY.js → _tanstack-start-manifest_v-D09Xu_6u.js} +95 -50
- package/dist/web/server/assets/{activity-C2ZKg1Q9.js → activity-BCI4mfNS.js} +28 -30
- package/dist/web/server/assets/{activity-DedraoFj.js → activity-D9SMqBhy.js} +2 -2
- package/dist/web/server/assets/{activity-GPx8NCeB.js → activity-DohitgwW.js} +1 -1
- package/dist/web/server/assets/{agents-BR2qXlXF.js → agents-BPKOshR5.js} +1 -1
- package/dist/web/server/assets/{agents-LHowEI6S.js → agents-BY74v7fM.js} +1 -1
- package/dist/web/server/assets/{agents-B8kinIPW.js → agents-BvttypqB.js} +2 -2
- package/dist/web/server/assets/{agents-Bp1nsVs2.js → agents-C9xlWK0Z.js} +2 -2
- package/dist/web/server/assets/agents-CgZMHj80.js +265 -0
- package/dist/web/server/assets/{agents-CUQmWhTp.js → agents-DZuFEj0D.js} +59 -77
- package/dist/web/server/assets/{approvals-VPc0YpLN.js → approvals-BGU-XGIO.js} +1 -1
- package/dist/web/server/assets/{approvals-Dw2LJoSA.js → approvals-CWcFHlor.js} +2 -2
- package/dist/web/server/assets/{approvals-DHgARzd8.js → approvals-DCaVw1Mz.js} +116 -78
- package/dist/web/server/assets/{auth-l-Vf8wlu.js → auth-byfSx6Ja.js} +1 -1
- package/dist/web/server/assets/{config-CHaCv89D.js → config-BDCJdtj2.js} +1 -1
- package/dist/web/server/assets/{config-BvKctDOX.js → config-D2LAsud2.js} +28 -49
- package/dist/web/server/assets/{config-QvHaxGlP.js → config-TeIoyYYc.js} +2 -2
- package/dist/web/server/assets/{context-5lrf2ame.js → context-B-XDf6Ym.js} +1 -1
- package/dist/web/server/assets/{context-D3Egm-vY.js → context-BXGo5Vfi.js} +2 -2
- package/dist/web/server/assets/context-DrkrIWun.js +47 -0
- package/dist/web/server/assets/{createServerRpc-CeKECg65.js → createServerRpc-pU-IQV2Y.js} +1 -1
- package/dist/web/server/assets/{createSsrRpc-ZBGxhl8t.js → createSsrRpc-DFsIAfFd.js} +1 -1
- package/dist/web/server/assets/{empty-plugin-adapters-DKUlnwwl.js → empty-plugin-adapters-Cq4--YW-.js} +1 -1
- package/dist/web/server/assets/{inbox-CkiSvD14.js → inbox-B3-TRsNI.js} +1 -1
- package/dist/web/server/assets/{inbox-Bxb3W04M.js → inbox-BardsGyy.js} +2 -2
- package/dist/web/server/assets/inbox-CUIyf9MT.js +131 -0
- package/dist/web/server/assets/login-Bx5LEyGP.js +118 -0
- package/dist/web/server/assets/login-CmWvxfTK.js +136 -0
- package/dist/web/server/assets/{mcp-BsFKEoXt.js → mcp-2pwT9HU8.js} +1 -1
- package/dist/web/server/assets/{mcp-BU_kKENi.js → mcp-BJjLIdP0.js} +105 -112
- package/dist/web/server/assets/{mcp-CKqwG4mt.js → mcp-DIWTogHM.js} +2 -2
- package/dist/web/server/assets/members-CCv17cjQ.js +46 -0
- package/dist/web/server/assets/{members-DlGBKZNl.js → members-CW5aBe81.js} +1 -1
- package/dist/web/server/assets/{members-ksELRsyk.js → members-VdPwD6CE.js} +2 -2
- package/dist/web/server/assets/{memory-CO0jKGzJ.js → memory-Dngc13Nw.js} +1 -1
- package/dist/web/server/assets/memory-a8Kz57Kh.js +287 -0
- package/dist/web/server/assets/{memory-B5moRnnp.js → memory-pZ4pZT7p.js} +2 -2
- package/dist/web/server/assets/{policy-Dxs78_GO.js → policy-Bb-vEgqg.js} +1 -1
- package/dist/web/server/assets/{policy-Dr55y-Mh.js → policy-BcGELcc9.js} +16 -22
- package/dist/web/server/assets/{policy-DNcGZLOB.js → policy-C30AeFIb.js} +2 -2
- package/dist/web/server/assets/{router-_izWQUeG.js → router-DIdp8ZNt.js} +100 -111
- package/dist/web/server/assets/{routes-BrTOoeth.js → routes-CXz4hTAr.js} +2 -2
- package/dist/web/server/assets/{routes-BSSKp3Rv.js → routes-Jb0zjKav.js} +16 -13
- package/dist/web/server/assets/{routes-DOj6ljcm.js → routes-lIclH9Br.js} +2 -2
- package/dist/web/server/assets/services-B9yBWDX0.js +79 -0
- package/dist/web/server/assets/{services-Pv_V88VA.js → services-C4szdhPx.js} +2 -2
- package/dist/web/server/assets/{services-DhRiNeq0.js → services-wG8I06oS.js} +1 -1
- package/dist/web/server/assets/skills-BZdqiDig.js +358 -0
- package/dist/web/server/assets/{skills-l2cyQ3zS.js → skills-C-UgkuCW.js} +2 -2
- package/dist/web/server/assets/{skills-CFIWVg32.js → skills-a9VSWHWq.js} +1 -1
- package/dist/web/server/assets/{start-DlHq0RaQ.js → start-WH8WzTL_.js} +1 -1
- package/dist/web/server/assets/{team-policy-Csvc5EDd.js → team-policy-vPG01onj.js} +3 -3
- package/dist/web/server/assets/{teams-B9O-WDH5.js → teams-CpQ0YgWf.js} +38 -34
- package/dist/web/server/assets/{teams-35Oprf6e.js → teams-DEpQR2QA.js} +2 -2
- package/dist/web/server/assets/{teams-DFkN7ic7.js → teams-DqfrEoH6.js} +1 -1
- package/dist/web/server/assets/{teams-B5IF65p2.js → teams-MjqgsmC3.js} +1 -1
- package/dist/web/server/assets/{teams-DH1CvWmT.js → teams-OIkHuxy1.js} +2 -2
- package/dist/web/server/assets/teams-jBtvnk59.js +193 -0
- package/dist/web/server/assets/{telegram-C9sQFwWj.js → telegram-7ub--6xz.js} +39 -51
- package/dist/web/server/assets/{telegram-mTnJCOmn.js → telegram-Bazhmpr4.js} +2 -2
- package/dist/web/server/assets/{telegram-BdaUIjvs.js → telegram-DNgCWebD.js} +1 -1
- package/dist/web/server/assets/{tokens-DdpnfV_Y.js → tokens-BnwFbV7T.js} +2 -2
- package/dist/web/server/assets/{tokens-BCz3PSoT.js → tokens-DPDMSN5O.js} +1 -1
- package/dist/web/server/assets/tokens-yyTSfBSN.js +186 -0
- package/dist/web/server/assets/{triggers-BzJG1nN5.js → triggers-BMpHsGIr.js} +5 -4
- package/dist/web/server/assets/{triggers-BcH_6PW1.js → triggers-C_0y6QV9.js} +1 -1
- package/dist/web/server/assets/{triggers-BcTTwMfy.js → triggers-Ca57_qym.js} +2 -2
- package/dist/web/server/assets/{welcome-CDGE2Sdk.js → welcome-IYHGurWx.js} +21 -13
- package/dist/web/server/server.js +82 -73
- package/dist/worker.js +5 -18
- package/dist/worker.js.map +1 -1
- package/package.json +4 -3
- package/dist/web/client/assets/AgentTabs-DioGqUVR.js +0 -1
- package/dist/web/client/assets/ConfigTabs-pY-V0Rie.js +0 -1
- package/dist/web/client/assets/FieldRow-DmwAFfbF.js +0 -1
- package/dist/web/client/assets/ProductionTeamPolicyEditor-1a5jQqUB.js +0 -7
- package/dist/web/client/assets/TeamTabs-BViZ4sti.js +0 -1
- package/dist/web/client/assets/TemplatesTabs-DVcY9pMD.js +0 -1
- package/dist/web/client/assets/_id-8P7brhGy.js +0 -1
- package/dist/web/client/assets/_id-C3o3MHq8.js +0 -1
- package/dist/web/client/assets/_id-DGRrSF1e.js +0 -1
- package/dist/web/client/assets/_id-KnJe-aW9.js +0 -1
- package/dist/web/client/assets/activity-WWvJSo4t.js +0 -1
- package/dist/web/client/assets/agents-C32T1voV.js +0 -1
- package/dist/web/client/assets/agents-nH4m4gZ1.js +0 -1
- package/dist/web/client/assets/approvals-l8jIZjqz.js +0 -1
- package/dist/web/client/assets/config-C7wvi1nR.js +0 -3
- package/dist/web/client/assets/context-BEGWE3RC.js +0 -1
- package/dist/web/client/assets/inbox--4aBaAgG.js +0 -1
- package/dist/web/client/assets/index-BCXoh1c8.js +0 -12
- package/dist/web/client/assets/login-Bk2wwIHQ.js +0 -1
- package/dist/web/client/assets/mcp-vM7xgh9e.js +0 -1
- package/dist/web/client/assets/members-cPKfnrSL.js +0 -1
- package/dist/web/client/assets/memory-BOcsaemD.js +0 -1
- package/dist/web/client/assets/policy-BGLCJYvS.js +0 -1
- package/dist/web/client/assets/preload-helper-eOOCz1Fu.js +0 -1
- package/dist/web/client/assets/routes-DnrP3dwv.js +0 -1
- package/dist/web/client/assets/services-C2_O3ifw.js +0 -1
- package/dist/web/client/assets/skills-B__fLZjx.js +0 -1
- package/dist/web/client/assets/styles-Dn24-ZvP.css +0 -2
- package/dist/web/client/assets/team-policy-BdX340m4.js +0 -1
- package/dist/web/client/assets/teams-DZMB4_iw.js +0 -1
- package/dist/web/client/assets/teams-rpaYKNIb.js +0 -1
- package/dist/web/client/assets/telegram-B1O4Ko0V.js +0 -1
- package/dist/web/client/assets/tokens-D7FH9VgA.js +0 -1
- package/dist/web/client/assets/triggers-3PLy2_Fo.js +0 -1
- package/dist/web/client/assets/welcome-B-QQobzq.js +0 -1
- package/dist/web/server/assets/ConfigTabs-CyuxzesF.js +0 -41
- package/dist/web/server/assets/agents-DU9Hqs58.js +0 -249
- package/dist/web/server/assets/context-CEr4-xiA.js +0 -49
- package/dist/web/server/assets/inbox-DU27iHv_.js +0 -133
- package/dist/web/server/assets/login-CNznncgA.js +0 -58
- package/dist/web/server/assets/login-CQybKk7Y.js +0 -74
- package/dist/web/server/assets/members-40DxRdVj.js +0 -48
- package/dist/web/server/assets/memory-CiTl4cN9.js +0 -289
- package/dist/web/server/assets/services-CHe4ihJk.js +0 -94
- package/dist/web/server/assets/skills-D89ND2kR.js +0 -321
- package/dist/web/server/assets/teams-zcm9XaQU.js +0 -174
- package/dist/web/server/assets/tokens-CkKqrtk-.js +0 -193
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-DGeXAQPT.js";import{A as t,E as n,O as r,T as i,k as a,w as o}from"./index-VdURSoM4.js";var s=r(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),c=r(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),l=e();function u(){let{error:e}=o.useSearch();return(0,l.jsxs)(`main`,{className:`relative flex min-h-dvh items-center overflow-hidden bg-cream px-5 py-16 sm:px-8`,children:[(0,l.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0`,style:{background:`radial-gradient(circle at 16% 12%, rgba(61,120,153,0.18), transparent 36rem), radial-gradient(circle at 88% 84%, rgba(196,135,138,0.13), transparent 32rem)`}}),(0,l.jsx)(`div`,{className:`absolute right-4 top-4 z-10 sm:right-6 sm:top-6`,children:(0,l.jsx)(i,{})}),(0,l.jsxs)(`div`,{className:`relative mx-auto grid w-full max-w-5xl items-center gap-10 lg:grid-cols-[minmax(0,1fr)_25rem] lg:gap-20`,children:[(0,l.jsxs)(`section`,{className:`hidden lg:block`,children:[(0,l.jsxs)(`div`,{className:`mb-8 flex items-center gap-3`,children:[(0,l.jsx)(t,{className:`h-12 w-12`}),(0,l.jsx)(`span`,{className:`font-display text-3xl tracking-[-0.03em] text-charcoal`,children:`bazilion`})]}),(0,l.jsx)(`h1`,{className:`max-w-xl text-[3.4rem] leading-[0.98] tracking-[-0.035em]`,children:`Your agents, working as one thoughtful team.`}),(0,l.jsx)(`p`,{className:`mt-6 max-w-lg text-base leading-7 text-mocha`,children:`A private workspace for long-lived agents, shared context, and communication policies you can actually see and control.`}),(0,l.jsxs)(`div`,{className:`mt-8 grid max-w-lg gap-3 sm:grid-cols-2`,children:[(0,l.jsx)(d,{icon:(0,l.jsx)(c,{className:`h-4 w-4`}),label:`Persistent conversations`}),(0,l.jsx)(d,{icon:(0,l.jsx)(n,{className:`h-4 w-4`}),label:`Team-owned context`})]})]}),(0,l.jsxs)(`section`,{className:`w-full rounded-[24px] border border-frost bg-snow/95 p-7 shadow-baziu-lg backdrop-blur sm:p-9`,children:[(0,l.jsxs)(`div`,{className:`mb-6 flex items-center gap-3 lg:hidden`,children:[(0,l.jsx)(t,{className:`h-10 w-10`}),(0,l.jsx)(`span`,{className:`font-display text-2xl text-charcoal`,children:`bazilion`})]}),(0,l.jsx)(`div`,{className:`mb-6 flex h-10 w-10 items-center justify-center rounded-xl bg-sapphire-glow text-sapphire`,children:(0,l.jsx)(s,{className:`h-5 w-5`,"aria-hidden":`true`})}),(0,l.jsx)(`h2`,{className:`font-display text-3xl text-charcoal`,children:`Welcome back`}),(0,l.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-mocha-light`,children:`Use the local access token created by your Bazilion daemon.`}),e&&(0,l.jsx)(`div`,{className:`err mt-5`,children:`That token was not accepted.`}),(0,l.jsxs)(`form`,{method:`POST`,action:`/api/login`,className:`mt-6 text-left`,children:[(0,l.jsx)(`label`,{htmlFor:`token`,className:`block text-[0.85em] font-semibold text-mocha`,children:`Access token`}),(0,l.jsx)(`input`,{type:`password`,id:`token`,name:`token`,autoFocus:!0,required:!0,placeholder:`Paste your token`,className:`mb-4`}),(0,l.jsx)(`button`,{type:`submit`,className:`w-full`,children:`Open Bazilion`})]}),(0,l.jsxs)(`p`,{className:`mt-5 rounded-xl bg-ivory px-3 py-2.5 text-[0.78em] leading-relaxed text-mocha-light`,children:[`Find it in `,(0,l.jsx)(`code`,{children:`~/.bazilion/auth.json`}),`, created the first time you run`,` `,(0,l.jsx)(`code`,{children:`bazilion serve`}),`.`]})]})]}),(0,l.jsxs)(`footer`,{className:`absolute bottom-4 left-0 right-0 text-center text-[0.75em] text-fawn`,children:[`dedicated to Baziu`,(0,l.jsx)(a,{className:`ml-1 inline-block h-3 w-3 align-[-1px] opacity-40`})]})]})}function d({icon:e,label:t}){return(0,l.jsxs)(`div`,{className:`flex items-center gap-2 rounded-xl border border-frost bg-snow/70 px-3 py-2.5 text-sm font-semibold text-mocha shadow-baziu-sm`,children:[(0,l.jsx)(`span`,{className:`text-sapphire`,children:e}),t]})}export{u as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{h as i}from"./index-VdURSoM4.js";import{t as a}from"./ConfigPage-BCwfgyjD.js";var o=e(n()),s=t(),c=[`stdio`,`http`,`sse`];function l(){let{servers:e}=i.useLoaderData(),t=r(),[n,l]=(0,o.useState)(``),[u,d]=(0,o.useState)(`stdio`),[f,p]=(0,o.useState)(``),[m,h]=(0,o.useState)(``),[g,_]=(0,o.useState)(``),[v,y]=(0,o.useState)(``),[b,x]=(0,o.useState)(null),[S,C]=(0,o.useState)(!1),[w,T]=(0,o.useState)({});async function E(e){e.preventDefault(),x(null),C(!0);try{let e={name:n,transport:u,command:u===`stdio`?f:null,args:u===`stdio`?m.split(` `).filter(Boolean):[],url:u===`stdio`?null:g,authToken:v||void 0},r=await fetch(`/api/mcp-servers`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`${r.status} ${r.statusText}`)}l(``),p(``),h(``),_(``),y(``),await t.invalidate()}catch(e){x(e.message)}finally{C(!1)}}async function D(e){await fetch(`/api/mcp-servers/${e.id}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:!e.enabled})}),await t.invalidate()}async function O(e){await fetch(`/api/mcp-servers/${e}`,{method:`DELETE`}),await t.invalidate()}async function k(e){T(t=>({...t,[e]:`connecting…`}));let t=await(await fetch(`/api/mcp-servers/${e}/test`,{method:`POST`})).json().catch(()=>({}));T(n=>({...n,[e]:t.ok?`✓ ${t.tools?.length??0} tools: ${(t.tools??[]).map(e=>e.name).join(`, `)}`:`✗ ${t.error??`failed`}`}))}return(0,s.jsxs)(a,{active:`mcp`,title:`MCP servers`,description:(0,s.jsxs)(s.Fragment,{children:[`Expose tools from local or remote Model Context Protocol servers to every agent under the `,(0,s.jsx)(`code`,{className:`font-mono`,children:`mcp__<server>__<tool>`}),` namespace. Local stdio servers inherit configured secrets; HTTP and SSE servers can use a bearer token.`]}),children:[(0,s.jsxs)(`section`,{className:`rounded-lg border bg-card p-5`,children:[(0,s.jsx)(`h3`,{className:`font-serif text-xl mb-3`,children:`Add a server`}),(0,s.jsxs)(`form`,{onSubmit:E,className:`space-y-3`,children:[(0,s.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-end`,children:[(0,s.jsxs)(`label`,{className:`w-full text-sm sm:w-auto`,children:[`Name`,(0,s.jsx)(`input`,{type:`text`,value:n,onChange:e=>l(e.target.value),required:!0,placeholder:`playwright`,pattern:`[a-zA-Z0-9_]+`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 text-sm sm:w-48`})]}),(0,s.jsxs)(`label`,{className:`w-full text-sm sm:w-auto`,children:[`Transport`,(0,s.jsx)(`select`,{value:u,onChange:e=>d(e.target.value),className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 text-sm`,children:c.map(e=>(0,s.jsx)(`option`,{value:e,children:e},e))})]})]}),u===`stdio`?(0,s.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-end`,children:[(0,s.jsxs)(`label`,{className:`w-full text-sm sm:w-auto`,children:[`Command`,(0,s.jsx)(`input`,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`npx`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 text-sm sm:w-48`})]}),(0,s.jsxs)(`label`,{className:`w-full min-w-0 text-sm sm:flex-1`,children:[`Args (space-separated)`,(0,s.jsx)(`input`,{type:`text`,value:m,onChange:e=>h(e.target.value),placeholder:`-y @modelcontextprotocol/server-filesystem /tmp`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-full`})]})]}):(0,s.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-end`,children:[(0,s.jsxs)(`label`,{className:`w-full min-w-0 text-sm sm:flex-1`,children:[`URL`,(0,s.jsx)(`input`,{type:`url`,value:g,onChange:e=>_(e.target.value),placeholder:`https://mcp.example.com/sse`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-full`})]}),(0,s.jsxs)(`label`,{className:`w-full text-sm sm:w-auto`,children:[`Bearer token (optional)`,(0,s.jsx)(`input`,{type:`password`,value:v,onChange:e=>y(e.target.value),autoComplete:`off`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 text-sm sm:w-56`})]})]}),(0,s.jsx)(`button`,{type:`submit`,disabled:S,className:`w-full rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50 sm:w-auto`,children:S?`adding…`:`add server`}),b&&(0,s.jsx)(`p`,{className:`text-sm text-danger`,children:b})]})]}),(0,s.jsx)(`div`,{className:`overflow-x-auto`,children:(0,s.jsxs)(`table`,{className:`w-full min-w-[720px] text-sm`,children:[(0,s.jsx)(`thead`,{className:`text-left text-muted-foreground border-b`,children:(0,s.jsxs)(`tr`,{children:[(0,s.jsx)(`th`,{className:`py-2`,children:`name`}),(0,s.jsx)(`th`,{children:`transport`}),(0,s.jsx)(`th`,{children:`target`}),(0,s.jsx)(`th`,{children:`state`}),(0,s.jsx)(`th`,{})]})}),(0,s.jsxs)(`tbody`,{children:[e.length===0&&(0,s.jsx)(`tr`,{children:(0,s.jsx)(`td`,{colSpan:5,className:`py-6 text-center text-muted-foreground italic`,children:`no MCP servers yet — add one above`})}),e.map(e=>(0,s.jsxs)(`tr`,{className:`border-b last:border-0 align-top`,children:[(0,s.jsxs)(`td`,{className:`py-2`,children:[e.name,e.hasAuthToken&&(0,s.jsx)(`span`,{className:`ml-2 text-[0.7em] uppercase tracking-wide text-muted-foreground`,children:`auth`}),w[e.id]&&(0,s.jsx)(`div`,{className:`text-xs text-muted-foreground mt-1 break-all`,children:w[e.id]})]}),(0,s.jsx)(`td`,{children:e.transport}),(0,s.jsx)(`td`,{className:`font-mono text-xs break-all`,children:e.transport===`stdio`?`${e.command??``} ${e.args.join(` `)}`.trim():e.url}),(0,s.jsx)(`td`,{children:e.enabled?(0,s.jsx)(`span`,{className:`text-success`,children:`enabled`}):(0,s.jsx)(`span`,{className:`text-muted-foreground`,children:`disabled`})}),(0,s.jsxs)(`td`,{className:`space-x-2 whitespace-nowrap`,children:[(0,s.jsx)(`button`,{type:`button`,onClick:()=>k(e.id),className:`rounded-md border px-2 py-1 text-xs hover:bg-accent`,children:`test`}),(0,s.jsx)(`button`,{type:`button`,onClick:()=>D(e),className:`rounded-md border px-2 py-1 text-xs hover:bg-accent`,children:e.enabled?`disable`:`enable`}),(0,s.jsx)(`button`,{type:`button`,onClick:()=>O(e.id),className:`rounded-md border px-2 py-1 text-xs text-danger hover:bg-danger/10`,children:`delete`})]})]},e.id))]})]})})]})}export{l as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-DGeXAQPT.js";import{c as t}from"./index-VdURSoM4.js";import{r as n}from"./Page-CwNuDhWz.js";import{t as r}from"./TeamTabs-Btoe_FAE.js";var i=e();function a(){let e=t.useLoaderData(),{id:a}=t.useParams();return(0,i.jsxs)(n,{children:[(0,i.jsx)(`h1`,{children:`Team members`}),(0,i.jsxs)(`p`,{className:`muted`,children:[(0,i.jsx)(`code`,{children:`agents.team_id`}),` is the only live-membership authority.`]}),(0,i.jsx)(r,{teamId:a}),(0,i.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-frost`,children:(0,i.jsxs)(`table`,{className:`w-full`,children:[(0,i.jsx)(`thead`,{children:(0,i.jsxs)(`tr`,{children:[(0,i.jsx)(`th`,{children:`agent`}),(0,i.jsx)(`th`,{children:`status`}),(0,i.jsx)(`th`,{children:`agent template`}),(0,i.jsx)(`th`,{children:`source slot`})]})}),(0,i.jsxs)(`tbody`,{children:[e.members.map(t=>{let n=e.bindings.find(e=>e.agentId===t.id);return(0,i.jsxs)(`tr`,{children:[(0,i.jsx)(`td`,{children:(0,i.jsx)(`a`,{href:`/agents/${t.id}`,children:t.name})}),(0,i.jsx)(`td`,{children:t.status}),(0,i.jsx)(`td`,{children:t.profileId}),(0,i.jsx)(`td`,{children:(0,i.jsx)(`code`,{children:n?.sourceSlotId??`live-only`})})]},t.id)}),e.members.length===0&&(0,i.jsx)(`tr`,{children:(0,i.jsx)(`td`,{colSpan:4,className:`muted`,children:`No agents belong to this team.`})})]})]})})]})}export{a as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{l as r}from"./index-VdURSoM4.js";import{r as i}from"./Page-CwNuDhWz.js";import{t as a}from"./TeamTabs-Btoe_FAE.js";var o=e(n()),s=t();function c(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}function l(){let{team:e,memberCount:t,entries:n}=r.useLoaderData(),l=e.id,[u,d]=(0,o.useState)(()=>n.map(e=>({key:e.key,preview:e.content.slice(0,80)}))),[f,p]=(0,o.useState)(!1),[m,h]=(0,o.useState)(``),[g,_]=(0,o.useState)(null),[v,y]=(0,o.useState)(`none`),[b,x]=(0,o.useState)(``),[S,C]=(0,o.useState)(``),[w,T]=(0,o.useState)(null),E=(0,o.useRef)(null);async function D(e){try{let t=e.trim().length>0?`/api/teams/${encodeURIComponent(l)}/memory/search?q=${encodeURIComponent(e)}&limit=50`:`/api/teams/${encodeURIComponent(l)}/memory`,n=await fetch(t);if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error??n.statusText)}let r=await n.json();e.trim().length>0?(d(r.map(e=>({key:e.key,preview:e.snippet,score:e.score}))),p(!0)):(d(r.map(e=>({key:e.key,preview:e.content.slice(0,80)}))),p(!1))}catch(e){T({msg:`error: ${e.message}`,kind:`error`})}}(0,o.useEffect)(()=>(E.current&&clearTimeout(E.current),E.current=setTimeout(()=>{D(m)},200),()=>{E.current&&clearTimeout(E.current)}),[m]);async function O(e){_(e),y(`edit`),T({msg:`loading…`,kind:`info`});try{let t=await fetch(`/api/teams/${encodeURIComponent(l)}/memory/${c(e)}`);if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??t.statusText)}let n=await t.json();x(n.key),C(n.content??``),T({msg:`loaded ${n.key}`,kind:`info`})}catch(e){T({msg:`error: ${e.message}`,kind:`error`})}}function k(){_(null),y(`new`),x(``),C(``),T({msg:`new entry — type a key and content, then save`,kind:`info`})}async function A(){let e=b.trim();if(!e){T({msg:`key is required`,kind:`error`});return}try{let t=await fetch(`/api/teams/${encodeURIComponent(l)}/memory/${c(e)}`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({content:S})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??t.statusText)}_(e),y(`edit`),T({msg:`saved`,kind:`info`}),await D(m)}catch(e){T({msg:`error: ${e.message}`,kind:`error`})}}async function j(){if(g&&confirm(`delete ${g}?`))try{let e=await fetch(`/api/teams/${encodeURIComponent(l)}/memory/${c(g)}`,{method:`DELETE`});if(!e.ok&&e.status!==204){let t=await e.json().catch(()=>null);throw Error(t?.error??e.statusText)}_(null),y(`none`),x(``),C(``),T({msg:`deleted`,kind:`info`}),await D(m)}catch(e){T({msg:`error: ${e.message}`,kind:`error`})}}let M=v!==`none`&&b.trim().length>0,N=v===`edit`&&g!==null;return(0,s.jsxs)(i,{children:[(0,s.jsxs)(`header`,{className:`mb-6`,children:[(0,s.jsxs)(`h1`,{className:`font-serif text-3xl text-foreground`,children:[e.name,` `,(0,s.jsx)(`span`,{className:`text-muted-foreground text-base`,children:`/ Shared memory`})]}),(0,s.jsxs)(`p`,{className:`text-muted-foreground text-sm mt-1`,children:[`BM25-indexed markdown notes shared by every agent in`,` `,(0,s.jsx)(`a`,{href:`/teams/${encodeURIComponent(e.id)}`,className:`font-mono underline`,children:e.id}),` `,`(`,t,` member`,t===1?``:`s`,`). Anything written here is visible to every member; per-agent notes belong in the agent's own`,` `,(0,s.jsx)(`code`,{className:`font-mono`,children:`IDENTITY.md`}),` via `,(0,s.jsx)(`code`,{children:`home_write`}),`.`]})]}),(0,s.jsx)(a,{teamId:e.id}),(0,s.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-[320px_1fr]`,children:[(0,s.jsxs)(`div`,{children:[(0,s.jsxs)(`div`,{className:`overflow-hidden rounded-[16px] border border-frost bg-snow`,children:[(0,s.jsx)(`div`,{className:`border-b border-frost p-2`,children:(0,s.jsx)(`input`,{type:`text`,placeholder:`search (BM25)...`,autoComplete:`off`,value:m,onChange:e=>h(e.target.value)})}),(0,s.jsx)(`div`,{className:`max-h-[520px] overflow-y-auto`,children:u.length===0?(0,s.jsx)(`div`,{className:`p-8 text-center text-mocha-light`,children:`no entries`}):u.map(e=>(0,s.jsxs)(`button`,{type:`button`,onClick:()=>O(e.key),className:`unstyled block w-full cursor-pointer border-b border-frost/50 px-3.5 py-2 text-left font-mono text-[0.84em] transition-colors last:border-b-0 hover:bg-sapphire-glow ${e.key===g?`bg-sapphire-glow font-medium text-sapphire-deep`:``}`,children:[f&&e.score!==void 0&&(0,s.jsx)(`span`,{className:`float-right text-[0.75em] text-sapphire`,children:e.score.toFixed(2)}),e.key,e.preview&&(0,s.jsx)(`span`,{className:`mt-1 block text-[0.9em] font-normal text-mocha-light`,children:e.preview})]},e.key))})]}),(0,s.jsx)(`button`,{type:`button`,className:`ghost-btn mt-3 w-full`,onClick:k,children:`+ new entry`})]}),(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`div`,{className:`mb-3 flex items-center gap-2`,children:(0,s.jsx)(`input`,{type:`text`,placeholder:`key (e.g. prefs/hiking.md)`,value:b,onChange:e=>x(e.target.value),disabled:v!==`new`,className:`flex-1 font-mono`})}),(0,s.jsx)(`textarea`,{placeholder:`select an entry on the left, or create a new one.`,value:S,onChange:e=>C(e.target.value),className:`min-h-[360px] w-full font-mono text-[0.9em] leading-[1.55]`}),(0,s.jsxs)(`div`,{className:`mt-3 flex gap-2`,children:[(0,s.jsx)(`button`,{type:`button`,className:`btn-primary`,onClick:A,disabled:!M,children:`save`}),(0,s.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:j,disabled:!N,children:`delete`})]}),w&&(0,s.jsx)(`p`,{className:`mt-2 text-[0.9em] ${w.kind===`error`?`text-danger`:`text-mocha-light`}`,children:w.msg})]})]})]})}export{l as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{O as e}from"./index-VdURSoM4.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{n as r,t as i}from"./ProductionTeamPolicyEditor-CiQ-VVDo.js";import{O as a,u as o}from"./index-VdURSoM4.js";import{r as s}from"./Page-CwNuDhWz.js";import{t as c}from"./Button-ByiV6fpd.js";import{t as l}from"./RecoveryState-QfMSuwy3.js";import{t as u}from"./TeamTabs-Btoe_FAE.js";var d=a(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),f=a(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),p=e(n(),1),m=t();function h({teamId:e,detail:t,templates:n}){let[i,a]=(0,p.useState)(null),[o,s]=(0,p.useState)(null),[l,u]=(0,p.useState)(!1),[h,v]=(0,p.useState)(`${e}-snapshot`),[y,b]=(0,p.useState)(`${e} snapshot`),x=(0,p.useMemo)(()=>new Set(t.bindings.map(e=>e.agentId)),[t.bindings]),S=t.members.filter(e=>!x.has(e.id)),C=async()=>{let t=await fetch(`/api/teams/${encodeURIComponent(e)}/policy/diff`);if(!t.ok)throw Error((await t.json().catch(()=>null))?.error??`Could not load source comparison`);a(await t.json())};return(0,p.useEffect)(()=>{C().catch(e=>s(e instanceof Error?e.message:String(e)))},[e]),(0,m.jsxs)(`section`,{className:`card space-y-4`,"aria-labelledby":`source-workflows`,children:[(0,m.jsxs)(`div`,{className:`flex flex-wrap items-start gap-3`,children:[(0,m.jsx)(d,{className:`mt-1 h-5 w-5 text-sapphire`}),(0,m.jsxs)(`div`,{className:`mr-auto`,children:[(0,m.jsx)(`h2`,{id:`source-workflows`,className:`m-0 text-lg`,children:`Baseline and source`}),(0,m.jsx)(`p`,{className:`muted mt-1 text-sm`,children:`Lineage is retained for comparison; source edits never auto-propagate.`})]}),(0,m.jsxs)(c,{variant:`ghost`,onClick:()=>void C(),children:[(0,m.jsx)(f,{className:`h-4 w-4`}),`Refresh comparison`]})]}),i?(0,m.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,m.jsx)(g,{label:`Baseline`,value:i.baseline?`${i.baseline.templateId} r${i.baseline.templateRevision}`:`None`}),(0,m.jsx)(g,{label:`Live changes`,value:`+${i.comparison.addedSinceBaseline.length} / −${i.comparison.removedSinceBaseline.length} edges`}),(0,m.jsx)(g,{label:`Source slots`,value:`+${i.comparison.currentSourceAddedSlotIds.length} / −${i.comparison.currentSourceRemovedSlotIds.length}`}),(0,m.jsx)(g,{label:`Source state`,value:i.currentSource?i.sourceDiverged?`Diverged — rebaseline required`:`Aligned`:`Missing/tombstoned`,warning:i.sourceDiverged||!i.currentSource})]}):(0,m.jsx)(`p`,{className:`muted`,children:`Loading comparison…`}),i?.sourceDiverged&&(0,m.jsx)(`div`,{role:`alert`,className:`rounded-md border border-warning/25 bg-warning/10 p-3 text-sm text-warning`,children:`The source has changed since this Team retained its baseline. Both versions remain intact. Update-source is disabled; compare and explicitly rebaseline instead.`}),i?.currentSource&&!i.sourceDiverged&&(0,m.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,m.jsxs)(`p`,{className:`mr-auto text-sm`,children:[`Promote the current live policy to `,(0,m.jsx)(`strong`,{children:i.currentSource.template.name}),`, including `,S.length,` live-only Agent`,S.length===1?``:`s`,`.`]}),(0,m.jsx)(c,{variant:`ghost`,disabled:l,onClick:async()=>{if(!(!i?.currentSource||i.sourceDiverged)){u(!0),s(null);try{let n=await fetch(`/api/teams/${encodeURIComponent(e)}/policy/update-source`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({teamExpectedRevision:t.teamPolicy.revision,templateExpectedRevision:i.currentSource.template.currentRevision,includeAgentIds:S.map(e=>e.id)})});if(!n.ok)throw Error((await n.json().catch(()=>null))?.error??`Update failed (${n.status})`);window.location.reload()}catch(e){s(e instanceof Error?e.message:String(e))}finally{u(!1)}}},children:`Update source after review`})]}),(0,m.jsxs)(`div`,{className:`grid gap-3 border-t border-frost pt-4 sm:grid-cols-[1fr_1fr_auto]`,children:[(0,m.jsxs)(`label`,{className:`text-xs`,children:[`New template ID`,(0,m.jsx)(`input`,{value:h,onChange:e=>v(e.target.value)})]}),(0,m.jsxs)(`label`,{className:`text-xs`,children:[`New template name`,(0,m.jsx)(`input`,{value:y,onChange:e=>b(e.target.value)})]}),(0,m.jsxs)(c,{variant:`primary`,disabled:l||!h.trim()||!y.trim(),onClick:async()=>{u(!0),s(null);try{let n=await fetch(`/api/teams/${encodeURIComponent(e)}/policy/save-as-template`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({expectedRevision:t.teamPolicy.revision,id:h,name:y})});if(!n.ok)throw Error((await n.json().catch(()=>null))?.error??`Save failed (${n.status})`);let r=await n.json();window.location.assign(`/templates/teams/${encodeURIComponent(r.template.id)}`)}catch(e){s(e instanceof Error?e.message:String(e))}finally{u(!1)}},children:[(0,m.jsx)(r,{className:`h-4 w-4`}),`Save independent Team template`]})]}),o&&(0,m.jsx)(`p`,{role:`alert`,className:`err`,children:o}),(0,m.jsx)(_,{teamId:e,detail:t,templates:n})]})}function g({label:e,value:t,warning:n=!1}){return(0,m.jsxs)(`div`,{className:`rounded-md border p-3 ${n?`border-warning/25 bg-warning/10 dark:bg-amber-950/30`:`border-frost bg-ivory`}`,children:[(0,m.jsx)(`dt`,{className:`text-xs font-semibold uppercase text-mocha-light`,children:e}),(0,m.jsx)(`dd`,{className:`mt-1 break-words text-sm font-semibold`,children:t})]})}function _({teamId:e,detail:t,templates:n}){let[r,i]=(0,p.useState)(n.find(e=>!e.deletedAt)?.id??``),[a,o]=(0,p.useState)(null),[s,l]=(0,p.useState)({}),[u,d]=(0,p.useState)({}),[f,h]=(0,p.useState)(null),[g,_]=(0,p.useState)(null),v=async()=>{_(null),h(null);let e=await fetch(`/api/team-templates/${encodeURIComponent(r)}`);if(!e.ok){_(`Could not load Team (${e.status})`);return}let n=await e.json();o(n);let i={};n.slots.forEach((e,n)=>{let r=t.members[n];r&&(i[e.slotId]=r.id)}),l(i);let a=new Set(Object.values(i));d(Object.fromEntries(t.members.filter(e=>!a.has(e.id)).map(e=>[e.id,`isolated`])))},y=()=>({teamExpectedRevision:t.teamPolicy.revision,templateId:a?.template.id,templateExpectedRevision:a?.template.currentRevision,slotMappings:a?.slots.map(e=>({slotId:e.slotId,agentId:s[e.slotId]}))??[],remainingPlacements:t.members.filter(e=>!Object.values(s).includes(e.id)).map(e=>({agentId:e.id,placement:u[e.id]??`isolated`}))});return(0,m.jsxs)(`div`,{className:`space-y-4 border-t border-frost pt-5`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`h3`,{className:`m-0 text-base`,children:`Adopt or rebaseline from Team Template`}),(0,m.jsx)(`p`,{className:`muted mt-1 text-sm`,children:`Map every stable source slot to one current Agent, choose placement for remaining Agents, then review the daemon-resolved edge set.`})]}),(0,m.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,m.jsxs)(`label`,{className:`min-w-52 flex-1 text-xs`,children:[`Team Template`,(0,m.jsx)(`select`,{value:r,onChange:e=>{i(e.target.value),o(null),h(null)},children:n.filter(e=>!e.deletedAt).map(e=>(0,m.jsxs)(`option`,{value:e.id,children:[e.name,` · r`,e.currentRevision]},e.id))})]}),(0,m.jsx)(c,{variant:`ghost`,onClick:v,children:`Configure mapping`})]}),a&&(0,m.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`p`,{className:`text-xs font-semibold uppercase text-mocha-light`,children:`Stable slots`}),a.slots.map(e=>(0,m.jsxs)(`label`,{className:`block text-xs`,children:[(0,m.jsxs)(`span`,{className:`block truncate`,title:e.slotId,children:[e.agentName,` · slot `,(0,m.jsx)(`code`,{children:e.slotId.slice(0,8)})]}),(0,m.jsxs)(`select`,{value:s[e.slotId]??``,onChange:t=>{l(n=>({...n,[e.slotId]:t.target.value})),h(null)},children:[(0,m.jsx)(`option`,{value:``,children:`Select Agent…`}),t.members.map(t=>(0,m.jsxs)(`option`,{value:t.id,disabled:Object.entries(s).some(([n,r])=>n!==e.slotId&&r===t.id),children:[t.name,t.status===`archived`?` (archived)`:``]},t.id))]})]},e.slotId))]}),(0,m.jsxs)(`div`,{className:`space-y-2`,children:[(0,m.jsx)(`p`,{className:`text-xs font-semibold uppercase text-mocha-light`,children:`Remaining live Agents`}),t.members.filter(e=>!Object.values(s).includes(e.id)).map(e=>(0,m.jsxs)(`label`,{className:`block text-xs`,children:[e.name,(0,m.jsxs)(`select`,{value:u[e.id]??`isolated`,onChange:t=>{d(n=>({...n,[e.id]:t.target.value})),h(null)},children:[(0,m.jsx)(`option`,{value:`isolated`,children:`Isolated`}),(0,m.jsx)(`option`,{value:`profile_defaults`,children:`Agent-template defaults`})]})]},e.id))]})]}),a&&(0,m.jsx)(c,{variant:`ghost`,onClick:async()=>{if(!a||a.slots.some(e=>!s[e.slotId])||new Set(Object.values(s)).size!==a.slots.length){_(`Map every stable slot to a distinct current Agent.`);return}let t=await fetch(`/api/teams/${encodeURIComponent(e)}/policy/adopt-template/preview`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(y())}),n=await t.json().catch(()=>null);if(!t.ok){_(n?.error??`Preview failed (${t.status})`);return}h(n.edges)},children:`Review exact resulting policy`}),f&&(0,m.jsxs)(`div`,{className:`rounded-md border border-sapphire-light bg-sapphire-glow p-3 text-sm`,children:[(0,m.jsxs)(`p`,{children:[`The daemon resolved `,(0,m.jsx)(`strong`,{children:f.length}),` directed allow edges. This preview is submitted unchanged and recomputed transactionally at commit.`]}),(0,m.jsx)(`div`,{className:`mt-2 max-h-40 overflow-auto`,children:(0,m.jsx)(`ul`,{children:f.map((e,t)=>(0,m.jsx)(`li`,{children:(0,m.jsxs)(`code`,{children:[e.sourceKind,e.sourceId?`:${e.sourceId}`:``,` → `,e.targetKind,e.targetId?`:${e.targetId}`:``]})},`${e.sourceKind}:${e.sourceId??``}>${e.targetKind}:${e.targetId??``}:${t}`))})}),(0,m.jsx)(c,{variant:`primary`,className:`mt-3`,onClick:async()=>{if(!f)return;let t=await fetch(`/api/teams/${encodeURIComponent(e)}/policy/adopt-template`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({...y(),previewEdges:f})}),n=await t.json().catch(()=>null);if(!t.ok){_(n?.error??`Rebaseline failed (${t.status})`);return}window.location.reload()},children:`Commit reviewed rebaseline`})]}),g&&(0,m.jsx)(`p`,{role:`alert`,className:`err`,children:g})]})}function v(){let e=o.useLoaderData();if(!e.ok)return(0,m.jsx)(l,{title:`Team policy unavailable`,error:Error(e.error),reset:()=>window.location.reload(),fallbackHref:`/teams`});let{detail:t,profiles:n,templates:r}=e.value,{id:a}=o.useParams(),c=o.useSearch(),d=t.baseline;return(0,m.jsxs)(s,{size:`wide`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`h1`,{children:`Team policy`}),(0,m.jsxs)(`p`,{className:`muted`,children:[`The sole effective live communication policy for `,(0,m.jsx)(`code`,{children:a}),`.`]})]}),(0,m.jsx)(u,{teamId:a}),(0,m.jsxs)(`section`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,"aria-label":`Policy status`,children:[(0,m.jsx)(y,{label:`Revision`,value:t.teamPolicy.revision}),(0,m.jsx)(y,{label:`Allow edges`,value:t.edges.length}),(0,m.jsx)(y,{label:`Baseline`,value:d?`${d.templateId} r${d.templateRevision}`:`Not initialized`})]}),(0,m.jsx)(i,{source:{kind:`live`,teamId:a,detail:t},profiles:n,initialUi:{view:c.view,selectedId:c.selected,viewport:{x:c.vx,y:c.vy,zoom:c.vz}}}),(0,m.jsx)(h,{teamId:a,detail:t,templates:r})]})}function y({label:e,value:t}){return(0,m.jsxs)(`div`,{className:`card`,children:[(0,m.jsx)(`dt`,{className:`muted text-xs`,children:e}),(0,m.jsx)(`dd`,{className:`break-words font-semibold`,children:t})]})}export{v as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,r as t,t as n}from"./jsx-runtime-DGeXAQPT.js";import{t as r}from"./react-3W8R1pOO.js";var i=e((e=>{var t=r();function n(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(n(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`);function s(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var c=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function l(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(n(299));return s(e,t,null,r)},e.flushSync=function(e){var t=c.T,n=a.p;try{if(c.T=null,a.p=2,e)return e()}finally{c.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=l(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??a.d.M(e)},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=l(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else a.d.m(e)},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return c.H.useFormState(e,t,n)},e.useFormStatus=function(){return c.H.useHostTransitionStatus()},e.version=`19.2.7`})),a=e(((e,t)=>{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=i()}));function o(e){return e[e.length-1]}function s(e){return typeof e==`function`}function c(e,t){return s(e)?e(t):e}var l=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;function d(e){for(let t in e)if(l.call(e,t))return!0;return!1}var f=()=>Object.create(null),p=(e,t)=>m(e,t,f);function m(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=v(e)&&v(i);if(!a&&!(g(e)&&g(i)))return i;let o=a?e:h(e);if(!o)return i;let s=a?i:h(i);if(!s)return i;let c=o.length,u=s.length,d=a?Array(u):n(),f=0;for(let t=0;t<u;t++){let o=a?t:s[t],u=e[o],p=i[o];if(u===p){d[o]=u,(a?t<c:l.call(e,o))&&f++;continue}if(u===null||p===null||typeof u!=`object`||typeof p!=`object`){d[o]=p;continue}let h=m(u,p,n,r+1);d[o]=h,h===u&&f++}return c===u&&f===c?e:d}function h(e){let t=Object.getOwnPropertyNames(e);for(let n of t)if(!u.call(e,n))return!1;let n=Object.getOwnPropertySymbols(e);if(n.length===0)return t;let r=t;for(let t of n){if(!u.call(e,t))return!1;r.push(t)}return r}function g(e){if(!_(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!_(n)||!n.hasOwnProperty(`isPrototypeOf`))}function _(e){return Object.prototype.toString.call(e)===`[object Object]`}function v(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function y(e,t,n){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!y(e[r],t[r],n))return!1;return!0}if(g(e)&&g(t)){let r=n?.ignoreUndefined??!0;if(n?.partial){for(let i in t)if((!r||t[i]!==void 0)&&!y(e[i],t[i],n))return!1;return!0}let i=0;if(!r)i=Object.keys(e).length;else for(let t in e)e[t]!==void 0&&i++;let a=0;for(let o in t)if((!r||t[o]!==void 0)&&(a++,a>i||!y(e[o],t[o],n)))return!1;return i===a}return!1}function b(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function x(e){return typeof e?.message==`string`?e.message.startsWith(`Failed to fetch dynamically imported module`)||e.message.startsWith(`error loading dynamically imported module`)||e.message.startsWith(`Importing a module script failed`):!1}function S(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}var C=/[\x00-\x1f\x7f"<>`{}]/g;function w(e){return e.replace(C,e=>`%`+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,`0`))}function T(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return w(t)}var E=[`http:`,`https:`,`mailto:`,`tel:`];function ee(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}var D={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},te=/[&><\u2028\u2029]/g;function ne(e){return e.replace(te,e=>D[e])}function re(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=T(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=T(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function ie(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function ae(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function oe(){throw Error(`Invariant failed`)}function O(e){let t=new Map,n,r,i=e=>{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var k=4,se=5;function ce(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function le(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=ce(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2<a.length&&a.charCodeAt(r+2)===36){let e=r+3,a=s;if(e<a)return n[0]=3,n[1]=t+r,n[2]=t+e,n[3]=t+a,n[4]=t+s+1,n[5]=i,n}}else if(c===36){let a=r+1,o=r+2;return o===s?(n[0]=2,n[1]=t+r,n[2]=t+a,n[3]=t+o,n[4]=t+s+1,n[5]=e.length,n):(n[0]=1,n[1]=t+r,n[2]=t+o,n[3]=t+s,n[4]=t+s+1,n[5]=i,n)}}return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n}function A(e,t,n,r,i,a,o){o?.(n);let s=r;{let r=n.fullPath??n.from,o=r.length,c=n.options?.caseSensitive??e,l=n.options?.params?.parse??n.options?.parseParams;for(;s<o;){let e=le(r,s,t),o,u=s,d=e[5];switch(s=d+1,a++,e[0]){case 0:{let t=r.substring(e[2],e[3]);if(c){let e=i.static?.get(t);if(e)o=e;else{i.static??=new Map;let e=N(n.fullPath??n.from);e.parent=i,e.depth=a,o=e,i.static.set(t,e)}}else{let e=t.toLowerCase(),r=i.staticInsensitive?.get(e);if(r)o=r;else{i.staticInsensitive??=new Map;let t=N(n.fullPath??n.from);t.parent=i,t.depth=a,o=t,i.staticInsensitive.set(e,t)}}break}case 1:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.dynamic?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=P(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=P(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=P(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=N(n.fullPath??n.from);e.kind=se,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=N(n.fullPath??n.from);e.kind=k,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)A(e,t,r,s,i,a,o)}function j(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function M(e){if(e.pathless)for(let t of e.pathless)M(t);if(e.static)for(let t of e.static.values())M(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())M(t);if(e.dynamic?.length){e.dynamic.sort(j);for(let t of e.dynamic)M(t)}if(e.optional?.length){e.optional.sort(j);for(let t of e.optional)M(t)}if(e.wildcard?.length){e.wildcard.sort(j);for(let t of e.wildcard)M(t)}}function N(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function P(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function ue(e,t){let n=N(`/`),r=new Uint16Array(6);for(let t of e)A(!1,r,t,1,n,0);M(n),t.masksTree=n,t.flatCache=O(1e3)}function de(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=R(e,t.masksTree);return t.flatCache.set(e,r),r}function F(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=N(`/`),A(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),R(r,o,n)}function I(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=R(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=B(a.route)),t.matchCache.set(r,a),a}function fe(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function L(e,t=!1,n){let r=N(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return A(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&oe(),a[e.id]=e,s!==0&&e.path){let t=fe(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),M(r),{processedTree:{segmentTree:r,singleCache:O(1e3),matchCache:O(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function R(e,t,n=!1){let r=e.split(`/`),i=me(e,r,t,n);if(!i)return null;let[a]=z(e,r,i);return{route:i.node.route,rawParams:a}}function z(e,t,n){let r=pe(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s<r.length;o++,s++,c++,l++){let u=r[s];if(u.kind===k)break;if(u.kind===se){l--,o--,c--;continue}let d=t[o],f=c;if(d&&(c+=d.length),u.kind===1){i??=n.node.fullPath.split(`/`);let e=i[l],t=u.prefix?.length??0;if(e.charCodeAt(t)===123){let n=u.suffix?.length??0,r=e.substring(t+2,e.length-n-1),i=d.substring(t,d.length-n);a[r]=decodeURIComponent(i)}else{let t=e.substring(1);a[t]=decodeURIComponent(d)}}else if(u.kind===3){if(n.skipped&1<<s){o--,c=f-1;continue}i??=n.node.fullPath.split(`/`);let e=i[l],t=u.prefix?.length??0,r=u.suffix?.length??0,p=e.substring(t+3,e.length-r-1),m=u.suffix||u.prefix?d.substring(t,d.length-r):d;m&&(a[p]=decodeURIComponent(m))}else if(u.kind===2){let t=u,n=e.substring(f+(t.prefix?.length??0),e.length-(t.suffix?.length??0)),r=decodeURIComponent(n);a[`*`]=r,a._splat=r;break}}return n.rawParams&&Object.assign(a,n.rawParams),[a,{part:o,node:s,path:c,segment:l}]}function B(e){let t=[e];for(;e.parentRoute;)e=e.parentRoute,t.push(e);return t.reverse(),t}function pe(e){let t=Array(e.depth+1);do t[e.depth]=e,e=e.parent;while(e);return t}function me(e,t,n,r){if(e===`/`&&n.index)return{node:n.index,skipped:0};let i=!o(t),a=i&&e!==`/`,s=t.length-+!!i,c=[{node:n,index:1,skipped:0,depth:1,statics:0,dynamics:0,optionals:0}],l=null,u=null;for(;c.length;){let n=c.pop(),{node:i,index:o,skipped:d,depth:f,statics:p,dynamics:m,optionals:h}=n,{extract:g,rawParams:_}=n;if(i.kind===2&&i.route&&!W(u,n))continue;if(i.parse){if(!U(e,t,n))continue;_=n.rawParams,g=n.extract}r&&i.route&&i.kind!==k&&W(l,n)&&(l=n);let v=o===s;if(v&&(i.route&&(!a||i.kind===k||i.kind===2)&&W(u,n)&&(u=n),!i.optional&&!i.wildcard&&!i.index&&!i.pathless))continue;let y=v?void 0:t[o],b;if(v&&i.index){let n={node:i.index,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_},r=!0;if(i.index.parse&&(U(e,t,n)||(r=!1)),r){if(!m&&!h&&!d&&H(p,s))return n;W(u,n)&&(u=n)}}if(i.wildcard)for(let e=i.wildcard.length-1;e>=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(o).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}c.push({node:n,index:s,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<<f,t=f+1;for(let n=i.optional.length-1;n>=0;n--){let r=i.optional[n];c.push({node:r,index:o,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}c.push({node:n,index:o+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+V(s,o),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}c.push({node:t,index:o+1,skipped:d,depth:f+1,statics:p,dynamics:m+V(s,o),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&c.push({node:e,index:o+1,skipped:d,depth:f+1,statics:p+V(s,o),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&c.push({node:e,index:o+1,skipped:d,depth:f+1,statics:p+V(s,o),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];c.push({node:n,index:o,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(u)return u;if(r&&l){let n=l.index;for(let e=0;e<l.index;e++)n+=t[e].length;let r=n===e.length?`/`:e.slice(n);return l.rawParams??=Object.create(null),l.rawParams[`**`]=decodeURIComponent(r),l}return null}function V(e,t){return 2**(e-t-1)}function H(e,t){return e===2**(t-1)-1}function U(e,t,n){let r,i;try{[r,i]=z(e,t,n)}catch{return null}if(n.rawParams=r,n.extract=i,!n.node.parse)return!0;try{if(n.node.parse(r)===!1)return null}catch{}return!0}function W(e,t){return e?t.statics>e.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===k)>(e.node.kind===k)||t.node.kind===k==(e.node.kind===k)&&t.depth>e.depth))):!0}function G(e){return K(e.filter(e=>e!==void 0).join(`/`))}function K(e){return e.replace(/\/{2,}/g,`/`)}function he(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function q(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function ge(e){return q(he(e))}function J(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function _e(e,t,n){return J(e,n)===J(t,n)}function ve({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,s;if(r){s=i?t:a?e:e+`\0`+t;let n=r.get(s);if(n)return n}let c;if(a)c=e.split(`/`);else if(i)c=t.split(`/`);else{for(c=e.split(`/`);c.length>1&&o(c)===``;)c.pop();let n=t.split(`/`);for(let e=0,t=n.length;e<t;e++){let r=n[e];r===``?e?e===t-1&&c.push(r):c=[r]:r===`..`?c.pop():r===`.`||c.push(r)}}c.length>1&&(o(c)===``?n===`never`&&c.pop():n===`always`&&c.push(``));let l=K(c.join(`/`))||`/`;return s&&r&&r.set(s,l),l}function ye(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function be(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>Se(e,n)).join(`/`):Se(r,n):r}function xe({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s<o;){let r=s;c=le(e,r,c);let o=c[5];if(s=o+1,r===o)continue;let u=c[0];if(u===0){l+=`/`+e.substring(r,o);continue}if(u===2){let s=t._splat;a._splat=s,a[`*`]=s;let u=e.substring(r,c[1]),d=e.substring(c[4],o);if(!s){i=!0,(u||d)&&(l+=`/`+u+d);continue}let f=be(`_splat`,t,n);l+=`/`+u+f+d;continue}if(u===1){let s=e.substring(c[2],c[3]);!i&&!(s in t)&&(i=!0),a[s]=t[s];let u=e.substring(r,c[1]),d=e.substring(c[4],o),f=be(s,t,n)??`undefined`;l+=`/`+u+f+d;continue}if(u===3){let i=e.substring(c[2],c[3]),s=t[i];if(s==null)continue;a[i]=s;let u=e.substring(r,c[1]),d=e.substring(c[4],o),f=be(i,t,n)??``;l+=`/`+u+f+d;continue}}return e.endsWith(`/`)&&(l+=`/`),{usedParams:a,interpolatedPath:l||`/`,isMissingParams:i}}function Se(e,t){let n=encodeURIComponent(e);return t?.(n)??n}function Ce(e){return e?.isNotFound===!0}var Y=`__root__`;function we(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function Te(e){return e instanceof Response&&!!e.options}function Ee(e){if(typeof e==`object`&&e&&e.isSerializedRedirect)return we(e)}var De=`Error preloading route! ☝️`,Oe=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=Y:this.parentRoute||oe();let r=n?Y:t?.path;r&&r!==`/`&&(r=he(r));let i=t?.id||r,a=n?Y:G([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=G([`/`,a]));let o=a===`__root__`?`/`:G([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=q(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>we({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},ke=class extends Oe{constructor(e){super(e)}},X=t(r(),1),Ae=X.use,je=typeof window<`u`?X.useLayoutEffect:X.useEffect;function Me(e){let t=X.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Ne(e,t,n={},r={}){X.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function Pe(e){let t=X.useRef(null);return X.useImperativeHandle(e,()=>t.current,[]),t}var Fe=n();function Ie({children:e,fallback:t=null}){return Le()?(0,Fe.jsx)(X.Fragment,{children:e}):(0,Fe.jsx)(X.Fragment,{children:t})}function Le(){return X.useSyncExternalStore(Re,()=>!0,()=>!1)}function Re(){return()=>{}}var ze=X.createContext(null);function Be(e){return X.useContext(ze)}var Ve=X.createContext(void 0),He=X.createContext(void 0),Ue=e((e=>{var t=r();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:n,a=t.useState,o=t.useEffect,s=t.useLayoutEffect,c=t.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;e.useSyncExternalStore=t.useSyncExternalStore===void 0?f:t.useSyncExternalStore})),We=e(((e,t)=>{t.exports=Ue()})),Ge=e((e=>{var t=r(),n=We();function i(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var a=typeof Object.is==`function`?Object.is:i,o=n.useSyncExternalStore,s=t.useRef,c=t.useEffect,l=t.useMemo,u=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var d=s(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=l(function(){function e(e){if(!o){if(o=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,a(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var o=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=o(e,d[0],d[1]);return c(function(){f.hasValue=!0,f.value=p},[p]),u(p),p}})),Ke=e(((e,t)=>{t.exports=Ge()})),qe=t(Ke(),1);function Je(e,t){return e===t}function Ye(e,t,n=Je){let r=(0,X.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,X.useCallback)(()=>e?.get(),[e]);return(0,qe.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Xe={get(){},subscribe(){return{unsubscribe(){}}}};function Ze(e,t){let n=X.useRef();return r=>{let i=e?.select?e.select(r):r;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=m(n.current,i):i}}function Z(e){let t=Be(),n=X.useContext(e.from?He:Ve),r=e.from?t.stores.getRouteMatchStore(e.from):t.stores.matchStores.get(n),i=Ze(e,t),a=Ye(r??Xe,e=>e?i(e):Xe);if(a!==Xe)return a;(e.shouldThrow??!0)&&oe()}function Qe(e){return Z({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function $e(e){let{select:t,...n}=e;return Z({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function et(e){return Z({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function tt(e){return Z({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function nt(e){let t=Be();return X.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function rt(e){return Z({...e,select:t=>e.select?e.select(t.context):t.context})}var it=a();function at(e,t){let n=Be(),r=Pe(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:l,preloadDelay:u,preloadIntentProximity:d,hashScrollIntoView:f,replace:p,startTransition:m,resetScroll:h,viewTransition:g,children:_,target:v,disabled:b,style:x,className:S,onClick:C,onBlur:w,onFocus:T,onMouseEnter:E,onMouseLeave:D,onTouchStart:te,ignoreBlocker:ne,params:re,search:ie,hash:ae,state:oe,mask:O,reloadDocument:k,unsafeRelative:se,from:ce,_fromLocation:le,...A}=e,j=Le(),M=X.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),N=Ye(n.stores.location,e=>e,(e,t)=>e.href===t.href),P=X.useMemo(()=>{let e={_fromLocation:N,...M};return n.buildLocation(e)},[n,N,M]),ue=P.maskedLocation?P.maskedLocation.publicHref:P.publicHref,de=P.maskedLocation?P.maskedLocation.external:P.external,F=X.useMemo(()=>ft(ue,de,n.history,b),[b,de,ue,n.history]),I=X.useMemo(()=>{if(F?.external)return ee(F.href,n.protocolAllowlist)?void 0:F.href;if(!pt(s)&&!(typeof s!=`string`||s.indexOf(`:`)===-1))try{return new URL(s),ee(s,n.protocolAllowlist)?void 0:s}catch{}},[s,F,n.protocolAllowlist]),fe=X.useMemo(()=>{if(I)return!1;if(o?.exact){if(!_e(N.pathname,P.pathname,n.basepath))return!1}else{let e=J(N.pathname,n.basepath),t=J(P.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!y(N.search,P.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:o?.includeHash?j&&N.hash===P.hash:!0},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,N,I,j,P.hash,P.pathname,P.search,n.basepath]),L=fe?c(i,{})??st:ot,R=fe?ot:c(a,{})??ot,z=[S,L.className,R.className].filter(Boolean).join(` `),B=(x||L.style||R.style)&&{...x,...L.style,...R.style},[pe,me]=X.useState(!1),V=X.useRef(!1),H=e.reloadDocument||I?!1:l??n.options.defaultPreload,U=u??n.options.defaultPreloadDelay??0,W=X.useCallback(()=>{n.preloadRoute({...M,_builtLocation:P}).catch(e=>{console.warn(e),console.warn(De)})},[n,M,P]);Ne(r,X.useCallback(e=>{e?.isIntersecting&&W()},[W]),dt,{disabled:!!b||H!==`viewport`}),X.useEffect(()=>{V.current||!b&&H===`render`&&(W(),V.current=!0)},[b,W,H]);let G=e=>{let t=e.currentTarget.getAttribute(`target`),r=v===void 0?t:v;if(!b&&!ht(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,it.flushSync)(()=>{me(!0)});let t=n.subscribe(`onResolved`,()=>{t(),me(!1)});n.navigate({...M,replace:p,resetScroll:h,hashScrollIntoView:f,startTransition:m,viewTransition:g,ignoreBlocker:ne})}};if(I)return{...A,ref:r,href:I,..._&&{children:_},...v&&{target:v},...b&&{disabled:b},...x&&{style:x},...S&&{className:S},...C&&{onClick:C},...w&&{onBlur:w},...T&&{onFocus:T},...E&&{onMouseEnter:E},...D&&{onMouseLeave:D},...te&&{onTouchStart:te}};let K=e=>{if(b||H!==`intent`)return;if(!U){W();return}let t=e.currentTarget;if(Q.has(t))return;let n=setTimeout(()=>{Q.delete(t),W()},U);Q.set(t,n)},he=e=>{b||H!==`intent`||W()},q=e=>{if(b||!H||!U)return;let t=e.currentTarget,n=Q.get(t);n&&(clearTimeout(n),Q.delete(t))};return{...A,...L,...R,href:F?.href,ref:r,onClick:$([C,G]),onBlur:$([w,q]),onFocus:$([T,K]),onMouseEnter:$([E,K]),onMouseLeave:$([D,q]),onTouchStart:$([te,he]),disabled:!!b,target:v,...B&&{style:B},...z&&{className:z},...b&&ct,...fe&<,...j&&pe&&ut}}var ot={},st={className:`active`},ct={role:`link`,"aria-disabled":!0},lt={"data-status":`active`,"aria-current":`page`},ut={"data-transitioning":`transitioning`},Q=new WeakMap,dt={rootMargin:`100px`},$=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function ft(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function pt(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var mt=X.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=at(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return X.createElement(`a`,t,o)}return X.createElement(n,a,o)});function ht(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var gt=class extends Oe{constructor(e){super(e),this.useMatch=e=>Z({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>rt({...e,from:this.id}),this.useSearch=e=>tt({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>et({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>$e({...e,from:this.id}),this.useLoaderData=e=>Qe({...e,from:this.id}),this.useNavigate=()=>nt({from:this.fullPath}),this.Link=X.forwardRef((e,t)=>(0,Fe.jsx)(mt,{ref:t,from:this.fullPath,...e}))}};function _t(e){return new gt(e)}var vt=class extends ke{constructor(e){super(e),this.useMatch=e=>Z({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>rt({...e,from:this.id}),this.useSearch=e=>tt({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>et({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>$e({...e,from:this.id}),this.useLoaderData=e=>Qe({...e,from:this.id}),this.useNavigate=()=>nt({from:this.fullPath}),this.Link=X.forwardRef((e,t)=>(0,Fe.jsx)(mt,{ref:t,from:this.fullPath,...e}))}};function yt(e){return new vt(e)}function bt(e){return new xt(e,{silent:!0}).createRoute}var xt=class{constructor(e,t){this.path=e,this.createRoute=e=>{let t=_t(e);return t.isRoot=!1,t},this.silent=t?.silent}};function St(e,t){let n,r,i,a,o=()=>(n||=e().then(e=>{n=void 0,r=e[t??`default`]}).catch(e=>{if(i=e,x(i)&&i instanceof Error&&typeof window<`u`&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${i.message}`;sessionStorage.getItem(e)||(sessionStorage.setItem(e,`1`),a=!0)}}),n),s=function(e){if(a)throw window.location.reload(),new Promise(()=>{});if(i)throw i;if(!r)if(Ae)Ae(o());else throw o();return X.createElement(r,e)};return s.preload=o,s}var Ct=`modulepreload`,wt=function(e){return`/`+e},Tt={},Et=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=wt(t,n),t in Tt)return;Tt[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:Ct,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};export{B as A,b as B,K as C,ve as D,G as E,L as F,c as G,y as H,O as I,S as J,d as K,oe as L,I as M,F as N,ge as O,ue as P,a as Q,E as R,Ce as S,xe as T,ie as U,re as V,ne as W,p as X,o as Y,m as Z,Me as _,mt as a,we as b,Ye as c,Be as d,ze as f,je as g,Ae as h,yt as i,de as j,q as k,Ke as l,Le as m,St as n,nt as o,Ie as p,ee as q,bt as r,Ze as s,Et as t,Ve as u,Te as v,ye as w,Y as x,Ee as y,ae as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./jsx-runtime-DGeXAQPT.js";var t=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.7`})),n=e(((e,n)=>{n.exports=t()}));export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{a as r,d as i,o as a}from"./preload-helper-mNuBjNXU.js";import{t as o}from"./chevron-down-BhcBspw3.js";import{t as s}from"./plus-C9ee3SIO.js";import{C as c,D as l,E as u,O as d}from"./index-VdURSoM4.js";import{i as f}from"./wire-constants-BxfyUMXB.js";import{t as p}from"./Button-ByiV6fpd.js";var m=d(`archive`,[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8`,key:`1s80jp`}],[`path`,{d:`M10 12h4`,key:`a56b0p`}]]),h=d(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),g=d(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),_=d(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),v=e(n(),1),y=t();function b({onClose:e}){let t=i(),[n,r]=(0,v.useState)(``),[a,o]=(0,v.useState)(``),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(null);async function m(r){if(r.preventDefault(),f(null),!n.trim()){f(`id is required`);return}u(!0);try{let r={id:n.trim()};a.trim()&&(r.name=a.trim()),s.trim()&&(r.link=s.trim());let i=await fetch(`/api/teams`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??`${i.status} ${i.statusText}`)}e(),await t.invalidate()}catch(e){f(e.message),u(!1)}}return(0,y.jsx)(`div`,{onClick:e,onKeyDown:t=>{t.key===`Escape`&&e()},className:`fixed inset-0 z-50 flex items-center justify-center bg-charcoal/45 p-4 backdrop-blur-sm`,children:(0,y.jsxs)(`form`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`create-team-title`,onSubmit:m,onClick:e=>e.stopPropagation(),className:`max-h-[calc(100dvh-2rem)] w-full max-w-lg overflow-y-auto rounded-3xl border border-frost bg-card p-6 shadow-baziu-lg sm:p-7`,children:[(0,y.jsx)(`h2`,{id:`create-team-title`,className:`font-serif text-2xl text-foreground`,children:`Create a team`}),(0,y.jsxs)(`p`,{className:`text-sm text-muted-foreground mb-4`,children:[`A team is a collaboration context — one filesystem root, one USER.md, one roster. The slot lives at `,(0,y.jsx)(`code`,{className:`font-mono`,children:`~/.bazilion/teams/<slug>/`}),`.`]}),(0,y.jsxs)(`div`,{className:`mb-3 grid gap-3 sm:grid-cols-2`,children:[(0,y.jsxs)(`label`,{className:`block text-sm`,children:[`ID (slug)`,(0,y.jsx)(`input`,{type:`text`,value:n,onChange:e=>r(e.target.value),required:!0,pattern:`[a-z0-9][a-z0-9_-]*`,placeholder:`myproject`,autoFocus:!0,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`})]}),(0,y.jsxs)(`label`,{className:`block text-sm`,children:[`Name `,(0,y.jsx)(`span`,{className:`text-muted-foreground font-normal`,children:`(optional)`}),(0,y.jsx)(`input`,{type:`text`,value:a,onChange:e=>o(e.target.value),className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`})]})]}),(0,y.jsxs)(`label`,{className:`block text-sm mb-3`,children:[`Link target`,` `,(0,y.jsx)(`span`,{className:`text-muted-foreground font-normal`,children:`(optional, absolute path)`}),(0,y.jsx)(`input`,{type:`text`,value:s,onChange:e=>c(e.target.value),placeholder:`/home/you/projects/myrepo`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`}),(0,y.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:`Leave blank to create a fresh directory. Supply an absolute path to materialize the slot as a symlink to your existing project tree.`})]}),d&&(0,y.jsx)(`p`,{className:`err mt-2`,children:d}),(0,y.jsxs)(`div`,{className:`mt-5 flex justify-end gap-2`,children:[(0,y.jsx)(p,{variant:`ghost`,onClick:e,children:`Cancel`}),(0,y.jsx)(p,{variant:`primary`,type:`submit`,disabled:l,children:l?`Creating…`:`Create`})]})]})})}function x({profileId:e,teamHint:t,teams:n,onClose:r}){let i=a(),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(t??n.find(e=>e.id==="default")?.id??n[0]?.id??``),[u,d]=(0,v.useState)(`profile_defaults`),[f,m]=(0,v.useState)(!1),[h,g]=(0,v.useState)(null),[_,b]=(0,v.useState)(null);async function x(){let t=await fetch(`/api/teams/${encodeURIComponent(c)}/policy`);if(!t.ok)throw Error(`The selected Team policy is unavailable. Reload and try again.`);let n=await t.json();return{current:n,body:{profileId:e,teamId:c,teamExpectedRevision:n.teamPolicy.revision,placement:u}}}async function C(){g(null),m(!0);try{let{body:e}=await x(),t=await fetch(`/api/agents/placement-preview`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??`Preview failed (${t.status})`)}b(await t.json())}catch(e){g(e.message)}finally{m(!1)}}async function w(t){t.preventDefault(),g(null),m(!0);try{if(!_){await C();return}let t={profile:e,teamExpectedRevision:_.currentRevision,placement:u};o.trim()&&(t.name=o.trim()),c&&(t.teamId=c);let n=await fetch(`/api/agents`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`${n.status} ${n.statusText}`)}let a=(await n.json()).agent;r(),await i({to:`/`,search:{agent:a.id}})}catch(e){g(e.message),m(!1)}}return(0,y.jsx)(S,{onClose:r,children:(0,y.jsxs)(`form`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`spawn-agent-title`,onSubmit:w,className:`max-h-[calc(100dvh-2rem)] w-full max-w-lg overflow-y-auto rounded-3xl border border-frost bg-card p-6 shadow-baziu-lg sm:p-7`,onClick:e=>e.stopPropagation(),children:[(0,y.jsx)(`h3`,{id:`spawn-agent-title`,className:`font-serif text-xl text-foreground mb-1`,children:`Spawn a new agent`}),(0,y.jsxs)(`p`,{className:`text-sm text-muted-foreground mb-4`,children:[`Profile: `,(0,y.jsx)(`code`,{className:`font-mono`,children:e})]}),(0,y.jsxs)(`label`,{className:`block text-sm text-foreground mb-3`,children:[`Agent name`,` `,(0,y.jsx)(`span`,{className:`text-muted-foreground font-normal`,children:`(optional — defaults to the profile's name)`}),(0,y.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),autoFocus:!0,autoComplete:`off`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`})]}),(0,y.jsxs)(`label`,{className:`block text-sm text-foreground mb-3`,children:[`Initial policy placement`,(0,y.jsxs)(`select`,{value:u,onChange:e=>{d(e.target.value),b(null)},className:`mt-1 block w-full rounded-md border bg-background px-3 py-2`,children:[(0,y.jsx)(`option`,{value:`profile_defaults`,children:`Agent-template defaults`}),(0,y.jsx)(`option`,{value:`isolated`,children:`isolated`})]}),(0,y.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:`The current Team revision is checked again when you submit.`})]}),(0,y.jsxs)(`label`,{className:`block text-sm text-foreground mb-3`,children:[`Team`,(0,y.jsx)(`select`,{value:c,onChange:e=>{l(e.target.value),b(null)},className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`,children:n.map(e=>(0,y.jsxs)(`option`,{value:e.id,children:[e.name,e.id==="default"?` (default)`:``]},e.id))})]}),h&&(0,y.jsx)(`p`,{className:`err mt-2`,children:h}),_&&(0,y.jsxs)(`div`,{className:`mt-3 rounded-md border border-sapphire-light bg-sapphire-glow p-3 text-sm`,children:[(0,y.jsxs)(`p`,{children:[`Creating this Agent advances Team revision `,_.currentRevision,` → `,(0,y.jsx)(`strong`,{children:_.resultingRevision}),` and adds `,(0,y.jsx)(`strong`,{children:_.addedEdges.length}),` directed edges to the existing `,_.existingEdges.length,`.`]}),(0,y.jsx)(`ul`,{className:`mt-2 max-h-36 overflow-auto`,children:_.addedEdges.map((e,t)=>(0,y.jsx)(`li`,{children:(0,y.jsxs)(`code`,{children:[e.sourceKind,e.sourceId?`:${e.sourceId}`:``,` → `,e.targetKind,e.targetId?`:${e.targetId}`:``]})},`${e.sourceKind}:${e.sourceId??``}>${e.targetKind}:${e.targetId??``}:${t}`))}),_.addedEdges.length===0&&(0,y.jsx)(`p`,{className:`mt-2`,children:`The new Agent starts isolated.`})]}),(0,y.jsxs)(`div`,{className:`mt-5 flex justify-end gap-2`,children:[(0,y.jsx)(p,{variant:`ghost`,onClick:r,children:`Cancel`}),(0,y.jsx)(p,{variant:`primary`,type:`submit`,disabled:f,children:f?`Working…`:_?`Commit reviewed creation`:`Review exact policy`})]})]})})}function S({children:e,onClose:t}){return(0,y.jsx)(`div`,{onClick:t,onKeyDown:e=>{e.key===`Escape`&&t()},className:`fixed inset-0 z-50 flex items-center justify-center bg-charcoal/45 p-4 backdrop-blur-sm`,children:e})}function C({profileGroup:e,teams:t,onClose:n,onSpawned:r}){let[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(null),[u,d]=(0,v.useState)(!1),[f,m]=(0,v.useState)(null),h=(0,v.useRef)(null);(0,v.useEffect)(()=>{h.current?.focus()},[]);async function g(){let n=i.trim();if(!n)throw Error(`target Team slug is required`);let r=t.find(e=>e.id===n),a;if(r){let e=await fetch(`/api/teams/${encodeURIComponent(n)}/policy`);if(!e.ok)throw Error(`The target Team policy is unavailable.`);a=(await e.json()).teamPolicy.revision}return{target:n,body:{templateExpectedRevision:e.currentRevision,teamId:n,...a?{teamExpectedRevision:a}:{},mode:r?`append`:`initialize`,...o?{userMd:o}:{}}}}async function _(){d(!0),l(null),m(null);try{let{body:t}=await g(),n=await fetch(`/api/team-templates/${encodeURIComponent(e.id)}/spawn/preview`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok)throw Error((await n.json().catch(()=>null))?.error??n.statusText);m(await n.json())}catch(e){l(e.message)}finally{d(!1)}}async function b(){let t=i.trim();if(!t){l(`target Team slug is required`);return}d(!0),l(null);try{let{body:n}=await g(),i=await fetch(`/api/team-templates/${encodeURIComponent(e.id)}/spawn`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)});if(!i.ok)throw Error((await i.json().catch(()=>null))?.error??i.statusText);r(t)}catch(e){l(e.message)}finally{d(!1)}}return(0,y.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`spawn-team-title`,className:`fixed inset-0 z-50 flex items-center justify-center bg-charcoal/45 p-4 backdrop-blur-sm`,onClick:n,onKeyDown:e=>{e.key===`Escape`&&n()},children:(0,y.jsxs)(`div`,{ref:h,tabIndex:-1,className:`max-h-[calc(100dvh-2rem)] w-full max-w-lg overflow-y-auto rounded-3xl border border-frost bg-card p-6 shadow-baziu-lg sm:p-7`,role:`document`,onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.key!==`Escape`&&e.stopPropagation()},children:[(0,y.jsxs)(`h2`,{id:`spawn-team-title`,children:[`Spawn team — `,e.name]}),c&&(0,y.jsx)(`div`,{className:`err`,children:c}),(0,y.jsxs)(`p`,{className:`muted`,children:[`Uses immutable Team revision `,e.currentRevision,`. Existing Teams append at their current reviewed revision; a new Team initializes at revision 1. Conflicts never overwrite newer state.`]}),(0,y.jsxs)(`label`,{children:[`target Team slug`,(0,y.jsx)(`input`,{value:i,onChange:e=>{a(e.target.value),m(null)},list:`canonical-teams`,required:!0}),(0,y.jsx)(`datalist`,{id:`canonical-teams`,children:t.map(e=>(0,y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,y.jsxs)(`label`,{children:[`starter USER.md (new Team only)`,(0,y.jsx)(`textarea`,{rows:3,value:o,onChange:e=>{s(e.target.value),m(null)},className:`font-mono text-[0.88em] leading-[1.55]`})]}),f&&(0,y.jsxs)(`div`,{className:`mt-4 rounded-md border border-sapphire-light bg-sapphire-glow p-3 text-sm`,children:[(0,y.jsxs)(`p`,{children:[(0,y.jsx)(`strong`,{children:f.mode===`initialize`?`Initialize`:`Append`}),` produces Team revision `,f.resultingRevision,`, adds `,f.newMembers.length,` Agents, and results in `,f.edges.length,` directed allow edges.`]}),(0,y.jsx)(`ul`,{className:`mt-2 max-h-40 overflow-auto`,children:f.newMembers.map(e=>(0,y.jsxs)(`li`,{children:[e.agentName,` · stable source slot `,(0,y.jsx)(`code`,{children:e.slotId})]},e.slotId))}),(0,y.jsxs)(`details`,{className:`mt-2`,children:[(0,y.jsx)(`summary`,{className:`cursor-pointer`,children:`Review exact edge topology`}),(0,y.jsx)(`ul`,{className:`mt-2 max-h-40 overflow-auto`,children:f.edges.map((e,t)=>(0,y.jsx)(`li`,{children:(0,y.jsxs)(`code`,{children:[e.sourceKind,e.sourceId?`:${e.sourceId}`:``,` → `,e.targetKind,e.targetId?`:${e.targetId}`:``]})},`${e.sourceKind}:${e.sourceId??``}>${e.targetKind}:${e.targetId??``}:${t}`))})]})]}),(0,y.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,y.jsx)(p,{variant:`ghost`,onClick:n,children:`cancel`}),f?(0,y.jsx)(p,{variant:`primary`,onClick:b,disabled:u,children:u?`spawning…`:`commit ${f.mode}`}):(0,y.jsx)(p,{variant:`primary`,onClick:_,disabled:u||e.slotCount===0,children:u?`reviewing…`:`review exact result`})]})]})})}var w=`bz_sidebar_open_groups`;function T(e){if(typeof document>`u`)return;let t=encodeURIComponent(JSON.stringify(e));document.cookie=`${w}=${t}; Path=/; Max-Age=31536000; SameSite=Lax`}function E({agents:e,teams:t,profiles:n,profileGroups:a,selectedAgentId:c,initialOpenGroups:d}){let f=i(),[p,S]=(0,v.useState)(null),[w,E]=(0,v.useState)(null),[D,O]=(0,v.useState)(!1),[k,A]=(0,v.useState)(!1),j=(0,v.useRef)(null),M=()=>window.requestAnimationFrame(()=>j.current?.focus()),[N,P]=(0,v.useState)(()=>d??{});async function F(e){let t=window.prompt(`rename "${e.name}" to:`,e.name)?.trim();if(!t||t===e.name)return;let n=await fetch(`/api/agents/${e.id}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({name:t})});if(!n.ok){let e=await n.json().catch(()=>null);alert(e?.error??n.statusText);return}await f.invalidate()}async function I(e){if(!confirm(`archive "${e.name}"? (reversible — find under "show archived")`))return;let t=await fetch(`/api/agents/${e.id}/archive`,{method:`POST`});if(!t.ok&&t.status!==204){alert(t.statusText);return}await f.invalidate()}let L=[...n].sort((e,t)=>e.id==="default"?-1:+(t.id==="default")),R=[...t].sort((e,t)=>e.id==="default"?-1:+(t.id==="default")),z=new Map;for(let t of e){let e=z.get(t.teamId)??[];e.push(t),z.set(t.teamId,e)}let B=e.find(e=>e.id===c)?.teamId??null;return(0,y.jsxs)(`aside`,{className:`flex h-full flex-col overflow-hidden rounded-2xl border border-border bg-card shadow-baziu-sm`,children:[(0,y.jsxs)(`header`,{className:`flex items-center justify-between gap-3 border-b border-border bg-muted/30 px-3 py-2.5`,children:[(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-foreground`,children:[(0,y.jsx)(`span`,{className:`flex size-7 items-center justify-center rounded-lg bg-accent text-accent-foreground`,children:(0,y.jsx)(l,{className:`size-4`,"aria-hidden":`true`})}),(0,y.jsx)(`span`,{children:`Agents`})]}),(0,y.jsxs)(`p`,{className:`mt-0.5 truncate pl-9 text-[0.7rem] text-muted-foreground`,children:[e.length,` agent`,e.length===1?``:`s`,` across `,t.length,` team`,t.length===1?``:`s`]})]}),(0,y.jsxs)(`div`,{className:`relative`,children:[(0,y.jsxs)(`button`,{ref:j,type:`button`,onClick:()=>A(e=>!e),"aria-expanded":k,"aria-haspopup":`menu`,className:`unstyled inline-flex h-8 items-center gap-1 rounded-lg border border-border bg-card px-2.5 text-xs font-semibold text-foreground shadow-baziu-sm transition-colors hover:border-primary/30 hover:bg-accent hover:text-accent-foreground`,children:[(0,y.jsx)(s,{className:`size-3.5`,"aria-hidden":`true`}),`New`,(0,y.jsx)(o,{className:`size-3.5 text-muted-foreground transition-transform ${k?`rotate-180`:``}`,"aria-hidden":`true`})]}),k&&(0,y.jsxs)(`div`,{role:`menu`,className:`absolute right-0 top-[calc(100%+0.4rem)] z-20 w-60 overflow-hidden rounded-xl border border-border bg-popover p-1.5 text-popover-foreground shadow-baziu-lg`,onMouseLeave:()=>A(!1),children:[n.length===0?(0,y.jsxs)(`div`,{className:`rounded-lg bg-muted/40 px-3 py-2.5 text-xs leading-5 text-muted-foreground`,children:[`No Agent templates yet.`,` `,(0,y.jsx)(`a`,{href:`/templates/agents`,className:`text-primary underline`,children:`Create one to spawn agents.`})]}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-1.5 px-2.5 pb-1 pt-1 text-[0.68rem] font-semibold uppercase tracking-[0.1em] text-muted-foreground`,children:[(0,y.jsx)(l,{className:`size-3`,"aria-hidden":`true`}),`Agent templates`]}),L.map(e=>(0,y.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{A(!1),S({profileId:e.id})},className:`unstyled flex min-h-8 w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-sm text-foreground transition-colors hover:bg-accent hover:text-accent-foreground`,children:[(0,y.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground`,children:(0,y.jsx)(l,{className:`size-3.5`,"aria-hidden":`true`})}),(0,y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name||e.id}),e.id==="default"&&(0,y.jsx)(`span`,{className:`rounded-full border border-border bg-muted px-1.5 py-0.5 text-[0.65rem] font-semibold text-muted-foreground`,children:`Default`})]},e.id))]}),(0,y.jsx)(`div`,{className:`my-1.5 h-px bg-border`}),(0,y.jsxs)(`div`,{className:`flex items-center gap-1.5 px-2.5 pb-1 pt-1 text-[0.68rem] font-semibold uppercase tracking-[0.1em] text-muted-foreground`,children:[(0,y.jsx)(u,{className:`size-3`,"aria-hidden":`true`}),`Team templates`]}),a.length===0?(0,y.jsxs)(`div`,{className:`rounded-lg bg-muted/40 px-3 py-2 text-xs leading-5 text-muted-foreground`,children:[`No team templates yet.`,` `,(0,y.jsx)(`a`,{href:`/templates/teams`,className:`text-primary underline`,children:`Create one`}),`.`]}):a.map(e=>(0,y.jsxs)(`button`,{type:`button`,role:`menuitem`,disabled:e.slotCount===0,title:e.slotCount===0?`Add at least one member before spawning`:void 0,onClick:()=>{A(!1),E(e)},className:`unstyled flex min-h-8 w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-sm text-foreground transition-colors hover:bg-accent hover:text-accent-foreground disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent`,children:[(0,y.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground`,children:(0,y.jsx)(u,{className:`size-3.5`,"aria-hidden":`true`})}),(0,y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name||e.id}),(0,y.jsx)(`span`,{className:`inline-flex min-w-6 items-center justify-center rounded-full bg-muted px-1.5 font-mono text-[0.68rem] text-muted-foreground`,children:e.slotCount})]},e.id)),(0,y.jsx)(`div`,{className:`my-1.5 h-px bg-border`}),(0,y.jsxs)(`button`,{type:`button`,onClick:()=>{A(!1),O(!0)},className:`unstyled flex min-h-8 w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground`,children:[(0,y.jsx)(s,{className:`size-3.5`,"aria-hidden":`true`}),`Create a team`]})]})]})]}),(0,y.jsx)(`nav`,{className:`flex-1 overflow-y-auto p-1.5`,"aria-label":`Teams and agents`,children:e.length===0&&t.length===0?(0,y.jsxs)(`div`,{className:`m-1 flex flex-col items-center rounded-xl border border-dashed border-border bg-muted/30 px-4 py-6 text-center`,children:[(0,y.jsx)(`span`,{className:`mb-2 flex size-9 items-center justify-center rounded-full bg-accent text-accent-foreground`,children:(0,y.jsx)(l,{className:`size-4`,"aria-hidden":`true`})}),(0,y.jsx)(`p`,{className:`text-sm font-semibold text-foreground`,children:`No agents yet`}),(0,y.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-muted-foreground`,children:`Spawn your first agent to start a conversation.`}),(0,y.jsxs)(`a`,{href:`/agents`,className:`mt-3 inline-flex items-center gap-1 text-xs font-semibold text-primary hover:text-primary/80`,children:[`Open agent setup`,(0,y.jsx)(h,{className:`size-3.5`,"aria-hidden":`true`})]})]}):R.map(e=>{let t=z.get(e.id)??[],n=B===e.id,i=N[e.id];return(0,y.jsxs)(`details`,{open:i===void 0?n||e.id==="default":i,onToggle:t=>{let n=t.currentTarget.open;if(N[e.id]===n)return;let r={...N,[e.id]:n};T(r),P(r),f.invalidate()},className:`team/details mb-1 last:mb-0`,children:[(0,y.jsxs)(`summary`,{className:`flex min-h-8 cursor-pointer list-none items-center gap-1.5 rounded-lg px-2 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground ${n?`bg-muted/60 text-foreground`:`text-muted-foreground`}`,children:[(0,y.jsx)(h,{className:`size-3.5 shrink-0 transition-transform team-open/details:rotate-90`,"aria-hidden":`true`}),(0,y.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground`,children:(0,y.jsx)(u,{className:`size-3`,"aria-hidden":`true`})}),(0,y.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-medium`,children:e.name}),e.id==="default"&&(0,y.jsx)(`span`,{className:`text-[0.62rem] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Default`}),(0,y.jsx)(`span`,{className:`inline-flex min-w-6 items-center justify-center rounded-full border border-border bg-card px-1.5 font-mono text-[0.68rem] text-muted-foreground`,children:t.length})]}),t.length===0?(0,y.jsx)(`div`,{className:`py-2 pl-12 pr-2 text-xs text-muted-foreground`,children:`No agents in this team`}):(0,y.jsx)(`div`,{className:`space-y-0.5 py-0.5 pl-2`,children:t.map(e=>(0,y.jsxs)(`div`,{className:`team/row relative rounded-lg`,children:[(0,y.jsxs)(r,{to:`/`,search:{agent:e.id},"aria-current":e.id===c?`page`:void 0,className:`block min-h-11 rounded-lg border border-transparent py-1.5 pl-2.5 pr-[4.6rem] transition-colors hover:bg-accent/70 ${e.id===c?`border-primary/20 bg-accent text-accent-foreground shadow-baziu-sm`:`text-foreground`}`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-sm font-medium`,children:[(0,y.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full ${e.id===c?`bg-primary`:`bg-border`}`,"aria-hidden":`true`}),(0,y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name}),e.telegramTopicId!==null&&(0,y.jsx)(`span`,{className:`shrink-0 text-primary`,title:`Telegram topic #${e.telegramTopicId}`,"aria-label":`Bound to Telegram topic ${e.telegramTopicId}`,children:(0,y.jsx)(_,{className:`size-3`,"aria-hidden":`true`})})]}),(0,y.jsxs)(`div`,{className:`mt-0.5 flex gap-2 pl-3 font-mono text-[0.65rem] text-muted-foreground`,children:[(0,y.jsx)(`span`,{className:`uppercase tracking-wide`,children:e.status}),(0,y.jsx)(`span`,{children:e.id.slice(0,8)})]})]}),(0,y.jsxs)(`div`,{className:`absolute right-1 top-1/2 z-10 flex -translate-y-1/2 gap-0.5`,children:[(0,y.jsx)(`button`,{type:`button`,onClick:()=>F(e),title:`Rename`,"aria-label":`Rename ${e.name}`,className:`unstyled flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-card hover:text-primary focus-visible:bg-card`,children:(0,y.jsx)(g,{className:`size-3.5`,"aria-hidden":`true`})}),(0,y.jsx)(`button`,{type:`button`,onClick:()=>I(e),title:`Archive`,"aria-label":`Archive ${e.name}`,className:`unstyled flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:bg-destructive/10 focus-visible:text-destructive`,children:(0,y.jsx)(m,{className:`size-3.5`,"aria-hidden":`true`})})]})]},e.id))})]},e.id)})}),p&&(0,y.jsx)(x,{profileId:p.profileId,teamHint:p.teamHint,teams:R,onClose:()=>{S(null),M()}}),w&&(0,y.jsx)(C,{profileGroup:w,teams:R,onClose:()=>{E(null),M()},onSpawned:e=>{E(null),f.navigate({to:`/teams/$id`,params:{id:e}})}}),D&&(0,y.jsx)(b,{onClose:()=>{O(!1),M()}})]})}function D(){let e=c.useLoaderData(),t=e.selected?.resolved.agent.id??null;return(0,y.jsxs)(`div`,{className:`grid h-full min-h-0 grid-cols-1 gap-3 py-3 lg:grid-cols-[18rem_minmax(0,1fr)]`,children:[(0,y.jsx)(`div`,{className:`min-h-0 ${e.selected?`hidden lg:block`:``}`,children:(0,y.jsx)(E,{agents:e.agents,teams:e.teams,profiles:e.profiles,profileGroups:e.profileGroups,selectedAgentId:t,initialOpenGroups:e.initialOpenGroups})}),(0,y.jsx)(`section`,{className:`min-h-0 overflow-hidden ${e.selected?``:`hidden lg:block`}`,children:e.selected?(0,y.jsx)(f,{agentId:e.selected.resolved.agent.id,agentName:e.selected.resolved.agent.name,initialMessages:e.selected.initialMessages,initialSessionHead:e.selected.sessionHead}):(0,y.jsx)(`div`,{className:`flex h-full items-center justify-center rounded-lg border border-dashed bg-card text-muted-foreground`,children:e.agents.length===0?`No agents yet.`:`Pick an agent on the left to start chatting.`})})]})}export{D as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-DGeXAQPT.js";import{g as t}from"./index-VdURSoM4.js";import{t as n}from"./ConfigPage-BCwfgyjD.js";import{t as r}from"./FieldRow-avAFLgYW.js";var i=e(),a=`Other`;function o(e){let t=new Map;for(let n of e){let e=n.team??a,r=t.get(e)??[];r.push(n),t.set(e,r)}let n=Array.from(t,([e,t])=>({team:e,items:t}));return n.length>1&&n.sort((e,t)=>e.team===a?1:t.team===a?-1:0),n}function s(){let{services:e}=t.useLoaderData(),a=o(e);return(0,i.jsxs)(n,{active:`services`,title:`Services`,description:(0,i.jsxs)(i.Fragment,{children:[`Configure non-LLM integrations such as web search and crawlers. Secret fields are encrypted in the `,(0,i.jsx)(`code`,{className:`font-mono`,children:`secrets`}),` table; URLs and IDs live in the `,(0,i.jsx)(`code`,{className:`font-mono`,children:`config`}),` table.`]}),children:[e.length===0&&(0,i.jsx)(`p`,{className:`text-muted-foreground italic`,children:`(no services registered)`}),a.map(({team:e,items:t})=>(0,i.jsxs)(`section`,{children:[(0,i.jsx)(`h2`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),t.map(e=>(0,i.jsxs)(`section`,{className:`rounded-lg border bg-card p-5 mb-3`,children:[(0,i.jsxs)(`header`,{className:`mb-3 flex flex-wrap items-center gap-2`,children:[(0,i.jsx)(`span`,{className:`font-mono font-semibold`,children:e.id}),(0,i.jsxs)(`span`,{className:`text-muted-foreground text-sm`,children:[`· `,e.displayName]})]}),e.hint&&(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground mb-2`,children:e.hint}),e.fields.map(e=>(0,i.jsx)(r,{field:e},e.envVar))]},e.id))]},e))]})}export{s as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{x as i}from"./index-VdURSoM4.js";import{a,i as o,n as s,r as c,t as l}from"./Page-CwNuDhWz.js";import{t as u}from"./Button-ByiV6fpd.js";var d=e(n()),f=t();function p(){let e=i.useLoaderData(),t=r();async function n(e){if(!confirm(`Remove skill "${e}"? This deletes the directory on disk.`))return;let n=await fetch(`/api/skills/${encodeURIComponent(e)}`,{method:`DELETE`});if(!n.ok&&n.status!==204){alert(n.statusText);return}await t.invalidate()}return(0,f.jsxs)(c,{size:`wide`,children:[(0,f.jsx)(s,{title:`Skills`,description:`Install and review the prompt-only skills available to your agents.`}),(0,f.jsx)(m,{onImported:()=>t.invalidate()}),(0,f.jsx)(o,{title:`Installed skills`,description:`${e.length} skill${e.length===1?``:`s`} available`,children:e.length===0?(0,f.jsx)(l,{title:`No skills installed`,description:`Import from OpenClaw, a server directory, or a ZIP archive to get started.`}):(0,f.jsx)(`div`,{className:`overflow-x-auto`,children:(0,f.jsxs)(`table`,{className:`m-0 min-w-[760px]`,children:[(0,f.jsx)(`thead`,{children:(0,f.jsxs)(`tr`,{children:[(0,f.jsx)(`th`,{children:`Name`}),(0,f.jsx)(`th`,{children:`Description`}),(0,f.jsx)(`th`,{children:`Scan`}),(0,f.jsx)(`th`,{children:`Source`}),(0,f.jsx)(`th`,{})]})}),(0,f.jsx)(`tbody`,{children:e.map(e=>(0,f.jsxs)(`tr`,{children:[(0,f.jsx)(`td`,{children:(0,f.jsx)(`code`,{children:e.name})}),(0,f.jsx)(`td`,{className:`max-w-xl`,children:e.parseError?(0,f.jsxs)(`div`,{className:`flex items-start gap-2 text-sm`,children:[(0,f.jsx)(a,{variant:`danger`,children:`Parse error`}),(0,f.jsx)(`span`,{className:`text-destructive`,children:e.parseError})]}):e.description}),(0,f.jsx)(`td`,{children:(0,f.jsx)(h,{findings:e.scanFindings??[]})}),(0,f.jsxs)(`td`,{className:`text-xs text-muted-foreground`,children:[(0,f.jsx)(`span`,{className:`font-mono`,children:e.source??`Unknown`}),e.importedAt&&(0,f.jsx)(`div`,{className:`mt-1 font-mono`,children:new Date(e.importedAt).toLocaleDateString()})]}),(0,f.jsx)(`td`,{className:`text-right`,children:(0,f.jsx)(u,{variant:`danger`,className:`whitespace-nowrap`,onClick:()=>n(e.name),children:`Remove`})})]},e.name))})]})})})]})}function m({onImported:e}){let[t,n]=(0,d.useState)(`openclaw`),[r,i]=(0,d.useState)(``),[s,c]=(0,d.useState)(!1),[l,p]=(0,d.useState)(null),[m,h]=(0,d.useState)(!1),[v,y]=(0,d.useState)(null),[b,x]=(0,d.useState)([]),[S,C]=(0,d.useState)(!1),w=(0,d.useRef)(null);async function T(n){n.preventDefault(),y(null),x([]),C(!0);try{let n;if(t===`zip`){if(!l){y(`Choose a ZIP file first.`),C(!1);return}let e=new FormData;e.set(`file`,l),s&&e.set(`force`,`true`),n=await fetch(`/api/skills/import`,{method:`POST`,body:e})}else{let e;if(t===`openclaw`)e=`openclaw`;else if(e=r.trim(),!e){y(`Enter the server path.`),C(!1);return}n=await fetch(`/api/skills/import`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({source:e,force:s})})}if(!n.ok){let e=await n.json().catch(()=>null);throw x(e?.findings??[]),Error(e?.error??`${n.status} ${n.statusText}`)}x(_((await n.json().catch(()=>null))?.findings)),i(``),p(null),e()}catch(e){y(e.message)}finally{C(!1)}}function E(e){p(e.target.files?.[0]??null)}function D(e){e.preventDefault(),h(!1);let t=e.dataTransfer?.files;if(!t||t.length===0)return;let n=t[0];if(n){if(!/\.zip$/i.test(n.name)){y(`Only ZIP archives are supported.`);return}if(p(n),w.current){let e=new DataTransfer;e.items.add(n),w.current.files=e.files}}}let O=b.some(e=>e.severity===`danger`)?`danger`:`warning`;return(0,f.jsxs)(o,{title:`Import skills`,description:(0,f.jsxs)(f.Fragment,{children:[`Choose a source. Each skill's `,(0,f.jsx)(`code`,{children:`SKILL.md`}),` body is injected into the system prompt of any agent it is attached to.`]}),children:[(0,f.jsx)(`div`,{role:`tablist`,className:`mb-5 inline-flex max-w-full gap-0 overflow-x-auto rounded-lg border border-border bg-muted p-1`,children:[{id:`openclaw`,label:`OpenClaw`},{id:`path`,label:`Server directory`},{id:`zip`,label:`Upload ZIP`}].map(e=>(0,f.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===e.id,onClick:()=>{n(e.id),y(null)},className:`unstyled cursor-pointer whitespace-nowrap rounded-md border-none bg-transparent px-3 py-1.5 text-sm font-medium transition-colors ${t===e.id?`bg-card text-accent-foreground shadow-baziu-sm`:`text-muted-foreground hover:bg-accent/50 hover:text-foreground`}`,children:e.label},e.id))}),v&&(0,f.jsx)(`div`,{role:`alert`,className:`mb-4 rounded-lg border border-destructive/20 bg-destructive/10 px-4 py-3 text-sm text-destructive`,children:v}),b.length>0&&(0,f.jsxs)(`div`,{className:`mb-4 rounded-lg border border-border bg-muted/30 p-4 text-sm`,children:[(0,f.jsx)(a,{variant:O,className:`mb-2`,children:`Scan findings`}),(0,f.jsx)(g,{findings:b})]}),(0,f.jsxs)(`form`,{className:`space-y-4`,onSubmit:T,children:[t===`openclaw`&&(0,f.jsxs)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:[`One-click import of every skill found in `,(0,f.jsx)(`code`,{children:`~/.openclaw/skills`}),` on the server.`]}),t===`path`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:[`Import from an absolute path on the server — either a single skill folder (contains `,(0,f.jsx)(`code`,{children:`SKILL.md`}),`) or a parent folder holding many skill subfolders.`]}),(0,f.jsxs)(`label`,{className:`max-w-2xl`,children:[`Server path`,(0,f.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`/home/you/my-skills`,required:!0})]})]}),t===`zip`&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`p`,{className:`text-sm leading-6 text-muted-foreground`,children:[`Upload a `,(0,f.jsx)(`code`,{children:`.zip`}),` archive whose top level contains one folder per skill — the folder name becomes the skill name.`]}),(0,f.jsxs)(`label`,{onDragOver:e=>{e.preventDefault(),h(!0)},onDragLeave:()=>h(!1),onDrop:D,className:`block cursor-pointer rounded-xl border-2 border-dashed p-8 text-center transition-colors ${m?`border-primary bg-accent text-accent-foreground`:l?`border-solid border-primary/40 bg-card text-foreground`:`border-border bg-muted/30 text-muted-foreground hover:border-primary hover:bg-accent hover:text-accent-foreground`}`,children:[(0,f.jsx)(`input`,{ref:w,type:`file`,accept:`.zip,application/zip`,onChange:E,className:`absolute h-px w-px overflow-hidden opacity-0`}),l?(0,f.jsx)(`span`,{className:`block break-all font-mono text-sm text-accent-foreground`,children:l.name}):(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(`span`,{className:`block text-sm font-medium text-foreground`,children:`Click to choose a ZIP file`}),(0,f.jsx)(`span`,{className:`text-xs`,children:`or drag and drop it here`})]})]})]}),(0,f.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,f.jsx)(u,{variant:`primary`,type:`submit`,disabled:S,children:S?`Importing…`:t===`zip`?`Upload and import`:t===`openclaw`?`Import from OpenClaw`:`Import`}),(0,f.jsxs)(`label`,{className:`m-0 inline-flex cursor-pointer items-center gap-1 text-sm text-foreground`,children:[(0,f.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>c(e.target.checked)}),(0,f.jsx)(`span`,{children:`Overwrite existing`}),(0,f.jsx)(`span`,{className:`text-muted-foreground`,children:`and confirm scan findings`})]})]})]})]})}function h({findings:e}){return e.length===0?(0,f.jsx)(a,{variant:`success`,children:`Clean`}):(0,f.jsxs)(`details`,{className:`text-xs`,children:[(0,f.jsx)(`summary`,{className:`cursor-pointer list-none`,children:(0,f.jsxs)(a,{variant:e.some(e=>e.severity===`danger`)?`danger`:`warning`,children:[e.length,` finding`,e.length===1?``:`s`]})}),(0,f.jsx)(`div`,{className:`mt-2 min-w-64`,children:(0,f.jsx)(g,{findings:e})})]})}function g({findings:e}){return(0,f.jsx)(`ul`,{className:`m-0 space-y-1.5 pl-0`,children:e.map((e,t)=>(0,f.jsxs)(`li`,{className:`flex items-start gap-2`,children:[(0,f.jsx)(a,{variant:e.severity===`danger`?`danger`:`warning`,children:e.severity===`danger`?`Danger`:`Warning`}),(0,f.jsxs)(`span`,{children:[(0,f.jsx)(`code`,{children:e.code}),e.line?`, line ${e.line}`:``,` — `,e.message]})]},`${e.code}-${e.line??0}-${t}`))})}function _(e){return e?Object.entries(e).flatMap(([e,t])=>t.map(t=>({...t,message:`${e}: ${t.message}`}))):[]}export{p as component};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"DM Sans", system-ui, sans-serif;--font-serif:"DM Serif Display", Georgia, serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--color-amber-950:oklch(27.9% .077 45.635);--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:22px;--radius-2xl:28px;--radius-3xl:36px;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-xs:4px;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-heading:"DM Serif Display", Georgia, serif;--font-display:"DM Serif Display", Georgia, serif;--font-body:"DM Sans", system-ui, sans-serif;--color-cream:#f4f1eb;--color-ivory:#faf8f4;--color-frost:#ded7cd;--color-fawn:#c9beb1;--color-chocolate:#342820;--color-charcoal:#241c16;--color-mocha:#6f6054;--color-mocha-light:#776a60;--color-sapphire:#3d7899;--color-sapphire-deep:#2f617d;--color-sapphire-light:#72a9c5;--color-sapphire-glow:#3d78991f;--color-rose-baziu:#c4878a;--color-snow:#fff;--color-success:#3f7d65;--color-warning:#9a6a27;--color-danger:#a34e52;--shadow-baziu-sm:0 1px 2px #241c160d, 0 1px 8px #241c1609;--shadow-baziu-md:0 8px 24px #241c1614;--color-ring:var(--ring);--color-input:var(--input);--color-border:var(--border);--color-destructive:var(--destructive);--color-accent-foreground:var(--accent-foreground);--color-accent:var(--accent);--color-muted-foreground:var(--muted-foreground);--color-muted:var(--muted);--color-secondary-foreground:var(--secondary-foreground);--color-secondary:var(--secondary);--color-primary-foreground:var(--primary-foreground);--color-primary:var(--primary);--color-popover-foreground:var(--popover-foreground);--color-popover:var(--popover);--color-card-foreground:var(--card-foreground);--color-card:var(--card);--color-foreground:var(--foreground);--color-background:var(--background)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border);outline-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}body{background-color:var(--color-background);color:var(--color-foreground);font-family:var(--font-body);-webkit-font-smoothing:antialiased;background-image:radial-gradient(circle at 8% -10%, var(--color-sapphire-glow), transparent 28rem), radial-gradient(circle at 94% 0%, #c4878a14, transparent 25rem);min-height:100vh;font-size:15px;line-height:1.6}@supports (color:color-mix(in lab, red, red)){body{background-image:radial-gradient(circle at 8% -10%, var(--color-sapphire-glow), transparent 28rem), radial-gradient(circle at 94% 0%, color-mix(in srgb, var(--color-rose-baziu) 8%, transparent), transparent 25rem)}}body{background-attachment:fixed}html{font-family:var(--font-sans);scrollbar-gutter:stable;overflow:hidden scroll}html[data-layout=home],body[data-layout=home],html[data-layout=workspace],body[data-layout=workspace]{height:100dvh;overflow:hidden}body:before{content:"";opacity:.025;pointer-events:none;z-index:9999;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:256px;position:fixed;inset:0}h1,h2,h3{font-family:var(--font-display);color:var(--color-charcoal);letter-spacing:-.01em;font-weight:400}h1{font-size:clamp(2rem,3vw,2.65rem);line-height:1.05}h2{font-size:clamp(1.4rem,2vw,1.75rem);line-height:1.15}h3{color:var(--color-mocha);font-size:1.12rem;line-height:1.25}code{font-family:var(--font-mono);background:var(--color-frost);border-radius:var(--radius-sm);color:var(--color-mocha);padding:.15em .4em;font-size:.88em}a{color:var(--color-sapphire);text-decoration:none;transition:color .2s}a:hover{color:var(--color-sapphire-deep)}}@layer components{label{color:var(--color-mocha);margin:.6rem 0;font-size:.9em;display:block}input[type=text],input[type=password],input[type=number],input:not([type]),select,textarea{min-height:2.65rem;font:inherit;border:1px solid var(--color-frost);border-radius:var(--radius-md);background:#fefefd;width:100%;padding:.58rem .8rem;font-size:.95em}@supports (color:color-mix(in lab, red, red)){input[type=text],input[type=password],input[type=number],input:not([type]),select,textarea{background:color-mix(in srgb, var(--color-snow) 82%, var(--color-ivory))}}input[type=text],input[type=password],input[type=number],input:not([type]),select,textarea{color:var(--color-chocolate);outline:none;transition:all .2s}input:focus,select:focus,textarea:focus{border-color:var(--color-sapphire);box-shadow:0 0 0 3px var(--color-sapphire-glow);background:var(--color-snow)}input::placeholder{color:var(--color-fawn)}input[type=checkbox]{accent-color:var(--color-sapphire);vertical-align:middle;width:16px;height:16px;margin-right:.35rem}button[type=submit]:not(.unstyled),.btn-primary{min-height:2.55rem;font:inherit;letter-spacing:.005em;border-radius:var(--radius-md);cursor:pointer;background:var(--color-sapphire);color:#fff;border:none;justify-content:center;align-items:center;gap:.4rem;padding:.58rem 1.05rem;font-size:.9em;font-weight:650;transition:all .2s;display:inline-flex;box-shadow:0 1px 1px #172d3a1f,0 4px 12px #3d789924}button[type=submit]:not(.unstyled):hover,.btn-primary:hover{background:var(--color-sapphire-deep);color:#fff;box-shadow:var(--shadow-baziu-md);transform:translateY(-1px)}button[type=submit]:not(.unstyled):active,.btn-primary:active{transform:translateY(0)}button[type=submit]:not(.unstyled):disabled,button[type=submit]:not(.unstyled)[disabled],.btn-primary:disabled,.btn-primary[disabled]{opacity:.5;cursor:not-allowed;box-shadow:none;transform:none}.ghost-btn{min-height:2.4rem;color:var(--color-mocha);border:1px solid var(--color-frost);font:inherit;border-radius:var(--radius-md);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:.35rem;padding:.48rem .85rem;font-size:.9em;font-weight:600;transition:all .2s;display:inline-flex}.ghost-btn:hover{border-color:var(--color-sapphire-light);color:var(--color-sapphire);background:var(--color-sapphire-glow)}.ghost-btn:disabled,.ghost-btn[disabled]{opacity:.5;cursor:not-allowed}.danger-btn{min-height:2.4rem;color:var(--destructive);border:1px solid var(--destructive);background:0 0;justify-content:center;align-items:center;gap:.35rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.danger-btn{border:1px solid color-mix(in srgb, var(--destructive) 32%, transparent)}}.danger-btn{font:inherit;border-radius:var(--radius-md);cursor:pointer;padding:.48rem .85rem;font-size:.9em;font-weight:600;transition:all .2s}.danger-btn:hover{background:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.danger-btn:hover{background:color-mix(in srgb, var(--destructive) 10%, transparent)}}.danger-btn:hover{border-color:var(--destructive)}.danger-btn:disabled,.danger-btn[disabled]{opacity:.5;cursor:not-allowed}table{border-collapse:separate;border-spacing:0;background:#fffffff0;width:100%;margin:1rem 0}@supports (color:color-mix(in lab, red, red)){table{background:color-mix(in srgb, var(--color-snow) 94%, transparent)}}table{border:1px solid var(--color-frost);border-radius:var(--radius-lg);overflow:hidden}thead{background:var(--color-ivory)}th{text-align:left;text-transform:uppercase;letter-spacing:.08em;color:var(--color-mocha-light);border-bottom:1px solid var(--color-frost);padding:.75rem 1rem;font-size:.74em;font-weight:700}td{border-bottom:1px solid var(--color-frost);vertical-align:middle;padding:.78rem 1rem;font-size:.93em}tr:last-child td{border-bottom:none}tbody tr{transition:background .2s}tbody tr:hover{background:var(--color-sapphire-glow)}.md-content>*+*{margin-top:.65em}.md-content h1,.md-content h2,.md-content h3,.md-content h4,.md-content h5,.md-content h6{font-family:var(--font-serif);color:var(--color-chocolate);margin-top:1.1em;font-weight:600;line-height:1.3}.md-content h1{font-size:1.45em}.md-content h2{font-size:1.25em}.md-content h3{font-size:1.1em}.md-content h4,.md-content h5,.md-content h6{font-size:1em}.md-content p{line-height:1.55}.md-content ul,.md-content ol{padding-left:1.5em;line-height:1.55}.md-content ul{list-style:outside}.md-content ol{list-style:decimal}.md-content li+li,.md-content li>ul,.md-content li>ol{margin-top:.25em}.md-content a{color:var(--color-sapphire);text-underline-offset:2px;text-decoration:underline}.md-content a:hover{color:var(--color-sapphire-deep)}.md-content strong{color:var(--color-chocolate);font-weight:600}.md-content em{font-style:italic}.md-content code{font-family:var(--font-mono,ui-monospace, monospace);background:var(--color-frost);border-radius:var(--radius-sm,4px);color:var(--color-chocolate);padding:.1em .35em;font-size:.88em}.md-content pre{background:var(--color-ivory);border:1px solid var(--color-frost);border-radius:var(--radius-md);margin:.7em 0;padding:.75rem 1rem;font-size:.88em;line-height:1.5;overflow-x:auto}.md-content pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}.md-content blockquote{border-left:3px solid var(--color-frost);color:var(--color-mocha-light);padding-left:.9rem;font-style:italic}.md-content hr{border:none;border-top:1px solid var(--color-frost);margin:1em 0}.md-content table{border-collapse:collapse;margin:.5em 0;font-size:.93em}.md-content th,.md-content td{border:1px solid var(--color-frost);text-align:left;padding:.4rem .7rem}.md-content th{background:var(--color-frost);font-weight:600}.md-content img{border-radius:var(--radius-sm,4px);max-width:100%;height:auto}.card{background:#fffffff0}@supports (color:color-mix(in lab, red, red)){.card{background:color-mix(in srgb, var(--color-snow) 94%, transparent)}}.card{border:1px solid var(--color-frost);border-radius:var(--radius-xl);box-shadow:var(--shadow-baziu-sm);margin:1.25rem 0;padding:1.5rem}.card h3{font-family:var(--font-body);text-transform:uppercase;letter-spacing:.06em;color:var(--color-mocha-light);margin-bottom:1rem;font-size:.92em;font-weight:600}.muted{color:var(--color-mocha-light);font-size:.9em}.err{color:var(--destructive);background:var(--destructive);padding:.75rem 1rem}@supports (color:color-mix(in lab, red, red)){.err{background:color-mix(in srgb, var(--destructive) 12%, transparent)}}.err{border:1px solid var(--destructive)}@supports (color:color-mix(in lab, red, red)){.err{border:1px solid color-mix(in srgb, var(--destructive) 25%, transparent)}}.err{border-radius:var(--radius-md);margin-bottom:1rem;font-size:.92em}}@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.top-\[calc\(100\%\+0\.4rem\)\]{top:calc(100% + .4rem)}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\/2{left:50%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.float-right{float:right}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-1{margin:var(--spacing)}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.my-4{margin-block:calc(var(--spacing) * 4)}.my-5{margin-block:calc(var(--spacing) * 5)}.my-6{margin-block:calc(var(--spacing) * 6)}.my-10{margin-block:calc(var(--spacing) * 10)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-14{margin-top:calc(var(--spacing) * 14)}.mr-1{margin-right:var(--spacing)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.-mb-3{margin-bottom:calc(var(--spacing) * -3)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.\!hidden{display:none!important}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.\!h-3{height:calc(var(--spacing) * 3)!important}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[1\.3rem\]{height:1.3rem}.h-\[1\.05rem\]{height:1.05rem}.h-\[70vh\]{height:70vh}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-\[22rem\]{max-height:22rem}.max-h-\[200px\]{max-height:200px}.max-h-\[520px\]{max-height:520px}.max-h-\[640px\]{max-height:640px}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-0{min-height:0}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-56{min-height:calc(var(--spacing) * 56)}.min-h-\[2\.4rem\]{min-height:2.4rem}.min-h-\[80px\]{min-height:80px}.min-h-\[240px\]{min-height:240px}.min-h-\[360px\]{min-height:360px}.min-h-\[420px\]{min-height:420px}.min-h-\[480px\]{min-height:480px}.min-h-\[620px\]{min-height:620px}.min-h-dvh{min-height:100dvh}.\!w-3{width:calc(var(--spacing) * 3)!important}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-60{width:calc(var(--spacing) * 60)}.w-\[1\.05rem\]{width:1.05rem}.w-\[1\.6rem\]{width:1.6rem}.w-\[150px\]{width:150px}.w-\[190px\]{width:190px}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-24{max-width:calc(var(--spacing) * 24)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\[85\%\]{max-width:85%}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[260px\]{max-width:260px}.max-w-\[1500px\]{max-width:1500px}.max-w-\[1600px\]{max-width:1600px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-64{min-width:calc(var(--spacing) * 64)}.min-w-\[16rem\]{min-width:16rem}.min-w-\[18rem\]{min-width:18rem}.min-w-\[680px\]{min-width:680px}.min-w-\[720px\]{min-width:720px}.min-w-\[760px\]{min-width:760px}.min-w-\[820px\]{min-width:820px}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.scroll-my-1{scroll-margin-block:var(--spacing)}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[2rem_1fr\]{grid-template-columns:2rem 1fr}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\!overflow-hidden{overflow:hidden!important}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.\!rounded-md{border-radius:var(--radius-md)!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[4px\]{border-radius:4px}.rounded-\[14px_14px_4px_14px\]{border-radius:14px 14px 4px}.rounded-\[16px\]{border-radius:16px}.rounded-\[24px\]{border-radius:24px}.rounded-\[min\(var\(--radius-md\)\,10px\)\]{border-radius:min(var(--radius-md), 10px)}.rounded-\[min\(var\(--radius-md\)\,12px\)\]{border-radius:min(var(--radius-md), 12px)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-r-sm{border-top-right-radius:var(--radius-sm);border-bottom-right-radius:var(--radius-sm)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.\!border{border-style:var(--tw-border-style)!important;border-width:1px!important}.\!border-2{border-style:var(--tw-border-style)!important;border-width:2px!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.\!border-frost{border-color:var(--color-frost)!important}.\!border-ivory{border-color:var(--color-ivory)!important}.\!border-snow{border-color:var(--color-snow)!important}.border-\[\#bcd9bc\]{border-color:#bcd9bc}.border-\[rgba\(196\,135\,138\,0\.4\)\]{border-color:#c4878a66}.border-border{border-color:var(--color-border)}.border-danger{border-color:var(--color-danger)}.border-danger\/25{border-color:#a34e5240}@supports (color:color-mix(in lab, red, red)){.border-danger\/25{border-color:color-mix(in oklab, var(--color-danger) 25%, transparent)}}.border-destructive\/20{border-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\/20{border-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.border-fawn{border-color:var(--color-fawn)}.border-frost{border-color:var(--color-frost)}.border-frost\/50{border-color:#ded7cd80}@supports (color:color-mix(in lab, red, red)){.border-frost\/50{border-color:color-mix(in oklab, var(--color-frost) 50%, transparent)}}.border-input{border-color:var(--color-input)}.border-primary,.border-primary\/20{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/20{border-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.border-primary\/40{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.border-rose-baziu{border-color:var(--color-rose-baziu)}.border-sapphire{border-color:var(--color-sapphire)}.border-sapphire-light{border-color:var(--color-sapphire-light)}.border-success\/25{border-color:#3f7d6540}@supports (color:color-mix(in lab, red, red)){.border-success\/25{border-color:color-mix(in oklab, var(--color-success) 25%, transparent)}}.border-transparent{border-color:#0000}.border-warning\/25{border-color:#9a6a2740}@supports (color:color-mix(in lab, red, red)){.border-warning\/25{border-color:color-mix(in oklab, var(--color-warning) 25%, transparent)}}.border-l-danger{border-left-color:var(--color-danger)}.border-l-mocha-light{border-left-color:var(--color-mocha-light)}.\!bg-rose-baziu{background-color:var(--color-rose-baziu)!important}.\!bg-sapphire{background-color:var(--color-sapphire)!important}.\!bg-snow{background-color:var(--color-snow)!important}.bg-\[\#eef7ee\]{background-color:#eef7ee}.bg-\[rgba\(42\,31\,22\,0\.04\)\]{background-color:#2a1f160a}.bg-accent,.bg-accent\/40{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/40{background-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.bg-accent\/60{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/60{background-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.bg-background{background-color:var(--color-background)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-card{background-color:var(--color-card)}.bg-charcoal\/45{background-color:#241c1673}@supports (color:color-mix(in lab, red, red)){.bg-charcoal\/45{background-color:color-mix(in oklab, var(--color-charcoal) 45%, transparent)}}.bg-cream{background-color:var(--color-cream)}.bg-danger\/10{background-color:#a34e521a}@supports (color:color-mix(in lab, red, red)){.bg-danger\/10{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.bg-destructive\/10{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--color-destructive) 10%, transparent)}}.bg-fawn\/35{background-color:#c9beb159}@supports (color:color-mix(in lab, red, red)){.bg-fawn\/35{background-color:color-mix(in oklab, var(--color-fawn) 35%, transparent)}}.bg-frost{background-color:var(--color-frost)}.bg-frost\/40{background-color:#ded7cd66}@supports (color:color-mix(in lab, red, red)){.bg-frost\/40{background-color:color-mix(in oklab, var(--color-frost) 40%, transparent)}}.bg-ivory{background-color:var(--color-ivory)}.bg-mocha-light\/60{background-color:#776a6099}@supports (color:color-mix(in lab, red, red)){.bg-mocha-light\/60{background-color:color-mix(in oklab, var(--color-mocha-light) 60%, transparent)}}.bg-muted,.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--color-muted) 30%, transparent)}}.bg-muted\/40{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, var(--color-muted) 40%, transparent)}}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.bg-muted\/60{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab, var(--color-muted) 60%, transparent)}}.bg-popover{background-color:var(--color-popover)}.bg-primary{background-color:var(--color-primary)}.bg-primary-foreground{background-color:var(--color-primary-foreground)}.bg-rose-baziu\/10{background-color:#c4878a1a}@supports (color:color-mix(in lab, red, red)){.bg-rose-baziu\/10{background-color:color-mix(in oklab, var(--color-rose-baziu) 10%, transparent)}}.bg-sapphire{background-color:var(--color-sapphire)}.bg-sapphire-glow{background-color:var(--color-sapphire-glow)}.bg-sapphire-glow\/80{background-color:#3d789919}@supports (color:color-mix(in lab, red, red)){.bg-sapphire-glow\/80{background-color:color-mix(in oklab, var(--color-sapphire-glow) 80%, transparent)}}.bg-secondary{background-color:var(--color-secondary)}.bg-snow{background-color:var(--color-snow)}.bg-snow\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-snow\/70{background-color:color-mix(in oklab, var(--color-snow) 70%, transparent)}}.bg-snow\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-snow\/95{background-color:color-mix(in oklab, var(--color-snow) 95%, transparent)}}.bg-success\/10{background-color:#3f7d651a}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--color-success) 10%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning\/10{background-color:#9a6a271a}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab, var(--color-warning) 10%, transparent)}}.bg-clip-padding{background-clip:padding-box}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.p-8{padding:calc(var(--spacing) * 8)}.p-\[3px\]{padding:3px}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-9{padding-block:calc(var(--spacing) * 9)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-1{padding-top:var(--spacing)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-\[4\.6rem\]{padding-right:4.6rem}.pb-1{padding-bottom:var(--spacing)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-0{padding-left:0}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-12{padding-left:calc(var(--spacing) * 12)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-\[-1px\]{vertical-align:-1px}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-body{font-family:var(--font-body)}.font-display{font-family:var(--font-display)}.font-heading{font-family:var(--font-heading)}.font-mono{font-family:var(--font-mono)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.7em\]{font-size:.7em}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.8em\]{font-size:.8em}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.9em\]{font-size:.9em}.text-\[0\.62rem\]{font-size:.62rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.66rem\]{font-size:.66rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72em\]{font-size:.72em}.text-\[0\.75em\]{font-size:.75em}.text-\[0\.78em\]{font-size:.78em}.text-\[0\.82em\]{font-size:.82em}.text-\[0\.84em\]{font-size:.84em}.text-\[0\.85em\]{font-size:.85em}.text-\[0\.86em\]{font-size:.86em}.text-\[0\.88em\]{font-size:.88em}.text-\[0\.92em\]{font-size:.92em}.text-\[0\.93em\]{font-size:.93em}.text-\[0\.95em\]{font-size:.95em}.text-\[0\.95rem\]{font-size:.95rem}.text-\[1\.2rem\]{font-size:1.2rem}.text-\[1\.35rem\]{font-size:1.35rem}.text-\[1em\]{font-size:1em}.text-\[3\.4rem\]{font-size:3.4rem}.text-\[10px\]{font-size:10px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\[0\.98\]{--tw-leading:.98;line-height:.98}.leading-\[1\.4\]{--tw-leading:1.4;line-height:1.4}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[1\.45\]{--tw-leading:1.45;line-height:1.45}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.tracking-\[-0\.03em\]{--tw-tracking:-.03em;letter-spacing:-.03em}.tracking-\[-0\.035em\]{--tw-tracking:-.035em;letter-spacing:-.035em}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#3b7a3b\]{color:#3b7a3b}.text-\[\#a56568\]{color:#a56568}.text-accent-foreground{color:var(--color-accent-foreground)}.text-card-foreground{color:var(--color-card-foreground)}.text-charcoal{color:var(--color-charcoal)}.text-chocolate{color:var(--color-chocolate)}.text-current{color:currentColor}.text-danger{color:var(--color-danger)}.text-destructive{color:var(--color-destructive)}.text-fawn{color:var(--color-fawn)}.text-foreground,.text-foreground\/60{color:var(--color-foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/60{color:color-mix(in oklab, var(--color-foreground) 60%, transparent)}}.text-mocha{color:var(--color-mocha)}.text-mocha-light{color:var(--color-mocha-light)}.text-mocha-light\/40{color:#776a6066}@supports (color:color-mix(in lab, red, red)){.text-mocha-light\/40{color:color-mix(in oklab, var(--color-mocha-light) 40%, transparent)}}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-rose-baziu{color:var(--color-rose-baziu)}.text-sapphire{color:var(--color-sapphire)}.text-sapphire-deep{color:var(--color-sapphire-deep)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-snow{color:var(--color-snow)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.\!shadow-baziu-sm{--tw-shadow:0 1px 2px var(--tw-shadow-color,#241c160d), 0 1px 8px var(--tw-shadow-color,#241c1609)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.shadow-baziu-lg{--tw-shadow:0 18px 50px var(--tw-shadow-color,#241c161f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-baziu-md{--tw-shadow:0 8px 24px var(--tw-shadow-color,#241c1614);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-baziu-sm{--tw-shadow:0 1px 2px var(--tw-shadow-color,#241c160d), 0 1px 8px var(--tw-shadow-color,#241c1609);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground\/10{--tw-ring-color:var(--color-foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\/10{--tw-ring-color:color-mix(in oklab, var(--color-foreground) 10%, transparent)}}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.running{animation-play-state:running}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-x-3:after{content:var(--tw-content);inset-inline:calc(var(--spacing) * -3)}.after\:-inset-y-2:after{content:var(--tw-content);inset-block:calc(var(--spacing) * -2)}.after\:bg-foreground:after{content:var(--tw-content);background-color:var(--color-foreground)}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first\:pt-0:first-child{padding-top:0}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-\[\#bcd9bc\]:hover{border-color:#bcd9bc}.hover\:border-frost:hover{border-color:var(--color-frost)}.hover\:border-primary:hover,.hover\:border-primary\/30:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab, var(--color-primary) 30%, transparent)}}.hover\:border-rose-baziu:hover{border-color:var(--color-rose-baziu)}.hover\:border-sapphire:hover{border-color:var(--color-sapphire)}.hover\:border-sapphire-light:hover{border-color:var(--color-sapphire-light)}.hover\:bg-\[\#eef7ee\]:hover{background-color:#eef7ee}.hover\:bg-\[rgba\(196\,135\,138\,0\.08\)\]:hover{background-color:#c4878a14}.hover\:bg-accent:hover,.hover\:bg-accent\/30:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab, var(--color-accent) 30%, transparent)}}.hover\:bg-accent\/50:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.hover\:bg-accent\/70:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/70:hover{background-color:color-mix(in oklab, var(--color-accent) 70%, transparent)}}.hover\:bg-card:hover,.hover\:bg-card\/70:hover{background-color:var(--color-card)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-card\/70:hover{background-color:color-mix(in oklab, var(--color-card) 70%, transparent)}}.hover\:bg-danger\/10:hover{background-color:#a34e521a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-danger\/10:hover{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab, var(--color-destructive) 10%, transparent)}}.hover\:bg-destructive\/20:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.hover\:bg-ivory:hover{background-color:var(--color-ivory)}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.hover\:bg-sapphire-deep:hover{background-color:var(--color-sapphire-deep)}.hover\:bg-sapphire-glow:hover{background-color:var(--color-sapphire-glow)}.hover\:bg-secondary\/80:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--color-secondary) 80%, transparent)}}.hover\:bg-snow:hover{background-color:var(--color-snow)}.hover\:text-\[\#3b7a3b\]:hover{color:#3b7a3b}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:text-charcoal:hover{color:var(--color-charcoal)}.hover\:text-destructive:hover{color:var(--color-destructive)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-mocha:hover{color:var(--color-mocha)}.hover\:text-primary:hover,.hover\:text-primary\/80:hover{color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab, var(--color-primary) 80%, transparent)}}.hover\:text-rose-baziu:hover{color:var(--color-rose-baziu)}.hover\:text-sapphire:hover{color:var(--color-sapphire)}.hover\:text-sapphire-deep:hover{color:var(--color-sapphire-deep)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-sapphire:focus{border-color:var(--color-sapphire)}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:shadow-\[0_0_0_3px_var\(--color-sapphire-glow\)\]:focus{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--color-sapphire-glow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring\/30:focus{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-ring\/30:focus{--tw-ring-color:color-mix(in oklab, var(--color-ring) 30%, transparent)}}:is(.not-data-\[variant\=destructive\]\:focus\:\*\*\:text-accent-foreground:not([data-variant=destructive]):focus *){color:var(--color-accent-foreground)}.focus-visible\:border-destructive\/40:focus-visible{border-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:border-destructive\/40:focus-visible{border-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:bg-card:focus-visible{background-color:var(--color-card)}.focus-visible\:bg-destructive\/10:focus-visible{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:bg-destructive\/10:focus-visible{background-color:color-mix(in oklab, var(--color-destructive) 10%, transparent)}}.focus-visible\:text-destructive:focus-visible{color:var(--color-destructive)}.focus-visible\:ring-3:focus-visible,.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--color-ring)}.active\:translate-y-px:active,.active\:not-aria-\[haspopup\]\:translate-y-px:active:not([aria-haspopup]){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-input\/50:disabled{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.disabled\:bg-input\/50:disabled{background-color:color-mix(in oklab, var(--color-input) 50%, transparent)}}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}}:where([data-slot=button-team]) .in-data-\[slot\=button-team\]\:rounded-lg{border-radius:var(--radius-lg)}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.has-data-\[icon\=inline-end\]\:pr-1:has([data-icon=inline-end]){padding-right:var(--spacing)}.has-data-\[icon\=inline-end\]\:pr-1\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\[icon\=inline-end\]\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\[icon\=inline-start\]\:pl-1:has([data-icon=inline-start]){padding-left:var(--spacing)}.has-data-\[icon\=inline-start\]\:pl-1\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\[icon\=inline-start\]\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[slot\=card-description\]\:grid-rows-\[auto_auto\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\[slot\=card-footer\]\:pb-0:has([data-slot=card-footer]){padding-bottom:0}.has-\[\>img\:first-child\]\:pt-0:has(>img:first-child){padding-top:0}.aria-expanded\:bg-muted[aria-expanded=true]{background-color:var(--color-muted)}.aria-expanded\:bg-secondary[aria-expanded=true]{background-color:var(--color-secondary)}.aria-expanded\:text-foreground[aria-expanded=true]{color:var(--color-foreground)}.aria-expanded\:text-secondary-foreground[aria-expanded=true]{color:var(--color-secondary-foreground)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.aria-invalid\:aria-checked\:border-primary[aria-invalid=true][aria-checked=true]{border-color:var(--color-primary)}.data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--color-muted-foreground)}.data-\[align-trigger\=true\]\:animate-none[data-align-trigger=true]{animation:none}.data-\[position\=popper\]\:h-\(--radix-select-trigger-height\)[data-position=popper]{height:var(--radix-select-trigger-height)}.data-\[position\=popper\]\:w-full[data-position=popper]{width:100%}.data-\[position\=popper\]\:min-w-\(--radix-select-trigger-width\)[data-position=popper]{min-width:var(--radix-select-trigger-width)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-8[data-size=default]{height:calc(var(--spacing) * 8)}.data-\[size\=sm\]\:h-7[data-size=sm]{height:calc(var(--spacing) * 7)}.data-\[size\=sm\]\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\[size\=sm\]\:rounded-\[min\(var\(--radius-md\)\,10px\)\][data-size=sm]{border-radius:min(var(--radius-md), 10px)}.data-\[size\=sm\]\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\[size\=sm\]\:has-data-\[slot\=card-footer\]\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:0}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-1\.5>*)[data-slot=select-value]{gap:calc(var(--spacing) * 1.5)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--color-muted)}.data-\[variant\=line\]\:rounded-none[data-variant=line]{border-radius:0}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}@media (width>=40rem){.sm\:top-6{top:calc(var(--spacing) * 6)}.sm\:right-6{right:calc(var(--spacing) * 6)}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:ml-auto{margin-left:auto}.sm\:\!block{display:block!important}.sm\:w-28{width:calc(var(--spacing) * 28)}.sm\:w-40{width:calc(var(--spacing) * 40)}.sm\:w-48{width:calc(var(--spacing) * 48)}.sm\:w-52{width:calc(var(--spacing) * 52)}.sm\:w-56{width:calc(var(--spacing) * 56)}.sm\:w-72{width:calc(var(--spacing) * 72)}.sm\:w-auto{width:auto}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-\[1fr_1fr_auto\]{grid-template-columns:1fr 1fr auto}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-7{padding:calc(var(--spacing) * 7)}.sm\:p-9{padding:calc(var(--spacing) * 9)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\:py-12{padding-block:calc(var(--spacing) * 12)}.sm\:pb-5{padding-bottom:calc(var(--spacing) * 5)}.sm\:text-\[2\.1rem\]{font-size:2.1rem}}@media (width>=48rem){.md\:col-auto{grid-column:auto}.md\:col-span-4{grid-column:span 4/span 4}.md\:row-auto{grid-row:auto}.md\:ml-4{margin-left:calc(var(--spacing) * 4)}.md\:ml-auto{margin-left:auto}.md\:flex{display:flex}.md\:min-w-10{min-width:calc(var(--spacing) * 10)}.md\:flex-1{flex:1}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[12rem_minmax\(0\,1fr\)_auto_auto\]{grid-template-columns:12rem minmax(0,1fr) auto auto}.md\:grid-cols-\[360px_1fr\]{grid-template-columns:360px 1fr}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:gap-2{gap:calc(var(--spacing) * 2)}.md\:justify-self-auto{justify-self:auto}.md\:py-4{padding-block:calc(var(--spacing) * 4)}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (width>=64rem){.lg\:block{display:block}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[18rem_minmax\(0\,1fr\)\]{grid-template-columns:18rem minmax(0,1fr)}.lg\:grid-cols-\[320px_1fr\]{grid-template-columns:320px 1fr}.lg\:grid-cols-\[minmax\(0\,1\.15fr\)_minmax\(320px\,0\.85fr\)\]{grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_25rem\]{grid-template-columns:minmax(0,1fr) 25rem}.lg\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}.lg\:gap-20{gap:calc(var(--spacing) * 20)}.lg\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.lg\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.lg\:px-3{padding-inline:calc(var(--spacing) * 3)}}@media (width>=80rem){.xl\:inline{display:inline}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.dark\:border-input:is(.dark *){border-color:var(--color-input)}.dark\:bg-amber-950\/30:is(.dark *){background-color:#4619014d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/30:is(.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 30%, transparent)}}.dark\:bg-destructive\/20:is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/20:is(.dark *){background-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab, var(--color-input) 30%, transparent)}}.dark\:text-muted-foreground:is(.dark *){color:var(--color-muted-foreground)}@media (hover:hover){.dark\:hover\:bg-destructive\/30:is(.dark *):hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-destructive\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--color-destructive) 30%, transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--color-input) 50%, transparent)}}.dark\:hover\:bg-muted\/50:is(.dark *):hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-muted\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.dark\:hover\:text-foreground:is(.dark *):hover{color:var(--color-foreground)}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.dark\:disabled\:bg-input\/80:is(.dark *):disabled{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:disabled\:bg-input\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--color-input) 80%, transparent)}}.dark\:aria-invalid\:border-destructive\/50:is(.dark *)[aria-invalid=true]{border-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:border-destructive\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--color-destructive) 50%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.data-open\:animate-in:where([data-state=open]),.data-open\:animate-in:where([data-open]:not([data-open=false])){animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-open\:fade-in-0:where([data-state=open]),.data-open\:fade-in-0:where([data-open]:not([data-open=false])){--tw-enter-opacity:0}.data-open\:zoom-in-95:where([data-state=open]),.data-open\:zoom-in-95:where([data-open]:not([data-open=false])){--tw-enter-scale:.95}.data-closed\:animate-out:where([data-state=closed]),.data-closed\:animate-out:where([data-closed]:not([data-closed=false])){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-closed\:fade-out-0:where([data-state=closed]),.data-closed\:fade-out-0:where([data-closed]:not([data-closed=false])){--tw-exit-opacity:0}.data-closed\:zoom-out-95:where([data-state=closed]),.data-closed\:zoom-out-95:where([data-closed]:not([data-closed=false])){--tw-exit-scale:.95}.data-checked\:border-primary:where([data-state=checked]),.data-checked\:border-primary:where([data-checked]:not([data-checked=false])){border-color:var(--color-primary)}.data-checked\:bg-primary:where([data-state=checked]),.data-checked\:bg-primary:where([data-checked]:not([data-checked=false])){background-color:var(--color-primary)}.data-checked\:text-primary-foreground:where([data-state=checked]),.data-checked\:text-primary-foreground:where([data-checked]:not([data-checked=false])){color:var(--color-primary-foreground)}.dark\:data-checked\:bg-primary:is(.dark *):where([data-state=checked]),.dark\:data-checked\:bg-primary:is(.dark *):where([data-checked]:not([data-checked=false])){background-color:var(--color-primary)}.data-disabled\:pointer-events-none:where([data-disabled=true]),.data-disabled\:pointer-events-none:where([data-disabled]:not([data-disabled=false])){pointer-events:none}.data-disabled\:opacity-50:where([data-disabled=true]),.data-disabled\:opacity-50:where([data-disabled]:not([data-disabled=false])){opacity:.5}.data-active\:bg-background:where([data-state=active]),.data-active\:bg-background:where([data-active]:not([data-active=false])){background-color:var(--color-background)}.data-active\:text-foreground:where([data-state=active]),.data-active\:text-foreground:where([data-active]:not([data-active=false])){color:var(--color-foreground)}.dark\:data-active\:border-input:is(.dark *):where([data-state=active]),.dark\:data-active\:border-input:is(.dark *):where([data-active]:not([data-active=false])){border-color:var(--color-input)}.dark\:data-active\:bg-input\/30:is(.dark *):where([data-state=active]),.dark\:data-active\:bg-input\/30:is(.dark *):where([data-active]:not([data-active=false])){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-active\:bg-input\/30:is(.dark *):where([data-state=active]),.dark\:data-active\:bg-input\/30:is(.dark *):where([data-active]:not([data-active=false])){background-color:color-mix(in oklab, var(--color-input) 30%, transparent)}}.dark\:data-active\:text-foreground:is(.dark *):where([data-state=active]),.dark\:data-active\:text-foreground:is(.dark *):where([data-active]:not([data-active=false])){color:var(--color-foreground)}.data-horizontal\:h-px:where([data-orientation=horizontal]){height:1px}.data-horizontal\:w-full:where([data-orientation=horizontal]){width:100%}.data-horizontal\:flex-col:where([data-orientation=horizontal]){flex-direction:column}.data-vertical\:w-px:where([data-orientation=vertical]){width:1px}.data-vertical\:self-stretch:where([data-orientation=vertical]){align-self:stretch}.\[\&_\.bubble-content\]\:line-through .bubble-content{text-decoration-line:line-through}.\[\&_button\]\:\!border-frost button{border-color:var(--color-frost)!important}.\[\&_button\]\:\!bg-snow button{background-color:var(--color-snow)!important}.\[\&_button\]\:\!fill-chocolate button{fill:var(--color-chocolate)!important}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\.border-b\]\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}:is(.\*\:\[a\]\:underline>*):is(a){text-decoration-line:underline}:is(.\*\:\[a\]\:underline-offset-3>*):is(a){text-underline-offset:3px}@media (hover:hover){.\[a\]\:hover\:bg-primary\/80:is(a):hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.\[a\]\:hover\:bg-primary\/80:is(a):hover{background-color:color-mix(in oklab, var(--color-primary) 80%, transparent)}}:is(.\*\:\[a\]\:hover\:text-foreground>*):is(a):hover{color:var(--color-foreground)}}:is(.\*\:\[img\:first-child\]\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}:is(.\*\:\[img\:last-child\]\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--background:#f4f1eb;--foreground:#342820;--card:#fff;--card-foreground:#342820;--popover:#fff;--popover-foreground:#342820;--primary:#3d7899;--primary-foreground:#fff;--secondary:#faf8f4;--secondary-foreground:#342820;--muted:#faf8f4;--muted-foreground:#776a60;--accent:#3d78991f;--accent-foreground:#2f617d;--destructive:#a34e52;--border:#ded7cd;--input:#ded7cd;--ring:#3d7899;--chart-1:#3d7899;--chart-2:#c4878a;--chart-3:#7a6555;--chart-4:#d4cab8;--chart-5:#6ba3c2;--radius:16px;--sidebar:#faf8f4;--sidebar-foreground:#342820;--sidebar-primary:#3d7899;--sidebar-primary-foreground:#fff;--sidebar-accent:#3d78991f;--sidebar-accent-foreground:#2f617d;--sidebar-border:#ded7cd;--sidebar-ring:#3d7899}:root.dark{--color-cream:#1a140f;--color-ivory:#211a13;--color-frost:#3b2e24;--color-fawn:#5c4a3d;--color-chocolate:#f5f0e8;--color-charcoal:#faf8f4;--color-mocha:#c4b3a0;--color-mocha-light:#a89789;--color-sapphire:#7bb4d2;--color-sapphire-deep:#5e9bba;--color-sapphire-light:#a0cee3;--color-sapphire-glow:#7bb4d22e;--color-rose-baziu:#d89a9d;--color-snow:#2a211a;--color-success:#75b99a;--color-warning:#d2a15d;--color-danger:#e28a8e;--color-info:#8ac3df;--shadow-baziu-sm:0 1px 3px #0006;--shadow-baziu-md:0 4px 12px #00000080;--shadow-baziu-lg:0 8px 30px #0009;--background:#1a140f;--foreground:#f5f0e8;--card:#2a211a;--card-foreground:#f5f0e8;--popover:#2a211a;--popover-foreground:#f5f0e8;--primary:#7bb4d2;--primary-foreground:#0f0a07;--secondary:#211a13;--secondary-foreground:#f5f0e8;--muted:#211a13;--muted-foreground:#a89789;--accent:#7bb4d22e;--accent-foreground:#a0cee3;--destructive:#d87878;--border:#3b2e24;--input:#3b2e24;--ring:#7bb4d2;--chart-1:#7bb4d2;--chart-2:#d89a9d;--chart-3:#c4b3a0;--chart-4:#5c4a3d;--chart-5:#a0cee3;--sidebar:#1f1812;--sidebar-foreground:#f5f0e8;--sidebar-primary:#7bb4d2;--sidebar-primary-foreground:#0f0a07;--sidebar-accent:#7bb4d22e;--sidebar-accent-foreground:#a0cee3;--sidebar-border:#3b2e24;--sidebar-ring:#7bb4d2}::selection{background:#3d78993d}@supports (color:color-mix(in lab, red, red)){::selection{background:color-mix(in srgb, var(--color-sapphire) 24%, transparent)}}::selection{color:var(--color-charcoal)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid var(--color-sapphire);outline-offset:2px}.teamPolicy-flow{--xy-background-color:var(--color-ivory);--xy-node-color:var(--color-chocolate);--xy-node-border:1px solid var(--color-frost);--xy-edge-stroke:var(--color-sapphire);--xy-edge-stroke-selected:var(--color-sapphire-deep);--xy-connectionline-stroke:var(--color-rose-baziu);--xy-selection-background-color:var(--color-sapphire-glow);--xy-selection-border:1px dotted var(--color-sapphire);--xy-controls-button-background-color:var(--color-snow);--xy-controls-button-background-color-hover:var(--color-ivory);--xy-controls-button-color:var(--color-chocolate);--xy-controls-button-border-color:var(--color-frost);--xy-minimap-background-color:var(--color-snow)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={userInput:!0,userOutput:!0,outsideTeamInput:!1,outsideTeamOutput:!1,peerDefault:`allow_all`},t={kind:`user`},n={kind:`outside_team`};function r(e){switch(e.kind){case`user`:return`user`;case`outside_team`:return`outside_team`;case`member_slot`:return`slot:${e.slotId}`;case`agent`:return`agent:${e.agentId}`}}function i(e){return e===`user`?t:e===`outside_team`?n:e.startsWith(`slot:`)&&e.length>5?{kind:`member_slot`,slotId:e.slice(5)}:e.startsWith(`agent:`)&&e.length>6?{kind:`agent`,agentId:e.slice(6)}:null}function a(e,t){return r(e)===r(t)}function o(e,t){return`${r(e)}>${r(t)}`}function s(e,t){return`edge:${o(e,t)}`}function c(e){return e.kind===`member_slot`||e.kind===`agent`}function l(e,t){return!(a(e,t)||!c(e)&&!c(t)||e.kind===`member_slot`&&t.kind===`agent`||e.kind===`agent`&&t.kind===`member_slot`)}function u(e,t,n){let r=o(t,n);return e.edges.some(e=>o(e.source,e.target)===r)}function d(e,t,n){return!l(t,n)||u(e,t,n)?e:{...e,edges:[...e.edges,{id:s(t,n),source:t,target:n}]}}function f(e,t,n){let r=o(t,n),i=e.edges.filter(e=>o(e.source,e.target)!==r);return i.length===e.edges.length?e:{...e,edges:i}}function p(e,t){return e.kind===`live`?{kind:`agent`,agentId:t.agentId??`prototype:${t.slotId}`}:{kind:`member_slot`,slotId:t.slotId}}function m(e,t){if(t.kind===`member_slot`)return e.members.find(e=>e.slotId===t.slotId);if(t.kind===`agent`)return e.members.find(e=>(e.agentId??`prototype:${e.slotId}`)===t.agentId)}function h(){return{version:1,edges:[]}}function g(e,t,n){return d(d(e,t,n),n,t)}function _(e,r,i){let o=r.map(t=>p({kind:e},t)),s=h();if(i===`blank`)return s;if(i===`open_team`){for(let e=0;e<o.length;e++){let r=o[e];if(r){s=g(s,t,r),s=g(s,n,r);for(let t=e+1;t<o.length;t++){let e=o[t];e&&(s=g(s,r,e))}}}return s}if(i===`coordinator`){let e=o[Math.max(0,r.findIndex(e=>e.role===`coordinator`))];if(!e)return s;s=g(s,t,e);for(let t of o)t&&!a(t,e)&&(s=g(s,e,t));return s}let c=[t,...[`planner`,`worker`,`reviewer`,`reporter`].map(t=>{let n=r.find(e=>e.role===t);return n?p({kind:e},n):void 0}).filter(e=>!!e),t];for(let e=0;e<c.length-1;e++){let t=c[e],n=c[e+1];t&&n&&!a(t,n)&&(s=d(s,t,n))}return s}function v(e,r,i,a){let o=p(r,i),s=e,c=[[a.userInput,t,o],[a.userOutput,o,t],[a.outsideTeamInput,n,o],[a.outsideTeamOutput,o,n]];for(let[e,t,n]of c)s=e?d(s,t,n):f(s,t,n);if(a.peerDefault===`inherit_team_policy`)return s;for(let e of r.members){if(e.slotId===i.slotId)continue;let t=p(r,e);a.peerDefault===`allow_all`?s=g(s,o,t):(s=f(s,o,t),s=f(s,t,o))}return s}export{v as a,i as c,u as d,l as f,d as i,r as l,n,_ as o,f as p,t as r,p as s,e as t,m as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{m as i}from"./index-VdURSoM4.js";import{n as a,r as o}from"./Page-CwNuDhWz.js";import{t as s}from"./Button-ByiV6fpd.js";import{t as c}from"./TemplatesTabs-CAYY03F5.js";var l=e(n()),u=t();function d(){let e=i.useLoaderData(),t=r();return(0,u.jsxs)(o,{size:`wide`,children:[(0,u.jsx)(a,{eyebrow:`Templates`,title:`Team templates`,description:`Create revisioned rosters with stable slots and a reusable communication policy.`}),(0,u.jsx)(c,{}),(0,u.jsx)(f,{onCreated:()=>t.invalidate()}),(0,u.jsx)(`div`,{className:`overflow-x-auto`,children:(0,u.jsxs)(`table`,{children:[(0,u.jsx)(`thead`,{children:(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`th`,{children:`id`}),(0,u.jsx)(`th`,{children:`name`}),(0,u.jsx)(`th`,{children:`slots`}),(0,u.jsx)(`th`,{children:`revision`}),(0,u.jsx)(`th`,{children:`source state`})]})}),(0,u.jsxs)(`tbody`,{children:[e.map(e=>(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`td`,{children:(0,u.jsx)(`a`,{href:`/templates/teams/${encodeURIComponent(e.id)}`,children:(0,u.jsx)(`code`,{children:e.id})})}),(0,u.jsx)(`td`,{children:e.name}),(0,u.jsx)(`td`,{children:e.slotCount}),(0,u.jsx)(`td`,{children:e.currentRevision}),(0,u.jsx)(`td`,{children:e.deletedAt?`deleted source`:`canonical`})]},e.id)),e.length===0&&(0,u.jsx)(`tr`,{children:(0,u.jsx)(`td`,{colSpan:5,className:`muted`,children:`No team templates yet.`})})]})]})})]})}function f({onCreated:e}){let[t,n]=(0,l.useState)(``),[r,i]=(0,l.useState)(``),[a,o]=(0,l.useState)(null),[c,d]=(0,l.useState)(!1);async function f(a){a.preventDefault(),d(!0),o(null);try{let a=await fetch(`/api/team-templates`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.trim(),name:r.trim()})});if(!a.ok)throw Error((await a.json().catch(()=>null))?.error??a.statusText);n(``),i(``),await e()}catch(e){o(e.message)}finally{d(!1)}}return(0,u.jsxs)(`form`,{className:`card`,onSubmit:f,children:[(0,u.jsx)(`h2`,{className:`text-xl`,children:`new team template`}),a&&(0,u.jsx)(`p`,{className:`err`,children:a}),(0,u.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,u.jsxs)(`label`,{children:[`id`,(0,u.jsx)(`input`,{required:!0,value:t,onChange:e=>n(e.target.value),placeholder:`review-team`})]}),(0,u.jsxs)(`label`,{children:[`name`,(0,u.jsx)(`input`,{required:!0,value:r,onChange:e=>i(e.target.value),placeholder:`Review team`})]})]}),(0,u.jsx)(s,{variant:`primary`,type:`submit`,disabled:c,children:c?`creating…`:`create team template`})]})}export{d as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{S as i}from"./index-VdURSoM4.js";import{a,i as o,n as s,r as c,t as l}from"./Page-CwNuDhWz.js";import{t as u}from"./Button-ByiV6fpd.js";var d=e(n()),f=t();function p(){let{teams:e,memberCounts:t,policies:n,readiness:d}=i.useLoaderData(),p=r();async function h(e){if(!confirm(`remove this team registration?`))return;let t=n[e]?.revision;if(!t)return;let r=await fetch(`/api/teams/${encodeURIComponent(e)}?expectedTeamPolicyRevision=${t}`,{method:`DELETE`});if(!r.ok&&r.status!==204){alert(r.statusText);return}await p.invalidate()}return(0,f.jsxs)(c,{size:`wide`,children:[(0,f.jsx)(s,{eyebrow:`Workspace`,title:`Teams`,description:`Each Team owns one workspace, one live membership roster, and one effective communication policy. Every agent belongs to exactly one Team.`}),(0,f.jsx)(o,{title:`Policy enforcement`,description:`Management contract v${d.contractVersion} is ready for this daemon.`,actions:(0,f.jsx)(a,{variant:d.enforcementActive?`success`:`warning`,children:d.enforcementActive?`Enforcement on`:`Enforcement off`}),"aria-label":`Team Policy enforcement readiness`,children:(0,f.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:d.enforcementActive?`Communication boundaries are currently enforcing each Team policy.`:(0,f.jsxs)(f.Fragment,{children:[`Set `,(0,f.jsx)(`code`,{children:`BAZILION_TEAM_POLICY_ENFORCEMENT=on`}),` and restart the daemon to enforce Team policies.`]})})}),(0,f.jsx)(m,{onRegistered:()=>p.invalidate()}),(0,f.jsx)(o,{title:`Registered teams`,description:`Open a Team to manage its context, members, shared memory, and policy.`,children:e.length===0?(0,f.jsx)(l,{title:`No teams registered`,description:`Register a Team above to create a workspace for your agents.`}):(0,f.jsx)(`div`,{className:`overflow-x-auto`,children:(0,f.jsxs)(`table`,{className:`min-w-[820px]`,children:[(0,f.jsx)(`thead`,{children:(0,f.jsxs)(`tr`,{children:[(0,f.jsx)(`th`,{children:`ID`}),(0,f.jsx)(`th`,{children:`Name`}),(0,f.jsx)(`th`,{children:`Members`}),(0,f.jsx)(`th`,{children:`Policy`}),(0,f.jsx)(`th`,{children:`Baseline`}),(0,f.jsx)(`th`,{children:(0,f.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,f.jsx)(`tbody`,{children:e.map(e=>{let r=t[e.id]??0,i=n[e.id];return(0,f.jsxs)(`tr`,{children:[(0,f.jsx)(`td`,{children:(0,f.jsx)(`code`,{children:e.id})}),(0,f.jsx)(`td`,{children:(0,f.jsx)(`a`,{href:`/teams/${e.id}`,children:e.name})}),(0,f.jsx)(`td`,{children:r}),(0,f.jsx)(`td`,{children:(0,f.jsx)(`a`,{href:`/teams/${e.id}/policy`,children:i?`r${i.revision} · ${i.edges} edges`:`Unavailable`})}),(0,f.jsx)(`td`,{children:i?.baseline??`None`}),(0,f.jsx)(`td`,{children:(0,f.jsx)(`div`,{className:`flex justify-end`,children:r===0?(0,f.jsx)(u,{variant:`danger`,onClick:()=>h(e.id),children:`Remove`}):(0,f.jsx)(a,{variant:`neutral`,title:`${r} agent(s) belong to this Team`,children:`In use`})})})]},e.id)})})]})})})]})}function m({onRegistered:e}){let[t,n]=(0,d.useState)(``),[r,i]=(0,d.useState)(``),[a,s]=(0,d.useState)(``),[c,l]=(0,d.useState)(null),[p,m]=(0,d.useState)(!1);async function h(o){if(o.preventDefault(),l(null),!t.trim()){l(`id is required`);return}m(!0);try{let o=await fetch(`/api/teams`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.trim(),name:r.trim()||void 0,link:a.trim()||void 0})});if(!o.ok){let e=await o.json().catch(()=>null);throw Error(e?.error??o.statusText)}n(``),i(``),s(``),e()}catch(e){l(e.message)}finally{m(!1)}}return(0,f.jsx)(o,{title:`Register a team`,description:(0,f.jsxs)(f.Fragment,{children:[`Teams live under `,(0,f.jsx)(`code`,{children:`~/.bazilion/teams/<slug>/`}),`. Link an existing project directory or leave the target blank to create a fresh workspace.`]}),children:(0,f.jsxs)(`form`,{onSubmit:h,children:[c&&(0,f.jsx)(`div`,{className:`err`,children:c}),(0,f.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,f.jsxs)(`label`,{children:[`ID (slug)`,(0,f.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),required:!0,placeholder:`my-project`})]}),(0,f.jsxs)(`label`,{children:[`Name`,(0,f.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`My project`})]}),(0,f.jsxs)(`label`,{className:`sm:col-span-2`,children:[`Link target (optional, absolute path)`,(0,f.jsx)(`input`,{value:a,onChange:e=>s(e.target.value),placeholder:`/home/user/projects/my-project`})]})]}),(0,f.jsx)(`div`,{className:`mt-4`,children:(0,f.jsx)(u,{variant:`primary`,type:`submit`,disabled:p,children:p?`Registering…`:`Register team`})})]})})}export{p as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{a as i}from"./index-VdURSoM4.js";import{t as a}from"./Button-ByiV6fpd.js";import{t as o}from"./ConfigPage-BCwfgyjD.js";var s=e(n()),c=t();function l(){let e=i.useLoaderData(),t=r(),[n,l]=(0,s.useState)(``),[h,g]=(0,s.useState)(e.chatId),[_,v]=(0,s.useState)(!1),[y,b]=(0,s.useState)(null),[x,S]=(0,s.useState)(!1),[C,w]=(0,s.useState)(null),[T,E]=(0,s.useState)(!1);async function D(e){e.preventDefault(),v(!0),b(null),S(!1);try{let e=await fetch(`/api/config/telegram`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({botToken:n,chatId:h})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`${e.status} ${e.statusText}`)}l(``),S(!0),await t.invalidate()}catch(e){b(e.message)}finally{v(!1)}}async function O(){if(confirm(`Clear the saved Telegram credentials?`))try{await fetch(`/api/config/telegram`,{method:`DELETE`}),l(``),g(``),w(null),S(!1),b(null),await t.invalidate()}catch(e){b(e.message)}}async function k(){E(!0),w(null);try{w(await(await fetch(`/api/config/telegram/health`)).json())}catch(e){w({configured:!0,preflight:null,error:{step:`getMe`,message:e.message},polling:null})}finally{E(!1)}}return(0,c.jsxs)(o,{active:`integrations`,title:`Telegram`,description:`Connect one forum-supergroup bot with one topic per agent, so conversations stay reachable from your phone.`,size:`narrow`,children:[(0,c.jsx)(f,{}),e.migratedChatId&&(0,c.jsx)(d,{toChatId:e.migratedChatId}),(0,c.jsxs)(`section`,{className:`rounded-lg border bg-card p-5`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wide text-muted-foreground mb-3`,children:`Credentials`}),e.configured&&(0,c.jsxs)(`p`,{className:`text-xs text-success mb-3`,children:[`✓ Stored: `,(0,c.jsx)(`code`,{className:`font-mono`,children:e.botTokenPreview}),` `,e.chatId&&(0,c.jsxs)(c.Fragment,{children:[`· chat `,(0,c.jsx)(`code`,{className:`font-mono`,children:e.chatId})]})]}),(0,c.jsxs)(`form`,{onSubmit:D,className:`space-y-3`,children:[(0,c.jsxs)(`label`,{className:`block`,children:[(0,c.jsx)(`span`,{className:`block text-sm font-medium mb-1`,children:`Bot token`}),(0,c.jsx)(`input`,{type:`password`,autoComplete:`off`,value:n,onChange:e=>l(e.target.value),placeholder:e.configured?`(leave blank to keep stored value)`:`1234567890:ABC...`,className:`w-full rounded-md border bg-background px-2 py-1.5 font-mono text-sm outline-none focus:ring-2 focus:ring-ring/30`,required:!e.configured}),(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[`From @BotFather → /newbot. Disable Privacy Mode in `,(0,c.jsx)(`em`,{children:`Bot Settings → Team Privacy → Turn off`}),`.`]})]}),(0,c.jsxs)(`label`,{className:`block`,children:[(0,c.jsx)(`span`,{className:`block text-sm font-medium mb-1`,children:`Supergroup chat ID`}),(0,c.jsx)(`input`,{type:`text`,value:h,onChange:e=>g(e.target.value),placeholder:`-1001234567890`,className:`w-full rounded-md border bg-background px-2 py-1.5 font-mono text-sm outline-none focus:ring-2 focus:ring-ring/30`,required:!0}),(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[`Forum-enabled supergroup the bot is admin in (with`,` `,(0,c.jsx)(`code`,{className:`font-mono`,children:`can_manage_topics`}),`).`]})]}),(0,c.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 pt-1`,children:[(0,c.jsx)(a,{variant:`primary`,type:`submit`,disabled:_,children:_?`saving…`:`save credentials`}),e.configured&&(0,c.jsx)(a,{variant:`danger`,onClick:O,children:`clear credentials`}),x&&(0,c.jsx)(`span`,{className:`text-xs text-success`,children:`saved ✓`}),y&&(0,c.jsxs)(`span`,{className:`text-xs text-danger`,children:[`error: `,y]})]})]})]}),(0,c.jsxs)(`section`,{className:`rounded-lg border bg-card p-5`,children:[(0,c.jsxs)(`div`,{className:`mb-3 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wide text-muted-foreground`,children:`Preflight checks`}),(0,c.jsx)(a,{variant:`ghost`,onClick:k,disabled:T||!e.configured,children:T?`checking…`:`run preflight`})]}),!e.configured&&(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:`Save credentials above first.`}),e.configured&&!C&&!T&&(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground italic`,children:[`Click `,(0,c.jsx)(`em`,{children:`run preflight`}),` to validate the stored credentials against the Telegram Bot API.`]}),C&&(0,c.jsx)(m,{health:C}),C?.polling&&(0,c.jsx)(p,{polling:C.polling})]}),e.configured&&(0,c.jsx)(u,{})]})}function u(){let[e,t]=(0,s.useState)(null),[n,r]=(0,s.useState)(``),[i,o]=(0,s.useState)(``),[l,u]=(0,s.useState)(!1),[d,f]=(0,s.useState)(null);async function p(){try{let e=await fetch(`/api/config/telegram/acl`);if(!e.ok)throw Error(e.statusText);t(await e.json())}catch(e){f(e.message)}}(0,s.useEffect)(()=>{p()},[]);async function m(e){e.preventDefault();let t=Number(n);if(!Number.isInteger(t)){f(`user id must be an integer`);return}u(!0),f(null);try{let e=await fetch(`/api/config/telegram/acl`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({userId:t,label:i.trim()||null})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??e.statusText)}r(``),o(``),await p()}catch(e){f(e.message)}finally{u(!1)}}async function h(e){f(null);try{let t=await fetch(`/api/config/telegram/acl/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??t.statusText)}await p()}catch(e){f(e.message)}}return(0,c.jsxs)(`section`,{className:`rounded-lg border bg-card p-5`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wide text-muted-foreground mb-1`,children:`Access control`}),(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:[`Allowlisted Telegram users can use the bot (commands + chat). While the list is empty the bot is open and the first person to message it becomes owner. Users find their id via`,` `,(0,c.jsx)(`code`,{className:`font-mono`,children:`/whoami`}),`.`]}),e===null?(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:`loading…`}):e.length===0?(0,c.jsx)(`p`,{className:`text-xs text-warning mb-3`,children:`Open — no allowlist yet. The first user to message the bot claims owner.`}):(0,c.jsx)(`ul`,{className:`mb-3 space-y-1 text-sm`,children:e.map(e=>(0,c.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2`,children:[(0,c.jsx)(`code`,{className:`font-mono`,children:e.userId}),(0,c.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.label??(e.username?`@${e.username}`:`—`),` · `,e.role]}),e.role!==`owner`&&(0,c.jsx)(`button`,{type:`button`,onClick:()=>void h(e.userId),className:`ghost-btn text-xs text-rose-baziu`,children:`remove`})]},e.userId))}),(0,c.jsxs)(`form`,{onSubmit:m,className:`flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center`,children:[(0,c.jsx)(`input`,{value:n,onChange:e=>r(e.target.value),placeholder:`user id`,className:`w-full rounded-md border bg-background px-2 py-1 font-mono text-sm sm:w-28`}),(0,c.jsx)(`input`,{value:i,onChange:e=>o(e.target.value),placeholder:`label (optional)`,className:`w-full rounded-md border bg-background px-2 py-1 text-sm sm:w-40`}),(0,c.jsx)(a,{variant:`ghost`,type:`submit`,disabled:l,children:`add`}),d&&(0,c.jsx)(`span`,{className:`text-xs text-danger`,children:d})]})]})}function d({toChatId:e}){let[t,n]=(0,s.useState)(!1),[r,i]=(0,s.useState)(null);async function o(){n(!0),i(null);try{let e=await fetch(`/api/config/telegram/reconnect`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??e.statusText)}window.location.reload()}catch(e){i(e.message),n(!1)}}return(0,c.jsxs)(`div`,{className:`rounded-md border-2 border-danger/25 bg-danger/10 px-4 py-3 text-sm`,children:[(0,c.jsx)(`div`,{className:`font-semibold text-danger mb-1`,children:`Supergroup chat id changed`}),(0,c.jsxs)(`p`,{className:`text-danger mb-2`,children:[`Telegram migrated this supergroup to a new chat id (`,(0,c.jsx)(`code`,{className:`font-mono`,children:e}),`). The bot is still pointed at the old id. Reconnect to repoint it and re-create the `,(0,c.jsx)(`code`,{className:`font-mono`,children:`⚙ bazilion`}),` `,`service chat in the new team. Agent topic bindings will reconcile on next use.`]}),(0,c.jsx)(a,{variant:`primary`,onClick:o,disabled:t,children:t?`reconnecting…`:`Reconnect to ${e}`}),r&&(0,c.jsx)(`span`,{className:`ml-3 text-xs text-danger`,children:r})]})}function f(){return(0,c.jsxs)(`div`,{className:`rounded-md border-2 border-warning/25 bg-warning/10 px-4 py-3 text-sm`,children:[(0,c.jsx)(`div`,{className:`font-semibold text-warning mb-1`,children:`Step 2 of the rollout`}),(0,c.jsxs)(`p`,{className:`text-warning`,children:[`The bot polls Telegram and creates the `,(0,c.jsx)(`code`,{className:`font-mono`,children:`⚙ bazilion`}),` `,`service chat on first start. Inbound messages are logged but not yet routed to agents —`,` `,`slash commands and per-agent topics ship in the next release. Outbound from agents ships after that.`]})]})}function p({polling:e}){let t=e.startedAt?new Date(e.startedAt).toISOString():null,n=e.lastSuccessfulPollAt?new Date(e.lastSuccessfulPollAt).toISOString():null;return(0,c.jsxs)(`div`,{className:`mt-4 rounded-md border bg-muted/30 px-3 py-2 text-xs space-y-1`,children:[(0,c.jsx)(`p`,{className:`font-semibold uppercase tracking-wide text-muted-foreground`,children:`Polling state`}),(0,c.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 font-mono`,children:[(0,c.jsx)(`span`,{className:e.running?`text-success`:`text-danger`,children:e.running?`running`:`stopped`}),(0,c.jsx)(`span`,{className:e.activated?`text-success`:`text-warning`,children:e.activated?`activated`:`awaiting activation`}),e.lastUpdateId!==null&&(0,c.jsxs)(`span`,{children:[`last update `,e.lastUpdateId]}),t&&(0,c.jsxs)(`span`,{children:[`started `,t]}),n&&(0,c.jsxs)(`span`,{children:[`last poll `,n]})]}),e.error&&(0,c.jsxs)(`p`,{className:`text-danger`,children:[`error: `,e.error]})]})}function m({health:e}){if(e.error)return(0,c.jsxs)(`div`,{className:`rounded-md border border-danger/25 bg-danger/10 px-3 py-2 text-sm`,children:[(0,c.jsxs)(`p`,{className:`font-semibold text-danger`,children:[`Failed at `,(0,c.jsx)(`code`,{className:`font-mono`,children:e.error.step})]}),(0,c.jsx)(`p`,{className:`text-danger mt-1`,children:e.error.message}),g(e.error.step)]});if(!e.preflight)return(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:`No preflight data.`});let t=e.preflight;return(0,c.jsxs)(`ul`,{className:`space-y-1.5`,children:[(0,c.jsxs)(h,{ok:t.botUsername.length>0,label:`Bot identity`,children:[`@`,t.botUsername]}),(0,c.jsx)(h,{ok:t.chatTitle.length>0,label:`Supergroup reachable`,children:t.chatTitle}),(0,c.jsx)(h,{ok:t.isForum,label:`Forum topics enabled`,children:t.isForum?`is_forum: true`:`is_forum: false — the supergroup owner must enable Topics in team settings`}),(0,c.jsx)(h,{ok:t.hasManageTopics,label:`Bot has can_manage_topics`,children:t.hasManageTopics?`admin with can_manage_topics`:`promote the bot to admin in the supergroup with the "Manage topics" permission`}),(0,c.jsx)(h,{ok:t.privacyModeOff,label:`Privacy Mode is OFF`,children:t.privacyModeOff?`can_read_all_group_messages: true`:`BotFather → /mybots → select bot → Bot Settings → Team Privacy → Turn off`})]})}function h({ok:e,label:t,children:n}){return(0,c.jsxs)(`li`,{className:`flex items-start gap-2 text-sm`,children:[(0,c.jsx)(`span`,{className:`mt-0.5 inline-flex h-4 w-4 items-center justify-center rounded-full text-[10px] font-bold leading-none ${e?`bg-success/10 text-success`:`bg-danger/10 text-danger`}`,"aria-hidden":!0,children:e?`✓`:`✕`}),(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`span`,{className:`font-medium`,children:t}),(0,c.jsx)(`span`,{className:`ml-2 text-xs ${e?`text-muted-foreground`:`text-danger`}`,children:n})]})]})}function g(e){switch(e){case`getMe`:return(0,c.jsx)(`p`,{className:`text-xs text-danger mt-1`,children:`The token is invalid or revoked. Re-issue with @BotFather → /token, or paste a fresh one above.`});case`getChat`:return(0,c.jsx)(`p`,{className:`text-xs text-danger mt-1`,children:`The chat id either doesn't exist, points at a basic team (not a supergroup), or the bot isn't a member. Forward any message from the supergroup to the bot to double-check the id, then add the bot to the team.`});case`getChatMember`:return(0,c.jsx)(`p`,{className:`text-xs text-danger mt-1`,children:`The bot is in the chat but the membership lookup failed. Usually means the bot was kicked or the chat id was migrated — confirm the bot is still in the supergroup.`})}}export{l as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{_ as i}from"./index-VdURSoM4.js";import{t as a}from"./ConfigPage-BCwfgyjD.js";var o=e(n()),s=t();function c(e){return new Date(e).toISOString().slice(0,16).replace(`T`,` `)}function l(){let{tokens:e}=i.useLoaderData(),{all:t}=i.useSearch(),n=t===`1`,l=r(),[u,d]=(0,o.useState)(``),[f,p]=(0,o.useState)(null),[m,h]=(0,o.useState)(null),[g,_]=(0,o.useState)(!1);async function v(e){e.preventDefault(),h(null),_(!0);try{let e=await fetch(`/api/tokens`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({label:u})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`${e.status} ${e.statusText}`)}p((await e.json()).token),d(``),await l.invalidate()}catch(e){h(e.message)}finally{_(!1)}}async function y(e){await fetch(`/api/tokens/${e}`,{method:`DELETE`}),await l.invalidate()}return(0,s.jsxs)(a,{active:`tokens`,title:`API tokens`,description:(0,s.jsxs)(s.Fragment,{children:[`Manage per-client credentials for the HTTP API and CLI. The`,` `,(0,s.jsx)(`code`,{className:`font-mono`,children:`bootstrap`}),` token from`,` `,(0,s.jsx)(`code`,{className:`font-mono`,children:`~/.bazilion/auth.json`}),` remains protected; mint separate credentials for mobile, LAN, and remote clients.`]}),children:[(0,s.jsxs)(`section`,{className:`rounded-lg border bg-card p-5`,children:[(0,s.jsx)(`h3`,{className:`font-serif text-xl mb-3`,children:`Mint a new token`}),(0,s.jsxs)(`form`,{onSubmit:v,className:`mb-3 flex flex-col items-stretch gap-2 sm:flex-row sm:items-end`,children:[(0,s.jsxs)(`label`,{className:`w-full text-sm sm:w-auto`,children:[`Label`,(0,s.jsx)(`input`,{type:`text`,value:u,onChange:e=>d(e.target.value),required:!0,placeholder:`e.g. laptop-tailscale`,autoComplete:`off`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 text-sm sm:w-72`})]}),(0,s.jsx)(`button`,{type:`submit`,disabled:g,className:`rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50`,children:g?`creating…`:`create`})]}),f&&(0,s.jsxs)(`div`,{className:`rounded-md border border-warning/25 bg-warning/10 p-3`,children:[(0,s.jsx)(`p`,{className:`text-xs text-warning mb-1`,children:`copy this token now — it is not recoverable later.`}),(0,s.jsx)(`pre`,{className:`font-mono text-xs whitespace-pre-wrap break-all`,children:f})]}),m&&(0,s.jsx)(`p`,{className:`text-sm text-danger`,children:m})]}),(0,s.jsx)(`div`,{children:(0,s.jsxs)(`label`,{className:`text-sm flex items-center gap-2`,children:[(0,s.jsx)(`input`,{type:`checkbox`,checked:n,onChange:e=>{window.location.assign(e.target.checked?`/config/tokens?all=1`:`/config/tokens`)}}),`show revoked`]})}),(0,s.jsx)(`div`,{className:`overflow-x-auto`,children:(0,s.jsxs)(`table`,{className:`w-full min-w-[720px] text-sm`,children:[(0,s.jsx)(`thead`,{className:`text-left text-muted-foreground border-b`,children:(0,s.jsxs)(`tr`,{children:[(0,s.jsx)(`th`,{className:`py-2`,children:`label`}),(0,s.jsx)(`th`,{children:`id`}),(0,s.jsx)(`th`,{children:`state`}),(0,s.jsx)(`th`,{children:`created`}),(0,s.jsx)(`th`,{children:`last used`}),(0,s.jsx)(`th`,{})]})}),(0,s.jsxs)(`tbody`,{children:[e.length===0&&(0,s.jsx)(`tr`,{children:(0,s.jsx)(`td`,{colSpan:6,className:`py-6 text-center text-muted-foreground italic`,children:`no tokens yet — mint one above`})}),e.map(e=>{let t=e.label===`bootstrap`;return(0,s.jsxs)(`tr`,{className:`border-b last:border-0 hover:bg-accent/30`,children:[(0,s.jsxs)(`td`,{className:`py-2`,children:[e.label,t&&(0,s.jsx)(`span`,{className:`ml-2 text-[0.7em] uppercase tracking-wide text-muted-foreground`,children:`auth.json`})]}),(0,s.jsx)(`td`,{children:(0,s.jsx)(`code`,{className:`font-mono text-xs`,children:e.id})}),(0,s.jsx)(`td`,{children:e.revokedAt?(0,s.jsx)(`span`,{className:`text-muted-foreground`,children:`revoked`}):(0,s.jsx)(`span`,{className:`text-success`,children:`active`})}),(0,s.jsx)(`td`,{className:`text-muted-foreground text-xs`,children:c(e.createdAt)}),(0,s.jsx)(`td`,{className:`text-muted-foreground text-xs`,children:e.lastUsedAt?c(e.lastUsedAt):`(never)`}),(0,s.jsx)(`td`,{children:!e.revokedAt&&!t&&(0,s.jsx)(`button`,{type:`button`,onClick:()=>y(e.id),className:`rounded-md border px-2 py-1 text-xs text-danger hover:bg-danger/10`,children:`revoke`})})]},e.id)})]})]})})]})}export{l as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{t as n}from"./react-3W8R1pOO.js";import{d as r}from"./preload-helper-mNuBjNXU.js";import{i}from"./index-VdURSoM4.js";import{r as a}from"./Page-CwNuDhWz.js";import{t as o}from"./AgentTabs-B3hq5a3e.js";var s=e(n()),c=t();function l(){let{resolved:e,triggers:t}=i.useLoaderData(),n=r();async function s(e){await fetch(`/api/triggers/${e.id}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:!e.enabled})}),await n.invalidate()}async function l(e){confirm(`delete this trigger?`)&&(await fetch(`/api/triggers/${e}`,{method:`DELETE`}),await n.invalidate())}return(0,c.jsxs)(a,{children:[(0,c.jsx)(`header`,{className:`mb-6`,children:(0,c.jsx)(`h1`,{children:e.agent.name})}),(0,c.jsx)(o,{agentId:e.agent.id,active:`triggers`,archived:e.agent.status===`archived`}),(0,c.jsx)(u,{agentId:e.agent.id,onAdded:()=>n.invalidate()}),(0,c.jsx)(`h3`,{className:`mb-3 mt-6 font-body text-[0.85em] font-semibold uppercase tracking-wider text-mocha-light`,children:`Active triggers`}),t.length===0?(0,c.jsx)(`p`,{className:`muted`,children:`no triggers yet — add one above.`}):(0,c.jsxs)(`table`,{children:[(0,c.jsx)(`thead`,{children:(0,c.jsxs)(`tr`,{children:[(0,c.jsx)(`th`,{children:`id`}),(0,c.jsx)(`th`,{children:`kind`}),(0,c.jsx)(`th`,{children:`spec`}),(0,c.jsx)(`th`,{children:`message`}),(0,c.jsx)(`th`,{children:`last fired`}),(0,c.jsx)(`th`,{})]})}),(0,c.jsx)(`tbody`,{children:t.map(e=>{let t=e.kind===`interval`?`every ${e.intervalSec}s`:e.cronExpr,n=e.lastFiredAt?new Date(e.lastFiredAt).toLocaleString():`(never)`;return(0,c.jsxs)(`tr`,{className:e.enabled?``:`opacity-60`,children:[(0,c.jsx)(`td`,{children:(0,c.jsxs)(`code`,{children:[e.id.slice(0,8),`…`]})}),(0,c.jsx)(`td`,{children:(0,c.jsx)(`span`,{className:`inline-block rounded-sm border border-frost bg-ivory px-2 py-0.5 font-mono text-[0.8em] text-mocha`,children:e.kind})}),(0,c.jsx)(`td`,{children:(0,c.jsx)(`code`,{children:t})}),(0,c.jsx)(`td`,{children:e.message.length>60?`${e.message.slice(0,60)}…`:e.message}),(0,c.jsx)(`td`,{className:`text-[0.82em] text-mocha-light`,children:n}),(0,c.jsx)(`td`,{children:(0,c.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,c.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:()=>s(e),children:e.enabled?`disable`:`enable`}),(0,c.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:()=>l(e.id),children:`delete`})]})})]},e.id)})})]})]})}function u({agentId:e,onAdded:t}){let[n,r]=(0,s.useState)(`interval`),[i,a]=(0,s.useState)(300),[o,l]=(0,s.useState)(``),[u,d]=(0,s.useState)(``),[f,p]=(0,s.useState)(null),[m,h]=(0,s.useState)(!1);async function g(r){if(r.preventDefault(),p(null),!u.trim()){p(`message is required`);return}if(n===`interval`&&(!Number.isFinite(i)||i<=0)){p(`interval must be a positive number`);return}if(n===`cron`&&!o.trim()){p(`cron expression is required`);return}h(!0);try{let r={kind:n,message:u.trim()};n===`interval`?r.intervalSec=i:r.cronExpr=o.trim();let s=await fetch(`/api/agents/${encodeURIComponent(e)}/triggers`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!s.ok){let e=await s.json().catch(()=>null);throw Error(e?.error??s.statusText)}d(``),l(``),a(300),t()}catch(e){p(e.message)}finally{h(!1)}}return(0,c.jsxs)(`form`,{className:`card`,onSubmit:g,children:[(0,c.jsx)(`h3`,{children:`Add trigger`}),(0,c.jsxs)(`div`,{className:`mb-3 flex gap-3`,children:[(0,c.jsxs)(`label`,{className:`m-0 inline-flex cursor-pointer items-center gap-1`,children:[(0,c.jsx)(`input`,{type:`radio`,checked:n===`interval`,onChange:()=>r(`interval`)}),`interval (every N seconds)`]}),(0,c.jsxs)(`label`,{className:`m-0 inline-flex cursor-pointer items-center gap-1`,children:[(0,c.jsx)(`input`,{type:`radio`,checked:n===`cron`,onChange:()=>r(`cron`)}),`cron (5-field)`]})]}),n===`interval`?(0,c.jsxs)(`label`,{children:[`interval (seconds)`,(0,c.jsx)(`input`,{type:`number`,min:1,value:i,onChange:e=>a(Number(e.target.value))})]}):(0,c.jsxs)(`label`,{children:[`cron expression (minute hour dom month dow)`,(0,c.jsx)(`input`,{type:`text`,placeholder:`*/15 * * * *`,value:o,onChange:e=>l(e.target.value)})]}),(0,c.jsxs)(`label`,{children:[`message`,(0,c.jsx)(`textarea`,{placeholder:`e.g. check your inbox and act on anything new`,value:u,onChange:e=>d(e.target.value),className:`font-mono text-[0.9em] min-h-[80px]`})]}),(0,c.jsxs)(`div`,{className:`mt-3 flex items-center gap-3`,children:[(0,c.jsx)(`button`,{type:`submit`,disabled:m,children:m?`adding…`:`add`}),f&&(0,c.jsx)(`span`,{className:`text-[0.85em] text-danger`,children:f})]})]})}export{l as component};
|