specrails-desktop 2.61.0 → 2.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/client/dist/assets/ActivityFeedPage-C_pqc281.js +1 -0
  2. package/client/dist/assets/{AgentBrowserCapture-CkNWDZT3.js → AgentBrowserCapture-vz6rbDtu.js} +1 -1
  3. package/client/dist/assets/AgentModeAnalyticsPane-BHCcUahS.js +2 -0
  4. package/client/dist/assets/AgentModeCodePane-DhmxgG3W.js +2 -0
  5. package/client/dist/assets/{AgentModeJobsPane-U1J6PaBo.js → AgentModeJobsPane-99fBBLri.js} +1 -1
  6. package/client/dist/assets/{AgentsPage-CXrqu5vo.js → AgentsPage-CTwm_6T8.js} +3 -3
  7. package/client/dist/assets/{AnalyticsPage-Cvtt-LOO.js → AnalyticsPage-YD8MLoPa.js} +1 -1
  8. package/client/dist/assets/CodePage-CLJn2F2e.js +3 -0
  9. package/client/dist/assets/{DesktopAnalyticsPage-CsDFy5rp.js → DesktopAnalyticsPage-MWGQVbwp.js} +1 -1
  10. package/client/dist/assets/{DocsDialog-CSlMPemn.js → DocsDialog-XUCYKoq0.js} +1 -1
  11. package/client/dist/assets/{DocsPage-BKlYAvWq.js → DocsPage-dOLC8bXA.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-CweP_1GP.js → ExportDropdown-BvKQgwM9.js} +1 -1
  13. package/client/dist/assets/InteractiveJobComposer-DxOvwmBF.js +19 -0
  14. package/client/dist/assets/{JobDetailModal-DYyGq1Vp.js → JobDetailModal-CkiubrkZ.js} +1 -1
  15. package/client/dist/assets/JobDetailPage-CNe4Wn7l.js +1 -0
  16. package/client/dist/assets/JobsPage-DSts_L_d.js +1 -0
  17. package/client/dist/assets/LoopBuilderPage-C9D9eer5.js +1 -0
  18. package/client/dist/assets/{LoopPreviewModal-DkLRfsYX.js → LoopPreviewModal-Dv3dxHr_.js} +1 -1
  19. package/client/dist/assets/{LoopWindowSurface-CuACkXFV.js → LoopWindowSurface-DN2lbSnL.js} +1 -1
  20. package/client/dist/assets/{LoopsPage-ClSrWzDd.js → LoopsPage-DHgIreEW.js} +2 -2
  21. package/client/dist/assets/MinimizedChatsContext-Ds2-R6qJ.js +1 -0
  22. package/client/dist/assets/PluginsPage-D1EJ9oja.js +2 -0
  23. package/client/dist/assets/ProjectSettingsDialog-DKpa1wKk.js +1 -0
  24. package/client/dist/assets/{RepositoryDeliveries-DJCm1pZr.js → RepositoryDeliveries-CW4eKG3x.js} +1 -1
  25. package/client/dist/assets/{RepositoryScopeSelector-CeCr6Jz-.js → RepositoryScopeSelector-DrtPqvc_.js} +1 -1
  26. package/client/dist/assets/ReviewPacketPage-BtjPI0Cc.js +4 -0
  27. package/client/dist/assets/{TemplatePreviewModal-B8yd1AGU.js → TemplatePreviewModal-DcFlhUxy.js} +1 -1
  28. package/client/dist/assets/TicketDetailModalContext-Dea22CI-.js +16 -0
  29. package/client/dist/assets/{Trans-D5eOjfvG.js → Trans-CAY2Rd2f.js} +1 -1
  30. package/client/dist/assets/agent-5bSixVzz.js +1 -0
  31. package/client/dist/assets/agent-BR4EHfhq.js +1 -0
  32. package/client/dist/assets/agent-C0IKkJP8.js +1 -0
  33. package/client/dist/assets/agent-C7li9ayC.js +1 -0
  34. package/client/dist/assets/agent-D0dRmEen.js +1 -0
  35. package/client/dist/assets/{agent-BjttZLIl.js → agent-DZVGHm7H.js} +1 -1
  36. package/client/dist/assets/agent-Dip4h2YE.js +1 -0
  37. package/client/dist/assets/agent-Pp-P-n1p.js +1 -0
  38. package/client/dist/assets/ban-E4EaZe3a.js +1 -0
  39. package/client/dist/assets/chevron-up-CwGUHd6D.js +1 -0
  40. package/client/dist/assets/dist-Bq10nS2m.js +1 -0
  41. package/client/dist/assets/{formatDistanceToNow-DZ3VWsHq.js → formatDistanceToNow-DlQY1Lm_.js} +1 -1
  42. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-9JiGlFrx.js → getTimezoneOffsetInMilliseconds-COUeq65G.js} +1 -1
  43. package/client/dist/assets/index-BacrO_ub.css +2 -0
  44. package/client/dist/assets/index-CONHvEJw.js +83 -0
  45. package/client/dist/assets/{jira-api-Bp0zXwjg.js → jira-api-C94VNHNY.js} +1 -1
  46. package/client/dist/assets/layers-eDMjG41I.js +1 -0
  47. package/client/dist/assets/{project-repositories-CadLZOnr.js → project-repositories-Cc3oNv8X.js} +1 -1
  48. package/client/dist/assets/save-B6wGWwBR.js +1 -0
  49. package/client/dist/assets/{settings-Dn-pXukr.js → settings-BKJZ2KEM.js} +1 -1
  50. package/client/dist/assets/{settings-BBj_kZaD.js → settings-BV3jocIx.js} +1 -1
  51. package/client/dist/assets/{settings-COlH_P33.js → settings-BjM2Dw8_.js} +1 -1
  52. package/client/dist/assets/settings-CKu0LTib.js +1 -0
  53. package/client/dist/assets/{settings-D77mC_Lb.js → settings-DA77M48m.js} +1 -1
  54. package/client/dist/assets/{settings-ByVE7jdZ.js → settings-LfFnl1UH.js} +1 -1
  55. package/client/dist/assets/{settings-DZKy7MqN.js → settings-P1IQvhnL.js} +1 -1
  56. package/client/dist/assets/{settings-B5Hy_Kol.js → settings-eIMJjyK_.js} +1 -1
  57. package/client/dist/assets/{spending-DQDNtM8q.js → spending-DemeFfrH.js} +1 -1
  58. package/client/dist/assets/{useDesktop-DKNbOF0u.js → useDesktop-9Lwoel_8.js} +1 -1
  59. package/client/dist/assets/{useRuntimeRuns-D3YMw9qx.js → useRuntimeRuns-DL0xYoZ2.js} +1 -1
  60. package/client/dist/assets/{useSharedWebSocket-DaWuiO0S.js → useSharedWebSocket-BEHPeU1Y.js} +2 -2
  61. package/client/dist/assets/zap-CHo3aCD1.js +1 -0
  62. package/client/dist/index.html +23 -19
  63. package/docs/guide/de/integrations/6-agent-chat.md +11 -0
  64. package/docs/guide/en/integrations/6-agent-chat.md +11 -0
  65. package/docs/guide/es/integrations/6-agent-chat.md +11 -0
  66. package/docs/guide/fr/integrations/6-agent-chat.md +11 -0
  67. package/docs/guide/it/integrations/6-agent-chat.md +11 -0
  68. package/docs/guide/ja/integrations/6-agent-chat.md +11 -0
  69. package/docs/guide/pt/integrations/6-agent-chat.md +11 -0
  70. package/docs/guide/zh/integrations/6-agent-chat.md +11 -0
  71. package/docs/internals/README.md +1 -0
  72. package/docs/internals/agent-sessions.md +157 -0
  73. package/docs/internals/api-reference.md +33 -4
  74. package/docs/internals/configuration.md +34 -0
  75. package/docs/internals/core-runtime-updates.md +10 -3
  76. package/docs/internals/operations-runbook.md +11 -0
  77. package/docs/internals/programmatic-agent-runtime.md +1 -1
  78. package/docs/internals/source-map.md +40 -1
  79. package/mcp-bridge/dist/specrails-mcp.js +82 -15
  80. package/package.json +1 -1
  81. package/server/dist/agent-mcp-config.js +41 -0
  82. package/server/dist/core-compat.js +2 -0
  83. package/server/dist/desktop-db.js +101 -4
  84. package/server/dist/desktop-router.js +31 -2
  85. package/server/dist/index.js +58 -0
  86. package/server/dist/mcp/tools/app-settings.js +11 -0
  87. package/server/dist/mcp/tools/mission.js +45 -2
  88. package/server/dist/mcp/tools/specs.js +2 -2
  89. package/server/dist/modules/accounting/runtime/result-event.js +9 -1
  90. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +25 -0
  91. package/server/dist/modules/agent-sessions/adapters/host-process.js +73 -0
  92. package/server/dist/modules/agent-sessions/adapters/http.js +31 -0
  93. package/server/dist/modules/agent-sessions/adapters/rpc-client.js +147 -0
  94. package/server/dist/modules/agent-sessions/application/session-event-pump.js +99 -0
  95. package/server/dist/modules/agent-sessions/domain/availability.js +25 -0
  96. package/server/dist/modules/agent-sessions/domain/errors.js +23 -0
  97. package/server/dist/modules/agent-sessions/domain/host-state.js +80 -0
  98. package/server/dist/modules/agent-sessions/domain/projection.js +147 -0
  99. package/server/dist/modules/agent-sessions/domain/protocol.js +59 -0
  100. package/server/dist/modules/agent-sessions/domain/subagent-policy.js +34 -0
  101. package/server/dist/modules/agent-sessions/index.js +31 -0
  102. package/server/dist/modules/agent-sessions/ports.js +2 -0
  103. package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +43 -0
  104. package/server/dist/modules/agent-sessions/runtime/session-host-registry.js +226 -0
  105. package/server/dist/modules/agents/runtime/agent-store.js +3 -1
  106. package/server/dist/modules/loops/runtime/loop-implement-recipe.js +15 -4
  107. package/server/dist/modules/loops/runtime/loop-run-manager.js +4 -0
  108. package/server/dist/modules/missions/runtime/agent-chat-manager.js +137 -40
  109. package/server/dist/modules/missions/runtime/agent-chat-router.js +68 -0
  110. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +8 -9
  111. package/server/dist/modules/missions/runtime/agent-session-store.js +133 -0
  112. package/server/dist/modules/missions/runtime/core-session-runner.js +204 -0
  113. package/server/dist/modules/missions/runtime/mission-core-sessions.js +286 -0
  114. package/server/dist/modules/missions/runtime/mission-session-projector.js +168 -0
  115. package/server/dist/modules/project-settings/adapters/http.js +14 -2
  116. package/server/dist/modules/project-settings/adapters/sqlite.js +30 -2
  117. package/server/dist/modules/project-settings/domain.js +24 -0
  118. package/server/dist/modules/project-settings/index.js +2 -1
  119. package/server/dist/modules/specs/runtime/spec-models.js +1 -1
  120. package/server/dist/plugins/codex-spawn.js +15 -7
  121. package/server/dist/project-registry.js +32 -0
  122. package/server/dist/project-router-settings.js +7 -1
  123. package/server/dist/providers/claude-adapter.js +6 -1
  124. package/client/dist/assets/ActivityFeedPage-Wi5XNgoG.js +0 -1
  125. package/client/dist/assets/AgentModeAnalyticsPane-CXz2j-Bt.js +0 -2
  126. package/client/dist/assets/AgentModeCodePane-DnsBPtpS.js +0 -2
  127. package/client/dist/assets/CodePage-D35o-MFO.js +0 -3
  128. package/client/dist/assets/InteractiveJobComposer-CFKvbQeJ.js +0 -19
  129. package/client/dist/assets/JobDetailPage-C6gpdYvj.js +0 -1
  130. package/client/dist/assets/JobsPage-CgS0pnKd.js +0 -1
  131. package/client/dist/assets/LoopBuilderPage-jUp20DSZ.js +0 -1
  132. package/client/dist/assets/MinimizedChatsContext-CroAs6Kh.js +0 -1
  133. package/client/dist/assets/PluginsPage-nCKQOwRL.js +0 -2
  134. package/client/dist/assets/ProjectSettingsDialog-BVDYwllU.js +0 -1
  135. package/client/dist/assets/ReviewPacketPage-kTErrEjx.js +0 -4
  136. package/client/dist/assets/TicketDetailModalContext-YBJX3RmP.js +0 -16
  137. package/client/dist/assets/agent--8QAfoXL.js +0 -1
  138. package/client/dist/assets/agent-3HxXkIWX.js +0 -1
  139. package/client/dist/assets/agent-CpFCz32T.js +0 -1
  140. package/client/dist/assets/agent-DVnw6ybO.js +0 -1
  141. package/client/dist/assets/agent-Z5s_GTP0.js +0 -1
  142. package/client/dist/assets/agent-hv57-zyG.js +0 -1
  143. package/client/dist/assets/agent-xGrZ_aN1.js +0 -1
  144. package/client/dist/assets/index-Bfunvi6w.css +0 -2
  145. package/client/dist/assets/index-lTGJJTuk.js +0 -83
  146. package/client/dist/assets/save-OsUqVn99.js +0 -1
  147. package/client/dist/assets/settings-Dbyd6gmj.js +0 -1
  148. package/client/dist/assets/zap-CUOlvtT1.js +0 -1
