bunqueue-dashboard 1.0.3 → 1.0.5
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/README.md +162 -356
- package/dist/.vite/manifest.json +335 -608
- package/dist/assets/AddJob-g7DKWNZ0.js +3 -0
- package/dist/assets/Alerts-WcpDWdDf.js +1 -0
- package/dist/assets/{AreaChart-BMYp7z5y.js → AreaChart-CSP0-00u.js} +1 -1
- package/dist/assets/Benchmark-i6UOuIR-.js +1 -0
- package/dist/assets/{BulkAddJobs-0cdWqkEF.js → BulkAddJobs-56_SkYFd.js} +3 -3
- package/dist/assets/Cron-BnqxADsg.js +1 -0
- package/dist/assets/CronManager-4pAw6m87.js +1 -0
- package/dist/assets/Database-BDyQ8N-r.js +3 -0
- package/dist/assets/Diagnostics-DJNus54z.js +1 -0
- package/dist/assets/Dlq-BaHXmn0r.js +1 -0
- package/dist/assets/DlqControl-Bc48Yxxi.js +1 -0
- package/dist/assets/DlqPro-BaL9PRlj.js +1 -0
- package/dist/assets/Fleet-NYO3foQN.js +1 -0
- package/dist/assets/Flows-RPGep40V.js +2 -0
- package/dist/assets/JobInspector-DEboXZKA.js +2 -0
- package/dist/assets/Jobs-DRJLVzTB.js +1 -0
- package/dist/assets/JobsPro-BtoJgs_P.js +1 -0
- package/dist/assets/Logs-wZd30gMQ.js +1 -0
- package/dist/assets/LogsPro-Bed1atn5.js +1 -0
- package/dist/assets/{McpServer-ffXr4nFW.js → McpServer-CGe9T6dL.js} +2 -2
- package/dist/assets/Metrics-vii1CWGY.js +1 -0
- package/dist/assets/MetricsPro-Cbx-5-HO.js +1 -0
- package/dist/assets/Overview-2qju4F93.js +1 -0
- package/dist/assets/Pagination-ByDp7kNr.js +1 -0
- package/dist/assets/{QueueActions-BgdW95rN.js → QueueActions-BhjKtapT.js} +1 -1
- package/dist/assets/QueueControl-QMlFMQA6.js +1 -0
- package/dist/assets/QueueDetail-B-mcgloD.js +1 -0
- package/dist/assets/QueueDetailPro-BKFwiQUg.js +1 -0
- package/dist/assets/Queues-DCCwG__I.js +1 -0
- package/dist/assets/QueuesOverview-BMIfVWtk.js +1 -0
- package/dist/assets/S3Backup-DpLn5T8m.js +1 -0
- package/dist/assets/S3BackupPro-BUHJBozP.js +3 -0
- package/dist/assets/ServerControl-F5hvQwk3.js +3 -0
- package/dist/assets/Settings-UBD8Zrj0.js +1 -0
- package/dist/assets/{StatusBadge-cYUkK-4P.js → StatusBadge-D-mexaga.js} +1 -1
- package/dist/assets/Usage-D2D1i5nA.js +1 -0
- package/dist/assets/UsagePro-B8UDx-CC.js +1 -0
- package/dist/assets/Webhooks-TnNw3Mml.js +1 -0
- package/dist/assets/Workers-BAz4V_bk.js +1 -0
- package/dist/assets/WorkersPro-Cbh-P8vR.js +1 -0
- package/dist/assets/Workflows-CBMzJbn0.js +1 -0
- package/dist/assets/{api-Bbo86MB6.js → api-CCgfskjt.js} +1 -1
- package/dist/assets/{classicJobsData-BimIyQky.js → classicJobsData-wdIr-E4y.js} +1 -1
- package/dist/assets/connectionStore-B946Fhuv.js +1 -0
- package/dist/assets/controlConnectionEpoch-x9VjrWgN.js +1 -0
- package/dist/assets/{form-Dy-an7ew.js → form-DBkslwzu.js} +1 -1
- package/dist/assets/{icons-C1HVBnFn.js → icons-BIT5aq1c.js} +1 -1
- package/dist/assets/index-DR8flo6r.css +1 -0
- package/dist/assets/index-DcVSLtH4.js +8 -0
- package/dist/assets/install-Ch82YzWH.js +3 -0
- package/dist/assets/package-V6gqAKfV.js +1 -0
- package/dist/assets/react-vendor-08inPAVO.js +11 -0
- package/dist/assets/responses-YgpvqWEr.js +1 -0
- package/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/dist/assets/{useControlActionGuard-DImMgJtj.js → useControlActionGuard-Bx5MkufG.js} +1 -1
- package/dist/assets/{useServerActionGuard-Cr4KUOeZ.js → useServerActionGuard-uiZWD3dS.js} +1 -1
- package/dist/assets/useThroughputSeries-BZ9Bb2PU.js +1 -0
- package/dist/favicon.svg +11 -22
- package/dist/index.html +8 -16
- package/package.json +29 -36
- package/scripts/embedded.gen.ts +130 -146
- package/dist/assets/AddJob-jq-VZ_YE.js +0 -3
- package/dist/assets/Alerts-Bi8zLKXV.js +0 -1
- package/dist/assets/Benchmark-CWYdqm55.js +0 -1
- package/dist/assets/Button-BCjgbAhY.js +0 -1
- package/dist/assets/Card-DptfvL2O.js +0 -1
- package/dist/assets/Cron-dPGwJXqY.js +0 -1
- package/dist/assets/CronManager-C0-Y2QDg.js +0 -1
- package/dist/assets/Database-CseJOrvD.js +0 -3
- package/dist/assets/Diagnostics-cZTy4Y2t.js +0 -1
- package/dist/assets/Dlq-W2xOJiZM.js +0 -1
- package/dist/assets/DlqControl-CIV5278D.js +0 -1
- package/dist/assets/DlqPro-BuRxGtGt.js +0 -1
- package/dist/assets/Fleet-0zKJSjCw.js +0 -1
- package/dist/assets/Flows-CEfm102Y.js +0 -2
- package/dist/assets/JobInspector-BlMj5-Vr.js +0 -2
- package/dist/assets/Jobs-D_TId_Oa.js +0 -1
- package/dist/assets/JobsPro-A06ZG5Xi.js +0 -1
- package/dist/assets/Logs-hbh7XhQU.js +0 -1
- package/dist/assets/LogsPro-BgEIjgfj.js +0 -1
- package/dist/assets/Metrics-CIKZGgf0.js +0 -1
- package/dist/assets/MetricsPro-CK3WfLCl.js +0 -1
- package/dist/assets/Overview-BBgwyUn4.js +0 -1
- package/dist/assets/PageHeader-DD4vnVog.js +0 -1
- package/dist/assets/Pagination-Cj7GzYNX.js +0 -1
- package/dist/assets/QueueControl-g-9kwrpt.js +0 -1
- package/dist/assets/QueueDetail-Cv3MLDoE.js +0 -1
- package/dist/assets/QueueDetailPro-AhdOAzEF.js +0 -1
- package/dist/assets/Queues-Bbvh_OCE.js +0 -1
- package/dist/assets/QueuesOverview-sPQILfMU.js +0 -1
- package/dist/assets/S3Backup-Cg6sc2JG.js +0 -1
- package/dist/assets/S3BackupPro-BWV_R_Vj.js +0 -3
- package/dist/assets/ServerControl-Dr2gXbaU.js +0 -3
- package/dist/assets/Settings-BsDDlu-h.js +0 -1
- package/dist/assets/Usage-Cxx6pZfb.js +0 -1
- package/dist/assets/UsagePro-CkC8WYcS.js +0 -1
- package/dist/assets/Webhooks-BKWnALGC.js +0 -1
- package/dist/assets/Workers-SJ9MApx3.js +0 -1
- package/dist/assets/WorkersPro-BDgHBTpY.js +0 -1
- package/dist/assets/Workflows-Cp6jqKeM.js +0 -1
- package/dist/assets/bq-CSX8DSME.js +0 -1
- package/dist/assets/connectionStore-DdLzJyut.js +0 -1
- package/dist/assets/controlConnectionEpoch-D4HtriLM.js +0 -1
- package/dist/assets/feedback-Dxfj-Fy1.js +0 -1
- package/dist/assets/format-Cg7VCIZW.js +0 -1
- package/dist/assets/index-CxzFSZj3.js +0 -8
- package/dist/assets/index-DZXf58c2.css +0 -1
- package/dist/assets/install-DUkXE5kb.js +0 -3
- package/dist/assets/package-C7CtgBEy.js +0 -1
- package/dist/assets/react-vendor-DfC0iyIS.js +0 -11
- package/dist/assets/responses-BkR2JTH9.js +0 -1
- package/dist/assets/rolldown-runtime-QTnfLwEv.js +0 -1
- package/dist/assets/toastStore-DnqA_aL-.js +0 -1
- package/dist/assets/usePolledData-Dp_ynL9f.js +0 -1
- package/dist/assets/useThroughputSeries-CrTeR9s3.js +0 -1
- package/patches/ai@7.0.14.patch +0 -25
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{f as t,g as n,l as r,t as i}from"./react-vendor-DfC0iyIS.js";import{a}from"./connectionStore-DdLzJyut.js";import{t as o}from"./upstreamPaths-DQeKSxGc.js";import{s,t as c}from"./bq-CSX8DSME.js";import{t as l}from"./toastStore-DnqA_aL-.js";import{r as u,t as d}from"./StatusBadge-cYUkK-4P.js";import{n as f}from"./usePolledData-Dp_ynL9f.js";import{t as p}from"./Card-DptfvL2O.js";import{i as m,n as h,r as g,t as _}from"./feedback-Dxfj-Fy1.js";import{t as v}from"./PageHeader-DD4vnVog.js";import{a as y,i as b,l as x}from"./format-Cg7VCIZW.js";import{n as S,t as C}from"./controlConnectionEpoch-D4HtriLM.js";import{t as w}from"./useControlActionGuard-DImMgJtj.js";var T={"/workflows":{id:`overview`,label:`Overview`,description:`The complete durable command center for Bunqueue Workflow Engine.`,kind:`active`,state:``},"/workflows/executions":{id:`executions`,label:`Executions`,description:`Inspect every active execution, step record, decision, and nested run.`,kind:`active`,state:``},"/workflows/waiting":{id:`waiting`,label:`Waiting & Signals`,description:`Focus on parked executions and their durable signal payloads.`,kind:`active`,state:`waiting`,lockKind:!0,lockState:!0},"/workflows/compensation":{id:`compensation`,label:`Compensation`,description:`See running, completed, skipped, failed, and parked saga compensation outcomes.`,kind:`active`,state:`compensation`,lockKind:!0,lockState:!0},"/workflows/archive":{id:`archive`,label:`Archive`,description:`Audit terminal executions retained by Workflow Engine archival.`,kind:`archive`,state:``,lockKind:!0}};function ee(e){return T[e]??T[`/workflows`]}function te(e,t){return e?.source===`link`||e&&t.some(t=>t.id===e.id)?e:t[0]?{id:t[0].id,source:`page`}:null}var E=e(n(),1),ne=[`waiting`,`failed`,`compensation-stuck`];async function re(e,t){let[n,r]=await Promise.all([e.stats(),e.list(t)]);return{stats:n,page:r}}async function ie(e,t){let[n,...r]=await Promise.all([e.stats(),...ne.map(n=>e.list({kind:`active`,state:n,limit:t,offset:0}))]),i=r.flatMap(e=>e.executions).sort(ae).slice(0,t);return{stats:n,page:{ok:r.every(e=>e.ok),available:r.every(e=>e.available),executions:i,total:r.reduce((e,t)=>e+t.total,0),limit:t,offset:0}}}function ae(e,t){return t.createdAt-e.createdAt||t.id.localeCompare(e.id)}var D=new Set([`summary`,`history`,`payloads`]),oe=new Set([`running`,`waiting`,`completed`,`failed`,`compensating`,`compensation-stuck`,`compensation`]);function O(e,t){let n=e.get(`kind`),r=t.id===`executions`&&(n===`active`||n===`archive`)?n:t.kind,i=t.id===`overview`?``:ce(e.get(`workflow`)),a=ue(e.get(`state`),t),s=t.id===`overview`?0:le(e.get(`offset`)),c=e.get(`execution`),l=c&&o(c,`Workflow execution id`)===null?c:null,u=e.get(`tab`),d=t.id===`overview`||t.id===`executions`;return{kind:r,workflowName:i,state:a,offset:s,executionId:l,tab:l&&d&&D.has(u)?u:`summary`}}function k(e,t){let n=new URLSearchParams;return e.id===`executions`&&t.kind===`archive`&&n.set(`kind`,`archive`),e.id!==`overview`&&t.workflowName&&n.set(`workflow`,t.workflowName),j(e)&&t.state&&n.set(`state`,t.state),e.id!==`overview`&&t.offset>0&&n.set(`offset`,String(t.offset)),t.executionId&&n.set(`execution`,t.executionId),t.executionId&&t.tab!==`summary`&&(e.id===`overview`||e.id===`executions`)&&n.set(`tab`,t.tab),n}function A(e,t,n){return k(t,{...O(e,t),...n})}function se(e){return D.has(e)}function ce(e){return e&&e.length<=256?e:``}function le(e){if(!e||!/^(0|[1-9]\d*)$/.test(e))return 0;let t=Number(e);return Number.isSafeInteger(t)&&t<=1e6?Math.floor(t/25)*25:0}function ue(e,t){return j(t)?e?t.id===`archive`?e===`completed`||e===`failed`?e:``:oe.has(e)?e:``:``:t.state}function j(e){return e.id===`executions`||e.id===`archive`}var de=e=>`${e}?target=${encodeURIComponent(a())}`,M=e=>({method:`POST`,headers:e===void 0?void 0:{"Content-Type":`application/json`},body:e===void 0?void 0:JSON.stringify(e)});async function N(e,t){return(await s(de(e),t)).result}var P={status:()=>N(`/workflows/runtime`),initialize:()=>N(`/workflows/runtime/initialize`,M()),reload:()=>N(`/workflows/runtime/reload`,M()),start:async(e,t)=>(await N(`/workflows/start`,M({workflowName:e,input:t}))).run,signal:async(e,t,n)=>{await N(`/workflows/${encodeURIComponent(e)}/signal`,M({event:t,payload:n}))},recover:async()=>(await N(`/workflows/recover`,M())).recovered,resumeCompensation:async e=>{await N(`/workflows/${encodeURIComponent(e)}/resume-compensation`,M())},abandonCompensation:async e=>{await N(`/workflows/${encodeURIComponent(e)}/abandon-compensation`,M())},archive:async(e,t)=>(await N(`/workflows/archive`,M({maxAgeMs:e,states:t}))).affected,cleanup:async(e,t)=>(await N(`/workflows/cleanup`,M({maxAgeMs:e,states:t}))).affected},fe={stats:()=>c.workflows.stats(),list:e=>c.workflows.list(e),get:(e,t)=>c.workflows.get(e,t)};function pe(e){let[n,r]=t(),i=n.toString(),a=(0,E.useMemo)(()=>O(new URLSearchParams(i),e),[i,e]),o=(0,E.useMemo)(()=>k(e,a).toString(),[e,a]),s=(0,E.useRef)(null);(0,E.useEffect)(()=>{o!==i&&r(o,{replace:!0})},[o,i,r]);let c=(0,E.useCallback)((t,n=!1)=>{r(n=>A(n,e,t),{replace:n})},[e,r]),l=(0,E.useCallback)((e,t=!1)=>{s.current=e,c({executionId:e?.id??null,tab:`summary`},t)},[c]),u=a.executionId?{id:a.executionId,source:s.current?.id===a.executionId?s.current.source:`link`}:null;return{...a,selected:u,update:c,select:l}}function F(e){let t=S(),n=`workflow-command:${e.operationGroup}`,r=w(n),i=(0,E.useMemo)(()=>({local:e.scopeKey,connectionEpoch:t}),[t,e.scopeKey]),a=(0,E.useRef)(e);a.current=e;let o=(0,E.useRef)(null),s=(0,E.useRef)(!0),c=(0,E.useRef)(i),l=(0,E.useRef)(0);if(!Object.is(c.current,i)){let e=c.current.connectionEpoch!==t;c.current=i,l.current+=1,e&&(o.current=null)}let[u,d]=(0,E.useState)(()=>I(i,t));(0,E.useEffect)(()=>(s.current=!0,()=>{s.current=!1,l.current+=1,o.current=null}),[]);let f=(e,t)=>s.current&&e===l.current&&t===C(),p=async(e,c)=>{if(o.current||t!==C())return;let u=r.begin(n);if(!u)return;let p=Symbol(`workflow-command`);o.current=p;let m=l.current,h=t,{onApplied:g,onSucceeded:_}=a.current;try{d({connectionEpoch:t,scope:i,busy:e,error:``,receipt:null});let n=await c();if(!f(m,h))return;d({connectionEpoch:t,scope:i,busy:e,error:``,receipt:{label:e,value:n}});try{_?.(e,n)}catch{}try{await g?.()}catch(e){f(m,h)&&d(t=>({...t,error:`Command succeeded; refresh failed: ${L(e)}`}))}}catch(n){f(m,h)&&d({connectionEpoch:t,scope:i,busy:e,error:L(n),receipt:null})}finally{u.finish(),o.current===p&&(o.current=null,s.current&&h===C()&&d(e=>({...e,busy:``})))}},m=Object.is(u.scope,i)?u:I(i,t);return{busy:u.connectionEpoch===t?u.busy:``,error:m.error,result:m.receipt?.value,succeeded:m.receipt?.label??``,run:p,clearResult:()=>d(e=>({...e,receipt:null}))}}function I(e,t){return{connectionEpoch:t,scope:e,busy:``,error:``,receipt:null}}function L(e){return e instanceof Error?e.message:String(e)}var R=i(),z=e=>JSON.stringify(e,null,2)??`null`;function B({value:e,empty:t=`None`}){return e==null||typeof e==`object`&&Object.keys(e).length===0?(0,R.jsx)(`p`,{className:`text-xs text-faint`,children:t}):(0,R.jsx)(`pre`,{className:`max-h-80 overflow-auto whitespace-pre-wrap break-words rounded-lg border border-line bg-surface-2 p-3 font-mono text-xs leading-5 text-muted`,children:z(e)})}function V({label:e,value:t}){return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`dt`,{className:`text-faint`,children:e}),(0,R.jsx)(`dd`,{className:`mt-0.5 break-words text-muted`,children:t})]})}var me=3600*1e3;function he({repository:e=P,onApplied:t}){let[n,r]=(0,E.useState)(`720`),[i,a]=(0,E.useState)(!0),[o,s]=(0,E.useState)(!0),c=F({operationGroup:`maintenance`,scopeKey:(0,E.useMemo)(()=>Symbol(`workflow-maintenance:${n.length}:${i}:${o}`),[i,o,n]),onApplied:t}),l=[...i?[`completed`]:[],...o?[`failed`]:[]],u=n.trim()===``?NaN:Number(n),d=Number.isFinite(u)&&u>=0&&l.length>0,f=t=>{if(!d)return;let n=t===`archive`?`Archive ${l.join(` and `)} workflows at least ${u} hours old?`:`Permanently delete ${l.join(` and `)} workflows at least ${u} hours old from the active execution store? Archive records are not deleted.`;if(!window.confirm(n))return;let r=Math.round(u*me);c.run(t,async()=>({operation:t,affected:t===`archive`?await e.archive(r,l):await e.cleanup(r,l)}))};return(0,R.jsxs)(`section`,{className:`mb-5 rounded-lg border border-line bg-surface p-4`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:`Retention operations`}),(0,R.jsx)(`p`,{className:`mt-1 text-xs text-faint`,children:`Archive moves terminal runs into retention. Cleanup permanently deletes eligible terminal runs from the active store only; archive records remain intact.`})]}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Minimum age (hours)`,(0,R.jsx)(`input`,{"aria-label":`Workflow retention age hours`,type:`number`,min:`0`,step:`1`,value:n,onChange:e=>r(e.target.value),className:`mt-1 block h-9 w-32 rounded-lg border border-line bg-surface-2 px-3 text-sm text-fg`})]}),(0,R.jsxs)(`label`,{className:`flex h-9 items-center gap-2 text-xs text-muted`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:i,onChange:e=>a(e.target.checked)}),`Completed`]}),(0,R.jsxs)(`label`,{className:`flex h-9 items-center gap-2 text-xs text-muted`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:o,onChange:e=>s(e.target.checked)}),`Failed`]})]})]}),(0,R.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[(0,R.jsx)(`button`,{type:`button`,disabled:!d||!!c.busy,onClick:()=>f(`archive`),className:`rounded-md bg-accent px-3 py-2 text-xs font-medium text-accent-fg disabled:opacity-40`,children:`Archive eligible`}),(0,R.jsx)(`button`,{type:`button`,disabled:!d||!!c.busy,onClick:()=>f(`cleanup`),className:`rounded-md border border-danger/40 px-3 py-2 text-xs text-danger disabled:opacity-40`,children:`Delete eligible`})]}),c.error&&(0,R.jsx)(`p`,{role:`alert`,className:`mt-3 text-xs text-danger`,children:c.error}),c.result!==void 0&&(0,R.jsx)(`div`,{className:`mt-3`,children:(0,R.jsx)(B,{value:c.result})})]})}var ge=[[`Active`,`activeTotal`,`text-fg`],[`Running`,`running`,`text-blue-400`],[`Waiting`,`waiting`,`text-warning`],[`Completed`,`completed`,`text-success`],[`Failed`,`failed`,`text-danger`],[`Compensating`,`compensating`,`text-violet-400`],[`Stuck`,`compensation-stuck`,`text-danger`]];function _e({stats:e}){return(0,R.jsx)(`dl`,{className:`mb-4 grid grid-cols-2 divide-x divide-y divide-line overflow-hidden rounded-lg border border-line bg-surface sm:grid-cols-4 xl:grid-cols-7 xl:divide-y-0`,children:ge.map(([t,n,r])=>(0,R.jsxs)(`div`,{className:`px-3 py-2.5 first:border-0`,children:[(0,R.jsx)(`dt`,{className:`text-[10px] font-medium uppercase tracking-wider text-faint`,children:t}),(0,R.jsx)(`dd`,{className:u(`mt-1 tnum font-mono text-lg font-semibold`,r),children:n===`activeTotal`?e.activeTotal:e.states[n]})]},n))})}function ve(e,t){let n=S(),r=(0,E.useRef)(null),i=F({operationGroup:`runtime-initialization`,scopeKey:e,onApplied:t.refetch});return(0,E.useEffect)(()=>{if(t.data?.ready&&(r.current=null),!t.data?.needsInitialization||t.error||i.busy)return;let a=JSON.stringify([n,t.data.moduleName]);r.current?.repository===e&&r.current.key===a||(r.current={repository:e,key:a},i.run(`initialize`,()=>e.initialize()))},[i,n,e,t.data,t.error]),i}function ye({repository:e=P,onApplied:t}){let[n,r]=(0,E.useState)(``),[i,a]=(0,E.useState)(`{}`),o=(0,E.useMemo)(()=>Symbol(`workflow-runtime:${n.length}:${i.length}`),[i,n]),s=f(()=>e.status(),[e],{intervalMs:5e3}),c=F({operationGroup:`runtime`,scopeKey:o,onApplied:async()=>{await s.refetch(),await t?.()}}),l=ve(e,s),u=s.data?.ready===!0;return(0,R.jsxs)(`section`,{className:`mb-5 overflow-hidden rounded-lg border border-line bg-surface`,children:[(0,R.jsxs)(`header`,{className:`flex flex-wrap items-start justify-between gap-3 border-b border-line px-4 py-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:`Workflow runtime`}),(0,R.jsx)(`p`,{className:`mt-0.5 text-xs text-faint`,children:`Registered application handlers stay in the agent-side runtime; commands never edit SQLite directly.`})]}),(0,R.jsx)(be,{ready:u,configured:s.data?.configured===!0,unavailable:!!(s.error&&!s.data)})]}),s.data?.configured&&(0,R.jsxs)(`div`,{className:`flex flex-wrap gap-x-5 gap-y-1 border-b border-line px-4 py-2 text-[11px] text-faint`,children:[(0,R.jsxs)(`span`,{children:[`Module`,` `,(0,R.jsx)(`strong`,{className:`font-mono font-medium text-muted`,children:s.data.moduleName??`—`})]}),(0,R.jsxs)(`span`,{children:[`Queue`,` `,(0,R.jsx)(`strong`,{className:`font-mono font-medium text-muted`,children:s.data.queueName??`—`})]}),(0,R.jsxs)(`span`,{children:[`Concurrency`,` `,(0,R.jsx)(`strong`,{className:`font-mono font-medium text-muted`,children:s.data.concurrency??`—`})]})]}),s.error&&s.data&&(0,R.jsx)(m,{message:`Runtime status refresh failed; showing the last snapshot.`,onRetry:s.refetch}),s.error&&!s.data&&(0,R.jsx)(`div`,{className:`p-4`,children:(0,R.jsx)(h,{error:s.error,onRetry:s.refetch})}),(0,R.jsxs)(`div`,{className:`grid gap-5 p-4 lg:grid-cols-[minmax(0,1fr)_auto]`,children:[(0,R.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Registered workflow`,(0,R.jsx)(`input`,{"aria-label":`Registered workflow`,list:`workflow-runtime-names`,value:n,onChange:e=>r(e.target.value),className:`mt-1 h-9 w-full rounded-lg border border-line bg-surface-2 px-3 text-sm text-fg`}),(0,R.jsx)(`datalist`,{id:`workflow-runtime-names`,children:s.data?.workflowNames.map(e=>(0,R.jsx)(`option`,{value:e},e))})]}),(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Input JSON`,(0,R.jsx)(`textarea`,{"aria-label":`Workflow input JSON`,value:i,onChange:e=>a(e.target.value),className:`mt-1 min-h-20 w-full resize-y rounded-lg border border-line bg-surface-2 p-2 font-mono text-xs text-fg`})]})]}),(0,R.jsxs)(`div`,{className:`flex flex-wrap content-start gap-2 lg:w-48 lg:flex-col`,children:[(0,R.jsx)(`button`,{type:`button`,disabled:!u||!n.trim()||!!c.busy,onClick:()=>{let t;try{t=JSON.parse(i)}catch{c.run(`start`,async()=>{throw Error(`Workflow input must be valid JSON.`)});return}c.run(`start`,()=>e.start(n.trim(),t))},className:`rounded-md bg-accent px-3 py-2 text-xs font-medium text-accent-fg disabled:opacity-40`,children:c.busy===`start`?`Starting…`:`Start execution`}),(0,R.jsx)(`button`,{type:`button`,disabled:!u||!!c.busy,onClick:()=>{window.confirm(`Recover every orphaned workflow using the registered idempotent handlers?`)&&c.run(`recover`,()=>e.recover())},className:`rounded-md border border-line px-3 py-2 text-xs text-muted disabled:opacity-40`,children:`Recover orphaned`}),(0,R.jsx)(`button`,{type:`button`,disabled:!s.data?.configured||!!c.busy||!!l.busy,onClick:()=>void c.run(`reload`,()=>e.reload()),className:`rounded-md border border-line px-3 py-2 text-xs text-muted disabled:opacity-40`,children:`Reload definitions`})]})]}),!s.loading&&!s.error&&!s.data?.configured&&(0,R.jsxs)(`p`,{className:`border-t border-line px-4 py-3 text-xs text-warning`,children:[`Set `,(0,R.jsx)(`code`,{children:`BUNQUEUE_WORKFLOW_MODULE`}),` to an absolute module path in Server → Extra environment, then start the managed server.`]}),s.data?.error&&(0,R.jsx)(`p`,{role:`alert`,className:`border-t border-line px-4 py-3 text-xs text-danger`,children:s.data.error}),l.error&&!u&&(0,R.jsx)(`p`,{role:`alert`,className:`border-t border-line px-4 py-3 text-xs text-danger`,children:l.error}),c.error&&(0,R.jsx)(`p`,{role:`alert`,className:`border-t border-line px-4 py-3 text-xs text-danger`,children:c.error}),c.result!==void 0&&(0,R.jsx)(`div`,{className:`border-t border-line p-4`,children:(0,R.jsx)(B,{value:c.result})})]})}function be({ready:e,configured:t,unavailable:n}){return(0,R.jsx)(`span`,{className:e?`rounded-full bg-success/10 px-2 py-1 text-[11px] text-success`:`rounded-full bg-warning/10 px-2 py-1 text-[11px] text-warning`,children:e?`Handlers loaded`:n?`Status unavailable`:t?`Unavailable`:`Not configured`})}var xe=[``,`running`,`waiting`,`completed`,`failed`,`compensating`,`compensation-stuck`,`compensation`];function Se({section:e,kind:t,workflowName:n,state:r,stats:i,total:a,onKind:o,onWorkflowName:s,onState:c}){return(0,R.jsx)(p,{className:`mb-5`,children:(0,R.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[e.lockKind?(0,R.jsx)(H,{label:`Store`,value:`${e.kind}${e.kind===`archive`&&i?` · ${i.archiveTotal}`:``}`,capitalize:!0}):(0,R.jsx)(Ce,{kind:t,archiveTotal:i?.archiveTotal,onChange:o}),(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Workflow`,(0,R.jsxs)(`select`,{value:n,onChange:e=>s(e.target.value),className:`mt-1 block h-9 min-w-48 rounded-lg border border-line bg-surface-2 px-3 text-sm text-fg`,children:[(0,R.jsx)(`option`,{value:``,children:`All workflows`}),i?.workflowNames.map(e=>(0,R.jsx)(`option`,{value:e,children:e},e))]})]}),e.lockState?(0,R.jsx)(H,{label:`State scope`,value:e.state===`compensation`?`Compensating + stuck`:e.state}):(0,R.jsx)(we,{state:r,onChange:c}),a!==void 0&&(0,R.jsxs)(`span`,{className:`ml-auto text-xs text-faint`,children:[a,` execution`,a===1?``:`s`]})]})})}function Ce({kind:e,archiveTotal:t,onChange:n}){return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`span`,{className:`mb-1 block text-xs text-faint`,children:`Store`}),(0,R.jsx)(`div`,{className:`flex rounded-lg border border-line p-0.5`,children:[`active`,`archive`].map(r=>(0,R.jsxs)(`button`,{type:`button`,"aria-pressed":e===r,onClick:()=>n(r),className:u(`rounded-md px-3 py-1.5 text-xs capitalize`,e===r?`bg-surface-2 text-fg`:`text-muted hover:text-fg`),children:[r,r===`archive`&&t!==void 0?` (${t})`:``]},r))})]})}function we({state:e,onChange:t}){return(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`State`,(0,R.jsx)(`select`,{value:e,onChange:e=>t(e.target.value),className:`mt-1 block h-9 min-w-44 rounded-lg border border-line bg-surface-2 px-3 text-sm text-fg`,children:xe.map(e=>(0,R.jsx)(`option`,{value:e,children:e===`compensation`?`All compensation`:e||`All states`},e||`all`))})]})}function H({label:e,value:t,capitalize:n=!1}){return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`span`,{className:`mb-1 block text-xs text-faint`,children:e}),(0,R.jsx)(`span`,{className:u(`inline-flex h-9 items-center rounded-lg border border-line bg-surface-2 px-3 text-xs text-fg`,n&&`capitalize`),children:t})]})}function Te({label:e=`Workflow`,value:t,stats:n,onChange:r}){return(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[e,(0,R.jsxs)(`select`,{value:t,onChange:e=>r(e.target.value),className:`mt-1 block h-9 min-w-52 rounded-lg border border-line bg-surface-2 px-3 text-sm text-fg`,children:[(0,R.jsx)(`option`,{value:``,children:`All workflows`}),n?.workflowNames.map(e=>(0,R.jsx)(`option`,{value:e,children:e},e))]})]})}function Ee(e){return e.section.id===`overview`?null:e.section.id===`executions`?(0,R.jsx)(Se,{...e}):(0,R.jsxs)(`div`,{className:`mb-5 flex items-end gap-4 rounded-lg border border-line bg-surface px-4 py-3`,children:[(0,R.jsx)(Te,{value:e.workflowName,stats:e.stats,onChange:e.onWorkflowName}),e.section.id===`archive`&&(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Outcome`,(0,R.jsxs)(`select`,{value:e.state,onChange:t=>e.onState(t.target.value),className:`mt-1 block h-9 min-w-36 rounded-lg border border-line bg-surface-2 px-3 text-sm text-fg`,children:[(0,R.jsx)(`option`,{value:``,children:`All outcomes`}),(0,R.jsx)(`option`,{value:`completed`,children:`Completed`}),(0,R.jsx)(`option`,{value:`failed`,children:`Failed`})]})]}),(0,R.jsxs)(`span`,{className:`ml-auto pb-2 text-xs text-faint`,children:[e.total??0,` `,e.section.id===`archive`?`records`:`executions`]})]})}function De(e){let t=[{id:`execution-started`,at:e.createdAt,title:`Execution started`,detail:e.workflowName,status:`running`,category:`execution`}];for(let[n,r]of Object.entries(e.steps))t.push(...Oe(n,r));for(let n of Object.keys(e.signals))t.push({id:`signal:${n}`,title:`Signal persisted: ${n}`,detail:`The store does not expose an exact signal timestamp.`,category:`signal`});return e.state!==`running`&&e.state!==`waiting`&&t.push({id:`execution-settled`,at:e.updatedAt,title:`Execution ${e.state}`,detail:e.failureReason,status:e.state,category:`execution`}),t.sort(ke)}function Oe(e,t){let n=[];return t.startedAt!==void 0&&n.push({id:`step:${e}:started`,at:t.startedAt,title:`Step started: ${e}`,detail:t.attempts?`Attempt ${t.attempts}`:void 0,status:`running`,category:`step`}),(t.completedAt!==void 0||t.status===`failed`)&&n.push({id:`step:${e}:settled`,at:t.completedAt,title:`Step ${t.status}: ${e}`,detail:t.error,status:t.status,category:`step`}),t.compensation&&n.push({id:`step:${e}:compensation`,at:t.compensation.at,title:`Compensation ${t.compensation.status}: ${e}`,detail:t.compensation.error,status:t.compensation.status,category:`compensation`}),n}function ke(e,t){return e.at===void 0&&t.at===void 0?e.id.localeCompare(t.id):e.at===void 0?1:t.at===void 0?-1:e.at-t.at||e.id.localeCompare(t.id)}function U({execution:e}){let t=De(e);return(0,R.jsx)(`ol`,{className:`divide-y divide-line/70 border-y border-line/70`,children:t.map((e,n)=>(0,R.jsxs)(`li`,{className:`grid grid-cols-[28px_minmax(0,1fr)] gap-3 py-3`,children:[(0,R.jsxs)(`div`,{className:`relative flex justify-center`,"aria-hidden":`true`,children:[(0,R.jsx)(`span`,{className:`mt-1.5 size-2 rounded-full border-2 border-surface bg-accent ring-1 ring-line`}),n<t.length-1&&(0,R.jsx)(`span`,{className:`absolute top-5 bottom-[-13px] w-px bg-line`})]}),(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,R.jsx)(`span`,{className:`break-words text-sm font-medium text-fg`,children:e.title}),e.status&&(0,R.jsx)(d,{status:e.status})]}),(0,R.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-x-3 text-xs text-faint`,children:[(0,R.jsx)(`span`,{className:`capitalize`,children:e.category}),(0,R.jsx)(`span`,{children:e.at===void 0?`Timestamp unavailable`:b(e.at)})]}),e.detail&&(0,R.jsx)(`p`,{className:`mt-1 whitespace-pre-wrap text-xs text-muted`,children:e.detail})]})]},e.id))})}var W={now:Date.now,subscribe:e=>{let t=window.setInterval(e,1e3);return()=>window.clearInterval(t)}};function Ae({since:e,clock:t=W}){let n=G(t);return(0,R.jsx)(R.Fragment,{children:y(Math.max(0,n-e))})}function G(e=W,t=!0){let[n,r]=(0,E.useState)(()=>e.now());return(0,E.useEffect)(()=>{if(r(e.now()),t)return e.subscribe(()=>r(e.now()))},[e,t]),n}function K({error:e,onRetry:t}){return e?(0,R.jsx)(m,{message:`Execution refresh failed; showing the last persisted snapshot.`,onRetry:t}):null}async function q(e,t){await Promise.all([e(),t?.()])}function je({repository:e,id:t,pollIntervalMs:n=1e4}){let{data:r,error:i,loading:a,refetch:o}=f(()=>e.get(t,`archive`),[e,t],{intervalMs:n});if(a&&!r)return(0,R.jsx)(g,{label:`Loading audit record…`});if(i&&!r)return(0,R.jsx)(h,{error:i,onRetry:o});let s=r?.execution;return s?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(K,{error:i,onRetry:o}),(0,R.jsxs)(`section`,{className:`overflow-hidden rounded-lg border border-line bg-surface`,children:[(0,R.jsxs)(`header`,{className:`flex items-start justify-between gap-3 border-b border-line px-4 py-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-faint`,children:`Immutable audit record`}),(0,R.jsx)(`h2`,{className:`mt-1 break-all font-mono text-sm font-semibold text-fg`,children:s.id})]}),(0,R.jsx)(d,{status:s.state})]}),(0,R.jsxs)(`dl`,{className:`grid grid-cols-2 gap-3 border-b border-line p-4 text-xs sm:grid-cols-3`,children:[(0,R.jsx)(V,{label:`Workflow`,value:s.workflowName}),(0,R.jsx)(V,{label:`Runtime`,value:y(s.updatedAt-s.createdAt)}),(0,R.jsx)(V,{label:`Archived`,value:s.archivedAt?b(s.archivedAt):`Unavailable`}),(0,R.jsx)(V,{label:`Definition hash`,value:s.definitionHash??`Unavailable`}),(0,R.jsx)(V,{label:`Final node`,value:String(s.currentNodeIndex)}),(0,R.jsx)(V,{label:`Final transition`,value:b(s.updatedAt)})]}),(0,R.jsx)(`div`,{className:`p-4`,children:(0,R.jsx)(U,{execution:s})})]})]}):null}function Me({repository:e,executionId:t,stuck:n,onApplied:r}){let i=F({operationGroup:`compensation`,scopeKey:`${t}:${n}`,onApplied:r,onSucceeded:e=>l.success(e===`resume`?`Compensation resumed`:`Compensation abandoned`,t)});return n?(0,R.jsxs)(`div`,{className:`border-t border-line p-4`,children:[(0,R.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wider text-faint`,children:`Operator decision`}),(0,R.jsx)(`p`,{className:`mt-1 text-xs text-muted`,children:`Retry after fixing the reversal, or explicitly abandon the remaining compensation steps.`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,R.jsx)(`button`,{type:`button`,disabled:!!i.busy,onClick:()=>{window.confirm(`Retry the stuck compensation for ${t}? Handlers must be idempotent.`)&&i.run(`resume`,()=>e.resumeCompensation(t))},className:`rounded-md bg-accent px-3 py-2 text-xs font-medium text-accent-fg disabled:opacity-40`,children:`Resume compensation`}),(0,R.jsx)(`button`,{type:`button`,disabled:!!i.busy,onClick:()=>{window.confirm(`Abandon remaining compensation for ${t}? This is irreversible.`)&&i.run(`abandon`,()=>e.abandonCompensation(t))},className:`rounded-md border border-danger/40 px-3 py-2 text-xs text-danger disabled:opacity-40`,children:`Abandon remainder`})]}),i.error&&(0,R.jsx)(`p`,{role:`alert`,className:`mt-3 text-xs text-danger`,children:i.error}),i.succeeded&&(0,R.jsx)(`p`,{role:`status`,className:`mt-3 text-xs text-success`,children:i.succeeded===`resume`?`Resume command accepted; recovery state refreshed.`:`Abandon command accepted; recovery state refreshed.`}),i.result!==void 0&&(0,R.jsx)(`div`,{className:`mt-3`,children:(0,R.jsx)(B,{value:i.result})})]}):null}function Ne({repository:e,controlRepository:t,id:n,onApplied:r,pollIntervalMs:i=5e3}){let{data:a,error:o,loading:s,refetch:c}=f(()=>e.get(n,`active`),[e,n],{intervalMs:i});if(s&&!a)return(0,R.jsx)(g,{label:`Loading recovery plan…`});if(o&&!a)return(0,R.jsx)(h,{error:o,onRetry:c});let l=a?.execution;if(!l)return null;let u=Object.entries(l.steps).filter(([,e])=>e.compensatable||e.compensation);return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(K,{error:o,onRetry:c}),(0,R.jsxs)(`section`,{className:`overflow-hidden rounded-lg border border-line bg-surface`,children:[(0,R.jsxs)(`header`,{className:`flex items-start justify-between gap-3 border-b border-line px-4 py-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-violet-400`,children:`Recovery plan`}),(0,R.jsx)(`h2`,{className:`mt-1 break-all font-mono text-sm font-semibold text-fg`,children:l.id})]}),(0,R.jsx)(d,{status:l.state})]}),(0,R.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 border-b border-line p-4 text-xs`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-faint`,children:`Compensation pivot`}),(0,R.jsx)(`div`,{className:`mt-1 text-fg`,children:l.committedAt===void 0?`Not committed`:`Node ${l.committedAt}`})]}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-faint`,children:`Rollback state`}),(0,R.jsx)(`div`,{className:`mt-1 text-fg`,children:l.rollbackStatus??l.state})]})]}),l.failureReason&&(0,R.jsx)(`div`,{role:`alert`,className:`border-b border-danger/30 bg-danger/[0.06] px-4 py-3 text-xs text-danger`,children:l.failureReason}),(0,R.jsxs)(`div`,{className:`p-4`,children:[(0,R.jsx)(`h3`,{className:`mb-3 text-xs font-semibold uppercase tracking-wider text-faint`,children:`Compensation ledger`}),u.length?(0,R.jsx)(`ol`,{className:`space-y-2`,children:u.reverse().map(([e,t])=>(0,R.jsxs)(`li`,{className:`grid gap-2 rounded-md border border-line px-3 py-2 text-xs sm:grid-cols-[1fr_auto]`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-mono text-fg`,children:e}),(0,R.jsx)(`div`,{className:`mt-1 text-faint`,children:t.compensation?.error??`Compensation handler registered`})]}),(0,R.jsxs)(`div`,{className:`text-right text-muted`,children:[t.compensation?t.compensation.status:`pending`,t.compensation?.at?(0,R.jsx)(`div`,{className:`mt-1 text-[10px] text-faint`,children:b(t.compensation.at)}):null]})]},e))}):(0,R.jsx)(`p`,{className:`text-sm text-muted`,children:`No compensatable step was persisted.`})]}),(0,R.jsx)(Me,{repository:t,executionId:n,stuck:l.state===`compensation-stuck`,onApplied:()=>q(c,r)},n)]})]})}function Pe({execution:e}){return(0,R.jsxs)(`div`,{className:`space-y-5`,children:[(0,R.jsx)(J,{title:`Input`,value:e.input}),(0,R.jsx)(J,{title:`Signals`,value:e.signals}),(0,R.jsx)(J,{title:`Resolved steps`,value:e.resolvedSteps}),(0,R.jsx)(J,{title:`Decisions`,value:e.decisions})]})}function J({title:e,value:t}){return(0,R.jsxs)(`section`,{children:[(0,R.jsx)(`h3`,{className:`mb-2 text-xs font-semibold uppercase tracking-wider text-faint`,children:e}),(0,R.jsx)(B,{value:t})]})}function Fe({steps:e,onSelect:t}){let n=Object.entries(e);return n.length===0?(0,R.jsx)(`p`,{className:`text-xs text-faint`,children:`No persisted step records.`}):(0,R.jsx)(`ol`,{className:`space-y-3`,children:n.map(([e,r],i)=>(0,R.jsx)(Ie,{name:e,step:r,last:i===n.length-1,onSelect:t},e))})}function Ie({name:e,step:t,last:n,onSelect:r}){let i=t.startedAt!==void 0&&t.completedAt!==void 0?t.completedAt-t.startedAt:void 0;return(0,R.jsxs)(`li`,{className:`relative grid grid-cols-[18px_1fr] gap-3`,children:[(0,R.jsxs)(`div`,{className:`flex flex-col items-center`,"aria-hidden":`true`,children:[(0,R.jsx)(`span`,{className:`mt-1 size-2.5 rounded-full bg-current text-accent`}),!n&&(0,R.jsx)(`span`,{className:`mt-1 w-px flex-1 bg-line`})]}),(0,R.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-line bg-surface-2 p-3`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,R.jsx)(`span`,{translate:`no`,className:`break-all font-mono text-sm font-medium text-fg`,children:e}),(0,R.jsx)(d,{status:t.status})]}),(0,R.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-x-4 gap-y-1 text-xs text-faint`,children:[t.attempts!==void 0&&(0,R.jsxs)(`span`,{children:[t.attempts,` attempt`,t.attempts===1?``:`s`]}),i!==void 0&&(0,R.jsx)(`span`,{children:y(i)}),t.occurrence!==void 0&&(0,R.jsxs)(`span`,{children:[`Occurrence `,t.occurrence]}),t.loopIndex!==void 0&&(0,R.jsxs)(`span`,{children:[`Loop index `,t.loopIndex]}),t.compensatable&&(0,R.jsx)(`span`,{children:`Compensatable`})]}),t.idempotencyKey&&(0,R.jsxs)(`div`,{className:`mt-2 break-all font-mono text-[11px] text-faint`,children:[`Idempotency: `,t.idempotencyKey]}),t.childExecutionId&&(0,R.jsxs)(`button`,{type:`button`,onClick:()=>r(t.childExecutionId),className:`mt-2 break-all font-mono text-xs text-accent hover:underline`,children:[`Child execution: `,t.childExecutionId]}),t.error&&(0,R.jsx)(`p`,{role:`alert`,className:`mt-2 whitespace-pre-wrap text-xs text-danger`,children:t.error}),t.compensation&&(0,R.jsxs)(`div`,{className:`mt-3 rounded-md border border-line px-3 py-2 text-xs`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,R.jsx)(`span`,{className:`text-faint`,children:`Compensation`}),(0,R.jsx)(d,{status:t.compensation.status}),(0,R.jsx)(`span`,{className:`text-faint`,children:b(t.compensation.at)})]}),t.compensation.error&&(0,R.jsx)(`p`,{className:`mt-2 whitespace-pre-wrap text-danger`,children:t.compensation.error})]}),(0,R.jsx)(Le,{step:t})]})]})}function Le({step:e}){return(0,R.jsxs)(R.Fragment,{children:[Object.hasOwn(e,`result`)&&(0,R.jsx)(Y,{label:`Result`,value:e.result}),Object.hasOwn(e,`loopItem`)&&(0,R.jsx)(Y,{label:`Loop item`,value:e.loopItem})]})}function Y({label:e,value:t}){return(0,R.jsxs)(`details`,{className:`mt-3`,children:[(0,R.jsx)(`summary`,{className:`cursor-pointer text-xs text-muted`,children:e}),(0,R.jsx)(`div`,{className:`mt-2`,children:(0,R.jsx)(B,{value:t})})]})}function Re({execution:e,onSelect:t}){let n=Object.values(e.steps),r=n.filter(e=>e.status===`completed`).length;return(0,R.jsxs)(`div`,{className:`space-y-5`,children:[(0,R.jsxs)(`dl`,{className:`grid grid-cols-2 gap-x-4 gap-y-3 border-b border-line pb-5 text-xs sm:grid-cols-3`,children:[(0,R.jsx)(V,{label:`Current node`,value:String(e.currentNodeIndex)}),(0,R.jsx)(V,{label:`Step progress`,value:`${r}/${n.length} completed`}),(0,R.jsx)(V,{label:`Duration`,value:y(e.updatedAt-e.createdAt)}),(0,R.jsx)(V,{label:`Started`,value:b(e.createdAt)}),(0,R.jsx)(V,{label:`Last transition`,value:b(e.updatedAt)}),(0,R.jsx)(V,{label:`Rollback`,value:e.rollbackStatus??`Not started`})]}),e.failureReason&&(0,R.jsxs)(`div`,{role:`alert`,className:`border-l-2 border-danger bg-danger/[0.06] px-3 py-2 text-xs text-danger`,children:[(0,R.jsx)(`div`,{className:`mb-1 font-medium`,children:`Failure`}),(0,R.jsx)(`p`,{className:`whitespace-pre-wrap`,children:e.failureReason})]}),(0,R.jsx)(ze,{execution:e,onSelect:t}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h3`,{className:`mb-3 text-xs font-semibold uppercase tracking-wider text-faint`,children:`Step state`}),(0,R.jsx)(Fe,{steps:e.steps,onSelect:t})]})]})}function ze({execution:e,onSelect:t}){return!e.parentExecutionId&&!e.definitionHash&&e.committedAt===void 0?null:(0,R.jsxs)(`div`,{className:`grid gap-3 border-b border-line pb-5 text-xs sm:grid-cols-2`,children:[e.parentExecutionId&&(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`text-faint`,children:`Parent execution`}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>t(e.parentExecutionId),className:`mt-1 break-all font-mono text-accent hover:underline`,children:e.parentExecutionId})]}),e.definitionHash&&(0,R.jsx)(V,{label:`Definition hash`,value:e.definitionHash}),e.committedAt!==void 0&&(0,R.jsx)(V,{label:`Compensation pivot`,value:`Node ${e.committedAt}`}),(0,R.jsx)(`div`,{className:`flex items-end`,children:(0,R.jsx)(d,{status:e.state})})]})}var Be=[{id:`summary`,label:`Summary`},{id:`history`,label:`History`},{id:`payloads`,label:`Payloads`}];function X({repository:e,id:t,kind:n,onSelect:r}){return(0,R.jsx)(Ve,{repository:e,id:t,kind:n,onSelect:r},`${n}:${t}`)}function Ve({repository:e,id:n,kind:r,onSelect:i}){let[a,o]=t(),s=a.get(`tab`),c=se(s)?s:`summary`,{data:l,error:p,loading:_,refetch:v}=f(()=>e.get(n,r),[e,n,r],{intervalMs:5e3});if(_&&!l)return(0,R.jsx)(Z,{children:(0,R.jsx)(g,{label:`Loading execution…`})});if(p&&!l)return(0,R.jsx)(Z,{children:(0,R.jsx)(h,{error:p,onRetry:v})});let y=l?.execution;return y?(0,R.jsxs)(Z,{children:[p&&(0,R.jsx)(m,{message:`Execution refresh failed. Showing the last snapshot.`,onRetry:v}),(0,R.jsx)(`header`,{className:`border-b border-line px-4 py-3`,children:(0,R.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-faint`,children:`Execution`}),(0,R.jsx)(`h2`,{translate:`no`,className:`mt-1 break-all font-mono text-sm font-semibold text-fg`,children:y.id}),(0,R.jsx)(`div`,{className:`mt-1 text-xs text-muted`,children:y.workflowName})]}),(0,R.jsx)(d,{status:y.state})]})}),(0,R.jsx)(`nav`,{"aria-label":`Execution detail`,className:`flex border-b border-line px-2`,children:Be.map(e=>(0,R.jsx)(`button`,{type:`button`,"aria-pressed":c===e.id,onClick:()=>{o(t=>{let n=new URLSearchParams(t);return e.id===`summary`?n.delete(`tab`):n.set(`tab`,e.id),n})},className:u(`border-b-2 px-3 py-2 text-xs font-medium`,c===e.id?`border-accent text-fg`:`border-transparent text-faint hover:text-muted`),children:e.label},e.id))}),(0,R.jsxs)(`div`,{className:`p-4`,"aria-live":`polite`,children:[c===`summary`&&(0,R.jsx)(Re,{execution:y,onSelect:i}),c===`history`&&(0,R.jsx)(U,{execution:y}),c===`payloads`&&(0,R.jsx)(Pe,{execution:y})]})]}):null}function Z({children:e}){return(0,R.jsx)(`section`,{className:`min-w-0 overflow-hidden rounded-lg border border-line bg-surface`,children:e})}function Q({total:e,offset:t,pageSize:n,count:r,onPage:i}){let a=r===0?0:t+1,o=Math.min(t+r,e);return(0,R.jsxs)(`nav`,{"aria-label":`Workflow execution pages`,className:`mt-3 flex items-center justify-between`,children:[(0,R.jsx)(`button`,{type:`button`,disabled:t===0,onClick:()=>i(Math.max(0,t-n)),className:`rounded-lg border border-line px-3 py-1.5 text-xs text-muted disabled:opacity-40`,children:`Previous`}),(0,R.jsxs)(`span`,{className:`text-xs text-faint`,children:[a,`–`,o,` of `,e]}),(0,R.jsx)(`button`,{type:`button`,disabled:t+n>=e,onClick:()=>i(t+n),className:`rounded-lg border border-line px-3 py-1.5 text-xs text-muted disabled:opacity-40`,children:`Next`})]})}var He=e=>e.length>22?`${e.slice(0,12)}…${e.slice(-7)}`:e;function Ue({executions:e,total:t,offset:n,pageSize:r,selected:i,onSelect:a,onPage:o}){return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`overflow-x-auto rounded-lg border border-line bg-surface`,children:(0,R.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,R.jsx)(`thead`,{className:`bg-surface-2/80`,children:(0,R.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,R.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:`Workflow / execution`}),(0,R.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:`Status`}),(0,R.jsx)(`th`,{className:`hidden px-3 py-2 font-medium md:table-cell`,children:`Node`}),(0,R.jsx)(`th`,{className:`hidden px-3 py-2 font-medium lg:table-cell`,children:`Elapsed`}),(0,R.jsx)(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Updated`})]})}),(0,R.jsx)(`tbody`,{children:e.map(e=>(0,R.jsx)(We,{execution:e,selected:i?.id===e.id,onSelect:a},e.id))})]})}),(0,R.jsx)(Q,{total:t,offset:n,pageSize:r,count:e.length,onPage:o})]})}function We({execution:e,selected:t,onSelect:n}){return(0,R.jsxs)(`tr`,{className:u(`border-b border-line/70 last:border-0`,t&&`bg-surface-2`),children:[(0,R.jsx)(`td`,{className:`p-0`,children:(0,R.jsxs)(`button`,{type:`button`,onClick:()=>n({id:e.id,source:`page`}),className:`block w-full px-3 py-2.5 text-left focus-visible:outline-2 focus-visible:outline-inset focus-visible:outline-accent`,children:[(0,R.jsx)(`span`,{className:`block truncate font-medium text-fg`,children:e.workflowName}),(0,R.jsx)(`span`,{translate:`no`,title:e.id,className:`mt-0.5 block font-mono text-[11px] text-faint`,children:He(e.id)})]})}),(0,R.jsx)(`td`,{className:`px-3 py-2.5`,children:(0,R.jsx)(d,{status:e.state})}),(0,R.jsx)(`td`,{className:`hidden px-3 py-2.5 font-mono text-xs text-muted md:table-cell`,children:e.currentNodeIndex}),(0,R.jsx)(`td`,{className:`hidden whitespace-nowrap px-3 py-2.5 font-mono text-xs text-muted lg:table-cell`,children:y(e.updatedAt-e.createdAt)}),(0,R.jsx)(`td`,{title:b(e.updatedAt),className:`whitespace-nowrap px-3 py-2.5 text-right text-xs text-muted`,children:x(e.updatedAt)})]})}function Ge({mode:e,rows:t,selected:n,onSelect:r,total:i,offset:a,pageSize:o,onPage:s,clock:c=W}){let l=G(c,e===`waiting`);return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`section`,{className:`overflow-x-auto rounded-lg border border-line bg-surface`,children:(0,R.jsxs)(`table`,{className:`w-full min-w-[560px] text-sm`,children:[(0,R.jsx)(`thead`,{className:`border-b border-line bg-surface-2/80 text-left text-[10px] uppercase tracking-wider text-faint`,children:(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:e===`archive`?`Execution record`:`Execution`}),(0,R.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:`Workflow`}),(0,R.jsx)(`th`,{className:`px-3 py-2 font-medium`,children:Ke(e)}),(0,R.jsx)(`th`,{className:`px-3 py-2 text-right font-medium`,children:qe(e)})]})}),(0,R.jsx)(`tbody`,{children:t.map(t=>(0,R.jsxs)(`tr`,{className:u(`border-b border-line last:border-0`,n?.id===t.id&&`bg-surface-2`),children:[(0,R.jsx)(`td`,{className:`p-0`,children:(0,R.jsx)(`button`,{type:`button`,className:`block w-full px-3 py-3 text-left font-mono text-xs text-fg`,onClick:()=>r({id:t.id,source:`page`}),children:t.id})}),(0,R.jsx)(`td`,{className:`px-3 py-3 text-muted`,children:t.workflowName}),(0,R.jsx)(`td`,{className:`px-3 py-3`,children:(0,R.jsx)(Je,{mode:e,row:t})}),(0,R.jsx)(`td`,{className:`whitespace-nowrap px-3 py-3 text-right text-xs text-muted`,children:$(e,t,l)})]},t.id))})]})}),(0,R.jsx)(Q,{total:i,offset:a,pageSize:o,count:t.length,onPage:s})]})}var Ke=e=>e===`waiting`?`Resume node`:e===`compensation`?`Recovery state`:`Outcome`,qe=e=>e===`archive`?`Archived`:e===`waiting`?`Waiting`:`Updated`;function Je({mode:e,row:t}){return e===`waiting`?(0,R.jsxs)(`span`,{className:`font-mono text-xs text-warning`,children:[`Node `,t.currentNodeIndex]}):(0,R.jsx)(d,{status:t.state})}function $(e,t,n){return e===`archive`?t.archivedAt?b(t.archivedAt):`Unavailable`:e===`waiting`?y(Math.max(0,n-t.updatedAt)):x(t.updatedAt)}function Ye({stats:e,page:t,repository:n,kind:r,selected:i,onSelect:a}){let o=t.executions.filter(e=>[`waiting`,`failed`,`compensation-stuck`].includes(e.state));return(0,R.jsxs)(`div`,{className:`space-y-5`,children:[(0,R.jsx)(Xe,{stats:e}),(0,R.jsxs)(`div`,{className:`grid gap-5 xl:grid-cols-[minmax(320px,0.7fr)_minmax(0,1.3fr)]`,children:[(0,R.jsxs)(`section`,{className:`rounded-lg border border-line bg-surface`,children:[(0,R.jsxs)(`header`,{className:`border-b border-line px-4 py-3`,children:[(0,R.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:`Needs attention`}),(0,R.jsxs)(`p`,{className:`mt-0.5 text-xs text-faint`,children:[`Waiting, failed, and stuck executions · showing `,o.length,` of `,t.total,`.`]})]}),(0,R.jsx)(Ze,{rows:o,selected:i,onSelect:a})]}),i&&(0,R.jsx)(X,{repository:n,id:i.id,kind:r,onSelect:e=>a({id:e,source:`link`})})]})]})}function Xe({stats:e}){return(0,R.jsx)(`dl`,{className:`grid overflow-hidden rounded-lg border border-line bg-surface sm:grid-cols-2 xl:grid-cols-4`,children:[[`Open executions`,e.activeTotal],[`Waiting for signal`,e.states.waiting],[`Recovery required`,e.states[`compensation-stuck`]+e.states.failed],[`Retained in archive`,e.archiveTotal]].map(([e,t])=>(0,R.jsxs)(`div`,{className:`border-b border-line px-4 py-3 sm:border-r xl:border-b-0`,children:[(0,R.jsx)(`dt`,{className:`text-[10px] uppercase tracking-wider text-faint`,children:e}),(0,R.jsx)(`dd`,{className:`mt-1 font-mono text-xl font-semibold text-fg`,children:t})]},e))})}function Ze({rows:e,selected:t,onSelect:n}){return e.length?(0,R.jsx)(`ul`,{className:`divide-y divide-line`,children:e.map(e=>(0,R.jsx)(`li`,{className:t?.id===e.id?`bg-surface-2`:void 0,children:(0,R.jsxs)(`button`,{type:`button`,className:`w-full px-4 py-3 text-left`,onClick:()=>n({id:e.id,source:`page`}),children:[(0,R.jsxs)(`span`,{className:`flex items-center justify-between gap-3`,children:[(0,R.jsx)(`span`,{className:`truncate text-sm font-medium text-fg`,children:e.workflowName}),(0,R.jsx)(`span`,{className:`text-xs text-faint`,children:x(e.updatedAt)})]}),(0,R.jsxs)(`span`,{className:`mt-1 flex items-center justify-between gap-3 font-mono text-[11px] text-faint`,children:[(0,R.jsx)(`span`,{className:`truncate`,children:e.id}),(0,R.jsx)(`span`,{children:e.state})]})]})},e.id))}):(0,R.jsx)(`p`,{className:`px-4 py-8 text-center text-sm text-muted`,children:`No intervention required.`})}function Qe({repository:e,executionId:t,onApplied:n}){let[r,i]=(0,E.useState)(``),[a,o]=(0,E.useState)(`{}`),s=F({operationGroup:`signal`,scopeKey:t,onApplied:n,onSucceeded:()=>l.success(`Workflow signal accepted`,`${r.trim()} · ${t}`)});return(0,R.jsxs)(`div`,{className:`border-t border-line p-4`,children:[(0,R.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wider text-faint`,children:`Send signal`}),(0,R.jsxs)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Event name`,(0,R.jsx)(`input`,{"aria-label":`Workflow signal event`,value:r,onChange:e=>i(e.target.value),className:`mt-1 h-9 w-full rounded-lg border border-line bg-surface-2 px-3 font-mono text-sm text-fg`})]}),(0,R.jsxs)(`label`,{className:`text-xs text-faint`,children:[`Payload JSON`,(0,R.jsx)(`textarea`,{"aria-label":`Workflow signal payload`,value:a,onChange:e=>o(e.target.value),className:`mt-1 min-h-20 w-full resize-y rounded-lg border border-line bg-surface-2 p-2 font-mono text-xs text-fg`})]})]}),(0,R.jsx)(`button`,{type:`button`,disabled:!r.trim()||!!s.busy,onClick:()=>{let n;try{n=JSON.parse(a)}catch{s.run(`signal`,async()=>{throw Error(`Signal payload must be valid JSON.`)});return}window.confirm(`Send durable signal "${r.trim()}" to ${t}?`)&&s.run(`signal`,()=>e.signal(t,r.trim(),n))},className:`mt-3 rounded-md bg-accent px-3 py-2 text-xs font-medium text-accent-fg disabled:opacity-40`,children:s.busy?`Sending…`:`Send durable signal`}),s.error&&(0,R.jsx)(`p`,{role:`alert`,className:`mt-3 text-xs text-danger`,children:s.error}),s.succeeded&&(0,R.jsx)(`p`,{role:`status`,className:`mt-3 text-xs text-success`,children:`Durable signal accepted; execution and list refreshed.`}),s.result!==void 0&&(0,R.jsx)(`div`,{className:`mt-3`,children:(0,R.jsx)(B,{value:s.result})})]})}function $e({repository:e,controlRepository:t,id:n,onApplied:r,clock:i,pollIntervalMs:a=5e3}){let{data:o,error:s,loading:c,refetch:l}=f(()=>e.get(n,`active`),[e,n],{intervalMs:a});if(c&&!o)return(0,R.jsx)(g,{label:`Loading signal inbox…`});if(s&&!o)return(0,R.jsx)(h,{error:s,onRetry:l});let u=o?.execution;if(!u)return null;let d=Object.entries(u.signals);return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(K,{error:s,onRetry:l}),(0,R.jsxs)(`section`,{className:`overflow-hidden rounded-lg border border-line bg-surface`,children:[(0,R.jsxs)(`header`,{className:`border-b border-line px-4 py-3`,children:[(0,R.jsx)(`div`,{className:`text-[11px] uppercase tracking-wider text-warning`,children:`Signal inbox`}),(0,R.jsx)(`h2`,{className:`mt-1 break-all font-mono text-sm font-semibold text-fg`,children:u.id})]}),(0,R.jsxs)(`dl`,{className:`grid grid-cols-2 gap-3 border-b border-line p-4 text-xs sm:grid-cols-3`,children:[(0,R.jsx)(V,{label:`Waiting at node`,value:String(u.currentNodeIndex)}),(0,R.jsx)(V,{label:`Parked for`,value:(0,R.jsx)(Ae,{since:u.updatedAt,clock:i})}),(0,R.jsx)(V,{label:`Last transition`,value:b(u.updatedAt)})]}),(0,R.jsxs)(`div`,{className:`p-4`,children:[(0,R.jsx)(`h3`,{className:`mb-3 text-xs font-semibold uppercase tracking-wider text-faint`,children:`Durable signals`}),d.length?d.map(([e,t])=>(0,R.jsxs)(`div`,{className:`mb-3 last:mb-0`,children:[(0,R.jsx)(`div`,{className:`mb-1 font-mono text-xs text-warning`,children:e}),(0,R.jsx)(B,{value:t})]},e)):(0,R.jsx)(`p`,{className:`text-sm text-muted`,children:`No signal has been persisted yet. The execution remains parked.`})]}),(0,R.jsx)(Qe,{repository:t,executionId:n,onApplied:()=>q(l,r)},n)]})]})}function et(e){return e.section.id===`overview`?(0,R.jsx)(Ye,{...e}):e.section.id===`executions`?(0,R.jsx)(tt,{...e}):(0,R.jsx)(nt,{...e})}function tt({repository:e,kind:t,page:n,selected:r,offset:i,pageSize:a,onSelect:o,onPage:s}){return(0,R.jsxs)(`div`,{className:`grid gap-5 xl:grid-cols-[minmax(390px,0.8fr)_minmax(0,1.4fr)]`,children:[(0,R.jsx)(Ue,{executions:n.executions,total:n.total,offset:i,pageSize:a,selected:r,onSelect:o,onPage:s}),r&&(0,R.jsx)(X,{repository:e,id:r.id,kind:t,onSelect:e=>o({id:e,source:`link`})})]})}function nt(e){let t=e.section.id;return(0,R.jsxs)(`div`,{className:`grid gap-5 xl:grid-cols-[minmax(420px,0.95fr)_minmax(0,1.05fr)]`,children:[(0,R.jsx)(Ge,{mode:t,rows:e.page.executions,selected:e.selected,onSelect:e.onSelect,total:e.page.total,offset:e.offset,pageSize:e.pageSize,onPage:e.onPage}),e.selected&&(0,R.jsx)(rt,{...e,id:e.selected.id})]})}function rt({section:e,repository:t,controlRepository:n,onRefresh:r,id:i}){return e.id===`waiting`?(0,R.jsx)($e,{repository:t,controlRepository:n,id:i,onApplied:r}):e.id===`compensation`?(0,R.jsx)(Ne,{repository:t,controlRepository:n,id:i,onApplied:r}):(0,R.jsx)(je,{repository:t,id:i})}function it({repository:e=fe,controlRepository:t=P}){let{pathname:n}=r(),i=ee(n),a=pe(i),{kind:o,workflowName:s,state:c,offset:l,selected:u,update:d,select:p}=a,h={kind:o,workflowName:s||void 0,state:c||void 0,limit:25,offset:l},{data:g,error:_,loading:y,refetch:b}=f(()=>i.id===`overview`?ie(e,25):re(e,h),[e,i.id,o,s,c,l],{intervalMs:5e3});(0,E.useEffect)(()=>{let e=g?.page.total;if(e===void 0||l===0)return;let t=e===0?0:Math.floor((e-1)/25)*25;l>t&&d({offset:t,executionId:null,tab:`summary`},!0)},[g?.page.total,l,d]),(0,E.useEffect)(()=>{let e=g?.page.executions;if(e){let t=i.id===`overview`?e.filter(e=>[`waiting`,`failed`,`compensation-stuck`].includes(e.state)):e,n=te(u,t);n?.id!==u?.id&&p(n,!0)}},[g?.page.executions,i.id,u,p]);let x=g?.stats,S=g?.page;return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(v,{title:(0,R.jsxs)(R.Fragment,{children:[`Workflow `,(0,R.jsxs)(`span`,{className:`text-faint`,children:[`/ `,i.label]})]}),description:i.description,live:!!(g&&!_),actions:(0,R.jsx)(`button`,{type:`button`,onClick:()=>void b(),className:`rounded-lg border border-line px-3 py-1.5 text-sm text-muted hover:bg-surface-2 hover:text-fg`,children:`Refresh`})}),i.id===`overview`&&(0,R.jsx)(ye,{repository:t,onApplied:b}),i.id===`archive`&&(0,R.jsx)(he,{repository:t,onApplied:b}),i.id===`executions`&&x&&(0,R.jsx)(_e,{stats:x}),(0,R.jsx)(Ee,{section:i,kind:o,workflowName:s,state:c,stats:x??void 0,total:S?.total,onKind:e=>{a.update({kind:e,offset:0,executionId:null,tab:`summary`},!1)},onWorkflowName:e=>{a.update({workflowName:e,offset:0,executionId:null,tab:`summary`},!1)},onState:e=>{a.update({state:e,offset:0,executionId:null,tab:`summary`},!1)}}),_&&g&&(0,R.jsx)(m,{message:`Workflow refresh failed — showing the last snapshot.`,onRetry:b}),(0,R.jsx)(at,{repository:e,controlRepository:t,section:i,stats:x,kind:o,page:S,error:_,loading:y,dataPresent:!!g,selected:u,offset:l,onRetry:b,onSelect:e=>a.select(e),onPage:e=>{a.update({offset:e,executionId:null,tab:`summary`})}})]})}function at({repository:e,controlRepository:t,section:n,stats:r,kind:i,page:a,error:o,loading:s,dataPresent:c,selected:l,offset:u,onRetry:d,onSelect:f,onPage:p}){return o&&!c?(0,R.jsx)(h,{error:o,onRetry:d}):s&&!c?(0,R.jsx)(g,{label:`Loading workflows…`}):a?.available?a.executions.length===0&&a.total>0&&u>0?(0,R.jsx)(g,{label:`Loading workflow page…`}):a.executions.length===0?(0,R.jsx)(_,{title:`No executions match these filters`,hint:`Change the store, workflow, or state filter.`}):r?(0,R.jsx)(et,{section:n,repository:e,controlRepository:t,kind:i,stats:r,page:a,selected:l,offset:u,pageSize:25,onSelect:f,onPage:p,onRefresh:d}):null:(0,R.jsx)(_,{title:`Workflow store not initialized`,hint:`Start a Bunqueue Workflow Engine with this server dataPath; its official workflow_executions tables will appear here automatically.`})}export{it as Workflows};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t,n,r}from"./connectionStore-DdLzJyut.js";import{a as i,i as a,n as o,r as s,s as c}from"./upstreamPaths-DQeKSxGc.js";var l=class extends Error{status;constructor(e,t){super(e),this.status=t,this.name=`BqError`}},u=3e4,d=()=>u;async function f(e,t,n,r,i=!0,a=`server`,o=[],s=u){let c=AbortSignal.timeout(s),d=r?.signal?AbortSignal.any([r.signal,c]):c,f=new Headers(n);r?.headers&&new Headers(r.headers).forEach((e,t)=>{f.set(t,e)}),r?.body!=null&&!f.has(`Content-Type`)&&f.set(`Content-Type`,`application/json`);let p;try{p=await fetch(e+t,{...r,headers:f,signal:d})}catch(e){throw c.aborted&&!r?.signal?.aborted||e?.name===`TimeoutError`?new l(`Request timed out`,0):e}if(!p.ok&&!o.includes(p.status)){let t=`HTTP ${p.status}`;try{let e=await p.json();e?.error&&(t=e.error)}catch{}throw p.status===401&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`auth:required`,{detail:{scope:a,auth:f.get(`Authorization`)??void 0,target:e}})),new l(t,p.status)}if(p.status===204)return;let m;try{m=await p.text()}catch(e){throw c.aborted&&!r?.signal?.aborted?new l(`Request timed out`,0):e}if(!m)return;let h;try{h=JSON.parse(m)}catch{throw new l(`Invalid JSON response (HTTP ${p.status})`,p.status)}if(i&&h&&typeof h==`object`&&h.ok===!1)throw new l(h.error??`Operation failed`,p.status);return h}var p=(n,r,i=!0,a=[],o=u)=>f(e(),n,t(),r,i,`server`,a,o),m=()=>r(),h=(e,t,r=u)=>f(m(),e,n(),t,!0,`agent`,[],r),g=(e,t)=>({method:e,body:t===void 0?void 0:JSON.stringify(t)}),_=3e5,ee=(e,t)=>g(e,t),v=new WeakMap,y=new WeakMap;function b(){let n=Object.freeze({baseUrl:e()});return v.set(n,Object.freeze({...t()})),n}function x(){let e=Object.freeze({baseUrl:m()});return y.set(e,Object.freeze({...n()})),e}function S(e){let t=v.get(e);if(!t)throw TypeError(`Invalid server request target.`);return t}function C(e){let t=y.get(e);if(!t)throw TypeError(`Invalid agent request target.`);return t}async function w(e,t,n){n?.throwIfAborted();let r=await f(e.baseUrl,`/jobs/${i(t)}`,{...S(e)},n?{signal:n}:void 0);return n?.throwIfAborted(),r}var T=encodeURIComponent,te={info:()=>h(`/db/info`),tables:()=>h(`/db/tables`),schema:e=>h(`/db/tables/${o(e,`Database table`)}/schema`),rows:(e,t=50,n=0,r,i=`asc`,a)=>h(`/db/tables/${o(e,`Database table`)}?limit=${t}&offset=${n}${r?`&orderBy=${T(r)}&dir=${i}`:``}${a?.value?`&fcol=${T(a.column)}&fop=${a.op}&fval=${T(a.value)}`:``}`),cell:(e,t,n)=>h(`/db/tables/${o(e,`Database table`)}/cell?rowid=${T(String(t))}&column=${T(n)}`),query:e=>h(`/db/query`,g(`POST`,{sql:e}))},ne={status:()=>h(`/control/status`),start:()=>h(`/control/start`,{method:`POST`}),stop:()=>h(`/control/stop`,{method:`POST`}),restart:()=>h(`/control/restart`,{method:`POST`}),logs:()=>h(`/control/logs`),getConfig:()=>h(`/control/config`),setConfig:(e,t)=>h(`/control/config`,g(`PUT`,{...e,...t===void 0?{}:{expectedRevision:t}}))},re={stats:()=>h(`/workflows/stats`),list:(e={})=>{let t=new URLSearchParams;return e.kind&&t.set(`kind`,e.kind),e.workflowName&&t.set(`workflowName`,e.workflowName),e.state&&t.set(`state`,e.state),e.limit!==void 0&&t.set(`limit`,String(e.limit)),e.offset!==void 0&&t.set(`offset`,String(e.offset)),h(`/workflows${t.size?`?${t}`:``}`)},get:(e,t=`active`)=>h(`/workflows/${o(e,`Workflow execution id`)}?kind=${t}`)},ie=2e5,ae=16*1024*1024,oe=12e4,se=64*1024,E=encodeURIComponent;async function ce(e,t,n=50,r=0,i,a=`asc`,s,c){c?.throwIfAborted();let l=await f(e.baseUrl,`/db/tables/${o(t,`Database table`)}?limit=${n}&offset=${r}${i?`&orderBy=${E(i)}&dir=${a}`:``}${s?.value?`&fcol=${E(s.column)}&fop=${s.op}&fval=${E(s.value)}`:``}`,{...C(e)},c?{signal:c}:void 0,!0,`agent`);return c?.throwIfAborted(),l}function D(e,t,n,r=!0){let i=e.get(t);if(!i||!/^\d+$/.test(i))throw new l(`Malformed database export response: invalid ${t} header.`,200);let a=Number(i);if(!Number.isSafeInteger(a)||a>n||!r&&a===0)throw new l(`Malformed database export response: invalid ${t} header.`,200);return a}async function le(e){if(!e.body)return``;let t=e.body.getReader(),n=new Uint8Array(se),r=0;try{for(;;){let e=await t.read();if(e.done)break;if(r+e.value.byteLength>n.byteLength)return t.cancel().catch(()=>void 0),``;n.set(e.value,r),r+=e.value.byteLength}}finally{t.releaseLock()}return new TextDecoder().decode(n.subarray(0,r))}async function ue(e,t,n){if(!e.body)throw new l(`Malformed database export response: missing CSV body.`,200);let r=new Uint8Array(t),i=e.body.getReader(),a=0;try{for(;;){n?.throwIfAborted();let e=await i.read();if(e.done)break;if(a+e.value.byteLength>t)throw i.cancel().catch(()=>void 0),new l(`Malformed database export response: body exceeds declared ${t} bytes.`,200);r.set(e.value,a),a+=e.value.byteLength}}finally{i.releaseLock()}if(n?.throwIfAborted(),a!==t)throw new l(`Malformed database export response: received ${a} of ${t} declared bytes.`,200);return r}function de(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`Invalid database export request.`);if(typeof e.table!=`string`||!e.table)throw TypeError(`Database export table must not be empty.`);if(e.dir!==`asc`&&e.dir!==`desc`)throw TypeError(`Invalid database export sort direction.`);if(e.orderBy!==void 0&&(typeof e.orderBy!=`string`||!e.orderBy))throw TypeError(`Database export sort column must not be empty.`);let t=e.filter;if(t&&(typeof t!=`object`||Array.isArray(t)||typeof t.column!=`string`||!t.column||typeof t.value!=`string`||!t.value||![`contains`,`eq`,`ne`].includes(t.op)))throw TypeError(`Invalid database export filter.`);return Object.freeze({table:e.table,orderBy:e.orderBy,dir:e.dir,filter:t?Object.freeze({...t}):void 0})}async function fe(e,t,n){e.status===401&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`auth:required`,{detail:{scope:`agent`,auth:new Headers(n).get(`Authorization`)??void 0,target:t.baseUrl}}));let r=`HTTP ${e.status}`,i=await le(e);if(i)try{let e=JSON.parse(i);typeof e?.error==`string`&&(r=e.error)}catch{}return new l(r,e.status)}async function pe(e,t,n){n?.throwIfAborted();let r={...C(e)},i=de(t),a=new URLSearchParams;i.orderBy&&a.set(`orderBy`,i.orderBy),a.set(`dir`,i.dir),i.filter&&(a.set(`fcol`,i.filter.column),a.set(`fop`,i.filter.op),a.set(`fval`,i.filter.value));let s=`/db/tables/${o(i.table,`Database table`)}/export?${a}`,c=AbortSignal.timeout(oe),u=n?AbortSignal.any([n,c]):c;try{let t=await fetch(e.baseUrl+s,{headers:r,signal:u});if(!t.ok)throw await fe(t,e,r);if(t.headers.get(`X-Bunqueue-Db-Export-Version`)!==`1`)throw new l(`Malformed database export response: unsupported contract version.`,200);if(!/^text\/csv(?:;|$)/i.test(t.headers.get(`Content-Type`)??``))throw new l(`Malformed database export response: expected CSV content.`,200);let a;try{let e=t.headers.get(`X-Bunqueue-Db-Export-Table`);if(!e)throw Error(`missing`);a=decodeURIComponent(e)}catch{throw new l(`Malformed database export response: invalid table identity.`,200)}if(a!==i.table)throw new l(`Database export target changed: requested "${i.table}", received "${a}".`,200);let o=D(t.headers,`X-Bunqueue-Db-Export-Rows`,ie),c=D(t.headers,`X-Bunqueue-Db-Export-Bytes`,ae,!1);if(D(t.headers,`Content-Length`,16777216,!1)!==c)throw new l(`Malformed database export response: Content-Length does not match X-Bunqueue-Db-Export-Bytes.`,200);let d=t.headers.get(`X-Bunqueue-Db-Export-Cap`);if(d!==`none`&&d!==`rows`&&d!==`bytes`)throw new l(`Malformed database export response: invalid export cap.`,200);if(d===`rows`&&o!==2e5)throw new l(`Malformed database export response: inconsistent row cap.`,200);let f=await ue(t,c,u);return n?.throwIfAborted(),{table:a,content:f,rowCount:o,bytes:c,cap:d===`none`?null:d}}catch(e){throw c.aborted&&!n?.aborted?new l(`Database export timed out`,0):e}}var me={counts:e=>p(`/queues/${c(e)}/counts`),pause:e=>p(`/queues/${c(e)}/pause`,g(`POST`)),resume:e=>p(`/queues/${c(e)}/resume`,g(`POST`)),drain:e=>p(`/queues/${c(e)}/drain`,ee(`POST`),!0,[],_),obliterate:e=>p(`/queues/${c(e)}/obliterate`,ee(`POST`),!0,[],_),clean:(e,t={})=>p(`/queues/${c(e)}/clean`,g(`POST`,t)),promoteJobs:(e,t)=>p(`/queues/${c(e)}/promote-jobs`,g(`POST`,t==null?void 0:{count:t})),retryCompleted:(e,t)=>{throw TypeError(`Completed-job requeue is unavailable in Bunqueue v2.9.3 because flow dependency registration is not rebuilt.`)},setRateLimit:(e,t,n,r)=>p(`/queues/${c(e)}/rate-limit`,g(`PUT`,{limit:t,...n===void 0?{}:{duration:n},...r===void 0?{}:{ttl:r}})),clearRateLimit:e=>p(`/queues/${c(e)}/rate-limit`,{method:`DELETE`}),setConcurrency:(e,t)=>p(`/queues/${c(e)}/concurrency`,g(`PUT`,{concurrency:t})),clearConcurrency:e=>p(`/queues/${c(e)}/concurrency`,{method:`DELETE`}),getStallConfig:e=>p(`/queues/${c(e)}/stall-config`),setStallConfig:(e,t)=>p(`/queues/${c(e)}/stall-config`,g(`PUT`,{config:t})),getDlqConfig:e=>p(`/queues/${c(e)}/dlq-config`),setDlqConfig:(e,t)=>{if(t.autoRetry===!0)throw TypeError(`DLQ auto-retry is unavailable: Bunqueue v2.9.3 does not rebuild flow dependency registration.`);if(t.maxAge!==void 0||t.maxEntries!==void 0)throw TypeError(`DLQ retention is read-only: maxAge/maxEntries can destructively expire or evict flow jobs without an atomic dependency check.`);return p(`/queues/${c(e)}/dlq-config`,g(`PUT`,{config:t}))},dlq:(e,t=100,n=0)=>p(`/queues/${c(e)}/dlq?limit=${t}&offset=${n}`),dlqStats:e=>p(`/queues/${c(e)}/dlq/stats`),retryDlq:(e,t)=>{throw TypeError(`DLQ retry is unavailable in Bunqueue v2.9.3 because the endpoint has no atomic job-generation, state, or flow-topology precondition.`)},purgeDlq:e=>p(`/queues/${c(e)}/dlq/purge`,g(`POST`))},O=()=>encodeURIComponent(e()),he={limits:(e,t)=>{let n=t===void 0?``:`&maxJobs=${t}`;return h(`/queue-operations/${c(e)}/limits?target=${O()}${n}`)},group:(t,n,r,i,a,o)=>{let s=new URLSearchParams({target:e(),groupId:n});return r!==void 0&&s.set(`maxJobs`,String(r)),i!==void 0&&s.set(`maxCount`,String(i)),a!==void 0&&s.set(`start`,String(a)),o!==void 0&&s.set(`end`,String(o)),h(`/queue-operations/${c(t)}/groups?${s}`)},setGroupRateLimit:(e,t,n,r)=>h(`/queue-operations/${c(e)}/groups/rate-limit?target=${O()}`,g(`POST`,{groupId:t,max:n,duration:r})),removeGroupRateLimit:(e,t)=>h(`/queue-operations/${c(e)}/groups/rate-limit/remove?target=${O()}`,g(`POST`,{groupId:t})),setGroupConcurrency:(e,t,n)=>h(`/queue-operations/${c(e)}/groups/concurrency?target=${O()}`,g(`POST`,{groupId:t,concurrency:n})),removeGroupConcurrency:(e,t)=>h(`/queue-operations/${c(e)}/groups/concurrency/remove?target=${O()}`,g(`POST`,{groupId:t})),pauseGroup:(e,t)=>h(`/queue-operations/${c(e)}/groups/pause?target=${O()}`,g(`POST`,{groupId:t})),resumeGroup:(e,t)=>h(`/queue-operations/${c(e)}/groups/resume?target=${O()}`,g(`POST`,{groupId:t})),deduplicationJobId:(t,n)=>h(`/queue-operations/${c(t)}/deduplication?${new URLSearchParams({target:e(),deduplicationId:n})}`),removeDeduplicationKey:(e,t)=>h(`/queue-operations/${c(e)}/deduplication/remove?target=${O()}`,g(`POST`,{deduplicationId:t})),metrics:(t,n,r,i)=>h(`/queue-operations/${c(t)}/metrics?${new URLSearchParams({target:e(),type:n,start:String(r),end:String(i)})}`),trimEvents:(e,t)=>h(`/queue-operations/${c(e)}/events/trim?target=${O()}`,g(`POST`,{maxLength:t}))},k=1e4,ge=1e3,_e=864e13,ve=new Set([`job.pushed`,`job.started`,`job.completed`,`job.failed`,`job.progress`,`job.stalled`]);function A(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function j(e,t,n=!1){if(typeof e!=`string`||e.length>t||!n&&e.length===0)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<32||n===127)return!1}return!0}function M(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}function ye(e){return typeof e==`number`&&Number.isFinite(e)}function N(e){return M(e)&&e<=_e}function be(e,t){return e===null||j(e,t)}function xe(e,t,n){if(!Array.isArray(e)||e.length>t)return!1;let r=new Set;for(let t of e){if(!j(t,n)||r.has(t))return!1;r.add(t)}return!0}function P(e,t){let n=A(e),r=n&&A(n.data);if(n?.ok!==!0||!r)throw Error(`Malformed ${t} response.`);return r}function F(e){if(!Array.isArray(e))throw Error(`Malformed queue summary response.`);let t=new Set,n=[];for(let r of e){let e=A(r),i=e&&A(e.counts);if(!e||!j(e.name,256)||t.has(e.name)||typeof e.paused!=`boolean`||!i||!M(i.waiting)||!M(i.prioritized)||!M(i.active)||!M(i.completed)||!M(i.failed)||!M(i.delayed))throw Error(`Malformed queue summary response.`);t.add(e.name),n.push(r)}return n}function I(e){let t=P(e,`workers`);if(!Array.isArray(t.workers)||t.workers.length>k)throw Error(`Malformed workers response.`);let n=new Set,r=[],i=[];for(let e=0;e<t.workers.length;e++){let a=t.workers[e],o=A(a),s=o&&typeof o.id==`string`?o.id:null,c=[];if(o?(j(o.id,1024)?n.has(o.id)&&c.push(`duplicate id`):c.push(`id`),j(o.name,512,!0)||c.push(`name`),xe(o.queues,ge,256)||c.push(`queues`),(!M(o.concurrency)||o.concurrency<1)&&c.push(`concurrency`),j(o.hostname,512,!0)||c.push(`hostname`),M(o.pid)||c.push(`pid`),o.status!==`active`&&o.status!==`stale`&&c.push(`status`),N(o.registeredAt)||c.push(`registeredAt`),N(o.lastSeen)||c.push(`lastSeen`),M(o.activeJobs)||c.push(`activeJobs`),M(o.processedJobs)||c.push(`processedJobs`),M(o.failedJobs)||c.push(`failedJobs`),be(o.currentJob,1024)||c.push(`currentJob`),ye(o.uptime)||c.push(`uptime`)):c.push(`entry is not an object`),s&&n.add(s),c.length>0){i.push({index:e,id:s,reason:c.join(`, `)});continue}r.push(a)}return{ok:!0,data:{workers:r,quarantinedWorkers:i,...Object.hasOwn(t,`stats`)?{stats:t.stats}:{}}}}function Se(e){if(!j(e,2048))return!1;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function Ce(e){let t=P(e,`webhooks`);if(!Array.isArray(t.webhooks)||t.webhooks.length>k)throw Error(`Malformed webhooks response.`);let n=new Set,r=[];for(let e of t.webhooks){let t=A(e);if(!t||!j(t.id,1024)||n.has(t.id)||!Se(t.url)||!Array.isArray(t.events)||!t.events.every(e=>ve.has(e))||!(t.queue===null||typeof t.queue==`string`)||!N(t.createdAt)||!(t.lastTriggered===null||N(t.lastTriggered))||!M(t.successCount)||!M(t.failureCount)||typeof t.enabled!=`boolean`)throw Error(`Malformed webhooks response.`);n.add(t.id),r.push(e)}return{ok:!0,data:{webhooks:r,...Object.hasOwn(t,`stats`)?{stats:t.stats}:{}}}}var we={crons:()=>p(`/crons`),createCron:e=>p(`/crons`,g(`POST`,e)),deleteCron:e=>p(`/crons/${o(e,`Cron name`,256)}`,{method:`DELETE`}),webhooks:async()=>Ce(await p(`/webhooks`)),addWebhook:e=>p(`/webhooks`,g(`POST`,e)),removeWebhook:e=>p(`/webhooks/${i(e)}`,{method:`DELETE`}),setWebhookEnabled:(e,t)=>p(`/webhooks/${i(e)}/enabled`,g(`PUT`,{enabled:t})),workers:async()=>I(await p(`/workers`)),unregisterWorker:e=>p(`/workers/${i(e)}`,{method:`DELETE`}),eventsUrl:t=>e()+(t?`/events/queues/${s(t)}`:`/events`)},L=365*24*60*60*1e3,R=2097151,z=64*1024*1024,B=1e4,Te=[`childrenIds`,`parentId`,`failParentOnFailure`,`removeDependencyOnFailure`,`continueParentOnFailure`,`ignoreDependencyOnFailure`,`keepLogs`,`sizeLimit`,`debounceId`,`debounceTtl`],V=[`__parentId`,`__parentQueue`,`__childrenIds`,`__flowParentId`,`__flowParentIds`];function H(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(`Repeat must be an object with a positive "every" interval`);let t=Object.keys(e).filter(e=>e!==`every`&&e!==`limit`);if(t.length)throw TypeError(`Unsupported repeat option(s): ${t.join(`, `)}. bunqueue v2.9.3 pattern repeats are unsafe; use the Cron API instead.`);if(!Number.isSafeInteger(e.every)||e.every<1||e.every>L)throw TypeError(`Repeat "every" must be a whole number from 1 to ${L} ms`);if(e.limit!==void 0&&(!Number.isSafeInteger(e.limit)||e.limit<1))throw TypeError(`Repeat "limit" must be a whole number of at least 1`)}function U(e){if(e!==void 0&&(typeof e!=`string`||!e||e.length>256))throw TypeError(`Job name must be a non-empty string of at most 256 characters`)}function W(e){let t=e,n=Te.filter(e=>t[e]!==void 0);if(n.length)throw TypeError(`Unsupported Bunqueue v2.9.3 enqueue option(s): ${n.join(`, `)}. Flow topology must use the atomic flow API; inert compatibility fields are not sent.`)}function G(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=V.filter(t=>Object.hasOwn(e,t));if(t.length)throw TypeError(`Job data must not contain broker-owned flow metadata: ${t.join(`, `)}. A plain enqueue with these keys would be misread as a flow child; use the atomic flow API for topology.`)}function K(e){let t=e.groupId;if(t!==void 0&&(typeof t!=`string`||!t||t.length>256||t.includes(`\0`)))throw TypeError(`groupId must be a non-empty string of at most 256 characters without NUL`);if(e.groupMaxSize!==void 0){if(t===void 0)throw TypeError(`groupMaxSize requires groupId`);if(!Number.isSafeInteger(e.groupMaxSize)||e.groupMaxSize<1)throw TypeError(`groupMaxSize must be a positive safe integer`)}if(t!==void 0&&e.priority!==void 0&&(!Number.isSafeInteger(e.priority)||e.priority<0||e.priority>R))throw TypeError(`Grouped priority must be an integer from 0 to ${R}`)}function q(e,t){let n=a(t);if(n)throw TypeError(`${e}: ${n}. The job would not be manageable through v2.9.3 HTTP.`)}function Ee(e){if(U(e.name),H(e.repeat),W(e),G(e.data),K(e),e.groupMaxSize!==void 0)throw TypeError(`groupMaxSize is not forwarded by Bunqueue 2.9.3 single-job HTTP; use the bulk transport`);if(e.dependsOn!==void 0&&(!Array.isArray(e.dependsOn)||!e.dependsOn.every(e=>typeof e==`string`)))throw TypeError(`dependsOn must be an array of job ID strings`);e.jobId!==void 0&&q(`jobId`,e.jobId);for(let t of e.dependsOn??[])q(`dependsOn`,t)}function De(e){let t;try{t=JSON.stringify(e)}catch{throw TypeError(`Job payload must be JSON serializable`)}if(t===void 0)throw TypeError(`Job payload must be JSON serializable`);let n;try{n=JSON.parse(t)}catch{throw TypeError(`Job payload encoding failed`)}if(typeof n!=`object`||!n||Array.isArray(n))throw TypeError(`Job payload must serialize to a JSON object`);return Ee(n),t}function Oe({jobId:e,...t}){return e===void 0?t:{...t,customId:e}}function ke(e){let t=JSON.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`must serialize to a JSON object`);let n=t;if(n.jobId!==void 0)throw TypeError(`serialized jobId is invalid; the bulk transport requires customId`);if(U(n.name),H(n.repeat),W(n),G(n.data),K(n),n.customId!==void 0){if(typeof n.customId!=`string`)throw TypeError(`customId must be a string`);q(`customId`,n.customId)}if(n.dependsOn!==void 0){if(!Array.isArray(n.dependsOn)||!n.dependsOn.every(e=>typeof e==`string`))throw TypeError(`dependsOn must be an array of job ID strings`);for(let e of n.dependsOn)q(`dependsOn`,e)}}function Ae(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);if(i<=127?n+=1:i<=2047?n+=2:i>=55296&&i<=56319&&r+1<e.length&&e.charCodeAt(r+1)>=56320&&e.charCodeAt(r+1)<=57343?(n+=4,r+=1):n+=3,n>t)return n}return n}function J(e,t,n){if(!Array.isArray(e)||e.length>1e4)return{ok:!1,error:`Bulk request must contain at most ${B} jobs`};if(!Number.isSafeInteger(t)||t<0)return{ok:!1,error:`Bulk request payload limit is invalid`};let r=11,i=n?Array(e.length):null;for(let a=0;a<e.length;a++){if(a&&(r+=1),r>t)return{ok:!1,error:`Bulk request payload exceeds the 64 MiB UTF-8 safety limit`};let o;try{o=JSON.stringify(Oe(e[a]))}catch{return{ok:!1,error:`Bulk request payload must be JSON serializable`}}if(o===void 0)return{ok:!1,error:`Bulk request payload must be JSON serializable`};if(r+=Ae(o,t-r),r>t)return{ok:!1,error:`Bulk request payload exceeds the 64 MiB UTF-8 safety limit`};if(n)try{ke(o)}catch(e){return{ok:!1,error:`Bulk job ${a+1}: ${e instanceof Error?e.message:String(e)}`}}i&&(i[a]=o)}return{ok:!0,bytes:r,body:i?`{"jobs":[${i.join(`,`)}]}`:void 0}}function je(e,t=z){let n=J(e,t,!1);return n.ok?null:n.error}function Y(e){let t=J(e,z,!0);if(!t.ok)throw TypeError(t.error);if(t.body===void 0)throw TypeError(`Bulk request payload encoding failed`);return t.body}function Me(e){if(!Array.isArray(e)||e.length>1e4)throw TypeError(`Bulk request must contain at most ${B} jobs`)}var Ne={overview:e=>p(`/dashboard`,e),queues:(e=500,t=0)=>p(`/dashboard/queues?limit=${e}&offset=${t}`),queuesSummary:async()=>F(await p(`/queues/summary`)),queueDetail:(e,t=!0)=>p(`/dashboard/queues/${c(e)}?includeJobs=${t}`),stats:e=>p(`/stats`,e),storage:()=>p(`/storage`,void 0,!1),health:()=>p(`/health`,void 0,!1,[503]),ping:()=>p(`/ping`),prometheusUrl:()=>`${e()}/prometheus`,gc:()=>p(`/gc`,g(`POST`)),heapStats:()=>p(`/heapstats`)},Pe={jobsList:(e,t,n=50,r=0)=>{let i=new URLSearchParams;return t?.length&&i.set(`states`,t.join(`,`)),i.set(`limit`,String(n)),i.set(`offset`,String(r)),p(`/queues/${c(e)}/jobs/list?${i}`)},job:e=>p(`/jobs/${i(e)}`),jobByCustomId:e=>p(`/jobs/custom/${o(e,`Custom job ID`)}`),jobResult:e=>p(`/jobs/${i(e)}/result`),jobLogs:e=>p(`/jobs/${i(e)}/logs`),jobChildren:e=>p(`/jobs/${i(e)}/children`),addJob:async(e,t)=>p(`/queues/${c(e)}/jobs`,{method:`POST`,body:De(t)}),addJobsBulk:async(e,t)=>(Me(t),p(`/queues/${c(e)}/jobs/bulk`,{method:`POST`,body:Y(t)},!0,[],_)),pullBatch:(e,t,n)=>p(`/queues/${c(e)}/jobs/pull-batch`,g(`POST`,{count:t,...n?{owner:n}:{}})),ackBatch:(e,t)=>p(`/jobs/ack-batch`,g(`POST`,{ids:e,...t?{tokens:t}:{}})),cancelJob:e=>p(`/jobs/${i(e)}`,{method:`DELETE`}),promoteJob:e=>p(`/jobs/${i(e)}/promote`,g(`POST`)),discardJob:e=>p(`/jobs/${i(e)}/discard`,g(`POST`)),retryJob:e=>p(`/jobs/${i(e)}/move-to-wait`,g(`POST`)),failJob:(e,t,n={})=>p(`/jobs/${i(e)}/fail`,g(`POST`,{error:t,...n})),updateJobData:(e,t)=>p(`/jobs/${i(e)}/data`,g(`PUT`,{data:t})),changePriority:(e,t,n)=>p(`/jobs/${i(e)}/priority`,g(`PUT`,{priority:t,...n===void 0?{}:{lifo:n}})),changeDelay:(e,t)=>p(`/jobs/${i(e)}/delay`,g(`PUT`,{delay:t})),moveToDelayed:(e,t)=>p(`/jobs/${i(e)}/move-to-delayed`,g(`POST`,{delay:t})),addJobLog:(e,t,n)=>p(`/jobs/${i(e)}/logs`,g(`POST`,{message:t,level:n})),clearJobLogs:e=>p(`/jobs/${i(e)}/logs`,{method:`DELETE`}),setJobProgress:(e,t,n)=>p(`/jobs/${i(e)}/progress`,g(`POST`,{progress:t,message:n}))};function X(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw new l(`Malformed ${t} response.`,200);return e}function Z(e,t){let n=X(e,t);if(n.ok!==!0)throw new l(`Malformed ${t} response.`,200);return n}var Q=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0;function $(e,t){if(e!==void 0)return Z(e,t)}function Fe(e,t){let n={...S(e)},r=(r,i,a=d())=>{let o=t?{...i,signal:i?.signal?AbortSignal.any([i.signal,t]):t}:i;return f(e.baseUrl,r,n,o,!0,`server`,[],a)};return Object.freeze({queuesSummary:async()=>F(await r(`/queues/summary`)),overview:()=>r(`/dashboard`),counts:async e=>{let t=X(Z(await r(`/queues/${c(e)}/counts`),`queue counts`).counts,`queue counts`);if(!Object.values(t).every(Q))throw new l(`Malformed queue counts response.`,200);return{ok:!0,counts:t}},jobsList:async(e,t,n=50,i=0)=>{let a=new URLSearchParams;t?.length&&a.set(`states`,t.join(`,`)),a.set(`limit`,String(n)),a.set(`offset`,String(i));let o=Z(await r(`/queues/${c(e)}/jobs/list?${a}`),`jobs list`);if(!Array.isArray(o.jobs)||!o.jobs.every(t=>{let n=t;return typeof n==`object`&&!!n&&!Array.isArray(n)&&typeof n.id==`string`&&n.id.length>0&&(n.queue===void 0||n.queue===e)}))throw new l(`Malformed jobs list response.`,200);return{ok:!0,jobs:o.jobs}},job:async e=>{let t=X(Z(await r(`/jobs/${i(e)}`),`job`).job,`job`);if(t.id!==e)throw new l(`Malformed job response.`,200);return{ok:!0,job:t}},dlqStats:async e=>{let t=X(Z(await r(`/queues/${c(e)}/dlq/stats`),`DLQ stats`).stats,`DLQ stats`);if(!Q(t.total))throw new l(`Malformed DLQ stats response.`,200);return{ok:!0,stats:t}},dlq:async(e,t=100,n=0)=>{let i=Z(await r(`/queues/${c(e)}/dlq?limit=${t}&offset=${n}`),`DLQ list`);if(!Array.isArray(i.entries)||!Q(i.total))throw new l(`Malformed DLQ list response.`,200);for(let e of i.entries){let t=X(X(e,`DLQ list`).job,`DLQ list`);if(typeof t.id!=`string`||!t.id)throw new l(`Malformed DLQ list response.`,200)}return{ok:!0,entries:i.entries,total:i.total}},health:async()=>X(await f(e.baseUrl,`/health`,n,t?{signal:t}:void 0,!1,`server`,[503]),`health`),stats:async()=>{let e=await r(`/stats`);return X(Z(e,`server stats`).stats,`server stats`),e},workers:async()=>I(await r(`/workers`)),crons:async()=>{let e=Z(await r(`/crons`),`crons`);if(!Array.isArray(e.crons)||!e.crons.every(e=>{let t=e;return typeof t==`object`&&!!t&&!Array.isArray(t)&&typeof t.name==`string`&&!!t.name&&typeof t.queue==`string`&&!!t.queue}))throw new l(`Malformed crons response.`,200);return{ok:!0,crons:e.crons}},addJobsBulk:async(e,t)=>(Me(t),r(`/queues/${c(e)}/jobs/bulk`,{method:`POST`,body:Y(t)},_)),pullBatch:(e,t,n)=>r(`/queues/${c(e)}/jobs/pull-batch`,g(`POST`,{count:t,...n?{owner:n}:{}})),heartbeatBatch:(e,t)=>r(`/jobs/heartbeat-batch`,g(`POST`,{ids:e,...t?{tokens:t}:{}})),ackBatch:(e,t)=>r(`/jobs/ack-batch`,g(`POST`,{ids:e,...t?{tokens:t}:{}})),retryJob:(e,t)=>r(`/jobs/${i(e)}/move-to-wait`,g(`POST`,t?{token:t}:{})),promoteJob:async e=>$(await r(`/jobs/${i(e)}/promote`,g(`POST`)),`promote job`),pause:async e=>$(await r(`/queues/${c(e)}/pause`,g(`POST`)),`pause queue`),resume:async e=>$(await r(`/queues/${c(e)}/resume`,g(`POST`)),`resume queue`),clean:(e,t={})=>r(`/queues/${c(e)}/clean`,g(`POST`,t))})}var Ie={...Ne,captureServerRequestTarget:b,createServerTargetClient:Fe,getJobAtTarget:w,captureAgentRequestTarget:x,getDbRowsAtTarget:ce,getDbExportAtTarget:pe,...Pe,...me,queueOperations:he,...we,db:te,get agentBase(){return m()},control:ne,workflows:re};Object.defineProperty(Ie,"agentBase",{configurable:!1});export{l as a,f as c,w as d,ae as i,x as l,V as n,C as o,je as r,h as s,Ie as t,b as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{g as t}from"./react-vendor-DfC0iyIS.js";var n=e(t(),1),r=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},i=(e=>e?r(e):r),a=e=>e;function o(e,t=a){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r}var s=e=>{let t=i(e),n=e=>o(t,e);return Object.assign(n,t),n},c=(e=>e?s(e):s);function l(e,t){let n;try{n=e()}catch{return}return{getItem:e=>{let r=e=>e===null?null:JSON.parse(e,t?.reviver),i=n.getItem(e)??null;return i instanceof Promise?i.then(r):r(i)},setItem:(e,r)=>n.setItem(e,JSON.stringify(r,t?.replacer)),removeItem:e=>n.removeItem(e)}}var u=e=>t=>{try{let n=e(t);return n instanceof Promise?n:{then(e){return u(e)(n)},catch(e){return this}}}catch(e){return{then(e){return this},catch(t){return u(t)(e)}}}},d=(e,t)=>(n,r,i)=>{let a={storage:l(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},o=!1,s=0,c=new Set,d=new Set,f=a.storage;if(!f)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),n(...e)},r,i);let p=()=>{let e=a.partialize({...r()});return f.setItem(a.name,{state:e,version:a.version})},m=i.setState;i.setState=(e,t)=>(m(e,t),p());let h=e((...e)=>(n(...e),p()),r,i);i.getInitialState=()=>h;let g,_=()=>{if(!f)return;let e=++s;o=!1,c.forEach(e=>e(r()??h));let t=a.onRehydrateStorage?.call(a,r()??h)||void 0;return u(f.getItem.bind(f))(a.name).then(e=>{if(e)if(typeof e.version==`number`&&e.version!==a.version){if(a.migrate){let t=a.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`)}else return[!1,e.state];return[!1,void 0]}).then(t=>{if(e!==s)return;let[i,o]=t;if(g=a.merge(o,r()??h),n(g,!0),i)return p()}).then(()=>{e===s&&(t?.(r(),void 0),g=r(),o=!0,d.forEach(e=>e(g)))}).catch(n=>{e===s&&t?.(void 0,n)})};return i.persist={setOptions:e=>{a={...a,...e},e.storage&&(f=e.storage)},clearStorage:()=>{f?.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>_(),hasHydrated:()=>o,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},a.skipHydration||_(),g||h},f=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function p(e,t=!1){try{let n=globalThis.localStorage??null;return!n&&t&&e.reportMissingWrites&&e.onError?.(Error(`localStorage is unavailable`)),n}catch(t){return e.onError?.(t),null}}function m(e,t){try{let n=JSON.parse(e),r=f(n)?n:{},i=typeof r.version==`number`?r.version:void 0,a=t.sanitizeState(`state`in r?r.state:r,i);return{hydration:JSON.stringify({state:a,...i===void 0?{}:{version:i}}),canonical:JSON.stringify({state:a,version:t.version})}}catch(e){return t.onError?.(e),null}}function h(e){let t=t=>e.onError?.(t);return{getItem(n){let r=p(e);if(!r)return null;let i;try{i=r.getItem(n)}catch(e){return t(e),null}if(i===null||n!==e.key)return i;let a=m(i,e);if(!a){try{r.removeItem(n)}catch(e){t(e)}return null}if(i!==a.canonical)try{r.setItem(n,a.canonical)}catch(e){t(e);try{r.removeItem(n)}catch(e){t(e)}}return a.hydration},setItem(n,r){let i=p(e,!0);if(i)try{i.setItem(n,r)}catch(e){t(e)}},removeItem(n){let r=p(e);if(r)try{r.removeItem(n)}catch(e){t(e)}}}}var g=/^\/(?:[A-Za-z0-9._~-]+(?:\/[A-Za-z0-9._~-]+)*)?\/?$/;function _(e){try{return globalThis[e]}catch{return}}function v(e){if(typeof e!=`string`)return null;let t=e.trim();return!g.test(t)||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t.replace(/\/+$/,``)||`/`}function y(e,t){return v(e)??v(t)??`/`}var b=`Use an http(s) URL without credentials, query, or fragment, or a non-root path starting with '/'.`,x=`https://bunqueue-dashboard.invalid`,ee=/\s/u;function te(e){return[...e].some(e=>{let t=e.charCodeAt(0);return e===`\\`||ee.test(e)||t<32||t===127})}function S(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t||t.includes(`?`)||t.includes(`#`)||te(t))return null;if(t.startsWith(`/`)){if(t.startsWith(`//`))return null;try{let e=new URL(t,x),n=e.pathname.replace(/\/+$/,``);return e.origin!==x||!n||n===`/`||n.startsWith(`//`)?null:n}catch{return null}}let n=t.match(/^https?:\/\//i)?.[0];if(!n)return null;let r=t.slice(n.length).split(`/`,1)[0];if(!r||r.includes(`@`))return null;try{let e=new URL(t);if(e.protocol!==`http:`&&e.protocol!==`https:`||!e.hostname||e.username||e.password)return null;let n=e.pathname.replace(/\/+$/,``);return n.startsWith(`//`)?null:`${e.origin}${n}`}catch{return null}}function C(e,t){return S(e)??S(t)??`/api`}function w(e,t){return S(e)??S(t)??`http://localhost:6800`}function T(e,t){return S(e)??t}function E(e){return typeof e==`string`?e.trim():``}var ne=`default`,re=64,D=/^[a-zA-Z0-9_-]{1,64}$/u;function O(e){return{id:ne,name:`Local Bunqueue`,baseUrl:e.baseUrl,agentBaseUrl:e.agentBaseUrl}}function k(e,t){if(typeof e!=`string`)return t;let n=[...e].map(e=>{let t=e.codePointAt(0)??0;return t<=31||t===127?` `:e}).join(``).trim();return n?[...n].slice(0,re).join(``):t}function A(e,t){return typeof e==`string`&&D.test(e)?e:t}function j(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return null;let r=e,i=S(r.baseUrl);return i?{id:A(r.id,`profile-${t+1}`),name:k(r.name,`Bunqueue ${t+1}`),baseUrl:i,agentBaseUrl:T(r.agentBaseUrl,n.agentBaseUrl)}:null}function M(e,t){if(!Array.isArray(e))return[O(t)];let n=[],r=new Set;for(let[i,a]of e.slice(0,32).entries()){let e=j(a,i,t);!e||r.has(e.id)||(r.add(e.id),n.push(e))}return n.length?n:[O(t)]}function N(e,t,n){let r=e&&typeof e==`object`&&!Array.isArray(e)?e:{},i=M(r.profiles,t),a=typeof r.activeProfileId==`string`?r.activeProfileId:``;return{profiles:i,activeProfileId:i.some(e=>e.id===a)?a:i[0].id,refreshMs:n(r.refreshMs)}}function P(e,t,n){let r=e&&typeof e==`object`&&!Array.isArray(e)?e:{};if(Array.isArray(r.profiles))return N(r,t,n);let i=O({...t,baseUrl:T(r.baseUrl,t.baseUrl)});return{profiles:[i],activeProfileId:i.id,refreshMs:n(r.refreshMs)}}function ie(e){let t=new Set(e.map(e=>e.id)),n=globalThis.crypto?.randomUUID?.().replaceAll(`-`,``).slice(0,16)||`${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`,r=`node-${n}`,i=2;for(;t.has(r);)r=`node-${n}-${i++}`;return r}var F=`bq-dash-connection`,I=3e3,ae=500,oe=6e4,L={baseUrl:C(void 0,_(`__BUNQUEUE_API_URL__`)),agentBaseUrl:w(_(`__BUNQUEUE_AGENT_URL__`),void 0),refreshMs:I},R=O(L);function z(e){return typeof e!=`number`||!Number.isFinite(e)?I:Math.min(oe,Math.max(ae,Math.round(e)))}function B(e){let t=e;return N({profiles:t?.profiles??(t?.baseUrl?[{...R,baseUrl:t.baseUrl}]:void 0),activeProfileId:t?.activeProfileId,refreshMs:t?.refreshMs},L,z)}function V(e,t){if(t!==void 0&&t<4)return H(e,t);let n=e;return Array.isArray(n?.profiles)?N(e,L,z):P(e,L,z)}function H(e,t,n=L.baseUrl){let r={...L,baseUrl:C(void 0,n)},i=e&&typeof e==`object`&&!Array.isArray(e)?e:{},a=t<3&&i.baseUrl===`/api`?{...i,baseUrl:r.baseUrl}:e;return t<4?P(a,r,z):N(e,r,z)}var U=null;function W(e){U=e instanceof Error?e:Error(String(e))}function G(){U=null}function K(){return U?{persisted:!1,error:`${U.name&&U.name!==`Error`?`${U.name}: `:``}${U.message}`}:{persisted:!0}}var se=l(()=>h({key:F,version:4,sanitizeState:V,onError:W,reportMissingWrites:!0})),q=new Map;function J(e){return e.profiles.find(t=>t.id===e.activeProfileId)??e.profiles[0]??R}function Y(e,t){let n=J(e),r={...n,...t,id:n.id};return e.profiles.map(e=>e.id===n.id?r:e)}function X(e,t,n){q.set(e,{token:E(t),agentToken:E(n)})}var Z=c()(d((e,t)=>({profiles:[R],activeProfileId:R.id,baseUrl:R.baseUrl,agentBaseUrl:R.agentBaseUrl,token:``,agentToken:``,refreshMs:L.refreshMs,saveConnection:n=>{G();let r=t(),i=J(r),a={...i,name:k(n.name,i.name),baseUrl:T(n.baseUrl,L.baseUrl),agentBaseUrl:T(n.agentBaseUrl??i.agentBaseUrl,L.agentBaseUrl)};return X(i.id,n.token,n.agentToken),e({profiles:Y(r,a),baseUrl:a.baseUrl,agentBaseUrl:a.agentBaseUrl,token:E(n.token),agentToken:E(n.agentToken)}),K()},addProfile:n=>{let r=t();if(r.profiles.length>=32)return{persisted:!1,error:`At most 32 Bunqueue nodes are supported.`};G();let i=ie(r.profiles),a={id:i,name:k(n.name,`Bunqueue ${r.profiles.length+1}`),baseUrl:T(n.baseUrl,L.baseUrl),agentBaseUrl:T(n.agentBaseUrl,L.agentBaseUrl)};return X(i,n.token,n.agentToken),e({profiles:[...r.profiles,a],activeProfileId:i,baseUrl:a.baseUrl,agentBaseUrl:a.agentBaseUrl,token:E(n.token),agentToken:E(n.agentToken)}),{...K(),id:i}},activateProfile:n=>{let r=t(),i=r.profiles.find(e=>e.id===n);if(!i)return!1;X(r.activeProfileId,r.token,r.agentToken);let a=q.get(n)??{token:``,agentToken:``};return e({activeProfileId:n,baseUrl:i.baseUrl,agentBaseUrl:i.agentBaseUrl,...a}),!0},removeProfile:n=>{let r=t();if(r.profiles.length===1||!r.profiles.some(e=>e.id===n))return!1;q.delete(n);let i=r.profiles.filter(e=>e.id!==n);if(n!==r.activeProfileId)return e({profiles:i}),!0;let a=i[0],o=q.get(a.id)??{token:``,agentToken:``};return e({profiles:i,activeProfileId:a.id,baseUrl:a.baseUrl,agentBaseUrl:a.agentBaseUrl,...o}),!0},setBaseUrl:t=>e(e=>{let n=T(t,L.baseUrl);return{baseUrl:n,profiles:Y(e,{baseUrl:n})}}),setAgentBaseUrl:t=>e(e=>{let n=T(t,L.agentBaseUrl);return{agentBaseUrl:n,profiles:Y(e,{agentBaseUrl:n})}}),setToken:t=>e(e=>{let n=E(t);return X(e.activeProfileId,n,e.agentToken),{token:n}}),setAgentToken:t=>e(e=>{let n=E(t);return X(e.activeProfileId,e.token,n),{agentToken:n}}),setRefreshMs:t=>e({refreshMs:z(t)})}),{name:F,storage:se,version:4,partialize:B,migrate:H,merge:(e,t)=>{q.clear();let n=V(e),r=n.profiles.find(e=>e.id===n.activeProfileId)??n.profiles[0];return{...t,...n,baseUrl:r.baseUrl,agentBaseUrl:r.agentBaseUrl,token:``,agentToken:``}}}));function ce(e){let t=Z.getState(),n=t.profiles.find(t=>t.id===e);if(!n)return null;let r=e===t.activeProfileId?{token:E(t.token),agentToken:E(t.agentToken)}:q.get(e)??{token:``,agentToken:``};return Object.freeze({...n,...r})}var le=()=>T(Z.getState().baseUrl,L.baseUrl),ue=()=>T(Z.getState().agentBaseUrl,L.agentBaseUrl),Q=()=>$(Z.getState().token),de=()=>$(Z.getState().agentToken);function $(e){let t=E(e);return t?{Authorization:`Bearer ${t}`}:{}}export{le as a,S as c,h as d,l as f,Q as i,y as l,c as m,de as n,Z as o,d as p,ue as r,b as s,ce as t,_ as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{g as t}from"./react-vendor-DfC0iyIS.js";import{o as n}from"./connectionStore-DdLzJyut.js";var r=e(t(),1),i=0,a=new Set;n.subscribe((e,t)=>{if(!(e.baseUrl===t.baseUrl&&e.agentBaseUrl===t.agentBaseUrl&&e.activeProfileId===t.activeProfileId&&e.token===t.token&&e.agentToken===t.agentToken)){i+=1;for(let e of a)e()}});function o(){return i}function s(){return(0,r.useSyncExternalStore)(c,o,o)}function c(e){return a.add(e),()=>a.delete(e)}export{s as n,o as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./react-vendor-DfC0iyIS.js";import{r as t}from"./StatusBadge-cYUkK-4P.js";var n=e();function r({className:e,decorative:r=!1}){let i=t(`inline-block size-4 animate-spin rounded-full border-2 border-current border-t-transparent`,e);return r?(0,n.jsx)(`span`,{className:i,"aria-hidden":`true`}):(0,n.jsx)(`span`,{className:i,role:`status`,"aria-label":`Loading`})}function i({label:e=`Loading…`}){return(0,n.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"aria-atomic":`true`,className:`flex items-center justify-center gap-3 py-16 text-sm text-muted`,children:[(0,n.jsx)(r,{decorative:!0}),e]})}function a({icon:e,title:t,hint:r,action:i}){return(0,n.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-line py-14 text-center`,children:[e&&(0,n.jsx)(`div`,{className:`text-faint [&>svg]:size-8`,children:e}),(0,n.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t}),r&&(0,n.jsx)(`div`,{className:`max-w-sm text-xs text-faint`,children:r}),i&&(0,n.jsx)(`div`,{className:`mt-2`,children:i})]})}function o({onRetry:e,message:t=`Could not refresh bunqueue data — the view may be unavailable or stale.`}){return(0,n.jsxs)(`div`,{role:`status`,"aria-live":`polite`,"aria-atomic":`true`,className:`mb-4 flex flex-wrap items-center gap-3 rounded-lg border border-amber-500/25 bg-amber-500/[0.06] px-4 py-2.5 text-sm`,children:[(0,n.jsx)(`span`,{className:`size-2 shrink-0 rounded-full bg-amber-400`,"aria-hidden":`true`}),(0,n.jsx)(`span`,{className:`text-amber-300/90 light:text-amber-700`,children:t}),e&&(0,n.jsx)(`button`,{type:`button`,onClick:e,className:`ml-auto shrink-0 rounded-md border border-amber-500/30 px-2.5 py-1 text-xs font-medium text-amber-200 light:text-amber-700 hover:border-amber-400/50 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent`,children:`Retry`})]})}function s({error:e,onRetry:t}){return(0,n.jsxs)(`div`,{role:`alert`,"aria-atomic":`true`,className:`flex flex-col items-center justify-center gap-3 rounded-xl border border-red-500/20 bg-red-500/5 py-14 text-center`,children:[(0,n.jsx)(`div`,{className:`text-sm font-medium text-danger`,children:`Something went wrong`}),(0,n.jsx)(`div`,{className:`max-w-md text-xs text-faint`,children:e.message}),t&&(0,n.jsx)(`button`,{type:`button`,onClick:t,className:`mt-1 rounded-lg border border-line bg-surface-2 px-3 py-1.5 text-xs font-medium text-fg hover:border-line-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent`,children:`Retry`})]})}export{o as i,s as n,i as r,a as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=new Intl.NumberFormat(`de-DE`),t=new Intl.DateTimeFormat(`it-IT`,{day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`});function n(t){return t==null||!Number.isFinite(t)?`0`:e.format(t)}function r(e,t=2){return e==null||!Number.isFinite(e)?`0%`:`${(e*100).toFixed(t)}%`}function i(e,t){let n=e+t;return n>0?t/n:null}function a(e){if(e==null||!Number.isFinite(e))return`—`;let n=new Date(e);return Number.isNaN(n.getTime())?`—`:t.format(n)}function o(e,t=Date.now()){if(e==null||!Number.isFinite(e))return`—`;let n=Math.max(0,t-e),r=Math.floor(n/1e3);if(r<60)return`${r}s ago`;let i=Math.floor(r/60);if(i<60)return`${i}m ago`;let a=Math.floor(i/60);return a<24?`${a}h ago`:`${Math.floor(a/24)}d ago`}function s(e){if(e==null||!Number.isFinite(e)||e<0)return`—`;let t=Math.round(e);if(t<1e3)return`${t}ms`;let n=e/1e3;if(n<59.95)return`${n.toFixed(1)}s`;let r=Math.round(n);return`${Math.floor(r/60)}m ${r%60}s`}function c(e,t){if(e==null||t==null)return;let n=t-e;return n>=0?n:void 0}function l(e){if(e==null||!Number.isFinite(e))return`—`;let t=Math.max(0,Math.floor(e)),n=Math.floor(t/86400),r=Math.floor(t%86400/3600),i=Math.floor(t%3600/60),a=[];return n&&a.push(`${n}d`),(r||n)&&a.push(`${r}h`),a.push(`${i}m`),a.join(` `)}function u(e){return e==null||!Number.isFinite(e)?`0`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?Number((e/1e3).toFixed(1))>=1e3?`${(e/1e6).toFixed(1)}M`:`${(e/1e3).toFixed(1)}K`:String(Math.round(e))}function d(e){if(e==null||!Number.isFinite(e))return`—`;if(e>=1e3)return`${(e/1e3).toFixed(2)}s`;let t=+(e<10);return Number(e.toFixed(t))>=1e3?`${(e/1e3).toFixed(2)}s`:`${e.toFixed(t)}ms`}var f=/(?:\u001b\[[0-9;?]*[ -/]*[@-~]|\u001b[@-Z\\^_])/g;function p(e){return e.replace(f,``)}function m(e){if(e==null||!Number.isFinite(e))return`—`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return r<t.length-1&&Number(n.toFixed(r===0?0:1))>=1024&&(n/=1024,r++),`${n.toFixed(r===0?0:1)} ${t[r]}`}export{s as a,r as c,c as d,p as f,a as i,o as l,m as n,d as o,u as r,n as s,i as t,l as u};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AddJob-jq-VZ_YE.js","./rolldown-runtime-QTnfLwEv.js","./react-vendor-DfC0iyIS.js","./upstreamPaths-DQeKSxGc.js","./bq-CSX8DSME.js","./connectionStore-DdLzJyut.js","./toastStore-DnqA_aL-.js","./usePolledData-Dp_ynL9f.js","./Button-BCjgbAhY.js","./StatusBadge-cYUkK-4P.js","./Card-DptfvL2O.js","./PageHeader-DD4vnVog.js","./form-Dy-an7ew.js","./useServerActionGuard-Cr4KUOeZ.js","./responses-BkR2JTH9.js","./Benchmark-CWYdqm55.js","./icons-C1HVBnFn.js","./format-Cg7VCIZW.js","./AreaChart-BMYp7z5y.js","./BulkAddJobs-0cdWqkEF.js","./CronManager-C0-Y2QDg.js","./feedback-Dxfj-Fy1.js","./Pagination-Cj7GzYNX.js","./Database-CseJOrvD.js","./Diagnostics-cZTy4Y2t.js","./api-Bbo86MB6.js","./useControlActionGuard-DImMgJtj.js","./controlConnectionEpoch-D4HtriLM.js","./DlqControl-CIV5278D.js","./flowMutationSafety-YKTHxqKv.js","./exportFile-C7xhE8Yh.js","./QueueControl-g-9kwrpt.js","./QueueActions-BgdW95rN.js","./DlqPro-BuRxGtGt.js","./Flows-CEfm102Y.js","./flowOperationPolicy-B2Etcb3f.js","./JobInspector-BlMj5-Vr.js","./JobsPro-A06ZG5Xi.js","./LogsPro-BgEIjgfj.js","./McpServer-ffXr4nFW.js","./package-C7CtgBEy.js","./MetricsPro-CK3WfLCl.js","./useThroughputSeries-CrTeR9s3.js","./QueueDetailPro-AhdOAzEF.js","./QueuesOverview-sPQILfMU.js","./promisePool-BVfQ9n9Q.js","./S3BackupPro-BWV_R_Vj.js","./ServerControl-Dr2gXbaU.js","./UsagePro-CkC8WYcS.js","./Webhooks-BKWnALGC.js","./WorkersPro-BDgHBTpY.js","./Workflows-Cp6jqKeM.js","./Alerts-Bi8zLKXV.js","./Fleet-0zKJSjCw.js","./Cron-dPGwJXqY.js","./Dlq-W2xOJiZM.js","./classicJobsData-BimIyQky.js","./Jobs-D_TId_Oa.js","./Logs-hbh7XhQU.js","./Metrics-CIKZGgf0.js","./Overview-BBgwyUn4.js","./QueueDetail-Cv3MLDoE.js","./Queues-Bbvh_OCE.js","./S3Backup-Cg6sc2JG.js","./Settings-BsDDlu-h.js","./Usage-Cxx6pZfb.js","./Workers-SJ9MApx3.js","./install-DUkXE5kb.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,c as n,g as r,i,l as a,m as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./react-vendor-DfC0iyIS.js";import{a as m,c as h,d as g,f as _,i as v,l as y,m as b,n as ee,o as x,p as S,u as te}from"./connectionStore-DdLzJyut.js";import{t as C}from"./bq-CSX8DSME.js";import{n as ne,t as re}from"./toastStore-DnqA_aL-.js";import{A as ie,D as ae,E as oe,S as se,T as ce,_ as le,c as ue,f as de,g as fe,h as pe,k as me,l as he,m as w,n as ge,o as _e,p as T,r as ve,s as ye,t as be,u as xe,v as Se,w as Ce,y as we}from"./icons-C1HVBnFn.js";import{r as E}from"./StatusBadge-cYUkK-4P.js";import{t as Te}from"./api-Bbo86MB6.js";import{n as Ee}from"./usePolledData-Dp_ynL9f.js";import{t as De}from"./Button-BCjgbAhY.js";import{t as Oe}from"./Card-DptfvL2O.js";import{i as ke,n as Ae,r as je}from"./feedback-Dxfj-Fy1.js";import{t as Me}from"./PageHeader-DD4vnVog.js";import{c as Ne,l as Pe,n as Fe,r as Ie,s as D,t as Le,u as Re}from"./format-Cg7VCIZW.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var O=e(r(),1),ze=o(),Be=`bq-dash-alerts`,Ve=1,He=[`email`,`webhook`,`slack`],Ue=[`error_rate`,`p99_latency`,`waiting`,`failed`,`dlq`],We=[`>=`,`>`,`<=`,`<`],Ge=128,Ke=200,qe=2048,Je=256,Ye=/^[^\s@]+@[^\s@]+\.[^\s@]+$/u,Xe=()=>`${Date.now().toString(36)}${Math.floor(Math.random()*1e6).toString(36)}`;function Ze(e){let t=new Set(e.map(e=>e.id)),n=Xe();if(!t.has(n))return n;let r=1;for(;t.has(`${n}-${r}`);)r+=1;return`${n}-${r}`}function Qe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function $e(e){return He.includes(e)}function et(e){return Ue.includes(e)}function tt(e){return We.includes(e)}function nt(e,t){let n=t.trim();if(!n||n.length>qe)return!1;if(e===`email`)return n.length<=320&&Ye.test(n);try{let e=new URL(n);return[`http:`,`https:`].includes(e.protocol)&&!e.username&&!e.password}catch{return!1}}function rt(e){if(!Qe(e)||typeof e.id!=`string`||!$e(e.type)||typeof e.target!=`string`)return null;let t=e.id.trim(),n=e.target.trim();return!t||t.length>Ge||n.length>qe||e.type===`email`&&!nt(e.type,n)?null:{id:t,type:e.type,target:e.type===`email`?n:``}}function it(e){if(!Qe(e)||typeof e.id!=`string`||typeof e.name!=`string`||!et(e.metric)||!tt(e.operator)||typeof e.threshold!=`number`||!Number.isFinite(e.threshold)||typeof e.queue!=`string`||!$e(e.channel)||typeof e.enabled!=`boolean`)return null;let t=e.id.trim(),n=e.name.trim(),r=e.queue.trim();return!t||t.length>Ge||!n||n.length>Ke||r.length>Je||e.threshold<0||e.metric===`error_rate`&&e.threshold>100?null:{id:t,name:n,metric:e.metric,operator:e.operator,threshold:e.threshold,queue:r,channel:e.channel,enabled:e.enabled}}function k(e){let t=Qe(e)?e:{},n=[],r=new Set;if(Array.isArray(t.channels))for(let e of t.channels){if(n.length>=100)break;let t=rt(e);!t||r.has(t.id)||(r.add(t.id),n.push(t))}let i=[],a=new Set;if(Array.isArray(t.rules))for(let e of t.rules){if(i.length>=500)break;let t=it(e);!t||a.has(t.id)||(a.add(t.id),i.push(t))}return{channels:n,rules:i}}function at(e){return k({channels:e.channels,rules:e.rules})}var ot=g({key:Be,version:Ve,sanitizeState:k}),A=b()(S(e=>({channels:[],rules:[],addChannel:(t,n)=>{let r={ok:!1,error:`Alert destination was rejected.`};return e(e=>{let i=n.trim();return!$e(t)||!nt(t,i)?(r={ok:!1,error:`Alert destination is invalid.`},e):e.channels.length>=100?(r={ok:!1,error:`A maximum of 100 alert destinations can be stored in this browser.`},e):(r={ok:!0},{channels:[...e.channels,{id:Ze(e.channels),type:t,target:i}]})}),r},removeChannel:t=>e(e=>({channels:e.channels.filter(e=>e.id!==t)})),addRule:t=>{let n={ok:!1,error:`Alert rule was rejected.`};return e(e=>{if(e.rules.length>=500)return n={ok:!1,error:`A maximum of 500 alert rules can be stored in this browser.`},e;let r=it({...t,id:Ze(e.rules)});return r?(n={ok:!0},{rules:[...e.rules,r]}):(n={ok:!1,error:`Alert rule contains invalid fields.`},e)}),n},removeRule:t=>e(e=>({rules:e.rules.filter(e=>e.id!==t)})),toggleRule:t=>e(e=>({rules:e.rules.map(e=>e.id===t?{...e,enabled:!e.enabled}:e)}))}),{name:Be,version:Ve,storage:_(()=>ot),partialize:at,migrate:k,merge:(e,t)=>({...t,...k(e)})})),st={error_rate:`error rate`,p99_latency:`p99 latency`,waiting:`waiting jobs`,failed:`failed jobs`,dlq:`DLQ size`},ct=10500,j=500,lt=21,ut=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0;function dt(e,t,n){return t===`>=`?e>=n:t===`>`?e>n:t===`<=`?e<=n:t===`<`&&e<n}function ft(e){if(!Array.isArray(e)||e.length>ct)return null;let t=new Set,n=[];for(let r of e){if(!r||typeof r!=`object`||Array.isArray(r))return null;let e=r,i=e.counts;if(typeof e.name!=`string`||!e.name||e.name.length>256||!/^[a-zA-Z0-9_\-.:]+$/.test(e.name)||t.has(e.name)||typeof e.paused!=`boolean`||!i||typeof i!=`object`||Array.isArray(i))return null;let a=i;if(![`waiting`,`prioritized`,`active`,`completed`,`failed`,`delayed`].every(e=>ut(a[e])))return null;t.add(e.name),n.push(r)}return n}function pt(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;if(t.ok!==!0||!t.latency||typeof t.latency!=`object`||Array.isArray(t.latency))return null;let n=t.latency.percentiles;if(!n||typeof n!=`object`||Array.isArray(n))return null;for(let e of Object.values(n)){let t=e?.p99;if(!e||typeof e!=`object`||Array.isArray(e)||typeof t!=`number`||!Number.isFinite(t)||t<0)return null}return e}var mt=(e,t)=>{let n=e+t;return n>0?t/n*100:null},ht=e=>e.counts.waiting+e.counts.prioritized;function gt(e,t){let n=e.queue.trim();if(e.metric===`waiting`||e.metric===`failed`){if(!t.summary)return null;let r=e.metric===`waiting`?ht:e=>e.counts.failed;if(n){let e=t.summary.find(e=>e.name===n);return e?r(e):null}return t.summary.reduce((e,t)=>e+r(t),0)}if(e.metric===`dlq`)return t.queues?n?t.queues.find(e=>e.name===n)?.dlq??null:t.queues.reduce((e,t)=>e+(t.dlq??0),0):null;if(e.metric===`error_rate`){if(!t.summary)return null;if(n){let e=t.summary.find(e=>e.name===n);return e?mt(e.counts.completed,e.counts.failed):null}return mt(t.summary.reduce((e,t)=>e+t.counts.completed,0),t.summary.reduce((e,t)=>e+t.counts.failed,0))}let r=t.overview?.latency?.percentiles;if(!r)return null;let i=Object.values(r).map(e=>e.p99).filter(Number.isFinite);return i.length?Math.max(...i):null}function _t(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e))return null;let r=e;if(r.ok!==!0||!Array.isArray(r.queues)||!Number.isSafeInteger(r.total)||r.total<0||r.total>ct||n!==null&&r.total!==n||r.offset!==t||r.limit!==j)return null;let i=r.total;if(r.queues.length!==Math.min(j,i-t))return null;let a=[];for(let e of r.queues){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;if(typeof t.name!=`string`||!t.name||t.name.length>256||!/^[a-zA-Z0-9_\-.:]+$/.test(t.name)||!ut(t.dlq))return null;a.push(e)}return{queues:a,total:i}}async function vt(e=C){try{let t=[],n=new Set,r=null;for(let i=0;i<lt;i++){let i=_t(await e.queues(j,t.length),t.length,r);if(!i)return null;r??=i.total;for(let e of i.queues){if(n.has(e.name))return null;n.add(e.name),t.push(e)}if(t.length===r)return t}return null}catch{return null}}var yt=3,bt=e=>`${e.queue||`All queues`}: ${e.metricLabel} ${e.operator} ${e.threshold} (now ${Math.round(e.value)})`;function xt(e){if(globalThis.Notification?.permission===`granted`)try{new Notification(`bunqueue alert: ${e.ruleName}`,{body:bt(e),tag:e.ruleId})}catch{}}function St(e){if(e.length<=yt){for(let t of e)re.error(`Alert: ${t.ruleName}`,bt(t)),xt(t);return}re.error(`${e.length} alert rules breaching`,e.map(e=>e.ruleName).join(`, `));for(let t of e)xt(t)}var Ct=3e4,wt=(e,t)=>JSON.stringify([e,t]);function Tt(e){let t=JSON.parse(e);if(!Array.isArray(t)||t.length!==2)throw TypeError(`Invalid alert connection identity.`);let[n,r]=t,i=h(n);if(!i||typeof r!=`string`)throw TypeError(`Invalid alert server target.`);let a=r.trim();return Object.freeze({baseUrl:i,...a?{authorization:`Bearer ${a}`}:{}})}function Et(e,t){let n=new Headers({Accept:`application/json`});e.authorization&&n.set(`Authorization`,e.authorization);let r=async r=>{t.throwIfAborted();let i=AbortSignal.any([t,AbortSignal.timeout(Ct)]),a=await fetch(e.baseUrl+r,{headers:n,signal:i});if(t.throwIfAborted(),!a.ok)throw await a.body?.cancel().catch(()=>{}),a.status===401&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`auth:required`,{detail:{scope:`server`,auth:e.authorization,target:e.baseUrl}})),Error(`Alert metrics request failed: HTTP ${a.status}`);let o=await a.text();if(t.throwIfAborted(),!o)throw Error(`Alert metrics request returned an empty response.`);try{return JSON.parse(o)}catch{throw Error(`Alert metrics request returned invalid JSON (HTTP ${a.status}).`)}};return Object.freeze({queuesSummary:()=>r(`/queues/summary`),queues:(e=500,t=0)=>r(`/dashboard/queues?limit=${e}&offset=${t}`),overview:()=>r(`/dashboard`)})}var Dt=15e3,Ot=6e4,M=b(e=>({breaching:[],status:`idle`,error:null,connectionIdentity:null,setBreaching:t=>e({breaching:t})}));async function kt(){if(typeof Notification>`u`)return`denied`;if(Notification.permission===`granted`)return`granted`;try{return await Notification.requestPermission()}catch{return`denied`}}function At(){let e=A(e=>e.rules),t=x(e=>wt(e.baseUrl,e.token)),n=(0,O.useRef)(new Map),r=(0,O.useRef)(new Map),i=(0,O.useRef)(new Map),a=(0,O.useRef)(new Map),o=(0,O.useRef)(t),s=(0,O.useRef)(0),c=JSON.stringify(e.filter(e=>e.enabled).map(e=>[e.id,e.metric,e.operator,e.threshold,e.queue]));(0,O.useEffect)(()=>{let e=()=>{n.current.clear(),r.current.clear(),i.current.clear(),a.current.clear()},l=o.current!==t;if(l&&(o.current=t,e()),c===`[]`){e(),M.setState({breaching:[],status:`idle`,error:null,connectionIdentity:t});return}let u=new Set(A.getState().rules.filter(e=>e.enabled).map(e=>e.id)),d=l?[]:M.getState().breaching.filter(e=>u.has(e.ruleId));M.setState({breaching:d,status:`checking`,error:null,connectionIdentity:t});let f;try{f=Tt(t)}catch(e){M.setState({breaching:[],status:`degraded`,error:`Alert evaluation failed: ${e.message}`,connectionIdentity:t});return}let p=new AbortController,m=++s.current,h=!1,g=!1,_=()=>{if(h||s.current!==m)return!1;let e=x.getState();return wt(e.baseUrl,e.token)===t},v=e=>{for(let t of[...n.current.keys()])e.has(t)||(n.current.delete(t),r.current.delete(t),i.current.delete(t),a.current.delete(t))},y=async()=>{if(!g){g=!0;try{let e=Et(f,p.signal),[o,s,c]=await Promise.all([e.queuesSummary().then(ft).catch(()=>null),vt(e),e.overview().then(pt).catch(()=>null)]);if(!_())return;let l=A.getState().rules.filter(e=>e.enabled),u=new Set(l.map(e=>e.id));if(v(u),!c){let e=M.getState().breaching.filter(e=>u.has(e.ruleId));if(!_())return;M.setState({breaching:e,status:`degraded`,error:`The bunqueue overview endpoint is unavailable; alert results may be stale.`,connectionIdentity:t});return}let d=Date.now(),m=[],h=[],g=!1;for(let e of l){let t=gt(e,{summary:o,queues:s,overview:c});if(t==null){g=!0;let t=n.current.get(e.id)?a.current.get(e.id):void 0;t&&m.push(t);continue}let l=dt(t,e.operator,e.threshold),u=n.current.get(e.id)??!1;if(l){let n=u?i.current.get(e.id)??d:d;i.current.set(e.id,n);let o={ruleId:e.id,ruleName:e.name,metricLabel:st[e.metric],operator:e.operator,threshold:e.threshold,value:t,queue:e.queue,at:n};m.push(o),a.current.set(e.id,o);let s=r.current.get(e.id)??0;d-s>Ot&&s<n&&(h.push(o),r.current.set(e.id,d))}else i.current.delete(e.id),a.current.delete(e.id);n.current.set(e.id,l)}if(!_())return;St(h);let y=!o||!s||g;M.setState({breaching:m,status:y?`degraded`:`live`,error:y?`Some alert rules could not be evaluated; affected results remain unknown.`:null,connectionIdentity:t})}catch(e){if(!_())return;M.setState({status:`degraded`,error:`Alert evaluation failed: ${e.message}`,connectionIdentity:t})}finally{g=!1}}};y();let b=setInterval(y,Dt);return()=>{h=!0,s.current===m&&(s.current+=1),p.abort(),clearInterval(b)}},[c,t])}function jt(){return At(),null}var Mt={authentication:100,"command-palette":80,copilot:60,"database-row":40,"mobile-navigation":20},N=b((e,t)=>({active:null,request(n){let r=t().active;return r===n?!0:r&&Mt[r]>Mt[n]?!1:(e({active:n}),!0)},release(n){t().active===n&&e({active:null})},reset(){e({active:null})}}));function P(e){let t=N.getState().active;return t===null||t===e}var F=f();function Nt(e){return{scope:e,auth:e===`agent`?ee().Authorization:v().Authorization,target:e===`agent`?C.agentBase:m()}}function Pt(e,t){return e?.scope===t.scope&&e.auth===t.auth&&e.target===t.target}function Ft(){let[e,t]=(0,O.useState)(!1),[n,r]=(0,O.useState)(`server`),[i,a]=(0,O.useState)(``),o=x(e=>e.baseUrl),s=x(e=>e.setToken),c=x(e=>e.setAgentToken),l=(0,O.useRef)(null),d=(0,O.useRef)(null),f=(0,O.useRef)(null),p=(0,O.useRef)(null),m=N(e=>e.active),h=e&&m===`authentication`;(0,O.useEffect)(()=>{let e=e=>{let n=e.detail;if(n?.scope!==`server`&&n?.scope!==`agent`)return;let i=Nt(n.scope);n.auth!==i.auth||n.target!==i.target||(Pt(f.current,i)||(p.current=null,a(``)),f.current=i,N.getState().request(`authentication`),r(i.scope),t(!0),window.dispatchEvent(new window.Event(`auth:gate-opened`)))};return window.addEventListener(`auth:required`,e),()=>window.removeEventListener(`auth:required`,e)},[]),(0,O.useEffect)(()=>()=>{N.getState().release(`authentication`)},[]),(0,O.useEffect)(()=>{if(!h)return;let e=document.activeElement,t=document.getElementById(`app-shell`)?[]:[`app-nav`,`app-content`].map(e=>document.getElementById(e)).filter(e=>e!==null),n=t.map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));for(let e of t)e.inert=!0,e.setAttribute(`aria-hidden`,`true`);let r=window.requestAnimationFrame(()=>l.current?.focus()),i=()=>d.current?Array.from(d.current.querySelectorAll(`a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`)):[],a=e=>{if(e.key!==`Tab`)return;let t=i();if(!t.length){e.preventDefault();return}let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())};return window.addEventListener(`keydown`,a),()=>{window.cancelAnimationFrame(r),window.removeEventListener(`keydown`,a);for(let e of n)e.element.inert=e.inert,e.ariaHidden===null?e.element.removeAttribute(`aria-hidden`):e.element.setAttribute(`aria-hidden`,e.ariaHidden);P(`authentication`)&&e?.isConnected&&e.focus()}},[h]);let g=()=>{f.current=null,p.current=null,a(``),t(!1),N.getState().release(`authentication`)};return h?(0,F.jsx)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center bg-black/60 p-4`,children:(0,F.jsxs)(`form`,{ref:d,onSubmit:e=>{e.preventDefault();let t=f.current,n=p.current;if(!t||!n||!Pt(n.identity,t)||!Pt(t,Nt(t.scope))){g();return}let r=n.value.trim();r&&(t.scope===`agent`?c(r):s(r),g())},role:`dialog`,"aria-modal":`true`,"aria-label":`Authentication required`,className:`w-full max-w-sm rounded-xl border border-line-strong bg-surface p-6 shadow-2xl`,children:[(0,F.jsx)(`h2`,{className:`text-lg font-semibold text-fg`,children:`Authentication required`}),n===`agent`?(0,F.jsxs)(`p`,{className:`mt-1 text-sm text-muted`,children:[`The control agent at `,(0,F.jsx)(`span`,{className:`break-all font-mono text-fg`,children:C.agentBase}),` `,`rejected the request (401). Enter its`,` `,(0,F.jsx)(`span`,{className:`font-mono text-fg`,children:`AGENT_TOKEN`}),` to continue.`]}):(0,F.jsxs)(`p`,{className:`mt-1 text-sm text-muted`,children:[`The server at `,(0,F.jsx)(`span`,{className:`break-all font-mono text-fg`,children:o}),` rejected the request (401). Enter its bearer token to continue.`]}),(0,F.jsx)(`input`,{ref:l,type:`password`,value:i,onInput:e=>{let t=e.currentTarget.value;a(t);let n=f.current;p.current=n?{identity:n,value:t}:null},placeholder:n===`agent`?`AGENT_TOKEN`:`Bearer token`,"aria-label":n===`agent`?`Agent token`:`Bearer token`,name:n===`agent`?`agent-token`:`server-token`,autoComplete:`current-password`,className:`mt-4 w-full rounded-lg border border-line bg-surface-2 px-3 py-2 text-sm text-fg outline-none placeholder:text-faint focus-visible:ring-2 focus-visible:ring-accent/50`}),(0,F.jsxs)(`div`,{className:`mt-4 flex items-center justify-between gap-3`,children:[(0,F.jsx)(u,{to:`/settings`,onClick:g,className:`text-xs text-muted underline-offset-2 hover:text-fg hover:underline`,children:`Open Settings instead`}),(0,F.jsx)(`button`,{type:`submit`,disabled:!i.trim(),className:`rounded-lg bg-accent px-4 py-2 text-sm font-medium text-accent-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50 disabled:opacity-50`,children:`Unlock`})]})]})}):null}var It=`bq-dash-theme`,Lt=1;function I(e){return e===`light`?`light`:`dark`}function L(){try{return globalThis.localStorage??null}catch{return null}}var Rt={getItem(e){let t=L();if(!t)return null;try{let n=t.getItem(e);if(n===null||e!==It)return n;let r=JSON.parse(n),i=r&&typeof r==`object`&&!Array.isArray(r)?r:{},a=i.state&&typeof i.state==`object`&&!Array.isArray(i.state)?i.state:{},o=JSON.stringify({state:{theme:I(a.theme)},version:Lt});if(n!==o)try{t.setItem(e,o)}catch{}return o}catch{try{t.removeItem(e)}catch{}return null}},setItem(e,t){try{L()?.setItem(e,t)}catch{}},removeItem(e){try{L()?.removeItem(e)}catch{}}};function R(e){typeof document<`u`&&(document.documentElement.dataset.theme=e,document.documentElement.style.colorScheme=e)}var z=b()(S((e,t)=>({theme:`dark`,toggle:()=>{let n=t().theme===`dark`?`light`:`dark`;R(n),e({theme:n})},setTheme:t=>{let n=I(t);R(n),e({theme:n})}}),{name:It,version:Lt,storage:_(()=>Rt),partialize:e=>({theme:I(e.theme)}),merge:(e,t)=>{let n=e&&typeof e==`object`&&!Array.isArray(e)?e:{};return{...t,theme:I(n.theme)}},onRehydrateStorage:()=>e=>{e&&R(I(e.theme))}}));function zt(){R(I(z.getState().theme))}var Bt={connecting:{dot:`bg-zinc-500`,label:`connecting`},connected:{dot:`bg-emerald-400`,label:`connected`},degraded:{dot:`bg-amber-400`,label:`reachable, degraded`},offline:{dot:`bg-red-400`,label:`offline`}};function Vt(){let e=x(e=>e.baseUrl),t=x(e=>e.profiles),n=x(e=>e.activeProfileId),r=x(e=>e.activateProfile),{data:i,error:a,loading:o}=Ee(async()=>{let e=await Te.health();if(typeof e.ok!=`boolean`)throw Error(`Malformed health response`);return{healthy:e.ok}},[],{intervalMs:15e3}),s=Bt[o?`connecting`:a||!i?`offline`:i.healthy?`connected`:`degraded`],c=e.replace(/^https?:\/\//,``)||`local`;return(0,F.jsxs)(`div`,{className:`mx-3 mb-4 flex items-center gap-2 rounded-lg border border-line bg-surface px-3 py-1.5`,children:[(0,F.jsx)(`span`,{className:E(`size-1.5 rounded-full`,s.dot),title:s.label}),(0,F.jsx)(`label`,{className:`sr-only`,htmlFor:`active-bunqueue-node`,children:`Active Bunqueue node`}),(0,F.jsx)(`select`,{id:`active-bunqueue-node`,"aria-label":`Active Bunqueue node`,value:n,onChange:e=>r(e.target.value),title:`${t.length} configured node${t.length===1?``:`s`} · ${e}`,className:`min-w-0 flex-1 truncate bg-transparent text-[11px] font-medium text-muted outline-none`,children:t.map(e=>(0,F.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,F.jsx)(`span`,{className:`sr-only`,title:e,children:c}),(0,F.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px] text-faint`,"aria-label":`${t.length} nodes`,children:[t.length,`×`]}),(0,F.jsx)(`span`,{className:`sr-only`,children:s.label})]})}function Ht(e){let t=null,n=document.activeElement;try{return t=document.createElement(`textarea`),t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select(),document.execCommand(`copy`)}catch{return!1}finally{t?.remove(),n?.focus?.()}}function Ut({value:e,className:t}){let[n,r]=(0,O.useState)(`idle`),i=(0,O.useRef)(null);(0,O.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]);let a=async()=>{let t=!1;if(navigator.clipboard)try{await navigator.clipboard.writeText(e),t=!0}catch{}t||=Ht(e),r(t?`copied`:`failed`),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>r(`idle`),1500)},o=n===`copied`?`Copied to clipboard`:n===`failed`?`Copy failed`:`Copy to clipboard`;return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`button`,{type:`button`,onClick:a,"aria-label":o,title:o,className:E(`inline-flex size-6 shrink-0 items-center justify-center rounded-md text-faint transition-colors hover:bg-surface-2 hover:text-fg`,`focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent`,t),children:n===`copied`?(0,F.jsx)(ve,{className:`size-3.5 text-success`}):n===`failed`?(0,F.jsx)(_e,{className:`size-3.5 text-danger`}):(0,F.jsx)(ye,{className:`size-3.5`})}),(0,F.jsx)(`span`,{className:`sr-only`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:n===`idle`?``:o})]})}var B;function V(){return B===void 0&&(B=Wt()),B}function Wt(){if(typeof window>`u`)return!1;let{search:e,hash:t}=window.location;return new URLSearchParams(e).has(`demo`)||t.replace(/^#/,``)===`demo`}var Gt=`https://github.com/egeominotti/bunqueue-dashboard`,Kt=`https://egeominotti.github.io/bunqueue-dashboard/docs/`,qt=`bunx bunqueue-dashboard`;function Jt(){return(0,F.jsxs)(`div`,{className:`mx-3 mb-2 rounded-lg border border-accent/30 bg-accent/5 p-3`,children:[(0,F.jsx)(`p`,{className:`mb-2 text-[11px] font-medium leading-snug text-fg`,children:`Like it? Run it on your own bunqueue server.`}),(0,F.jsxs)(`div`,{className:`mb-2 flex items-center gap-1.5 rounded-md border border-line bg-surface-2 px-2 py-1`,children:[(0,F.jsx)(`code`,{className:`min-w-0 flex-1 truncate font-mono text-[11px] text-fg`,children:qt}),(0,F.jsx)(Ut,{value:qt})]}),(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsxs)(`a`,{href:Gt,target:`_blank`,rel:`noreferrer`,className:`flex flex-1 items-center justify-center gap-1 rounded-md bg-accent px-2 py-1.5 text-[11px] font-semibold text-accent-fg transition-opacity hover:opacity-90`,children:[(0,F.jsx)(`span`,{"aria-hidden":!0,children:`★`}),` Star`]}),(0,F.jsx)(`a`,{href:Kt,target:`_blank`,rel:`noreferrer`,className:`flex flex-1 items-center justify-center rounded-md border border-line px-2 py-1.5 text-[11px] font-medium text-muted transition-colors hover:bg-surface-2 hover:text-fg`,children:`Docs`})]})]})}function Yt(){let e=x(e=>e.baseUrl),t=x(e=>e.profiles),n=x(e=>e.activeProfileId),r=t.find(e=>e.id===n),i=e===`/api`?`localhost:6790`:e.replace(/^https?:\/\//,``);return(0,F.jsxs)(F.Fragment,{children:[V()&&(0,F.jsx)(Jt,{}),(0,F.jsxs)(`div`,{className:`mx-3 mb-3 flex items-center gap-2.5 rounded-lg border border-line bg-surface px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`flex size-7 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-accent to-fuchsia-600 text-[11px] font-bold text-white`,children:`bq`}),(0,F.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`div`,{className:`truncate text-xs font-medium text-fg`,children:r?.name??`bunqueue`}),(0,F.jsx)(`div`,{className:`truncate font-mono text-[10px] text-faint`,title:e,children:i}),(0,F.jsxs)(`div`,{className:`text-[9px] text-faint`,children:[t.length,` configured node`,t.length===1?``:`s`]})]}),(0,F.jsx)(u,{to:`/settings`,"aria-label":`Settings`,className:`text-faint transition-colors hover:text-fg`,children:(0,F.jsx)(oe,{className:`size-4`})})]})]})}var Xt=[{section:null,items:[{to:`/`,label:`Overview`,icon:we,end:!0},{to:`/fleet`,label:`Fleet`,icon:ie,end:!0}]},{section:`Queues`,items:[{to:`/queues`,label:`Queues`,icon:se,end:!0},{to:`/jobs`,label:`Jobs`,icon:T,end:!0},{to:`/dlq`,label:`Dead Letter Queue`,icon:xe},{to:`/cron`,label:`Cron Jobs`,icon:ue}]},{section:`Workflow`,items:[{to:`/workflows`,label:`Overview`,icon:we,end:!0},{to:`/flows`,label:`Job Flows`,icon:ge,end:!0},{to:`/workflows/executions`,label:`Executions`,icon:T,end:!0},{to:`/workflows/waiting`,label:`Waiting & Signals`,icon:ue,end:!0},{to:`/workflows/compensation`,label:`Compensation`,icon:xe,end:!0},{to:`/workflows/archive`,label:`Archive`,icon:he,end:!0}]},{section:`Monitoring`,items:[{to:`/metrics`,label:`Metrics`,icon:le},{to:`/workers`,label:`Workers`,icon:ie},{to:`/logs`,label:`Logs`,icon:pe},{to:`/alerts`,label:`Alerts`,icon:be}]},{section:`Control`,items:[{to:`/server`,label:`Server`,icon:ie},{to:`/add-job`,label:`Add Job`,icon:T},{to:`/jobs/bulk-add`,label:`Bulk Add`,icon:T},{to:`/job`,label:`Job Inspector`,icon:de},{to:`/queue-control`,label:`Queue Control`,icon:se},{to:`/dlq-control`,label:`DLQ Control`,icon:xe},{to:`/webhooks`,label:`Webhooks`,icon:w},{to:`/diagnostics`,label:`Diagnostics`,icon:le},{to:`/benchmark`,label:`Benchmark`,icon:w}]},{section:`Management`,items:[{to:`/database`,label:`Database`,icon:he},{to:`/mcp`,label:`MCP`,icon:w},{to:`/usage`,label:`Usage`,icon:me},{to:`/s3`,label:`S3 Backup`,icon:Ce},{to:`/settings`,label:`Settings`,icon:oe}]}];function Zt(){let e=z(e=>e.theme),t=z(e=>e.toggle),n=e===`dark`;return(0,F.jsxs)(`button`,{type:`button`,onClick:t,className:`mx-3 mb-3 flex items-center gap-3 rounded-lg px-3 py-2 text-sm text-muted transition-colors hover:bg-surface-2 hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50`,children:[n?(0,F.jsx)(ae,{className:`size-4`}):(0,F.jsx)(Se,{className:`size-4`}),n?`Light Mode`:`Dark Mode`]})}function Qt({open:e=!1,blocked:t=!1,onClose:n}){return(0,F.jsxs)(F.Fragment,{children:[e&&(0,F.jsx)(`button`,{type:`button`,"aria-label":`Close navigation`,tabIndex:-1,onClick:n,className:`fixed inset-0 z-40 bg-black/50 lg:hidden`}),(0,F.jsxs)(`div`,{id:`app-nav`,role:e?`dialog`:`complementary`,"aria-modal":e||void 0,"aria-label":e?`Navigation menu`:void 0,inert:t?!0:void 0,"aria-hidden":t||void 0,className:E(`flex w-60 shrink-0 flex-col border-r border-line bg-sidebar`,`fixed inset-y-0 left-0 z-50 transition-[transform,visibility] lg:static lg:z-auto lg:translate-x-0`,e?`translate-x-0`:`-translate-x-full lg:translate-x-0 invisible lg:visible`),children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2 px-5 py-5`,children:[(0,F.jsx)(`span`,{className:`text-lg font-bold tracking-tight text-fg`,children:`bunqueue`}),(0,F.jsx)(`span`,{className:`rounded-md bg-accent/15 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-accent`,children:`dash`})]}),(0,F.jsx)(`nav`,{className:`flex-1 overscroll-contain overflow-y-auto px-3 pb-4`,children:Xt.map(e=>(0,F.jsxs)(`div`,{className:`mb-4`,children:[e.section&&(0,F.jsx)(`div`,{className:`px-2 pb-2 pt-1 text-[10px] font-semibold uppercase tracking-wider text-faint`,children:e.section}),(0,F.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:e.items.map(({to:e,label:t,icon:n,end:r})=>(0,F.jsx)(i,{to:e,end:r,className:({isActive:e})=>E(`group relative flex items-center gap-3 rounded-lg px-3 py-2 text-sm font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50`,e?`bg-surface-2 text-fg`:`text-muted hover:bg-surface-2/60 hover:text-fg`),children:({isActive:e})=>(0,F.jsxs)(F.Fragment,{children:[e&&(0,F.jsx)(`span`,{className:`absolute inset-y-1.5 left-0 w-0.5 rounded-full bg-accent`}),(0,F.jsx)(n,{className:`size-[18px] shrink-0`}),(0,F.jsx)(`span`,{className:`truncate`,children:t})]})},e))})]},e.section??`root`))}),(0,F.jsx)(Vt,{}),(0,F.jsx)(Zt,{}),(0,F.jsx)(Yt,{})]})]})}var $t=`https://egeominotti.github.io/bunqueue-dashboard/docs/`,en=`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function tn(e){let t=e.parentElement;if(!t)return()=>{};let n=Array.from(t.children).filter(t=>t!==e),r=n.map(e=>({node:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));for(let e of n)e.inert=!0,e.setAttribute(`aria-hidden`,`true`);return()=>{for(let{node:e,inert:t,ariaHidden:n}of r)e.inert=t,n==null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)}}function nn(){let[e,t]=(0,O.useState)(``),[n,r]=(0,O.useState)(0),i=N(e=>e.active===`command-palette`),a=N(e=>e.release),o=p(),s=z(e=>e.toggle),c=(0,O.useRef)(null),l=(0,O.useRef)(null),u=(0,O.useRef)(null),d=(0,O.useRef)(null),f=(0,O.useCallback)(()=>a(`command-palette`),[a]),m=(0,O.useMemo)(()=>{let e=Xt.flatMap(e=>e.items.map(t=>({id:`nav:${t.to}`,label:t.label,hint:e.section??`Home`,run:()=>o(t.to)}))),t=[{id:`act:theme`,label:`Toggle theme (dark / light)`,hint:`Action`,run:s},{id:`act:docs`,label:`Open documentation`,hint:`Action`,run:()=>window.open($t,`_blank`,`noopener`)}];return[...e,...t]},[o,s]),h=(0,O.useMemo)(()=>{let t=e.trim().toLowerCase();return t?m.filter(e=>`${e.label} ${e.hint}`.toLowerCase().includes(t)):m},[m,e]);(0,O.useEffect)(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`){e.preventDefault();let t=N.getState();t.active===`command-palette`?t.release(`command-palette`):t.request(`command-palette`)}},t=()=>N.getState().request(`command-palette`);return window.addEventListener(`keydown`,e),window.addEventListener(`command-palette:open`,t),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`command-palette:open`,t)}},[]),(0,O.useEffect)(()=>{if(!i)return;let e=document.activeElement;t(``),r(0);let n=u.current&&!document.getElementById(`app-shell`)?tn(u.current):()=>{},a=requestAnimationFrame(()=>c.current?.focus()),o=e=>{if(e.key===`Escape`){e.preventDefault(),f();return}if(e.key!==`Tab`)return;let t=d.current;if(!t)return;let n=Array.from(t.querySelectorAll(en));if(n.length===0){e.preventDefault(),t.focus();return}let r=n[0],i=n[n.length-1],a=document.activeElement;e.shiftKey&&(a===r||!t.contains(a))?(e.preventDefault(),i.focus()):!e.shiftKey&&(a===i||!t.contains(a))&&(e.preventDefault(),r.focus())};return document.addEventListener(`keydown`,o),()=>{cancelAnimationFrame(a),document.removeEventListener(`keydown`,o),n(),P(`command-palette`)&&e?.isConnected&&e.focus()}},[i,f]),(0,O.useEffect)(()=>{l.current?.querySelector(`[data-idx="${n}"]`)?.scrollIntoView({block:`nearest`})},[n]);let g=(0,O.useCallback)(e=>{e&&(e.run(),f())},[f]);return i?(0,F.jsxs)(`div`,{ref:u,className:`fixed inset-0 z-50 flex items-start justify-center p-4 pt-[12vh]`,children:[(0,F.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-label":`Close command palette`,onClick:f,className:`fixed inset-0 bg-black/50`}),(0,F.jsxs)(`div`,{ref:d,tabIndex:-1,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:`relative z-10 w-full max-w-lg overflow-hidden rounded-xl border border-line-strong bg-surface shadow-2xl`,children:[(0,F.jsx)(`input`,{ref:c,role:`combobox`,value:e,onChange:e=>{t(e.target.value),r(0)},onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),f()):e.key===`ArrowDown`?(e.preventDefault(),r(e=>Math.min(e+1,Math.max(0,h.length-1)))):e.key===`ArrowUp`?(e.preventDefault(),r(e=>Math.max(e-1,0))):e.key===`Enter`&&(e.preventDefault(),g(h[n]))},placeholder:`Search pages and actions…`,"aria-label":`Search pages and actions`,"aria-autocomplete":`list`,"aria-expanded":`true`,"aria-controls":`command-palette-results`,"aria-activedescendant":h[n]?`command-palette-option-${n}`:void 0,autoComplete:`off`,name:`command-palette-search`,className:`w-full border-b border-line bg-transparent px-4 py-3 text-sm text-fg outline-none placeholder:text-faint focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent/50`}),(0,F.jsxs)(`div`,{ref:l,id:`command-palette-results`,role:`listbox`,className:`max-h-80 overflow-y-auto overscroll-contain py-2`,"aria-label":`Results`,children:[h.length===0&&(0,F.jsx)(`div`,{role:`presentation`,className:`px-4 py-6 text-center text-sm text-faint`,children:`No matches`}),h.map((e,t)=>(0,F.jsx)(`div`,{role:`presentation`,children:(0,F.jsxs)(`button`,{type:`button`,id:`command-palette-option-${t}`,role:`option`,"aria-selected":t===n,tabIndex:-1,"data-idx":t,onMouseEnter:()=>r(t),onClick:()=>g(e),className:`flex w-full items-center justify-between gap-3 px-4 py-2 text-left text-sm transition-colors ${t===n?`bg-accent/15 text-fg`:`text-muted`}`,children:[(0,F.jsx)(`span`,{className:`truncate`,children:e.label}),(0,F.jsx)(`span`,{className:`shrink-0 text-xs text-faint`,children:e.hint})]})},e.id))]}),(0,F.jsxs)(`div`,{className:`flex items-center justify-between border-t border-line px-4 py-2 text-xs text-faint`,children:[(0,F.jsx)(`span`,{children:`↑↓ navigate · ↵ open · esc close`}),(0,F.jsx)(`span`,{className:`font-mono`,children:`⌘K`})]})]})]}):null}var rn=`bq-dash-copilot`,an=1,on=new Set([`anthropic`,`openai`,`google`,`zai`,`openrouter`,`custom`]),H={provider:`anthropic`,baseURL:``,model:`claude-opus-4-8`,apiKey:``};function sn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function cn(e,t){return typeof e==`string`?e:t}function ln(e){return typeof e==`string`&&on.has(e)?e:H.provider}function un(e,t=``){let n=sn(e)?e:{},r=ln(n.provider);return{provider:r,baseURL:r===`custom`?cn(n.baseURL,H.baseURL):H.baseURL,model:cn(n.model,H.model),apiKey:t}}function U(e){let t=un((sn(e)?e:{}).config);return{config:{provider:t.provider,baseURL:t.baseURL,model:t.model}}}var dn=0,fn=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${(dn++).toString(36)}-${Math.random().toString(36).slice(2,8)}`,W=new Map,G=(e,t,n)=>e.map(e=>e.id===t?n(e):e);function pn(e){return U(e)}var mn=g({key:rn,version:an,sanitizeState:U});b()(S(e=>({open:!1,config:{...H},messages:[],pending:[],busy:!1,setOpen:t=>e({open:t}),toggle:()=>e(e=>({open:!e.open})),setConfig:t=>e(e=>{let n={...e.config,...t};return{config:un(n,cn(n.apiKey,``))}}),clear:()=>{for(let e of W.values())e(!1);W.clear(),e({messages:[],pending:[]})},cancelPending:()=>{for(let e of W.values())e(!1);W.clear(),e({pending:[]})},setBusy:t=>e({busy:t}),addUser:t=>e(e=>({messages:[...e.messages,{id:fn(),role:`user`,content:t}]})),startAssistant:()=>{let t=fn();return e(e=>({messages:[...e.messages,{id:t,role:`assistant`,content:``,tools:[]}]})),t},appendAssistant:(t,n)=>e(e=>({messages:G(e.messages,t,e=>({...e,content:e.content+n}))})),finishAssistant:(t,n)=>e(e=>({messages:G(e.messages,t,e=>({...e,done:!0,error:!!n?.error,content:n?.error?e.content?`${e.content}\n\n${n.error}`:n.error:e.content}))})),addTool:(t,n)=>e(e=>({messages:G(e.messages,t,e=>({...e,tools:[...e.tools??[],n]}))})),updateTool:(t,n,r)=>e(e=>({messages:G(e.messages,t,e=>({...e,tools:(e.tools??[]).map(e=>e.id===n?{...e,...r}:e)}))})),requestConfirm:t=>new Promise(n=>{let r=fn();W.set(r,n),e(e=>({pending:[...e.pending,{...t,id:r}]}))}),resolveConfirm:(t,n)=>{let r=W.get(t);r&&(W.delete(t),r(n)),e(e=>({pending:e.pending.filter(e=>e.id!==t)}))}}),{name:rn,version:an,storage:_(()=>mn),partialize:e=>pn(e),migrate:U,merge:(e,t)=>{let n=U(e);return{...t,config:{...n.config,apiKey:``}}}}));var hn=new Set;function gn(){for(let e of[...hn])e()}function K(e){let t=(0,O.lazy)(r);function n(){hn.delete(n),t=(0,O.lazy)(r)}function r(){return e().catch(e=>{throw hn.add(n),e})}function i(e){return(0,O.createElement)(t,e)}return i}var _n=class extends O.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error(`ErrorBoundary caught an error`,e,t.componentStack)}componentDidUpdate(e){this.state.error&&e.resetKey!==this.props.resetKey&&(gn(),this.setState({error:null}))}render(){let{error:e}=this.state;return e?(0,F.jsx)(`div`,{className:`flex min-h-screen items-center justify-center p-6`,children:(0,F.jsxs)(Oe,{className:`w-full max-w-lg`,children:[(0,F.jsx)(Ae,{error:e}),(0,F.jsx)(`div`,{className:`mt-4 flex justify-center`,children:(0,F.jsx)(De,{onClick:()=>window.location.reload(),children:`Reload`})})]})}):this.props.children}},vn={success:{bar:`bg-emerald-500`,title:`text-success`},error:{bar:`bg-red-500`,title:`text-danger`},info:{bar:`bg-accent`,title:`text-accent`}};function yn({toast:e,dismiss:t}){(0,O.useEffect)(()=>{let n=window.setTimeout(()=>t(e.id),e.ttlMs);return()=>window.clearTimeout(n)},[e.id,e.ttlMs,t]);let n=vn[e.level];return(0,F.jsxs)(`div`,{className:`pointer-events-auto flex w-80 max-w-[calc(100vw-2rem)] overflow-hidden rounded-lg border border-line bg-surface shadow-lg`,children:[(0,F.jsx)(`span`,{className:E(`w-1 shrink-0`,n.bar),"aria-hidden":`true`}),(0,F.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3 px-3 py-2.5`,children:[(0,F.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`div`,{className:E(`text-sm font-medium`,n.title),children:e.title}),e.detail&&(0,F.jsx)(`div`,{className:`mt-0.5 break-words text-xs text-muted`,children:e.detail})]}),(0,F.jsx)(`button`,{type:`button`,onClick:()=>t(e.id),"aria-label":`Dismiss notification`,className:`-mr-1 shrink-0 rounded p-0.5 text-faint hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50`,children:(0,F.jsx)(_e,{className:`size-4`})})]})]})}function bn(){let e=ne(e=>e.toasts),t=ne(e=>e.dismiss);return(0,F.jsx)(`section`,{className:`pointer-events-none fixed bottom-4 right-4 z-[60] flex flex-col gap-2`,"aria-label":`Notifications`,"aria-live":`polite`,children:e.map(e=>(0,F.jsx)(yn,{toast:e,dismiss:t},e.id))})}function xn(e,t){(0,O.useLayoutEffect)(()=>{let t=e.current;t&&(t.scrollTop=0,t.scrollLeft=0)},[t,e])}var Sn={"/":`Overview`,"/fleet":`Fleet`,"/queues":`Queues`,"/jobs":`Jobs`,"/dlq":`Dead Letter Queue`,"/cron":`Cron Jobs`,"/flows":`Flows`,"/workflows":`Workflow · Overview`,"/workflows/executions":`Workflow · Executions`,"/workflows/waiting":`Workflow · Waiting & Signals`,"/workflows/compensation":`Workflow · Compensation`,"/workflows/archive":`Workflow · Archive`,"/metrics":`Metrics`,"/workers":`Workers`,"/logs":`Logs`,"/server":`Server`,"/add-job":`Add Job`,"/jobs/bulk-add":`Bulk Add Jobs`,"/job":`Job Inspector`,"/queue-control":`Queue Control`,"/dlq-control":`DLQ Control`,"/webhooks":`Webhooks`,"/diagnostics":`Diagnostics`,"/alerts":`Alerts`,"/benchmark":`Benchmark`,"/database":`Database`,"/mcp":`MCP`,"/usage":`Usage`,"/s3":`S3 Backup`,"/settings":`Settings`,"/overview-classic":`Overview (classic)`,"/queues-classic":`Queues (classic)`,"/jobs-classic":`Jobs (classic)`,"/dlq-classic":`DLQ (classic)`,"/cron-classic":`Cron Jobs (classic)`,"/metrics-classic":`Metrics (classic)`,"/workers-classic":`Workers (classic)`,"/logs-classic":`Logs (classic)`,"/usage-classic":`Usage (classic)`,"/s3-classic":`S3 Backup (classic)`};function Cn(e){let t=e.length>1?e.replace(/\/+$/,``):e,n=t.toLowerCase();if(Sn[n])return Sn[n];let r=n.startsWith(`/queues-classic/`);if(r||n.startsWith(`/queues/`)){let e=t.slice(r?16:8);try{e=decodeURIComponent(e)}catch{}return`${e} · Queue${r?` (classic)`:``}`}return`Page not found`}function wn(e){(0,O.useEffect)(()=>{document.title=`${e} · bunqueue`},[e])}var Tn=V();function En({onMenu:e,navOpen:t=!1}){let{pathname:n}=a(),r=Cn(n);return wn(r),(0,F.jsxs)(`header`,{className:`sticky top-0 z-10 flex h-14 items-center justify-between gap-3 border-b border-line bg-bg/80 px-4 backdrop-blur sm:px-6 lg:px-8`,children:[(0,F.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,F.jsx)(`button`,{type:`button`,"aria-label":`Open navigation`,"aria-expanded":t,"aria-controls":`app-nav`,onClick:t=>e?.(t.currentTarget),className:`-ml-1 flex size-9 shrink-0 items-center justify-center rounded-lg text-muted hover:bg-surface-2 hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50 lg:hidden`,children:(0,F.jsx)(fe,{className:`size-5`})}),(0,F.jsxs)(`div`,{className:`truncate text-sm text-muted`,children:[(0,F.jsx)(`span`,{className:`text-faint`,children:r}),(0,F.jsx)(`span`,{className:`mx-2 hidden text-faint sm:inline`,children:`·`}),(0,F.jsx)(`span`,{className:`hidden text-faint sm:inline`,children:`bunqueue`})]})]}),(0,F.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[Tn&&(0,F.jsxs)(`span`,{title:`Showing canned sample data. No real bunqueue server is connected.`,className:`hidden items-center gap-1.5 rounded-full border border-accent/40 bg-accent/10 px-2.5 py-1 text-xs font-medium text-accent sm:inline-flex`,children:[(0,F.jsx)(`span`,{className:`size-1.5 rounded-full bg-accent`}),`Live demo`]}),(0,F.jsx)(`button`,{type:`button`,onClick:()=>window.dispatchEvent(new Event(`command-palette:open`)),title:`Command palette`,"aria-label":`Open command palette`,className:`flex size-9 shrink-0 items-center justify-center rounded-lg text-muted hover:bg-surface-2 hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50 sm:hidden`,children:(0,F.jsx)(ce,{className:`size-5`})}),(0,F.jsxs)(`button`,{type:`button`,onClick:()=>window.dispatchEvent(new Event(`command-palette:open`)),title:`Command palette (⌘K)`,"aria-label":`Open command palette`,className:`hidden items-center gap-2 rounded-lg border border-line px-2.5 py-1.5 text-xs text-muted hover:bg-surface-2 hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50 sm:flex`,children:[(0,F.jsx)(`span`,{children:`Search`}),(0,F.jsx)(`kbd`,{className:`rounded border border-line bg-surface-2 px-1 font-mono text-[10px]`,children:`⌘K`})]}),(0,F.jsx)(u,{to:`/settings`,title:`Settings`,"aria-label":`Open settings`,className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-accent to-fuchsia-600 text-xs font-bold text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50`,children:`bq`})]})]})}function Dn(){let[e,t]=(0,O.useState)(!1),{pathname:n,key:r}=a(),i=(0,O.useRef)(null),o=(0,O.useRef)(null),s=N(e=>e.active),l=N(e=>e.request),u=N(e=>e.release),d=e&&s===`mobile-navigation`,f=(0,O.useCallback)(()=>{t(!1),u(`mobile-navigation`)},[u]);return xn(i,r),(0,O.useEffect)(()=>f(),[n,f]),(0,O.useEffect)(()=>{let e=window.matchMedia(`(min-width: 1024px)`),t=()=>e.matches&&f();return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[f]),(0,O.useEffect)(()=>{if(!d)return;let e=e=>{e.key===`Escape`&&f()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[d,f]),(0,O.useEffect)(()=>{if(!d)return;let e=document.getElementById(`app-nav`),t=()=>e?Array.from(e.querySelectorAll(`a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])`)):[],n=()=>t()[0]?.focus(),r=setTimeout(n,0),i=setTimeout(()=>{e?.contains(document.activeElement)||n()},200),a=n=>{if(n.key!==`Tab`)return;let r=t();if(!r.length)return;let i=r[0],a=r[r.length-1];e?.contains(document.activeElement)?n.shiftKey&&document.activeElement===i?(n.preventDefault(),a.focus()):!n.shiftKey&&document.activeElement===a&&(n.preventDefault(),i.focus()):(n.preventDefault(),(n.shiftKey?a:i).focus())};return window.addEventListener(`keydown`,a),()=>{clearTimeout(r),clearTimeout(i),window.removeEventListener(`keydown`,a);let e=o.current;P(`mobile-navigation`)&&e?.isConnected&&e.focus()}},[d]),(0,O.useEffect)(()=>{e&&s!==`mobile-navigation`&&t(!1)},[e,s]),(0,O.useEffect)(()=>{let e=()=>f();return window.addEventListener(`auth:gate-opened`,e),window.addEventListener(`command-palette:open`,e),()=>{window.removeEventListener(`auth:gate-opened`,e),window.removeEventListener(`command-palette:open`,e)}},[f]),(0,O.useEffect)(()=>()=>{N.getState().release(`mobile-navigation`)},[]),(0,F.jsx)(_n,{children:(0,F.jsxs)(`div`,{id:`app-shell`,className:`flex h-screen overflow-hidden bg-bg text-fg`,children:[(0,F.jsx)(`a`,{href:`#main`,onClick:e=>{e.preventDefault(),i.current?.focus()},inert:s!==null||void 0,tabIndex:s===null?void 0:-1,className:`sr-only rounded-md bg-accent px-3 py-2 text-sm font-medium text-accent-fg shadow-lg focus:not-sr-only focus:absolute focus:left-4 focus:top-3 focus:z-50`,children:`Skip to content`}),(0,F.jsx)(Qt,{open:d,blocked:s!==null&&s!==`mobile-navigation`,onClose:f}),(0,F.jsxs)(`div`,{id:`app-content`,className:`flex min-w-0 flex-1 flex-col`,inert:s!==null||void 0,"aria-hidden":s!==null||void 0,children:[(0,F.jsx)(En,{navOpen:d,onMenu:e=>{l(`mobile-navigation`)&&(o.current=e,t(!0))}}),(0,F.jsx)(`main`,{ref:i,id:`main`,tabIndex:-1,className:E(`flex-1 px-4 pt-5 pb-24 focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-accent sm:px-6 lg:px-8 lg:pt-6`,d?`overflow-hidden`:`overflow-y-auto`),children:(0,F.jsx)(O.Suspense,{fallback:(0,F.jsx)(`div`,{className:`p-2 text-sm text-muted`,children:`Loading…`}),children:(0,F.jsx)(_n,{resetKey:r,children:(0,F.jsx)(c,{})})})})]}),(0,F.jsx)(nn,{}),(0,F.jsx)(Ft,{}),!1,(0,F.jsx)(bn,{}),(0,F.jsx)(jt,{})]})})}var On={default:`text-fg`,green:`text-success`,red:`text-danger`,blue:`text-blue-400 light:text-blue-700`,amber:`text-warning`,accent:`text-accent`};function q({label:e,value:t,tone:n=`default`,hint:r,compact:i}){return(0,F.jsxs)(`div`,{className:E(`rounded-xl border border-line bg-surface`,i?`px-4 py-3`:`px-5 py-4`),children:[(0,F.jsx)(`div`,{className:`text-[11px] font-medium uppercase tracking-wider text-faint`,children:e}),(0,F.jsx)(`div`,{className:E(`mt-2 font-semibold tnum`,i?`text-xl`:`text-3xl`,On[n]),children:t}),r!=null&&(0,F.jsx)(`div`,{className:`mt-1 text-xs text-faint`,children:r})]})}var kn={overview:{stats:{waiting:0,active:0,delayed:0,completed:0,dlq:0,totalPushed:0,totalPulled:0,totalCompleted:0,totalFailed:0,uptime:0},throughput:{pushPerSec:0,pullPerSec:0,completePerSec:0,failPerSec:0},memory:{heapUsed:0,heapTotal:0,rss:0},crons:{total:0}},queuesTotal:0,details:[],failedTotal:0,readyTotal:0};function An(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function J(e,t){return An(e)&&t.every(t=>typeof e[t]==`number`&&Number.isFinite(e[t]))}function jn(e){if(!An(e)||!J(e.stats,[`waiting`,`active`,`completed`,`dlq`,`totalPushed`,`totalPulled`,`uptime`])||!J(e.throughput,[`pushPerSec`,`pullPerSec`])||!J(e.memory,[`rss`])||!J(e.crons,[`total`]))throw Error(`Malformed /dashboard response: required overview metrics are missing or non-numeric.`)}var Mn=class extends Error{status;lastEventIdSent;constructor(e,t,n=!1){super(e),this.status=t,this.lastEventIdSent=n,this.name=`SseConnectError`}},Nn=new Set([400,409,413,431]);function Pn(e){return e instanceof Mn&&e.lastEventIdSent&&Nn.has(e.status)}function Fn(e){return!e.includes(`\0`)&&e.length<=4096}function In(e){return!0}function Ln(e){let t=`message`,n,r=[];for(let i of e.split(`
|
|
3
|
-
`)){if(!i||i.startsWith(`:`))continue;let e=i.indexOf(`:`),a=e===-1?i:i.slice(0,e),o=e===-1?``:i.slice(e+1).replace(/^ /,``);a===`event`?t=o:a===`data`?r.push(o):a===`id`&&Fn(o)&&(n=o)}if(r.length===0)return null;let i=r.join(`
|
|
4
|
-
`),a=i;try{a=JSON.parse(i)}catch{}return{id:n,event:t,data:a}}var Rn=45e3,zn=256*1024;async function Bn(e,t,n,r=Rn,i){let a=new AbortController,o=()=>a.abort(n.reason);n.aborted?a.abort(n.reason):n.addEventListener(`abort`,o,{once:!0});let s,c=()=>{clearTimeout(s),s=setTimeout(()=>a.abort(Error(`SSE idle timeout`)),r)};try{c();let n=new Headers({Accept:`text/event-stream`,...v()}),r=!1;if(i&&Fn(i))try{n.set(`Last-Event-ID`,i),r=!0}catch{n.delete(`Last-Event-ID`)}let o=await fetch(e,{headers:n,signal:a.signal});if(!o.ok||!o.body)throw await o.body?.cancel().catch(()=>{}),new Mn(o.ok?`SSE connect failed: empty response body`:`SSE connect failed: HTTP ${o.status}`,o.status,r);let s=o.headers.get(`content-type`)?.split(`;`,1)[0]?.trim().toLowerCase();if(s!==`text/event-stream`)throw await o.body.cancel().catch(()=>{}),new Mn(`SSE connect failed: expected text/event-stream, received ${s||`no Content-Type`}`,o.status,r);let l=o.body.getReader(),u=new TextDecoder,d=``;try{for(;;){let{done:e,value:n}=await l.read();if(e)break;for(c(),d+=u.decode(n,{stream:!0});;){let e=d.indexOf(`
|
|
5
|
-
|
|
6
|
-
`),n=d.indexOf(`\r
|
|
7
|
-
\r
|
|
8
|
-
`),r,i;if(e!==-1&&(n===-1||e<=n))r=e,i=2;else if(n!==-1)r=n,i=4;else{if(d.length>262144)throw Error(`SSE frame exceeds the ${zn}-character limit`);break}if(r>262144)throw Error(`SSE frame exceeds the ${zn}-character limit`);let a=d.slice(0,r);d=d.slice(r+i);let o=Ln(a.replace(/\r/g,``));o&&t(o)}}}finally{l.releaseLock()}}finally{clearTimeout(s),n.removeEventListener(`abort`,o),a.abort()}}var Y={total:0,completed:0,failed:0,waiting:0,active:0},Vn=250,Hn=()=>typeof performance<`u`?performance.now():Date.now();function Un(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function X(e,t){return typeof e==`string`&&e.length<=t?e:void 0}function Wn(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function Gn(e,t){let n=Wn(e);return n!==void 0&&Math.abs(n)<=864e13?n:Number.isFinite(t)&&Math.abs(t)<=864e13?t:0}function Kn(e){let t=Un(e)?e:{},n=Date.now();return{queue:X(t.queue,256),jobId:X(t.jobId,1024),name:X(t.name,512),timestamp:Gn(t.timestamp,n),error:X(t.error,4096),progress:Wn(t.progress)}}function qn(e){let t=e.includes(`:`)?e.split(`:`)[1]:e;switch(t){case`pushed`:case`added`:return`waiting`;case`pulled`:case`progress`:return`active`;default:return t}}function Jn(e){let t=x(e=>e.baseUrl),n=x(e=>e.token),[r,i]=(0,O.useState)([]),[a,o]=(0,O.useState)(Y),[s,c]=(0,O.useState)(0),[l,u]=(0,O.useState)(!1),[d,f]=(0,O.useState)(null),p=(0,O.useRef)([]),m=(0,O.useRef)(0),h=JSON.stringify([t,n,e??null]),g=(0,O.useRef)(h),_=g.current===h,v=_?r:[],y=_?a:Y,b=_?s:0,ee=_?l:!1,S=_?d:null;return(0,O.useEffect)(()=>{let t=new AbortController,n=++m.current,r=0,a=!1,s=[],l={...Y},d,_=()=>!a&&m.current===n;g.current=h,i([]),o(Y),c(0),u(!1),f(null),p.current=[];let v=e=>new Promise(n=>{let r=()=>{clearTimeout(i),n()},i=setTimeout(()=>{t.signal.removeEventListener(`abort`,r),n()},e);t.signal.addEventListener(`abort`,r,{once:!0})}),y=e=>{if(!_()||(e.id!==void 0&&(d=e.id||void 0),In(e)&&(u(e=>_()?!0:e),f(e=>_()?null:e)),!e.event.startsWith(`job:`)))return;let t=Kn(e.data),n=qn(e.event),i={seq:++r,event:e.event,queue:t.queue,jobId:t.jobId,name:t.name,status:n,timestamp:t.timestamp,error:t.error,progress:t.progress};s.push(i);let a=l;a.total+=1,n===`completed`?a.completed+=1:n===`failed`?a.failed+=1:n===`waiting`?a.waiting+=1:n===`active`&&e.event!==`job:progress`&&(a.active+=1),p.current.push(Hn())};(async()=>{let n=0;for(;!a;){let r=null,i=d,a=!1;try{await Bn(Te.eventsUrl(e),e=>{a=!0,y(e)},t.signal,void 0,i)}catch(e){r=e instanceof Error?e:Error(String(e))}if(i&&!a&&d===i&&Pn(r)&&(d=void 0),!_())break;u(e=>!_()&&e),f(e=>_()?r:e),n=r?Math.min((a?0:n)+1,8):0,await v(2e3*Math.max(1,n))}})();let b=setInterval(()=>{if(!_())return;if(s.length){let e=s;s=[],e.reverse(),i(t=>_()?[...e,...t].slice(0,Vn):t)}let e=l;e.total&&(l={...Y},o(t=>_()?{total:t.total+e.total,completed:t.completed+e.completed,failed:t.failed+e.failed,waiting:t.waiting+e.waiting,active:t.active+e.active}:t))},150);return()=>{a=!0,m.current===n&&(m.current+=1),t.abort(),clearInterval(b)}},[e,t,n,h]),(0,O.useEffect)(()=>{let e=setInterval(()=>{let e=Hn();p.current=p.current.filter(t=>t<=e&&e-t<5e3),c(p.current.length/5)},1e3);return()=>clearInterval(e)},[]),{events:v,counters:y,throughput:b,connected:ee,error:S}}function Yn(){let{events:e,connected:t,error:n}=Jn();return(0,F.jsxs)(`div`,{className:`mt-8`,children:[(0,F.jsx)(Xn,{title:`Recent Activity`,to:`/logs`}),(0,F.jsxs)(Oe,{padded:!1,children:[n&&e.length>0&&(0,F.jsxs)(`p`,{className:`border-b border-line px-5 py-2 text-xs text-warning`,children:[`Event stream unavailable — `,n.message,`. Reconnecting…`]}),e.length===0?(0,F.jsx)(`p`,{role:n?`alert`:void 0,className:E(`py-8 text-center text-sm`,n?`text-warning`:`text-faint`),children:n?`Event stream unavailable — ${n.message}. Reconnecting…`:t?`Waiting for live activity…`:`Connecting to the event stream…`}):(0,F.jsx)(`ul`,{className:`divide-y divide-line`,children:e.slice(0,8).map(e=>(0,F.jsxs)(`li`,{className:`flex items-center justify-between px-5 py-3`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,F.jsx)(`span`,{className:E(`size-2 rounded-full`,Zn(e.status))}),(0,F.jsxs)(`div`,{className:`text-sm`,children:[(0,F.jsx)(`span`,{className:`font-mono font-medium text-fg`,children:e.queue||`—`}),(0,F.jsx)(`span`,{className:`text-faint`,children:` · `}),(0,F.jsx)(`span`,{className:`font-mono text-xs text-faint`,children:e.jobId?e.jobId.slice(0,8):`—`}),(0,F.jsx)(`span`,{className:`text-faint`,children:` · `}),(0,F.jsx)(`span`,{className:`capitalize text-muted`,children:e.status})]})]}),(0,F.jsx)(`span`,{className:`text-xs text-faint`,children:Pe(e.timestamp)})]},e.seq))})]})]})}function Xn({title:e,to:t}){return(0,F.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,F.jsx)(`h2`,{className:`text-lg font-semibold text-fg`,children:e}),(0,F.jsxs)(u,{to:t,className:`flex items-center gap-1 text-sm text-muted hover:text-fg`,children:[`View All `,(0,F.jsx)(ge,{className:`size-3.5`})]})]})}function Z({label:e,value:t,tone:n}){return(0,F.jsxs)(`span`,{children:[e,` `,(0,F.jsx)(`span`,{className:E(`tnum font-semibold`,n),children:t==null?`—`:D(t)})]})}function Zn(e){return e===`completed`?`bg-emerald-400`:e===`failed`?`bg-red-400`:e===`active`?`bg-blue-400`:e===`waiting`?`bg-amber-400`:`bg-accent`}function Qn(){let e=x(e=>e.baseUrl),t=(0,O.useRef)(null),{data:n,error:r,loading:i,refetch:a}=Ee(async()=>{let[e,n]=await Promise.all([C.overview(),C.queuesSummary()]);jn(e);let r=[...n].sort((e,t)=>(t.counts?.failed??0)-(e.counts?.failed??0)||(t.counts?.waiting??0)+(t.counts?.prioritized??0)-((e.counts?.waiting??0)+(e.counts?.prioritized??0))).slice(0,6).map(e=>({name:e.name,paused:e.paused,counts:e.counts})),i=n.reduce((e,t)=>e+(t.counts?.failed??0),0),a=n.reduce((e,t)=>e+t.counts.waiting+t.counts.prioritized,0);return t.current=Date.now(),{overview:e,queuesTotal:n.length,details:r,failedTotal:i,readyTotal:a}},[]);if(i&&!n&&!r)return(0,F.jsx)(je,{label:`Loading overview…`});if(r&&!n)return(0,F.jsxs)(`div`,{children:[(0,F.jsx)(Me,{title:`Overview`,description:`Real-time system health is unavailable.`}),(0,F.jsx)(Ae,{error:r,onRetry:a})]});let{overview:o,queuesTotal:s,details:c,failedTotal:l,readyTotal:d}=n??kn,{stats:f,throughput:p,memory:m,crons:h}=o,g=Le(f.completed,l),_=e===`/api`?`localhost:6790`:e.replace(/^https?:\/\//,``),v=f.uptime?Re(f.uptime/1e3):`—`,y=Fe(m.rss*1024*1024),b=!!r;return(0,F.jsxs)(`div`,{children:[(0,F.jsx)(Me,{title:`Overview`,description:`Real-time system health at a glance.`,live:!!n&&!r}),r&&(0,F.jsx)(ke,{message:`Connection lost — showing the last successful overview snapshot.`,onRetry:a}),(0,F.jsxs)(`div`,{className:E(`mb-6 flex flex-wrap items-center justify-between gap-y-2 rounded-xl border px-5 py-4`,b?`border-amber-500/25 bg-amber-500/[0.06]`:`border-emerald-500/25 bg-emerald-500/[0.06]`),children:[(0,F.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,F.jsxs)(`span`,{className:`relative flex size-2.5`,children:[!b&&(0,F.jsx)(`span`,{className:`absolute inline-flex size-full animate-ping rounded-full bg-emerald-400 opacity-60`}),(0,F.jsx)(`span`,{className:E(`relative inline-flex size-2.5 rounded-full`,b?`bg-amber-400`:`bg-emerald-400`)})]}),(0,F.jsxs)(`div`,{className:`min-w-0`,children:[(0,F.jsx)(`div`,{className:E(`font-semibold`,b?`text-warning`:`text-success`),children:b?`Connection lost — showing last known data`:`bunqueue server connected`}),(0,F.jsxs)(`div`,{className:`truncate font-mono text-xs text-muted`,children:[_,` · uptime `,v,` · `,y,` RAM`,b&&(0,F.jsxs)(F.Fragment,{children:[` `,`· last updated `,t.current?Pe(t.current):`never`]})]})]})]}),(0,F.jsx)(`span`,{className:E(`rounded-full px-3 py-1 text-xs font-medium`,b?`bg-amber-500/15 text-warning`:`bg-emerald-500/15 text-success`),children:b?`Stale`:`Online`})]}),(0,F.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-3`,children:[(0,F.jsx)(q,{label:`Error Rate`,value:g==null?`—`:Ne(g),tone:g==null?`default`:g>.05?`red`:`green`,hint:`failed / processed`}),(0,F.jsx)(q,{label:`Failed`,value:D(l),tone:l?`red`:`default`,hint:`recorded across queues`}),(0,F.jsx)(q,{label:`DLQ`,value:D(f.dlq),tone:f.dlq?`red`:`default`,hint:`dead-lettered jobs`})]}),(0,F.jsxs)(`div`,{className:`mt-4 grid grid-cols-2 gap-4 md:grid-cols-3 xl:grid-cols-6`,children:[(0,F.jsx)(q,{label:`Completed`,value:D(f.completed),tone:`green`,compact:!0}),(0,F.jsx)(q,{label:`Active`,value:D(f.active),tone:`blue`,compact:!0}),(0,F.jsx)(q,{label:`Ready backlog`,value:D(d),tone:d>100?`amber`:`default`,hint:`waiting + prioritized`,compact:!0}),(0,F.jsx)(q,{label:`Push/sec`,value:p.pushPerSec.toFixed(1),tone:`accent`,hint:`${Ie(f.totalPushed)} since restart`,compact:!0}),(0,F.jsx)(q,{label:`Pull/sec`,value:p.pullPerSec.toFixed(1),tone:`accent`,hint:`${Ie(f.totalPulled)} since restart`,compact:!0}),(0,F.jsx)(q,{label:`Queues`,value:D(s),hint:`${h.total} cron active`,compact:!0})]}),(0,F.jsxs)(`div`,{className:`mt-8`,children:[(0,F.jsx)(Xn,{title:`Queue Health — most loaded`,to:`/queues`}),c.length===0?(0,F.jsx)(Oe,{children:(0,F.jsx)(`p`,{className:`py-4 text-center text-sm text-faint`,children:`No queues yet.`})}):(0,F.jsx)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3`,children:c.map(e=>(0,F.jsxs)(u,{to:`/queues/${encodeURIComponent(e.name)}`,className:`rounded-xl border border-line bg-surface p-4 transition-colors hover:border-line-strong`,children:[(0,F.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,F.jsx)(`span`,{className:`truncate font-mono text-sm font-medium text-accent`,children:e.name}),(0,F.jsx)(`span`,{className:E(`shrink-0 rounded-full px-2 py-0.5 text-[11px] font-medium`,e.paused?`bg-orange-500/10 text-orange-400`:`bg-emerald-500/10 text-success`),children:e.paused?`paused`:`active`})]}),(0,F.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 font-mono text-xs text-faint`,children:[(0,F.jsx)(Z,{label:`W`,value:e.counts?.waiting,tone:`text-warning`}),(0,F.jsx)(Z,{label:`P`,value:e.counts?.prioritized,tone:`text-orange-400`}),(0,F.jsx)(Z,{label:`A`,value:e.counts?.active,tone:`text-blue-400`}),(0,F.jsx)(Z,{label:`C`,value:e.counts?.completed,tone:`text-success`}),(0,F.jsx)(Z,{label:`F`,value:e.counts?.failed,tone:`text-danger`})]})]},e.name))})]}),(0,F.jsx)(Yn,{})]})}function $n(){return(0,F.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-3 py-24 text-center`,children:[(0,F.jsx)(`h1`,{className:`text-5xl font-bold text-faint`,children:`404`}),(0,F.jsx)(`p`,{className:`text-sm text-muted`,children:`This page does not exist.`}),(0,F.jsx)(u,{to:`/`,className:`rounded-lg border border-line bg-surface-2 px-4 py-2 text-sm font-medium text-fg hover:border-line-strong focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/50`,children:`Back to Overview`})]})}var er=K(()=>l(()=>import(`./AddJob-jq-VZ_YE.js`).then(e=>e.t).then(e=>({default:e.AddJob})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]),import.meta.url)),tr=K(()=>l(()=>import(`./Benchmark-CWYdqm55.js`).then(e=>({default:e.Benchmark})),__vite__mapDeps([15,1,2,5,4,3,16,9,7,8,10,11,17,12,18]),import.meta.url)),nr=K(()=>l(()=>import(`./BulkAddJobs-0cdWqkEF.js`).then(e=>({default:e.BulkAddJobs})),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11,12,13,14]),import.meta.url)),rr=K(()=>l(()=>import(`./CronManager-C0-Y2QDg.js`).then(e=>({default:e.CronManager})),__vite__mapDeps([20,1,2,3,4,5,6,16,9,7,8,10,21,11,17,12,22,13,14,0]),import.meta.url)),ir=K(()=>l(()=>import(`./Database-CseJOrvD.js`).then(e=>({default:e.Database})),__vite__mapDeps([23,1,2,5,4,3,6,16,9,7,8,10,21,11,17,12,22]),import.meta.url)),ar=K(()=>l(()=>import(`./Diagnostics-cZTy4Y2t.js`).then(e=>({default:e.Diagnostics})),__vite__mapDeps([24,1,2,4,5,3,6,9,25,7,8,10,21,11,17,26,27]),import.meta.url)),or=K(()=>l(()=>import(`./DlqControl-CIV5278D.js`).then(e=>({default:e.DlqControl})),__vite__mapDeps([28,1,2,4,5,3,6,16,9,7,8,21,11,17,12,22,29,30,31,10,13,27,26,32]),import.meta.url)),sr=K(()=>l(()=>import(`./DlqPro-BuRxGtGt.js`).then(e=>({default:e.DlqPro})),__vite__mapDeps([33,1,2,4,5,3,6,16,9,7,8,10,21,11,17,12,22,29,30,31,13,27,26,32]),import.meta.url)),cr=K(()=>l(()=>import(`./Flows-CEfm102Y.js`).then(e=>({default:e.Flows})),__vite__mapDeps([34,1,2,5,3,4,9,10,21,11,27,26,35]),import.meta.url)),lr=K(()=>l(()=>import(`./JobInspector-BlMj5-Vr.js`).then(e=>({default:e.JobInspector})),__vite__mapDeps([36,1,2,5,3,4,16,9,8,10,21,11,17,12,29,30,35]),import.meta.url)),ur=K(()=>l(()=>import(`./JobsPro-A06ZG5Xi.js`).then(e=>({default:e.JobsPro})),__vite__mapDeps([37,1,2,4,5,3,6,16,9,7,8,21,11,17,12,22,13,27,30,35]),import.meta.url)),dr=K(()=>l(()=>import(`./LogsPro-BgEIjgfj.js`).then(e=>({default:e.LogsPro})),__vite__mapDeps([38,1,2,5,16,9,7,8,21,11,17,12,22,31,4,3,10,13,27,26,32,29]),import.meta.url)),fr=K(()=>l(()=>import(`./McpServer-ffXr4nFW.js`).then(e=>({default:e.McpServer})),__vite__mapDeps([39,2,1,10,9,11,40]),import.meta.url)),pr=K(()=>l(()=>import(`./MetricsPro-CK3WfLCl.js`).then(e=>({default:e.MetricsPro})),__vite__mapDeps([41,1,2,4,5,3,9,7,10,21,11,17,22,18,42]),import.meta.url)),mr=K(()=>l(()=>import(`./QueueControl-g-9kwrpt.js`).then(e=>({default:e.QueueControl})),__vite__mapDeps([31,1,2,4,5,3,9,7,8,10,21,11,17,12,13,27,26,32,29]),import.meta.url)),hr=K(()=>l(()=>import(`./QueueDetailPro-AhdOAzEF.js`).then(e=>({default:e.QueueDetailPro})),__vite__mapDeps([43,1,2,4,5,3,6,16,9,7,8,10,21,11,17,13,29,27,18,32,12,42]),import.meta.url)),gr=K(()=>l(()=>import(`./QueuesOverview-sPQILfMU.js`).then(e=>({default:e.QueuesOverview})),__vite__mapDeps([44,1,2,4,5,3,6,16,9,7,8,21,11,17,22,13,45]),import.meta.url)),_r=K(()=>l(()=>import(`./S3BackupPro-BWV_R_Vj.js`).then(e=>({default:e.S3BackupPro})),__vite__mapDeps([46,1,2,5,4,3,16,7,8,9,10,11,12]),import.meta.url)),vr=K(()=>l(()=>import(`./ServerControl-Dr2gXbaU.js`).then(e=>({default:e.ServerControl})),__vite__mapDeps([47,1,2,4,5,3,16,9,7,8,10,21,11,17,12,40,26,27]),import.meta.url)),yr=K(()=>l(()=>import(`./UsagePro-CkC8WYcS.js`).then(e=>({default:e.UsagePro})),__vite__mapDeps([48,2,1,4,5,3,7,10,9,21,11,17]),import.meta.url)),br=K(()=>l(()=>import(`./Webhooks-BKWnALGC.js`).then(e=>({default:e.Webhooks})),__vite__mapDeps([49,1,2,4,5,3,6,16,7,8,9,10,21,11,17,12,22,13]),import.meta.url)),xr=K(()=>l(()=>import(`./WorkersPro-BDgHBTpY.js`).then(e=>({default:e.WorkersPro})),__vite__mapDeps([50,1,2,4,5,3,16,9,7,8,21,11,17,22,13]),import.meta.url)),Q=K(()=>l(()=>import(`./Workflows-Cp6jqKeM.js`).then(e=>({default:e.Workflows})),__vite__mapDeps([51,1,2,5,3,4,6,9,7,10,21,11,17,27,26]),import.meta.url)),Sr=K(()=>l(()=>import(`./Alerts-Bi8zLKXV.js`).then(e=>({default:e.Alerts})),__vite__mapDeps([52,1,2,5,16,8,9,10,21,11,17,12]),import.meta.url)),Cr=K(()=>l(()=>import(`./Fleet-0zKJSjCw.js`).then(e=>({default:e.Fleet})),__vite__mapDeps([53,1,2,5,7,8,9,10,11,27]),import.meta.url)),wr=K(()=>l(()=>import(`./Cron-dPGwJXqY.js`).then(e=>({default:e.Cron})),__vite__mapDeps([54,1,2,16,25,5,3,7,8,9,21,11,17,22,13]),import.meta.url)),Tr=K(()=>l(()=>import(`./Dlq-W2xOJiZM.js`).then(e=>({default:e.Dlq})),__vite__mapDeps([55,1,2,16,25,5,3,7,8,9,21,11,17,12,22,29,56,57,4,45]),import.meta.url)),Er=K(()=>l(()=>import(`./Jobs-D_TId_Oa.js`).then(e=>({default:e.Jobs})),__vite__mapDeps([57,1,2,4,5,3,16,9,25,7,21,11,17,12,29,45,56]),import.meta.url)),Dr=K(()=>l(()=>import(`./Logs-hbh7XhQU.js`).then(e=>({default:e.Logs})),__vite__mapDeps([58,1,2,16,9,7,5,21,11,17,12,22,56,25,3,57,4,29,45]),import.meta.url)),Or=K(()=>l(()=>import(`./Metrics-CIKZGgf0.js`).then(e=>({default:e.Metrics})),__vite__mapDeps([59,2,1,25,5,3,7,10,9,21,11,17]),import.meta.url)),kr=K(()=>l(()=>import(`./Overview-BBgwyUn4.js`).then(e=>({default:e.Overview})),__vite__mapDeps([60,2,1,16,25,5,3,7,10,9,21,11,17]),import.meta.url)),Ar=K(()=>l(()=>import(`./QueueDetail-Cv3MLDoE.js`).then(e=>({default:e.QueueDetail})),__vite__mapDeps([61,1,2,4,5,3,16,9,25,7,8,10,21,17,12,13,29,56]),import.meta.url)),jr=K(()=>l(()=>import(`./Queues-Bbvh_OCE.js`).then(e=>({default:e.Queues})),__vite__mapDeps([62,1,2,16,9,25,5,3,7,21,11,17,22]),import.meta.url)),Mr=K(()=>l(()=>import(`./S3Backup-Cg6sc2JG.js`).then(e=>({default:e.S3Backup})),__vite__mapDeps([63,2,1,25,5,3,7,10,9,21,11]),import.meta.url)),Nr=K(()=>l(()=>import(`./Settings-BsDDlu-h.js`).then(e=>({default:e.Settings})),__vite__mapDeps([64,1,2,5,16,8,9,10,11,12]),import.meta.url)),Pr=K(()=>l(()=>import(`./Usage-Cxx6pZfb.js`).then(e=>({default:e.Usage})),__vite__mapDeps([65,2,1,25,5,3,7,10,9,21,11,17]),import.meta.url)),Fr=K(()=>l(()=>import(`./Workers-SJ9MApx3.js`).then(e=>({default:e.Workers})),__vite__mapDeps([66,1,2,16,25,5,3,7,21,9,11,17,22]),import.meta.url));function Ir(){return(0,F.jsx)(n,{children:(0,F.jsxs)(d,{element:(0,F.jsx)(Dn,{}),children:[(0,F.jsx)(d,{path:`/`,element:(0,F.jsx)(Qn,{})}),(0,F.jsx)(d,{path:`/fleet`,element:(0,F.jsx)(Cr,{})}),(0,F.jsx)(d,{path:`/overview-classic`,element:(0,F.jsx)(kr,{})}),(0,F.jsx)(d,{path:`/queues`,element:(0,F.jsx)(gr,{})}),(0,F.jsx)(d,{path:`/queues-classic`,element:(0,F.jsx)(jr,{})}),(0,F.jsx)(d,{path:`/queues/:name`,element:(0,F.jsx)(hr,{})}),(0,F.jsx)(d,{path:`/queues-classic/:name`,element:(0,F.jsx)(Ar,{})}),(0,F.jsx)(d,{path:`/jobs`,element:(0,F.jsx)(ur,{})}),(0,F.jsx)(d,{path:`/jobs-classic`,element:(0,F.jsx)(Er,{})}),(0,F.jsx)(d,{path:`/dlq`,element:(0,F.jsx)(sr,{})}),(0,F.jsx)(d,{path:`/dlq-classic`,element:(0,F.jsx)(Tr,{})}),(0,F.jsx)(d,{path:`/cron`,element:(0,F.jsx)(rr,{})}),(0,F.jsx)(d,{path:`/cron-classic`,element:(0,F.jsx)(wr,{})}),(0,F.jsx)(d,{path:`/flows`,element:(0,F.jsx)(cr,{})}),(0,F.jsx)(d,{path:`/workflows`,element:(0,F.jsx)(Q,{})}),(0,F.jsx)(d,{path:`/workflows/executions`,element:(0,F.jsx)(Q,{})}),(0,F.jsx)(d,{path:`/workflows/waiting`,element:(0,F.jsx)(Q,{})}),(0,F.jsx)(d,{path:`/workflows/compensation`,element:(0,F.jsx)(Q,{})}),(0,F.jsx)(d,{path:`/workflows/archive`,element:(0,F.jsx)(Q,{})}),(0,F.jsx)(d,{path:`/metrics`,element:(0,F.jsx)(pr,{})}),(0,F.jsx)(d,{path:`/metrics-classic`,element:(0,F.jsx)(Or,{})}),(0,F.jsx)(d,{path:`/workers`,element:(0,F.jsx)(xr,{})}),(0,F.jsx)(d,{path:`/workers-classic`,element:(0,F.jsx)(Fr,{})}),(0,F.jsx)(d,{path:`/logs`,element:(0,F.jsx)(dr,{})}),(0,F.jsx)(d,{path:`/logs-classic`,element:(0,F.jsx)(Dr,{})}),(0,F.jsx)(d,{path:`/server`,element:(0,F.jsx)(vr,{})}),(0,F.jsx)(d,{path:`/add-job`,element:(0,F.jsx)(er,{})}),(0,F.jsx)(d,{path:`/jobs/bulk-add`,element:(0,F.jsx)(nr,{})}),(0,F.jsx)(d,{path:`/job`,element:(0,F.jsx)(lr,{})}),(0,F.jsx)(d,{path:`/queue-control`,element:(0,F.jsx)(mr,{})}),(0,F.jsx)(d,{path:`/cron-manager`,element:(0,F.jsx)(t,{to:`/cron`,replace:!0})}),(0,F.jsx)(d,{path:`/dlq-control`,element:(0,F.jsx)(or,{})}),(0,F.jsx)(d,{path:`/webhooks`,element:(0,F.jsx)(br,{})}),(0,F.jsx)(d,{path:`/diagnostics`,element:(0,F.jsx)(ar,{})}),(0,F.jsx)(d,{path:`/alerts`,element:(0,F.jsx)(Sr,{})}),(0,F.jsx)(d,{path:`/benchmark`,element:(0,F.jsx)(tr,{})}),(0,F.jsx)(d,{path:`/database`,element:(0,F.jsx)(ir,{})}),(0,F.jsx)(d,{path:`/mcp`,element:(0,F.jsx)(fr,{})}),(0,F.jsx)(d,{path:`/usage`,element:(0,F.jsx)(yr,{})}),(0,F.jsx)(d,{path:`/usage-classic`,element:(0,F.jsx)(Pr,{})}),(0,F.jsx)(d,{path:`/s3`,element:(0,F.jsx)(_r,{})}),(0,F.jsx)(d,{path:`/s3-classic`,element:(0,F.jsx)(Mr,{})}),(0,F.jsx)(d,{path:`/settings`,element:(0,F.jsx)(Nr,{})}),(0,F.jsx)(d,{path:`*`,element:(0,F.jsx)($n,{})})]})})}var $=new WeakMap;function Lr(e,t){let n=document.createElement(`div`);n.setAttribute(`role`,`alert`),n.style.cssText=`padding:2rem;font:14px/1.6 system-ui,sans-serif;max-width:44rem;margin:auto`;let r=document.createElement(`h1`);r.style.cssText=`font-size:1.1rem;font-weight:600;margin-bottom:.5rem`,r.textContent=`Demo data failed to load`;let i=document.createElement(`p`);i.textContent=`This build serves canned data from a bundled chunk that could not be fetched, so there is no backend to talk to. Reload the page (a hard refresh clears a stale cached index.html).`;let a=document.createElement(`p`);a.style.cssText=`margin-top:.75rem;opacity:.7;font-family:ui-monospace,monospace`,a.textContent=t instanceof Error?t.message:String(t),n.append(r,i,a),e.replaceChildren(n)}function Rr({root:e,demo:t,loadDemo:n,render:r,reportError:i=e=>console.error(`[demo] failed to load the demo backend`,e)}){let a=$.get(e);if(a)return a===!0?void 0:a;if(!t){$.set(e,!0);try{r()}catch(t){throw $.delete(e),t}return}let o=Promise.resolve().then(async()=>{let t;try{t=await n(),t.installDemo()}catch(t){try{i(t)}catch{}Lr(e,t);return}r()});return $.set(e,o),o}zt();var zr=document.getElementById(`root`);if(!zr)throw Error(`Root element #root not found`);function Br(){(0,ze.createRoot)(zr).render((0,F.jsx)(O.StrictMode,{children:(0,F.jsx)(s,{basename:y(te(`__BUNQUEUE_BASE_PATH__`),`./`),children:(0,F.jsx)(Ir,{})})}))}Rr({root:zr,demo:V(),loadDemo:()=>l(()=>import(`./install-DUkXE5kb.js`),__vite__mapDeps([67,40]),import.meta.url),render:Br});export{Ut as a,N as c,wt as d,st as f,V as i,kt as l,jn as n,z as o,A as p,q as r,P as s,Jn as t,M as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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}}}@layer theme{:root,:host{--font-sans:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-700:oklch(55.3% .195 38.402);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-700:oklch(52% .105 223.128);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-700:oklch(48.8% .243 264.376);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-700:oklch(49.1% .27 292.581);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--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);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--default-mono-font-family:"JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, monospace}}@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(--line)}html,body,#root{height:100%}html{font-size:clamp(13.5px,12.7px + .28vw,16px)}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);letter-spacing:-.005em;font-optical-sizing:auto;font-feature-settings:"cv11", "ss01";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;line-height:1.55}h1,h2{letter-spacing:-.02em}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--surface-2);border:2px solid var(--bg);border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--line-strong)}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.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-y-0{inset-block:0}.inset-y-1\.5{inset-block:calc(var(--spacing) * 1.5)}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-5{top:calc(var(--spacing) * 5)}.right-0{right:0}.right-0\.5{right:calc(var(--spacing) * .5)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.right-5{right:calc(var(--spacing) * 5)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-5{bottom:calc(var(--spacing) * 5)}.bottom-\[-13px\]{bottom:-13px}.left-0{left:0}.left-1{left:var(--spacing)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[55\]{z-index:55}.z-\[60\]{z-index:60}.order-42{order:42}.order-99{order:99}.order-first{order:-9999}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.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}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.-mt-2{margin-top:calc(var(--spacing) * -2)}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.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)}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.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-1{margin-left:calc(var(--spacing) * -1)}.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-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.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}.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-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.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)}.size-\[18px\]{width:18px;height:18px}.size-\[44px\]{width:44px;height:44px}.size-full{width:100%;height:100%}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[28rem\]{max-height:28rem}.max-h-\[70vh\]{max-height:70vh}.min-h-0{min-height:0}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-32{min-height:calc(var(--spacing) * 32)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-80{min-height:calc(var(--spacing) * 80)}.min-h-\[44px\]{min-height:44px}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.w-2\/5{width:40%}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-80{width:calc(var(--spacing) * 80)}.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-56{max-width:calc(var(--spacing) * 56)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-\[14rem\]{max-width:14rem}.max-w-\[16rem\]{max-width:16rem}.max-w-\[24rem\]{max-width:24rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-28{min-width:calc(var(--spacing) * 28)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-\[44rem\]{min-width:44rem}.min-w-\[52rem\]{min-width:52rem}.min-w-\[560px\]{min-width:560px}.min-w-\[680px\]{min-width:680px}.min-w-max{min-width:max-content}.min-w-px{min-width:1px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing) * 6);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)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[18px_1fr\]{grid-template-columns:18px 1fr}.grid-cols-\[28px_minmax\(0\,1fr\)\]{grid-template-columns:28px minmax(0,1fr)}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.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-px{gap:1px}: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)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.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)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}: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-line>:not(:last-child)),:where(.divide-line\/70>:not(:last-child)){border-color:var(--line)}@supports (color:color-mix(in lab, red, red)){:where(.divide-line\/70>:not(:last-child)){border-color:color-mix(in oklab, var(--line) 70%, transparent)}}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-x-contain{overscroll-behavior-x:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-br-sm{border-bottom-right-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.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-r{border-right-style:var(--tw-border-style);border-right-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{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-accent,.border-accent\/30{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/30{border-color:color-mix(in oklab, var(--accent) 30%, transparent)}}.border-accent\/40{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/40{border-color:color-mix(in oklab, var(--accent) 40%, transparent)}}.border-accent\/50{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/50{border-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.border-accent\/60{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/60{border-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/20{border-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/25{border-color:color-mix(in oklab, var(--color-amber-500) 25%, transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-blue-400\/60{border-color:#54a2ff99}@supports (color:color-mix(in lab, red, red)){.border-blue-400\/60{border-color:color-mix(in oklab, var(--color-blue-400) 60%, transparent)}}.border-current{border-color:currentColor}.border-cyan-400\/60{border-color:#00d2ef99}@supports (color:color-mix(in lab, red, red)){.border-cyan-400\/60{border-color:color-mix(in oklab, var(--color-cyan-400) 60%, transparent)}}.border-danger,.border-danger\/30{border-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.border-danger\/30{border-color:color-mix(in oklab, var(--danger) 30%, transparent)}}.border-danger\/40{border-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.border-danger\/40{border-color:color-mix(in oklab, var(--danger) 40%, transparent)}}.border-danger\/50{border-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.border-danger\/50{border-color:color-mix(in oklab, var(--danger) 50%, transparent)}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/25{border-color:color-mix(in oklab, var(--color-emerald-500) 25%, transparent)}}.border-line{border-color:var(--line)}.border-line-strong{border-color:var(--line-strong)}.border-line\/60{border-color:var(--line)}@supports (color:color-mix(in lab, red, red)){.border-line\/60{border-color:color-mix(in oklab, var(--line) 60%, transparent)}}.border-line\/70{border-color:var(--line)}@supports (color:color-mix(in lab, red, red)){.border-line\/70{border-color:color-mix(in oklab, var(--line) 70%, transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\/20{border-color:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab, red, red)){.border-red-500\/25{border-color:color-mix(in oklab, var(--color-red-500) 25%, transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.border-red-500\/30{border-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.border-success\/40{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.border-success\/40{border-color:color-mix(in oklab, var(--success) 40%, transparent)}}.border-success\/50{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.border-success\/50{border-color:color-mix(in oklab, var(--success) 50%, transparent)}}.border-surface{border-color:var(--surface)}.border-transparent{border-color:#0000}.border-warning\/30{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.border-warning\/30{border-color:color-mix(in oklab, var(--warning) 30%, transparent)}}.border-warning\/40{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.border-warning\/40{border-color:color-mix(in oklab, var(--warning) 40%, transparent)}}.border-warning\/50{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.border-warning\/50{border-color:color-mix(in oklab, var(--warning) 50%, transparent)}}.border-t-transparent{border-top-color:#0000}.bg-accent,.bg-accent\/5{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/5{background-color:color-mix(in oklab, var(--accent) 5%, transparent)}}.bg-accent\/10{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/10{background-color:color-mix(in oklab, var(--accent) 10%, transparent)}}.bg-accent\/15{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/15{background-color:color-mix(in oklab, var(--accent) 15%, transparent)}}.bg-accent\/70{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/70{background-color:color-mix(in oklab, var(--accent) 70%, transparent)}}.bg-accent\/\[0\.06\]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/\[0\.06\]{background-color:color-mix(in oklab, var(--accent) 6%, transparent)}}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/5{background-color:color-mix(in oklab, var(--color-amber-500) 5%, transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/10{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/15{background-color:color-mix(in oklab, var(--color-amber-500) 15%, transparent)}}.bg-amber-500\/\[0\.06\]{background-color:#f99c000f}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/\[0\.06\]{background-color:color-mix(in oklab, var(--color-amber-500) 6%, transparent)}}.bg-bg,.bg-bg\/80{background-color:var(--bg)}@supports (color:color-mix(in lab, red, red)){.bg-bg\/80{background-color:color-mix(in oklab, var(--bg) 80%, transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-400\/10{background-color:color-mix(in oklab, var(--color-blue-400) 10%, transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/10{background-color:color-mix(in oklab, var(--color-blue-500) 10%, transparent)}}.bg-current{background-color:currentColor}.bg-cyan-400\/10{background-color:#00d2ef1a}@supports (color:color-mix(in lab, red, red)){.bg-cyan-400\/10{background-color:color-mix(in oklab, var(--color-cyan-400) 10%, transparent)}}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/10{background-color:color-mix(in oklab, var(--color-cyan-500) 10%, transparent)}}.bg-danger\/5{background-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.bg-danger\/5{background-color:color-mix(in oklab, var(--danger) 5%, transparent)}}.bg-danger\/10{background-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.bg-danger\/10{background-color:color-mix(in oklab, var(--danger) 10%, transparent)}}.bg-danger\/\[0\.06\]{background-color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.bg-danger\/\[0\.06\]{background-color:color-mix(in oklab, var(--danger) 6%, transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/10{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/15{background-color:color-mix(in oklab, var(--color-emerald-500) 15%, transparent)}}.bg-emerald-500\/\[0\.06\]{background-color:#00bb7f0f}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/\[0\.06\]{background-color:color-mix(in oklab, var(--color-emerald-500) 6%, transparent)}}.bg-line{background-color:var(--line)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/10{background-color:color-mix(in oklab, var(--color-orange-500) 10%, transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/5{background-color:color-mix(in oklab, var(--color-red-500) 5%, transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/10{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/15{background-color:color-mix(in oklab, var(--color-red-500) 15%, transparent)}}.bg-red-500\/40{background-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/40{background-color:color-mix(in oklab, var(--color-red-500) 40%, transparent)}}.bg-red-500\/\[0\.06\]{background-color:#fb2c360f}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/\[0\.06\]{background-color:color-mix(in oklab, var(--color-red-500) 6%, transparent)}}.bg-sidebar{background-color:var(--sidebar)}.bg-success\/10{background-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--success) 10%, transparent)}}.bg-surface{background-color:var(--surface)}.bg-surface-2,.bg-surface-2\/30{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.bg-surface-2\/30{background-color:color-mix(in oklab, var(--surface-2) 30%, transparent)}}.bg-surface-2\/40{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.bg-surface-2\/40{background-color:color-mix(in oklab, var(--surface-2) 40%, transparent)}}.bg-surface-2\/50{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.bg-surface-2\/50{background-color:color-mix(in oklab, var(--surface-2) 50%, transparent)}}.bg-surface-2\/80{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.bg-surface-2\/80{background-color:color-mix(in oklab, var(--surface-2) 80%, transparent)}}.bg-surface\/60{background-color:var(--surface)}@supports (color:color-mix(in lab, red, red)){.bg-surface\/60{background-color:color-mix(in oklab, var(--surface) 60%, transparent)}}.bg-transparent{background-color:#0000}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab, red, red)){.bg-violet-500\/10{background-color:color-mix(in oklab, var(--color-violet-500) 10%, transparent)}}.bg-warning\/5{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/5{background-color:color-mix(in oklab, var(--warning) 5%, transparent)}}.bg-warning\/10{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab, var(--warning) 10%, transparent)}}.bg-warning\/15{background-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/15{background-color:color-mix(in oklab, var(--warning) 15%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-500\/10{background-color:#71717b1a}@supports (color:color-mix(in lab, red, red)){.bg-zinc-500\/10{background-color:color-mix(in oklab, var(--color-zinc-500) 10%, transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-accent{--tw-gradient-from:var(--accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-amber-400\/80{--tw-gradient-from:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.from-amber-400\/80{--tw-gradient-from:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.from-amber-400\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-400\/80{--tw-gradient-from:#00d294cc}@supports (color:color-mix(in lab, red, red)){.from-emerald-400\/80{--tw-gradient-from:color-mix(in oklab, var(--color-emerald-400) 80%, transparent)}}.from-emerald-400\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-red-400\/70{--tw-gradient-from:#ff6568b3}@supports (color:color-mix(in lab, red, red)){.from-red-400\/70{--tw-gradient-from:color-mix(in oklab, var(--color-red-400) 70%, transparent)}}.from-red-400\/70{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-amber-400\/25{--tw-gradient-via:#fcbb0040}@supports (color:color-mix(in lab, red, red)){.via-amber-400\/25{--tw-gradient-via:color-mix(in oklab, var(--color-amber-400) 25%, transparent)}}.via-amber-400\/25{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-emerald-400\/25{--tw-gradient-via:#00d29440}@supports (color:color-mix(in lab, red, red)){.via-emerald-400\/25{--tw-gradient-via:color-mix(in oklab, var(--color-emerald-400) 25%, transparent)}}.via-emerald-400\/25{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-red-400\/20{--tw-gradient-via:#ff656833}@supports (color:color-mix(in lab, red, red)){.via-red-400\/20{--tw-gradient-via:color-mix(in oklab, var(--color-red-400) 20%, transparent)}}.via-red-400\/20{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-fuchsia-600{--tw-gradient-to:var(--color-fuchsia-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0{padding:0}.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)}.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-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-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-24{padding-block:calc(var(--spacing) * 24)}.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)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-\[12vh\]{padding-top:12vh}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-0\.5{padding-left:calc(var(--spacing) * .5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:JetBrains Mono Variable,ui-monospace,SF Mono,Menlo,monospace}.font-sans{font-family:Inter Variable,ui-sans-serif,system-ui,sans-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-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.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)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.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-accent{color:var(--accent)}.text-accent-fg{color:var(--accent-fg)}.text-accent\/80{color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.text-accent\/80{color:color-mix(in oklab, var(--accent) 80%, transparent)}}.text-accent\/90{color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.text-accent\/90{color:color-mix(in oklab, var(--accent) 90%, transparent)}}.text-amber-200{color:var(--color-amber-200)}.text-amber-300\/90{color:#ffd236e6}@supports (color:color-mix(in lab, red, red)){.text-amber-300\/90{color:color-mix(in oklab, var(--color-amber-300) 90%, transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab, red, red)){.text-amber-400\/90{color:color-mix(in oklab, var(--color-amber-400) 90%, transparent)}}.text-blue-400{color:var(--color-blue-400)}.text-cyan-400{color:var(--color-cyan-400)}.text-danger,.text-danger\/70{color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.text-danger\/70{color:color-mix(in oklab, var(--danger) 70%, transparent)}}.text-danger\/80{color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.text-danger\/80{color:color-mix(in oklab, var(--danger) 80%, transparent)}}.text-danger\/90{color:var(--danger)}@supports (color:color-mix(in lab, red, red)){.text-danger\/90{color:color-mix(in oklab, var(--danger) 90%, transparent)}}.text-emerald-400{color:var(--color-emerald-400)}.text-faint,.text-faint\/60{color:var(--text-faint)}@supports (color:color-mix(in lab, red, red)){.text-faint\/60{color:color-mix(in oklab, var(--text-faint) 60%, transparent)}}.text-faint\/70{color:var(--text-faint)}@supports (color:color-mix(in lab, red, red)){.text-faint\/70{color:color-mix(in oklab, var(--text-faint) 70%, transparent)}}.text-fg{color:var(--text)}.text-line{color:var(--line)}.text-muted{color:var(--text-muted)}.text-orange-400{color:var(--color-orange-400)}.text-red-400{color:var(--color-red-400)}.text-red-400\/90{color:#ff6568e6}@supports (color:color-mix(in lab, red, red)){.text-red-400\/90{color:color-mix(in oklab, var(--color-red-400) 90%, transparent)}}.text-success{color:var(--success)}.text-violet-400{color:var(--color-violet-400)}.text-warning{color:var(--warning)}.text-white{color:var(--color-white)}.text-zinc-400{color:var(--color-zinc-400)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.accent-accent{accent-color:var(--accent)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--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)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px 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,.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-2{--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)}.ring-accent,.ring-accent\/50{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ring-accent\/50{--tw-ring-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ring-line{--tw-ring-color:var(--line)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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,)}.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,)}.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-\[transform\,visibility\]{transition-property:transform,visibility;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-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))}.outline-none{--tw-outline-style:none;outline-style:none}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-faint::placeholder{color:var(--text-faint)}.first\:border-0:first-child{border-style:var(--tw-border-style);border-width: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-accent\/50:hover{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/50:hover{border-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.hover\:border-amber-400\/50:hover{border-color:#fcbb0080}@supports (color:color-mix(in lab, red, red)){.hover\:border-amber-400\/50:hover{border-color:color-mix(in oklab, var(--color-amber-400) 50%, transparent)}}.hover\:border-amber-500\/50:hover{border-color:#f99c0080}@supports (color:color-mix(in lab, red, red)){.hover\:border-amber-500\/50:hover{border-color:color-mix(in oklab, var(--color-amber-500) 50%, transparent)}}.hover\:border-line-strong:hover{border-color:var(--line-strong)}.hover\:border-red-500\/50:hover{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.hover\:border-red-500\/50:hover{border-color:color-mix(in oklab, var(--color-red-500) 50%, transparent)}}.hover\:bg-amber-500\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.hover\:bg-emerald-500\/90:hover{background-color:#00bb7fe6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-emerald-500\/90:hover{background-color:color-mix(in oklab, var(--color-emerald-500) 90%, transparent)}}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.hover\:bg-surface-2:hover,.hover\:bg-surface-2\/40:hover{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-2\/40:hover{background-color:color-mix(in oklab, var(--surface-2) 40%, transparent)}}.hover\:bg-surface-2\/50:hover{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-2\/50:hover{background-color:color-mix(in oklab, var(--surface-2) 50%, transparent)}}.hover\:bg-surface-2\/60:hover{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-2\/60:hover{background-color:color-mix(in oklab, var(--surface-2) 60%, transparent)}}.hover\:bg-surface-2\/70:hover{background-color:var(--surface-2)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-2\/70:hover{background-color:color-mix(in oklab, var(--surface-2) 70%, transparent)}}.hover\:text-accent:hover{color:var(--accent)}.hover\:text-danger:hover{color:var(--danger)}.hover\:text-fg:hover{color:var(--text)}.hover\:text-muted:hover{color:var(--text-muted)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:absolute:focus{position:absolute}.focus\:top-3:focus{top:calc(var(--spacing) * 3)}.focus\:left-4:focus{left:calc(var(--spacing) * 4)}.focus\:z-50:focus{z-index:50}.focus\:border-accent\/60:focus{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus\:border-accent\/60:focus{border-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.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-accent\/30:focus{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-accent\/30:focus{--tw-ring-color:color-mix(in oklab, var(--accent) 30%, transparent)}}.focus\:ring-accent\/50:focus{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-accent\/50:focus{--tw-ring-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-accent:focus-visible{border-color:var(--accent)}.focus-visible\:ring-2:focus-visible{--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-visible\:ring-accent\/40:focus-visible{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-accent\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--accent) 40%, transparent)}}.focus-visible\:ring-accent\/50:focus-visible{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-accent\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.focus-visible\:ring-accent\/70:focus-visible{--tw-ring-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-accent\/70:focus-visible{--tw-ring-color:color-mix(in oklab, var(--accent) 70%, transparent)}}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-\[-2px\]:focus-visible{outline-offset:-2px}.focus-visible\:outline-accent:focus-visible{outline-color:var(--accent)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-35:disabled{opacity:.35}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:text-faint:disabled:hover{color:var(--text-faint)}}@media (prefers-reduced-motion:no-preference){.motion-safe\:animate-ping{animation:var(--animate-ping)}}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width>=40rem){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.sm\:grid-cols-\[1fr_auto_auto\]{grid-template-columns:1fr auto auto}.sm\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (width>=48rem){.md\:static{position:static}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:mt-0{margin-top:0}.md\:grid{display:grid}.md\:hidden{display:none}.md\:table-cell{display:table-cell}.md\:size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.md\:max-w-xs{max-width:var(--container-xs)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:gap-4{gap:calc(var(--spacing) * 4)}.md\:px-5{padding-inline:calc(var(--spacing) * 5)}}@media (width>=64rem){.lg\:visible{visibility:visible}.lg\:static{position:static}.lg\:z-auto{z-index:auto}.lg\:order-none{order:0}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:hidden{display:none}.lg\:table-cell{display:table-cell}.lg\:w-48{width:calc(var(--spacing) * 48)}.lg\:translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}.lg\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}.lg\:pt-6{padding-top:calc(var(--spacing) * 6)}}@media (width>=80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-\[0\.8fr_1\.2fr\]{grid-template-columns:.8fr 1.2fr}.xl\:grid-cols-\[minmax\(0\,1fr\)_minmax\(300px\,0\.7fr\)\]{grid-template-columns:minmax(0,1fr) minmax(300px,.7fr)}.xl\:grid-cols-\[minmax\(320px\,0\.7fr\)_minmax\(0\,1\.3fr\)\]{grid-template-columns:minmax(320px,.7fr) minmax(0,1.3fr)}.xl\:grid-cols-\[minmax\(320px\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:minmax(320px,.8fr) minmax(0,1.2fr)}.xl\:grid-cols-\[minmax\(360px\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:minmax(360px,.8fr) minmax(0,1.2fr)}.xl\:grid-cols-\[minmax\(390px\,0\.8fr\)_minmax\(0\,1\.4fr\)\]{grid-template-columns:minmax(390px,.8fr) minmax(0,1.4fr)}.xl\:grid-cols-\[minmax\(420px\,0\.95fr\)_minmax\(0\,1\.05fr\)\]{grid-template-columns:minmax(420px,.95fr) minmax(0,1.05fr)}:where(.xl\:divide-y-0>: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(0px * var(--tw-divide-y-reverse));border-bottom-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)))}.xl\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.xl\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.xl\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}.light\:text-amber-700:where([data-theme=light],[data-theme=light] *){color:var(--color-amber-700)}.light\:text-blue-700:where([data-theme=light],[data-theme=light] *){color:var(--color-blue-700)}.light\:text-cyan-700:where([data-theme=light],[data-theme=light] *){color:var(--color-cyan-700)}.light\:text-orange-700:where([data-theme=light],[data-theme=light] *){color:var(--color-orange-700)}.light\:text-violet-700:where([data-theme=light],[data-theme=light] *){color:var(--color-violet-700)}.light\:text-zinc-600:where([data-theme=light],[data-theme=light] *){color:var(--color-zinc-600)}.\[\&\>svg\]\:size-8>svg{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.tnum{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}}:root,[data-theme=dark]{--bg:#08080a;--surface:#0e0e12;--surface-2:#17171c;--line:#ffffff12;--line-strong:#ffffff1f;--text:#f4f4f5;--text-muted:#a8a8b3;--text-faint:#868c98;--sidebar:#09090b;--accent:#f472b6;--accent-fg:#18181b;--success:#34d399;--warning:#fbbf24;--danger:#f87171}[data-theme=light]{--bg:#fafafa;--surface:#fff;--surface-2:#f4f4f5;--line:#00000014;--line-strong:#00000024;--text:#18181b;--text-muted:#52525b;--text-faint:#71717a;--sidebar:#fff;--accent:#be185d;--accent-fg:#fff;--success:#047857;--warning:#b45309;--danger:#dc2626}@media (width<=639px){input,select,textarea{font-size:16px!important}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@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-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}
|