specrails-desktop 2.43.2 → 2.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/client/dist/assets/{ActivityFeedPage-C7XJ5-bJ.js → ActivityFeedPage-CG2fhd_k.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-C_WpXceT.js → AgentBrowserCapture-C6BVsTfo.js} +1 -1
- package/client/dist/assets/{AgentModeAnalyticsPane-PEZKjyZS.js → AgentModeAnalyticsPane-90q1FOYY.js} +2 -2
- package/client/dist/assets/{AgentModeCodePane-D_Xcq5t5.js → AgentModeCodePane-CzNPXJND.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-CDSkOuNP.js → AgentModeJobsPane-CS4XPM5K.js} +1 -1
- package/client/dist/assets/{AgentsPage-D577NzIM.js → AgentsPage-DgF8yxlz.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-C6ZZI_zg.js → AnalyticsPage-BZRZpWTe.js} +1 -1
- package/client/dist/assets/{CodePage-B5z5oLnP.js → CodePage-CobZpY2J.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-D_V9RuGg.js → DesktopAnalyticsPage-B75I8Hyl.js} +1 -1
- package/client/dist/assets/{DocsDialog-Beg82MEe.js → DocsDialog-AEU1MV8y.js} +1 -1
- package/client/dist/assets/{DocsPage-BkE4m4wp.js → DocsPage-Dn2j2nSl.js} +1 -1
- package/client/dist/assets/{ExportDropdown-ophapHrT.js → ExportDropdown-Xvbax18F.js} +1 -1
- package/client/dist/assets/InteractiveJobComposer-COH-v0lE.js +19 -0
- package/client/dist/assets/{JobDetailModal-BCxue_Do.js → JobDetailModal-CyFzkOM-.js} +1 -1
- package/client/dist/assets/{JobDetailPage-_rIDpNfo.js → JobDetailPage-CAILeuTY.js} +1 -1
- package/client/dist/assets/{JobsPage-C6xcijbs.js → JobsPage-CzOmMhkp.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-A-Mt6EjT.js → LoopBuilderPage-_Snk4Cv7.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-DqHiG4Dt.js → LoopPreviewModal-C2yekwCg.js} +1 -1
- package/client/dist/assets/{LoopsPage-B-ketPET.js → LoopsPage-C4GXI81g.js} +1 -1
- package/client/dist/assets/{MinimizedChatsContext-Deg39peL.js → MinimizedChatsContext-0mMk-eoH.js} +1 -1
- package/client/dist/assets/{PluginsPage-Dn2jPvJL.js → PluginsPage-pPmHG9nI.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-CVTj4VLt.js → ProjectSettingsDialog-Bcsq5o0U.js} +1 -1
- package/client/dist/assets/{RepositoryDeliveries-IiQCcndQ.js → RepositoryDeliveries-DJTjRht9.js} +1 -1
- package/client/dist/assets/{RepositoryScopeSelector-D-RCaknl.js → RepositoryScopeSelector-CvOfpd2g.js} +1 -1
- package/client/dist/assets/{ReviewPacketPage-BBd617OM.js → ReviewPacketPage-BPG3cVpM.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-COHFkUS4.js → TemplatePreviewModal-Dx_3cTQN.js} +1 -1
- package/client/dist/assets/{TicketDetailModalContext-BNa1mdXq.js → TicketDetailModalContext-0sPSvSmT.js} +1 -1
- package/client/dist/assets/{Trans-SnMX4MhW.js → Trans-BrG0crRZ.js} +1 -1
- package/client/dist/assets/{formatDistanceToNow-DSj5DprF.js → formatDistanceToNow-CEH5-6MR.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-YhD8rIEs.js → getTimezoneOffsetInMilliseconds-C4NbLIYo.js} +1 -1
- package/client/dist/assets/{index-m5pKr1T6.js → index-BIEV2BG8.js} +6 -6
- package/client/dist/assets/{index-D5n_jg_I.css → index-Bfj8HvX1.css} +1 -1
- package/client/dist/assets/{jira-api-CSCqGr-Q.js → jira-api-BuMzFZx1.js} +1 -1
- package/client/dist/assets/{jobs-BS6RTurf.js → jobs-5PQJbdOf.js} +1 -1
- package/client/dist/assets/{jobs-CezU69AE.js → jobs-B2B08Oy9.js} +1 -1
- package/client/dist/assets/{jobs-ClFJae0s.js → jobs-BJZtBbwb.js} +1 -1
- package/client/dist/assets/{jobs-BTT0Bsks.js → jobs-BlWEsQb7.js} +1 -1
- package/client/dist/assets/{jobs-DJSFIFVy.js → jobs-ConfD8xD.js} +1 -1
- package/client/dist/assets/jobs-DMPU64ms.js +1 -0
- package/client/dist/assets/{jobs-DhgGr8vm.js → jobs-DojASiTp.js} +1 -1
- package/client/dist/assets/{jobs-B8rrzfyZ.js → jobs-kVHkNpB-.js} +1 -1
- package/client/dist/assets/{project-repositories-DYhTvwQ1.js → project-repositories-CAW6v3SO.js} +1 -1
- package/client/dist/assets/{spending-BqbdPm_4.js → spending-DI73ic0T.js} +1 -1
- package/client/dist/assets/{useDesktop-RSMTyy7V.js → useDesktop-DA-nfO01.js} +1 -1
- package/client/dist/assets/{useSharedWebSocket-BOdS5_Iz.js → useSharedWebSocket-D-czsPTl.js} +2 -2
- package/client/dist/index.html +15 -15
- package/docs/README.md +6 -1
- package/docs/agents/README.md +13 -0
- package/docs/agents/mcp.md +103 -0
- package/docs/guide/de/integrations/5-mcp-server.md +2 -0
- package/docs/guide/en/integrations/5-mcp-server.md +3 -30
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +29 -0
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +9 -0
- package/docs/guide/es/integrations/5-mcp-server.md +3 -30
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +30 -0
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -0
- package/docs/guide/fr/integrations/5-mcp-server.md +2 -0
- package/docs/guide/it/integrations/5-mcp-server.md +2 -0
- package/docs/guide/ja/integrations/5-mcp-server.md +2 -0
- package/docs/guide/pt/integrations/5-mcp-server.md +2 -0
- package/docs/guide/zh/integrations/5-mcp-server.md +2 -0
- package/docs/mcp.md +18 -48
- package/package.json +1 -1
- package/server/dist/core-completion.js +58 -0
- package/server/dist/core-execution.js +2 -1
- package/server/dist/loop-executors.js +15 -2
- package/server/dist/loop-graph.js +2 -1
- package/server/dist/loop-run-manager.js +18 -1
- package/client/dist/assets/InteractiveJobComposer-wBBBNaJn.js +0 -19
- package/client/dist/assets/jobs-DzMjUcaN.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{h as i,l as a,r as o}from"./useSharedWebSocket-BOdS5_Iz.js";var s=e(t(),1),c=e(r(),1);function l(e){if(!e||typeof document>`u`)return;let t=document.head||document.getElementsByTagName(`head`)[0],n=document.createElement(`style`);n.type=`text/css`,t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}var u=e=>{switch(e){case`success`:return p;case`info`:return h;case`warning`:return m;case`error`:return g;default:return null}},d=Array(12).fill(0),f=({visible:e,className:t})=>s.createElement(`div`,{className:[`sonner-loading-wrapper`,t].filter(Boolean).join(` `),"data-visible":e},s.createElement(`div`,{className:`sonner-spinner`},d.map((e,t)=>s.createElement(`div`,{className:`sonner-loading-bar`,key:`spinner-bar-${t}`})))),p=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,clipRule:`evenodd`})),m=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,clipRule:`evenodd`})),h=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,clipRule:`evenodd`})),g=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,clipRule:`evenodd`})),_=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`},s.createElement(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),s.createElement(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})),v=()=>{let[e,t]=s.useState(document.hidden);return s.useEffect(()=>{let e=()=>{t(document.hidden)};return document.addEventListener(`visibilitychange`,e),()=>window.removeEventListener(`visibilitychange`,e)},[]),e},y=1,b=new class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{let{message:t,...n}=e,r=typeof e?.id==`number`||e.id?.length>0?e.id:y++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0||e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:`error`}),this.success=(e,t)=>this.create({...t,type:`success`,message:e}),this.info=(e,t)=>this.create({...t,type:`info`,message:e}),this.warning=(e,t)=>this.create({...t,type:`warning`,message:e}),this.loading=(e,t)=>this.create({...t,type:`loading`,message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let r=Promise.resolve(e instanceof Function?e():e),i=n!==void 0,a,o=r.then(async e=>{if(a=[`resolve`,e],s.isValidElement(e))i=!1,this.create({id:n,type:`default`,message:e});else if(S(e)&&!e.ok){i=!1;let r=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,a=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(e instanceof Error){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(t.success!==void 0){i=!1;let r=typeof t.success==`function`?await t.success(e):t.success,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`success`,description:a,...o})}}).catch(async e=>{if(a=[`reject`,e],t.error!==void 0){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}}).finally(()=>{i&&(this.dismiss(n),n=void 0),t.finally==null||t.finally.call(t)}),c=()=>new Promise((e,t)=>o.then(()=>a[0]===`reject`?t(a[1]):e(a[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:c}:Object.assign(n,{unwrap:c})},this.custom=(e,t)=>{let n=t?.id||y++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},x=(e,t)=>{let n=t?.id||y++;return b.addToast({title:e,...t,id:n}),n},S=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,C=Object.assign(x,{success:b.success,info:b.info,warning:b.warning,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss,loading:b.loading},{getHistory:()=>b.toasts,getToasts:()=>b.getActiveToasts()});l(`[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}`);function w(e){return e.label!==void 0}var T=3,E=`24px`,D=`16px`,O=4e3,k=356,A=14,j=45,ee=200;function M(...e){return e.filter(Boolean).join(` `)}function N(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}var P=e=>{let{invert:t,toast:n,unstyled:r,interacting:i,setHeights:a,visibleToasts:o,heights:c,index:l,toasts:d,expanded:p,removeToast:m,defaultRichColors:h,closeButton:g,style:y,cancelButtonStyle:b,actionButtonStyle:x,className:S=``,descriptionClassName:C=``,duration:T,position:E,gap:D,expandByDefault:k,classNames:A,icons:P,closeButtonAriaLabel:te=`Close toast`}=e,[F,I]=s.useState(null),[L,R]=s.useState(null),[z,B]=s.useState(!1),[V,H]=s.useState(!1),[U,W]=s.useState(!1),[ne,re]=s.useState(!1),[ie,G]=s.useState(!1),[ae,K]=s.useState(0),[oe,se]=s.useState(0),q=s.useRef(n.duration||T||O),ce=s.useRef(null),J=s.useRef(null),le=l===0,ue=l+1<=o,Y=n.type,X=n.dismissible!==!1,de=n.className||``,fe=n.descriptionClassName||``,pe=s.useMemo(()=>c.findIndex(e=>e.toastId===n.id)||0,[c,n.id]),me=s.useMemo(()=>n.closeButton??g,[n.closeButton,g]),he=s.useMemo(()=>n.duration||T||O,[n.duration,T]),ge=s.useRef(0),Z=s.useRef(0),_e=s.useRef(0),Q=s.useRef(null),[ve,ye]=E.split(`-`),be=s.useMemo(()=>c.reduce((e,t,n)=>n>=pe?e:e+t.height,0),[c,pe]),xe=v(),Se=n.invert||t,Ce=Y===`loading`;Z.current=s.useMemo(()=>pe*D+be,[pe,be]),s.useEffect(()=>{q.current=he},[he]),s.useEffect(()=>{B(!0)},[]),s.useEffect(()=>{let e=J.current;if(e){let t=e.getBoundingClientRect().height;return se(t),a(e=>[{toastId:n.id,height:t,position:n.position},...e]),()=>a(e=>e.filter(e=>e.toastId!==n.id))}},[a,n.id]),s.useLayoutEffect(()=>{if(!z)return;let e=J.current,t=e.style.height;e.style.height=`auto`;let r=e.getBoundingClientRect().height;e.style.height=t,se(r),a(e=>e.find(e=>e.toastId===n.id)?e.map(e=>e.toastId===n.id?{...e,height:r}:e):[{toastId:n.id,height:r,position:n.position},...e])},[z,n.title,n.description,a,n.id,n.jsx,n.action,n.cancel]);let $=s.useCallback(()=>{H(!0),K(Z.current),a(e=>e.filter(e=>e.toastId!==n.id)),setTimeout(()=>{m(n)},ee)},[n,m,a,Z]);s.useEffect(()=>{if(n.promise&&Y===`loading`||n.duration===1/0||n.type===`loading`)return;let e;return p||i||xe?(()=>{if(_e.current<ge.current){let e=new Date().getTime()-ge.current;q.current-=e}_e.current=new Date().getTime()})():q.current!==1/0&&(ge.current=new Date().getTime(),e=setTimeout(()=>{n.onAutoClose==null||n.onAutoClose.call(n,n),$()},q.current)),()=>clearTimeout(e)},[p,i,n,Y,xe,$]),s.useEffect(()=>{n.delete&&($(),n.onDismiss==null||n.onDismiss.call(n,n))},[$,n.delete]);function we(){return P?.loading?s.createElement(`div`,{className:M(A?.loader,n?.classNames?.loader,`sonner-loader`),"data-visible":Y===`loading`},P.loading):s.createElement(f,{className:M(A?.loader,n?.classNames?.loader),visible:Y===`loading`})}let Te=n.icon||P?.[Y]||u(Y);return s.createElement(`li`,{tabIndex:0,ref:J,className:M(S,de,A?.toast,n?.classNames?.toast,A?.default,A?.[Y],n?.classNames?.[Y]),"data-sonner-toast":``,"data-rich-colors":n.richColors??h,"data-styled":!(n.jsx||n.unstyled||r),"data-mounted":z,"data-promise":!!n.promise,"data-swiped":ie,"data-removed":V,"data-visible":ue,"data-y-position":ve,"data-x-position":ye,"data-index":l,"data-front":le,"data-swiping":U,"data-dismissible":X,"data-type":Y,"data-invert":Se,"data-swipe-out":ne,"data-swipe-direction":L,"data-expanded":!!(p||k&&z),"data-testid":n.testId,style:{"--index":l,"--toasts-before":l,"--z-index":d.length-l,"--offset":`${V?ae:Z.current}px`,"--initial-height":k?`auto`:`${oe}px`,...y,...n.style},onDragEnd:()=>{W(!1),I(null),Q.current=null},onPointerDown:e=>{e.button!==2&&(Ce||!X||(ce.current=new Date,K(Z.current),e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(W(!0),Q.current={x:e.clientX,y:e.clientY})))},onPointerUp:()=>{if(ne||!X)return;Q.current=null;let e=Number(J.current?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(J.current?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),r=new Date().getTime()-ce.current?.getTime(),i=F===`x`?e:t,a=Math.abs(i)/r;if(Math.abs(i)>=j||a>.11){K(Z.current),n.onDismiss==null||n.onDismiss.call(n,n),R(F===`x`?e>0?`right`:`left`:t>0?`down`:`up`),$(),re(!0);return}else{var o,s;(o=J.current)==null||o.style.setProperty(`--swipe-amount-x`,`0px`),(s=J.current)==null||s.style.setProperty(`--swipe-amount-y`,`0px`)}G(!1),W(!1),I(null)},onPointerMove:t=>{var n,r;if(!Q.current||!X||window.getSelection()?.toString().length>0)return;let i=t.clientY-Q.current.y,a=t.clientX-Q.current.x,o=e.swipeDirections??N(E);!F&&(Math.abs(a)>1||Math.abs(i)>1)&&I(Math.abs(a)>Math.abs(i)?`x`:`y`);let s={x:0,y:0},c=e=>1/(1.5+Math.abs(e)/20);if(F===`y`){if(o.includes(`top`)||o.includes(`bottom`))if(o.includes(`top`)&&i<0||o.includes(`bottom`)&&i>0)s.y=i;else{let e=i*c(i);s.y=Math.abs(e)<Math.abs(i)?e:i}}else if(F===`x`&&(o.includes(`left`)||o.includes(`right`)))if(o.includes(`left`)&&a<0||o.includes(`right`)&&a>0)s.x=a;else{let e=a*c(a);s.x=Math.abs(e)<Math.abs(a)?e:a}(Math.abs(s.x)>0||Math.abs(s.y)>0)&&G(!0),(n=J.current)==null||n.style.setProperty(`--swipe-amount-x`,`${s.x}px`),(r=J.current)==null||r.style.setProperty(`--swipe-amount-y`,`${s.y}px`)}},me&&!n.jsx&&Y!==`loading`?s.createElement(`button`,{"aria-label":te,"data-disabled":Ce,"data-close-button":!0,onClick:Ce||!X?()=>{}:()=>{$(),n.onDismiss==null||n.onDismiss.call(n,n)},className:M(A?.closeButton,n?.classNames?.closeButton)},P?.close??_):null,(Y||n.icon||n.promise)&&n.icon!==null&&(P?.[Y]!==null||n.icon)?s.createElement(`div`,{"data-icon":``,className:M(A?.icon,n?.classNames?.icon)},n.promise||n.type===`loading`&&!n.icon?n.icon||we():null,n.type===`loading`?null:Te):null,s.createElement(`div`,{"data-content":``,className:M(A?.content,n?.classNames?.content)},s.createElement(`div`,{"data-title":``,className:M(A?.title,n?.classNames?.title)},n.jsx?n.jsx:typeof n.title==`function`?n.title():n.title),n.description?s.createElement(`div`,{"data-description":``,className:M(C,fe,A?.description,n?.classNames?.description)},typeof n.description==`function`?n.description():n.description):null),s.isValidElement(n.cancel)?n.cancel:n.cancel&&w(n.cancel)?s.createElement(`button`,{"data-button":!0,"data-cancel":!0,style:n.cancelButtonStyle||b,onClick:e=>{w(n.cancel)&&X&&(n.cancel.onClick==null||n.cancel.onClick.call(n.cancel,e),$())},className:M(A?.cancelButton,n?.classNames?.cancelButton)},n.cancel.label):null,s.isValidElement(n.action)?n.action:n.action&&w(n.action)?s.createElement(`button`,{"data-button":!0,"data-action":!0,style:n.actionButtonStyle||x,onClick:e=>{w(n.action)&&(n.action.onClick==null||n.action.onClick.call(n.action,e),!e.defaultPrevented&&$())},className:M(A?.actionButton,n?.classNames?.actionButton)},n.action.label):null)};function te(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}function F(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?D:E;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var I=s.forwardRef(function(e,t){let{id:n,invert:r,position:i=`bottom-right`,hotkey:a=[`altKey`,`KeyT`],expand:o,closeButton:l,className:u,offset:d,mobileOffset:f,theme:p=`light`,richColors:m,duration:h,style:g,visibleToasts:_=T,toastOptions:v,dir:y=te(),gap:x=A,icons:S,containerAriaLabel:C=`Notifications`}=e,[w,E]=s.useState([]),D=s.useMemo(()=>n?w.filter(e=>e.toasterId===n):w.filter(e=>!e.toasterId),[w,n]),O=s.useMemo(()=>Array.from(new Set([i].concat(D.filter(e=>e.position).map(e=>e.position)))),[D,i]),[j,ee]=s.useState([]),[M,N]=s.useState(!1),[I,L]=s.useState(!1),[R,z]=s.useState(p===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:p),B=s.useRef(null),V=a.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),H=s.useRef(null),U=s.useRef(!1),W=s.useCallback(e=>{E(t=>(t.find(t=>t.id===e.id)?.delete||b.dismiss(e.id),t.filter(({id:t})=>t!==e.id)))},[]);return s.useEffect(()=>b.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{E(t=>t.map(t=>t.id===e.id?{...t,delete:!0}:t))});return}setTimeout(()=>{c.flushSync(()=>{E(t=>{let n=t.findIndex(t=>t.id===e.id);return n===-1?[e,...t]:[...t.slice(0,n),{...t[n],...e},...t.slice(n+1)]})})})}),[w]),s.useEffect(()=>{if(p!==`system`){z(p);return}if(p===`system`&&(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?z(`dark`):z(`light`)),typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);try{e.addEventListener(`change`,({matches:e})=>{z(e?`dark`:`light`)})}catch{e.addListener(({matches:e})=>{try{z(e?`dark`:`light`)}catch(e){console.error(e)}})}},[p]),s.useEffect(()=>{w.length<=1&&N(!1)},[w]),s.useEffect(()=>{let e=e=>{if(a.every(t=>e[t]||e.code===t)){var t;N(!0),(t=B.current)==null||t.focus()}e.code===`Escape`&&(document.activeElement===B.current||B.current?.contains(document.activeElement))&&N(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[a]),s.useEffect(()=>{if(B.current)return()=>{H.current&&(H.current.focus({preventScroll:!0}),H.current=null,U.current=!1)}},[B.current]),s.createElement(`section`,{ref:t,"aria-label":`${C} ${V}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`,suppressHydrationWarning:!0},O.map((t,n)=>{let[i,a]=t.split(`-`);return D.length?s.createElement(`ol`,{key:t,dir:y===`auto`?te():y,tabIndex:-1,ref:B,className:u,"data-sonner-toaster":!0,"data-sonner-theme":R,"data-y-position":i,"data-x-position":a,style:{"--front-toast-height":`${j[0]?.height||0}px`,"--width":`${k}px`,"--gap":`${x}px`,...g,...F(d,f)},onBlur:e=>{U.current&&!e.currentTarget.contains(e.relatedTarget)&&(U.current=!1,H.current&&=(H.current.focus({preventScroll:!0}),null))},onFocus:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||U.current||(U.current=!0,H.current=e.relatedTarget)},onMouseEnter:()=>N(!0),onMouseMove:()=>N(!0),onMouseLeave:()=>{I||N(!1)},onDragEnd:()=>N(!1),onPointerDown:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||L(!0)},onPointerUp:()=>L(!1)},D.filter(e=>!e.position&&n===0||e.position===t).map((n,i)=>s.createElement(P,{key:n.id,icons:S,index:i,toast:n,defaultRichColors:m,duration:v?.duration??h,className:v?.className,descriptionClassName:v?.descriptionClassName,invert:r,visibleToasts:_,closeButton:v?.closeButton??l,interacting:I,position:t,style:v?.style,unstyled:v?.unstyled,classNames:v?.classNames,cancelButtonStyle:v?.cancelButtonStyle,actionButtonStyle:v?.actionButtonStyle,closeButtonAriaLabel:v?.closeButtonAriaLabel,removeToast:W,toasts:D.filter(e=>e.position==n.position),heights:j.filter(e=>e.position==n.position),setHeights:ee,expandByDefault:o,gap:x,expanded:M,swipeDirections:e.swipeDirections}))):null}))}),L=null;function R(e){L=e}function z(){if(!L)throw Error(`getApiBase called with no active project — call setActiveProjectId first`);return`${a}/api/projects/${L}`}var B=new Map;function V(e,t){return`${e}:${t}`}function H(e){return(e instanceof Error?e.message:e==null?``:String(e)).trim()||`Request failed`}function U(e){if(!e)return;let t=`${e}:`;for(let e of B.keys())e.startsWith(t)&&B.delete(e)}function W({namespace:e,projectId:t,initialValue:n,fetcher:r,pollInterval:i=0}){let a=t?V(t,e):null,[o,c]=(0,s.useState)(()=>a&&B.has(a)?B.get(a):n),[l,u]=(0,s.useState)(()=>!a||!B.has(a)),[d,f]=(0,s.useState)(l),[p,m]=(0,s.useState)(null),h=(0,s.useRef)(r);h.current=r;let g=(0,s.useRef)(n);g.current=n;let _=(0,s.useRef)(a);_.current=a;let v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useCallback)(async(e,t,n)=>{let r=++v.current;y.current?.abort();let i=new AbortController;y.current=i,n&&_.current===e&&(f(!0),m(null));try{let n=await h.current({projectId:t,signal:i.signal});if(i.signal.aborted||r!==v.current)return;B.set(e,n),_.current===e&&(c(n),m(null))}catch(t){if(i.signal.aborted||r!==v.current)return;_.current===e&&m(H(t))}finally{r===v.current&&(y.current===i&&(y.current=null),_.current===e&&(f(!1),u(!1)))}},[]);return(0,s.useEffect)(()=>{if(v.current+=1,y.current?.abort(),y.current=null,m(null),!a||!t){c(g.current),u(!0),f(!1);return}let e=B.has(a);e?(c(B.get(a)),u(!1),f(!1)):(c(g.current),u(!0),f(!0)),b(a,t,!e);let n;return i>0&&(n=setInterval(()=>{b(a,t,!1)},i)),()=>{v.current+=1,y.current?.abort(),y.current=null,n&&clearInterval(n)}},[a,t,i,b]),{data:o,isLoading:d,isFirstLoad:l,error:p,refresh:(0,s.useCallback)(async()=>{!a||!t||await b(a,t,!0)},[a,t,b])}}var ne=n();function re(e){return e.providers&&e.providers.length>0?e.providers:[e.provider]}var ie=(0,s.createContext)(null),G=`specrails-desktop:activeProjectId`;function ae(e){try{e?localStorage.setItem(G,e):localStorage.removeItem(G)}catch{}}function K(){try{return localStorage.getItem(G)}catch{return null}}function oe({children:e,isolated:t=!1}){let n=(0,s.useCallback)(e=>{t||ae(e)},[t]),[r,c]=(0,s.useState)([]),[l,u]=(0,s.useState)(null),[d,f]=(0,s.useState)(!0),[p,m]=(0,s.useState)(!1),h=(0,s.useRef)(null),g=(0,s.useRef)(new Set),_=(0,s.useRef)(!1),v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useRef)(null),x=(0,s.useRef)(0),S=(0,s.useCallback)(e=>{n(e),R(e),u(t=>(t!==null&&t!==e&&(h.current&&clearTimeout(h.current),m(!0),h.current=setTimeout(()=>m(!1),400)),e))},[n]),{registerHandler:w,unregisterHandler:T,connectionStatus:E}=o(),D=(0,s.useCallback)(async function e(){if(!_.current||y.current)return;b.current&&clearTimeout(b.current);let r=new AbortController;y.current=r;let i=v.current,o=setTimeout(()=>r.abort(),8e3);try{let e=await fetch(`${a}/api/projects`,{signal:r.signal});if(!e.ok)throw Error(`HTTP ${e.status}`);let o=await e.json();if(!Array.isArray(o.projects))throw Error(`Invalid project snapshot`);if(!_.current||r.signal.aborted||i!==v.current)return;c(o.projects);let s=o.projects;u(e=>{if(e&&s.some(t=>t.id===e))return e;let r=t?null:K(),i=r&&s.some(e=>e.id===r)?r:null;return n(i),R(i),i}),x.current=0,f(!1)}catch{if(_.current&&i===v.current){let t=Math.min(500*2**Math.min(x.current++,5),1e4);b.current=setTimeout(()=>{e()},t)}}finally{clearTimeout(o),y.current===r&&(y.current=null)}},[t,n]);(0,s.useEffect)(()=>{_.current=!0,D();let e=()=>{D()};return window.addEventListener(`online`,e),window.addEventListener(`focus`,e),()=>{_.current=!1,v.current++,y.current?.abort(),y.current=null,b.current&&clearTimeout(b.current),h.current&&clearTimeout(h.current),window.removeEventListener(`online`,e),window.removeEventListener(`focus`,e)}},[D]);let O=(0,s.useRef)(E),k=(0,s.useRef)(E===`connected`);(0,s.useEffect)(()=>{E===`connected`&&(k.current&&O.current!==`connected`&&D(),k.current=!0),O.current=E},[E,D]);let A=(0,s.useCallback)(e=>{if(!e||typeof e!=`object`)return;let r=e;if(typeof r.type==`string`){if(r.type===`desktop.projects`){if(!Array.isArray(r.projects))return;v.current++,x.current=0,b.current&&clearTimeout(b.current);let e=r.projects;c(e),u(r=>{let i;if(r&&e.find(e=>e.id===r))i=r;else{let n=t?null:K();i=n&&e.find(e=>e.id===n)?n:!t&&e.length>0?e[0].id:null}return n(i),R(i),i}),f(!1)}else if(r.type===`desktop.project_added`){let e=r.project;if(!e||typeof e.id!=`string`)return;v.current++,c(t=>t.find(t=>t.id===e.id)?t:[...t,e]),g.current.has(e.id)?g.current.delete(e.id):t||(C.success(i.t(`nav:projects.added`,{name:e.name})),S(e.id))}else if(r.type===`providers.detected_changed`)D();else if(r.type===`desktop.project_removed`){let e=r.projectId;if(typeof e!=`string`)return;v.current++,t||C.success(i.t(`nav:projects.removed`)),U(e),c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}}},[D,S,t,n]);(0,s.useLayoutEffect)(()=>(w(`desktop`,A),()=>T(`desktop`)),[A,w,T]);let j=(0,s.useRef)(0);(0,s.useEffect)(()=>{let e=()=>{let e=Date.now();e-j.current<6e4||(j.current=e,fetch(`${a}/api/providers/detected?refresh=1`).catch(()=>{}))};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[]);let ee=(0,s.useCallback)(async(e,t,n,r)=>{try{let i={path:e};n&&n.length>0&&(i.providers=n),t&&(i.name=t),r?.length&&(i.repositories=r);let a=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(!a.ok){let e=await a.json();throw Error(e.error??`HTTP ${a.status}`)}let o=await a.json();return g.current.add(o.project.id),v.current++,c(e=>e.find(e=>e.id===o.project.id)?e:[...e,o.project]),S(o.project.id),o}catch(e){throw console.error(`[useDesktop] addProject error:`,e),e}},[S]),M=(0,s.useCallback)(async e=>{try{let t=await fetch(`${a}/api/projects/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}U(e),v.current++,c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}catch(e){throw console.error(`[useDesktop] removeProject error:`,e),e}},[n]),N=(0,s.useMemo)(()=>({projects:r,activeProjectId:l,setActiveProjectId:S,addProject:ee,removeProject:M,refreshProjects:D,isLoading:d,isSwitchingProject:p}),[r,l,S,ee,M,D,d,p]);return(0,ne.jsx)(ie.Provider,{value:N,children:e})}var se={projects:[],activeProjectId:null,setActiveProjectId:()=>{},addProject:async()=>null,removeProject:async()=>{},refreshProjects:async()=>{},isLoading:!1,isSwitchingProject:!1};function q(){return(0,s.useContext)(ie)??se}export{z as a,W as i,re as n,I as o,q as r,C as s,oe as t};
|
|
1
|
+
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{h as i,l as a,r as o}from"./useSharedWebSocket-D-czsPTl.js";var s=e(t(),1),c=e(r(),1);function l(e){if(!e||typeof document>`u`)return;let t=document.head||document.getElementsByTagName(`head`)[0],n=document.createElement(`style`);n.type=`text/css`,t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}var u=e=>{switch(e){case`success`:return p;case`info`:return h;case`warning`:return m;case`error`:return g;default:return null}},d=Array(12).fill(0),f=({visible:e,className:t})=>s.createElement(`div`,{className:[`sonner-loading-wrapper`,t].filter(Boolean).join(` `),"data-visible":e},s.createElement(`div`,{className:`sonner-spinner`},d.map((e,t)=>s.createElement(`div`,{className:`sonner-loading-bar`,key:`spinner-bar-${t}`})))),p=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,clipRule:`evenodd`})),m=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,clipRule:`evenodd`})),h=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,clipRule:`evenodd`})),g=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,clipRule:`evenodd`})),_=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`},s.createElement(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),s.createElement(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})),v=()=>{let[e,t]=s.useState(document.hidden);return s.useEffect(()=>{let e=()=>{t(document.hidden)};return document.addEventListener(`visibilitychange`,e),()=>window.removeEventListener(`visibilitychange`,e)},[]),e},y=1,b=new class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{let{message:t,...n}=e,r=typeof e?.id==`number`||e.id?.length>0?e.id:y++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0||e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:`error`}),this.success=(e,t)=>this.create({...t,type:`success`,message:e}),this.info=(e,t)=>this.create({...t,type:`info`,message:e}),this.warning=(e,t)=>this.create({...t,type:`warning`,message:e}),this.loading=(e,t)=>this.create({...t,type:`loading`,message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let r=Promise.resolve(e instanceof Function?e():e),i=n!==void 0,a,o=r.then(async e=>{if(a=[`resolve`,e],s.isValidElement(e))i=!1,this.create({id:n,type:`default`,message:e});else if(S(e)&&!e.ok){i=!1;let r=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,a=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(e instanceof Error){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(t.success!==void 0){i=!1;let r=typeof t.success==`function`?await t.success(e):t.success,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`success`,description:a,...o})}}).catch(async e=>{if(a=[`reject`,e],t.error!==void 0){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}}).finally(()=>{i&&(this.dismiss(n),n=void 0),t.finally==null||t.finally.call(t)}),c=()=>new Promise((e,t)=>o.then(()=>a[0]===`reject`?t(a[1]):e(a[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:c}:Object.assign(n,{unwrap:c})},this.custom=(e,t)=>{let n=t?.id||y++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},x=(e,t)=>{let n=t?.id||y++;return b.addToast({title:e,...t,id:n}),n},S=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,C=Object.assign(x,{success:b.success,info:b.info,warning:b.warning,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss,loading:b.loading},{getHistory:()=>b.toasts,getToasts:()=>b.getActiveToasts()});l(`[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}`);function w(e){return e.label!==void 0}var T=3,E=`24px`,D=`16px`,O=4e3,k=356,A=14,j=45,ee=200;function M(...e){return e.filter(Boolean).join(` `)}function N(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}var P=e=>{let{invert:t,toast:n,unstyled:r,interacting:i,setHeights:a,visibleToasts:o,heights:c,index:l,toasts:d,expanded:p,removeToast:m,defaultRichColors:h,closeButton:g,style:y,cancelButtonStyle:b,actionButtonStyle:x,className:S=``,descriptionClassName:C=``,duration:T,position:E,gap:D,expandByDefault:k,classNames:A,icons:P,closeButtonAriaLabel:te=`Close toast`}=e,[F,I]=s.useState(null),[L,R]=s.useState(null),[z,B]=s.useState(!1),[V,H]=s.useState(!1),[U,W]=s.useState(!1),[ne,re]=s.useState(!1),[ie,G]=s.useState(!1),[ae,K]=s.useState(0),[oe,se]=s.useState(0),q=s.useRef(n.duration||T||O),ce=s.useRef(null),J=s.useRef(null),le=l===0,ue=l+1<=o,Y=n.type,X=n.dismissible!==!1,de=n.className||``,fe=n.descriptionClassName||``,pe=s.useMemo(()=>c.findIndex(e=>e.toastId===n.id)||0,[c,n.id]),me=s.useMemo(()=>n.closeButton??g,[n.closeButton,g]),he=s.useMemo(()=>n.duration||T||O,[n.duration,T]),ge=s.useRef(0),Z=s.useRef(0),_e=s.useRef(0),Q=s.useRef(null),[ve,ye]=E.split(`-`),be=s.useMemo(()=>c.reduce((e,t,n)=>n>=pe?e:e+t.height,0),[c,pe]),xe=v(),Se=n.invert||t,Ce=Y===`loading`;Z.current=s.useMemo(()=>pe*D+be,[pe,be]),s.useEffect(()=>{q.current=he},[he]),s.useEffect(()=>{B(!0)},[]),s.useEffect(()=>{let e=J.current;if(e){let t=e.getBoundingClientRect().height;return se(t),a(e=>[{toastId:n.id,height:t,position:n.position},...e]),()=>a(e=>e.filter(e=>e.toastId!==n.id))}},[a,n.id]),s.useLayoutEffect(()=>{if(!z)return;let e=J.current,t=e.style.height;e.style.height=`auto`;let r=e.getBoundingClientRect().height;e.style.height=t,se(r),a(e=>e.find(e=>e.toastId===n.id)?e.map(e=>e.toastId===n.id?{...e,height:r}:e):[{toastId:n.id,height:r,position:n.position},...e])},[z,n.title,n.description,a,n.id,n.jsx,n.action,n.cancel]);let $=s.useCallback(()=>{H(!0),K(Z.current),a(e=>e.filter(e=>e.toastId!==n.id)),setTimeout(()=>{m(n)},ee)},[n,m,a,Z]);s.useEffect(()=>{if(n.promise&&Y===`loading`||n.duration===1/0||n.type===`loading`)return;let e;return p||i||xe?(()=>{if(_e.current<ge.current){let e=new Date().getTime()-ge.current;q.current-=e}_e.current=new Date().getTime()})():q.current!==1/0&&(ge.current=new Date().getTime(),e=setTimeout(()=>{n.onAutoClose==null||n.onAutoClose.call(n,n),$()},q.current)),()=>clearTimeout(e)},[p,i,n,Y,xe,$]),s.useEffect(()=>{n.delete&&($(),n.onDismiss==null||n.onDismiss.call(n,n))},[$,n.delete]);function we(){return P?.loading?s.createElement(`div`,{className:M(A?.loader,n?.classNames?.loader,`sonner-loader`),"data-visible":Y===`loading`},P.loading):s.createElement(f,{className:M(A?.loader,n?.classNames?.loader),visible:Y===`loading`})}let Te=n.icon||P?.[Y]||u(Y);return s.createElement(`li`,{tabIndex:0,ref:J,className:M(S,de,A?.toast,n?.classNames?.toast,A?.default,A?.[Y],n?.classNames?.[Y]),"data-sonner-toast":``,"data-rich-colors":n.richColors??h,"data-styled":!(n.jsx||n.unstyled||r),"data-mounted":z,"data-promise":!!n.promise,"data-swiped":ie,"data-removed":V,"data-visible":ue,"data-y-position":ve,"data-x-position":ye,"data-index":l,"data-front":le,"data-swiping":U,"data-dismissible":X,"data-type":Y,"data-invert":Se,"data-swipe-out":ne,"data-swipe-direction":L,"data-expanded":!!(p||k&&z),"data-testid":n.testId,style:{"--index":l,"--toasts-before":l,"--z-index":d.length-l,"--offset":`${V?ae:Z.current}px`,"--initial-height":k?`auto`:`${oe}px`,...y,...n.style},onDragEnd:()=>{W(!1),I(null),Q.current=null},onPointerDown:e=>{e.button!==2&&(Ce||!X||(ce.current=new Date,K(Z.current),e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(W(!0),Q.current={x:e.clientX,y:e.clientY})))},onPointerUp:()=>{if(ne||!X)return;Q.current=null;let e=Number(J.current?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(J.current?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),r=new Date().getTime()-ce.current?.getTime(),i=F===`x`?e:t,a=Math.abs(i)/r;if(Math.abs(i)>=j||a>.11){K(Z.current),n.onDismiss==null||n.onDismiss.call(n,n),R(F===`x`?e>0?`right`:`left`:t>0?`down`:`up`),$(),re(!0);return}else{var o,s;(o=J.current)==null||o.style.setProperty(`--swipe-amount-x`,`0px`),(s=J.current)==null||s.style.setProperty(`--swipe-amount-y`,`0px`)}G(!1),W(!1),I(null)},onPointerMove:t=>{var n,r;if(!Q.current||!X||window.getSelection()?.toString().length>0)return;let i=t.clientY-Q.current.y,a=t.clientX-Q.current.x,o=e.swipeDirections??N(E);!F&&(Math.abs(a)>1||Math.abs(i)>1)&&I(Math.abs(a)>Math.abs(i)?`x`:`y`);let s={x:0,y:0},c=e=>1/(1.5+Math.abs(e)/20);if(F===`y`){if(o.includes(`top`)||o.includes(`bottom`))if(o.includes(`top`)&&i<0||o.includes(`bottom`)&&i>0)s.y=i;else{let e=i*c(i);s.y=Math.abs(e)<Math.abs(i)?e:i}}else if(F===`x`&&(o.includes(`left`)||o.includes(`right`)))if(o.includes(`left`)&&a<0||o.includes(`right`)&&a>0)s.x=a;else{let e=a*c(a);s.x=Math.abs(e)<Math.abs(a)?e:a}(Math.abs(s.x)>0||Math.abs(s.y)>0)&&G(!0),(n=J.current)==null||n.style.setProperty(`--swipe-amount-x`,`${s.x}px`),(r=J.current)==null||r.style.setProperty(`--swipe-amount-y`,`${s.y}px`)}},me&&!n.jsx&&Y!==`loading`?s.createElement(`button`,{"aria-label":te,"data-disabled":Ce,"data-close-button":!0,onClick:Ce||!X?()=>{}:()=>{$(),n.onDismiss==null||n.onDismiss.call(n,n)},className:M(A?.closeButton,n?.classNames?.closeButton)},P?.close??_):null,(Y||n.icon||n.promise)&&n.icon!==null&&(P?.[Y]!==null||n.icon)?s.createElement(`div`,{"data-icon":``,className:M(A?.icon,n?.classNames?.icon)},n.promise||n.type===`loading`&&!n.icon?n.icon||we():null,n.type===`loading`?null:Te):null,s.createElement(`div`,{"data-content":``,className:M(A?.content,n?.classNames?.content)},s.createElement(`div`,{"data-title":``,className:M(A?.title,n?.classNames?.title)},n.jsx?n.jsx:typeof n.title==`function`?n.title():n.title),n.description?s.createElement(`div`,{"data-description":``,className:M(C,fe,A?.description,n?.classNames?.description)},typeof n.description==`function`?n.description():n.description):null),s.isValidElement(n.cancel)?n.cancel:n.cancel&&w(n.cancel)?s.createElement(`button`,{"data-button":!0,"data-cancel":!0,style:n.cancelButtonStyle||b,onClick:e=>{w(n.cancel)&&X&&(n.cancel.onClick==null||n.cancel.onClick.call(n.cancel,e),$())},className:M(A?.cancelButton,n?.classNames?.cancelButton)},n.cancel.label):null,s.isValidElement(n.action)?n.action:n.action&&w(n.action)?s.createElement(`button`,{"data-button":!0,"data-action":!0,style:n.actionButtonStyle||x,onClick:e=>{w(n.action)&&(n.action.onClick==null||n.action.onClick.call(n.action,e),!e.defaultPrevented&&$())},className:M(A?.actionButton,n?.classNames?.actionButton)},n.action.label):null)};function te(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}function F(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?D:E;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var I=s.forwardRef(function(e,t){let{id:n,invert:r,position:i=`bottom-right`,hotkey:a=[`altKey`,`KeyT`],expand:o,closeButton:l,className:u,offset:d,mobileOffset:f,theme:p=`light`,richColors:m,duration:h,style:g,visibleToasts:_=T,toastOptions:v,dir:y=te(),gap:x=A,icons:S,containerAriaLabel:C=`Notifications`}=e,[w,E]=s.useState([]),D=s.useMemo(()=>n?w.filter(e=>e.toasterId===n):w.filter(e=>!e.toasterId),[w,n]),O=s.useMemo(()=>Array.from(new Set([i].concat(D.filter(e=>e.position).map(e=>e.position)))),[D,i]),[j,ee]=s.useState([]),[M,N]=s.useState(!1),[I,L]=s.useState(!1),[R,z]=s.useState(p===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:p),B=s.useRef(null),V=a.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),H=s.useRef(null),U=s.useRef(!1),W=s.useCallback(e=>{E(t=>(t.find(t=>t.id===e.id)?.delete||b.dismiss(e.id),t.filter(({id:t})=>t!==e.id)))},[]);return s.useEffect(()=>b.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{E(t=>t.map(t=>t.id===e.id?{...t,delete:!0}:t))});return}setTimeout(()=>{c.flushSync(()=>{E(t=>{let n=t.findIndex(t=>t.id===e.id);return n===-1?[e,...t]:[...t.slice(0,n),{...t[n],...e},...t.slice(n+1)]})})})}),[w]),s.useEffect(()=>{if(p!==`system`){z(p);return}if(p===`system`&&(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?z(`dark`):z(`light`)),typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);try{e.addEventListener(`change`,({matches:e})=>{z(e?`dark`:`light`)})}catch{e.addListener(({matches:e})=>{try{z(e?`dark`:`light`)}catch(e){console.error(e)}})}},[p]),s.useEffect(()=>{w.length<=1&&N(!1)},[w]),s.useEffect(()=>{let e=e=>{if(a.every(t=>e[t]||e.code===t)){var t;N(!0),(t=B.current)==null||t.focus()}e.code===`Escape`&&(document.activeElement===B.current||B.current?.contains(document.activeElement))&&N(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[a]),s.useEffect(()=>{if(B.current)return()=>{H.current&&(H.current.focus({preventScroll:!0}),H.current=null,U.current=!1)}},[B.current]),s.createElement(`section`,{ref:t,"aria-label":`${C} ${V}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`,suppressHydrationWarning:!0},O.map((t,n)=>{let[i,a]=t.split(`-`);return D.length?s.createElement(`ol`,{key:t,dir:y===`auto`?te():y,tabIndex:-1,ref:B,className:u,"data-sonner-toaster":!0,"data-sonner-theme":R,"data-y-position":i,"data-x-position":a,style:{"--front-toast-height":`${j[0]?.height||0}px`,"--width":`${k}px`,"--gap":`${x}px`,...g,...F(d,f)},onBlur:e=>{U.current&&!e.currentTarget.contains(e.relatedTarget)&&(U.current=!1,H.current&&=(H.current.focus({preventScroll:!0}),null))},onFocus:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||U.current||(U.current=!0,H.current=e.relatedTarget)},onMouseEnter:()=>N(!0),onMouseMove:()=>N(!0),onMouseLeave:()=>{I||N(!1)},onDragEnd:()=>N(!1),onPointerDown:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||L(!0)},onPointerUp:()=>L(!1)},D.filter(e=>!e.position&&n===0||e.position===t).map((n,i)=>s.createElement(P,{key:n.id,icons:S,index:i,toast:n,defaultRichColors:m,duration:v?.duration??h,className:v?.className,descriptionClassName:v?.descriptionClassName,invert:r,visibleToasts:_,closeButton:v?.closeButton??l,interacting:I,position:t,style:v?.style,unstyled:v?.unstyled,classNames:v?.classNames,cancelButtonStyle:v?.cancelButtonStyle,actionButtonStyle:v?.actionButtonStyle,closeButtonAriaLabel:v?.closeButtonAriaLabel,removeToast:W,toasts:D.filter(e=>e.position==n.position),heights:j.filter(e=>e.position==n.position),setHeights:ee,expandByDefault:o,gap:x,expanded:M,swipeDirections:e.swipeDirections}))):null}))}),L=null;function R(e){L=e}function z(){if(!L)throw Error(`getApiBase called with no active project — call setActiveProjectId first`);return`${a}/api/projects/${L}`}var B=new Map;function V(e,t){return`${e}:${t}`}function H(e){return(e instanceof Error?e.message:e==null?``:String(e)).trim()||`Request failed`}function U(e){if(!e)return;let t=`${e}:`;for(let e of B.keys())e.startsWith(t)&&B.delete(e)}function W({namespace:e,projectId:t,initialValue:n,fetcher:r,pollInterval:i=0}){let a=t?V(t,e):null,[o,c]=(0,s.useState)(()=>a&&B.has(a)?B.get(a):n),[l,u]=(0,s.useState)(()=>!a||!B.has(a)),[d,f]=(0,s.useState)(l),[p,m]=(0,s.useState)(null),h=(0,s.useRef)(r);h.current=r;let g=(0,s.useRef)(n);g.current=n;let _=(0,s.useRef)(a);_.current=a;let v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useCallback)(async(e,t,n)=>{let r=++v.current;y.current?.abort();let i=new AbortController;y.current=i,n&&_.current===e&&(f(!0),m(null));try{let n=await h.current({projectId:t,signal:i.signal});if(i.signal.aborted||r!==v.current)return;B.set(e,n),_.current===e&&(c(n),m(null))}catch(t){if(i.signal.aborted||r!==v.current)return;_.current===e&&m(H(t))}finally{r===v.current&&(y.current===i&&(y.current=null),_.current===e&&(f(!1),u(!1)))}},[]);return(0,s.useEffect)(()=>{if(v.current+=1,y.current?.abort(),y.current=null,m(null),!a||!t){c(g.current),u(!0),f(!1);return}let e=B.has(a);e?(c(B.get(a)),u(!1),f(!1)):(c(g.current),u(!0),f(!0)),b(a,t,!e);let n;return i>0&&(n=setInterval(()=>{b(a,t,!1)},i)),()=>{v.current+=1,y.current?.abort(),y.current=null,n&&clearInterval(n)}},[a,t,i,b]),{data:o,isLoading:d,isFirstLoad:l,error:p,refresh:(0,s.useCallback)(async()=>{!a||!t||await b(a,t,!0)},[a,t,b])}}var ne=n();function re(e){return e.providers&&e.providers.length>0?e.providers:[e.provider]}var ie=(0,s.createContext)(null),G=`specrails-desktop:activeProjectId`;function ae(e){try{e?localStorage.setItem(G,e):localStorage.removeItem(G)}catch{}}function K(){try{return localStorage.getItem(G)}catch{return null}}function oe({children:e,isolated:t=!1}){let n=(0,s.useCallback)(e=>{t||ae(e)},[t]),[r,c]=(0,s.useState)([]),[l,u]=(0,s.useState)(null),[d,f]=(0,s.useState)(!0),[p,m]=(0,s.useState)(!1),h=(0,s.useRef)(null),g=(0,s.useRef)(new Set),_=(0,s.useRef)(!1),v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useRef)(null),x=(0,s.useRef)(0),S=(0,s.useCallback)(e=>{n(e),R(e),u(t=>(t!==null&&t!==e&&(h.current&&clearTimeout(h.current),m(!0),h.current=setTimeout(()=>m(!1),400)),e))},[n]),{registerHandler:w,unregisterHandler:T,connectionStatus:E}=o(),D=(0,s.useCallback)(async function e(){if(!_.current||y.current)return;b.current&&clearTimeout(b.current);let r=new AbortController;y.current=r;let i=v.current,o=setTimeout(()=>r.abort(),8e3);try{let e=await fetch(`${a}/api/projects`,{signal:r.signal});if(!e.ok)throw Error(`HTTP ${e.status}`);let o=await e.json();if(!Array.isArray(o.projects))throw Error(`Invalid project snapshot`);if(!_.current||r.signal.aborted||i!==v.current)return;c(o.projects);let s=o.projects;u(e=>{if(e&&s.some(t=>t.id===e))return e;let r=t?null:K(),i=r&&s.some(e=>e.id===r)?r:null;return n(i),R(i),i}),x.current=0,f(!1)}catch{if(_.current&&i===v.current){let t=Math.min(500*2**Math.min(x.current++,5),1e4);b.current=setTimeout(()=>{e()},t)}}finally{clearTimeout(o),y.current===r&&(y.current=null)}},[t,n]);(0,s.useEffect)(()=>{_.current=!0,D();let e=()=>{D()};return window.addEventListener(`online`,e),window.addEventListener(`focus`,e),()=>{_.current=!1,v.current++,y.current?.abort(),y.current=null,b.current&&clearTimeout(b.current),h.current&&clearTimeout(h.current),window.removeEventListener(`online`,e),window.removeEventListener(`focus`,e)}},[D]);let O=(0,s.useRef)(E),k=(0,s.useRef)(E===`connected`);(0,s.useEffect)(()=>{E===`connected`&&(k.current&&O.current!==`connected`&&D(),k.current=!0),O.current=E},[E,D]);let A=(0,s.useCallback)(e=>{if(!e||typeof e!=`object`)return;let r=e;if(typeof r.type==`string`){if(r.type===`desktop.projects`){if(!Array.isArray(r.projects))return;v.current++,x.current=0,b.current&&clearTimeout(b.current);let e=r.projects;c(e),u(r=>{let i;if(r&&e.find(e=>e.id===r))i=r;else{let n=t?null:K();i=n&&e.find(e=>e.id===n)?n:!t&&e.length>0?e[0].id:null}return n(i),R(i),i}),f(!1)}else if(r.type===`desktop.project_added`){let e=r.project;if(!e||typeof e.id!=`string`)return;v.current++,c(t=>t.find(t=>t.id===e.id)?t:[...t,e]),g.current.has(e.id)?g.current.delete(e.id):t||(C.success(i.t(`nav:projects.added`,{name:e.name})),S(e.id))}else if(r.type===`providers.detected_changed`)D();else if(r.type===`desktop.project_removed`){let e=r.projectId;if(typeof e!=`string`)return;v.current++,t||C.success(i.t(`nav:projects.removed`)),U(e),c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}}},[D,S,t,n]);(0,s.useLayoutEffect)(()=>(w(`desktop`,A),()=>T(`desktop`)),[A,w,T]);let j=(0,s.useRef)(0);(0,s.useEffect)(()=>{let e=()=>{let e=Date.now();e-j.current<6e4||(j.current=e,fetch(`${a}/api/providers/detected?refresh=1`).catch(()=>{}))};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[]);let ee=(0,s.useCallback)(async(e,t,n,r)=>{try{let i={path:e};n&&n.length>0&&(i.providers=n),t&&(i.name=t),r?.length&&(i.repositories=r);let a=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(!a.ok){let e=await a.json();throw Error(e.error??`HTTP ${a.status}`)}let o=await a.json();return g.current.add(o.project.id),v.current++,c(e=>e.find(e=>e.id===o.project.id)?e:[...e,o.project]),S(o.project.id),o}catch(e){throw console.error(`[useDesktop] addProject error:`,e),e}},[S]),M=(0,s.useCallback)(async e=>{try{let t=await fetch(`${a}/api/projects/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}U(e),v.current++,c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}catch(e){throw console.error(`[useDesktop] removeProject error:`,e),e}},[n]),N=(0,s.useMemo)(()=>({projects:r,activeProjectId:l,setActiveProjectId:S,addProject:ee,removeProject:M,refreshProjects:D,isLoading:d,isSwitchingProject:p}),[r,l,S,ee,M,D,d,p]);return(0,ne.jsx)(ie.Provider,{value:N,children:e})}var se={projects:[],activeProjectId:null,setActiveProjectId:()=>{},addProject:async()=>null,removeProject:async()=>{},refreshProjects:async()=>{},isLoading:!1,isSwitchingProject:!1};function q(){return(0,s.useContext)(ie)??se}export{z as a,W as i,re as n,I as o,q as r,C as s,oe as t};
|