specrails-desktop 2.59.0 → 2.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/client/dist/assets/{ActivityFeedPage-DBFt8ZHP.js → ActivityFeedPage-vAY9C71W.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-DiQx0W67.js → AgentBrowserCapture-CpwjGXQm.js} +1 -1
  3. package/client/dist/assets/{AgentModeAnalyticsPane-BmDSXp_J.js → AgentModeAnalyticsPane-BHeoJVxQ.js} +2 -2
  4. package/client/dist/assets/{AgentModeCodePane-BLQLPSwr.js → AgentModeCodePane-B0Nf3YkN.js} +2 -2
  5. package/client/dist/assets/{AgentModeJobsPane-BbTXdKUa.js → AgentModeJobsPane-CpbIItY_.js} +1 -1
  6. package/client/dist/assets/{AgentsPage-Dei1jGR8.js → AgentsPage-BVJAFXn3.js} +1 -1
  7. package/client/dist/assets/{AnalyticsPage-BhkeGIGn.js → AnalyticsPage-DDWees-K.js} +1 -1
  8. package/client/dist/assets/{CodePage-B_9yYWUx.js → CodePage-CzV5tkvS.js} +1 -1
  9. package/client/dist/assets/{DesktopAnalyticsPage-DAcfEJac.js → DesktopAnalyticsPage-DfRHNK7i.js} +1 -1
  10. package/client/dist/assets/{DocsDialog-WCuiYgsc.js → DocsDialog-BxduBYbh.js} +1 -1
  11. package/client/dist/assets/{DocsPage-bGVYTMTU.js → DocsPage-DOVeRJn_.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-CsodZ-yb.js → ExportDropdown-BnKVV8UK.js} +1 -1
  13. package/client/dist/assets/{InteractiveJobComposer-D5fh_eVL.js → InteractiveJobComposer-Da9dvM-0.js} +1 -1
  14. package/client/dist/assets/{JobDetailModal-DlpXF61O.js → JobDetailModal-DhwKbZGe.js} +1 -1
  15. package/client/dist/assets/{JobDetailPage-2yR19_Lb.js → JobDetailPage-MtPE-E_1.js} +1 -1
  16. package/client/dist/assets/{JobsPage-CS9IR6Dq.js → JobsPage-0vdlbNik.js} +1 -1
  17. package/client/dist/assets/{LoopBuilderPage-BwiAtmOr.js → LoopBuilderPage-DCUHozXh.js} +1 -1
  18. package/client/dist/assets/{LoopPreviewModal--upwvgTv.js → LoopPreviewModal-Df-S8NGf.js} +1 -1
  19. package/client/dist/assets/{LoopWindowSurface-DRnUixtl.js → LoopWindowSurface-sdb7QbSo.js} +1 -1
  20. package/client/dist/assets/{LoopsPage-Xm3nRToQ.js → LoopsPage-CDfCC9Px.js} +1 -1
  21. package/client/dist/assets/{MinimizedChatsContext-D_8L4EWZ.js → MinimizedChatsContext-DKlPf54Y.js} +1 -1
  22. package/client/dist/assets/{PluginsPage-CAFQ1B4Q.js → PluginsPage-iL0G3rQQ.js} +1 -1
  23. package/client/dist/assets/{ProjectSettingsDialog-DYSO4v90.js → ProjectSettingsDialog-DOkjT7xv.js} +1 -1
  24. package/client/dist/assets/{RepositoryDeliveries-CbQmW7Qx.js → RepositoryDeliveries-CJVpOUpZ.js} +1 -1
  25. package/client/dist/assets/RepositoryScopeSelector-BeM-2gIZ.js +2 -0
  26. package/client/dist/assets/{ReviewPacketPage-SDBhYdQB.js → ReviewPacketPage-EBCim2w_.js} +1 -1
  27. package/client/dist/assets/{TemplatePreviewModal-DHBUds51.js → TemplatePreviewModal-1-92UGwN.js} +1 -1
  28. package/client/dist/assets/{TicketDetailModalContext-UAeNm7BB.js → TicketDetailModalContext-CkVXuHxU.js} +1 -1
  29. package/client/dist/assets/{Trans-DExd3Z00.js → Trans-CzhPjnjB.js} +1 -1
  30. package/client/dist/assets/{agent-DrM4qned.js → agent--8QAfoXL.js} +1 -1
  31. package/client/dist/assets/{agent-CW74ODDP.js → agent-3HxXkIWX.js} +1 -1
  32. package/client/dist/assets/{agent-BElLtdKP.js → agent-BjttZLIl.js} +1 -1
  33. package/client/dist/assets/{agent-C-m9VugX.js → agent-CpFCz32T.js} +1 -1
  34. package/client/dist/assets/{agent-KdIXq3w5.js → agent-DVnw6ybO.js} +1 -1
  35. package/client/dist/assets/{agent-CGSKxfZk.js → agent-Z5s_GTP0.js} +1 -1
  36. package/client/dist/assets/{agent-DeCAZDhL.js → agent-hv57-zyG.js} +1 -1
  37. package/client/dist/assets/{agent-jK8mCisM.js → agent-xGrZ_aN1.js} +1 -1
  38. package/client/dist/assets/{formatDistanceToNow-aw7H5ORC.js → formatDistanceToNow-DlQaXc7c.js} +1 -1
  39. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-NyC7gZJX.js → getTimezoneOffsetInMilliseconds-DxUFGcVq.js} +1 -1
  40. package/client/dist/assets/index-Bfunvi6w.css +2 -0
  41. package/client/dist/assets/{index-JSTZVJfe.js → index-Czov72g7.js} +43 -43
  42. package/client/dist/assets/{jira-api-DlXaRwA3.js → jira-api-CbJvbRYx.js} +1 -1
  43. package/client/dist/assets/{project-repositories-DXhb9FP4.js → project-repositories-BkBD3rxx.js} +1 -1
  44. package/client/dist/assets/{spending-BdcyVkcd.js → spending-CYotH-9N.js} +1 -1
  45. package/client/dist/assets/{subscriptionUsage-DoWQv7l1.js → subscriptionUsage-BH73RO86.js} +1 -1
  46. package/client/dist/assets/{subscriptionUsage-DQ02J25O.js → subscriptionUsage-BWTeWlHx.js} +1 -1
  47. package/client/dist/assets/{subscriptionUsage-N9hB-ARf.js → subscriptionUsage-CBh82zVa.js} +1 -1
  48. package/client/dist/assets/{subscriptionUsage-DWF3zKp4.js → subscriptionUsage-CHcQ7lLe.js} +1 -1
  49. package/client/dist/assets/subscriptionUsage-CdlE5Mg1.js +1 -0
  50. package/client/dist/assets/{subscriptionUsage-Cf87DeS_.js → subscriptionUsage-DUPBmSQi.js} +1 -1
  51. package/client/dist/assets/{subscriptionUsage-DkIf6Zuh.js → subscriptionUsage-DrlwrJ17.js} +1 -1
  52. package/client/dist/assets/{subscriptionUsage-D6u7VBdz.js → subscriptionUsage-EFu0mIK3.js} +1 -1
  53. package/client/dist/assets/{useDesktop-D07TvesS.js → useDesktop-DpxVGfUC.js} +1 -1
  54. package/client/dist/assets/{useRuntimeRuns-pGLmtAC6.js → useRuntimeRuns-CfGRbhr9.js} +1 -1
  55. package/client/dist/assets/{useSharedWebSocket-TzKtPRp9.js → useSharedWebSocket-C17TGqT8.js} +2 -2
  56. package/client/dist/index.html +17 -17
  57. package/docs/internals/api-reference.md +1 -0
  58. package/docs/internals/core-runtime-updates.md +9 -2
  59. package/docs/internals/desktop-owned-workflows.md +23 -0
  60. package/docs/internals/mission-rail-cards.md +15 -0
  61. package/docs/internals/operations-runbook.md +6 -0
  62. package/docs/internals/safe-pr-review-flow.md +25 -7
  63. package/docs/internals/source-map.md +3 -1
  64. package/docs/internals/visual-design-audit.md +5 -0
  65. package/package.json +1 -1
  66. package/server/dist/core-update-manager.js +1 -1
  67. package/server/dist/db/migrations.js +9 -0
  68. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +114 -5
  69. package/server/dist/modules/delivery/runtime/multi-repo-execution.js +7 -5
  70. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +65 -30
  71. package/server/dist/modules/delivery/runtime/rail-pr-store.js +3 -3
  72. package/server/dist/modules/delivery/runtime/rail-relaunch.js +154 -0
  73. package/server/dist/modules/delivery/runtime/rails-router.js +109 -10
  74. package/server/dist/modules/execution/runtime/revision-seed.js +6 -2
  75. package/server/dist/modules/loops/runtime/loop-agent-defaults.json +1 -1
  76. package/server/dist/modules/loops/runtime/loop-definition-events.js +1 -1
  77. package/server/dist/modules/loops/runtime/loop-implement-recipe.js +8 -4
  78. package/server/dist/modules/loops/runtime/loop-run-manager.js +27 -17
  79. package/server/dist/modules/subscription-usage/adapters/claude.js +30 -20
  80. package/server/dist/modules/subscription-usage/application.js +2 -1
  81. package/server/dist/modules/subscription-usage/domain.js +35 -1
  82. package/server/dist/modules/subscription-usage/runtime/usage-service.js +1 -1
  83. package/server/dist/worktree-manager.js +114 -6
  84. package/server/dist/worktree-overlay.js +4 -4
  85. package/client/dist/assets/RepositoryScopeSelector-DKzvIGSZ.js +0 -2
  86. package/client/dist/assets/index-CahchzS5.css +0 -2
  87. package/client/dist/assets/subscriptionUsage-zRcRPHkP.js +0 -1