@@ -1,4 +1,4 @@
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"./useSharedWebSocket-DaWuiO0S.js";import{n as i,t as a}from"./createLucideIcon-Bjbbp_KS.js";import{i as o}from"./useDesktop-DKNbOF0u.js";import{a as s,i as c,l,o as u,r as d,t as f}from"./dialog-CMgps2MY.js";import{t as p}from"./button-D1xExSTF.js";var m=new Set([`building`,`on_review`,`pr_draft`,`pr_ready`,`no_changes`,`completed`,`pr_closed`,`superseded`,`merged`,`discarded`,`implementation_failed`,`pr_failed`]),h=new Set([`none`,`local-only`,`pushed`,`pr-created`]),g=new Set([`running`,`succeeded`,`partially_succeeded`,`failed`,`unknown`]),_=new Set([`pending`,`ready`,`delivered`,`partial`,`no_changes`,`retryable_failure`,`blocked`,`not_started`,`unknown`]),v=new Set([`create-pr`,`publish`,`discard`,`poll-merge`,`merge-local`,`dismiss`,`reopen`,`acknowledge-no-changes`,`recover-and-retry`,`checkout`]),y=new Set([`implementation_running`,`implementation_failed`,`ready_for_review`,`restart_pending`,`partial_success`,`partial_delivery`,`existing_pr_updated`,`no_changes`,`commit_failed`,`branch_verification_failed`,`push_failed`,`settlement_interrupted`,`recovery_unavailable`,`operation_interrupted`,`delivery_failed`,`pr_draft_ready`,`pr_ready`,`pr_closed`,`merged`,`discarded`,`superseded`,`cleanup_incomplete`,`status_failed`,`ref_mismatch`]);function b(e){return typeof e==`string`&&y.has(e)}var x=`previous delivery action was interrupted by restart`;function S(e,t){return e===`operation_interrupted`||typeof t==`string`&&t.toLowerCase().includes(x)}var C=e=>typeof e==`string`&&e.length>0?e:null,w=e=>typeof e==`string`&&e.length>0?e:null;function T(e){if(!e)return null;let t=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(e)?`${e.replace(` `,`T`)}Z`:e,n=Date.parse(t);return Number.isFinite(n)?n:null}function ee(e,t){let n=T(e),r=T(t);return n==null||r==null?null:r<n?-1:+(r>n)}function te(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.ticketId!=`number`||!Number.isFinite(t.ticketId)||typeof t.branch!=`string`)return null;let n=typeof t.implementationOutcome==`string`&&g.has(t.implementationOutcome)?t.implementationOutcome:void 0,r=typeof t.deliveryOutcome==`string`&&_.has(t.deliveryOutcome)?t.deliveryOutcome:void 0;return{ticketId:t.ticketId,branch:t.branch,succeeded:t.succeeded===!0,...C(t.runId)?{runId:C(t.runId)}:{},...n?{implementationOutcome:n}:{},...r?{deliveryOutcome:r}:{},initialSha:w(t.initialSha),finalSha:w(t.finalSha),...typeof t.changed==`boolean`?{changed:t.changed}:{},failureCode:w(t.failureCode),...t.branchOwnership===`created`||t.branchOwnership===`preexisting`||t.branchOwnership===`borrowed-pr`?{branchOwnership:t.branchOwnership}:{},worktreePath:w(t.worktreePath)}}function E(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=C(n.prDeliveryId)??C(n.id),i=typeof n.railIndex==`number`&&Number.isFinite(n.railIndex)?n.railIndex:t;if(!r||i==null||typeof n.decision!=`string`||!m.has(n.decision))return null;let a=typeof n.implementationOutcome==`string`&&g.has(n.implementationOutcome)?n.implementationOutcome:void 0,o=typeof n.deliveryOutcome==`string`&&_.has(n.deliveryOutcome)?n.deliveryOutcome:void 0,s=(Array.isArray(n.units)?n.units:Array.isArray(n.branches)?n.branches:[]).map(te).filter(e=>e!==null);return{prDeliveryId:r,railIndex:i,railKey:typeof n.railKey==`string`?n.railKey:``,ticketIds:Array.isArray(n.ticketIds)?n.ticketIds.filter(e=>typeof e==`number`&&Number.isFinite(e)):[],baseBranch:typeof n.baseBranch==`string`?n.baseBranch:``,branch:w(n.branch),prUrl:w(n.prUrl),prNumber:typeof n.prNumber==`number`&&Number.isInteger(n.prNumber)&&n.prNumber>0?n.prNumber:null,prState:typeof n.prState==`string`&&h.has(n.prState)?n.prState:`none`,decision:n.decision,runIds:Array.isArray(n.runIds)?n.runIds.filter(e=>typeof e==`string`&&e.length>0):s.map(e=>e.runId).filter(e=>typeof e==`string`&&e.length>0),originConversationId:w(n.originConversationId),createdAt:typeof n.createdAt==`string`?n.createdAt:void 0,updatedAt:typeof n.updatedAt==`string`?n.updatedAt:void 0,...a?{implementationOutcome:a}:{},...o?{deliveryOutcome:o}:{},statusCode:w(n.statusCode),statusDetail:w(n.statusDetail),deliverySha:w(n.deliverySha),isContinuation:n.isContinuation===!0,supersedesDeliveryId:w(n.supersedesDeliveryId),restoredFromDeliveryId:w(n.restoredFromDeliveryId),operation:typeof n.operation==`string`&&v.has(n.operation)?n.operation:null,cleanupWarnings:Array.isArray(n.cleanupWarnings)?n.cleanupWarnings.filter(e=>typeof e==`string`&&e.length>0):[],safetyArchives:Array.isArray(n.safetyArchives)?n.safetyArchives.filter(e=>typeof e==`string`&&e.length>0):[],units:s,executionManifest:n.executionManifest&&typeof n.executionManifest==`object`&&n.executionManifest.version===1?n.executionManifest:void 0,repositoryDeliveries:Array.isArray(n.repositoryDeliveries)?n.repositoryDeliveries.slice(0,100).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;if(typeof t.repositoryId!=`string`||typeof t.deliveryId!=`string`||typeof t.name!=`string`||typeof t.path!=`string`)return[];let n=E({...t,prDeliveryId:t.deliveryId,repositoryDeliveries:void 0},i);return n?[{repositoryId:t.repositoryId,deliveryId:t.deliveryId,name:t.name,path:t.path,baseBranch:n.baseBranch,...C(t.integrationBranch)?{integrationBranch:C(t.integrationBranch)}:{},branch:n.branch,deliverySha:n.deliverySha??null,decision:n.decision,implementationOutcome:n.implementationOutcome??`unknown`,deliveryOutcome:n.deliveryOutcome??`unknown`,statusCode:n.statusCode??null,statusDetail:n.statusDetail??null,prUrl:n.prUrl,prNumber:n.prNumber,runIds:n.runIds,worktreeIds:Array.isArray(t.worktreeIds)?t.worktreeIds.filter(e=>typeof e==`string`):[]}]:[]}):void 0}}function ne(e){let t=D(e);if(t.terminal||t.deliveryBlocked||t.implementationFailed||t.noChanges||e.decision===`building`||e.decision===`implementation_failed`)return null;if(e.branch||e.deliverySha)return e.branch&&/^[0-9a-f]{40,64}$/i.test(e.deliverySha??``)?e.branch:null;let n=e.units??[];if(n.length!==1)return null;let r=n[0];return!r.succeeded||r.implementationOutcome===`failed`||r.deliveryOutcome===`blocked`||r.deliveryOutcome===`no_changes`||r.changed===!1?null:r.branch&&/^[0-9a-f]{40,64}$/i.test(r.finalSha??``)?r.branch:null}function D(e){let t=e.units??[],n=t.length>0?t.filter(e=>e.implementationOutcome===`succeeded`||e.implementationOutcome==null&&e.succeeded).length:e.implementationOutcome===`failed`?0:e.ticketIds.length,r=t.length>0?t.filter(e=>e.implementationOutcome===`failed`||e.implementationOutcome==null&&!e.succeeded).length:e.implementationOutcome===`failed`?e.ticketIds.length:0,i=e.decision===`no_changes`||e.decision===`completed`||e.deliveryOutcome===`no_changes`||e.statusCode===`no_changes`,a=e.implementationOutcome===`partially_succeeded`||e.deliveryOutcome===`partial`||n>0&&r>0,o=t.length>0?t.filter(e=>e.deliveryOutcome===`ready`||e.deliveryOutcome===`delivered`||e.deliveryOutcome==null&&e.succeeded).length:a?0:n,s=a&&o===0,c=e.implementationOutcome===`failed`||e.implementationOutcome==null&&e.decision===`implementation_failed`,l=e.deliveryOutcome===`retryable_failure`,u=!c&&!l&&(s||e.deliveryOutcome===`blocked`||[`commit_failed`,`branch_verification_failed`,`settlement_interrupted`,`recovery_unavailable`,`status_failed`,`ref_mismatch`,`delivery_failed`].includes(e.statusCode??``)),d=e.isContinuation===!0,f=[...new Set((e.runIds??[]).filter(e=>typeof e==`string`&&e.length>0))],p=f.length===1?f[0]:null,m=p&&e.branch?t.filter(t=>t.runId===p&&t.branch===e.branch):[],h=[...new Set(m.map(e=>e.worktreePath).filter(e=>!!e))],g=(e.statusCode===`settlement_interrupted`||e.statusCode===`recovery_unavailable`)&&d?h:[...new Set(t.map(e=>e.worktreePath).filter(e=>!!e))],_=e.decision===`pr_failed`&&e.deliveryOutcome===`blocked`&&u&&d&&!!e.prUrl&&!!e.branch&&f.length===1&&m.length>0&&h.length<=1&&e.statusCode===`settlement_interrupted`&&(e.implementationOutcome===`succeeded`||e.implementationOutcome===`partially_succeeded`),v=e.decision===`pr_failed`&&e.deliveryOutcome===`blocked`&&u&&d&&e.statusCode===`recovery_unavailable`,y=v&&!!e.prUrl&&!!e.branch&&f.length===1&&m.length>0&&h.length<=1&&(e.implementationOutcome===`succeeded`||e.implementationOutcome===`partially_succeeded`),b=g.length>0||v&&!!e.deliverySha,x=!c&&l&&(e.statusCode===`push_failed`||d||!!e.prUrl),S=!c&&l&&!x,C=e.decision===`pr_closed`,w=e.decision===`superseded`;return{noChanges:i,partial:a,partialUndeliverable:s,implementationFailed:c,deliveryBlocked:u,retryablePush:x,retryablePrCreation:S,manualRecovery:_,recoveryUnavailable:v,recoveryRecheck:y,hasDiscardableRecoveryResult:b,continuation:d,localOnly:e.prState===`local-only`,closed:C,superseded:w,terminal:e.decision===`merged`||e.decision===`discarded`||e.decision===`completed`||w,succeededCount:n,deliverableCount:o,failedCount:r,totalCount:t.length>0?t.length:e.ticketIds.length,units:t,cleanupWarnings:e.cleanupWarnings??[],safetyArchives:e.safetyArchives??[],recoveryWorktreePaths:g}}var re=a(`send-horizontal`,[[`path`,{d:`M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z`,key:`117uat`}],[`path`,{d:`M6 12h16`,key:`s4cdu5`}]]),O=e(t(),1),ie=`"\\/bfnrtu`;function k(e){return e===` `||e===` `||e===`\r`||e===`
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"./useSharedWebSocket-BEHPeU1Y.js";import{n as i,t as a}from"./createLucideIcon-Bjbbp_KS.js";import{i as o}from"./useDesktop-9Lwoel_8.js";import{a as s,i as c,l,o as u,r as d,t as f}from"./dialog-CMgps2MY.js";import{t as p}from"./button-D1xExSTF.js";var m=new Set([`building`,`on_review`,`pr_draft`,`pr_ready`,`no_changes`,`completed`,`pr_closed`,`superseded`,`merged`,`discarded`,`implementation_failed`,`pr_failed`]),h=new Set([`none`,`local-only`,`pushed`,`pr-created`]),g=new Set([`running`,`succeeded`,`partially_succeeded`,`failed`,`unknown`]),_=new Set([`pending`,`ready`,`delivered`,`partial`,`no_changes`,`retryable_failure`,`blocked`,`not_started`,`unknown`]),v=new Set([`create-pr`,`publish`,`discard`,`poll-merge`,`merge-local`,`dismiss`,`reopen`,`acknowledge-no-changes`,`recover-and-retry`,`checkout`]),y=new Set([`implementation_running`,`implementation_failed`,`ready_for_review`,`restart_pending`,`partial_success`,`partial_delivery`,`existing_pr_updated`,`no_changes`,`commit_failed`,`branch_verification_failed`,`push_failed`,`settlement_interrupted`,`recovery_unavailable`,`operation_interrupted`,`delivery_failed`,`pr_draft_ready`,`pr_ready`,`pr_closed`,`merged`,`discarded`,`superseded`,`cleanup_incomplete`,`status_failed`,`ref_mismatch`]);function b(e){return typeof e==`string`&&y.has(e)}var x=`previous delivery action was interrupted by restart`;function S(e,t){return e===`operation_interrupted`||typeof t==`string`&&t.toLowerCase().includes(x)}var C=e=>typeof e==`string`&&e.length>0?e:null,w=e=>typeof e==`string`&&e.length>0?e:null;function T(e){if(!e)return null;let t=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(e)?`${e.replace(` `,`T`)}Z`:e,n=Date.parse(t);return Number.isFinite(n)?n:null}function ee(e,t){let n=T(e),r=T(t);return n==null||r==null?null:r<n?-1:+(r>n)}function te(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.ticketId!=`number`||!Number.isFinite(t.ticketId)||typeof t.branch!=`string`)return null;let n=typeof t.implementationOutcome==`string`&&g.has(t.implementationOutcome)?t.implementationOutcome:void 0,r=typeof t.deliveryOutcome==`string`&&_.has(t.deliveryOutcome)?t.deliveryOutcome:void 0;return{ticketId:t.ticketId,branch:t.branch,succeeded:t.succeeded===!0,...C(t.runId)?{runId:C(t.runId)}:{},...n?{implementationOutcome:n}:{},...r?{deliveryOutcome:r}:{},initialSha:w(t.initialSha),finalSha:w(t.finalSha),...typeof t.changed==`boolean`?{changed:t.changed}:{},failureCode:w(t.failureCode),...t.branchOwnership===`created`||t.branchOwnership===`preexisting`||t.branchOwnership===`borrowed-pr`?{branchOwnership:t.branchOwnership}:{},worktreePath:w(t.worktreePath)}}function E(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=C(n.prDeliveryId)??C(n.id),i=typeof n.railIndex==`number`&&Number.isFinite(n.railIndex)?n.railIndex:t;if(!r||i==null||typeof n.decision!=`string`||!m.has(n.decision))return null;let a=typeof n.implementationOutcome==`string`&&g.has(n.implementationOutcome)?n.implementationOutcome:void 0,o=typeof n.deliveryOutcome==`string`&&_.has(n.deliveryOutcome)?n.deliveryOutcome:void 0,s=(Array.isArray(n.units)?n.units:Array.isArray(n.branches)?n.branches:[]).map(te).filter(e=>e!==null);return{prDeliveryId:r,railIndex:i,railKey:typeof n.railKey==`string`?n.railKey:``,ticketIds:Array.isArray(n.ticketIds)?n.ticketIds.filter(e=>typeof e==`number`&&Number.isFinite(e)):[],baseBranch:typeof n.baseBranch==`string`?n.baseBranch:``,branch:w(n.branch),prUrl:w(n.prUrl),prNumber:typeof n.prNumber==`number`&&Number.isInteger(n.prNumber)&&n.prNumber>0?n.prNumber:null,prState:typeof n.prState==`string`&&h.has(n.prState)?n.prState:`none`,decision:n.decision,runIds:Array.isArray(n.runIds)?n.runIds.filter(e=>typeof e==`string`&&e.length>0):s.map(e=>e.runId).filter(e=>typeof e==`string`&&e.length>0),originConversationId:w(n.originConversationId),createdAt:typeof n.createdAt==`string`?n.createdAt:void 0,updatedAt:typeof n.updatedAt==`string`?n.updatedAt:void 0,...a?{implementationOutcome:a}:{},...o?{deliveryOutcome:o}:{},statusCode:w(n.statusCode),statusDetail:w(n.statusDetail),deliverySha:w(n.deliverySha),isContinuation:n.isContinuation===!0,supersedesDeliveryId:w(n.supersedesDeliveryId),restoredFromDeliveryId:w(n.restoredFromDeliveryId),operation:typeof n.operation==`string`&&v.has(n.operation)?n.operation:null,cleanupWarnings:Array.isArray(n.cleanupWarnings)?n.cleanupWarnings.filter(e=>typeof e==`string`&&e.length>0):[],safetyArchives:Array.isArray(n.safetyArchives)?n.safetyArchives.filter(e=>typeof e==`string`&&e.length>0):[],units:s,executionManifest:n.executionManifest&&typeof n.executionManifest==`object`&&n.executionManifest.version===1?n.executionManifest:void 0,repositoryDeliveries:Array.isArray(n.repositoryDeliveries)?n.repositoryDeliveries.slice(0,100).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;if(typeof t.repositoryId!=`string`||typeof t.deliveryId!=`string`||typeof t.name!=`string`||typeof t.path!=`string`)return[];let n=E({...t,prDeliveryId:t.deliveryId,repositoryDeliveries:void 0},i);return n?[{repositoryId:t.repositoryId,deliveryId:t.deliveryId,name:t.name,path:t.path,baseBranch:n.baseBranch,...C(t.integrationBranch)?{integrationBranch:C(t.integrationBranch)}:{},branch:n.branch,deliverySha:n.deliverySha??null,decision:n.decision,implementationOutcome:n.implementationOutcome??`unknown`,deliveryOutcome:n.deliveryOutcome??`unknown`,statusCode:n.statusCode??null,statusDetail:n.statusDetail??null,prUrl:n.prUrl,prNumber:n.prNumber,runIds:n.runIds,worktreeIds:Array.isArray(t.worktreeIds)?t.worktreeIds.filter(e=>typeof e==`string`):[]}]:[]}):void 0}}function ne(e){let t=D(e);if(t.terminal||t.deliveryBlocked||t.implementationFailed||t.noChanges||e.decision===`building`||e.decision===`implementation_failed`)return null;if(e.branch||e.deliverySha)return e.branch&&/^[0-9a-f]{40,64}$/i.test(e.deliverySha??``)?e.branch:null;let n=e.units??[];if(n.length!==1)return null;let r=n[0];return!r.succeeded||r.implementationOutcome===`failed`||r.deliveryOutcome===`blocked`||r.deliveryOutcome===`no_changes`||r.changed===!1?null:r.branch&&/^[0-9a-f]{40,64}$/i.test(r.finalSha??``)?r.branch:null}function D(e){let t=e.units??[],n=t.length>0?t.filter(e=>e.implementationOutcome===`succeeded`||e.implementationOutcome==null&&e.succeeded).length:e.implementationOutcome===`failed`?0:e.ticketIds.length,r=t.length>0?t.filter(e=>e.implementationOutcome===`failed`||e.implementationOutcome==null&&!e.succeeded).length:e.implementationOutcome===`failed`?e.ticketIds.length:0,i=e.decision===`no_changes`||e.decision===`completed`||e.deliveryOutcome===`no_changes`||e.statusCode===`no_changes`,a=e.implementationOutcome===`partially_succeeded`||e.deliveryOutcome===`partial`||n>0&&r>0,o=t.length>0?t.filter(e=>e.deliveryOutcome===`ready`||e.deliveryOutcome===`delivered`||e.deliveryOutcome==null&&e.succeeded).length:a?0:n,s=a&&o===0,c=e.implementationOutcome===`failed`||e.implementationOutcome==null&&e.decision===`implementation_failed`,l=e.deliveryOutcome===`retryable_failure`,u=!c&&!l&&(s||e.deliveryOutcome===`blocked`||[`commit_failed`,`branch_verification_failed`,`settlement_interrupted`,`recovery_unavailable`,`status_failed`,`ref_mismatch`,`delivery_failed`].includes(e.statusCode??``)),d=e.isContinuation===!0,f=[...new Set((e.runIds??[]).filter(e=>typeof e==`string`&&e.length>0))],p=f.length===1?f[0]:null,m=p&&e.branch?t.filter(t=>t.runId===p&&t.branch===e.branch):[],h=[...new Set(m.map(e=>e.worktreePath).filter(e=>!!e))],g=(e.statusCode===`settlement_interrupted`||e.statusCode===`recovery_unavailable`)&&d?h:[...new Set(t.map(e=>e.worktreePath).filter(e=>!!e))],_=e.decision===`pr_failed`&&e.deliveryOutcome===`blocked`&&u&&d&&!!e.prUrl&&!!e.branch&&f.length===1&&m.length>0&&h.length<=1&&e.statusCode===`settlement_interrupted`&&(e.implementationOutcome===`succeeded`||e.implementationOutcome===`partially_succeeded`),v=e.decision===`pr_failed`&&e.deliveryOutcome===`blocked`&&u&&d&&e.statusCode===`recovery_unavailable`,y=v&&!!e.prUrl&&!!e.branch&&f.length===1&&m.length>0&&h.length<=1&&(e.implementationOutcome===`succeeded`||e.implementationOutcome===`partially_succeeded`),b=g.length>0||v&&!!e.deliverySha,x=!c&&l&&(e.statusCode===`push_failed`||d||!!e.prUrl),S=!c&&l&&!x,C=e.decision===`pr_closed`,w=e.decision===`superseded`;return{noChanges:i,partial:a,partialUndeliverable:s,implementationFailed:c,deliveryBlocked:u,retryablePush:x,retryablePrCreation:S,manualRecovery:_,recoveryUnavailable:v,recoveryRecheck:y,hasDiscardableRecoveryResult:b,continuation:d,localOnly:e.prState===`local-only`,closed:C,superseded:w,terminal:e.decision===`merged`||e.decision===`discarded`||e.decision===`completed`||w,succeededCount:n,deliverableCount:o,failedCount:r,totalCount:t.length>0?t.length:e.ticketIds.length,units:t,cleanupWarnings:e.cleanupWarnings??[],safetyArchives:e.safetyArchives??[],recoveryWorktreePaths:g}}var re=a(`send-horizontal`,[[`path`,{d:`M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z`,key:`117uat`}],[`path`,{d:`M6 12h16`,key:`s4cdu5`}]]),O=e(t(),1),ie=`"\\/bfnrtu`;function k(e){return e===` `||e===` `||e===`\r`||e===`
2
2
  `}function ae(e){let t=new Set,n=e.trim(),r=/^```[A-Za-z0-9_-]*[ \t]*\r?\n/.exec(n);r&&(n=n.slice(r[0].length),t.add(`nested_fence`));let i=/\r?\n[ \t]*```[ \t]*$/.exec(n);i&&(n=n.slice(0,i.index),t.add(`nested_fence`));let a=n.indexOf(`{`),o=n.lastIndexOf(`}`);a!==-1&&o>a&&(a>0||o<n.length-1)&&(n=n.slice(a,o+1),t.add(`trimmed_wrapper`));let s=``,c=!1;for(let e=0;e<n.length;e++){let r=n[e];if(c){if(r===`\\`){let i=n[e+1];if(i===void 0){t.add(`dangling_escape`);break}if(ie.includes(i)){s+=r+i,e+=1;continue}s+=i===`
3
3
  `?`\\n`:i,e+=1,t.add(`invalid_escape`);continue}if(r===`"`){let i=e+1;for(;i<n.length&&k(n[i]);)i+=1;let a=n[i];if(a===void 0||a===`,`||a===`}`||a===`]`||a===`:`){c=!1,s+=r;continue}s+=`\\"`,t.add(`inner_quote`);continue}if(r===`
4
4
  `){s+=`\\n`,t.add(`raw_newline`);continue}if(r===`\r`){t.add(`raw_newline`);continue}if(r===` `){s+=`\\t`,t.add(`raw_control`);continue}let i=r.charCodeAt(0);if(i<32){s+=`\\u`+i.toString(16).padStart(4,`0`),t.add(`raw_control`);continue}s+=r;continue}if(r===`"`){c=!0,s+=r;continue}if(r===`,`){let i=e+1;for(;i<n.length&&k(n[i]);)i+=1;if(n[i]===`}`||n[i]===`]`){t.add(`trailing_comma`);continue}s+=r;continue}if(r===`/`&&n[e+1]===`/`){let r=n.indexOf(`
@@ -1,2 +1,2 @@
1
- import{t as e}from"./jsx-runtime-zu2_FqZY.js";import{n as t}from"./createLucideIcon-Bjbbp_KS.js";import{r as n}from"./useDesktop-DKNbOF0u.js";import{t as r}from"./project-repositories-CadLZOnr.js";var i=e();function a({value:e,onChange:a,disabled:o=!1,repositories:s,workspaceOnly:c=!1,workspaceSelection:l,onWorkspaceChange:u,showSingle:d=!1,label:f,hint:p}){let{t:m}=t(`common`),{activeProjectId:h,projects:g}=n(),_=s??r(g.find(e=>e.id===h)),v=_.find(e=>e.isPrimary),y=e??(v?[v.id]:[]),b=y.some(e=>!_.some(t=>t.id===e));if(c){let e=_.filter(e=>y.includes(e.id)&&(e.workspacePaths?.length||e.workspacePath));return e.length?(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`text-xs font-medium`,children:m(`repositories.launchWorkspaces`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:m(`repositories.launchWorkspaceHint`)}),e.map(e=>{let t=e.workspacePaths??[e.workspacePath],n=l?.[e.id]??t;return(0,i.jsxs)(`div`,{className:`space-y-1`,children:[(0,i.jsx)(`span`,{className:`text-xs font-medium`,children:e.name}),t.map(t=>(0,i.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,title:t,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:n.includes(t),disabled:o||n.length===1&&n[0]===t,onChange:r=>u?.({...Object.fromEntries(Object.entries(l??{}).filter(([e])=>y.includes(e))),[e.id]:r.target.checked?[...n,t]:n.filter(e=>e!==t)})}),(0,i.jsx)(`span`,{className:`break-all`,children:t})]},t))]},e.id)})]}):null}return!d&&_.length<=1&&!b?null:(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`mb-1 text-xs font-medium`,children:f??m(`repositories.specScope`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p??m(`repositories.scopeHint`)}),(0,i.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[_.map(e=>(0,i.jsxs)(`label`,{title:e.workspacePaths?.join(`
1
+ import{t as e}from"./jsx-runtime-zu2_FqZY.js";import{n as t}from"./createLucideIcon-Bjbbp_KS.js";import{r as n}from"./useDesktop-9Lwoel_8.js";import{t as r}from"./project-repositories-Cc3oNv8X.js";var i=e();function a({value:e,onChange:a,disabled:o=!1,repositories:s,workspaceOnly:c=!1,workspaceSelection:l,onWorkspaceChange:u,showSingle:d=!1,label:f,hint:p}){let{t:m}=t(`common`),{activeProjectId:h,projects:g}=n(),_=s??r(g.find(e=>e.id===h)),v=_.find(e=>e.isPrimary),y=e??(v?[v.id]:[]),b=y.some(e=>!_.some(t=>t.id===e));if(c){let e=_.filter(e=>y.includes(e.id)&&(e.workspacePaths?.length||e.workspacePath));return e.length?(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`text-xs font-medium`,children:m(`repositories.launchWorkspaces`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:m(`repositories.launchWorkspaceHint`)}),e.map(e=>{let t=e.workspacePaths??[e.workspacePath],n=l?.[e.id]??t;return(0,i.jsxs)(`div`,{className:`space-y-1`,children:[(0,i.jsx)(`span`,{className:`text-xs font-medium`,children:e.name}),t.map(t=>(0,i.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,title:t,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:n.includes(t),disabled:o||n.length===1&&n[0]===t,onChange:r=>u?.({...Object.fromEntries(Object.entries(l??{}).filter(([e])=>y.includes(e))),[e.id]:r.target.checked?[...n,t]:n.filter(e=>e!==t)})}),(0,i.jsx)(`span`,{className:`break-all`,children:t})]},t))]},e.id)})]}):null}return!d&&_.length<=1&&!b?null:(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`mb-1 text-xs font-medium`,children:f??m(`repositories.specScope`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p??m(`repositories.scopeHint`)}),(0,i.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[_.map(e=>(0,i.jsxs)(`label`,{title:e.workspacePaths?.join(`
2
2
  `)??e.workspacePath??e.path,className:`flex items-center gap-2 rounded border border-border px-2 py-1.5 text-xs`,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:y.includes(e.id),"aria-label":e.available===!1?`${m(`repositories.unavailable`)}: ${e.name}`:void 0,disabled:o||(e.available===!1||e.kind===`folder`&&!e.isPrimary)&&!y.includes(e.id)||y.length===1&&y[0]===e.id,onChange:t=>a(t.target.checked?[...y,e.id]:y.filter(t=>t!==e.id))}),(0,i.jsx)(`span`,{children:e.name}),e.available===!1&&(0,i.jsxs)(`span`,{className:`text-destructive`,children:[` `,m(`repositories.unavailable`)]}),e.workspacePaths?.map(e=>(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:e},e)),!e.workspacePaths&&e.workspacePath&&(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:e.workspacePath}),e.kind===`folder`&&!e.isPrimary&&(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:m(`repositories.contextOnly`)})]},e.id)),y.filter(e=>!_.some(t=>t.id===e)).map(e=>(0,i.jsxs)(`label`,{className:`flex items-center gap-2 rounded border border-destructive px-2 py-1.5 text-xs`,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:!0,disabled:o||y.length===1,onChange:()=>a(y.filter(t=>t!==e))}),m(`repositories.unavailable`),`: `,e]},e))]}),b&&(0,i.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:m(`repositories.invalidSelection`)})]})}export{a as t};
@@ -0,0 +1,4 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{d as r,f as i,u as ee}from"./chunk-KS7C4IRE-DEKu087k.js";import{n as te,t as a}from"./createLucideIcon-Bjbbp_KS.js";import{a as o,r as ne}from"./useDesktop-9Lwoel_8.js";import{H as re,K as ie,n as ae}from"./TicketDetailModalContext-Dea22CI-.js";import{C as oe,E as se,b as ce,r as le,t as ue,w as de}from"./RepositoryDeliveries-CW4eKG3x.js";import{n as fe}from"./save-B6wGWwBR.js";import{t as pe}from"./ban-E4EaZe3a.js";import{n as me}from"./chevron-up-CwGUHd6D.js";import{n as s}from"./file-text-BcLCfcWZ.js";import{t as c}from"./loader-circle-DcygOQpC.js";import{t as l}from"./sparkles-DrY8hb0X.js";import{t as he}from"./triangle-alert-H9T4jAmh.js";import{t as u}from"./utils-BC4DHlz2.js";import{n as d,t as f}from"./lib-CGdyxIWg.js";import{Lt as ge,Xt as p,xt as m,y as _e}from"./index-CONHvEJw.js";var ve=a(`circle-dollar-sign`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`,key:`1h4pet`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}]]),h=a(`file-diff`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M9 10h6`,key:`9gxzsh`}],[`path`,{d:`M12 13V7`,key:`h0r20n`}],[`path`,{d:`M9 17h6`,key:`r8uit2`}]]),g=e(t(),1),_=n();function v(e){return e.split(/\n{2,}/).map(e=>{if(e.includes(`
2
+ `))return e;let t=e.match(/(?:^|\s)(\d{1,2})\.\s+(?=\S)/g);return!t||t.length<3?e:e.replace(/\s+(\d{1,2})\.\s+(?=\S)/g,(e,t,n)=>n===0?e:`\n${t}. `)}).join(`
3
+
4
+ `)}function y({children:e,muted:t=!1,className:n}){let r=(0,g.useMemo)(()=>({a:({href:e,children:t})=>(0,_.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,className:`text-accent-primary underline decoration-accent-primary/40 underline-offset-2 hover:decoration-accent-primary`,children:t}),img:()=>null,code:({className:e,children:t})=>e?(0,_.jsx)(`code`,{className:e,children:t}):(0,_.jsx)(`code`,{className:`rounded-md border border-border/50 bg-background-deep/60 px-1.5 py-px font-mono text-[0.85em] text-accent-info`,children:t})}),[]);return(0,_.jsx)(`div`,{"data-testid":`packet-markdown`,className:u(`prose prose-invert prose-sm max-w-none leading-relaxed`,`prose-p:my-1.5 prose-headings:mt-3 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold`,`prose-strong:text-foreground prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-li:marker:text-accent-primary/70`,`prose-pre:my-2 prose-pre:rounded-lg prose-pre:border prose-pre:border-border/50 prose-pre:bg-background-deep/60 prose-pre:text-xs`,`prose-blockquote:border-accent-primary/40 prose-blockquote:text-muted-foreground prose-hr:border-border/50`,t?`text-muted-foreground`:`text-foreground/85`,n),children:(0,_.jsx)(d,{remarkPlugins:[f],skipHtml:!0,components:r,children:v(e)})})}var b=(e={})=>({verbs:[],acceptMeaning:null,fineControlOnly:!1,inFlight:!1,terminal:!1,requiresIrreversibleConfirm:!1,...e});function ye(e){let{decision:t,presentation:n,prUrl:r,canCreatePr:i}=e;if(t===`building`)return b({inFlight:!0});if(t===`merged`||t===`discarded`||n.superseded)return b({terminal:!0});if(n.manualRecovery||n.recoveryUnavailable||n.recoveryRecheck||n.retryablePush||n.retryablePrCreation||n.closed||n.deliveryBlocked&&!n.implementationFailed)return b({fineControlOnly:!0});if(n.noChanges)return b({verbs:[`accept`,`request-changes`],acceptMeaning:`mark-done`});if(n.implementationFailed)return b({verbs:n.succeededCount>0?[`request-changes`,`discard`]:[`discard`]});if(t===`pr_draft`)return b(r?{verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:`publish`}:{fineControlOnly:!0});if(t===`pr_ready`)return b({verbs:[`request-changes`,`discard`]});if(t===`on_review`){let e=i?`create-pr`:`merge-local`;return b({verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:e,requiresIrreversibleConfirm:e===`merge-local`})}return b({fineControlOnly:!0})}function be(e,t){if(e===`discard`)return`discard`;if(e===`request-changes`)return null;switch(t.acceptMeaning){case`create-pr`:return`create-pr`;case`publish`:return`publish`;case`merge-local`:return`merge-local`;case`mark-done`:return`acknowledge-no-changes`;default:return null}}var xe=[`app-verified`,`ai-reported`,`reviewer-score`],Se={"app-verified":m,"ai-reported":l,"reviewer-score":h},Ce={"app-verified":`text-accent-success border-accent-success/30 bg-accent-success/5`,"ai-reported":`text-accent-highlight border-accent-highlight/30 bg-accent-highlight/5`,"reviewer-score":`text-accent-info border-accent-info/30 bg-accent-info/5`};function x({item:e}){let{t}=te(`packet`);return(0,_.jsxs)(`li`,{className:`flex flex-col gap-1 py-1.5`,children:[(0,_.jsx)(`span`,{className:`text-sm text-foreground`,children:t(e.code,{...e.values??{},defaultValue:e.code})}),e.rawExcerpt?(0,_.jsx)(`pre`,{className:`max-h-32 overflow-auto rounded border border-border/60 bg-background-deep/60 p-2 text-[11px] leading-relaxed text-muted-foreground whitespace-pre-wrap`,children:e.rawExcerpt}):null]})}function we(e){return e.implementationOutcome===`failed`?`failed`:e.deliveryOutcome===`no_changes`||e.implementationOutcome===`succeeded`&&e.changed===!1?`noChanges`:e.deliveryOutcome===`not_started`?`notStarted`:e.implementationOutcome===`succeeded`?`succeeded`:`unknown`}var S={resolved:`border-accent-success/40 bg-accent-success/10 text-accent-success`,partial:`border-accent-warning/40 bg-accent-warning/10 text-accent-warning`,blocked:`border-destructive/40 bg-destructive/10 text-destructive`,unreported:`border-border bg-background-deep/50 text-muted-foreground`},Te={succeeded:`border-accent-success/40 bg-accent-success/10 text-accent-success`,noChanges:`border-accent-info/40 bg-accent-info/10 text-accent-info`,failed:`border-destructive/40 bg-destructive/10 text-destructive`,notStarted:`border-border bg-background-deep/50 text-muted-foreground`,unknown:`border-border bg-background-deep/50 text-muted-foreground`};function C({title:e,children:t,defaultOpen:n=!1,badge:r}){let[i,ee]=(0,g.useState)(n);return(0,_.jsxs)(`div`,{className:`rounded-lg border border-border/60 bg-surface/40`,children:[(0,_.jsxs)(`button`,{type:`button`,onClick:()=>ee(e=>!e),className:`flex w-full items-center gap-2 px-4 py-3 text-left`,"aria-expanded":i,children:[i?(0,_.jsx)(p,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,_.jsx)(s,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}),(0,_.jsx)(`span`,{className:`flex-1 text-sm font-medium text-foreground`,children:e}),r]}),i?(0,_.jsx)(`div`,{className:`border-t border-border/60 px-4 py-3`,children:t}):null]})}function w(e={}){let t=r(),n=e.prDeliveryId??t.prDeliveryId,{t:a}=te([`packet`,`common`]),s=ee(),[l,u]=i(),d=l.get(`repositoryId`),f=(0,g.useRef)(0),p=e.onClose??(()=>s(`/`)),{activeProjectId:m}=ne(),h=le(m),v=n?h.has(n):!1,{act:b,checkout:w}=_e(),{openTicketDetail:Ee}=ae(),T=JSON.stringify([m,n,d]),E=(0,g.useRef)({key:T,epoch:0});E.current.key!==T&&(E.current={key:T,epoch:E.current.epoch+1});let D=E.current.epoch,O=(0,g.useRef)(!0);(0,g.useEffect)(()=>(O.current=!0,()=>{O.current=!1}),[]);let k=(0,g.useCallback)(()=>O.current&&E.current.key===T&&E.current.epoch===D,[T,D]),[A,j]=(0,g.useState)(null),M=A?.key===T&&A.epoch===D?A:null,N=M?.data??null,P=M?.loading??!0,F=M?.error??null,[I,L]=(0,g.useState)(null),[De,R]=(0,g.useState)(!1),[z,B]=(0,g.useState)(null),[V,H]=(0,g.useState)(``),[U,W]=(0,g.useState)(!1),[G,K]=(0,g.useState)(null),[Oe,q]=(0,g.useState)(!1),J=(0,g.useCallback)(async()=>{if(!n||!m||!k())return;let e=++f.current,t=()=>k()&&f.current===e;j(e=>({key:T,epoch:D,data:e?.key===T&&e.epoch===D?e.data:null,loading:!0,error:null}));try{let e=d?`?repositoryId=${encodeURIComponent(d)}`:``,r=await fetch(`${o()}/rails/pr-deliveries/${n}/packet${e}`);if(!t())return;if(!r.ok){j({key:T,epoch:D,data:null,loading:!1,error:r.status===404?`notFound`:`loadFailed`});return}let i=await r.json();if(!t())return;j({key:T,epoch:D,data:i,loading:!1,error:null})}catch{if(!t())return;j({key:T,epoch:D,data:null,loading:!1,error:`loadFailed`})}},[n,m,d,T,D,k]);(0,g.useEffect)(()=>(J(),R(!1),q(!1),L(null),B(null),K(null),W(!1),H(``),()=>{f.current++}),[J]);let Y=(0,g.useMemo)(()=>de(N?.snapshot),[N?.snapshot]),X=N?.packet??null,Z=P||I!==null||U||!!Y?.operation,ke=N?.acceptCapability??null,Q=(0,g.useMemo)(()=>{if(!X)return null;let e=se({decision:X.decision,ticketIds:X.ticketIds,prState:X.prUrl?`pr-created`:`none`,statusCode:X.statusCode,prUrl:X.prUrl,runIds:X.runIds});return ye({decision:X.decision,presentation:e,prUrl:X.prUrl,canCreatePr:ke?.target===`create-pr`})},[X,ke]),$=(0,g.useCallback)(async e=>{if(!X||!Q||Z||!k())return;let t=be(e,Q);if(t){B(null),L(e);try{let e=await(d&&Y?b(Y.railIndex,t,Y.decision,Y.prDeliveryId,d):b(X.railIndex,t,X.decision,X.prDeliveryId));if(!k())return;e.ok?m&&ce(m):B(e.status===409&&e.error===`stale_decision`?`alreadyResolved`:`actionFailed`),await J()}finally{k()&&(L(null),R(!1))}}},[b,m,J,X,Q,Y,d,Z,k]),Ae=(0,g.useCallback)(async()=>{if(!(!X||!V.trim()||!m||Z||!k())){K(null),W(!0);try{let t=await fetch(`${o()}/rails/${X.railIndex}/launch`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({loopId:`factory:sdd-quick-openspec`,revisionOfDeliveryId:Y?.prDeliveryId??X.prDeliveryId,revisionNote:V.trim(),...Y?.executionManifest?{repositoryIds:Y.executionManifest.selectedRepositoryIds}:{}})});if(!k())return;if(!t.ok){let e=await t.json().catch(()=>null);if(!k())return;K(e?.error===`invalid_revision_target`?`revisionStale`:`revisionFailed`);return}H(``),q(!1);let r=await t.json().catch(()=>null);if(!k())return;r?.prDeliveryId&&r.prDeliveryId!==n?e.onClose?e.onClose():s(`/review/${encodeURIComponent(r.prDeliveryId)}`):await J()}catch{k()&&K(`revisionFailed`)}finally{k()&&W(!1)}}},[m,J,X,V,Y,Z,k,n,e.onClose,s]);if(P&&!X)return(0,_.jsxs)(`div`,{className:`flex h-full items-center justify-center text-muted-foreground`,children:[(0,_.jsx)(c,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}),a(`common:states.loading`)]});if(F||!X||!Q)return(0,_.jsxs)(`div`,{className:`mx-auto flex max-w-2xl flex-col items-center gap-4 p-10 text-center`,children:[(0,_.jsx)(he,{className:`size-6 text-accent-warning`,"aria-hidden":!0}),(0,_.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:a(F===`notFound`?`error.notFound`:`error.loadFailed`)}),(0,_.jsx)(`button`,{type:`button`,onClick:p,className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface`,children:a(`backToBoard`)})]});let je=xe.map(e=>({tier:e,items:X.proof.filter(t=>t.tier===e)})).filter(e=>e.items.length>0),Me=X.cost.totalUsd===null?`—`:`${X.cost.estimated?`~`:``}$${X.cost.totalUsd.toFixed(2)}`;return(0,_.jsxs)(`div`,{className:`mx-auto flex w-full max-w-3xl flex-col gap-4 p-6`,children:[(0,_.jsxs)(`button`,{type:`button`,onClick:p,className:`flex w-fit items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground`,children:[(0,_.jsx)(fe,{className:`size-3.5`,"aria-hidden":!0}),a(`backToBoard`)]}),Y?.repositoryDeliveries?.length?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[a(`common:repositories.select`),(0,_.jsxs)(`select`,{value:d??``,onChange:e=>{let t=new URLSearchParams(l);e.target.value?t.set(`repositoryId`,e.target.value):t.delete(`repositoryId`),u(t,{replace:!0})},className:`rounded border border-border bg-background px-2 py-1`,children:[(0,_.jsx)(`option`,{value:``,children:a(`common:repositories.all`)}),Y.repositoryDeliveries.map(e=>(0,_.jsx)(`option`,{value:e.repositoryId,children:e.name},e.repositoryId))]})]}),(0,_.jsx)(ue,{deliveryId:Y.prDeliveryId,repositories:Y.repositoryDeliveries,busy:Z,onAct:async(e,t)=>{if(!(Z||!k())){L(`accept`);try{let n=await b(Y.railIndex,e,Y.decision,Y.prDeliveryId,t);if(!k())return;n.ok||B(`actionFailed`),await J()}finally{k()&&L(null)}}},onCheckout:async e=>{if(!(Z||!k())){L(`accept`);try{let t=await w(Y.railIndex,Y.prDeliveryId,e);if(!k())return;t.ok||B(`actionFailed`),await J()}finally{k()&&L(null)}}}})]}):null,(0,_.jsxs)(`div`,{className:`rounded-xl border border-border/70 bg-surface/60 p-5 shadow-sm`,children:[(0,_.jsx)(`h1`,{className:`text-lg font-semibold text-foreground`,children:a(X.headlineCode,{count:X.totalCount,succeeded:X.succeededCount,total:X.totalCount,defaultValue:X.headlineCode})}),(0,_.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs`,children:[X.confidence?.overall!==null&&X.confidence?.overall!==void 0?(0,_.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-accent-info/30 bg-accent-info/10 px-2 py-0.5 text-accent-info`,title:a(`confidence.tooltip`),children:a(`confidence.pill`,{overall:X.confidence.overall})}):(0,_.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-muted-foreground`,children:a(`confidence.unavailable`)}),(0,_.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,_.jsx)(ve,{className:`size-3.5`,"aria-hidden":!0}),a(`cost.thisBuild`,{amount:Me})]}),X.prUrl?(0,_.jsxs)(`a`,{href:X.prUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-accent-info hover:underline`,children:[(0,_.jsx)(ie,{className:`size-3.5`,"aria-hidden":!0}),a(`openPr`,{number:X.prNumber??``})]}):null]}),Q.fineControlOnly?(0,_.jsx)(`p`,{className:`mt-4 rounded-md border border-accent-warning/30 bg-accent-warning/5 px-3 py-2 text-xs text-accent-warning`,children:a(`fineControlOnly`)}):Q.inFlight?(0,_.jsxs)(`p`,{className:`mt-4 flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,_.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}),a(`stillWorking`)]}):Q.terminal?(0,_.jsx)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:a(`alreadyResolved`)}):(0,_.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[Q.verbs.includes(`accept`)&&(!Y?.repositoryDeliveries?.length||d)?De?(0,_.jsxs)(`div`,{className:`flex w-full flex-col gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3`,children:[(0,_.jsx)(`p`,{className:`text-xs text-foreground`,children:a(`accept.irreversibleWarning`)}),(0,_.jsxs)(`div`,{className:`flex gap-2`,children:[(0,_.jsx)(`button`,{type:`button`,onClick:()=>void $(`accept`),disabled:Z,className:`rounded-md bg-destructive px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-accept-confirm`,children:a(`accept.irreversibleConfirm`)}),(0,_.jsx)(`button`,{type:`button`,onClick:()=>R(!1),className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground`,children:a(`common:actions.cancel`)})]})]}):(0,_.jsxs)(`button`,{type:`button`,onClick:()=>{Q.requiresIrreversibleConfirm?R(!0):$(`accept`)},disabled:Z,className:`inline-flex items-center gap-1.5 rounded-md bg-accent-success px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-accept`,children:[I===`accept`?(0,_.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,_.jsx)(me,{className:`size-4`,"aria-hidden":!0}),a(`accept.${Q.acceptMeaning??`generic`}`)]}):null,Q.verbs.includes(`request-changes`)?(0,_.jsxs)(`button`,{type:`button`,onClick:()=>q(e=>!e),disabled:Z||U,"aria-expanded":Oe,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-request-changes`,children:[(0,_.jsx)(re,{className:`size-4`,"aria-hidden":!0}),a(`requestChanges.label`)]}):null,Q.verbs.includes(`discard`)?(0,_.jsxs)(`button`,{type:`button`,onClick:()=>void $(`discard`),disabled:Z,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-discard`,children:[I===`discard`?(0,_.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,_.jsx)(pe,{className:`size-4`,"aria-hidden":!0}),a(`discard.label`)]}):null]}),v&&Q.verbs.includes(`discard`)?(0,_.jsx)(`p`,{className:`mt-3 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-accent-warning`,"data-testid":`packet-discard-stacked-note`,children:a(`discard.stackedNote`)}):null,z?(0,_.jsx)(`p`,{className:`mt-3 text-xs text-accent-warning`,children:a(`error.${z}`)}):null,Oe?(0,_.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2 rounded-md border border-border/70 bg-background-deep/40 p-3`,children:[(0,_.jsx)(`label`,{htmlFor:`packet-revision-note`,className:`text-xs font-medium text-foreground`,children:a(`requestChanges.prompt`)}),(0,_.jsx)(`textarea`,{id:`packet-revision-note`,value:V,onChange:e=>H(e.target.value),rows:2,placeholder:a(`requestChanges.placeholder`),className:`resize-y rounded-md border border-border bg-surface px-2 py-1.5 text-sm text-foreground placeholder:text-muted-foreground`,"data-testid":`packet-revision-input`}),(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,_.jsxs)(`button`,{type:`button`,onClick:()=>void Ae(),disabled:Z||V.trim().length===0,className:`inline-flex items-center gap-1.5 rounded-md bg-accent-primary px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-revision-submit`,children:[U?(0,_.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,_.jsx)(oe,{className:`size-4`,"aria-hidden":!0}),a(`requestChanges.submit`)]}),(0,_.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:a(`requestChanges.hint`)})]}),G?(0,_.jsx)(`p`,{className:`text-xs text-accent-warning`,children:a(`error.${G}`)}):null]}):null]}),X.driftNudges.length>0?(0,_.jsxs)(`div`,{className:`rounded-lg border border-accent-highlight/30 bg-accent-highlight/5 p-4`,"data-testid":`packet-drift-nudges`,children:[(0,_.jsx)(`h2`,{className:`mb-1 text-sm font-medium text-accent-highlight`,children:a(`drift.title`)}),(0,_.jsx)(`ul`,{className:`space-y-1 text-xs text-foreground`,children:X.driftNudges.map(e=>(0,_.jsx)(`li`,{children:a(e.code,{...e.values,defaultValue:e.code})},e.code))}),(0,_.jsx)(`p`,{className:`mt-2 text-[11px] text-muted-foreground`,children:a(`drift.advisory`)})]}):null,X.versions.length>1?(0,_.jsxs)(C,{title:a(`versions.title`,{count:X.versions.length}),badge:(0,_.jsx)(ge,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),children:[(0,_.jsx)(`ol`,{className:`space-y-2`,"data-testid":`packet-versions`,children:X.versions.map(e=>(0,_.jsxs)(`li`,{className:`flex flex-col gap-0.5 text-sm`,children:[(0,_.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`span`,{className:e.current?`font-medium text-foreground`:`text-muted-foreground`,children:a(`versions.label`,{version:e.version})}),e.current?(0,_.jsx)(`span`,{className:`rounded-full border border-accent-primary/40 bg-accent-primary/10 px-1.5 text-[10px] text-accent-primary`,children:a(`versions.current`)}):null,(0,_.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:e.costUsd===null?`—`:`${e.costEstimated?`~`:``}$${e.costUsd.toFixed(2)}`})]}),(0,_.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.revisionNote??a(`versions.originalBuild`)})]},e.prDeliveryId))}),(0,_.jsx)(`p`,{className:`mt-3 text-xs text-muted-foreground`,children:a(`cost.allVersions`,{amount:X.chainCostUsd===null?`—`:`${X.chainCostEstimated?`~`:``}$${X.chainCostUsd.toFixed(2)}`})})]}):null,X.watchOut.length>0?(0,_.jsxs)(`div`,{className:`rounded-lg border border-accent-warning/30 bg-accent-warning/5 p-4`,children:[(0,_.jsxs)(`h2`,{className:`mb-2 flex items-center gap-1.5 text-sm font-medium text-accent-warning`,children:[(0,_.jsx)(he,{className:`size-4`,"aria-hidden":!0}),a(`watchOut.title`)]}),(0,_.jsx)(`ul`,{className:`space-y-1`,children:X.watchOut.map((e,t)=>(0,_.jsx)(x,{item:e},`${e.code}-${t}`))})]}):null,(0,_.jsx)(C,{title:a(`sections.whatYouAsked`),defaultOpen:!0,children:(0,_.jsx)(`ul`,{className:`space-y-3`,children:X.sections.map(e=>(0,_.jsxs)(`li`,{className:`text-sm`,children:[(0,_.jsxs)(`button`,{type:`button`,onClick:()=>Ee(e.ticketId),className:`text-accent-primary hover:underline`,children:[`#`,e.ticketId,` `,e.title??``]}),e.problem?(0,_.jsx)(y,{muted:!0,className:`mt-1`,children:e.problem}):null]},e.ticketId))})}),X.followUp&&(0,_.jsxs)(C,{title:a(`followUp.title`,{count:X.followUp.comments.length}),defaultOpen:!0,children:[(0,_.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:a(`followUp.caveat`)}),(0,_.jsx)(`ul`,{className:`space-y-3`,"data-testid":`packet-follow-up`,children:X.followUp.comments.map(e=>{let t=X.followUpReport?.find(t=>t.commentId===e.id)??null,n=t?t.verdict:`unreported`;return(0,_.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsx)(`span`,{className:`rounded bg-surface/70 px-1 font-mono text-[10px] text-muted-foreground`,children:e.id}),e.path?(0,_.jsxs)(`span`,{className:`font-mono text-xs text-accent-info`,children:[e.path,e.line?`:${e.line}`:``]}):null,(0,_.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${S[n]}`,"data-testid":`packet-follow-up-verdict`,children:a(`followUp.verdict.${n}`)}),(0,_.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[a(`followUp.source.${e.source===`github`?`github`:`pasted`}`),e.author?` · ${e.author}`:``]})]}),(0,_.jsx)(y,{muted:!0,className:`mt-1`,children:e.body}),t?(0,_.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:a(`followUp.files`)}),(0,_.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:a(`followUp.tests`)}),(0,_.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:a(`followUp.notes`)}),(0,_.jsx)(`dd`,{children:t.notes})]}):null]}):(0,_.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:a(`followUp.noReport`)})]},e.id)})}),X.followUp.scope.excludedChanges.length>0&&(0,_.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[(0,_.jsxs)(`span`,{className:`font-medium`,children:[a(`followUp.excluded`),`:`]}),` `,X.followUp.scope.excludedChanges.join(` · `)]})]}),X.specAddenda&&X.specAddenda.length>0&&(0,_.jsxs)(C,{title:a(`addenda.title`,{count:X.specAddenda.length}),defaultOpen:!0,children:[(0,_.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:a(`addenda.caveat`)}),(0,_.jsx)(`ul`,{className:`space-y-2`,"data-testid":`packet-addenda`,children:X.specAddenda.map(e=>{let t=X.specAddendaReport?.find(t=>t.addendumId===e.id)??null,n=t?t.verdict:`unreported`,r=n===`applied`?S.resolved:S[n];return(0,_.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsxs)(`span`,{className:`font-mono text-xs text-accent-primary`,children:[`#`,e.ticketId]}),(0,_.jsx)(`span`,{className:`rounded-full border border-border/50 px-1.5 py-px text-[10px] text-muted-foreground`,children:a(`addenda.kind.${e.kind}`)}),(0,_.jsx)(`span`,{className:`font-medium`,children:e.title}),(0,_.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${r}`,"data-testid":`packet-addenda-verdict`,children:a(`addenda.verdict.${n}`)})]}),t?(0,_.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:a(`followUp.files`)}),(0,_.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:a(`followUp.tests`)}),(0,_.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:a(`followUp.notes`)}),(0,_.jsx)(`dd`,{children:t.notes})]}):null]}):(0,_.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:a(`addenda.noReport`)})]},e.id)})})]}),(0,_.jsx)(C,{title:a(`sections.whatIDid`),children:(0,_.jsx)(`ul`,{className:`space-y-3`,children:X.sections.map(e=>(0,_.jsxs)(`li`,{className:`text-sm`,"data-testid":`packet-done-${e.ticketId}`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsxs)(`span`,{className:`font-medium text-foreground`,children:[`#`,e.ticketId]}),e.title?(0,_.jsx)(`span`,{className:`text-foreground/80`,children:e.title}):null,(()=>{let t=we(e);return(0,_.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${Te[t]}`,"data-testid":`packet-outcome-pill`,children:a(`outcome.${t}`)})})()]}),e.churn?(0,_.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[a(`churn.line`,{files:e.churn.filesTouched,added:e.churn.addedLines,removed:e.churn.removedLines}),` · `,e.churn.testFilesTouched.length>0?a(`churn.testFiles`,{count:e.churn.testFilesTouched.length}):a(`churn.noTestFiles`)]}):(0,_.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:a(`churn.batchNotSplittable`)}),e.solution?(0,_.jsxs)(`details`,{className:`group mt-2 rounded-md border border-border/50 bg-background-deep/30 px-3 py-2`,children:[(0,_.jsx)(`summary`,{className:`cursor-pointer select-none text-xs font-medium text-muted-foreground group-open:text-foreground/80`,children:a(`planned.title`)}),(0,_.jsx)(`p`,{className:`mt-1 text-[11px] italic text-muted-foreground/80`,children:a(`planned.caveat`)}),(0,_.jsx)(y,{className:`mt-2`,children:e.solutionOverflow??e.solution})]}):(0,_.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:a(`noSolutionRecorded`)})]},e.ticketId))})}),(0,_.jsx)(C,{title:a(`sections.howItWasChecked`),badge:X.evidenceUnavailable?(0,_.jsx)(`span`,{className:`rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-[10px] text-muted-foreground`,children:a(`proof.evidenceUnavailable`)}):void 0,children:(0,_.jsx)(`div`,{className:`space-y-4`,children:je.map(({tier:e,items:t})=>{let n=Se[e];return(0,_.jsxs)(`div`,{className:`rounded-md border px-3 py-2 ${Ce[e]}`,children:[(0,_.jsxs)(`h3`,{className:`mb-1 flex items-center gap-1.5 text-xs font-medium`,children:[(0,_.jsx)(n,{className:`size-3.5`,"aria-hidden":!0}),a(`tier.${e}.title`)]}),(0,_.jsx)(`p`,{className:`mb-2 text-[11px] opacity-80`,children:a(`tier.${e}.caveat`)}),(0,_.jsx)(`ul`,{className:`space-y-1`,children:t.map((e,t)=>(0,_.jsx)(x,{item:e},`${e.code}-${t}`))})]},e)})})})]})}export{w as default};
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-zu2_FqZY.js";import{n as t}from"./createLucideIcon-Bjbbp_KS.js";import{t as n}from"./download-CFHyyHcw.js";import{t as r}from"./git-branch-BRM0F5GN.js";import{n as i,t as a}from"./square-Ci-PFcFe.js";import{a as o,i as s,l as c,o as l,r as u,t as d}from"./dialog-CMgps2MY.js";import{t as f}from"./button-D1xExSTF.js";import{Yt as p,gt as m,nt as h}from"./index-lTGJJTuk.js";var g=e(),_={core:p,start:i,"ai-step":p,shell:m,decider:r,condition:r,end:a};function v(e){if(e.type===`core`){let t=e.data?.params;return t?String(t.text??t.prompt??t.goal??t.expr??t.question??t.message??t.ref??t.body??t.outcome??JSON.stringify(t,null,2)):null}return e.type===`ai-step`?typeof e.data?.prompt==`string`?e.data.prompt:null:e.type===`shell`?typeof e.data?.command==`string`?e.data.command:null:e.type===`decider`?typeof e.data?.goal==`string`?e.data.goal:null:e.type===`end`?e.data?.outcome===`failure`?`failure`:`success`:null}function y({template:e,onClose:r,onUse:i}){let{t:m}=t(`loops`);return(0,g.jsx)(d,{open:e!==null,onOpenChange:e=>{e||r()},children:(0,g.jsx)(u,{movableResizable:!0,className:`max-w-lg`,children:e&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(l,{children:[(0,g.jsxs)(c,{className:`flex items-center gap-2`,children:[(0,g.jsx)(p,{className:`w-4 h-4 text-accent-highlight`}),e.name]}),(0,g.jsx)(s,{children:e.description})]}),(0,g.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[h(e.graph)?(0,g.jsx)(`span`,{title:m(`gallery.needsSpecHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-secondary/15 text-accent-secondary`,children:m(`gallery.needsSpec`)}):(0,g.jsx)(`span`,{title:m(`gallery.standaloneHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-success/15 text-accent-success`,children:m(`gallery.standalone`)}),e.category&&(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-info/15 text-accent-info`,children:m(`categories.${e.category}`,{defaultValue:e.category})}),e.tags.map(e=>(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e},e))]}),(0,g.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e.graph.config.timeoutMinutes>0?m(`preview.limits`,{iterations:e.graph.config.maxIterations,timeout:e.graph.config.timeoutMinutes}):m(`preview.limitsNoTimeout`,{iterations:e.graph.config.maxIterations})}),(0,g.jsxs)(`div`,{className:`max-h-[50vh] overflow-y-auto space-y-1.5 pr-1`,children:[(0,g.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:m(`preview.steps`)}),e.graph.nodes.map((e,t)=>{let n=_[e.type]??a,r=v(e);return(0,g.jsxs)(`div`,{className:`rounded border border-border bg-surface/30 p-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-foreground`,children:[(0,g.jsxs)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[t+1,`.`]}),(0,g.jsx)(n,{className:`w-3.5 h-3.5 text-accent-primary`}),m(e.type===`core`?`builder.core.pieces.${e.data?.kind}`:`builder.nodes.${e.type}`)]}),r&&(0,g.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words text-[11px] text-muted-foreground font-mono`,children:r})]},e.id)})]}),(0,g.jsxs)(o,{children:[(0,g.jsx)(f,{variant:`ghost`,onClick:r,children:m(`common:actions.cancel`)}),(0,g.jsxs)(f,{onClick:()=>i(e.id),children:[(0,g.jsx)(n,{className:`w-3.5 h-3.5 mr-1.5`}),m(`actions.use`)]})]})]})})})}export{y as n,v as r,_ as t};
1
+ import{t as e}from"./jsx-runtime-zu2_FqZY.js";import{n as t}from"./createLucideIcon-Bjbbp_KS.js";import{t as n}from"./download-CFHyyHcw.js";import{t as r}from"./git-branch-BRM0F5GN.js";import{n as i,t as a}from"./square-Ci-PFcFe.js";import{a as o,i as s,l as c,o as l,r as u,t as d}from"./dialog-CMgps2MY.js";import{t as f}from"./button-D1xExSTF.js";import{$t as p,_t as m,rt as h}from"./index-CONHvEJw.js";var g=e(),_={core:p,start:i,"ai-step":p,shell:m,decider:r,condition:r,end:a};function v(e){if(e.type===`core`){let t=e.data?.params;return t?String(t.text??t.prompt??t.goal??t.expr??t.question??t.message??t.ref??t.body??t.outcome??JSON.stringify(t,null,2)):null}return e.type===`ai-step`?typeof e.data?.prompt==`string`?e.data.prompt:null:e.type===`shell`?typeof e.data?.command==`string`?e.data.command:null:e.type===`decider`?typeof e.data?.goal==`string`?e.data.goal:null:e.type===`end`?e.data?.outcome===`failure`?`failure`:`success`:null}function y({template:e,onClose:r,onUse:i}){let{t:m}=t(`loops`);return(0,g.jsx)(d,{open:e!==null,onOpenChange:e=>{e||r()},children:(0,g.jsx)(u,{movableResizable:!0,className:`max-w-lg`,children:e&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(l,{children:[(0,g.jsxs)(c,{className:`flex items-center gap-2`,children:[(0,g.jsx)(p,{className:`w-4 h-4 text-accent-highlight`}),e.name]}),(0,g.jsx)(s,{children:e.description})]}),(0,g.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[h(e.graph)?(0,g.jsx)(`span`,{title:m(`gallery.needsSpecHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-secondary/15 text-accent-secondary`,children:m(`gallery.needsSpec`)}):(0,g.jsx)(`span`,{title:m(`gallery.standaloneHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-success/15 text-accent-success`,children:m(`gallery.standalone`)}),e.category&&(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-info/15 text-accent-info`,children:m(`categories.${e.category}`,{defaultValue:e.category})}),e.tags.map(e=>(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e},e))]}),(0,g.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e.graph.config.timeoutMinutes>0?m(`preview.limits`,{iterations:e.graph.config.maxIterations,timeout:e.graph.config.timeoutMinutes}):m(`preview.limitsNoTimeout`,{iterations:e.graph.config.maxIterations})}),(0,g.jsxs)(`div`,{className:`max-h-[50vh] overflow-y-auto space-y-1.5 pr-1`,children:[(0,g.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:m(`preview.steps`)}),e.graph.nodes.map((e,t)=>{let n=_[e.type]??a,r=v(e);return(0,g.jsxs)(`div`,{className:`rounded border border-border bg-surface/30 p-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-foreground`,children:[(0,g.jsxs)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[t+1,`.`]}),(0,g.jsx)(n,{className:`w-3.5 h-3.5 text-accent-primary`}),m(e.type===`core`?`builder.core.pieces.${e.data?.kind}`:`builder.nodes.${e.type}`)]}),r&&(0,g.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words text-[11px] text-muted-foreground font-mono`,children:r})]},e.id)})]}),(0,g.jsxs)(o,{children:[(0,g.jsx)(f,{variant:`ghost`,onClick:r,children:m(`common:actions.cancel`)}),(0,g.jsxs)(f,{onClick:()=>i(e.id),children:[(0,g.jsx)(n,{className:`w-3.5 h-3.5 mr-1.5`}),m(`actions.use`)]})]})]})})})}export{y as n,v as r,_ as t};
@@ -0,0 +1,16 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/core-B3mKBIh5.js","assets/rolldown-runtime-CNC7AqOf.js","assets/event-Bt7f3wXe.js"])))=>i.map(i=>d[i]);
2
+ 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{t as i}from"./preload-helper-Czpn1I53.js";import{u as a}from"./chunk-KS7C4IRE-DEKu087k.js";import{n as o,t as s}from"./tauri-shell-DE6LfGPw.js";import{D as c,E as l,a as u,h as d,l as f,m as p,r as m,w as h,x as g}from"./useSharedWebSocket-BEHPeU1Y.js";import{t as _}from"./Trans-CAY2Rd2f.js";import{n as v,t as y}from"./createLucideIcon-Bjbbp_KS.js";import{a as b,r as x,s as S}from"./useDesktop-9Lwoel_8.js";import{a as C}from"./provider-capabilities-lePfeT_Y.js";import{n as w,t as T}from"./save-B6wGWwBR.js";import{n as E,r as D}from"./spending-DemeFfrH.js";import{c as O,n as k}from"./MinimizedChatsContext-Ds2-R6qJ.js";import{t as A}from"./ban-E4EaZe3a.js";import{n as j}from"./chevron-up-CwGUHd6D.js";import{t as M}from"./file-text-BcLCfcWZ.js";import{t as N}from"./circle-x-CMYsN4ZH.js";import{t as P}from"./download-CFHyyHcw.js";import{t as F}from"./external-link-D6XxC_Cu.js";import{t as I}from"./git-branch-BRM0F5GN.js";import{t as L}from"./layers-eDMjG41I.js";import{t as ee}from"./loader-circle-DcygOQpC.js";import{t as R}from"./pencil-C9RkrIPZ.js";import{n as z,t as B}from"./square-Ci-PFcFe.js";import{t as te}from"./plus-CsnjfkmX.js";import{t as V}from"./rotate-ccw-Wh4id13q.js";import{t as ne}from"./search-Cq_gE3Ik.js";import{t as re}from"./trash-2-BOU3WdZZ.js";import{t as H}from"./triangle-alert-H9T4jAmh.js";import{n as ie,t as ae}from"./jira-api-C94VNHNY.js";import{t as oe}from"./x-CBMI9ejn.js";import{t as se}from"./zap-CHo3aCD1.js";import{F as ce,I as le,P as ue,a as de,i as fe,l as pe,o as me,r as he,t as ge}from"./dialog-CMgps2MY.js";import{t as U}from"./utils-BC4DHlz2.js";import{n as W,t as _e}from"./lib-CGdyxIWg.js";import{t as ve}from"./formatDistanceToNow-DlQY1Lm_.js";import{t as G}from"./button-D1xExSTF.js";import{t as ye}from"./RepositoryScopeSelector-DrtPqvc_.js";function be(e=``){return e||(typeof window<`u`&&(`__TAURI_INTERNALS__`in window||window.location.hostname===`tauri.localhost`)||typeof window<`u`&&window.location.protocol!==`http:`&&window.location.protocol!==`https:`?`ws://127.0.0.1:4200`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`)}var xe=be(),Se=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_TERMINAL_PANEL;return typeof e!=`string`||e!==`false`})(),Ce=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENTS_SECTION;return typeof e!=`string`||e!==`false`})(),we=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_CODE_EXPLORER;return typeof e!=`string`||e!==`false`})(),Te=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_JIRA;return typeof e!=`string`||e!==`false`})(),Ee=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MCP;return typeof e!=`string`||e!==`false`})(),De=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_CHAT;return typeof e!=`string`||e!==`false`})(),Oe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_MODE;return De&&(typeof e!=`string`||e!==`false`)})();(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_INTERACTIVE_JOBS;return typeof e!=`string`||e!==`false`})();var ke=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOOPS_SECTION;return typeof e!=`string`||e!==`false`})(),Ae=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NATIVE_BROWSER;return typeof e!=`string`||e!==`false`})(),je=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_PROJECT_BUILDER;return typeof e!=`string`||e!==`false`})(),Me=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_REVIEW_PACKET;return typeof e!=`string`||e!==`false`})(),Ne=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NARRATED_PROGRESS;return typeof e!=`string`||e!==`false`})(),Pe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOCAL_ENGINES;return typeof e!=`string`||e!==`false`})();function Fe(){return Pe}var Ie=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MISSION_RAIL_CARDS;return typeof e!=`string`||e!==`false`})(),Le=y(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Re=y(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),ze=y(`circle-arrow-right`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m12 16 4-4-4-4`,key:`1i9zcv`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}]]),Be=y(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),K=y(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),Ve=y(`columns-2`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M12 3v18`,key:`108xh3`}]]),He=y(`droplet`,[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]),Ue=y(`file-minus-corner`,[[`path`,{d:`M20 14V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12`,key:`l9p8hp`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),We=y(`file-plus-corner`,[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]]),Ge=y(`git-commit-horizontal`,[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`line`,{x1:`3`,x2:`9`,y1:`12`,y2:`12`,key:`1dyftd`}],[`line`,{x1:`15`,x2:`21`,y1:`12`,y2:`12`,key:`oup4p8`}]]),Ke=y(`git-pull-request-arrow`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M5 9v12`,key:`ih889a`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}]]),qe=y(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),Je=y(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),Ye=y(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),Xe=y(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),Ze=y(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),Qe=y(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),$e=y(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),et=y(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),q=y(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),tt=y(`split`,[[`path`,{d:`M16 3h5v5`,key:`1806ms`}],[`path`,{d:`M8 3H3v5`,key:`15dfkv`}],[`path`,{d:`M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3`,key:`1qrqzj`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}]]),nt=y(`ticket`,[[`path`,{d:`M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z`,key:`qn84l0`}],[`path`,{d:`M13 5v2`,key:`dyzc3o`}],[`path`,{d:`M13 17v2`,key:`1ont0d`}],[`path`,{d:`M13 11v2`,key:`1wjjxi`}]]),rt=y(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),it=y(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),J=y(`zoom-in`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),at=y(`zoom-out`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),ot=new Map,st=2e3;function ct(e){ot.set(e,(ot.get(e)??0)+1)}function lt(e){(ot.get(e)??0)<=0||setTimeout(()=>{let t=(ot.get(e)??0)-1;t<=0?ot.delete(e):ot.set(e,t)},st)}function ut(e){return e?(ot.get(e)??0)>0:!1}var Y=e(t(),1),dt=3e3,ft=`
3
+
4
+ ---
5
+
6
+ ## Contract Layer
7
+
8
+ `;function pt(e){return`${f}/api/projects/${encodeURIComponent(e)}`}function mt(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ht(e,t){let n=new Map(e.map(e=>[e.id,e])),r=t.map(e=>{let t=n.get(e.id);return t&&mt(t,e)?t:e});return r.length===e.length&&r.every((t,n)=>t===e[n])?e:r}function gt(){let{t:e}=v(`tickets`),{activeProjectId:t}=x(),[n,r]=(0,Y.useState)([]),[i,a]=(0,Y.useState)(!1),[o,s]=(0,Y.useState)(null),[c,l]=(0,Y.useState)(new Set),[u,d]=(0,Y.useState)(new Set),f=(0,Y.useRef)(t);f.current=t;let p=(0,Y.useRef)(0),h=(0,Y.useRef)(null),g=(0,Y.useRef)(new Set),{registerHandler:_,unregisterHandler:y,connectionStatus:b}=m(),C=(0,Y.useId)(),w=(0,Y.useCallback)(async(e,t)=>{let n=pt(e),r=await fetch(`${n}/tickets`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Failed to fetch tickets: ${r.status}`);let i=await r.json();return Array.isArray(i)?i:i.tickets??[]},[]),T=(0,Y.useCallback)(async(t,n)=>{let i=++p.current;h.current?.abort();let o=new AbortController;h.current=o,f.current===t&&(a(!0),s(null));try{let a=await w(t,o.signal);if(o.signal.aborted||i!==p.current||f.current!==t)return;let s=g.current,c=new Set;if(n===`merge`)for(let e of a)s.size>0&&!s.has(e.id)&&c.add(e.id);g.current=new Set(a.map(e=>e.id)),r(n===`replace`?a:e=>ht(e,a)),c.size>0&&s.size>0&&(l(c),S.success(e(`toasts.newTicketsAdded`,{count:c.size}),{id:`tickets-added-${t}`}),setTimeout(()=>{f.current===t&&l(e=>{let t=new Set(e);for(let e of c)t.delete(e);return t})},dt))}catch(e){if(o.signal.aborted||i!==p.current||f.current!==t)return;s(e instanceof Error?e.message:String(e))}finally{i===p.current&&(h.current===o&&(h.current=null),f.current===t&&a(!1))}},[w,e]),E=(0,Y.useCallback)(async()=>{t&&await T(t,`merge`)},[t,T]);(0,Y.useEffect)(()=>{if(p.current+=1,h.current?.abort(),h.current=null,r([]),a(!1),s(null),g.current=new Set,l(new Set),d(new Set),t)return T(t,`replace`),()=>{p.current+=1,h.current?.abort(),h.current=null}},[t,T]);let D=(0,Y.useCallback)(t=>{let n=t;if(!n||typeof n.type!=`string`)return;let i=f.current;if(!(n.projectId&&n.projectId!==i))switch(n.type){case`desktop.project_recovered`:n.projectId===i&&E();break;case`mcp.activity`:n.affectedProjectId&&n.affectedProjectId===i&&E();break;case`ticket_created`:{if(!n.ticket)break;let t=n.ticket;r(e=>e.some(e=>e.id===t.id)?e:[...e,t]),g.current.add(t.id),l(e=>new Set([...e,t.id])),ut(i)||S.success(e(`toasts.newTicket`,{title:t.title}),{id:`new-ticket-${t.id}`}),setTimeout(()=>{l(e=>{let n=new Set(e);return n.delete(t.id),n})},dt);break}case`ticket_updated`:{if(!n.ticket)break;if(n.ticket.id===0){E();break}let e=n.ticket;r(t=>t.map(t=>t.id===e.id?e:t)),typeof e.description==`string`&&e.description.includes(ft)&&d(t=>{if(!t.has(e.id))return t;let n=new Set(t);return n.delete(e.id),n});break}case`ticket_deleted`:{if(n.ticketId==null)break;let e=n.ticketId;r(t=>t.filter(t=>t.id!==e)),g.current.delete(e);break}case`explore.contract_refine_started`:if(n.ticketId==null)break;d(e=>new Set([...e,n.ticketId]));break;case`explore.contract_refine_failed`:{if(n.ticketId==null)break;let e=n.ticketId;d(t=>{if(!t.has(e))return t;let n=new Set(t);return n.delete(e),n});break}}},[E,e]);(0,Y.useLayoutEffect)(()=>(_(`tickets-${C}`,D),()=>y(`tickets-${C}`)),[D,_,y,C]);let O=(0,Y.useRef)(b);return(0,Y.useEffect)(()=>{O.current!==`connected`&&b===`connected`&&f.current&&E(),O.current=b},[b,E]),{tickets:n,loading:i,isLoading:i,error:o,newTicketIds:c,contractRefiningIds:u,refetch:E,refresh:E,deleteTicket:(0,Y.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${pt(n)}/tickets/${e}`,{method:`DELETE`});return t.ok&&f.current===n&&await T(n,`merge`),t.ok}catch{return!1}},[t,T]),updateTicketStatus:(0,Y.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${pt(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({status:n})});return t.ok&&f.current===r&&await T(r,`merge`),t.ok}catch{return!1}},[t,T]),updateTicketPriority:(0,Y.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${pt(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({priority:n})});return t.ok&&f.current===r&&await T(r,`merge`),t.ok}catch{return!1}},[t,T]),createTicket:(0,Y.useCallback)(async e=>{let n=t;if(!n)return!1;try{let t=await fetch(`${pt(n)}/tickets`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});return t.ok&&f.current===n&&await T(n,`merge`),t.ok}catch{return!1}},[t,T]),updateTicket:(0,Y.useCallback)(async(e,n)=>{let r=t;if(!r)return!1;try{let t=await fetch(`${pt(r)}/tickets/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});return t.ok&&f.current===r&&await T(r,`merge`),t.ok}catch{return!1}},[t,T])}}function _t(e,t){let n=()=>h(t?.in,NaN),r=t?.additionalDigits??2,i=St(e),a;if(i.date){let e=Ct(i.date,r);a=wt(e.restDateString,e.year)}if(!a||isNaN(+a))return n();let o=+a,s=0,c;if(i.time&&(s=Et(i.time),isNaN(s)))return n();if(i.timezone){if(c=Ot(i.timezone),isNaN(c))return n()}else{let e=new Date(o+s),n=g(0,t?.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return g(o+s+c,t?.in)}var vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},yt=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,bt=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,xt=/^([+-])(\d{2})(?::?(\d{2}))?$/;function St(e){let t={},n=e.split(vt.dateTimeDelimiter),r;if(n.length>2)return t;if(/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],vt.timeZoneDelimiter.test(t.date)&&(t.date=e.split(vt.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length))),r){let e=vt.timezone.exec(r);e?(t.time=r.replace(e[1],``),t.timezone=e[1]):t.time=r}return t}function Ct(e,t){let n=RegExp(`^(?:(\\d{4}|[+-]\\d{`+(4+t)+`})|(\\d{2}|[+-]\\d{`+(2+t)+`})$)`),r=e.match(n);if(!r)return{year:NaN,restDateString:``};let i=r[1]?parseInt(r[1]):null,a=r[2]?parseInt(r[2]):null;return{year:a===null?i:a*100,restDateString:e.slice((r[1]||r[2]).length)}}function wt(e,t){if(t===null)return new Date(NaN);let n=e.match(yt);if(!n)return new Date(NaN);let r=!!n[4],i=Tt(n[1]),a=Tt(n[2])-1,o=Tt(n[3]),s=Tt(n[4]),c=Tt(n[5])-1;if(r)return Pt(t,s,c)?kt(t,s,c):new Date(NaN);{let e=new Date(0);return!Mt(t,a,o)||!Nt(t,i)?new Date(NaN):(e.setUTCFullYear(t,a,Math.max(i,o)),e)}}function Tt(e){return e?parseInt(e):1}function Et(e){let t=e.match(bt);if(!t)return NaN;let n=Dt(t[1]),r=Dt(t[2]),i=Dt(t[3]);return Ft(n,r,i)?n*l+r*c+i*1e3:NaN}function Dt(e){return e&&parseFloat(e.replace(`,`,`.`))||0}function Ot(e){if(e===`Z`)return 0;let t=e.match(xt);if(!t)return 0;let n=t[1]===`+`?-1:1,r=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;return It(r,i)?n*(r*l+i*c):NaN}function kt(e,t,n){let r=new Date(0);r.setUTCFullYear(e,0,4);let i=r.getUTCDay()||7,a=(t-1)*7+n+1-i;return r.setUTCDate(r.getUTCDate()+a),r}var At=[31,null,31,30,31,30,31,31,30,31,30,31];function jt(e){return e%400==0||e%4==0&&e%100!=0}function Mt(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(At[t]||(jt(e)?29:28))}function Nt(e,t){return t>=1&&t<=(jt(e)?366:365)}function Pt(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}function Ft(e,t,n){return e===24?t===0&&n===0:n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}function It(e,t){return t>=0&&t<=59}async function Lt(e,t,n){let r=new FormData;r.append(`file`,t);let i=await fetch(`${b()}/tickets/${e}/attachments`,{method:`POST`,body:r,signal:n});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??d.t(`attachments:errors.uploadFailed`,{status:i.status}))}return(await i.json()).attachment}async function Rt(e,t){let n=await fetch(`${b()}/tickets/${e}/attachments/${t}`,{method:`DELETE`});if(!n.ok&&n.status!==404)throw Error(d.t(`attachments:errors.deleteFailed`,{status:n.status}))}async function zt(e){let t=await fetch(`${b()}/tickets/${e}/attachments`,{method:`DELETE`});if(!t.ok&&t.status!==404)throw Error(d.t(`attachments:errors.bulkDeleteFailed`,{status:t.status}))}async function Bt(e){let t=await fetch(`${b()}/tickets/${e}/attachments`);if(!t.ok)throw Error(d.t(`attachments:errors.listFailed`,{status:t.status}));return(await t.json()).attachments}function Vt(e,t){return`${b()}/tickets/${e}/attachments/${t}`}async function Ht(e,t){let n=await fetch(Vt(e,t));if(!n.ok)throw Error(d.t(`attachments:errors.fetchFailed`,{status:n.status}));return n.blob()}var Ut=`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/csv,text/plain,application/json,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/sql,application/x-sql,text/sql,text/x-sql,.sql`,Wt=new Set(Ut.split(`,`).filter(e=>!e.startsWith(`.`))),Gt=/\.sql$/i,Kt=/\.(png|jpe?g|gif|webp)$/i;function qt(e){return Wt.has(e.type)||Gt.test(e.name)||Kt.test(e.name)}var X=n();function Jt({ticketKey:e,attachment:t,onClose:n}){let{t:r}=v(`attachments`),[i,a]=(0,Y.useState)(null),[o,s]=(0,Y.useState)(null);if((0,Y.useEffect)(()=>{if(!t)return;function e(e){e.key===`Escape`&&n()}document.addEventListener(`keydown`,e);let r=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,e),document.body.style.overflow=r}},[t,n]),(0,Y.useEffect)(()=>{if(!t){a(null),s(null);return}let n=!1;return a(null),s(null),Ht(e,t.id).then(e=>{n||a(URL.createObjectURL(e))}).catch(e=>{n||s(e instanceof Error?e.message:r(`errors.loadFailed`))}),()=>{n=!0}},[t,e]),(0,Y.useEffect)(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),!t)return null;let c=t.mimeType.startsWith(`image/`),l=t.mimeType===`application/pdf`;return(0,X.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":r(`lightbox.preview`,{name:t.filename}),className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in-0 duration-200`,onClick:n,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-white/10 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,X.jsxs)(`button`,{type:`button`,onClick:n,"aria-label":r(`lightbox.backToDesktop`),className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-white/85 hover:bg-white/10 hover:text-white transition-colors`,children:[(0,X.jsx)(w,{className:`w-4 h-4`}),r(`common:actions.back`)]}),(0,X.jsxs)(`div`,{className:`flex-1 text-center min-w-0 px-4`,children:[(0,X.jsx)(`div`,{className:`text-sm font-medium text-white/95 truncate`,children:t.filename}),(0,X.jsx)(`div`,{className:`text-[11px] text-white/50`,children:t.mimeType})]}),(0,X.jsxs)(`a`,{href:i??`#`,download:t.filename,onClick:e=>{e.stopPropagation(),i||e.preventDefault()},className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-white/85 hover:bg-white/10 hover:text-white transition-colors`,"aria-label":r(`lightbox.download`),children:[(0,X.jsx)(P,{className:`w-4 h-4`}),r(`lightbox.download`)]})]}),(0,X.jsx)(`div`,{className:U(`flex-1 flex items-center justify-center overflow-auto p-6`),onClick:n,children:o?(0,X.jsx)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/80 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:(0,X.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loadError`,{error:o})})}):i?c?(0,X.jsx)(`img`,{src:i,alt:t.filename,onClick:e=>e.stopPropagation(),className:`max-h-full max-w-full rounded-lg shadow-2xl animate-in zoom-in-95 duration-200`}):l?(0,X.jsx)(`iframe`,{src:i,title:t.filename,onClick:e=>e.stopPropagation(),className:`w-full h-full max-w-5xl bg-white rounded-lg shadow-2xl`}):(0,X.jsxs)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/80 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:[(0,X.jsx)(`p`,{className:`text-sm mb-3`,children:r(`lightbox.previewUnavailable`)}),(0,X.jsxs)(`a`,{href:i,download:t.filename,className:`inline-flex items-center gap-2 px-4 py-2 rounded-md bg-white/10 hover:bg-white/20 text-white transition-colors`,children:[(0,X.jsx)(P,{className:`w-4 h-4`}),r(`lightbox.downloadFile`,{name:t.filename})]})]}):(0,X.jsx)(`div`,{onClick:e=>e.stopPropagation(),className:`text-center text-white/70 px-8 py-10 rounded-lg bg-white/5 border border-white/10`,children:(0,X.jsx)(`p`,{className:`text-sm`,children:r(`lightbox.loading`)})})})]})}function Yt(e,t){let n=new Set,r=[];for(let i of[...e,...t])n.has(i.id)||(n.add(i.id),r.push(i));return r}function Xt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Zt(e){return e.startsWith(`image/`)?`🖼`:e===`application/pdf`?`📄`:e===`text/csv`||e.includes(`spreadsheetml`)||e===`application/vnd.ms-excel`?`📊`:e===`application/json`?`{ }`:e===`text/plain`||e.includes(`sql`)?`📝`:`📎`}function Qt(e){try{return new Date(e).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}catch{return e}}function $t({ticketKey:e,attachments:t,onChange:n,className:r}){let{t:i}=v(`attachments`),[a,o]=(0,Y.useState)(new Set),[s,c]=(0,Y.useState)(null),[l,u]=(0,Y.useState)(null);if((0,Y.useEffect)(()=>{let r=!1;return Bt(e).then(e=>{if(r)return;let i=Yt(t,e);i.length!==t.length&&n?.(i)}).catch(()=>{}),()=>{r=!0}},[e]),!t||t.length===0)return null;let d=[...t].sort((e,t)=>e.addedAt<t.addedAt?1:-1);async function f(r){c(null),o(e=>{let t=new Set(e);return t.add(r.id),t});try{await Rt(e,r.id),await new Promise(e=>setTimeout(e,160)),n?.(t.filter(e=>e.id!==r.id))}catch(e){c(e instanceof Error?e.message:i(`errors.removeFailed`)),o(e=>{let t=new Set(e);return t.delete(r.id),t})}}return(0,X.jsxs)(`section`,{className:U(`mt-4`,r),"aria-label":i(`section.ariaLabel`),children:[(0,X.jsxs)(`header`,{className:`flex items-center justify-between mb-2`,children:[(0,X.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:i(`section.title`)}),(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:i(`section.fileCount`,{count:d.length})})]}),(0,X.jsx)(`ul`,{className:`flex flex-col gap-1`,children:d.map(e=>{let t=a.has(e.id);return(0,X.jsxs)(`li`,{className:U(`flex items-center gap-3 px-2.5 py-2 rounded-md border border-border bg-card/60 hover:bg-card transition-all duration-200`,t&&`opacity-0 scale-95 max-h-0 py-0 border-transparent overflow-hidden`),children:[(0,X.jsx)(`span`,{"aria-hidden":!0,className:`w-6 text-center text-sm shrink-0`,children:Zt(e.mimeType)}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>u(e),className:`flex-1 min-w-0 flex flex-col text-sm text-left hover:text-primary transition-colors`,children:[(0,X.jsx)(`span`,{className:`font-medium truncate text-foreground`,children:e.filename}),(0,X.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[Xt(e.size),` · `,Qt(e.addedAt)]})]}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>u(e),className:`text-[11px] text-primary hover:underline shrink-0`,children:i(`common:actions.open`)}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>f(e),"aria-label":i(`removeFile`,{name:e.filename}),disabled:t,className:`w-6 h-6 inline-flex items-center justify-center rounded text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50`,children:`×`})]},e.id)})}),s&&(0,X.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:s}),(0,X.jsx)(Jt,{ticketKey:e,attachment:l,onClose:()=>u(null)})]})}function en({ticketId:e,onClose:t}){let{t:n}=v(`code`),r=a(),{activeProjectId:i}=x(),o=`${i}:${e}`,s=(0,Y.useRef)(o);s.current=o;let c=(0,Y.useRef)(0),l=(0,Y.useRef)(null),[u,d]=(0,Y.useState)(null),[f,p]=(0,Y.useState)(!1),[m,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(null),y=(0,Y.useCallback)(async(t=null)=>{l.current?.abort();let n=new AbortController;l.current=n;let r=++c.current,i=()=>!n.signal.aborted&&c.current===r&&s.current===o;p(!0),h(!1),_(t);try{let r=new URLSearchParams({ticketId:String(e),limit:`50`});t&&r.set(`cursor`,t);let a=await fetch(`${b()}/code/activity?${r}`,{signal:n.signal});if(!a.ok)throw Error(`activity unavailable`);let s=await a.json();if(!Array.isArray(s.entries))throw Error(`invalid activity response`);if(!i())return;d(e=>{let n=t&&e?.scope===o?[...e.rows]:[],r=new Set(n.map(e=>`${e.repositoryId}\0${e.path}`));for(let e of s.entries){let t=`${e.repositoryId}\0${e.path}`;r.has(t)||(r.add(t),n.push(e))}return{scope:o,rows:n,nextCursor:s.nextCursor,truncated:!!s.truncated||!!t&&!!e?.truncated}})}catch{i()&&h(!0)}finally{i()&&p(!1)}},[o,e]);if((0,Y.useEffect)(()=>{if(we)return d(null),y(),()=>{l.current?.abort(),c.current++}},[y]),!we)return null;let S=u?.scope===o?u:null;return!f&&!m&&S&&!S.rows.length&&!S.truncated&&!S.nextCursor?null:(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:n(`ticketFiles.title`)}),f&&!S&&(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,role:`status`,children:n(`ticketFiles.loading`)}),m&&(0,X.jsxs)(`div`,{className:`text-xs`,role:`alert`,children:[(0,X.jsx)(`span`,{children:n(`ticketFiles.loadFailed`)}),` `,(0,X.jsx)(`button`,{type:`button`,onClick:()=>{y(g)},className:`underline`,children:n(`ticketFiles.retry`)})]}),S?.truncated&&(0,X.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[n(`ticketFiles.partial`),` `,(0,X.jsx)(`button`,{type:`button`,disabled:f,onClick:()=>{y()},className:`underline`,children:n(`ticketFiles.retry`)})]}),(0,X.jsx)(`ul`,{className:`space-y-1`,children:S?.rows.map(e=>(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{let n=new URLSearchParams({repositoryId:e.repositoryId,path:e.path});e.jobId&&n.set(`changeJobId`,e.jobId),t(),r(`/code?${n}`)},className:`w-full text-left flex items-center gap-2 rounded px-2 py-1 text-xs hover:bg-muted/40`,children:[(0,X.jsx)(e.kind===`created`?We:e.kind===`deleted`?Ue:M,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate max-w-24`,title:e.repositoryName,children:e.repositoryName}),(0,X.jsx)(`span`,{className:`font-mono truncate flex-1`,children:e.path}),e.jobId&&(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground font-mono shrink-0`,title:n(`ticketFiles.jobTitle`,{jobId:e.jobId}),children:[(0,X.jsx)(Ge,{className:`h-3 w-3`}),e.jobId.length>10?e.jobId.slice(0,10):e.jobId]}),(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wider shrink-0`,children:n(`kind.${e.kind}`)})]})},`${e.repositoryId}:${e.path}`))}),S?.nextCursor&&(0,X.jsx)(`button`,{type:`button`,disabled:f,onClick:()=>{y(S.nextCursor)},className:`text-xs underline mt-2`,children:n(f?`ticketFiles.loading`:`ticketFiles.loadMore`)})]})}var tn=8e3,nn=[`change-request`,`review-feedback`,`clarification`,`constraint`],rn=[`open`,`in_flight`,`applied`,`dismissed`],an=class extends Error{code;constructor(e,t){super(t),this.code=e,this.name=`SpecAddendumValidationError`}};function on(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function sn(e){return typeof e==`string`&&nn.includes(e)}function cn(e){return typeof e==`string`&&rn.includes(e)}function ln(e){if(!on(e))throw new an(`not_object`,`addendum must be an object`);if((e.version===void 0?1:e.version)!==1)throw new an(`unsupported_version`,`addendum.version must be 1`);let t=e.kind===void 0||e.kind===null?`change-request`:e.kind;if(!sn(t))throw new an(`invalid_kind`,`addendum.kind must be one of ${nn.join(`, `)}`);if(e.body!==void 0&&e.body!==null&&typeof e.body!=`string`)throw new an(`body_required`,`addendum.body must be a string`);let n=typeof e.body==`string`?e.body.replace(/\r\n?/g,`
9
+ `).trim():``;if(!n)throw new an(`body_required`,`addendum.body is required`);if(n.length>8e3)throw new an(`body_too_long`,`addendum.body exceeds ${tn} characters`);if(e.title!==void 0&&e.title!==null&&typeof e.title!=`string`)throw new an(`title_required`,`addendum.title must be a string`);let r=typeof e.title==`string`?e.title.replace(/\s+/g,` `).trim():``;if(r||=un(n),r.length>200)throw new an(`title_too_long`,`addendum.title exceeds 200 characters`);return{kind:t,title:r,body:n}}function un(e){let t=e.split(`
10
+ `).map(e=>e.replace(/^[\s#>*-]+/,``).trim()).find(e=>e.length>0)??`Addendum`;return t.length>120?`${t.slice(0,117).trimEnd()}…`:t}function dn(e){if(!on(e)||typeof e.id!=`string`||!e.id||typeof e.hash!=`string`||!e.hash)return null;let t;try{t=ln({version:e.version,kind:e.kind,title:e.title,body:e.body})}catch{return null}let n=cn(e.status)?e.status:`open`,r=e=>typeof e==`string`&&e?e:null;return{id:e.id,version:1,...t,status:n,hash:e.hash,created_at:r(e.created_at)??``,updated_at:r(e.updated_at)??r(e.created_at)??``,created_by:r(e.created_by)??`user`,origin_conversation_id:r(e.origin_conversation_id),run_id:r(e.run_id),applied_at:r(e.applied_at)}}function fn(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e){let e=dn(r);!e||n.has(e.id)||(n.add(e.id),t.push(e))}return t}function pn(e){return(e??[]).filter(e=>e.status===`open`)}var mn={"change-request":Ke,"review-feedback":Xe,clarification:Be,constraint:q},hn={open:`border-accent-primary/50 bg-accent-primary/10 text-accent-primary`,in_flight:`border-accent-info/50 bg-accent-info/10 text-accent-info animate-pulse`,applied:`border-accent-success/50 bg-accent-success/10 text-accent-success`,dismissed:`border-border bg-muted/30 text-muted-foreground`},gn=`prose prose-invert prose-xs max-w-none prose-p:my-1 prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-xs prose-headings:font-semibold prose-ul:my-1 prose-ol:my-1 prose-li:my-0 prose-code:text-cyan-300 prose-code:text-[10px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded text-foreground/80 text-xs`,_n={kind:`change-request`,title:``,body:``};function vn({ticket:e,onChanged:t}){let{t:n}=v(`tickets`),[r,i]=(0,Y.useState)(()=>fn(e.addenda)),[a,o]=(0,Y.useState)(null),[s,c]=(0,Y.useState)(null),[l,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(null),[m,h]=(0,Y.useState)(()=>new Set),g=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{i(fn(e.addenda))},[e.id,e.updated_at,e.addenda]),(0,Y.useEffect)(()=>{a&&g.current?.focus()},[a]);let _=(0,Y.useMemo)(()=>pn(r).length,[r]),y=`${b()}/tickets/${e.id}/addenda`,x=(0,Y.useCallback)(e=>{let n=e.ticket?fn(e.ticket.addenda):null;n&&(i(n),t?.(n))},[t]),C=(0,Y.useCallback)(async(e,t,r)=>{u(!0);try{let i=await fetch(t,{method:e,headers:r===void 0?void 0:{"Content-Type":`application/json`},body:r===void 0?void 0:JSON.stringify(r)}),a=await i.json().catch(()=>({}));return i.ok?(x(a),!0):(a.error===`addendum_in_flight`?S.info(n(`addenda.toast.inFlight`)):S.error(a.detail?`${n(`addenda.toast.failed`)}: ${a.detail}`:n(`addenda.toast.failed`)),!1)}catch{return S.error(n(`addenda.toast.failed`)),!1}finally{u(!1)}},[x,n]),w=()=>{c(null),o({..._n}),f(null)},T=e=>{c(e.id),o({kind:e.kind,title:e.title,body:e.body}),f(null)},E=()=>{o(null),c(null)},D=async()=>{if(!a||!a.body.trim())return;let e={kind:a.kind,title:a.title.trim()||void 0,body:a.body};(s?await C(`PATCH`,`${y}/${encodeURIComponent(s)}`,e):await C(`POST`,y,e))&&(S.success(n(s?`addenda.toast.updated`:`addenda.toast.added`)),E())},O=async(e,t,r=!1)=>{await C(`PATCH`,`${y}/${encodeURIComponent(e.id)}`,r?{status:t,force:!0}:{status:t})&&S.success(n(`addenda.toast.updated`))},k=async e=>{if(d!==e.id){f(e.id);return}f(null),await C(`DELETE`,`${y}/${encodeURIComponent(e.id)}`)&&S.success(n(`addenda.toast.removed`))},M=e=>h(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),N=e=>n(`addenda.who.${e===`agent`||e===`mcp`?e:`user`}`),P=e=>{let t=new Date(e);return Number.isNaN(t.getTime())?``:ve(t,{addSuffix:!0,locale:p()})},F=()=>a&&(0,X.jsxs)(`div`,{"data-testid":`spec-addenda-form`,className:`rounded-lg border border-accent-primary/30 bg-accent-primary/[0.04] px-3 py-2.5 space-y-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsxs)(`label`,{className:`flex items-center gap-1.5 text-[10px] text-muted-foreground`,children:[(0,X.jsx)(`span`,{className:`uppercase tracking-wider`,children:n(`addenda.form.kind`)}),(0,X.jsx)(`select`,{value:a.kind,onChange:e=>o({...a,kind:e.target.value}),className:`h-6 rounded-md border border-border/60 bg-input px-1.5 text-[11px] text-foreground outline-none focus:border-accent-primary/50`,"data-testid":`spec-addenda-kind`,children:nn.map(e=>(0,X.jsx)(`option`,{value:e,children:n(`addenda.kind.${e}`)},e))})]}),(0,X.jsx)(`input`,{value:a.title,onChange:e=>o({...a,title:e.target.value}),placeholder:n(`addenda.form.titlePlaceholder`),className:`h-6 min-w-0 flex-1 rounded-md border border-border/60 bg-input px-2 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/70 focus:border-accent-primary/50`,"data-testid":`spec-addenda-title`})]}),(0,X.jsx)(`textarea`,{ref:g,value:a.body,maxLength:8e3,onChange:e=>o({...a,body:e.target.value}),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),D()),e.key===`Escape`&&(e.preventDefault(),E())},placeholder:n(`addenda.form.bodyPlaceholder`),className:`w-full min-h-[96px] rounded-md border border-border/60 bg-input px-2.5 py-1.5 text-xs text-foreground outline-none placeholder:text-muted-foreground/70 focus:border-accent-primary/50 resize-y`,"data-testid":`spec-addenda-body`}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,X.jsx)(`span`,{className:`text-[9px] text-muted-foreground`,children:n(`addenda.form.hint`)}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(G,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px]`,onClick:E,disabled:l,children:n(`addenda.form.cancel`)}),(0,X.jsxs)(G,{size:`sm`,className:`h-6 text-[10px]`,onClick:()=>void D(),disabled:l||!a.body.trim(),"data-testid":`spec-addenda-save`,children:[l?(0,X.jsx)(ee,{className:`mr-1 h-3 w-3 animate-spin`}):(0,X.jsx)(j,{className:`mr-1 h-3 w-3`}),n(l?`addenda.form.saving`:`addenda.form.save`)]})]})]})]});return(0,X.jsxs)(`section`,{"data-testid":`spec-addenda-section`,className:`space-y-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,title:n(`addenda.hint`),children:[(0,X.jsx)(L,{className:`h-3 w-3`}),n(`addenda.title`),r.length>0&&(0,X.jsx)(`span`,{"data-testid":`spec-addenda-open-count`,className:`rounded-full border px-1.5 py-px text-[9px] font-semibold normal-case tracking-normal ${_>0?hn.open:`border-border text-muted-foreground`}`,children:_>0?n(`addenda.openCount`,{count:_}):r.length})]}),!a&&(0,X.jsxs)(`button`,{type:`button`,onClick:w,className:`flex items-center gap-1 text-[10px] text-muted-foreground transition-colors hover:text-foreground`,"data-testid":`spec-addenda-add`,children:[(0,X.jsx)(te,{className:`h-2.5 w-2.5`}),n(`addenda.add`)]})]}),a&&!s&&F(),r.length===0&&!a?(0,X.jsx)(`button`,{type:`button`,onClick:w,className:`w-full rounded-lg border border-dashed border-border/40 bg-muted/10 px-3 py-3 text-left text-[11px] leading-relaxed text-muted-foreground transition-colors hover:bg-muted/20 hover:text-foreground`,"data-testid":`spec-addenda-empty`,children:n(`addenda.emptyCta`)}):(0,X.jsx)(`ul`,{className:`space-y-1.5`,children:r.map(e=>{let t=mn[e.kind],r=m.has(e.id),i=s===e.id&&a,o=e.status===`open`||e.status===`dismissed`,c=e.status===`open`||e.status===`applied`,u=e.status===`dismissed`||e.status===`applied`,p=e.status!==`in_flight`;return(0,X.jsx)(`li`,{"data-testid":`spec-addendum-${e.id}`,"data-status":e.status,className:`rounded-lg border px-3 py-2 transition-colors ${e.status===`dismissed`?`border-border/30 bg-muted/5 opacity-70`:`border-border/50 bg-muted/15`}`,children:i?F():(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(t,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-accent-primary/80`}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>M(e.id),className:`min-w-0 flex-1 text-left`,"aria-expanded":r,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,X.jsx)(`span`,{className:`text-xs font-medium text-foreground/90 ${e.status===`dismissed`?`line-through`:``}`,children:e.title}),(0,X.jsx)(`span`,{className:`rounded-full border border-border/50 px-1.5 py-px text-[9px] text-muted-foreground`,children:n(`addenda.kind.${e.kind}`)}),(0,X.jsx)(`span`,{className:`rounded-full border px-1.5 py-px text-[9px] font-medium ${hn[e.status]}`,title:n(`addenda.statusHint.${e.status}`),"data-testid":`spec-addendum-status`,children:n(`addenda.status.${e.status}`)})]}),!r&&(0,X.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-[11px] leading-snug text-muted-foreground`,children:e.body})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5`,children:[o&&(0,X.jsx)(`button`,{type:`button`,title:n(`addenda.actions.edit`),"aria-label":n(`addenda.actions.edit`),onClick:()=>T(e),disabled:l,className:`rounded p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground`,children:(0,X.jsx)(R,{className:`h-3 w-3`})}),e.status===`in_flight`&&(0,X.jsx)(`button`,{type:`button`,title:n(`addenda.actions.releaseHint`),"aria-label":n(`addenda.actions.release`),onClick:()=>void O(e,`open`,!0),disabled:l,className:`rounded p-1 text-muted-foreground/60 transition-colors hover:bg-muted/40 hover:text-foreground`,"data-testid":`spec-addendum-release`,children:(0,X.jsx)(V,{className:`h-3 w-3`})}),u&&(0,X.jsx)(`button`,{type:`button`,title:n(`addenda.actions.reopen`),"aria-label":n(`addenda.actions.reopen`),onClick:()=>void O(e,`open`),disabled:l,className:`rounded p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground`,children:(0,X.jsx)(V,{className:`h-3 w-3`})}),c&&(0,X.jsx)(`button`,{type:`button`,title:n(`addenda.actions.dismiss`),"aria-label":n(`addenda.actions.dismiss`),onClick:()=>void O(e,`dismissed`),disabled:l,className:`rounded p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground`,children:(0,X.jsx)(A,{className:`h-3 w-3`})}),p&&(d===e.id?(0,X.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,X.jsx)(`button`,{type:`button`,title:n(`addenda.actions.confirmDelete`),"aria-label":n(`addenda.actions.confirmDelete`),onClick:()=>void k(e),disabled:l,className:`rounded p-1 text-destructive transition-colors hover:bg-destructive/10`,children:(0,X.jsx)(j,{className:`h-3 w-3`})}),(0,X.jsx)(`button`,{type:`button`,"aria-label":n(`addenda.form.cancel`),onClick:()=>f(null),className:`rounded p-1 text-muted-foreground transition-colors hover:bg-muted/40`,children:(0,X.jsx)(oe,{className:`h-3 w-3`})})]}):(0,X.jsx)(`button`,{type:`button`,title:n(`addenda.actions.delete`),"aria-label":n(`addenda.actions.delete`),onClick:()=>void k(e),disabled:l,className:`rounded p-1 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive`,children:(0,X.jsx)(re,{className:`h-3 w-3`})}))]})]}),r&&(0,X.jsxs)(`div`,{className:`mt-2 space-y-1.5 pl-5`,children:[(0,X.jsx)(`div`,{className:gn,"data-testid":`spec-addendum-body`,children:(0,X.jsx)(W,{remarkPlugins:[_e],children:e.body})}),(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[9px] text-muted-foreground`,children:[(0,X.jsxs)(`span`,{children:[P(e.created_at),` · `,n(`addenda.meta.by`,{who:N(e.created_by)})]}),e.run_id&&(0,X.jsx)(`span`,{className:`font-mono`,children:n(`addenda.meta.run`,{id:e.run_id.slice(0,8)})}),e.applied_at&&(0,X.jsx)(`span`,{children:n(`addenda.meta.applied`,{when:P(e.applied_at)})}),(0,X.jsx)(`span`,{className:`font-mono`,children:n(`addenda.meta.hash`,{hash:e.hash.slice(0,12)})})]})]})]})},e.id)})})]})}function yn(e){return e<.005?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function bn(e){return e<1e3?`${e} ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`}function xn({ticketId:e}){let{t}=v(`tickets`),[n,r]=(0,Y.useState)(null),i=a(),{activeProjectId:o}=x(),{closeTicketDetail:s}=Zi();if((0,Y.useEffect)(()=>{let t=new AbortController;return r(null),fetch(`${b()}/tickets/${e}/spending-summary`,{signal:t.signal}).then(e=>e.ok?e.json():null).then(e=>{e&&r(e)}).catch(()=>{}),()=>t.abort()},[e,o]),!n||!n.bySurface||!n.totalRuns||n.totalRuns===0)return null;let c=Object.entries(n.bySurface).filter(([,e])=>e.count>0).map(([e,n])=>t(`spendingLine.breakdownItem`,{n:n.count,label:E[e].toLowerCase()})).join(` + `),l=n.unpricedRuns??0,u=n.pricedRuns??Math.max(0,n.totalRuns-l),d=l>0&&u===0,f=l>0&&u>0,p=n.turnsUnavailableRuns??0,m=n.totalTurns==null||p>0&&(n.turnsReportedRuns??0)===0,h=!m&&p>0;return(0,X.jsxs)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),s(),i(`/analytics?ticketId=${e}`)},className:`mt-1.5 group inline-flex items-center gap-1.5 text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,"aria-label":t(`spendingLine.ariaLabel`),children:[(0,X.jsx)(`span`,{className:`tabular-nums font-medium text-foreground`,"data-testid":d?`ticket-cost-unavailable`:void 0,title:d?t(`spendingLine.costUnavailableTooltip`):f?t(`spendingLine.costPartiallyUnavailableTooltip`):(n.estimatedCostUsd??0)>0?t(`spendingLine.estimatedTooltip`):void 0,children:d?`—`:`${(n.estimatedCostUsd??0)>0?`~`:``}${f?`≥`:``}${yn(n.totalCostUsd)}`}),(0,X.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,X.jsx)(`span`,{className:`tabular-nums`,"data-testid":m?`ticket-turns-unavailable`:void 0,title:m?t(`spendingLine.turnsUnavailableTooltip`):h?t(`spendingLine.turnsPartiallyUnavailableTooltip`):void 0,children:m?`—`:`${h?`≥`:``}${t(`spendingLine.turns`,{count:n.totalTurns})}`}),(0,X.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,X.jsx)(`span`,{className:`tabular-nums`,children:t(`spendingLine.active`,{duration:bn(n.activeDurationMs)})}),c&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`text-muted-foreground/60`,children:`·`}),(0,X.jsx)(`span`,{children:c})]}),(0,X.jsx)(Le,{className:`w-3 h-3 opacity-0 group-hover:opacity-100 transition-opacity`})]})}var Sn={draft:{dotClass:`bg-accent-secondary/60`,textClass:`text-accent-secondary`,borderClass:`border-l-[3px] border-dashed border-accent-secondary/50 pl-3`,labelKey:`common:status.draft`,pulsing:!1},todo:{dotClass:`bg-slate-500/70`,textClass:`text-muted-foreground`,borderClass:`border-l-[3px] border-dashed border-slate-500/40 pl-3`,labelKey:`status.todo`,pulsing:!1},in_progress:{dotClass:`bg-blue-400 aurora-light:bg-accent-info`,textClass:`text-foreground font-semibold`,borderClass:`border-l-[3px] border-solid border-blue-500 pl-3`,labelKey:`status.inProgress`,pulsing:!0},on_review:{dotClass:`bg-accent-warning/80`,textClass:`text-accent-warning`,borderClass:`border-l-[3px] border-solid border-accent-warning/60 pl-3`,labelKey:`status.onReview`,pulsing:!1},done:{dotClass:`text-emerald-400 aurora-light:text-accent-success`,textClass:`text-emerald-400/80 aurora-light:text-accent-success`,borderClass:`border-l-[3px] border-solid border-emerald-500 pl-3`,labelKey:`status.done`,pulsing:!1},cancelled:{dotClass:`text-red-400/60 aurora-light:text-destructive/70`,textClass:`text-muted-foreground/50`,borderClass:`pl-3`,labelKey:`status.cancelled`,pulsing:!1}};function Cn({status:e,className:t}){let{t:n}=v(`specs`),r=Sn[e];return e===`done`?(0,X.jsx)(j,{className:U(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.done`)}):e===`cancelled`?(0,X.jsx)(oe,{className:U(`w-3.5 h-3.5 shrink-0`,r.dotClass,t),"aria-label":n(`status.cancelled`)}):r.pulsing?(0,X.jsxs)(`span`,{className:U(`relative flex shrink-0 h-2.5 w-2.5`,t),"aria-label":n(`status.inProgress`),children:[(0,X.jsx)(`span`,{className:U(`animate-ping absolute inline-flex h-full w-full rounded-full opacity-60`,r.dotClass)}),(0,X.jsx)(`span`,{className:U(`relative inline-flex rounded-full h-2.5 w-2.5`,r.dotClass)})]}):(0,X.jsx)(`span`,{className:U(`inline-flex rounded-full h-2.5 w-2.5 shrink-0`,r.dotClass,t),"aria-label":n(r.labelKey)})}function wn({status:e,className:t}){let{t:n}=v(`specs`),r=Sn[e];return(0,X.jsxs)(`span`,{className:U(`inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[11px] font-medium border`,e===`todo`&&`bg-slate-500/10 border-slate-500/30 text-slate-400 aurora-light:bg-muted aurora-light:border-border aurora-light:text-muted-foreground`,e===`in_progress`&&`bg-blue-500/10 border-blue-500/30 text-blue-400 aurora-light:bg-accent-info/10 aurora-light:border-accent-info/30 aurora-light:text-accent-info`,e===`on_review`&&`bg-accent-warning/10 border-accent-warning/30 text-accent-warning`,e===`done`&&`bg-emerald-500/10 border-emerald-500/30 text-emerald-400 aurora-light:bg-accent-success/10 aurora-light:border-accent-success/30 aurora-light:text-accent-success`,e===`cancelled`&&`bg-red-500/10 border-red-500/30 text-red-400/60 aurora-light:bg-destructive/10 aurora-light:border-destructive/30 aurora-light:text-destructive/70`,t),children:[(0,X.jsx)(Cn,{status:e}),n(r.labelKey)]})}function Tn(){let{activeProjectId:e}=x(),[t,n]=(0,Y.useState)({connected:!1,key:null,discardStatus:null}),[r,i]=(0,Y.useState)(!0);return(0,Y.useEffect)(()=>{if(!Te||!e){n({connected:!1,key:null,discardStatus:null}),i(!1);return}let t=!1;return i(!0),ae.getConnection().then(e=>{if(t)return;let r=!!(e.connected&&e.connection?.enabled);n({connected:r,key:e.connection?.jiraProjectKey??null,discardStatus:r?e.connection?.discardStatus??null:null})}).catch(()=>{t||n({connected:!1,key:null,discardStatus:null})}).finally(()=>{t||i(!1)}),()=>{t=!0}},[e]),{connected:t.connected,jiraProjectKey:t.key,discardStatus:t.discardStatus,loading:r}}function En({open:e,onOpenChange:t,ticket:n,discardStatus:r,onDiscarded:i}){let{t:a}=v(`jira`),[o,s]=(0,Y.useState)(``),[c,l]=(0,Y.useState)(!1);async function u(){l(!0);try{await ae.discardSpec(n.id,o.trim()||null),S.success(a(`discard.movedToast`,{status:r,key:n.jira_key??`#${n.id}`})),t(!1),s(``),i?.()}catch(e){S.error(e instanceof Error?e.message:a(`errors.generic`))}finally{l(!1)}}return(0,X.jsx)(ge,{open:e,onOpenChange:e=>{c||t(e)},children:(0,X.jsxs)(he,{movableResizable:!0,className:`max-w-md`,"data-testid":`jira-discard-dialog`,children:[(0,X.jsxs)(me,{children:[(0,X.jsx)(pe,{children:a(`discard.title`,{status:r})}),(0,X.jsx)(fe,{children:a(`discard.body`,{status:r,key:n.jira_key??`#${n.id}`})})]}),(0,X.jsxs)(`label`,{className:`block space-y-1`,children:[(0,X.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:a(`discard.commentLabel`)}),(0,X.jsx)(`textarea`,{value:o,onChange:e=>s(e.target.value),placeholder:a(`discard.commentPlaceholder`),rows:3,className:`w-full rounded-md border border-border bg-input px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground resize-none`,"data-testid":`jira-discard-comment`})]}),(0,X.jsxs)(de,{children:[(0,X.jsx)(G,{variant:`outline`,size:`sm`,onClick:()=>t(!1),disabled:c,children:a(`wizard.cancel`)}),(0,X.jsxs)(G,{size:`sm`,onClick:u,disabled:c,"data-testid":`jira-discard-confirm`,children:[(0,X.jsx)(Le,{className:`w-3.5 h-3.5 mr-1.5`}),c?a(`discard.moving`):a(`discard.confirm`,{status:r})]})]})]})})}var Dn=/^\d{4}-\d{2}-\d{2}T/;function On(e){if(Dn.test(e))try{return{text:ve(_t(e),{addSuffix:!0,locale:p()}),title:e}}catch{}return{text:e}}function kn({localId:e}){let{t}=v(`jira`),{activeProjectId:n}=x(),r=Tn(),[i,a]=(0,Y.useState)(null);if((0,Y.useEffect)(()=>{if(!Te||!r.connected)return;let t=!1;return a(null),ae.getSpecDetails(e).then(e=>{t||a(e)}).catch(()=>{t||a(null)}),()=>{t=!0}},[e,n,r.connected]),!Te||!r.connected||!i)return null;let s=i.development,c=i.fields.length>0,l=s.pullRequests.length>0,u=s.branches.length>0,d=(s.commits?.length??0)>0;return!c&&!l&&!u&&!d?null:(0,X.jsxs)(`div`,{className:`space-y-4`,"data-testid":`jira-details-panel`,children:[c&&(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.detailsTitle`)}),(0,X.jsx)(`div`,{className:`space-y-1.5`,children:i.fields.map((e,t)=>{let n=On(e.value);return(0,X.jsxs)(`div`,{className:`text-xs`,children:[(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block`,children:e.label}),e.href?(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{o(e.href)},className:`inline-flex items-center gap-1 text-accent-info hover:underline text-left`,children:[(0,X.jsx)(`span`,{className:`truncate`,children:e.value}),(0,X.jsx)(F,{className:`w-3 h-3 shrink-0`})]}):(0,X.jsx)(`span`,{className:`text-foreground/80 whitespace-pre-line`,title:n.title,children:n.text})]},`${e.label}-${t}`)})})]}),(l||u||d)&&(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:t(`detail.developmentTitle`)}),l&&(0,X.jsxs)(`div`,{className:`mb-2`,children:[(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.pullRequests`)}),(0,X.jsx)(`div`,{className:`space-y-1`,children:s.pullRequests.map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{o(e.url)},className:`w-full flex items-start gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-pr`,children:[(0,X.jsx)(qe,{className:`w-3 h-3 mt-0.5 shrink-0 text-accent-info`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`span`,{className:`truncate text-foreground/80 block`,children:e.title}),(0,X.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[e.status,e.sourceBranch?` · ${e.sourceBranch} → ${e.destBranch??``}`:``]})]})]},e.url))})]}),u&&(0,X.jsxs)(`div`,{className:`mb-2`,children:[(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.branches`)}),(0,X.jsx)(`div`,{className:`space-y-1`,children:s.branches.map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{o(e.url)},className:`w-full flex items-center gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-branch`,children:[(0,X.jsx)(I,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,X.jsx)(`span`,{className:`truncate font-mono text-foreground/80`,children:e.name}),e.repo&&(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate`,children:e.repo})]},e.url))})]}),d&&(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground uppercase tracking-wide block mb-1`,children:t(`detail.dev.commits`)}),(0,X.jsx)(`div`,{className:`space-y-1`,children:s.commits.map(e=>(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{o(e.url)},className:`w-full flex items-center gap-1.5 text-left text-xs hover:bg-accent-info/10 rounded px-1 py-0.5`,"data-testid":`jira-dev-commit`,children:[(0,X.jsx)(Ge,{className:`w-3 h-3 shrink-0 text-accent-info`}),(0,X.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground shrink-0`,children:e.displayId}),(0,X.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.message})]},e.url))})]})]})]})}var An=/\n*##\s*Acceptance Criteria\s*\n([\s\S]*?)(?=\n##\s|\n*$)/i;function jn(e){if(!e)return{body:``,criteria:[]};let t=An.exec(e);if(!t)return{body:e.replace(/\s+$/,``),criteria:[]};let n=t[1],r=e.slice(0,t.index),i=e.slice(t.index+t[0].length),a=`${r.replace(/\s+$/,``)}${i?`\n\n${i.replace(/^\s+/,``)}`:``}`,o=n.split(/\r?\n/).map(e=>e.replace(/^\s*[-*+]\s+/,``).trim()).filter(e=>e.length>0);return{body:a.replace(/\s+$/,``),criteria:o}}var Mn=new Set([`draft`,`todo`]);function Nn(e){return!!(Mn.has(e.status)||e.source===`jira`&&e.jira_key&&e.status!==`cancelled`)}function Pn(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function Fn(){let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_BROWSER_CAPTURE;return typeof e!=`string`||e!==`false`}var In={desktop:{width:1280,height:800},tablet:{width:768,height:1024},mobile:{width:375,height:667}},Ln=class extends Error{},Rn=class extends Error{};function zn(e){if(!e)throw Error(`A project owner is required for browser sessions`);return`${f}/api/projects/${encodeURIComponent(e)}`}async function Bn(e,t){let n=await fetch(`${zn(e)}/browser/sessions`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({initialUrl:t})});if(n.status===409)throw new Ln(`Too many open browser sessions`);if(n.status===502)throw new Rn(`The browser failed to launch`);if(!n.ok)throw Error(`Failed to open browser (${n.status})`);return(await n.json()).session}async function Vn(e,t,n,r){let i=await fetch(`${zn(e)}/browser/sessions/${t}/navigate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:n,url:r})});if(!i.ok)throw Error(`Navigation failed (${i.status})`);return await i.json()}async function Hn(e,t,n,r,i){let a=await fetch(`${zn(e)}/browser/sessions/${t}/capture`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({rect:n,pendingSpecId:r,captureNetwork:i?.captureNetwork??!0})});if(!a.ok)throw Error(await Un(a));return await a.json()}async function Un(e){let t=await e.json().then(e=>e.error).catch(()=>void 0);return t?`Capture failed (${e.status}): ${t}`:`Capture failed (${e.status})`}async function Wn(e,t,n,r,i,a=In){let o=await fetch(`${zn(e)}/browser/sessions/${t}/capture-breakpoints`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({rect:n,anchorPoint:r,pendingSpecId:i,breakpoints:a})});if(!o.ok)throw Error(await Un(o));return await o.json()}async function Gn(e,t,n){let r=new FormData;r.append(`file`,t,n);let i=await fetch(`${b()}/tickets/${e}/attachments`,{method:`POST`,body:r});if(!i.ok)throw Error(`Upload failed (${i.status})`);return(await i.json()).attachment}async function Kn(e,t,n,r){let i=await fetch(`${zn(e)}/browser/sessions/${t}/clipboard`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:n,text:r})});if(!i.ok)throw Error(`Clipboard failed (${i.status})`);return await i.json()}async function qn(e,t,n,r){let i=await fetch(`${zn(e)}/browser/sessions/${t}/element`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({selector:n,direction:r})});if(!i.ok)throw Error(`Element navigate failed (${i.status})`);return(await i.json()).probe}async function Jn(e,t,n){let r=await fetch(`${zn(e)}/browser/sessions/${t}/popup-view`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({target:n})});if(!r.ok)throw Error(`Could not switch browser view (${r.status})`)}function Yn(e){if(!e||e===`about:blank`)return`…`;try{return new URL(e).hostname||`…`}catch{return`…`}}async function Xn(e,t){try{await fetch(`${zn(e)}/browser/sessions/${t}`,{method:`DELETE`})}catch{}}function Zn(e,t){return`${xe||(typeof window<`u`?`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`:`ws://localhost:4200`)}/ws/browser/${e}?projectId=${encodeURIComponent(t)}`}function Qn(e,t){let n=Zn(e,t),r=u(),i=r?new WebSocket(n,[`specrails-desktop`,r]):new WebSocket(n);return i.binaryType=`arraybuffer`,i}function $n(e,t=e=>requestAnimationFrame(e),n=e=>cancelAnimationFrame(e)){let r=null,i=null,a=null,o=!1,s=()=>{a!=null&&(n(a),a=null);let t=r,o=i;r=null,i=null,t&&(!o||t.x!==o.x||t.y!==o.y)&&e({type:`mouse`,action:`move`,x:t.x,y:t.y}),o&&e({type:`wheel`,x:o.x,y:o.y,deltaX:o.deltaX,deltaY:o.deltaY})},c=()=>{a==null&&!o&&(a=t(()=>{a=null,s()}))};return{move(e,t){o||(r={x:e,y:t},c())},wheel(e,t,n,r){o||(i?(i.x=e,i.y=t,i.deltaX+=n,i.deltaY+=r):i={x:e,y:t,deltaX:n,deltaY:r},c())},flush(){o||s()},dispose(){o||(o=!0,a!=null&&(n(a),a=null),r=null,i=null)}}}function er(e,t,n){let r=t.width>0?(e.x-t.left)/t.width:0,i=t.height>0?(e.y-t.top)/t.height:0,a=Math.min(Math.max(r,0),1)*n.width,o=Math.min(Math.max(i,0),1)*n.height;return{x:Math.round(a),y:Math.round(o)}}function tr(e,t,n){let r=n.width>0?t.width/n.width:0,i=n.height>0?t.height/n.height:0;return{left:t.left+e.x*r,top:t.top+e.y*i,width:e.width*r,height:e.height*i}}function nr(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(e.x-t.x),height:Math.abs(e.y-t.y)}}function rr(e,t=8){return e.width>=t&&e.height>=t}function ir(e,t){let n=Math.max(1,t.width),r=Math.max(1,t.height),i=Math.max(0,Math.min(e.x,n-1)),a=Math.max(0,Math.min(e.y,r-1)),o=Math.min(n,Math.max(i+1,e.x+e.width)),s=Math.min(r,Math.max(a+1,e.y+e.height));return{x:Math.round(i),y:Math.round(a),width:Math.round(o-i),height:Math.round(s-a)}}function ar(e){return{nodeCount:e.nodes.length,htmlBytes:e.html.length,truncated:e.htmlTruncated,networkCount:e.networkRequests?.length??0}}function or(e,t){let n=e.indexOf(`,`);if(!e.startsWith(`data:`)||n===-1)throw Error(`dataUrlToFile: not a data URL`);let r=e.slice(0,n),i=/^data:([^;,]+)/.exec(r)?.[1]||`application/octet-stream`,a=e.slice(n+1);if(/;base64$/i.test(r)){let e=atob(a),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return new File([n],t,{type:i})}return new File([decodeURIComponent(a)],t,{type:i})}var sr={objects:[],past:[],future:[]};function cr(e,t){switch(t.type){case`add`:return{objects:[...e.objects,t.obj],past:[...e.past,e.objects],future:[]};case`delete`:return e.objects.some(e=>e.id===t.id)?{objects:e.objects.filter(e=>e.id!==t.id),past:[...e.past,e.objects],future:[]}:e;case`undo`:return e.past.length===0?e:{objects:e.past[e.past.length-1],past:e.past.slice(0,-1),future:[e.objects,...e.future]};case`redo`:return e.future.length===0?e:{objects:e.future[0],past:[...e.past,e.objects],future:e.future.slice(1)};case`clear`:return e.objects.length===0?e:{objects:[],past:[...e.past,e.objects],future:[]};default:return e}}function lr(e){let t=e.filter(e=>e.kind===`step`).map(e=>e.n);return t.length===0?1:Math.max(...t)+1}function ur(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),w:Math.abs(e.x-t.x),h:Math.abs(e.y-t.y)}}function dr(e,t,n=.04){let r=Math.atan2(t.y-e.y,t.x-e.x),i=r-Math.PI/7,a=r+Math.PI/7;return{left:{x:t.x-n*Math.cos(i),y:t.y-n*Math.sin(i)},right:{x:t.x-n*Math.cos(a),y:t.y-n*Math.sin(a)}}}function fr(e,t,n=.01){return Math.abs(e.x-t.x)>=n||Math.abs(e.y-t.y)>=n}function pr(e,t=.05){let n=e=>Math.min(1+t,Math.max(-t,e));return{x:n(e.x),y:n(e.y)}}function mr(e,t,n){return{schemaVersion:1,objects:e,baseWidth:t,baseHeight:n}}function hr({result:e,pendingSpecId:t,onConfirm:n,...r}){let i=(0,Y.useCallback)(async r=>{if(!r.annotations){await n(e);return}let i=`screen-annotated-${Date.now()}.png`,a=await Gn(t,or(r.screenshotDataUrl,i),i);await n({...e,rawScreenshot:e.screenshot,screenshot:a,screenshotDataUrl:r.screenshotDataUrl,annotations:r.annotations,...e.breakpoints?{breakpoints:Object.fromEntries(Object.entries(e.breakpoints).map(([t,n])=>[t,n.attachment.id===e.screenshot.id?{...n,attachment:a,dataUrl:r.screenshotDataUrl}:n]))}:{}})},[n,t,e]);return(0,X.jsx)(xr,{...r,responsive:Object.keys(e.breakpoints??{}).length>1,screenshotDataUrl:e.screenshotDataUrl,onConfirm:i})}var gr=[`#ef4444`,`#f59e0b`,`#3b82f6`,`#22c55e`,`#ffffff`],_r=`#111827`,vr=[{tool:`arrow`,icon:D,labelKey:`editor.tools.arrow`,key:`a`},{tool:`box`,icon:B,labelKey:`editor.tools.box`,key:`r`},{tool:`text`,icon:rt,labelKey:`editor.tools.text`,key:`t`},{tool:`blur`,icon:He,labelKey:`editor.tools.blur`,key:`b`},{tool:`step`,icon:Ye,labelKey:`editor.tools.step`,key:`n`}],yr=0,br=()=>`a${++yr}-${Date.now().toString(36)}`;function xr({screenshotDataUrl:e,responsive:t,macOverlay:n,confirmLabel:r,onConfirm:i,onReselect:a,onCancel:o}){let{t:s}=v(`browser`),[c,l]=(0,Y.useReducer)(cr,sr),[u,d]=(0,Y.useState)(`arrow`),[f,p]=(0,Y.useState)(gr[0]),[m,h]=(0,Y.useState)(null),[g,_]=(0,Y.useState)({w:1,h:1}),[y,b]=(0,Y.useState)(!1),[x,S]=(0,Y.useState)(!1),C=(0,Y.useRef)(!1),T=(0,Y.useRef)(null),E=(0,Y.useRef)(null),D=c.objects,O=(0,Y.useCallback)(()=>{let e=T.current;if(!e)return;let t=E.current?.getBoundingClientRect();if(!t||t.width<=0||t.height<=0||e.naturalWidth<=0||e.naturalHeight<=0)return;let n=Math.min(1,t.width/e.naturalWidth,t.height/e.naturalHeight),r=e.naturalWidth*n,i=e.naturalHeight*n;_(e=>e.w===r&&e.h===i?e:{w:r,h:i})},[]);(0,Y.useEffect)(()=>{O();let e=typeof ResizeObserver>`u`?null:new ResizeObserver(O);return E.current&&e?.observe(E.current),window.addEventListener(`resize`,O),()=>{e?.disconnect(),window.removeEventListener(`resize`,O)}},[O]);let k=(0,Y.useCallback)((e,t)=>{let n=T.current;if(!n)return{x:0,y:0};let r=n.getBoundingClientRect();return pr({x:r.width>0?(e-r.left)/r.width:0,y:r.height>0?(t-r.top)/r.height:0})},[]),A=(0,Y.useCallback)(e=>{if(y)return;e.target.setPointerCapture?.(e.pointerId);let t=k(e.clientX,e.clientY);if(u===`text`){let e=window.prompt(s(`editor.notePrompt`))?.trim();e&&l({type:`add`,obj:{id:br(),kind:`text`,x:t.x,y:t.y,text:e,color:f}});return}if(u===`step`){l({type:`add`,obj:{id:br(),kind:`step`,x:t.x,y:t.y,n:lr(D),color:f}});return}h({start:t,cur:t})},[y,u,f,D,k,s]),M=(0,Y.useCallback)(e=>{m&&h(t=>t&&{...t,cur:k(e.clientX,e.clientY)})},[m,k]),N=(0,Y.useCallback)(()=>{if(!m)return;let{start:e,cur:t}=m;if(h(null),fr(e,t)){if(u===`arrow`)l({type:`add`,obj:{id:br(),kind:`arrow`,from:e,to:t,color:f}});else if(u===`box`){let n=ur(e,t);l({type:`add`,obj:{id:br(),kind:`box`,...n,color:f}})}else if(u===`blur`){let n=ur(e,t);l({type:`add`,obj:{id:br(),kind:`blur`,...n}})}}},[m,u,f]),P=(0,Y.useCallback)(()=>{let e=T.current;if(!e||!e.naturalWidth||!e.naturalHeight)throw Error(`Capture image is not loaded`);let t=e.naturalWidth,n=e.naturalHeight,r=document.createElement(`canvas`);r.width=t,r.height=n;let i=r.getContext(`2d`);if(!i)throw Error(`Image rendering is unavailable`);i.drawImage(e,0,0,t,n);for(let e of D)e.kind===`blur`&&(i.fillStyle=_r,i.fillRect(e.x*t,e.y*n,e.w*t,e.h*n));let a=Math.max(2,t*.004);for(let e of D)if(e.kind===`box`)i.strokeStyle=e.color,i.lineWidth=a,i.strokeRect(e.x*t,e.y*n,e.w*t,e.h*n);else if(e.kind===`arrow`){let r={x:e.from.x*t,y:e.from.y*n},o={x:e.to.x*t,y:e.to.y*n},s=dr(e.from,e.to,.035);i.strokeStyle=e.color,i.lineWidth=a,i.lineCap=`round`,i.beginPath(),i.moveTo(r.x,r.y),i.lineTo(o.x,o.y),i.moveTo(s.left.x*t,s.left.y*n),i.lineTo(o.x,o.y),i.lineTo(s.right.x*t,s.right.y*n),i.stroke()}else if(e.kind===`text`){let r=Math.max(12,n*.03);i.font=`600 ${r}px sans-serif`,i.textBaseline=`top`,i.lineWidth=Math.max(2,r*.18),i.strokeStyle=`rgba(0,0,0,0.55)`,i.strokeText(e.text,e.x*t,e.y*n),i.fillStyle=e.color,i.fillText(e.text,e.x*t,e.y*n)}else if(e.kind===`step`){let r=Math.max(10,n*.025);i.beginPath(),i.arc(e.x*t,e.y*n,r,0,Math.PI*2),i.fillStyle=e.color,i.fill(),i.fillStyle=`#000`,i.font=`700 ${r*1.1}px sans-serif`,i.textAlign=`center`,i.textBaseline=`middle`,i.fillText(String(e.n),e.x*t,e.y*n),i.textAlign=`start`}let o=r.toDataURL(`image/png`);if(!o.startsWith(`data:image/png;base64,`))throw Error(`Image encoding failed`);return{screenshotDataUrl:o,annotations:mr(D,t,n)}},[D]),F=(0,Y.useCallback)(async()=>{if(!C.current){C.current=!0,b(!0),S(!1);try{await i(D.length===0?{screenshotDataUrl:e}:P())}catch{S(!0)}finally{C.current=!1,b(!1)}}},[D,P,e,i]),I=(0,Y.useCallback)(()=>{D.length>0&&!window.confirm(s(`editor.discardConfirm`))||o()},[D.length,o,s]);(0,Y.useEffect)(()=>{let e=e=>{if(y)return;let t=e.metaKey||e.ctrlKey;if(t&&e.key.toLowerCase()===`z`){e.preventDefault(),l({type:e.shiftKey?`redo`:`undo`});return}if(t&&e.key===`Enter`){e.preventDefault(),F();return}if(t)return;let n=vr.find(t=>t.key===e.key.toLowerCase());if(n){d(n.tool);return}e.key===`Escape`&&(e.preventDefault(),I())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y,F,I]);let L=(e,t)=>e*(t===`w`?g.w:g.h),R=m?ur(m.start,m.cur):null;return(0,X.jsxs)(`div`,{className:`flex-1 min-h-0 min-w-0 flex flex-col items-center overflow-hidden p-3 gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 max-w-full items-center gap-1 overflow-x-auto rounded-lg border border-border/60 bg-surface/90 px-1.5 py-1 shadow-xl ${n?`ml-[80px]`:``}`,children:[vr.map(({tool:e,icon:t,labelKey:n})=>(0,X.jsx)(`button`,{type:`button`,title:s(n),"aria-label":s(n),"aria-pressed":u===e,onClick:()=>d(e),className:`h-7 w-7 inline-flex items-center justify-center rounded transition-colors ${u===e?`bg-primary/15 text-primary`:`text-muted-foreground hover:text-foreground hover:bg-card/60`}`,children:(0,X.jsx)(t,{className:`w-3.5 h-3.5`})},e)),(0,X.jsx)(`span`,{className:`w-px h-5 bg-border/60 mx-0.5`}),gr.map(e=>(0,X.jsx)(`button`,{type:`button`,"aria-label":s(`editor.colorLabel`,{color:e}),onClick:()=>p(e),className:`h-5 w-5 rounded-full border transition-transform ${f===e?`scale-110 border-foreground`:`border-border/60`}`,style:{background:e}},e)),(0,X.jsx)(`span`,{className:`w-px h-5 bg-border/60 mx-0.5`}),(0,X.jsx)(`button`,{type:`button`,"aria-label":s(`editor.undo`),title:s(`editor.undoTitle`),disabled:c.past.length===0,onClick:()=>l({type:`undo`}),className:`h-7 w-7 inline-flex items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-card/60 disabled:opacity-40`,children:(0,X.jsx)(it,{className:`w-3.5 h-3.5`})}),(0,X.jsx)(`button`,{type:`button`,"aria-label":s(`editor.redo`),title:s(`editor.redoTitle`),disabled:c.future.length===0,onClick:()=>l({type:`redo`}),className:`h-7 w-7 inline-flex items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-card/60 disabled:opacity-40`,children:(0,X.jsx)($e,{className:`w-3.5 h-3.5`})})]}),t&&(0,X.jsx)(`p`,{className:`shrink-0 max-w-prose text-center text-xs text-muted-foreground`,children:s(`editor.responsiveHint`)}),(0,X.jsx)(`div`,{ref:E,className:`relative flex-1 min-h-0 w-full flex items-center justify-center`,children:(0,X.jsxs)(`div`,{className:`relative shrink-0`,style:{width:g.w,height:g.h},children:[(0,X.jsx)(`img`,{ref:T,src:e,alt:s(`editor.capturedAlt`),onLoad:O,draggable:!1,className:`block w-full h-full select-none rounded shadow-2xl`}),D.map(e=>e.kind===`blur`?(0,X.jsx)(`div`,{className:`absolute pointer-events-none`,style:{backgroundColor:_r,left:`${e.x*100}%`,top:`${e.y*100}%`,width:`${e.w*100}%`,height:`${e.h*100}%`}},e.id):null),m&&u===`blur`&&R&&(0,X.jsx)(`div`,{className:`absolute border border-accent-info pointer-events-none`,style:{backgroundColor:_r,left:`${R.x*100}%`,top:`${R.y*100}%`,width:`${R.w*100}%`,height:`${R.h*100}%`}}),(0,X.jsxs)(`svg`,{className:`absolute inset-0 w-full h-full ${u===`text`||u===`step`?`cursor-pointer`:`cursor-crosshair`}`,viewBox:`0 0 ${g.w} ${g.h}`,preserveAspectRatio:`none`,onPointerDown:A,onPointerMove:M,onPointerUp:N,children:[D.map(e=>{if(e.kind===`box`)return(0,X.jsx)(`rect`,{x:L(e.x,`w`),y:L(e.y,`h`),width:L(e.w,`w`),height:L(e.h,`h`),fill:`none`,stroke:e.color,strokeWidth:Math.max(2,g.w*.004)},e.id);if(e.kind===`arrow`){let t=dr(e.from,e.to,.035),n=Math.max(2,g.w*.004);return(0,X.jsxs)(`g`,{stroke:e.color,strokeWidth:n,strokeLinecap:`round`,fill:`none`,children:[(0,X.jsx)(`line`,{x1:L(e.from.x,`w`),y1:L(e.from.y,`h`),x2:L(e.to.x,`w`),y2:L(e.to.y,`h`)}),(0,X.jsx)(`polyline`,{points:`${L(t.left.x,`w`)},${L(t.left.y,`h`)} ${L(e.to.x,`w`)},${L(e.to.y,`h`)} ${L(t.right.x,`w`)},${L(t.right.y,`h`)}`})]},e.id)}if(e.kind===`text`)return(0,X.jsx)(`text`,{x:L(e.x,`w`),y:L(e.y,`h`),dominantBaseline:`hanging`,fontSize:Math.max(12,g.h*.03),fontWeight:600,fill:e.color,stroke:`rgba(0,0,0,0.55)`,strokeWidth:1,paintOrder:`stroke`,children:e.text},e.id);if(e.kind===`step`){let t=Math.max(10,g.h*.025);return(0,X.jsxs)(`g`,{children:[(0,X.jsx)(`circle`,{cx:L(e.x,`w`),cy:L(e.y,`h`),r:t,fill:e.color}),(0,X.jsx)(`text`,{x:L(e.x,`w`),y:L(e.y,`h`),textAnchor:`middle`,dominantBaseline:`central`,fontSize:t*1.1,fontWeight:700,fill:`#000`,children:e.n})]},e.id)}return null}),m&&u===`box`&&R&&(0,X.jsx)(`rect`,{x:L(R.x,`w`),y:L(R.y,`h`),width:L(R.w,`w`),height:L(R.h,`h`),fill:`none`,stroke:f,strokeDasharray:`4 3`,strokeWidth:Math.max(2,g.w*.004)}),m&&u===`arrow`&&(0,X.jsx)(`line`,{x1:L(m.start.x,`w`),y1:L(m.start.y,`h`),x2:L(m.cur.x,`w`),y2:L(m.cur.y,`h`),stroke:f,strokeWidth:Math.max(2,g.w*.004),strokeLinecap:`round`})]}),y&&(0,X.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center gap-2 bg-background-deep/50 text-sm text-foreground`,children:[(0,X.jsx)(ee,{className:`w-4 h-4 animate-spin`}),` `,s(`common:states.saving`)]})]})}),x&&(0,X.jsx)(`p`,{role:`alert`,className:`shrink-0 text-sm text-destructive`,children:s(`modal.toast.captureFailed`)}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,X.jsxs)(G,{size:`sm`,variant:`ghost`,className:`gap-1.5`,onClick:a,disabled:y,children:[(0,X.jsx)(w,{className:`w-3.5 h-3.5`}),` `,s(`editor.reselect`)]}),(0,X.jsxs)(G,{size:`sm`,variant:`ghost`,className:`gap-1.5`,onClick:I,disabled:y,children:[(0,X.jsx)(oe,{className:`w-3.5 h-3.5`}),` `,s(`common:actions.cancel`)]}),(0,X.jsxs)(G,{size:`sm`,className:`gap-1.5`,onClick:()=>void F(),disabled:y,"data-testid":`annotation-confirm`,children:[(0,X.jsx)(j,{className:`w-3.5 h-3.5`}),` `,D.length>0?r??s(`editor.createSpec`):s(`editor.skipContinue`)]})]})]})}var Sr=`native-browser:event`;function Cr(e){let t=(e??``).trim();if(!t)return null;if(t===`about:blank`)return t;let n=wr(t);if(n){if(n.protocol===`http:`||n.protocol===`https:`)return n.toString();let e=`${n.pathname}${n.search}${n.hash}`;if(!/^\d+([/?#].*)?$/.test(e))return null}let r=wr(`https://${t}`);if(r&&r.protocol===`https:`){let e=r.hostname.toLowerCase();return(e===`localhost`||e.endsWith(`.localhost`)||e===`[::1]`||/^127\./.test(e))&&(r.protocol=`http:`),r.toString()}return null}function wr(e){try{return new URL(e)}catch{return null}}function Tr(e){let t=(e,t)=>Number.isFinite(e)?e:t;return{x:Math.max(0,Math.round(t(e.left,0))),y:Math.max(0,Math.round(t(e.top,0))),width:Math.max(1,Math.round(t(e.width,1))),height:Math.max(1,Math.round(t(e.height,1)))}}var Er=null,Dr=null,Or=Promise.resolve();async function kr(){return(await i(()=>import(`./core-B3mKBIh5.js`).then(e=>e.i),__vite__mapDeps([0,1]))).invoke}function Ar(e){let t=e?.flag??Ae,n=e?.tauri??s();return!t||!n?Promise.resolve(!1):(Er||=(async()=>{try{return await(await kr())(`browser_supported`)===!0}catch{return Er=null,!1}})(),Er)}async function jr(e){return await Ar(e)?(Dr||=Z(`browser_capture_supported`).then(e=>e===!0).catch(()=>(Dr=null,!1)),Dr):!1}async function Z(e,t){return(await kr())(e,t)}function Mr(e){let t=Or.then(e,e);return Or=t.catch(()=>{}),t}var Q={open:(e,t,n)=>Mr(()=>Z(`browser_open`,{ownerId:e,url:t,bounds:n})),navigate:(e,t)=>Z(`browser_navigate`,{ownerId:e,url:t}),back:e=>Z(`browser_back`,{ownerId:e}),forward:e=>Z(`browser_forward`,{ownerId:e}),reload:e=>Z(`browser_reload`,{ownerId:e}),setBounds:(e,t)=>Z(`browser_set_bounds`,{ownerId:e,bounds:t}),show:e=>Z(`browser_show`,{ownerId:e}),hide:e=>Z(`browser_hide`,{ownerId:e}),close:e=>Mr(()=>Z(`browser_close`,{ownerId:e})),devtools:e=>Z(`browser_devtools`,{ownerId:e}),zoom:(e,t)=>Z(`browser_zoom`,{ownerId:e,factor:t}),setSelectMode:(e,t)=>Z(`browser_set_select_mode`,{ownerId:e,enabled:t}),selection:e=>Z(`browser_selection`,{ownerId:e}),capture:(e,t)=>Z(`browser_capture`,{ownerId:e,selectionOnly:t}),onEvent:async(e,t)=>{let n=n=>{n.payload.ownerId===e&&t(n.payload)},{listen:r}=await i(async()=>{let{listen:e}=await import(`./event-Bt7f3wXe.js`).then(e=>e.i);return{listen:e}},__vite__mapDeps([2,1,0]));return r(Sr,n)}},Nr=e(r(),1),Pr=new Map,Fr=new Map;function Ir(e,t){let n=(Fr.get(e)??Promise.resolve()).catch(()=>{}).then(t);return Fr.set(e,n),n.finally(()=>{Fr.get(e)===n&&Fr.delete(e)}).catch(()=>{}),n}function Lr({ownerId:e,leaseRevision:t=0,onBusyChange:n,transferError:r,url:i,onClose:a,onFallback:s,onUrlChange:c,onCaptured:l,confirmLabel:u,selectLabel:d}){let{t:f}=v(`browser`),p=(0,Y.useRef)(null),m=(0,Y.useRef)(!1),[h,g]=(0,Y.useState)(i),[_,y]=(0,Y.useState)(i),[b,x]=(0,Y.useState)(null),[S,C]=(0,Y.useState)(!0),[T,E]=(0,Y.useState)(!1),[D,O]=(0,Y.useState)(null),[k,A]=(0,Y.useState)(!1),[j,M]=(0,Y.useState)(null),[N,P]=(0,Y.useState)(!1),[I,L]=(0,Y.useState)(null);(0,Y.useEffect)(()=>(n?.(k||j!==null||N||I!==null),()=>{n?.(!1)}),[n,k,j,N,I]);let ee=(0,Y.useRef)(1),R=(0,Y.useRef)(null),z=(0,Y.useRef)(!1),B=(0,Y.useRef)(!1),te=(0,Y.useRef)(!1),V=(0,Y.useRef)(null),ne=(0,Y.useRef)(i),re=(0,Y.useRef)({url:i,onFallback:s,onUrlChange:c});re.current={url:i,onFallback:s,onUrlChange:c},te.current=I!==null;let H=(0,Y.useCallback)(async e=>{let t=R.current;if(!(!t||!z.current)){O(null);try{await e(t)}catch(e){R.current===t&&O(e instanceof Error?e.message:String(e))}}},[]);(0,Y.useEffect)(()=>{let t=!1,n=null,r=0,i=null,a=e??crypto.randomUUID(),o=Symbol(a);Pr.set(a,o);let s=()=>{Ir(a,async()=>{Pr.get(a)===o&&(Pr.delete(a),await Q.close(a))}).catch(()=>{})};R.current=a,z.current=!1,E(!1);let c=()=>{t||r||(r=requestAnimationFrame(()=>{if(r=0,!z.current||te.current||B.current)return;let e=p.current?.getBoundingClientRect();if(!e||e.width<=0||e.height<=0)return;let t=Tr(e);JSON.stringify(t)!==JSON.stringify(V.current)&&(V.current=t,Q.setBounds(a,t).catch(()=>{V.current=null}))}))};return(async()=>{try{let e=await Q.onEvent(a,e=>{if(!t){if(e.kind===`resume`){!te.current&&!B.current&&Ir(a,async()=>{if(t||Pr.get(a)!==o||te.current||B.current)return;let n=p.current?.getBoundingClientRect();n&&await Q.open(a,e.url??ne.current,Tr(n))}).catch(e=>{t||O(String(e))});return}e.kind===`nav`&&e.url?(y(e.url),re.current.onUrlChange?.(e.url),M(null),A(!1),m.current||g(e.url)):e.kind===`title`?x(e.title??null):e.kind===`load-started`?C(!0):e.kind===`load-finished`?(C(!1),e.url&&!m.current&&g(e.url)):e.kind===`popup-error`?O(f(`popup.openFailed`)):e.kind===`popup-opened`&&O(null)}});if(t){e();return}n=e;let r=p.current?.getBoundingClientRect();if(!r)throw Error(`hole not measurable`);ne.current=Cr(re.current.url)??`about:blank`,V.current=Tr(r);let l=V.current;if(!await Ir(a,async()=>t||Pr.get(a)!==o?!1:(await Q.open(a,ne.current,l),!0)))return;if(t){s();return}z.current=!0,E(!0),i=new ResizeObserver(c),p.current&&i.observe(p.current),window.addEventListener(`resize`,c),window.addEventListener(`scroll`,c,!0),window.visualViewport?.addEventListener(`resize`,c),window.visualViewport?.addEventListener(`scroll`,c),c()}catch{t||re.current.onFallback()}})(),()=>{t=!0,cancelAnimationFrame(r),i?.disconnect(),window.removeEventListener(`resize`,c),window.removeEventListener(`scroll`,c,!0),window.visualViewport?.removeEventListener(`resize`,c),window.visualViewport?.removeEventListener(`scroll`,c),n?.(),R.current===a&&(R.current=null,z.current=!1),s()}},[e,t]),(0,Y.useEffect)(()=>{let e=Cr(i)??`about:blank`;!T||e===ne.current||(ne.current=e,g(e),H(t=>Q.navigate(t,e)))},[i,T,H]);let ae=(0,Y.useCallback)(async e=>{let t=R.current;if(!(!t||!z.current||B.current)){B.current=!0,P(!0),O(null);try{let n=await Q.capture(t,e);if(R.current!==t||(await Q.hide(t),R.current!==t))return;te.current=!0,A(!1),L(n)}catch(e){R.current===t&&O(e instanceof Error?e.message:String(e))}finally{B.current=!1,R.current===t&&P(!1)}}},[]);(0,Y.useEffect)(()=>{if(!k||!T)return;let e=R.current,t=!1,n,r=async()=>{try{let n=await Q.selection(e);if(t||R.current!==e)return;if(n){if(await Q.setSelectMode(e,!1),t||R.current!==e)return;M(n),A(!1),await ae(!0);return}}catch(n){if(t||R.current!==e)return;O(String(n));try{await Q.setSelectMode(e,!1),!t&&R.current===e&&A(!1)}catch(n){!t&&R.current===e&&O(String(n))}return}t||(n=setTimeout(r,200))};return r(),()=>{t=!0,clearTimeout(n)}},[k,T,ae]);let se=async()=>{await H(async e=>{await Q.setSelectMode(e,!k),M(null),A(!k)})},ce=async()=>{L(null),await H(async e=>{await new Promise(e=>requestAnimationFrame(()=>e()));let t=p.current?.getBoundingClientRect();t&&t.width>0&&t.height>0&&(V.current=Tr(t),await Q.setBounds(e,V.current)),await Q.show(e)})};(0,Y.useEffect)(()=>{let e=e=>{e.key===`Escape`&&!te.current&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let le=(0,Y.useCallback)(()=>{let e=Cr(h);e&&(g(e),H(t=>Q.navigate(t,e)))},[h,H]),ue=(0,Y.useCallback)(e=>{ee.current=Math.min(3,Math.max(.25,e)),H(e=>Q.zoom(e,ee.current))},[H]);return typeof document>`u`?null:(0,Nr.createPortal)((0,X.jsx)(`div`,{className:`fixed inset-0 z-[80] bg-background-deep/60 backdrop-blur-md pointer-events-auto`,onClick:e=>{e.target===e.currentTarget&&!I&&a()},"data-testid":`native-browser-modal`,children:(0,X.jsxs)(`div`,{className:`absolute inset-x-[4%] inset-y-[3.5%] flex flex-col border border-border/70 rounded-2xl bg-background-deep overflow-hidden shadow-2xl ring-1 ring-black/20`,role:`dialog`,"aria-modal":`true`,"aria-label":f(`modal.dialogLabel`),onClick:e=>e.stopPropagation(),children:[!I&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border/50 bg-surface/80 shrink-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(G,{disabled:!T,variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`common:actions.back`),onClick:()=>void H(Q.back),children:(0,X.jsx)(w,{className:`w-4 h-4`})}),(0,X.jsx)(G,{disabled:!T,variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`modal.nav.forward`),onClick:()=>void H(Q.forward),children:(0,X.jsx)(Le,{className:`w-4 h-4`})}),(0,X.jsx)(G,{disabled:!T,variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`modal.nav.reload`),onClick:()=>void H(Q.reload),children:(0,X.jsx)(et,{className:`w-4 h-4`})})]}),(0,X.jsxs)(`form`,{className:`flex-1 flex items-center gap-2 min-w-0`,onSubmit:e=>{e.preventDefault(),le()},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 rounded-md border border-border bg-background px-2.5 py-1`,children:[(0,X.jsx)(Je,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,X.jsx)(`input`,{value:h,onChange:e=>g(e.target.value),onFocus:()=>{m.current=!0},onBlur:()=>{m.current=!1},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),le())},placeholder:f(`modal.address.placeholder`),"aria-label":f(`modal.address.label`),className:`flex-1 min-w-0 bg-transparent outline-none text-sm`})]}),(0,X.jsx)(G,{type:`submit`,size:`sm`,variant:`secondary`,className:`shrink-0`,children:f(`modal.address.go`)})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`native.zoomOut`),title:f(`native.zoomOut`),onClick:()=>ue(ee.current-.1),children:(0,X.jsx)(at,{className:`w-4 h-4`})}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`native.zoomIn`),title:f(`native.zoomIn`),onClick:()=>ue(ee.current+.1),children:(0,X.jsx)(J,{className:`w-4 h-4`})}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`native.devtools`),title:f(`native.devtools`),onClick:()=>void H(Q.devtools),children:(0,X.jsx)(ie,{className:`w-4 h-4`})}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`native.openExternal`),title:f(`native.openExternal`),onClick:()=>void o(_),children:(0,X.jsx)(F,{className:`w-4 h-4`})}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":f(`modal.closeBrowser`),onClick:a,children:(0,X.jsx)(oe,{className:`w-4 h-4`})})]})]}),(0,X.jsxs)(`div`,{className:`px-3 py-1 text-[11px] text-muted-foreground truncate shrink-0 flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-full shrink-0 ${S?`bg-accent-warning animate-pulse`:`bg-accent-success`}`,"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`truncate`,children:b||_}),(0,X.jsx)(`span`,{className:`ml-auto shrink-0 rounded-full border border-accent-success/30 bg-accent-success/10 text-accent-success px-2 py-px text-[10px] font-medium`,children:f(`native.badge`)})]}),l&&(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-b border-border/50 px-3 py-2 shrink-0`,children:[(0,X.jsxs)(G,{variant:k?`secondary`:`ghost`,size:`sm`,disabled:!T||N,"aria-pressed":k,onClick:()=>void se(),children:[(0,X.jsx)(Qe,{className:`mr-1.5 h-3.5 w-3.5`}),d??f(`native.selectElement`)]}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-muted-foreground`,children:k?f(`native.selectHint`):j?.selector}),(0,X.jsxs)(G,{variant:`secondary`,size:`sm`,disabled:!T||N||k||_===`about:blank`,onClick:()=>void ae(j!==null),children:[(0,X.jsx)(Re,{className:`mr-1.5 h-3.5 w-3.5`}),f(N?`native.capturing`:j?`native.captureSelection`:`native.capturePage`)]})]})]}),(D||r)&&(0,X.jsx)(`div`,{role:`alert`,className:`border-b border-destructive/30 bg-destructive/10 px-3 py-2 text-xs text-destructive shrink-0`,children:D||r}),I&&l&&(0,X.jsx)(xr,{screenshotDataUrl:I.screenshotDataUrl,confirmLabel:u,onConfirm:async e=>{await l({...I,screenshotDataUrl:e.screenshotDataUrl})},onReselect:()=>{ce()},onCancel:a}),(0,X.jsx)(`div`,{ref:p,className:I?`hidden`:`relative flex-1 min-h-0 overflow-hidden`,children:S&&(0,X.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center text-sm text-muted-foreground`,children:f(`modal.status.opening`)})})]})}),document.body)}function Rr(e){let t=e.schedule??(e=>requestAnimationFrame(e)),n=e.cancel??(e=>cancelAnimationFrame(e)),r=e.now??(()=>typeof performance<`u`?performance.now():Date.now()),i=e.release??(()=>{}),a={received:0,decoded:0,drawn:0,droppedStale:0,droppedUndrawn:0,decodeMsTotal:0,drawMsTotal:0},o=!1,s=!1,c=null,l=null,u=null,d=()=>{u=null;let t=l;if(l=null,t==null||o){t!=null&&f(t);return}let n=r();try{e.draw(t),a.drawn++,a.drawMsTotal+=r()-n}catch{}finally{f(t)}},f=e=>{try{i(e)}catch{}},p=()=>{u==null&&!o&&(u=t(d))},m=t=>{s=!0;let n=r();e.decode(t).then(e=>{if(o){f(e);return}a.decoded++,a.decodeMsTotal+=r()-n,l!=null&&(a.droppedUndrawn++,f(l)),l=e,p(),h()},()=>{h()})},h=()=>{if(o){s=!1;return}let e=c;c=null,e==null?s=!1:m(e)};return{push(e){if(!o){if(a.received++,s){c!=null&&a.droppedStale++,c=e;return}m(e)}},stats(){return{...a}},dispose(){if(!o){if(o=!0,c=null,u!=null){try{n(u)}catch{}u=null}l!=null&&(f(l),l=null)}}}}var zr=`specrails-desktop:browser-capture-debug`;function Br(){try{return typeof localStorage<`u`&&localStorage.getItem(zr)===`1`}catch{return!1}}function Vr(e,t,n){let r=Math.max(1,n),i=t.decoded-e.decoded,a=t.drawn-e.drawn,o=e=>Math.round(e*10)/10;return{fpsReceived:o((t.received-e.received)*1e3/r),fpsDrawn:o(a*1e3/r),droppedStale:t.droppedStale-e.droppedStale,droppedUndrawn:t.droppedUndrawn-e.droppedUndrawn,avgDecodeMs:i>0?o((t.decodeMsTotal-e.decodeMsTotal)/i):0,avgDrawMs:a>0?o((t.drawMsTotal-e.drawMsTotal)/a):0}}function Hr(e,t=e=>console.table([e]),n=2e3,r=()=>Date.now()){let i=e(),a=r(),o=setInterval(()=>{let n=e(),o=r();t(Vr(i,n,o-a)),i=n,a=o},n);return()=>clearInterval(o)}function Ur(e){let{projectId:t,open:n,initialUrl:r}=e,i=(0,Y.useRef)(null),a=(0,Y.useRef)(null),o=(0,Y.useRef)(null),s=(0,Y.useRef)(0),c=(0,Y.useRef)(0),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),f=(0,Y.useCallback)(()=>{let e=l.current,t=u.current,n=a.current;if(!(!e||!n||n.readyState!==WebSocket.OPEN)&&!(t&&t.width===e.width&&t.height===e.height&&t.deviceScaleFactor===e.deviceScaleFactor))try{n.send(JSON.stringify({type:`input`,event:{type:`resize`,...e}})),u.current=e}catch{}},[]),p=(0,Y.useRef)(0),m=(0,Y.useRef)(new Map),h=(0,Y.useCallback)(()=>{if(p.current!==0||m.current.size===0)return;let e=[...m.current.values()];m.current.clear();for(let t of e)Xn(t.projectId,t.sessionId)},[]),[g,_]=(0,Y.useState)({status:`connecting`,errorMsg:null,url:null,title:null,viewport:{width:1280,height:800},hoverRect:null,hoverSelector:null,hoverPath:null,popup:null,popupError:null});(0,Y.useEffect)(()=>{if(!n||!t)return;let e=!1,c=null;u.current=null,_(e=>({...e,status:`connecting`,errorMsg:null,popup:null,popupError:null}));let h=Rr({decode:e=>createImageBitmap(new Blob([e],{type:`image/jpeg`})),draw:e=>{let t=i.current;t&&(t.width!==e.width&&(t.width=e.width),t.height!==e.height&&(t.height=e.height),t.getContext(`2d`)?.drawImage(e,0,0))},release:e=>e.close()}),g=Br()?Hr(()=>h.stats()):null;return(async()=>{try{let n=await Bn(t,r);if(e){Xn(t,n.id);return}c=n.id,o.current={id:n.id,projectId:t},_(e=>({...e,url:n.url,title:n.title,viewport:l.current??{width:n.viewportWidth,height:n.viewportHeight}}));let i=Qn(n.id,t);a.current=i,i.onmessage=e=>{if(typeof e.data==`string`){try{let t=JSON.parse(e.data);if(t.type===`ready`)_(e=>({...e,status:`ready`,url:t.url??e.url,title:t.title??e.title,viewport:l.current??t.viewport??e.viewport})),f();else if(t.type===`nav`)_(e=>({...e,url:t.url??e.url,title:t.title??e.title}));else if(t.type===`hover`)_(e=>({...e,hoverRect:t.rect??null,hoverSelector:t.selector??null,hoverPath:t.path??null}));else if(t.type===`popup`){let e=typeof t.count==`number`?t.count:0;s.current+=1,_(n=>({...n,popup:e>0?{count:e,active:t.active===!0,url:t.url??null}:null,popupError:null}))}}catch{}return}h.push(e.data)},i.onopen=()=>{e||(f(),_(e=>({...e,status:`ready`})))},i.onerror=()=>{e||_(e=>({...e,status:`error`,errorMsg:d.t(`browser:session.connectionError`)}))},i.onclose=()=>{e||_(e=>({...e,status:`error`,errorMsg:d.t(`browser:session.lostConnection`)}))}}catch(t){if(e)return;let n=t instanceof Ln?d.t(`browser:session.tooManySessions`):t instanceof Rn?d.t(`browser:session.launchFailed`):d.t(`browser:session.openFailed`);_(e=>({...e,status:`error`,errorMsg:n}))}})(),()=>{e=!0,g?.(),h.dispose();let n=a.current;if(n){n.onmessage=null,n.onopen=null,n.onerror=null,n.onclose=null;try{n.close()}catch{}}a.current=null;let r=c;r&&o.current?.id===r&&o.current.projectId===t&&(o.current=null),r&&(p.current>0?m.current.set(`${t}\0${r}`,{sessionId:r,projectId:t}):Xn(t,r))}},[n,t,r,h,f]);let v=(0,Y.useCallback)(e=>{let t=a.current;if(t&&t.readyState===WebSocket.OPEN)try{t.send(JSON.stringify({type:`input`,event:e}))}catch{}},[]),y=(0,Y.useCallback)(async(e,t)=>{let n=o.current;if(n)try{let r=await Vn(n.projectId,n.id,e,t);if(o.current!==n)return;r.target!==`popup`&&_(e=>({...e,url:r.url,title:r.title}))}catch{}},[]),b=(0,Y.useCallback)(async(e,t,n)=>{let r=o.current;if(!r)throw Error(`No active browser session`);p.current+=1;try{return await Hn(r.projectId,r.id,e,t,n)}finally{p.current=Math.max(0,p.current-1),h()}},[h]),x=(0,Y.useCallback)(async(e,t,n,r)=>{let i=o.current;if(!i)throw Error(`No active browser session`);p.current+=1;try{return await Wn(i.projectId,i.id,e,t,n,r)}finally{p.current=Math.max(0,p.current-1),h()}},[h]),S=(0,Y.useCallback)(async(e,t)=>{let n=o.current;return n?Kn(n.projectId,n.id,e,t):{text:``}},[]),C=(0,Y.useCallback)((e,t,n=window.devicePixelRatio||1)=>{if(!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0)return;let r=Math.max(1,Math.round(e)),i=Math.max(1,Math.round(t));l.current={width:r,height:i,deviceScaleFactor:Number.isFinite(n)?Math.min(2,Math.max(1,n)):1},_(e=>e.viewport.width===r&&e.viewport.height===i?e:{...e,viewport:{width:r,height:i}}),f()},[f]),w=(0,Y.useCallback)(e=>{let t=a.current;if(t&&t.readyState===WebSocket.OPEN)try{t.send(JSON.stringify({type:`probe`,x:e.x,y:e.y}))}catch{}},[]),T=(0,Y.useCallback)(()=>{_(e=>e.hoverRect||e.hoverPath?{...e,hoverRect:null,hoverSelector:null,hoverPath:null}:e)},[]),E=(0,Y.useCallback)(async(e,t)=>{let n=o.current;return n?qn(n.projectId,n.id,e,t):null},[]),D=(0,Y.useCallback)(async e=>{let t=o.current;if(!t)return;let n=s.current,r=++c.current,i=()=>o.current===t&&s.current===n&&c.current===r;try{await Jn(t.projectId,t.id,e),i()&&_(e=>({...e,popupError:null}))}catch{i()&&_(e=>({...e,popupError:d.t(`browser:session.connectionError`)}))}},[]);return{...g,canvasRef:i,forwardInput:v,navigate:y,capture:b,captureBreakpoints:x,clipboard:S,navigateElement:E,setViewport:C,probe:w,clearHover:T,setPopupView:D}}function Wr(e,t,n,r){let i=(0,Y.useRef)(t);i.current=t,(0,Y.useEffect)(()=>{let t=e.current;if(!n||!t)return;let a=!1,o=null,s=0,c=0,l=0,u=null,d=()=>{if(o=null,a)return;let e=r??t.getBoundingClientRect();if(!Number.isFinite(e.width)||!Number.isFinite(e.height)||e.width<=0||e.height<=0)return;let n=Math.max(1,Math.round(e.width)),u=Math.max(1,Math.round(e.height)),d=window.devicePixelRatio,f=Number.isFinite(d)?Math.min(2,Math.max(1,d)):1;n===s&&u===c&&f===l||(s=n,c=u,l=f,i.current(n,u,f))},f=()=>{a||o===null&&(o=requestAnimationFrame(d))},p=()=>{u?.removeEventListener(`change`,m),u=typeof window.matchMedia==`function`?window.matchMedia(`(resolution: ${window.devicePixelRatio||1}dppx)`):null,u?.addEventListener(`change`,m)},m=()=>{f(),p()};d();let h=typeof ResizeObserver>`u`?null:new ResizeObserver(f);return h?.observe(t),window.addEventListener(`resize`,f),p(),()=>{a=!0,o!==null&&cancelAnimationFrame(o),h?.disconnect(),u?.removeEventListener(`change`,m),window.removeEventListener(`resize`,f)}},[e,n,r?.width,r?.height])}function Gr({open:e,url:t,projectId:n,onClose:r}){let[i,a]=(0,Y.useState)(`probing`);(0,Y.useEffect)(()=>{if(!e||i!==`probing`)return;let t=!0;return Ar().then(e=>{t&&a(e?`native`:`screencast`)}),()=>{t=!1}},[e,i]);let o=(0,Y.useCallback)(()=>a(`screencast`),[]);return!e||i===`probing`?null:i===`native`?(0,X.jsx)(Lr,{url:t,onClose:r,onFallback:o}):(0,X.jsx)(Kr,{open:e,url:t,projectId:n,onClose:r})}function Kr({open:e,url:t,projectId:n,onClose:r}){let{t:i}=v(`browser`),a=Ur({projectId:n,open:e,initialUrl:t}),{canvasRef:o,viewport:s,status:c,errorMsg:l,url:u,title:d,popup:f,popupError:p,setViewport:m}=a,[h,g]=(0,Y.useState)(t),_=(0,Y.useRef)(null);Wr(_,m,e);let y=(0,Y.useRef)(a.forwardInput);y.current=a.forwardInput;let b=(0,Y.useRef)(null),x=(0,Y.useCallback)(()=>(b.current??=$n(e=>y.current(e)),b.current),[]);(0,Y.useEffect)(()=>()=>{b.current?.dispose(),b.current=null},[]);let S=f?.active?f.url??`about:blank`:u??``;(0,Y.useEffect)(()=>{g(S)},[S,f?.active]),(0,Y.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&r()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,r]);let C=(0,Y.useCallback)((e,t)=>{let n=o.current?.getBoundingClientRect();return n?er({x:e,y:t},{left:n.left,top:n.top,width:n.width,height:n.height},s):{x:0,y:0}},[o,s]),T=e=>e===2?`right`:e===1?`middle`:`left`,E=(0,Y.useCallback)(e=>{let t=C(e.clientX,e.clientY);x().move(t.x,t.y)},[C,x]),D=(0,Y.useCallback)(e=>{let t=C(e.clientX,e.clientY),n=x();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`down`,x:t.x,y:t.y,button:T(e.button),clickCount:e.detail||1})},[C,a,x]),O=(0,Y.useCallback)(e=>{let t=C(e.clientX,e.clientY),n=x();n.move(t.x,t.y),n.flush(),a.forwardInput({type:`mouse`,action:`up`,x:t.x,y:t.y,button:T(e.button),clickCount:e.detail||1})},[C,a,x]),k=(0,Y.useCallback)(e=>{let t=C(e.clientX,e.clientY);x().wheel(t.x,t.y,e.deltaX,e.deltaY)},[C,x]),A=(0,Y.useCallback)(e=>{if(e.key===`Escape`)return;let t=e.metaKey||e.ctrlKey;if(t&&(e.key===`c`||e.key===`v`||e.key===`x`)){e.preventDefault();let t=e.key;(async()=>{try{if(t===`v`){let e=await navigator.clipboard.readText();e&&await a.clipboard(`paste`,e)}else{let{text:e}=await a.clipboard(t===`x`?`cut`:`copy`);e&&await navigator.clipboard.writeText(e)}}catch{}})();return}let n={type:`key`,action:`down`,key:e.key,code:e.code,text:!t&&e.key.length===1?e.key:void 0};a.forwardInput(n),(e.key===`Tab`||e.key===` `||e.key.startsWith(`Arrow`))&&e.preventDefault()},[a]),j=(0,Y.useCallback)(e=>{e.key!==`Escape`&&a.forwardInput({type:`key`,action:`up`,key:e.key,code:e.code})},[a]),M=(0,Y.useCallback)(()=>{a.navigate(`goto`,h)},[a,h]);return!e||typeof document>`u`?null:(0,Nr.createPortal)((0,X.jsx)(`div`,{className:`fixed inset-0 z-[80] bg-background-deep/60 backdrop-blur-md pointer-events-auto`,onClick:e=>{e.target===e.currentTarget&&r()},"data-testid":`webview-modal`,children:(0,X.jsxs)(`div`,{className:`absolute inset-x-[4%] inset-y-[3.5%] flex flex-col border border-border/70 rounded-2xl bg-background-deep overflow-hidden shadow-2xl ring-1 ring-black/20`,role:`dialog`,"aria-modal":`true`,"aria-label":i(`modal.dialogLabel`),onClick:e=>e.stopPropagation(),children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border/50 bg-surface/80 shrink-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`common:actions.back`),onClick:()=>a.navigate(`back`),children:(0,X.jsx)(w,{className:`w-4 h-4`})}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.forward`),onClick:()=>a.navigate(`forward`),children:(0,X.jsx)(Le,{className:`w-4 h-4`})}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.nav.reload`),onClick:()=>a.navigate(`reload`),children:(0,X.jsx)(et,{className:`w-4 h-4`})})]}),(0,X.jsxs)(`form`,{className:`flex-1 flex items-center gap-2 min-w-0`,onSubmit:e=>{e.preventDefault(),M()},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 rounded-md border border-border bg-background px-2.5 py-1`,children:[(0,X.jsx)(Je,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,X.jsx)(`input`,{value:h,onChange:e=>g(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),M())},placeholder:i(`modal.address.placeholder`),"aria-label":i(`modal.address.label`),className:`flex-1 min-w-0 bg-transparent outline-none text-sm`})]}),(0,X.jsx)(G,{type:`submit`,size:`sm`,variant:`secondary`,className:`shrink-0`,disabled:c===`error`,children:i(`modal.address.go`)})]}),(0,X.jsx)(G,{variant:`ghost`,size:`icon`,className:`h-7 w-7`,"aria-label":i(`modal.closeBrowser`),onClick:r,children:(0,X.jsx)(oe,{className:`w-4 h-4`})})]}),(0,X.jsxs)(`div`,{className:`px-3 py-1 text-[11px] text-muted-foreground truncate shrink-0 flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`inline-block w-2 h-2 rounded-full shrink-0 ${c===`ready`?`bg-accent-success`:c===`error`?`bg-destructive`:`bg-accent-warning animate-pulse`}`,"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`truncate`,children:c===`connecting`?i(`modal.status.connecting`):c===`error`?l??i(`modal.status.unavailable`):f?.active?i(`popup.loginWindow`,{origin:Yn(f.url)}):d||``})]}),p&&(0,X.jsx)(`div`,{role:`alert`,className:`px-3 py-1.5 text-xs text-destructive border-b border-border/40 shrink-0`,children:p}),f&&(0,X.jsxs)(`div`,{"data-testid":`webview-popup-bar`,className:`flex items-center gap-2 px-3 py-1.5 text-xs border-b shrink-0 ${f.active?`bg-accent-info/10 border-accent-info/30 text-accent-info`:`bg-surface/70 border-border/40 text-muted-foreground`}`,children:[(0,X.jsx)(F,{className:`w-3.5 h-3.5 shrink-0`}),f.active?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`truncate font-medium`,children:i(`popup.loginWindow`,{origin:Yn(f.url)})}),f.count>1&&(0,X.jsx)(`span`,{className:`shrink-0 opacity-70`,children:i(`popup.stacked`,{count:f.count-1})}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>a.setPopupView(`root`),className:`ml-auto shrink-0 inline-flex items-center gap-1 h-6 px-2 rounded-md border border-current/30 hover:bg-card/60 transition-colors`,children:[(0,X.jsx)(w,{className:`w-3 h-3`}),i(`popup.backToPage`)]})]}):(0,X.jsxs)(`button`,{type:`button`,onClick:()=>a.setPopupView(`popup`),className:`inline-flex items-center gap-1 h-6 px-2 rounded-md border border-border/50 hover:bg-card/60 hover:text-foreground transition-colors`,children:[i(`popup.show`),f.count>1&&(0,X.jsx)(`span`,{className:`opacity-70`,children:i(`popup.stacked`,{count:f.count-1})})]})]}),(0,X.jsx)(`div`,{ref:_,className:`relative flex-1 min-h-0 overflow-hidden flex items-center justify-center outline-none`,tabIndex:0,onKeyDown:A,onKeyUp:j,children:c===`error`?(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2 text-center max-w-md px-6`,children:[(0,X.jsx)(H,{className:`w-8 h-8 text-accent-warning`}),(0,X.jsx)(`p`,{className:`text-sm text-foreground/90`,children:l??i(`modal.error.unavailable`)})]}):(0,X.jsx)(`canvas`,{ref:o,style:{maxWidth:`min(100%, ${s.width}px)`,maxHeight:`min(100%, ${s.height}px)`},className:`max-w-full max-h-full block shadow-2xl cursor-default`,onPointerMove:E,onPointerDown:D,onPointerUp:O,onContextMenu:e=>e.preventDefault(),onWheel:k})})]})}),document.body)}var qr=(0,Y.createContext)(null);function Jr({children:e}){let{activeProjectId:t}=x(),[n,r]=(0,Y.useState)(null),i=(0,Y.useCallback)(e=>r(e),[]),a=Fn();return(0,X.jsxs)(qr.Provider,{value:{openWebView:i,canOpenWebView:a&&!!t},children:[e,a&&n&&t&&(0,X.jsx)(Gr,{open:!0,url:n,projectId:t,onClose:()=>r(null)})]})}function Yr(){return(0,Y.useContext)(qr)??{openWebView:()=>{},canOpenWebView:!1}}var Xr={analyzing:`activity:smash.stage.analyzing`,identifying:`activity:smash.stage.identifying`,ordering:`activity:smash.stage.ordering`},Zr=(0,Y.createContext)(null);function $(e){return`smash:${e}`}async function Qr(e,t){try{let n=await fetch(`${f}/api/projects/${e}/tickets/${t}/smash`,{method:`POST`});if(n.ok)S.loading(d.t(`activity:smash.retrying`),{id:$(t)});else{let e=await n.json().catch(()=>({}));S.error(e.reason?d.t(`activity:smash.couldNotRetryWithReason`,{reason:e.reason}):d.t(`activity:smash.couldNotRetry`),{id:$(t)})}}catch(e){S.error(d.t(`activity:smash.retryFailed`,{message:e.message}),{id:$(t)})}}async function $r(e,t,n){try{let r=await fetch(`${f}/api/projects/${e}/tickets/${t}/smash/undo`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({smashedAt:n})});if(r.ok)S.success(d.t(`activity:smash.undone`),{id:$(t),duration:3e3});else{let e=await r.json().catch(()=>({}));S.error(e.reason?d.t(`activity:smash.undoFailedWithReason`,{reason:e.reason}):d.t(`activity:smash.undoFailed`),{id:$(t)})}}catch(e){S.error(d.t(`activity:smash.undoFailedWithReason`,{reason:e.message}),{id:$(t)})}}function ei({children:e}){let{registerHandler:t,unregisterHandler:n}=m(),[r,i]=(0,Y.useState)({}),a=(0,Y.useRef)(new Map),o=(0,Y.useRef)(new Map),s=(0,Y.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.started`)return;let n=t.ticketId,r=t.runId,o=t.projectId,s=t.timestamp,c=t.ticketTitle;typeof n!=`number`||!r||!o||(a.current.set(n,o),i(e=>({...e,[n]:{ticketId:n,runId:r,stage:`analyzing`,startedAt:s??new Date().toISOString(),ticketTitle:c}})),S.loading(d.t(Xr.analyzing),{id:$(n),description:c?d.t(`activity:smash.onTitled`,{title:c}):d.t(`activity:smash.onThisSpec`)}))},[]),c=(0,Y.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.progress`)return;let n=t.ticketId,r=t.stage;if(typeof n!=`number`||!r)return;let a;i(e=>{let t=e[n];return t?(a=t.ticketTitle,{...e,[n]:{...t,stage:r}}):e}),S.loading(d.t(Xr[r]),{id:$(n),description:a?d.t(`activity:smash.onTitled`,{title:a}):d.t(`activity:smash.onThisSpec`)})},[]),l=(0,Y.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.completed`)return;let n=t.ticketId,r=t.runId,a=t.projectId,s=t.smashedAt,c=t.childrenIds;typeof n!=`number`||!r||!a||!s||!c||(o.current.set(r,s),i(e=>{let t={...e};return delete t[n],t}),S.success(d.t(`activity:smash.split`,{count:c.length}),{id:$(n),duration:1e4,action:{label:d.t(`activity:smash.undoAction`),onClick:()=>void $r(a,n,s)}}))},[]),u=(0,Y.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.failed`)return;let n=t.ticketId,r=t.projectId,o=t.reason??`unknown`;if(typeof n!=`number`||!r)return;a.current.set(n,r),i(e=>{let t={...e};return delete t[n],t});let s=o===`invalid-output`?d.t(`activity:smash.failReason.invalidOutput`):o===`timeout`?d.t(`activity:smash.failReason.timeout`):o===`model_error`?d.t(`activity:smash.failReason.modelError`):o===`crashed`?d.t(`activity:smash.failReason.crashed`):d.t(`activity:smash.failReason.generic`,{reason:o});S.error(d.t(`activity:smash.couldNotComplete`),{id:$(n),description:s,action:{label:d.t(`common:actions.retry`),onClick:()=>void Qr(r,n)},duration:15e3})},[]),f=(0,Y.useCallback)(e=>{let t=e;if(!t||t.type!==`smash.undone`)return;let n=t.ticketId;typeof n==`number`&&(S.dismiss($(n)),S.success(d.t(`activity:smash.undone`),{id:$(n),duration:3e3}))},[]);(0,Y.useLayoutEffect)(()=>(t(`_smash_started`,s),t(`_smash_progress`,c),t(`_smash_completed`,l),t(`_smash_failed`,u),t(`_smash_undone`,f),()=>{n(`_smash_started`),n(`_smash_progress`),n(`_smash_completed`),n(`_smash_failed`),n(`_smash_undone`)}),[t,n,s,c,l,u,f]),(0,Y.useEffect)(()=>()=>{a.current.clear(),o.current.clear()},[]);let p=(0,Y.useMemo)(()=>({inflight:r}),[r]);return(0,X.jsx)(Zr.Provider,{value:p,children:e})}function ti(e){let t=(0,Y.useContext)(Zr);return!t||e==null?null:t.inflight[e]??null}var ni=150,ri={analyzing:0,identifying:1,ordering:2},ii={analyzing:`smash.stage.analyzing`,identifying:`smash.stage.identifying`,ordering:`smash.stage.ordering`};function ai({stage:e,minDisplayMs:t=ni}){let{t:n}=v(`activity`),[r,i]=(0,Y.useState)(e),a=(0,Y.useRef)(Date.now()),o=(0,Y.useRef)(null);if((0,Y.useEffect)(()=>{if(e===r)return;let n=Date.now()-a.current,s=Math.max(0,t-n);return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{i(e),a.current=Date.now(),o.current=null},s),()=>{o.current&&clearTimeout(o.current)}},[e,r,t]),!r)return null;let s=ri[r];return(0,X.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-md border border-accent-highlight/40 bg-accent-highlight/10 text-sm text-foreground`,role:`status`,"aria-live":`polite`,"data-testid":`smash-status-pills`,children:[(0,X.jsx)(ee,{className:`h-4 w-4 animate-spin text-accent-highlight`,"aria-hidden":!0}),(0,X.jsx)(`div`,{className:`flex items-center gap-1.5`,children:[`analyzing`,`identifying`,`ordering`].map(e=>(0,X.jsx)(`span`,{className:[`inline-block w-1.5 h-1.5 rounded-full transition-all`,ri[e]<=s?`bg-accent-highlight`:`bg-muted`,e===r?`scale-125`:`scale-100`].join(` `),"aria-hidden":!0},e))}),(0,X.jsx)(`span`,{className:`font-medium`,children:n(ii[r])})]})}var oi={simple:{titleKey:`smashModal.modes.simple.title`,bulletKeys:[`smashModal.modes.simple.bullet1`,`smashModal.modes.simple.bullet2`,`smashModal.modes.simple.bullet3`],etaKey:`smashModal.modes.simple.eta`},full:{titleKey:`smashModal.modes.full.title`,bulletKeys:[`smashModal.modes.full.bullet1`,`smashModal.modes.full.bullet2`,`smashModal.modes.full.bullet3`,`smashModal.modes.full.bullet4`],etaKey:`smashModal.modes.full.eta`}};function si({open:e,ticketTitle:t,isReSmash:n,childrenCount:r,submitting:i=!1,onCancel:a,onConfirm:o}){let{t:s}=v(`activity`),[c,l]=(0,Y.useState)(`simple`),{panelRef:u,panelStyle:d,headerHandleProps:f,resizeHandles:p,isFloating:m,guardBackdrop:h}=ce();return e?(0,Nr.createPortal)((0,X.jsxs)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center`,role:`dialog`,"aria-modal":`true`,"data-testid":`smash-confirm-modal`,children:[(0,X.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-sm`,onClick:h(a)}),(0,X.jsxs)(`div`,{ref:u,className:`relative w-full max-w-lg m-4 rounded-xl glass-card border border-border/30 animate-in fade-in zoom-in-95 duration-150`,style:d,children:[(0,X.jsxs)(`div`,{...f,className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${m?`cursor-grab active:cursor-grabbing`:``}`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2 min-w-0`,children:[(0,X.jsx)(tt,{className:`w-5 h-5 text-accent-highlight shrink-0 mt-0.5`,"aria-hidden":!0}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold text-foreground`,children:s(`smashModal.title`)}),(0,X.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,title:t,children:t})]})]}),(0,X.jsx)(`button`,{type:`button`,onClick:a,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors shrink-0`,"aria-label":s(`common:actions.close`),children:(0,X.jsx)(oe,{className:`w-4 h-4`})})]}),n&&r>0&&(0,X.jsx)(`div`,{className:`mx-5 mt-4 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-foreground`,children:(0,X.jsx)(_,{t:s,i18nKey:`smashModal.reSmashWarning`,count:r})}),(0,X.jsxs)(`div`,{className:`px-5 py-4 space-y-3`,children:[(0,X.jsx)(`p`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground font-medium`,children:s(`smashModal.modePickerLabel`)}),[`simple`,`full`].map(e=>{let t=oi[e],n=c===e;return(0,X.jsx)(`button`,{type:`button`,onClick:()=>l(e),disabled:i,className:`w-full text-left rounded-lg border px-3 py-3 transition-colors ${n?`border-accent-highlight/60 bg-accent-highlight/10`:`border-border/40 bg-card/40 hover:bg-card/60 hover:border-border/60`}`,"data-testid":`smash-mode-${e}`,children:(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,X.jsx)(`div`,{className:`mt-0.5 h-3.5 w-3.5 rounded-full border-2 shrink-0 ${n?`border-accent-highlight bg-accent-highlight`:`border-muted-foreground/60`}`,"aria-hidden":!0}),(0,X.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm font-semibold text-foreground`,children:[e===`full`&&(0,X.jsx)(se,{className:`w-3.5 h-3.5 text-accent-highlight`,"aria-hidden":!0}),s(t.titleKey)]}),(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:s(t.etaKey)})]}),(0,X.jsx)(`ul`,{className:`space-y-0.5`,children:t.bulletKeys.map(e=>(0,X.jsxs)(`li`,{className:`text-[11px] text-foreground/70 leading-snug`,children:[`• `,s(e)]},e))})]})]})},e)})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-end gap-2 px-5 py-3 border-t border-border/30 bg-surface/20`,children:[(0,X.jsx)(G,{variant:`ghost`,size:`sm`,onClick:a,disabled:i,children:s(`common:actions.cancel`)}),(0,X.jsxs)(G,{size:`sm`,onClick:()=>o(c),disabled:i,"data-testid":`smash-confirm-modal-continue`,children:[(0,X.jsx)(tt,{className:`w-3.5 h-3.5 mr-1.5`}),s(i?`smashModal.starting`:n?`smashModal.confirmReSmash`:`smashModal.smash`)]})]})]}),(0,X.jsx)(ue,{handles:p})]}),document.body):null}var ci=`## Contract Layer`;function li(e,t){return!(!t||e.status===`draft`||e.parent_epic_id!=null||!e.description?.includes(ci))}function ui({ticket:e,projectId:t,provider:n,featureFlagOn:r,childrenCount:i}){let{t:a}=v(`activity`),o=ti(e.id),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(!1),[d,p]=(0,Y.useState)(e.origin_conversation_id?void 0:null);(0,Y.useEffect)(()=>{let r=e.origin_conversation_id;if(!r){p(null);return}let i=!1;return p(void 0),fetch(`${f}/api/projects/${t}/chat/conversations/${encodeURIComponent(r)}`).then(async e=>{if(!e.ok)throw Error(`origin conversation lookup failed (${e.status})`);let t=await e.json();i||p(t.conversation?.provider??n??null)}).catch(()=>{i||p(null)}),()=>{i=!0}},[t,n,e.origin_conversation_id]);let m=e.origin_conversation_id?d:n,h=r&&C(m),g=e.is_epic===!0,_=!g&&li(e,h),y=g&&h,b=g&&i>0,x=(0,Y.useCallback)(async n=>{if(h){u(!0);try{let r=await fetch(`${f}/api/projects/${t}/tickets/${e.id}/smash`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:n})});if(!r.ok){let e=await r.json().catch(()=>({}));S.error(e.reason?a(`smash.couldNotStartWithReason`,{reason:e.reason}):a(`smash.couldNotStart`));return}c(!1)}catch(e){S.error(a(`smash.smashFailed`,{message:e.message}))}finally{u(!1)}}},[t,e.id,a,h]),w=(0,Y.useCallback)(async n=>{if(h){if(b){u(!0);try{if(!(await fetch(`${f}/api/projects/${t}/tickets/${e.id}/children`,{method:`DELETE`})).ok){S.error(a(`smash.couldNotDeleteChildren`)),u(!1);return}}catch(e){S.error(a(`smash.deleteFailed`,{message:e.message})),u(!1);return}}await x(n)}},[b,x,t,e.id,a,h]);return!_&&!y?null:o?(0,X.jsx)(`div`,{className:`flex flex-col gap-2`,"data-testid":`smash-actions-streaming`,children:(0,X.jsx)(ai,{stage:o.stage})}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(G,{size:`sm`,variant:`outline`,onClick:()=>c(!0),className:`border-accent-highlight/40 text-accent-highlight hover:bg-accent-highlight/10`,"data-testid":y?`resmash-button`:`smash-button`,children:[(0,X.jsx)(tt,{className:`w-3.5 h-3.5 mr-1.5`}),a(y?`smash.reSmashButton`:`smash.smashButton`)]}),(0,X.jsx)(si,{open:s,ticketTitle:e.title,isReSmash:b,childrenCount:i,submitting:l,onCancel:()=>c(!1),onConfirm:w})]})}function di({epic:e,childExecutionOrder:t,totalChildren:n,onOpenEpic:r}){let{t:i}=v(`activity`);return(0,X.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-accent-secondary/30 bg-accent-secondary/10 px-3 py-1.5 text-xs`,"data-testid":`epic-breadcrumb`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:r,className:`text-accent-secondary hover:underline font-medium`,children:[`← `,e.title]}),t!=null&&n>0&&(0,X.jsx)(`span`,{className:`text-foreground/60`,children:i(`epicChildren.step`,{order:t,total:n})})]})}var fi={critical:`bg-red-400`,high:`bg-orange-400`,medium:`bg-yellow-400`,low:`bg-slate-400`};function pi(e){return e?fi[e]:`bg-muted`}function mi(e){return[...e].sort((e,t)=>{let n=e.execution_order??1/0,r=t.execution_order??1/0;return n===r?e.id-t.id:n-r})}function hi({ticket:e,allTickets:t,onOpenTicket:n}){let{t:r}=v(`activity`),i=e.is_epic===!0,a=e.parent_epic_id!=null;if(!i&&!a)return null;if(i){let i=mi(t.filter(t=>t.parent_epic_id===e.id));return(0,X.jsx)(gi,{header:r(`family.subSpecsHeader`,{count:i.length}),rows:i,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.emptySubSpecs`)})}let o=t.find(t=>t.id===e.parent_epic_id)??null,s=mi(t.filter(t=>t.parent_epic_id===e.parent_epic_id)),c=o?[o,...s]:s;return(0,X.jsx)(gi,{header:r(`family.familyHeader`,{count:s.length}),rows:c,currentId:e.id,onOpenTicket:n,emptyMessage:r(`family.noSiblings`)})}function gi({header:e,rows:t,currentId:n,onOpenTicket:r,emptyMessage:i}){let{t:a}=v(`activity`);return(0,X.jsxs)(`div`,{"data-testid":`epic-family-sidebar`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1.5`,children:[(0,X.jsx)(tt,{className:`w-3 h-3 text-accent-highlight`,"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider`,children:e})]}),t.length===0?(0,X.jsx)(`p`,{className:`text-[10px] text-foreground/50 italic`,children:i}):(0,X.jsx)(`ul`,{className:`flex flex-col gap-0.5`,children:t.map(e=>{let t=e.id===n,i=e.is_epic===!0;return(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{t||r(e.id)},disabled:t,"aria-label":a(i?`family.openParentEpic`:`family.openSubSpec`,{title:e.title}),"aria-current":t?`page`:void 0,className:[`w-full flex items-center gap-1.5 rounded px-1.5 py-1 text-left transition-colors`,t?`bg-accent-highlight/15 cursor-default`:`hover:bg-muted/30 cursor-pointer`].join(` `),"data-testid":`epic-family-row-${e.id}`,children:[i?(0,X.jsx)(O,{className:`w-3 h-3 text-accent-highlight flex-shrink-0`,"aria-hidden":!0}):(0,X.jsx)(`span`,{className:`text-[9px] tabular-nums text-foreground/40 w-3 text-center flex-shrink-0`,children:e.execution_order??`–`}),(0,X.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-full flex-shrink-0 ${pi(e.priority)}`,"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`text-[11px] truncate ${t?`text-foreground font-medium`:`text-foreground/80`}`,title:e.title,children:e.title})]})},e.id)})})]})}var _i=224,vi=8,yi=8;function bi({rails:e,onMoveToRail:t,onClose:n,anchorRect:r}){let{t:i}=v(`tickets`),a=(0,Y.useRef)(null),[o,s]=(0,Y.useState)(!1);(0,Y.useLayoutEffect)(()=>{let e=requestAnimationFrame(()=>s(!0));return()=>cancelAnimationFrame(e)},[]),(0,Y.useEffect)(()=>{function e(e){a.current&&(a.current.contains(e.target)||n())}function t(e){e.key===`Escape`&&n()}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[n]);let{top:c,left:l,caretLeft:u}=(0,Y.useMemo)(()=>{let e=r.left+r.width/2,t=e-_i/2,n=window.innerWidth-_i-vi,i=Math.max(vi,Math.min(n,t)),a=e-i,o=Math.max(12,Math.min(_i-12,a));return{top:r.bottom+yi,left:i,caretLeft:o}},[r]);return(0,X.jsxs)(`div`,{ref:a,role:`dialog`,"aria-label":i(`rail.popoverTitle`),"data-testid":`move-to-rail-popover`,style:{top:c,left:l,width:_i,opacity:+!!o,transform:o?`translateY(0) scale(1)`:`translateY(-4px) scale(0.97)`,transformOrigin:`${u}px top`,transition:`opacity 140ms ease-out, transform 160ms cubic-bezier(0.2, 0.9, 0.3, 1)`},className:`fixed z-50 rounded-xl border border-border/60 bg-card/95 backdrop-blur shadow-xl shadow-black/40 p-1`,children:[(0,X.jsx)(`div`,{"aria-hidden":!0,className:`absolute w-2 h-2 rotate-45 bg-card/95 border-l border-t border-border/60`,style:{top:-5,left:u-4}}),(0,X.jsx)(`div`,{className:`px-2 py-1.5 text-[10px] uppercase tracking-wider text-muted-foreground/70 font-medium`,children:i(`rail.popoverTitle`)}),e.length===0?(0,X.jsx)(`div`,{className:`px-2 py-2 text-xs text-muted-foreground`,children:i(`rail.noRails`)}):(0,X.jsx)(`ul`,{className:`flex flex-col`,children:e.map(e=>(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{t(e.id),n()},className:`w-full flex items-center gap-2 px-2 py-1.5 rounded-lg text-left text-sm hover:bg-accent-info/10 hover:text-accent-info transition-colors`,children:[e.status===`running`?(0,X.jsx)(z,{className:`w-3 h-3 text-accent-success animate-pulse shrink-0`,"aria-hidden":!0}):(0,X.jsx)(K,{className:`w-3 h-3 text-muted-foreground/60 shrink-0`,"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),(0,X.jsx)(ze,{className:`w-3.5 h-3.5 text-muted-foreground/40 shrink-0`,"aria-hidden":!0})]})},e.id))})]})}var xi=900,Si=.2,Ci=[`todo`,`in_progress`,`done`,`cancelled`],wi={draft:`ticketStatus.draft`,todo:`ticketStatus.todo`,in_progress:`ticketStatus.inProgress`,on_review:`ticketStatus.onReview`,done:`ticketStatus.done`,cancelled:`ticketStatus.cancelled`},Ti=[{value:`critical`,labelKey:`priority.critical`,className:`text-red-400`},{value:`high`,labelKey:`priority.high`,className:`text-orange-400`},{value:`medium`,labelKey:`priority.medium`,className:`text-yellow-400`},{value:`low`,labelKey:`priority.low`,className:`text-slate-400`}];function Ei(e){return e.jira_epic_key&&e.jira_url?e.jira_url.replace(/\/browse\/[^/]+$/,`/browse/${e.jira_epic_key}`):null}var Di={manual:`source.manual`,"product-backlog":`source.productBacklog`,"propose-spec":`source.proposeSpec`,"get-backlog-specs":`source.getBacklogSpecs`,"free-prompt":`source.freePrompt`};function Oi({ticket:e,allLabels:t,allTickets:n,onClose:r,onOpenTicket:i,onSave:a,onDelete:s,rails:c,onMoveToRail:l,onRemoveFromRail:u,embedded:d=!1}){let{t:f}=v(`tickets`),{t:p}=v(`jira`),{activeProjectId:m,projects:h}=x(),{enterSplit:g,state:y}=Zi(),b=y.originSide!==null,w=h.find(e=>e.id===m)?.provider,E=C(w),D=(0,Y.useMemo)(()=>(n??[]).filter(t=>t.parent_epic_id===e.id),[n,e.id]),O=(0,Y.useMemo)(()=>e.parent_epic_id==null?null:(n??[]).find(t=>t.id===e.parent_epic_id)??null,[n,e.parent_epic_id]),k=(0,Y.useMemo)(()=>O?(n??[]).filter(e=>e.parent_epic_id===O.id).length:0,[n,O]),[A,j]=(0,Y.useState)(e.title),[M,P]=(0,Y.useState)(e.description),[I,L]=(0,Y.useState)(e.priority??`medium`),[z,B]=(0,Y.useState)([...e.labels??[]]),[V,ne]=(0,Y.useState)(e.repositoryIds),[H,ie]=(0,Y.useState)(!1),[se,U]=(0,Y.useState)(!1),[W,_e]=(0,Y.useState)(``),[ve,be]=(0,Y.useState)(!1),[xe,Se]=(0,Y.useState)(!1),[Ce,we]=(0,Y.useState)(!1),[Te,Ee]=(0,Y.useState)(!1),[De,Oe]=(0,Y.useState)(!1),[ke,Ae]=(0,Y.useState)(!1),je=Tn(),Me=je.connected&&!!je.discardStatus&&e.source===`jira`&&!!e.jira_key,Ne=je.connected&&e.source===`jira`&&!!e.jira_key,[Pe,Fe]=(0,Y.useState)(e.attachments??[]);(0,Y.useEffect)(()=>{Fe(e.attachments??[])},[e.attachments,e.id]);let[Ie,Re]=(0,Y.useState)(!1),[ze,Be]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{if(!Ne)return;let e=!0;return ae.listStatuses().then(t=>{e&&Be(t.statuses)}).catch(()=>{e&&Be([])}),()=>{e=!1}},[Ne,e.id]);let K=e.jira_status??``,He=async t=>{if(t!==e.status){Re(!0);try{await a(e.id,{status:t})}finally{Re(!1)}}},Ue=async t=>{if(!(!t||t===K)){Re(!0);try{await ae.moveSpecToStatus(e.id,t),S.success(p(`moveToStatus.queued`,{status:t}))}catch{S.error(p(`moveToStatus.failed`))}finally{Re(!1)}}},We=(0,Y.useRef)(null),Ge=(0,Y.useRef)(null),Ke=(0,Y.useRef)(null),qe=(0,Y.useMemo)(()=>A!==e.title||M!==e.description||I!==e.priority||JSON.stringify(z)!==JSON.stringify(e.labels)||JSON.stringify(V)!==JSON.stringify(e.repositoryIds),[A,M,I,z,V,e]);(0,Y.useEffect)(()=>{H&&We.current?.focus()},[H]),(0,Y.useEffect)(()=>{if(se){let e=Ge.current;e&&(e.focus(),e.selectionStart=e.value.length)}},[se]),(0,Y.useEffect)(()=>{ve&&Ke.current?.focus()},[ve]),(0,Y.useEffect)(()=>{function e(e){e.key===`Escape`&&!H&&!se&&!xe&&r()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,H,se,xe]);let Je=(0,Y.useMemo)(()=>{if(!W.trim())return[];let e=W.toLowerCase();return t.filter(t=>t.toLowerCase().includes(e)&&!z.includes(t)).slice(0,5)},[W,t,z]),Ye=(0,Y.useCallback)(e=>{let t=e.trim();t&&!z.includes(t)&&B(e=>[...e,t]),_e(``)},[z]),Xe=(0,Y.useCallback)(e=>{B(t=>t.filter(t=>t!==e))},[]),Ze=(0,Y.useCallback)(async()=>{let t={};if(A!==e.title&&(t.title=A),M!==e.description&&(t.description=M),I!==e.priority&&(t.priority=I),JSON.stringify(z)!==JSON.stringify(e.labels)&&(t.labels=z),JSON.stringify(V)!==JSON.stringify(e.repositoryIds)&&(t.repositoryIds=V),Object.keys(t).length===0){r();return}Oe(!0);let n=await a(e.id,t);Oe(!1),n?(S.success(f(`detailModal.toast.updated`)),r()):S.error(f(`detailModal.toast.updateFailed`))},[A,M,I,z,V,e,a,r,f]),Qe=(0,Y.useCallback)(async()=>{if(ke)return;Ae(!0);let t=!1;try{t=await s(e.id)}catch{t=!1}if(Ae(!1),!t){S.error(f(`detailModal.toast.deleteFailed`));return}Se(!1),r()},[ke,e.id,s,r,f]),[$e,et]=(0,Y.useState)(0),q=(0,Y.useRef)(null),[tt,nt]=(0,Y.useState)(()=>typeof window<`u`&&window.innerWidth>=xi);(0,Y.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>nt(window.innerWidth>=xi);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let rt=!d&&!b&&tt,it=(0,Y.useCallback)(e=>{q.current&&et(e.clientX-q.current.startX)},[]),J=(0,Y.useCallback)(t=>{if(!q.current)return;let n=t.clientX-q.current.startX,i=window.innerWidth*Si;if(window.removeEventListener(`pointermove`,it),window.removeEventListener(`pointerup`,J),window.removeEventListener(`pointercancel`,J),q.current=null,et(0),Math.abs(n)>=i&&window.innerWidth>=xi){let t=y.leftId===e.id;g(n<0?`left`:`right`,e.id),t||r()}},[g,it,y.leftId,e.id,r]),at=(0,Y.useCallback)(e=>{rt&&e.button===0&&(e.target.closest(`button, input, textarea, select, [contenteditable="true"]`)||(q.current={startX:e.clientX,pointerId:e.pointerId},window.addEventListener(`pointermove`,it),window.addEventListener(`pointerup`,J),window.addEventListener(`pointercancel`,J)))},[rt,it,J]);(0,Y.useEffect)(()=>()=>{q.current&&(window.removeEventListener(`pointermove`,it),window.removeEventListener(`pointerup`,J),window.removeEventListener(`pointercancel`,J))},[it,J]);let ot=(0,Y.useCallback)(()=>{if(!rt||window.innerWidth<xi)return;let t=y.leftId===e.id;g(`right`,e.id),t||r()},[rt,g,y.leftId,e.id,r]),{panelRef:st,panelStyle:ct,resizeHandles:lt,guardBackdrop:ut}=ce({enabled:!d,allowMove:!1}),dt=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{ref:st,className:d?`relative w-full h-full rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 flex flex-col overflow-hidden`:`relative w-full max-w-[67rem] m-4 rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 flex flex-col animate-in fade-in zoom-in-95 duration-200 h-[90vh] max-h-[calc(100%-2rem)]`,style:{...$e===0?{transition:`transform 220ms cubic-bezier(0.34, 1.56, 0.64, 1)`}:{transform:`translateX(${$e}px)`,transition:`none`},...ct},children:[O&&(0,X.jsx)(`div`,{className:`px-5 pt-3`,children:(0,X.jsx)(di,{epic:O,childExecutionOrder:e.execution_order??null,totalChildren:k,onOpenEpic:()=>i?.(O.id)})}),(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-3 px-5 py-4 border-b border-border/30 ${rt?`cursor-grab active:cursor-grabbing`:``}`,onPointerDown:at,"data-testid":`ticket-modal-header`,children:[(0,X.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[H?(0,X.jsx)(`input`,{ref:We,value:A,onChange:e=>j(e.target.value),onBlur:()=>ie(!1),onKeyDown:t=>{t.key===`Enter`&&ie(!1),t.key===`Escape`&&(j(e.title),ie(!1))},className:`w-full bg-transparent border-b border-accent-primary/50 text-sm font-semibold text-foreground outline-none pb-0.5`}):(0,X.jsxs)(`button`,{type:`button`,onClick:()=>ie(!0),className:`group flex items-center gap-1.5 text-left w-full`,children:[(0,X.jsx)(`h2`,{className:`text-sm font-semibold text-foreground truncate`,children:A||f(`untitled`)}),(0,X.jsx)(R,{className:`w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0`})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5`,children:[(0,X.jsxs)(`span`,{className:`text-[10px] text-foreground font-mono`,children:[`#`,e.id]}),e.status===`on_review`&&(0,X.jsx)(`span`,{title:f(`specs:status.onReviewHint`),"data-testid":`ticket-modal-on-review-badge`,children:(0,X.jsx)(wn,{status:`on_review`})})]}),(0,X.jsx)(xn,{ticketId:e.id})]}),m&&(0,X.jsx)(`div`,{className:`shrink-0`,children:(0,X.jsx)(ui,{ticket:e,projectId:m,provider:w,featureFlagOn:E,childrenCount:D.length})}),(0,X.jsx)(Ai,{ticket:e,title:A,description:M,priority:I,labels:z,repositoryIds:V,onClose:r}),c&&(l||u)&&(0,X.jsx)(ji,{ticket:e,rails:c,onMoveToRail:l,onRemoveFromRail:u}),rt&&(0,X.jsxs)(G,{variant:`outline`,size:`sm`,className:`shrink-0 mr-1 gap-1.5`,"data-testid":`ticket-modal-compare`,onClick:ot,title:f(`detailModal.compareTooltip`),children:[(0,X.jsx)(Ve,{className:`w-3.5 h-3.5`}),f(`detailModal.compare`)]}),(0,X.jsx)(`button`,{onClick:r,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors cursor-pointer shrink-0`,"data-testid":`ticket-modal-close`,children:(0,X.jsx)(oe,{className:`w-4 h-4`})})]}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:(0,X.jsxs)(`div`,{className:`flex flex-col sm:flex-row h-full`,children:[(0,X.jsxs)(`div`,{className:`flex-1 min-w-0 px-5 py-4 space-y-4 flex flex-col`,children:[(0,X.jsxs)(`div`,{className:`flex-1 flex flex-col`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between mb-1.5`,children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider flex items-center gap-1.5`,children:f(`fields.description`)}),!se&&(0,X.jsxs)(`button`,{type:`button`,onClick:()=>U(!0),className:`text-[10px] text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1`,children:[(0,X.jsx)(R,{className:`w-2.5 h-2.5`}),f(`common:actions.edit`)]})]}),se?(0,X.jsxs)(`div`,{className:`space-y-1.5 flex-1 flex flex-col`,children:[(0,X.jsx)(`textarea`,{ref:Ge,value:M,onChange:e=>P(e.target.value),className:`w-full flex-1 rounded-lg border border-border bg-input px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground resize-none min-h-[300px]`,placeholder:f(`fields.markdownPlaceholder`)}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(G,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px]`,onClick:()=>U(!1),children:f(`detailModal.doneEditing`)}),(0,X.jsx)(`span`,{className:`text-[9px] text-muted-foreground`,children:f(`fields.supportsMarkdown`)})]})]}):M?(0,X.jsx)(Fi,{description:M,onEdit:()=>U(!0)}):(0,X.jsx)(`button`,{type:`button`,onClick:()=>U(!0),className:`w-full rounded-lg border border-dashed border-border/40 bg-muted/10 px-3 py-4 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/20 transition-colors text-center`,children:f(`detailModal.addDescription`)})]}),(0,X.jsx)(vn,{ticket:e}),(0,X.jsx)($t,{ticketKey:e.id,attachments:Pe,onChange:Fe}),(0,X.jsx)(en,{ticketId:e.id,onClose:r}),e.prerequisites&&e.prerequisites.length>0&&(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:f(`detailModal.prerequisites`)}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.prerequisites.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-mono bg-accent/60 text-foreground/70`,children:[`#`,e]},e))})]})]}),(0,X.jsxs)(`div`,{className:`sm:w-56 sm:border-l border-t sm:border-t-0 border-border/30 px-4 py-4 space-y-4 bg-muted/5`,children:[e.jira_url&&e.jira_key&&(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{o(e.jira_url)},"data-testid":`jira-go-to-ticket`,className:`w-full inline-flex items-center justify-center gap-1.5 h-7 rounded border border-accent-info/50 bg-accent-info/10 px-2 text-xs font-medium text-accent-info hover:bg-accent-info/20 transition-colors`,children:[(0,X.jsx)(F,{className:`w-3.5 h-3.5 shrink-0`}),p(`detail.goToTicket`,{key:e.jira_key})]}),e.jira_epic_key&&(0,X.jsxs)(`div`,{"data-testid":`jira-epic`,children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:p(`detail.epic`)}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>{let t=Ei(e);t&&o(t)},title:e.jira_epic_name??e.jira_epic_key,className:`w-full inline-flex items-center gap-1.5 rounded border border-accent-highlight/40 bg-accent-highlight/5 px-2 py-1.5 text-left text-xs hover:bg-accent-highlight/10 transition-colors`,children:[(0,X.jsx)(`span`,{className:`font-mono text-accent-highlight shrink-0`,children:e.jira_epic_key}),e.jira_epic_name&&(0,X.jsx)(`span`,{className:`truncate text-foreground/80`,children:e.jira_epic_name})]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:f(`fields.status`)}),Ne?(0,X.jsx)(`select`,{value:K,disabled:Ie||ze===null,onChange:e=>{Ue(e.target.value)},className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground disabled:opacity-60`,"data-testid":`ticket-jira-status-select`,children:ze===null?(0,X.jsx)(`option`,{value:K,children:K||f(`states.loading`,{ns:`common`})}):(0,X.jsxs)(X.Fragment,{children:[K&&!ze.some(e=>e.name===K)&&(0,X.jsx)(`option`,{value:K,children:K}),ze.map(e=>(0,X.jsx)(`option`,{value:e.name,children:e.name},e.name))]})}):(0,X.jsxs)(`select`,{value:e.status,disabled:Ie,onChange:e=>{He(e.target.value)},className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground disabled:opacity-60`,"data-testid":`ticket-status-select`,children:[!Ci.includes(e.status)&&(0,X.jsx)(`option`,{value:e.status,children:f(wi[e.status],{ns:`tickets`})}),Ci.map(e=>(0,X.jsx)(`option`,{value:e,children:f(wi[e],{ns:`tickets`})},e))]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:f(`fields.priority`)}),(0,X.jsx)(`select`,{value:I,onChange:e=>L(e.target.value),className:`w-full h-7 rounded border border-border bg-input px-2 text-xs text-foreground`,children:Ti.map(e=>(0,X.jsx)(`option`,{value:e.value,children:f(e.labelKey)},e.value))})]}),(0,X.jsx)(ye,{value:V,onChange:ne,disabled:De}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-1.5`,children:f(`fields.labels`)}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-1 mb-1.5`,children:z.map(e=>(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium bg-accent/60 text-foreground/70 group`,children:[e,(0,X.jsx)(`button`,{type:`button`,onClick:()=>Xe(e),className:`text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,X.jsx)(N,{className:`w-2.5 h-2.5`})})]},e))}),ve?(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(`input`,{ref:Ke,value:W,onChange:e=>_e(e.target.value),onKeyDown:e=>{e.key===`Enter`&&W.trim()&&(e.preventDefault(),Ye(W)),e.key===`Escape`&&(be(!1),_e(``))},onBlur:()=>{W.trim()&&Ye(W),be(!1),_e(``)},placeholder:f(`detailModal.addLabelPlaceholder`),className:`w-full h-6 rounded border border-border bg-input px-2 text-[10px] text-foreground placeholder:text-muted-foreground`}),Je.length>0&&(0,X.jsx)(`div`,{className:`absolute left-0 right-0 top-full mt-0.5 rounded border border-border/50 bg-popover shadow-lg z-10 py-0.5`,children:Je.map(e=>(0,X.jsx)(`button`,{type:`button`,onMouseDown:t=>{t.preventDefault(),Ye(e)},className:`w-full text-left px-2 py-1 text-[10px] hover:bg-accent/50 text-foreground/80`,children:e},e))})]}):(0,X.jsxs)(`button`,{type:`button`,onClick:()=>be(!0),className:`flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground transition-colors`,children:[(0,X.jsx)(te,{className:`w-2.5 h-2.5`}),f(`detailModal.addLabel`)]})]}),(0,X.jsx)(hi,{ticket:e,allTickets:n??[],onOpenTicket:e=>i?.(e)}),e.source===`jira`&&e.jira_key&&(0,X.jsx)(kn,{localId:e.id}),e.metadata?.effort_level&&(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:f(`detailModal.effort`)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.metadata.effort_level})]}),e.assignee&&(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wider block mb-0.5`,children:f(`detailModal.assignee`)}),(0,X.jsx)(`span`,{className:`text-xs text-foreground/70`,children:e.assignee})]})]})]})}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between px-5 py-3 border-t border-border/30`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-muted-foreground`,children:[(0,X.jsx)(`span`,{children:f(`meta.createdAgo`,{time:ki(e.created_at)})}),(0,X.jsx)(`span`,{children:f(`meta.updatedAgo`,{time:ki(e.updated_at)})}),e.source&&(0,X.jsx)(`span`,{className:`bg-muted/30 rounded px-1.5 py-0.5`,children:Di[e.source]?f(Di[e.source]):e.source})]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[Me?(0,X.jsxs)(G,{variant:`ghost`,size:`sm`,className:`h-7 text-xs text-accent-info hover:bg-accent-info/10`,onClick:()=>we(!0),"data-testid":`jira-move-to-button`,children:[(0,X.jsx)(Le,{className:`w-3 h-3 mr-1`}),p(`discard.moveButton`,{status:je.discardStatus})]}):(0,X.jsxs)(G,{variant:`ghost`,size:`sm`,className:`h-7 text-xs text-red-400 aurora-light:text-destructive hover:text-red-300 aurora-light:hover:text-destructive hover:bg-red-500/10 aurora-light:hover:bg-destructive/10`,onClick:()=>Se(!0),children:[(0,X.jsx)(re,{className:`w-3 h-3 mr-1`}),f(`common:actions.delete`)]}),qe&&(0,X.jsxs)(G,{size:`sm`,className:`h-7 text-xs`,onClick:()=>{Ne?Ee(!0):Ze()},disabled:De||!A.trim(),children:[(0,X.jsx)(T,{className:`w-3 h-3 mr-1`}),f(De?`common:states.saving`:`common:actions.save`)]})]})]})]}),(0,X.jsx)(ge,{open:xe,onOpenChange:e=>{ke||Se(e)},children:(0,X.jsxs)(he,{className:`max-w-sm`,children:[(0,X.jsxs)(me,{children:[(0,X.jsx)(pe,{children:f(`deleteDialog.title`)}),(0,X.jsx)(fe,{children:(0,X.jsx)(_,{t:f,i18nKey:`deleteDialog.body`,values:{id:e.id,title:e.title},components:{strong:(0,X.jsx)(`span`,{className:`font-semibold text-foreground`})}})})]}),(0,X.jsxs)(de,{children:[(0,X.jsx)(G,{variant:`outline`,size:`sm`,onClick:()=>Se(!1),disabled:ke,children:f(`common:actions.cancel`)}),(0,X.jsxs)(G,{variant:`destructive`,size:`sm`,onClick:()=>{Qe()},disabled:ke,"aria-busy":ke,children:[ke?(0,X.jsx)(ee,{className:`w-3.5 h-3.5 mr-1.5 animate-spin`}):(0,X.jsx)(re,{className:`w-3.5 h-3.5 mr-1.5`}),f(`common:actions.delete`)]})]})]})}),Me&&je.discardStatus&&(0,X.jsx)(En,{open:Ce,onOpenChange:we,ticket:{id:e.id,title:e.title,jira_key:e.jira_key},discardStatus:je.discardStatus,onDiscarded:r}),(0,X.jsx)(ge,{open:Te,onOpenChange:Ee,children:(0,X.jsxs)(he,{className:`max-w-md`,"data-testid":`jira-save-confirm`,children:[(0,X.jsxs)(me,{children:[(0,X.jsx)(pe,{children:p(`detail.saveTitle`)}),(0,X.jsx)(fe,{children:p(`detail.saveBody`,{key:e.jira_key??`#${e.id}`})})]}),(0,X.jsxs)(de,{children:[(0,X.jsx)(G,{variant:`outline`,size:`sm`,onClick:()=>Ee(!1),children:f(`common:actions.cancel`)}),(0,X.jsxs)(G,{size:`sm`,onClick:()=>{Ee(!1),Ze()},disabled:De,"data-testid":`jira-save-confirm-btn`,children:[(0,X.jsx)(T,{className:`w-3.5 h-3.5 mr-1.5`}),p(`detail.saveConfirm`)]})]})]})})]});return d?dt:(0,Nr.createPortal)((0,X.jsxs)(`div`,{style:le(),className:`fixed inset-0 z-[68] flex items-center justify-center`,children:[(0,X.jsx)(`div`,{className:`absolute inset-0 bg-black/70`,onClick:ut(r)}),dt,(0,X.jsx)(ue,{handles:lt})]}),document.body)}function ki(e){try{return ve(new Date(e),{addSuffix:!0,locale:p()})}catch{return e}}function Ai({ticket:e,title:t,description:n,priority:r,labels:i,repositoryIds:a,onClose:o}){let{t:s}=v(`tickets`),{triggerResume:c}=k(),{activeProjectId:l}=x(),{closeTicketDetail:u}=Zi();return Nn(e)?(0,X.jsxs)(G,{variant:`default`,size:`sm`,onClick:()=>{if(!l)return;let{body:d,criteria:f}=jn(n);c({kind:`explore-spec`,projectId:l,label:t||e.title||s(`detailModal.ticketFallbackLabel`,{id:e.id}),restoreRoute:`/`,params:{initialIdea:``,pendingSpecId:Pn(),initialAttachmentIds:[],resumeConversationId:e.origin_conversation_id??void 0,editTicket:{id:e.id,title:t,description:d,labels:i,priority:r,repositoryIds:a,acceptanceCriteria:f,status:e.status}}}),u(),o()},className:`shrink-0 mr-2`,"data-testid":`continue-editing`,children:[(0,X.jsx)(Ze,{className:`w-3.5 h-3.5 mr-1.5`}),s(`detailModal.continueEditing`)]}):null}function ji({ticket:e,rails:t,onMoveToRail:n,onRemoveFromRail:r}){let{t:i}=v(`tickets`),[a,o]=(0,Y.useState)(null),s=(0,Y.useRef)(null),c=t.find(t=>t.ticketIds.includes(e.id));return c?r?(0,X.jsxs)(G,{variant:`outline`,size:`sm`,className:`shrink-0 mr-2 gap-1.5 border-accent-warning/30 text-accent-warning hover:bg-accent-warning/10 hover:text-accent-warning`,"data-testid":`modal-remove-from-rail`,onClick:()=>r(e.id),title:i(`rail.currentlyOn`,{rail:c.label}),children:[(0,X.jsx)(w,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),i(`rail.removeFromRail`)]}):null:n?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(G,{ref:s,variant:`outline`,size:`sm`,className:`shrink-0 mr-2 gap-1.5 border-accent-info/30 text-accent-info hover:bg-accent-info/10 hover:text-accent-info`,"data-testid":`modal-move-to-rail`,onClick:()=>{s.current&&o(s.current.getBoundingClientRect())},children:[i(`rail.moveToRail`),(0,X.jsx)(Le,{className:`w-3.5 h-3.5`,"aria-hidden":!0})]}),a&&(0,X.jsx)(bi,{rails:t,anchorRect:a,onMoveToRail:t=>n(e.id,t),onClose:()=>o(null)})]}):null}var Mi=`
11
+
12
+ ---
13
+
14
+ ## Contract Layer
15
+
16
+ `;function Ni(e){let t=e.indexOf(Mi);return t<0?{user:e,contract:null}:{user:e.slice(0,t),contract:e.slice(t+26)}}function Pi(e){let t=[`### Naming Contract`,`### Data Shapes`,`### State Machine`,`### Invariants`,`### File Touch List`],n=0;for(let r of t){let t=e.indexOf(r);if(t<0)continue;let i=e.slice(t+r.length),a=i.indexOf(`N/A — model did not produce items`),o=i.indexOf(`### `);a>=0&&(o<0||a<o)||n++}return n}function Fi({description:e,onEdit:t}){let{t:n}=v(`tickets`),{openWebView:r}=Yr(),{user:i,contract:a}=Ni(e),o=i||e,s=(0,Y.useMemo)(()=>({a:({href:e,children:t})=>(0,X.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,onClick:t=>{typeof e==`string`&&/^https?:\/\//i.test(e)&&(t.preventDefault(),t.stopPropagation(),r(e))},children:t})}),[r]);return(0,X.jsxs)(`div`,{className:`flex-1 rounded-lg bg-muted/20 px-3 py-2 overflow-y-auto transition-colors`,onClick:e=>{e.target.closest(`details, summary`)||t()},role:`button`,style:{cursor:`pointer`},children:[(0,X.jsx)(`div`,{className:`prose prose-invert prose-xs max-w-none prose-p:my-1 prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold prose-ul:my-1 prose-ol:my-1 prose-li:my-0 prose-code:text-cyan-300 prose-code:text-[10px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded text-foreground/80 text-xs`,children:(0,X.jsx)(W,{remarkPlugins:[_e],components:s,children:o})}),a&&(0,X.jsxs)(`details`,{"data-testid":`contract-layer-disclosure`,className:`mt-3 rounded-md border border-border/40 bg-muted/10 px-2 py-1`,onClick:e=>e.stopPropagation(),children:[(0,X.jsxs)(`summary`,{className:`cursor-pointer text-[10px] font-medium text-foreground/80 select-none flex items-center gap-2`,children:[n(`contractLayer.title`),(0,X.jsx)(`span`,{className:`rounded-full bg-muted/40 px-1.5 text-[9px] text-foreground/60`,children:n(`contractLayer.populated`,{n:Pi(a)})})]}),(0,X.jsx)(`div`,{className:`mt-2 prose prose-invert prose-xs max-w-none prose-p:my-1 prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold prose-ul:my-1 prose-ol:my-1 prose-li:my-0 prose-code:text-cyan-300 prose-code:text-[10px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded text-foreground/80 text-xs`,children:(0,X.jsx)(W,{remarkPlugins:[_e],components:s,children:a})})]})]})}var Ii={critical:`bg-red-500/15 aurora-light:bg-destructive/10 text-red-400 aurora-light:text-destructive border-red-500/30 aurora-light:border-destructive/30`,high:`bg-orange-500/15 aurora-light:bg-accent-warning/10 text-orange-400 aurora-light:text-accent-warning border-orange-500/30 aurora-light:border-accent-warning/30`,medium:``,low:`bg-gray-500/15 aurora-light:bg-muted text-gray-400 aurora-light:text-muted-foreground border-gray-500/30 aurora-light:border-border`};function Li(e){try{return ve(new Date(e),{addSuffix:!0,locale:p()})}catch{return e}}function Ri({tickets:e,excludeIds:t,onSelect:n}){let{t:r}=v(`tickets`),[i,a]=(0,Y.useState)(``),o=(0,Y.useMemo)(()=>{let n=new Set(t),r=e.filter(e=>e.status!==`cancelled`&&!n.has(e.id));if(!i.trim())return r;let a=i.toLowerCase();return r.filter(e=>e.title.toLowerCase().includes(a)||e.description.toLowerCase().includes(a))},[e,t,i]);return(0,X.jsxs)(`div`,{"data-testid":`spec-compare-picker`,className:`h-full flex flex-col rounded-xl bg-card border border-border/40 shadow-2xl shadow-black/50 overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`px-4 py-3 border-b border-border/30 flex items-center gap-2`,children:[(0,X.jsx)(nt,{className:`w-3.5 h-3.5 text-muted-foreground`}),(0,X.jsx)(`span`,{className:`text-xs font-semibold text-foreground`,children:r(`comparePicker.title`)}),(0,X.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:r(`comparePicker.count`,{n:o.length})})]}),(0,X.jsx)(`div`,{className:`px-4 py-2 border-b border-border/20`,children:(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(ne,{className:`absolute left-2 top-1/2 -translate-y-1/2 w-3 h-3 text-muted-foreground`}),(0,X.jsx)(`input`,{type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:r(`comparePicker.searchPlaceholder`),className:`w-full h-7 rounded border border-border bg-input pl-7 pr-2 text-[11px] text-foreground placeholder:text-muted-foreground outline-none focus:border-accent-primary/60`})]})}),(0,X.jsx)(`div`,{className:`flex-1 overflow-y-auto`,"data-testid":`spec-compare-picker-list`,children:o.length===0?(0,X.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full text-center px-4 py-8 gap-2`,children:[(0,X.jsx)(nt,{className:`w-6 h-6 text-muted-foreground/40`}),(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i.trim()?r(`comparePicker.noMatches`):r(`comparePicker.empty`)})]}):(0,X.jsx)(`ul`,{className:`divide-y divide-border/10`,children:o.map(e=>(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,"data-testid":`spec-compare-card-${e.id}`,onClick:()=>n(e.id),className:`w-full text-left px-4 py-2.5 hover:bg-accent/30 transition-colors flex items-start gap-2 group`,children:[(0,X.jsx)(Cn,{status:e.status}),(0,X.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(`span`,{className:`text-[10px] font-mono text-muted-foreground`,children:[`#`,e.id]}),e.priority&&Ii[e.priority]&&(0,X.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] font-medium border ${Ii[e.priority]}`,children:r(`priority.${e.priority}`)})]}),(0,X.jsx)(`p`,{className:`mt-0.5 text-xs text-foreground truncate group-hover:text-accent-primary transition-colors`,children:e.title||r(`untitled`)}),e.description&&(0,X.jsx)(`p`,{className:`mt-0.5 text-[10px] text-muted-foreground line-clamp-1`,children:e.description.slice(0,120)}),e.labels&&e.labels.length>0&&(0,X.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:[e.labels.slice(0,3).map(e=>(0,X.jsx)(`span`,{className:`inline-flex items-center rounded px-1 py-0.5 text-[9px] bg-accent/40 text-foreground/60`,children:e},e)),e.labels.length>3&&(0,X.jsxs)(`span`,{className:`text-[9px] text-muted-foreground`,children:[`+`,e.labels.length-3]})]}),(0,X.jsx)(`p`,{className:`mt-1 text-[9px] text-muted-foreground`,children:r(`meta.updatedAgo`,{time:Li(e.updated_at)})})]})]})},e.id))})})]})}var zi=.25,Bi=.75;function Vi({state:e,leftTicket:t,rightTicket:n,allTickets:r,allLabels:i,onSave:a,onDelete:o,onOpenTicket:s,onCloseAll:c,onSetCompared:l,onSetRatio:u,onExitSplit:d}){let f=(0,Y.useRef)(null),p=(0,Y.useRef)(null),[m,h]=(0,Y.useState)(!0);(0,Y.useEffect)(()=>{let e=setTimeout(()=>h(!1),320);return()=>clearTimeout(e)},[]);let g=(0,Y.useCallback)(e=>{if(!p.current)return;let t=window.innerWidth,n=e.clientX/t;u(Math.min(Bi,Math.max(zi,n)))},[u]),_=(0,Y.useCallback)(e=>{if(!p.current)return;let{pointerId:t,element:n}=p.current;try{n.releasePointerCapture(t)}catch{}p.current=null,window.removeEventListener(`pointermove`,g),window.removeEventListener(`pointerup`,_),window.removeEventListener(`pointercancel`,_)},[g]),v=(0,Y.useCallback)(e=>{let t=e.currentTarget;try{t.setPointerCapture(e.pointerId)}catch{}p.current={pointerId:e.pointerId,element:t},window.addEventListener(`pointermove`,g),window.addEventListener(`pointerup`,_),window.addEventListener(`pointercancel`,_)},[g,_]);(0,Y.useEffect)(()=>()=>{window.removeEventListener(`pointermove`,g),window.removeEventListener(`pointerup`,_),window.removeEventListener(`pointercancel`,_);let e=p.current;if(e){try{e.element.releasePointerCapture(e.pointerId)}catch{}p.current=null}},[g,_]);let y=(0,Y.useCallback)(t=>{let n=.04;t.key===`ArrowLeft`?(t.preventDefault(),u(Math.max(zi,e.splitRatio-n))):t.key===`ArrowRight`?(t.preventDefault(),u(Math.min(Bi,e.splitRatio+n))):t.key===`Home`?(t.preventDefault(),u(zi)):t.key===`End`?(t.preventDefault(),u(Bi)):t.key===`0`&&(t.preventDefault(),u(.5))},[u,e.splitRatio]),b=e=>{e.target===e.currentTarget&&c()},x=u=>{let d=u===e.originSide,f=u===`left`?t:n;return f?(0,X.jsx)(Oi,{ticket:f,allLabels:i,allTickets:r,onClose:d?c:()=>l(null,u),onOpenTicket:s,onSave:a,onDelete:o,embedded:!0},`${u}-${f.id}`):(0,X.jsx)(Ri,{tickets:r,excludeIds:[t?.id,n?.id].filter(e=>e!=null),onSelect:e=>l(e,u)})},S=(e.splitRatio*100).toFixed(2),C=((1-e.splitRatio)*100).toFixed(2);return(0,Nr.createPortal)((0,X.jsxs)(`div`,{ref:f,"data-testid":`split-view-shell`,style:le(),className:`fixed inset-0 z-[68] flex`,onClick:b,children:[(0,X.jsx)(`div`,{className:`absolute inset-0 bg-black/70 pointer-events-none`,"aria-hidden":!0}),(0,X.jsxs)(`div`,{className:`relative flex w-full h-full`,style:{transition:m?`opacity 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:[(0,X.jsx)(`div`,{"data-testid":`split-panel-left`,className:`relative h-full overflow-hidden`,style:{width:`${S}%`,transition:m?`width 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:(0,X.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,X.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`left`)})})}),(0,X.jsx)(`div`,{"data-testid":`split-divider`,role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":Math.round(e.splitRatio*100),"aria-valuemin":Math.round(zi*100),"aria-valuemax":Math.round(Bi*100),tabIndex:0,onPointerDown:v,onKeyDown:y,className:`relative z-10 w-2 cursor-col-resize bg-border/40 hover:bg-accent-primary/40 transition-colors focus:outline-none focus:bg-accent-primary/60`}),(0,X.jsx)(`div`,{"data-testid":`split-panel-right`,className:`relative h-full overflow-hidden`,style:{width:`${C}%`,transition:m?`width 280ms cubic-bezier(0.34, 1.56, 0.64, 1)`:void 0},children:(0,X.jsx)(`div`,{className:`h-full flex items-center justify-center p-2`,children:(0,X.jsx)(`div`,{className:`w-full h-full max-h-[95vh]`,children:x(`right`)})})})]})]}),document.body)}var Hi=.5,Ui=.25,Wi=.75,Gi={leftId:null,rightId:null,originSide:null,splitRatio:Hi};function Ki(e){return Number.isFinite(e)?Math.min(Wi,Math.max(Ui,e)):Hi}function qi(e,t){switch(t.type){case`openCentered`:return e.originSide!==null&&e.leftId!==t.id&&e.rightId!==t.id?{leftId:t.id,rightId:null,originSide:null,splitRatio:Hi}:e.originSide!==null&&(e.leftId===t.id||e.rightId===t.id)?e:{...Gi,leftId:t.id};case`closeAll`:return Gi;case`enterSplit`:{let n=t.ticketId??e.leftId;return n===null||e.originSide!==null?e:t.side===`left`?{leftId:n,rightId:null,originSide:`left`,splitRatio:Hi}:{leftId:null,rightId:n,originSide:`right`,splitRatio:Hi}}case`setComparedTicket`:{if(e.originSide===null)return e;let n=e.originSide===`left`?`right`:`left`;return t.side===n?t.side===`left`?{...e,leftId:t.id}:{...e,rightId:t.id}:e}case`exitSplit`:{if(e.originSide===null)return e;let t=e.originSide===`left`?e.leftId:e.rightId;return{...Gi,leftId:t}}case`setSplitRatio`:return{...e,splitRatio:Ki(t.ratio)};default:return e}}var Ji=(0,Y.createContext)(null),Yi=900;function Xi({children:e}){let[t,n]=(0,Y.useReducer)(qi,Gi),{tickets:r,updateTicket:i,deleteTicket:a}=gt(),{activeProjectId:o,setActiveProjectId:s}=x(),c=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{n({type:`closeAll`});let e=c.current;e&&(c.current=null,e.projectId===o&&n({type:`openCentered`,id:e.ticketId}))},[o]);let l=(0,Y.useCallback)(e=>n({type:`openCentered`,id:e}),[]),u=(0,Y.useCallback)((e,t)=>{if(e===o){n({type:`openCentered`,id:t});return}c.current={projectId:e,ticketId:t},s(e)},[o,s]),d=(0,Y.useCallback)(()=>n({type:`closeAll`}),[]),f=(0,Y.useCallback)((e,t)=>{typeof window<`u`&&window.innerWidth<Yi||n({type:`enterSplit`,side:e,ticketId:t})},[]),p=(0,Y.useCallback)((e,t)=>n({type:`setComparedTicket`,id:e,side:t}),[]),m=(0,Y.useCallback)(()=>n({type:`exitSplit`}),[]),h=(0,Y.useCallback)(e=>n({type:`setSplitRatio`,ratio:e}),[]);(0,Y.useEffect)(()=>{if(typeof window>`u`)return;function e(){window.innerWidth<Yi&&n({type:`exitSplit`})}return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let g=(0,Y.useMemo)(()=>{let e=new Set;for(let t of r)for(let n of t.labels??[])e.add(n);return Array.from(e).sort()},[r]),_=t.leftId==null?null:r.find(e=>e.id===t.leftId)??null,v=t.rightId==null?null:r.find(e=>e.id===t.rightId)??null,y=(0,Y.useMemo)(()=>({openTicketDetail:l,openTicketDetailInProject:u,closeTicketDetail:d,enterSplit:f,setComparedTicket:p,exitSplit:m,setSplitRatio:h,state:t}),[l,u,d,f,p,m,h,t]),b=t.originSide!==null;return(0,X.jsxs)(Ji.Provider,{value:y,children:[e,!b&&_&&(0,X.jsx)(Oi,{ticket:_,allLabels:g,allTickets:r,onClose:d,onOpenTicket:l,onSave:i,onDelete:a},_.id),b&&(0,X.jsx)(Vi,{state:t,leftTicket:_,rightTicket:v,allTickets:r,allLabels:g,onSave:i,onDelete:a,onOpenTicket:l,onCloseAll:d,onSetCompared:p,onSetRatio:h,onExitSplit:m})]})}function Zi(){return(0,Y.useContext)(Ji)||{openTicketDetail:()=>{typeof console<`u`&&console.warn(`[TicketDetailModalContext] openTicketDetail called without provider`)},openTicketDetailInProject:()=>{typeof console<`u`&&console.warn(`[TicketDetailModalContext] openTicketDetailInProject called without provider`)},closeTicketDetail:()=>{},enterSplit:()=>{},setComparedTicket:()=>{},exitSplit:()=>{},setSplitRatio:()=>{},state:Gi}}export{Re as $,Cn as A,q as B,Yn as C,jn as D,Nn as E,Lt as F,Je as G,Ze as H,gt as I,We as J,qe as K,ct as L,Ut as M,zt as N,En as O,qt as P,Be as Q,lt as R,tr as S,Pn as T,Xe as U,et as V,Ye as W,Ve as X,Ue as Y,K as Z,$n as _,ei as a,Te as at,rr as b,Wr as c,Ee as ct,jr as d,je as dt,Le as et,Cr as f,Me as ft,ir as g,In as h,xe as ht,bi as i,we as it,pn as j,Tn as k,Ur as l,Ie as lt,or as m,Fe as mt,Zi as n,De as nt,Jr as o,Pe as ot,hr as p,Se as pt,Ge as q,Oi as r,Oe as rt,Yr as s,ke as st,Xi as t,Ce as tt,Lr as u,Ne as ut,ar as v,nr as w,er as x,Fn as y,nt as z};
@@ -1 +1 @@
1
- import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{j as r}from"./useSharedWebSocket-DaWuiO0S.js";import{a as i,d as a,f as o,i as s,l as c,p as l,s as u,u as d}from"./createLucideIcon-Bjbbp_KS.js";var f=t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}})),p=e(n()),m=e(f()),h=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function g(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(m.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(h),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var _=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,v=/^\s*$/,y=Object.create(null);function b(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(b,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var x={parse:function(e,t){t||={},t.components||=y;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(_,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=g(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=g(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),_=e.slice(f,h===-1?void 0:h);v.test(_)&&(_=` `),(h>-1&&a+l.length>=0||_!==` `)&&l.push({type:`text`,content:_})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+b(``,t)},``)}},S=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},C=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?T(t):t},w=e=>Array.isArray(e)&&e.every(p.isValidElement),T=e=>Array.isArray(e)?e:[e],E=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},D=e=>{let t={};if(!e)return t;let n=e=>{T(e).forEach(e=>{a(e)||(S(e)?n(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},O=(e,t,n,r)=>{if(!e)return``;let i=``,s=T(e),c=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return s.forEach((e,s)=>{if(a(e)){i+=`${e}`;return}if((0,p.isValidElement)(e)){let{props:o,type:l}=e,u=Object.keys(o).length,d=c.indexOf(l)>-1,f=o.children;if(!f&&d&&!u){i+=`<${l}/>`;return}if(!f&&(!d||u)||o.i18nIsDynamicList){i+=`<${s}></${s}>`;return}if(d&&u<=1){let e=a(f)?f:O(f,t,n,r);i+=`<${l}>${e}</${l}>`;return}let p=O(f,t,n,r);i+=`<${s}>${p}</${s}>`;return}if(e===null){o(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(d(e)){let{format:t,...a}=e,s=Object.keys(a);if(s.length===1){let e=t?`${s[0]}, ${t}`:s[0];i+=`{{${e}}}`;return}o(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}o(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},k=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},A=(e,t,n,r,i,o,s)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],f=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!f&&!s)return[n];let m=t??{},h=e=>{T(e).forEach(e=>{a(e)||(S(e)?h(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(m,e))})};h(e);let g=k(n,l,m),_=x.parse(`<0>${g}</0>`),v={...m,...o},y=(e,t,n)=>{let r=C(e),i=D(r,t.children,n);return w(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,p.cloneElement)(e,{key:r},i?void 0:t))):n.push(...p.Children.map([e],e=>{if(e.type===p.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,p.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,p.cloneElement)(e,n,i?null:t)}))},D=(e,n,o)=>{let m=T(e),h=T(n),g={};return h.reduce((e,n,h)=>{let _=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let u=m[parseInt(n.name,10)];!u&&t&&(u=t[n.name]),o.length===1&&!u&&(u=o[0][n.name]),u||={};let x={...n.attrs};s&&Object.keys(x).forEach(e=>{let t=x[e];a(t)&&(x[e]=c(t))});let w=Object.keys(x).length===0?u:E({props:x},u),O=(0,p.isValidElement)(w),k=O&&S(n,!0)&&!n.voidElement,A=f&&d(w)&&w.dummy&&!O,j=d(t)&&Object.hasOwnProperty.call(t,n.name);if(a(w)){let t=r.services.interpolator.interpolate(w,v,r.language);e.push(t)}else if(S(w)||k){let t=y(w,n,o);b(w,t,e,h)}else if(A){let t=D(m,n.children,o);b(w,t,e,h)}else if(Number.isNaN(parseFloat(n.name)))if(j){let t=y(w,n,o);b(w,t,e,h,n.voidElement)}else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`}));else{let t=g[n.name]||0;g[n.name]=t+1;let r,i=0;for(let e=0;e<m.length;e+=1){let a=m[e];if((0,p.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let a=r?T(C(r)):m,s=D(a,n.children,o);e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`},s))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=D(m,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(d(w)&&!O){let t=n.children[0]?_:null;t&&e.push(t)}else b(w,_,e,h,n.children.length!==1||!_)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:u().unescape,o=s?a(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push((0,p.createElement)(t,{key:`${n.name}-${h}`},o)):e.push(o)}return e},[])};return C(D([{dummy:!0,children:e||[]}],_,T(e||[]))[0])},j=(e,t,n)=>{let r=e.key||t,i=(0,p.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,p.createElement)(p.Fragment,null,i)}return(0,p.createElement)(a,{key:r})},M=(e,t)=>e.map((e,n)=>j(e,n,t)),N=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:j(e[r],r,t)})}),n},P=(e,t,n,r)=>e?Array.isArray(e)?M(e,t):d(e)?N(e,t):(l(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,F=e=>!d(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function I({children:e,count:t,parent:n,i18nKey:o,context:s,tOptions:c={},values:d,defaults:f,components:m,ns:h,i18n:g,t:_,shouldUnescape:v,...y}){let b=g||i();if(!b)return l(b,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:o}),e;let x=_||b.t.bind(b)||(e=>e),S={...u(),...b.options?.react},C=h||x.ns||b.options?.defaultNS;C=a(C)?[C]:C||[`translation`];let{transDefaultProps:w}=S,T=w?.tOptions?{...w.tOptions,...c}:c,E=v??w?.shouldUnescape,k=w?.values?{...w.values,...d}:d,j=w?.components?{...w.components,...m}:m,M=O(e,S,b,o),N=f||T?.defaultValue||M||S.transEmptyNodeValue||(typeof o==`function`?r(o):o),{hashTransKey:I}=S,L=o||(I?I(M||N):M||N);d=b.options?.interpolation?.defaultVariables?k&&Object.keys(k).length>0?{...k,...b.options.interpolation.defaultVariables}:{...b.options.interpolation.defaultVariables}:k;let R=D(e);R&&typeof R.count==`number`&&t===void 0&&(t=R.count);let z=d||t!==void 0&&!b.options?.interpolation?.alwaysFormat||!e?T.interpolation:{interpolation:{...T.interpolation,prefix:`#$?`,suffix:`?$#`}},B={...T,context:s||T.context,count:t,...d,...z,defaultValue:N,ns:C},V=L?x(L,B):N;V===L&&N&&(V=N);let H=P(j,V,b,o),U=H||e,W=null;F(H)&&(W=H,U=e);let G=A(U,W,V,b,S,B,E),K=n??S.defaultTransParent;return K?(0,p.createElement)(K,y,G):G}function L({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o={},values:c,defaults:l,components:u,ns:d,i18n:f,t:m,shouldUnescape:h,...g}){let{i18n:_,defaultNS:v}=(0,p.useContext)(s)||{},y=f||_||i(),b=m||y?.t.bind(y);return I({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o,values:c,defaults:l,components:u,ns:d||b?.ns||v||y?.options?.defaultNS,i18n:y,t:m,shouldUnescape:h,...g})}export{L as t};
1
+ import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{j as r}from"./useSharedWebSocket-BEHPeU1Y.js";import{a as i,d as a,f as o,i as s,l as c,p as l,s as u,u as d}from"./createLucideIcon-Bjbbp_KS.js";var f=t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}})),p=e(n()),m=e(f()),h=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function g(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(m.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(h),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var _=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,v=/^\s*$/,y=Object.create(null);function b(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(b,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var x={parse:function(e,t){t||={},t.components||=y;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(_,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=g(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=g(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),_=e.slice(f,h===-1?void 0:h);v.test(_)&&(_=` `),(h>-1&&a+l.length>=0||_!==` `)&&l.push({type:`text`,content:_})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+b(``,t)},``)}},S=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},C=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?T(t):t},w=e=>Array.isArray(e)&&e.every(p.isValidElement),T=e=>Array.isArray(e)?e:[e],E=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},D=e=>{let t={};if(!e)return t;let n=e=>{T(e).forEach(e=>{a(e)||(S(e)?n(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},O=(e,t,n,r)=>{if(!e)return``;let i=``,s=T(e),c=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return s.forEach((e,s)=>{if(a(e)){i+=`${e}`;return}if((0,p.isValidElement)(e)){let{props:o,type:l}=e,u=Object.keys(o).length,d=c.indexOf(l)>-1,f=o.children;if(!f&&d&&!u){i+=`<${l}/>`;return}if(!f&&(!d||u)||o.i18nIsDynamicList){i+=`<${s}></${s}>`;return}if(d&&u<=1){let e=a(f)?f:O(f,t,n,r);i+=`<${l}>${e}</${l}>`;return}let p=O(f,t,n,r);i+=`<${s}>${p}</${s}>`;return}if(e===null){o(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(d(e)){let{format:t,...a}=e,s=Object.keys(a);if(s.length===1){let e=t?`${s[0]}, ${t}`:s[0];i+=`{{${e}}}`;return}o(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}o(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},k=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},A=(e,t,n,r,i,o,s)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],f=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!f&&!s)return[n];let m=t??{},h=e=>{T(e).forEach(e=>{a(e)||(S(e)?h(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(m,e))})};h(e);let g=k(n,l,m),_=x.parse(`<0>${g}</0>`),v={...m,...o},y=(e,t,n)=>{let r=C(e),i=D(r,t.children,n);return w(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,p.cloneElement)(e,{key:r},i?void 0:t))):n.push(...p.Children.map([e],e=>{if(e.type===p.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,p.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,p.cloneElement)(e,n,i?null:t)}))},D=(e,n,o)=>{let m=T(e),h=T(n),g={};return h.reduce((e,n,h)=>{let _=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let u=m[parseInt(n.name,10)];!u&&t&&(u=t[n.name]),o.length===1&&!u&&(u=o[0][n.name]),u||={};let x={...n.attrs};s&&Object.keys(x).forEach(e=>{let t=x[e];a(t)&&(x[e]=c(t))});let w=Object.keys(x).length===0?u:E({props:x},u),O=(0,p.isValidElement)(w),k=O&&S(n,!0)&&!n.voidElement,A=f&&d(w)&&w.dummy&&!O,j=d(t)&&Object.hasOwnProperty.call(t,n.name);if(a(w)){let t=r.services.interpolator.interpolate(w,v,r.language);e.push(t)}else if(S(w)||k){let t=y(w,n,o);b(w,t,e,h)}else if(A){let t=D(m,n.children,o);b(w,t,e,h)}else if(Number.isNaN(parseFloat(n.name)))if(j){let t=y(w,n,o);b(w,t,e,h,n.voidElement)}else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`}));else{let t=g[n.name]||0;g[n.name]=t+1;let r,i=0;for(let e=0;e<m.length;e+=1){let a=m[e];if((0,p.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let a=r?T(C(r)):m,s=D(a,n.children,o);e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`},s))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=D(m,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(d(w)&&!O){let t=n.children[0]?_:null;t&&e.push(t)}else b(w,_,e,h,n.children.length!==1||!_)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:u().unescape,o=s?a(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push((0,p.createElement)(t,{key:`${n.name}-${h}`},o)):e.push(o)}return e},[])};return C(D([{dummy:!0,children:e||[]}],_,T(e||[]))[0])},j=(e,t,n)=>{let r=e.key||t,i=(0,p.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,p.createElement)(p.Fragment,null,i)}return(0,p.createElement)(a,{key:r})},M=(e,t)=>e.map((e,n)=>j(e,n,t)),N=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:j(e[r],r,t)})}),n},P=(e,t,n,r)=>e?Array.isArray(e)?M(e,t):d(e)?N(e,t):(l(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,F=e=>!d(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function I({children:e,count:t,parent:n,i18nKey:o,context:s,tOptions:c={},values:d,defaults:f,components:m,ns:h,i18n:g,t:_,shouldUnescape:v,...y}){let b=g||i();if(!b)return l(b,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:o}),e;let x=_||b.t.bind(b)||(e=>e),S={...u(),...b.options?.react},C=h||x.ns||b.options?.defaultNS;C=a(C)?[C]:C||[`translation`];let{transDefaultProps:w}=S,T=w?.tOptions?{...w.tOptions,...c}:c,E=v??w?.shouldUnescape,k=w?.values?{...w.values,...d}:d,j=w?.components?{...w.components,...m}:m,M=O(e,S,b,o),N=f||T?.defaultValue||M||S.transEmptyNodeValue||(typeof o==`function`?r(o):o),{hashTransKey:I}=S,L=o||(I?I(M||N):M||N);d=b.options?.interpolation?.defaultVariables?k&&Object.keys(k).length>0?{...k,...b.options.interpolation.defaultVariables}:{...b.options.interpolation.defaultVariables}:k;let R=D(e);R&&typeof R.count==`number`&&t===void 0&&(t=R.count);let z=d||t!==void 0&&!b.options?.interpolation?.alwaysFormat||!e?T.interpolation:{interpolation:{...T.interpolation,prefix:`#$?`,suffix:`?$#`}},B={...T,context:s||T.context,count:t,...d,...z,defaultValue:N,ns:C},V=L?x(L,B):N;V===L&&N&&(V=N);let H=P(j,V,b,o),U=H||e,W=null;F(H)&&(W=H,U=e);let G=A(U,W,V,b,S,B,E),K=n??S.defaultTransParent;return K?(0,p.createElement)(K,y,G):G}function L({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o={},values:c,defaults:l,components:u,ns:d,i18n:f,t:m,shouldUnescape:h,...g}){let{i18n:_,defaultNS:v}=(0,p.useContext)(s)||{},y=f||_||i(),b=m||y?.t.bind(y);return I({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o,values:c,defaults:l,components:u,ns:d||b?.ns||v||y?.options?.defaultNS,i18n:y,t:m,shouldUnescape:h,...g})}export{L as t};