@@ -1 +1 @@
1
- import{t as e}from"./createLucideIcon-Bjbbp_KS.js";import{a as t}from"./useDesktop-D07TvesS.js";var n=e(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]);async function r(e){let t=await e.text(),n=t?JSON.parse(t):{};if(!e.ok)throw Error(n.error||`Request failed (${e.status})`);return n}function i(e){return e??t()}var a=e=>({method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),o={getConnection(e){return fetch(`${i(e)}/jira/connection`).then(e=>r(e))},test(e,t){return fetch(`${i(t)}/jira/test`,a(e)).then(e=>r(e))},discoverProjects(e,t){return fetch(`${i(t)}/jira/discover-projects`,a(e)).then(e=>r(e))},discoverStatuses(e,t){return fetch(`${i(t)}/jira/discover-statuses`,a(e)).then(e=>r(e))},connect(e,t){return fetch(`${i(t)}/jira/connect`,a(e)).then(e=>r(e))},setEnabled(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:e})}).then(e=>r(e))},patchConnection(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>r(e))},listStatuses(e){return fetch(`${i(e)}/jira/statuses`).then(e=>r(e))},moveSpecToStatus(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/move-to-status`,a({status:t})).then(e=>r(e))},discardSpec(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/discard`,a({comment:t})).then(e=>r(e))},getSpecDetails(e,t){return fetch(`${i(t)}/jira/specs/${e}/details`).then(e=>r(e))},disconnect(e){return fetch(`${i(e)}/jira/connection`,{method:`DELETE`}).then(e=>r(e))},syncNow(e){return fetch(`${i(e)}/jira/sync`,{method:`POST`}).then(e=>r(e))},resume(e){return fetch(`${i(e)}/jira/resume`,{method:`POST`}).then(e=>r(e))},listOutbox(e,t){let n=e?`?state=${e}`:``;return fetch(`${i(t)}/jira/outbox${n}`).then(e=>r(e))},retryOutbox(e,t){return fetch(`${i(t)}/jira/outbox/${e}/retry`,{method:`POST`}).then(e=>r(e))}};export{n,o as t};
1
+ import{t as e}from"./createLucideIcon-Bjbbp_KS.js";import{a as t}from"./useDesktop-DpxVGfUC.js";var n=e(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]);async function r(e){let t=await e.text(),n=t?JSON.parse(t):{};if(!e.ok)throw Error(n.error||`Request failed (${e.status})`);return n}function i(e){return e??t()}var a=e=>({method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),o={getConnection(e){return fetch(`${i(e)}/jira/connection`).then(e=>r(e))},test(e,t){return fetch(`${i(t)}/jira/test`,a(e)).then(e=>r(e))},discoverProjects(e,t){return fetch(`${i(t)}/jira/discover-projects`,a(e)).then(e=>r(e))},discoverStatuses(e,t){return fetch(`${i(t)}/jira/discover-statuses`,a(e)).then(e=>r(e))},connect(e,t){return fetch(`${i(t)}/jira/connect`,a(e)).then(e=>r(e))},setEnabled(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:e})}).then(e=>r(e))},patchConnection(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>r(e))},listStatuses(e){return fetch(`${i(e)}/jira/statuses`).then(e=>r(e))},moveSpecToStatus(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/move-to-status`,a({status:t})).then(e=>r(e))},discardSpec(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/discard`,a({comment:t})).then(e=>r(e))},getSpecDetails(e,t){return fetch(`${i(t)}/jira/specs/${e}/details`).then(e=>r(e))},disconnect(e){return fetch(`${i(e)}/jira/connection`,{method:`DELETE`}).then(e=>r(e))},syncNow(e){return fetch(`${i(e)}/jira/sync`,{method:`POST`}).then(e=>r(e))},resume(e){return fetch(`${i(e)}/jira/resume`,{method:`POST`}).then(e=>r(e))},listOutbox(e,t){let n=e?`?state=${e}`:``;return fetch(`${i(t)}/jira/outbox${n}`).then(e=>r(e))},retryOutbox(e,t){return fetch(`${i(t)}/jira/outbox/${e}/retry`,{method:`POST`}).then(e=>r(e))}};export{n,o as t};
@@ -1 +1 @@
1
- import{l as e}from"./useSharedWebSocket-TzKtPRp9.js";function t(e){return e?e.repositories?.length?e.repositories:[{id:`primary-${e.id}`,projectId:e.id,name:e.name,path:e.path,isPrimary:!0,kind:`git`,integrationBranch:null,addedAt:e.added_at}]:[]}function n(t,n){let r=`${e}/api/projects/${encodeURIComponent(t)}`;return n?`${r}/repositories/${encodeURIComponent(n)}`:r}export{n,t};
1
+ import{l as e}from"./useSharedWebSocket-C17TGqT8.js";function t(e){return e?e.repositories?.length?e.repositories:[{id:`primary-${e.id}`,projectId:e.id,name:e.name,path:e.path,isPrimary:!0,kind:`git`,integrationBranch:null,addedAt:e.added_at}]:[]}function n(t,n){let r=`${e}/api/projects/${encodeURIComponent(t)}`;return n?`${r}/repositories/${encodeURIComponent(n)}`:r}export{n,t};
@@ -1 +1 @@
1
- import{h as e}from"./useSharedWebSocket-TzKtPRp9.js";import{t}from"./createLucideIcon-Bjbbp_KS.js";var n=t(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),r={job:`analytics:surfaces.job`,"quick-spec":`analytics:surfaces.quickSpec`,"explore-spec":`analytics:surfaces.exploreSpec`,"ai-edit":`analytics:surfaces.aiEdit`,smash:`analytics:surfaces.smash`,"file-summary":`analytics:surfaces.fileSummary`,loop:`analytics:surfaces.loop`,"chat-sidebar":`analytics:surfaces.chatSidebar`,"spec-launcher":`analytics:surfaces.specLauncher`,proposal:`analytics:surfaces.proposal`,"agent-studio":`analytics:surfaces.agentStudio`,setup:`analytics:surfaces.setup`},i={bg:`bg-muted/40`,text:`text-muted-foreground`,ring:`ring-border/40`,dot:`bg-muted-foreground`},a={job:{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"quick-spec":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},"explore-spec":{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"ai-edit":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},smash:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"file-summary":{bg:`bg-accent-warning/15`,text:`text-accent-warning`,ring:`ring-accent-warning/40`,dot:`bg-accent-warning`},loop:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`},"chat-sidebar":{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"spec-launcher":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},proposal:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"agent-studio":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},setup:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`}};function o(e,t){return new Proxy(e,{get(e,n,r){return typeof n==`string`&&!(n in e)?t(n):Reflect.get(e,n,r)}})}var s=o(Object.defineProperties({},Object.fromEntries(Object.keys(r).map(t=>[t,{get:()=>e.t(r[t]),enumerable:!0}]))),e=>e),c=o(a,()=>i);export{s as n,n as r,c as t};
1
+ import{h as e}from"./useSharedWebSocket-C17TGqT8.js";import{t}from"./createLucideIcon-Bjbbp_KS.js";var n=t(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),r={job:`analytics:surfaces.job`,"quick-spec":`analytics:surfaces.quickSpec`,"explore-spec":`analytics:surfaces.exploreSpec`,"ai-edit":`analytics:surfaces.aiEdit`,smash:`analytics:surfaces.smash`,"file-summary":`analytics:surfaces.fileSummary`,loop:`analytics:surfaces.loop`,"chat-sidebar":`analytics:surfaces.chatSidebar`,"spec-launcher":`analytics:surfaces.specLauncher`,proposal:`analytics:surfaces.proposal`,"agent-studio":`analytics:surfaces.agentStudio`,setup:`analytics:surfaces.setup`},i={bg:`bg-muted/40`,text:`text-muted-foreground`,ring:`ring-border/40`,dot:`bg-muted-foreground`},a={job:{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"quick-spec":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},"explore-spec":{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"ai-edit":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},smash:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"file-summary":{bg:`bg-accent-warning/15`,text:`text-accent-warning`,ring:`ring-accent-warning/40`,dot:`bg-accent-warning`},loop:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`},"chat-sidebar":{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"spec-launcher":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},proposal:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"agent-studio":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},setup:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`}};function o(e,t){return new Proxy(e,{get(e,n,r){return typeof n==`string`&&!(n in e)?t(n):Reflect.get(e,n,r)}})}var s=o(Object.defineProperties({},Object.fromEntries(Object.keys(r).map(t=>[t,{get:()=>e.t(r[t]),enumerable:!0}]))),e=>e),c=o(a,()=>i);export{s as n,n as r,c as t};
@@ -1 +1 @@
1
- var e=`用量`,t=`订阅用量`,n=`此电脑上已登录的账户`,r=`刷新用量`,i=`用量视图`,a=`简洁`,o=`详细`,s=`未检测到 Claude 或 Codex CLI。安装 CLI,登录后刷新。`,c=`正在加载用量…`,l=`无法刷新用量,请重试。`,u=`用量不可用`,d=`已使用 {{value}}%`,f=`更新于{{time}}`,p=`已过期`,m=`{{time}}重置`,h=`已到重置时间,请刷新确认`,g=`重置时间不可用`,_=`已达到上限`,v=`下次刷新{{time}}`,y=`数据详情`,b=`上次成功更新:{{time}}`,x=`来源:{{source}}`,S=`包括 Specrails 之外的活动。每个时间窗口都有独立上限。`,C=`查看详情`,w=`管理提供商`,T=`正在刷新用量…`,E=`用量已更新`,D=`所有提供商`,O=`关闭`,k={session:`5 小时`,weekly:`7 天`,monthly:`30 天`,window:`时间窗口`},A={"cli-missing":`未检测到 CLI`,"signed-out":`请通过 CLI 登录后刷新`,"unsupported-auth":`此登录方式无法获取订阅额度`,"unsupported-cli":`请更新 CLI`,"unsupported-platform":`此环境不支持用量查询`,unavailable:`用量不可用`,"credentials-unreadable":`无法读取本地登录信息`,"permission-denied":`本地登录访问被拒绝`,"collection-failed":`刷新失败,旧数据可能已过期`,"provider-error":`提供商暂时不可用`,"rate-limited":`请求受限,请稍后刷新`,"invalid-response":`无法读取用量响应`,"probe-timeout":`用量查询超时`,"probe-exited":`查询进程已退出`,"account-changed":`账户已更改,请重新刷新`,"cleanup-failed":`无法停止查询`,"usage-unavailable":`用量不可用`},j=`{{time}}后重置`,M={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`用量`,t=`订阅用量`,n=`此电脑上已登录的账户`,r=`刷新用量`,i=`用量视图`,a=`简洁`,o=`详细`,s=`未检测到 Claude 或 Codex CLI。安装 CLI,登录后刷新。`,c=`正在加载用量…`,l=`无法刷新用量,请重试。`,u=`用量不可用`,d=`已使用 {{value}}%`,f=`更新于{{time}}`,p=`已过期`,m=`{{time}}重置`,h=`已到重置时间,请刷新确认`,g=`重置时间不可用`,_=`已达到上限`,v=`下次刷新{{time}}`,y=`数据详情`,b=`上次成功更新:{{time}}`,x=`来源:{{source}}`,S=`包括 Specrails 之外的活动。每个时间窗口都有独立上限。`,C=`查看详情`,w=`管理提供商`,T=`正在刷新用量…`,E=`用量已更新`,D=`所有提供商`,O=`关闭`,k={session:`5 小时`,weekly:`7 天`,monthly:`30 天`,window:`时间窗口`},A={"cli-missing":`未检测到 CLI`,"signed-out":`请通过 CLI 登录后刷新`,"unsupported-auth":`此登录方式无法获取订阅额度`,"unsupported-cli":`请更新 CLI`,"unsupported-platform":`此环境不支持用量查询`,unavailable:`用量不可用`,"credentials-unreadable":`无法读取本地登录信息`,"permission-denied":`本地登录访问被拒绝`,"collection-failed":`刷新失败,旧数据可能已过期`,"provider-error":`提供商暂时不可用`,"rate-limited":`请求受限,请稍后刷新`,"invalid-response":`无法读取用量响应`,"probe-timeout":`用量查询超时`,"probe-exited":`查询进程已退出`,"account-changed":`账户已更改,请重新刷新`,"cleanup-failed":`无法停止查询`,"usage-unavailable":`用量不可用`},j=`{{time}}后重置`,M={enterprise:`Enterprise · 按量付费`,monthly:`本月消费`,amounts:`已消费 {{used}},总额度 {{limit}}`,consumed:`已消费 {{used}}`,unlimited:`无月度限额`,limitUnknown:`月度限额不可用`,resets:`{{time}} 重置`,progress:`Claude 月度消费`},N={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -1 +1 @@
1
- var e=`Uso`,t=`Uso de assinaturas`,n=`Contas conectadas neste computador`,r=`Atualizar uso`,i=`Vista de uso`,a=`Compacta`,o=`Detalhada`,s=`Nenhum CLI Claude ou Codex detectado. Instale um, entre na conta e atualize.`,c=`Carregando uso…`,l=`Não foi possível atualizar. Tente novamente.`,u=`Uso indisponível`,d=`{{value}}% usado`,f=`Atualizado {{time}}`,p=`Desatualizado`,m=`Reinicia {{time}}`,h=`Horário atingido; atualize para confirmar`,g=`Horário de reinício indisponível`,_=`Limite atingido`,v=`Próxima atualização {{time}}`,y=`Detalhes dos dados`,b=`Última atualização bem-sucedida: {{time}}`,x=`Fonte: {{source}}`,S=`Inclui atividade fora do Specrails. Cada janela tem seu próprio limite.`,C=`Ver detalhes`,w=`Gerenciar provedores`,T=`Atualizando uso…`,E=`Uso atualizado`,D=`Todos os provedores`,O=`Fechar`,k={session:`5 horas`,weekly:`7 dias`,monthly:`30 dias`,window:`Janela`},A={"cli-missing":`CLI não detectado`,"signed-out":`Entre com o CLI e atualize`,"unsupported-auth":`Cota indisponível para este login`,"unsupported-cli":`Atualize o CLI`,"unsupported-platform":`Uso não suportado neste ambiente`,unavailable:`Uso indisponível`,"credentials-unreadable":`Não foi possível ler o login local`,"permission-denied":`Permissão ao login negada`,"collection-failed":`Falha ao atualizar; dados possivelmente antigos`,"provider-error":`Provedor temporariamente indisponível`,"rate-limited":`Consulta limitada; aguarde`,"invalid-response":`Resposta ilegível`,"probe-timeout":`Tempo da consulta esgotado`,"probe-exited":`Processo de consulta encerrado`,"account-changed":`Conta alterada; atualize novamente`,"cleanup-failed":`Não foi possível encerrar a consulta`,"usage-unavailable":`Uso indisponível`},j=`Reinicia em {{time}}`,M={shortTitle:`Uso`,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`Uso`,t=`Uso de assinaturas`,n=`Contas conectadas neste computador`,r=`Atualizar uso`,i=`Vista de uso`,a=`Compacta`,o=`Detalhada`,s=`Nenhum CLI Claude ou Codex detectado. Instale um, entre na conta e atualize.`,c=`Carregando uso…`,l=`Não foi possível atualizar. Tente novamente.`,u=`Uso indisponível`,d=`{{value}}% usado`,f=`Atualizado {{time}}`,p=`Desatualizado`,m=`Reinicia {{time}}`,h=`Horário atingido; atualize para confirmar`,g=`Horário de reinício indisponível`,_=`Limite atingido`,v=`Próxima atualização {{time}}`,y=`Detalhes dos dados`,b=`Última atualização bem-sucedida: {{time}}`,x=`Fonte: {{source}}`,S=`Inclui atividade fora do Specrails. Cada janela tem seu próprio limite.`,C=`Ver detalhes`,w=`Gerenciar provedores`,T=`Atualizando uso…`,E=`Uso atualizado`,D=`Todos os provedores`,O=`Fechar`,k={session:`5 horas`,weekly:`7 dias`,monthly:`30 dias`,window:`Janela`},A={"cli-missing":`CLI não detectado`,"signed-out":`Entre com o CLI e atualize`,"unsupported-auth":`Cota indisponível para este login`,"unsupported-cli":`Atualize o CLI`,"unsupported-platform":`Uso não suportado neste ambiente`,unavailable:`Uso indisponível`,"credentials-unreadable":`Não foi possível ler o login local`,"permission-denied":`Permissão ao login negada`,"collection-failed":`Falha ao atualizar; dados possivelmente antigos`,"provider-error":`Provedor temporariamente indisponível`,"rate-limited":`Consulta limitada; aguarde`,"invalid-response":`Resposta ilegível`,"probe-timeout":`Tempo da consulta esgotado`,"probe-exited":`Processo de consulta encerrado`,"account-changed":`Conta alterada; atualize novamente`,"cleanup-failed":`Não foi possível encerrar a consulta`,"usage-unavailable":`Uso indisponível`},j=`Reinicia em {{time}}`,M={enterprise:`Enterprise · Sob demanda`,monthly:`Consumo deste mês`,amounts:`{{used}} de {{limit}} consumidos`,consumed:`{{used}} consumidos`,unlimited:`Sem limite mensal`,limitUnknown:`Limite mensal indisponível`,resets:`Reinicia em {{time}}`,progress:`Consumo mensal do Claude`},N={shortTitle:`Uso`,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -1 +1 @@
1
- var e=`Utilisation`,t=`Utilisation des abonnements`,n=`Comptes connectés sur cet ordinateur`,r=`Actualiser`,i=`Vue utilisation`,a=`Compacte`,o=`Détaillée`,s=`Aucun CLI Claude ou Codex détecté. Installez-en un, connectez-vous puis actualisez.`,c=`Chargement…`,l=`Actualisation impossible. Réessayez.`,u=`Utilisation indisponible`,d=`{{value}}% utilisé`,f=`Actualisé {{time}}`,p=`Obsolète`,m=`Réinitialisation {{time}}`,h=`Échéance atteinte ; actualisez pour confirmer`,g=`Échéance indisponible`,_=`Limite atteinte`,v=`Prochaine actualisation {{time}}`,y=`Détails des données`,b=`Dernière actualisation réussie : {{time}}`,x=`Source : {{source}}`,S=`Inclut l’activité hors de Specrails. Chaque période a sa propre limite.`,C=`Voir les détails`,w=`Gérer les fournisseurs`,T=`Actualisation…`,E=`Utilisation actualisée`,D=`Tous les fournisseurs`,O=`Fermer`,k={session:`5 heures`,weekly:`7 jours`,monthly:`30 jours`,window:`Période`},A={"cli-missing":`CLI non détecté`,"signed-out":`Connectez-vous avec le CLI, puis actualisez`,"unsupported-auth":`Quota indisponible pour cette connexion`,"unsupported-cli":`Mettez le CLI à jour`,"unsupported-platform":`Utilisation non prise en charge ici`,unavailable:`Utilisation indisponible`,"credentials-unreadable":`Connexion locale illisible`,"permission-denied":`Accès à la connexion refusé`,"collection-failed":`Échec de l’actualisation ; données peut-être obsolètes`,"provider-error":`Fournisseur temporairement indisponible`,"rate-limited":`Requête limitée ; patientez`,"invalid-response":`Réponse illisible`,"probe-timeout":`Délai de requête dépassé`,"probe-exited":`Processus terminé`,"account-changed":`Compte changé ; actualisez`,"cleanup-failed":`Arrêt de la requête impossible`,"usage-unavailable":`Utilisation indisponible`},j=`Réinitialisation dans {{time}}`,M={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`Utilisation`,t=`Utilisation des abonnements`,n=`Comptes connectés sur cet ordinateur`,r=`Actualiser`,i=`Vue utilisation`,a=`Compacte`,o=`Détaillée`,s=`Aucun CLI Claude ou Codex détecté. Installez-en un, connectez-vous puis actualisez.`,c=`Chargement…`,l=`Actualisation impossible. Réessayez.`,u=`Utilisation indisponible`,d=`{{value}}% utilisé`,f=`Actualisé {{time}}`,p=`Obsolète`,m=`Réinitialisation {{time}}`,h=`Échéance atteinte ; actualisez pour confirmer`,g=`Échéance indisponible`,_=`Limite atteinte`,v=`Prochaine actualisation {{time}}`,y=`Détails des données`,b=`Dernière actualisation réussie : {{time}}`,x=`Source : {{source}}`,S=`Inclut l’activité hors de Specrails. Chaque période a sa propre limite.`,C=`Voir les détails`,w=`Gérer les fournisseurs`,T=`Actualisation…`,E=`Utilisation actualisée`,D=`Tous les fournisseurs`,O=`Fermer`,k={session:`5 heures`,weekly:`7 jours`,monthly:`30 jours`,window:`Période`},A={"cli-missing":`CLI non détecté`,"signed-out":`Connectez-vous avec le CLI, puis actualisez`,"unsupported-auth":`Quota indisponible pour cette connexion`,"unsupported-cli":`Mettez le CLI à jour`,"unsupported-platform":`Utilisation non prise en charge ici`,unavailable:`Utilisation indisponible`,"credentials-unreadable":`Connexion locale illisible`,"permission-denied":`Accès à la connexion refusé`,"collection-failed":`Échec de l’actualisation ; données peut-être obsolètes`,"provider-error":`Fournisseur temporairement indisponible`,"rate-limited":`Requête limitée ; patientez`,"invalid-response":`Réponse illisible`,"probe-timeout":`Délai de requête dépassé`,"probe-exited":`Processus terminé`,"account-changed":`Compte changé ; actualisez`,"cleanup-failed":`Arrêt de la requête impossible`,"usage-unavailable":`Utilisation indisponible`},j=`Réinitialisation dans {{time}}`,M={enterprise:`Enterprise · À la demande`,monthly:`Dépenses du mois`,amounts:`{{used}} dépensés sur {{limit}}`,consumed:`{{used}} dépensés`,unlimited:`Sans limite mensuelle`,limitUnknown:`Limite mensuelle indisponible`,resets:`Réinitialisation le {{time}}`,progress:`Dépenses mensuelles Claude`},N={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -1 +1 @@
1
- var e=`使用量`,t=`サブスクリプション使用量`,n=`このコンピューターでログイン中のアカウント`,r=`使用量を更新`,i=`使用量の表示`,a=`コンパクト`,o=`詳細`,s=`Claude または Codex CLI が見つかりません。インストールしてログイン後に更新してください。`,c=`使用量を読み込み中…`,l=`更新できませんでした。再試行してください。`,u=`使用量を取得できません`,d=`{{value}}% 使用済み`,f=`{{time}}に更新`,p=`古いデータ`,m=`{{time}}にリセット`,h=`リセット時刻を過ぎました。更新して確認してください`,g=`リセット時刻を取得できません`,_=`上限に達しました`,v=`次の更新:{{time}}`,y=`データの詳細`,b=`最終更新:{{time}}`,x=`取得元:{{source}}`,S=`Specrails 外の活動も含みます。各期間に独立した上限があります。`,C=`詳細を見る`,w=`プロバイダーを管理`,T=`使用量を更新中…`,E=`使用量を更新しました`,D=`全プロバイダー`,O=`閉じる`,k={session:`5時間`,weekly:`7日`,monthly:`30日`,window:`期間`},A={"cli-missing":`CLI が見つかりません`,"signed-out":`CLI でログインしてから更新してください`,"unsupported-auth":`このログインでは利用枠を取得できません`,"unsupported-cli":`CLI を更新してください`,"unsupported-platform":`この環境では対応していません`,unavailable:`使用量を取得できません`,"credentials-unreadable":`ローカルのログインを読み取れません`,"permission-denied":`ログインへのアクセスが拒否されました`,"collection-failed":`更新に失敗しました。古いデータの可能性があります`,"provider-error":`プロバイダーが一時的に利用できません`,"rate-limited":`リクエスト制限中です。お待ちください`,"invalid-response":`応答を読み取れません`,"probe-timeout":`クエリがタイムアウトしました`,"probe-exited":`クエリプロセスが終了しました`,"account-changed":`アカウントが変わりました。再更新してください`,"cleanup-failed":`クエリを停止できません`,"usage-unavailable":`使用量を取得できません`},j=`{{time}}後にリセット`,M={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`使用量`,t=`サブスクリプション使用量`,n=`このコンピューターでログイン中のアカウント`,r=`使用量を更新`,i=`使用量の表示`,a=`コンパクト`,o=`詳細`,s=`Claude または Codex CLI が見つかりません。インストールしてログイン後に更新してください。`,c=`使用量を読み込み中…`,l=`更新できませんでした。再試行してください。`,u=`使用量を取得できません`,d=`{{value}}% 使用済み`,f=`{{time}}に更新`,p=`古いデータ`,m=`{{time}}にリセット`,h=`リセット時刻を過ぎました。更新して確認してください`,g=`リセット時刻を取得できません`,_=`上限に達しました`,v=`次の更新:{{time}}`,y=`データの詳細`,b=`最終更新:{{time}}`,x=`取得元:{{source}}`,S=`Specrails 外の活動も含みます。各期間に独立した上限があります。`,C=`詳細を見る`,w=`プロバイダーを管理`,T=`使用量を更新中…`,E=`使用量を更新しました`,D=`全プロバイダー`,O=`閉じる`,k={session:`5時間`,weekly:`7日`,monthly:`30日`,window:`期間`},A={"cli-missing":`CLI が見つかりません`,"signed-out":`CLI でログインしてから更新してください`,"unsupported-auth":`このログインでは利用枠を取得できません`,"unsupported-cli":`CLI を更新してください`,"unsupported-platform":`この環境では対応していません`,unavailable:`使用量を取得できません`,"credentials-unreadable":`ローカルのログインを読み取れません`,"permission-denied":`ログインへのアクセスが拒否されました`,"collection-failed":`更新に失敗しました。古いデータの可能性があります`,"provider-error":`プロバイダーが一時的に利用できません`,"rate-limited":`リクエスト制限中です。お待ちください`,"invalid-response":`応答を読み取れません`,"probe-timeout":`クエリがタイムアウトしました`,"probe-exited":`クエリプロセスが終了しました`,"account-changed":`アカウントが変わりました。再更新してください`,"cleanup-failed":`クエリを停止できません`,"usage-unavailable":`使用量を取得できません`},j=`{{time}}後にリセット`,M={enterprise:`Enterprise · 従量課金`,monthly:`今月の利用額`,amounts:`{{limit}} のうち {{used}} を使用`,consumed:`{{used}} を使用`,unlimited:`月額上限なし`,limitUnknown:`月額上限を取得できません`,resets:`{{time}} にリセット`,progress:`Claudeの月間利用額`},N={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-CNC7AqOf.js";var t=e({accountWide:()=>w,back:()=>k,close:()=>A,compact:()=>s,dataDetails:()=>x,default:()=>F,detailed:()=>c,details:()=>T,empty:()=>l,issues:()=>M,limitReached:()=>y,loadFailed:()=>d,loading:()=>u,manage:()=>E,observed:()=>S,ready:()=>O,refresh:()=>a,refreshing:()=>D,resetPassed:()=>_,resetUnknown:()=>v,resets:()=>g,resetsIn:()=>N,retry:()=>b,shortTitle:()=>n,source:()=>C,spend:()=>P,stale:()=>h,subtitle:()=>i,title:()=>r,unknown:()=>f,updated:()=>m,used:()=>p,view:()=>o,windows:()=>j}),n=`Usage`,r=`Subscription usage`,i=`Accounts signed in on this computer`,a=`Refresh usage`,o=`Usage view`,s=`Compact`,c=`Detailed`,l=`No Claude or Codex CLI detected. Install a supported CLI, sign in, then refresh.`,u=`Loading usage…`,d=`Could not refresh usage. Try again.`,f=`Usage unavailable`,p=`{{value}}% used`,m=`Updated {{time}}`,h=`Out of date`,g=`Resets {{time}}`,_=`Reset reached; refresh to confirm`,v=`Reset time unavailable`,y=`Limit reached`,b=`Next refresh {{time}}`,x=`Data details`,S=`Last successful update: {{time}}`,C=`Source: {{source}}`,w=`Usage includes activity outside Specrails. Each window has its own limit.`,T=`View details`,E=`Manage providers`,D=`Refreshing usage…`,O=`Usage updated`,k=`All providers`,A=`Close`,j={session:`5 hours`,weekly:`7 days`,monthly:`30 days`,window:`Window`},M={"cli-missing":`CLI not detected`,"signed-out":`Sign in with the CLI, then refresh`,"unsupported-auth":`Subscription usage is unavailable for this login`,"unsupported-cli":`Update the CLI to read usage`,"unsupported-platform":`Usage is unsupported in this environment`,unavailable:`Usage unavailable`,"credentials-unreadable":`Could not read local sign-in`,"permission-denied":`Local sign-in permission was denied`,"collection-failed":`Could not refresh; previous data may be out of date`,"provider-error":`Provider is temporarily unavailable`,"rate-limited":`Usage request was throttled`,"invalid-response":`Usage response could not be read`,"probe-timeout":`Usage query timed out`,"probe-exited":`Usage process exited`,"account-changed":`Account changed; refresh again`,"cleanup-failed":`Could not stop the usage query`,"usage-unavailable":`Usage unavailable`},N=`Resets in {{time}}`,P={enterprise:`Enterprise · On demand`,monthly:`Monthly spend`,amounts:`{{used}} of {{limit}} spent`,consumed:`{{used}} spent`,unlimited:`No monthly limit`,limitUnknown:`Monthly limit unavailable`,resets:`Resets {{time}}`,progress:`Claude monthly spend`},F={shortTitle:n,title:r,subtitle:i,refresh:a,view:o,compact:s,detailed:c,empty:l,loading:u,loadFailed:d,unknown:f,used:p,updated:m,stale:h,resets:g,resetPassed:_,resetUnknown:v,limitReached:y,retry:b,dataDetails:x,observed:S,source:C,accountWide:w,details:T,manage:E,refreshing:D,ready:O,back:k,close:A,windows:j,issues:M,resetsIn:N,spend:P};export{t};
@@ -1 +1 @@
1
- var e=`Uso`,t=`Uso de suscripciones`,n=`Cuentas iniciadas en este ordenador`,r=`Actualizar uso`,i=`Vista de uso`,a=`Compacto`,o=`Detallado`,s=`No se detecta el CLI de Claude ni de Codex. Instala uno, inicia sesión y actualiza.`,c=`Cargando uso…`,l=`No se pudo actualizar el uso. Inténtalo de nuevo.`,u=`Uso no disponible`,d=`{{value}}% usado`,f=`Actualizado {{time}}`,p=`Desactualizado`,m=`Se reinicia {{time}}`,h=`Reinicio alcanzado; actualiza para confirmar`,g=`Hora de reinicio no disponible`,_=`Límite alcanzado`,v=`Próxima actualización {{time}}`,y=`Detalles del dato`,b=`Última actualización correcta: {{time}}`,x=`Fuente: {{source}}`,S=`El uso incluye actividad fuera de Specrails. Cada ventana tiene su propio límite.`,C=`Ver detalles`,w=`Gestionar proveedores`,T=`Actualizando uso…`,E=`Uso actualizado`,D=`Todos los proveedores`,O=`Cerrar`,k={session:`5 horas`,weekly:`7 días`,monthly:`30 días`,window:`Ventana`},A={"cli-missing":`CLI no detectado`,"signed-out":`Inicia sesión con el CLI y actualiza`,"unsupported-auth":`La cuota no está disponible para este inicio de sesión`,"unsupported-cli":`Actualiza el CLI para consultar el uso`,"unsupported-platform":`Uso no compatible con este entorno`,unavailable:`Uso no disponible`,"credentials-unreadable":`No se pudo leer el inicio de sesión local`,"permission-denied":`Permiso de acceso al inicio de sesión denegado`,"collection-failed":`No se pudo actualizar; el dato anterior puede estar desactualizado`,"provider-error":`Proveedor temporalmente no disponible`,"rate-limited":`Consulta de uso limitada; espera antes de actualizar`,"invalid-response":`No se pudo leer la respuesta de uso`,"probe-timeout":`La consulta de uso agotó el tiempo`,"probe-exited":`El proceso de consulta terminó`,"account-changed":`La cuenta cambió; vuelve a actualizar`,"cleanup-failed":`No se pudo detener la consulta`,"usage-unavailable":`Uso no disponible`},j=`Se reinicia en {{time}}`,M={shortTitle:`Uso`,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`Uso`,t=`Uso de suscripciones`,n=`Cuentas iniciadas en este ordenador`,r=`Actualizar uso`,i=`Vista de uso`,a=`Compacto`,o=`Detallado`,s=`No se detecta el CLI de Claude ni de Codex. Instala uno, inicia sesión y actualiza.`,c=`Cargando uso…`,l=`No se pudo actualizar el uso. Inténtalo de nuevo.`,u=`Uso no disponible`,d=`{{value}}% usado`,f=`Actualizado {{time}}`,p=`Desactualizado`,m=`Se reinicia {{time}}`,h=`Reinicio alcanzado; actualiza para confirmar`,g=`Hora de reinicio no disponible`,_=`Límite alcanzado`,v=`Próxima actualización {{time}}`,y=`Detalles del dato`,b=`Última actualización correcta: {{time}}`,x=`Fuente: {{source}}`,S=`El uso incluye actividad fuera de Specrails. Cada ventana tiene su propio límite.`,C=`Ver detalles`,w=`Gestionar proveedores`,T=`Actualizando uso…`,E=`Uso actualizado`,D=`Todos los proveedores`,O=`Cerrar`,k={session:`5 horas`,weekly:`7 días`,monthly:`30 días`,window:`Ventana`},A={"cli-missing":`CLI no detectado`,"signed-out":`Inicia sesión con el CLI y actualiza`,"unsupported-auth":`La cuota no está disponible para este inicio de sesión`,"unsupported-cli":`Actualiza el CLI para consultar el uso`,"unsupported-platform":`Uso no compatible con este entorno`,unavailable:`Uso no disponible`,"credentials-unreadable":`No se pudo leer el inicio de sesión local`,"permission-denied":`Permiso de acceso al inicio de sesión denegado`,"collection-failed":`No se pudo actualizar; el dato anterior puede estar desactualizado`,"provider-error":`Proveedor temporalmente no disponible`,"rate-limited":`Consulta de uso limitada; espera antes de actualizar`,"invalid-response":`No se pudo leer la respuesta de uso`,"probe-timeout":`La consulta de uso agotó el tiempo`,"probe-exited":`El proceso de consulta terminó`,"account-changed":`La cuenta cambió; vuelve a actualizar`,"cleanup-failed":`No se pudo detener la consulta`,"usage-unavailable":`Uso no disponible`},j=`Se reinicia en {{time}}`,M={enterprise:`Enterprise · Bajo demanda`,monthly:`Consumo este mes`,amounts:`{{used}} de {{limit}} consumidos`,consumed:`{{used}} consumidos`,unlimited:`Sin límite mensual`,limitUnknown:`Límite mensual no disponible`,resets:`Se reinicia el {{time}}`,progress:`Consumo mensual de Claude`},N={shortTitle:`Uso`,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -1 +1 @@
1
- var e=`Utilizzo`,t=`Utilizzo abbonamenti`,n=`Account collegati su questo computer`,r=`Aggiorna utilizzo`,i=`Vista utilizzo`,a=`Compatta`,o=`Dettagliata`,s=`Nessun CLI Claude o Codex rilevato. Installane uno, accedi e aggiorna.`,c=`Caricamento…`,l=`Aggiornamento non riuscito. Riprova.`,u=`Utilizzo non disponibile`,d=`{{value}}% utilizzato`,f=`Aggiornato {{time}}`,p=`Non aggiornato`,m=`Si reimposta {{time}}`,h=`Scadenza raggiunta; aggiorna per confermare`,g=`Ora di reimpostazione non disponibile`,_=`Limite raggiunto`,v=`Prossimo aggiornamento {{time}}`,y=`Dettagli dati`,b=`Ultimo aggiornamento riuscito: {{time}}`,x=`Fonte: {{source}}`,S=`Include attività fuori da Specrails. Ogni finestra ha un limite proprio.`,C=`Vedi dettagli`,w=`Gestisci fornitori`,T=`Aggiornamento…`,E=`Utilizzo aggiornato`,D=`Tutti i fornitori`,O=`Chiudi`,k={session:`5 ore`,weekly:`7 giorni`,monthly:`30 giorni`,window:`Finestra`},A={"cli-missing":`CLI non rilevato`,"signed-out":`Accedi con il CLI e aggiorna`,"unsupported-auth":`Quota non disponibile per questo accesso`,"unsupported-cli":`Aggiorna il CLI`,"unsupported-platform":`Utilizzo non supportato in questo ambiente`,unavailable:`Utilizzo non disponibile`,"credentials-unreadable":`Accesso locale non leggibile`,"permission-denied":`Permesso di accesso negato`,"collection-failed":`Aggiornamento fallito; dati forse obsoleti`,"provider-error":`Fornitore temporaneamente non disponibile`,"rate-limited":`Richiesta limitata; attendi`,"invalid-response":`Risposta non leggibile`,"probe-timeout":`Tempo della richiesta scaduto`,"probe-exited":`Processo terminato`,"account-changed":`Account cambiato; aggiorna ancora`,"cleanup-failed":`Impossibile arrestare la richiesta`,"usage-unavailable":`Utilizzo non disponibile`},j=`Si reimposta tra {{time}}`,M={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`Utilizzo`,t=`Utilizzo abbonamenti`,n=`Account collegati su questo computer`,r=`Aggiorna utilizzo`,i=`Vista utilizzo`,a=`Compatta`,o=`Dettagliata`,s=`Nessun CLI Claude o Codex rilevato. Installane uno, accedi e aggiorna.`,c=`Caricamento…`,l=`Aggiornamento non riuscito. Riprova.`,u=`Utilizzo non disponibile`,d=`{{value}}% utilizzato`,f=`Aggiornato {{time}}`,p=`Non aggiornato`,m=`Si reimposta {{time}}`,h=`Scadenza raggiunta; aggiorna per confermare`,g=`Ora di reimpostazione non disponibile`,_=`Limite raggiunto`,v=`Prossimo aggiornamento {{time}}`,y=`Dettagli dati`,b=`Ultimo aggiornamento riuscito: {{time}}`,x=`Fonte: {{source}}`,S=`Include attività fuori da Specrails. Ogni finestra ha un limite proprio.`,C=`Vedi dettagli`,w=`Gestisci fornitori`,T=`Aggiornamento…`,E=`Utilizzo aggiornato`,D=`Tutti i fornitori`,O=`Chiudi`,k={session:`5 ore`,weekly:`7 giorni`,monthly:`30 giorni`,window:`Finestra`},A={"cli-missing":`CLI non rilevato`,"signed-out":`Accedi con il CLI e aggiorna`,"unsupported-auth":`Quota non disponibile per questo accesso`,"unsupported-cli":`Aggiorna il CLI`,"unsupported-platform":`Utilizzo non supportato in questo ambiente`,unavailable:`Utilizzo non disponibile`,"credentials-unreadable":`Accesso locale non leggibile`,"permission-denied":`Permesso di accesso negato`,"collection-failed":`Aggiornamento fallito; dati forse obsoleti`,"provider-error":`Fornitore temporaneamente non disponibile`,"rate-limited":`Richiesta limitata; attendi`,"invalid-response":`Risposta non leggibile`,"probe-timeout":`Tempo della richiesta scaduto`,"probe-exited":`Processo terminato`,"account-changed":`Account cambiato; aggiorna ancora`,"cleanup-failed":`Impossibile arrestare la richiesta`,"usage-unavailable":`Utilizzo non disponibile`},j=`Si reimposta tra {{time}}`,M={enterprise:`Enterprise · A consumo`,monthly:`Spesa del mese`,amounts:`{{used}} spesi su {{limit}}`,consumed:`{{used}} spesi`,unlimited:`Nessun limite mensile`,limitUnknown:`Limite mensile non disponibile`,resets:`Si reimposta il {{time}}`,progress:`Spesa mensile di Claude`},N={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -1 +1 @@
1
- var e=`Nutzung`,t=`Abonnementnutzung`,n=`Auf diesem Computer angemeldete Konten`,r=`Nutzung aktualisieren`,i=`Nutzungsansicht`,a=`Kompakt`,o=`Detailliert`,s=`Keine Claude- oder Codex-CLI erkannt. CLI installieren, anmelden und aktualisieren.`,c=`Nutzung wird geladen…`,l=`Aktualisierung fehlgeschlagen. Erneut versuchen.`,u=`Nutzung nicht verfügbar`,d=`{{value}}% genutzt`,f=`Aktualisiert {{time}}`,p=`Veraltet`,m=`Zurücksetzung {{time}}`,h=`Zeitpunkt erreicht; zur Bestätigung aktualisieren`,g=`Zurücksetzungszeit nicht verfügbar`,_=`Limit erreicht`,v=`Nächste Aktualisierung {{time}}`,y=`Datendetails`,b=`Letzte erfolgreiche Aktualisierung: {{time}}`,x=`Quelle: {{source}}`,S=`Enthält Aktivität außerhalb von Specrails. Jedes Zeitfenster hat ein eigenes Limit.`,C=`Details anzeigen`,w=`Anbieter verwalten`,T=`Nutzung wird aktualisiert…`,E=`Nutzung aktualisiert`,D=`Alle Anbieter`,O=`Schließen`,k={session:`5 Stunden`,weekly:`7 Tage`,monthly:`30 Tage`,window:`Zeitfenster`},A={"cli-missing":`CLI nicht erkannt`,"signed-out":`Mit CLI anmelden und aktualisieren`,"unsupported-auth":`Keine Abonnementquote für diese Anmeldung`,"unsupported-cli":`CLI aktualisieren`,"unsupported-platform":`Nutzung hier nicht unterstützt`,unavailable:`Nutzung nicht verfügbar`,"credentials-unreadable":`Lokale Anmeldung konnte nicht gelesen werden`,"permission-denied":`Zugriff auf Anmeldung verweigert`,"collection-failed":`Aktualisierung fehlgeschlagen; Daten eventuell veraltet`,"provider-error":`Anbieter vorübergehend nicht verfügbar`,"rate-limited":`Abfrage gedrosselt; bitte warten`,"invalid-response":`Antwort nicht lesbar`,"probe-timeout":`Zeitüberschreitung`,"probe-exited":`Abfrageprozess beendet`,"account-changed":`Konto geändert; erneut aktualisieren`,"cleanup-failed":`Abfrage konnte nicht beendet werden`,"usage-unavailable":`Nutzung nicht verfügbar`},j=`Zurückgesetzt in {{time}}`,M={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,M as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
1
+ var e=`Nutzung`,t=`Abonnementnutzung`,n=`Auf diesem Computer angemeldete Konten`,r=`Nutzung aktualisieren`,i=`Nutzungsansicht`,a=`Kompakt`,o=`Detailliert`,s=`Keine Claude- oder Codex-CLI erkannt. CLI installieren, anmelden und aktualisieren.`,c=`Nutzung wird geladen…`,l=`Aktualisierung fehlgeschlagen. Erneut versuchen.`,u=`Nutzung nicht verfügbar`,d=`{{value}}% genutzt`,f=`Aktualisiert {{time}}`,p=`Veraltet`,m=`Zurücksetzung {{time}}`,h=`Zeitpunkt erreicht; zur Bestätigung aktualisieren`,g=`Zurücksetzungszeit nicht verfügbar`,_=`Limit erreicht`,v=`Nächste Aktualisierung {{time}}`,y=`Datendetails`,b=`Letzte erfolgreiche Aktualisierung: {{time}}`,x=`Quelle: {{source}}`,S=`Enthält Aktivität außerhalb von Specrails. Jedes Zeitfenster hat ein eigenes Limit.`,C=`Details anzeigen`,w=`Anbieter verwalten`,T=`Nutzung wird aktualisiert…`,E=`Nutzung aktualisiert`,D=`Alle Anbieter`,O=`Schließen`,k={session:`5 Stunden`,weekly:`7 Tage`,monthly:`30 Tage`,window:`Zeitfenster`},A={"cli-missing":`CLI nicht erkannt`,"signed-out":`Mit CLI anmelden und aktualisieren`,"unsupported-auth":`Keine Abonnementquote für diese Anmeldung`,"unsupported-cli":`CLI aktualisieren`,"unsupported-platform":`Nutzung hier nicht unterstützt`,unavailable:`Nutzung nicht verfügbar`,"credentials-unreadable":`Lokale Anmeldung konnte nicht gelesen werden`,"permission-denied":`Zugriff auf Anmeldung verweigert`,"collection-failed":`Aktualisierung fehlgeschlagen; Daten eventuell veraltet`,"provider-error":`Anbieter vorübergehend nicht verfügbar`,"rate-limited":`Abfrage gedrosselt; bitte warten`,"invalid-response":`Antwort nicht lesbar`,"probe-timeout":`Zeitüberschreitung`,"probe-exited":`Abfrageprozess beendet`,"account-changed":`Konto geändert; erneut aktualisieren`,"cleanup-failed":`Abfrage konnte nicht beendet werden`,"usage-unavailable":`Nutzung nicht verfügbar`},j=`Zurückgesetzt in {{time}}`,M={enterprise:`Enterprise · Nach Verbrauch`,monthly:`Monatlicher Verbrauch`,amounts:`{{used}} von {{limit}} verbraucht`,consumed:`{{used}} verbraucht`,unlimited:`Kein Monatslimit`,limitUnknown:`Monatslimit nicht verfügbar`,resets:`Zurücksetzung am {{time}}`,progress:`Monatlicher Claude-Verbrauch`},N={shortTitle:e,title:t,subtitle:n,refresh:r,view:i,compact:a,detailed:o,empty:s,loading:c,loadFailed:l,unknown:u,used:d,updated:f,stale:p,resets:m,resetPassed:h,resetUnknown:g,limitReached:_,retry:v,dataDetails:y,observed:b,source:x,accountWide:S,details:C,manage:w,refreshing:T,ready:E,back:D,close:O,windows:k,issues:A,resetsIn:j,spend:M};export{S as accountWide,D as back,O as close,a as compact,y as dataDetails,N as default,o as detailed,C as details,s as empty,A as issues,_ as limitReached,l as loadFailed,c as loading,w as manage,b as observed,E as ready,r as refresh,T as refreshing,h as resetPassed,g as resetUnknown,m as resets,j as resetsIn,v as retry,e as shortTitle,x as source,M as spend,p as stale,n as subtitle,t as title,u as unknown,f as updated,d as used,i as view,k as windows};
@@ -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-TzKtPRp9.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,i)=>{try{let a={path:e};n&&n.length>0&&(a.providers=n),t&&(a.name=t),r?.length&&(a.repositories=r),i?.length&&(a.workspacePaths=i);let o=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a)});if(!o.ok){let e=await o.json();throw Error(e.error??`HTTP ${o.status}`)}let s=await o.json();return g.current.add(s.project.id),v.current++,c(e=>e.find(e=>e.id===s.project.id)?e:[...e,s.project]),S(s.project.id),s}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-C17TGqT8.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,i)=>{try{let a={path:e};n&&n.length>0&&(a.providers=n),t&&(a.name=t),r?.length&&(a.repositories=r),i?.length&&(a.workspacePaths=i);let o=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a)});if(!o.ok){let e=await o.json();throw Error(e.error??`HTTP ${o.status}`)}let s=await o.json();return g.current.add(s.project.id),v.current++,c(e=>e.find(e=>e.id===s.project.id)?e:[...e,s.project]),S(s.project.id),s}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 +1 @@
1
- import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t}from"./jsx-runtime-zu2_FqZY.js";import{n}from"./createLucideIcon-Bjbbp_KS.js";import{n as r}from"./project-repositories-DXhb9FP4.js";function i(e){if(!Number.isFinite(e)||e<0)return`0s`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;return n<60?`${n}m ${r}s`:`${Math.floor(n/60)}h ${n%60}m`}var a=e(t(),1);function o(e,t={}){let{jobId:i,railIndex:o,enabled:s=!0}=t,{t:c}=n(`agentRuntime`),[l,u]=(0,a.useState)([]),[d,f]=(0,a.useState)(``),[p,m]=(0,a.useState)(null),[h,g]=(0,a.useState)(0),[_,v]=(0,a.useState)({}),y=(0,a.useRef)(!0),b=s&&!!e,x=e?`${r(e)}/agent-runtime/runs`:``,S=(0,a.useRef)(x);S.current=x;let C=(0,a.useRef)(new Set);(0,a.useEffect)(()=>{m(null),v({})},[x]);let w=i?`${x}/${encodeURIComponent(i)}`:o===void 0?x:`${x}?railIndex=${o}`;(0,a.useEffect)(()=>{if(y.current=!0,!b)return u([]),f(``),()=>{y.current=!1};let e=!1,t;async function n(){try{let t=await fetch(w,{cache:`no-store`});if(!t.ok)throw Error();let n=await t.json();if(!Array.isArray(n.runs))throw Error();e||(u(n.runs),f(``))}catch{e||f(c(`runs.loadFailed`))}finally{e||(t=setTimeout(()=>void n(),1e4))}}return n(),()=>{e=!0,y.current=!1,clearTimeout(t)}},[b,w,h,c]);let T=(0,a.useCallback)(async(t,n,i)=>{let a=`${x}:${t.runId}`;if(!e||C.current.has(a))return;C.current.add(a);let o=()=>y.current&&S.current===x;m(t.runId),f(``);try{let a=n===`approve`?{approve:[t.pendingApproval.stepId]}:n===`recover`?{recover:i??t.recoverableSteps}:n===`answer`?{answer:(_[t.runId]??``).trim(),...t.engineVersion===2&&t.pendingQuestion?{interruptId:t.pendingQuestion.stepId}:{}}:{},s=n===`cancel`?`cancel`:n===`settle`?`settle`:n===`dismiss`?`dismiss`:`resume`,l=t.engineVersion===2&&(s===`resume`||s===`settle`),u=l||t.engineVersion===2&&s===`cancel`?`${r(e)}/loop-runs`:x,d=await fetch(`${u}/${encodeURIComponent(t.runId)}/${l?`resume`:s}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a)});if(!d.ok){let e=await d.json();throw Error(e.message??e.detail??c(`runs.actionFailed`))}o()&&(n===`answer`&&v(e=>({...e,[t.runId]:``})),g(e=>e+1))}catch(e){o()&&f(e instanceof Error?e.message:c(`runs.actionFailed`))}finally{C.current.delete(a),o()&&m(null)}},[_,x,e,c]);return{runs:l,error:d,busy:p,answers:_,setAnswer:(0,a.useCallback)((e,t)=>{v(n=>({...n,[e]:t}))},[]),act:T,refresh:(0,a.useCallback)(()=>g(e=>e+1),[])}}export{i as n,o as t};
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t}from"./jsx-runtime-zu2_FqZY.js";import{n}from"./createLucideIcon-Bjbbp_KS.js";import{n as r}from"./project-repositories-BkBD3rxx.js";function i(e){if(!Number.isFinite(e)||e<0)return`0s`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;return n<60?`${n}m ${r}s`:`${Math.floor(n/60)}h ${n%60}m`}var a=e(t(),1);function o(e,t={}){let{jobId:i,railIndex:o,enabled:s=!0}=t,{t:c}=n(`agentRuntime`),[l,u]=(0,a.useState)([]),[d,f]=(0,a.useState)(``),[p,m]=(0,a.useState)(null),[h,g]=(0,a.useState)(0),[_,v]=(0,a.useState)({}),y=(0,a.useRef)(!0),b=s&&!!e,x=e?`${r(e)}/agent-runtime/runs`:``,S=(0,a.useRef)(x);S.current=x;let C=(0,a.useRef)(new Set);(0,a.useEffect)(()=>{m(null),v({})},[x]);let w=i?`${x}/${encodeURIComponent(i)}`:o===void 0?x:`${x}?railIndex=${o}`;(0,a.useEffect)(()=>{if(y.current=!0,!b)return u([]),f(``),()=>{y.current=!1};let e=!1,t;async function n(){try{let t=await fetch(w,{cache:`no-store`});if(!t.ok)throw Error();let n=await t.json();if(!Array.isArray(n.runs))throw Error();e||(u(n.runs),f(``))}catch{e||f(c(`runs.loadFailed`))}finally{e||(t=setTimeout(()=>void n(),1e4))}}return n(),()=>{e=!0,y.current=!1,clearTimeout(t)}},[b,w,h,c]);let T=(0,a.useCallback)(async(t,n,i)=>{let a=`${x}:${t.runId}`;if(!e||C.current.has(a))return;C.current.add(a);let o=()=>y.current&&S.current===x;m(t.runId),f(``);try{let a=n===`approve`?{approve:[t.pendingApproval.stepId]}:n===`recover`?{recover:i??t.recoverableSteps}:n===`answer`?{answer:(_[t.runId]??``).trim(),...t.engineVersion===2&&t.pendingQuestion?{interruptId:t.pendingQuestion.stepId}:{}}:{},s=n===`cancel`?`cancel`:n===`settle`?`settle`:n===`dismiss`?`dismiss`:`resume`,l=t.engineVersion===2&&(s===`resume`||s===`settle`),u=l||t.engineVersion===2&&s===`cancel`?`${r(e)}/loop-runs`:x,d=await fetch(`${u}/${encodeURIComponent(t.runId)}/${l?`resume`:s}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(a)});if(!d.ok){let e=await d.json();throw Error(e.message??e.detail??c(`runs.actionFailed`))}o()&&(n===`answer`&&v(e=>({...e,[t.runId]:``})),g(e=>e+1))}catch(e){o()&&f(e instanceof Error?e.message:c(`runs.actionFailed`))}finally{C.current.delete(a),o()&&m(null)}},[_,x,e,c]);return{runs:l,error:d,busy:p,answers:_,setAnswer:(0,a.useCallback)((e,t)=>{v(n=>({...n,[e]:t}))},[]),act:T,refresh:(0,a.useCallback)(()=>g(e=>e+1),[])}}export{i as n,o as t};