@shipit-ai/cli 1.165.0 → 1.166.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 (742) hide show
  1. package/LICENSE +2 -1
  2. package/README.md +6 -0
  3. package/apis/json-schema/AgentSession.yaml +1 -1
  4. package/apis/json-schema/AgentType.yaml +2 -0
  5. package/dist/eslint.config.mjs +2 -0
  6. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.js +1 -1
  8. package/dist/packages/core/src/application/use-cases/agents/delete-agent-run.use-case.js +1 -1
  9. package/dist/packages/core/src/domain/generated/output.d.ts +3 -1
  10. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  11. package/dist/packages/core/src/domain/generated/output.js +2 -0
  12. package/dist/packages/core/src/infrastructure/di/modules/agents.module.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/di/modules/agents.module.js +6 -0
  14. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +33 -0
  16. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +2 -0
  18. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +1 -1
  19. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +1 -1
  20. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts +34 -0
  21. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -0
  22. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +149 -0
  23. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +2 -2
  24. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +1 -1
  25. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +2 -2
  27. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +1 -1
  28. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +1 -1
  30. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts +37 -0
  31. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts.map +1 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.js +150 -0
  33. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +1 -1
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -1
  35. package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.js +1 -1
  36. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +1 -1
  37. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.js +1 -1
  38. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  39. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +3 -3
  40. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/copilot-cli.json +31 -0
  41. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/rovo-dev.json +31 -0
  42. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  43. package/dist/src/presentation/web/app/actions/check-agent-auth.js +35 -0
  44. package/dist/src/presentation/web/app/actions/check-agent-tool.d.ts.map +1 -1
  45. package/dist/src/presentation/web/app/actions/check-agent-tool.js +4 -0
  46. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  47. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +8 -2
  48. package/dist/src/presentation/web/components/assistant-ui/thread.js +2 -2
  49. package/dist/src/presentation/web/components/common/action-button/action-button.js +2 -2
  50. package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts +1 -1
  51. package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.js +3 -2
  54. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.stories.d.ts +1 -1
  55. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.stories.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.stories.js +1 -1
  57. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.js +2 -2
  59. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts +1 -1
  60. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.js +1 -1
  62. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.js +2 -2
  63. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.stories.d.ts +1 -1
  64. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.stories.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.stories.js +1 -1
  66. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +1 -1
  67. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.js +4 -4
  69. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts +1 -1
  70. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts.map +1 -1
  71. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +3 -3
  72. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +1 -1
  73. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts.map +1 -1
  74. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +1 -1
  75. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.stories.d.ts +1 -1
  76. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.stories.d.ts.map +1 -1
  77. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +3 -3
  79. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.stories.d.ts +1 -1
  80. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.stories.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +5 -5
  82. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.stories.d.ts +1 -1
  83. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.stories.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.js +2 -2
  85. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.d.ts +1 -1
  86. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.js +1 -1
  88. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.js +2 -2
  89. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts +1 -1
  90. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +2 -2
  92. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +1 -1
  93. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +1 -1
  95. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.stories.d.ts +1 -1
  96. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.stories.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.stories.js +1 -1
  98. package/dist/src/presentation/web/components/common/editor-type-icons.stories.d.ts +1 -1
  99. package/dist/src/presentation/web/components/common/editor-type-icons.stories.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts +1 -1
  101. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.d.ts +1 -1
  103. package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +1 -1
  105. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  106. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -1
  107. package/dist/src/presentation/web/components/common/feature-create-drawer/parent-feature-combobox.stories.d.ts +1 -1
  108. package/dist/src/presentation/web/components/common/feature-create-drawer/parent-feature-combobox.stories.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/common/feature-create-drawer/prompt-section.stories.d.ts +1 -1
  110. package/dist/src/presentation/web/components/common/feature-create-drawer/prompt-section.stories.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/common/feature-create-drawer/prompt-section.stories.js +1 -1
  112. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.js +2 -2
  113. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +1 -1
  114. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -1
  115. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts +1 -1
  116. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts.map +1 -1
  117. package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.js +1 -1
  118. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +7 -7
  119. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +1 -1
  120. package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -1
  121. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.js +2 -2
  122. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts +1 -1
  123. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/common/feature-drawer-tabs/branch-sync-status.stories.js +1 -1
  125. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.js +4 -6
  126. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts +1 -1
  127. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts.map +1 -1
  128. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +2 -2
  129. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +1 -1
  130. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -1
  131. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +2 -2
  132. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +1 -1
  133. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -1
  134. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +4 -4
  135. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +1 -1
  136. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
  137. package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +1 -1
  138. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +4 -4
  139. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +1 -1
  140. package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -1
  141. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +1 -1
  142. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -1
  143. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts +1 -1
  144. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  145. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +3 -3
  146. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +5 -11
  147. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -1
  148. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  149. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -1
  150. package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.stories.d.ts +1 -1
  151. package/dist/src/presentation/web/components/common/feature-node/feature-sessions-dropdown.stories.d.ts.map +1 -1
  152. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts +1 -1
  153. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts.map +1 -1
  154. package/dist/src/presentation/web/components/common/feature-status-config.js +2 -2
  155. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts +1 -1
  156. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts.map +1 -1
  157. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +2 -2
  158. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.d.ts +1 -1
  159. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.stories.d.ts.map +1 -1
  160. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.d.ts +1 -1
  161. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.d.ts.map +1 -1
  162. package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.stories.js +1 -1
  163. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.js +3 -3
  164. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.d.ts +1 -1
  165. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.d.ts.map +1 -1
  166. package/dist/src/presentation/web/components/common/github-import-dialog/github-repo-browser.stories.js +1 -1
  167. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.js +2 -2
  168. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.d.ts +1 -1
  169. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.d.ts.map +1 -1
  170. package/dist/src/presentation/web/components/common/github-import-dialog/github-url-input.stories.js +1 -1
  171. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.d.ts +1 -1
  172. package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.d.ts.map +1 -1
  173. package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.d.ts +1 -1
  174. package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.d.ts.map +1 -1
  175. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.d.ts +1 -1
  176. package/dist/src/presentation/web/components/common/merge-review/diff-view.stories.d.ts.map +1 -1
  177. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +3 -5
  178. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +1 -1
  179. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  180. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -1
  181. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.js +2 -2
  182. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts +1 -1
  183. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
  184. package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +1 -1
  185. package/dist/src/presentation/web/components/common/page-header/page-header.stories.d.ts +1 -1
  186. package/dist/src/presentation/web/components/common/page-header/page-header.stories.d.ts.map +1 -1
  187. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +1 -1
  188. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  189. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -1
  190. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.d.ts +1 -1
  191. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.d.ts.map +1 -1
  192. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.js +2 -2
  193. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.stories.d.ts +1 -1
  194. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.stories.d.ts.map +1 -1
  195. package/dist/src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.stories.js +1 -1
  196. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.js +2 -2
  197. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.d.ts +1 -1
  198. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.d.ts.map +1 -1
  199. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.js +1 -1
  200. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts +1 -1
  201. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts.map +1 -1
  202. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +1 -1
  203. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  204. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +4 -7
  205. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts +1 -1
  206. package/dist/src/presentation/web/components/common/repository-node/repository-node.stories.d.ts.map +1 -1
  207. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.d.ts +1 -1
  208. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.d.ts.map +1 -1
  209. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.stories.d.ts +1 -1
  210. package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.stories.d.ts.map +1 -1
  211. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +1 -1
  212. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -1
  213. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +1 -1
  214. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -1
  215. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +1 -1
  216. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -1
  217. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.d.ts +1 -1
  218. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.d.ts.map +1 -1
  219. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js +4 -4
  220. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts +1 -1
  221. package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts.map +1 -1
  222. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +1 -1
  223. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  224. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -1
  225. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts +1 -1
  226. package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts.map +1 -1
  227. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts +1 -1
  228. package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts.map +1 -1
  229. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.js +7 -7
  230. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts +1 -1
  231. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts.map +1 -1
  232. package/dist/src/presentation/web/components/features/chat/ChatComposer.stories.d.ts +1 -1
  233. package/dist/src/presentation/web/components/features/chat/ChatComposer.stories.d.ts.map +1 -1
  234. package/dist/src/presentation/web/components/features/chat/ChatComposer.stories.js +1 -1
  235. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts +1 -1
  236. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts.map +1 -1
  237. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts +1 -1
  238. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts.map +1 -1
  239. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts +1 -1
  240. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts.map +1 -1
  241. package/dist/src/presentation/web/components/features/chat/ChatMessageList.stories.d.ts +2 -2
  242. package/dist/src/presentation/web/components/features/chat/ChatMessageList.stories.d.ts.map +1 -1
  243. package/dist/src/presentation/web/components/features/chat/ChatSheet.stories.d.ts +2 -2
  244. package/dist/src/presentation/web/components/features/chat/ChatSheet.stories.d.ts.map +1 -1
  245. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts +1 -1
  246. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts.map +1 -1
  247. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +9 -13
  248. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +1 -1
  249. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
  250. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  251. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -2
  252. package/dist/src/presentation/web/components/features/control-center/control-center-inner.stories.d.ts +2 -2
  253. package/dist/src/presentation/web/components/features/control-center/control-center-inner.stories.d.ts.map +1 -1
  254. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +1 -1
  255. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  256. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +3 -3
  257. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.d.ts +1 -1
  258. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.d.ts.map +1 -1
  259. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.stories.js +1 -1
  260. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.stories.d.ts +2 -2
  261. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.stories.d.ts.map +1 -1
  262. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.stories.js +1 -1
  263. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.d.ts +1 -1
  264. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.d.ts.map +1 -1
  265. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +1 -1
  266. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  267. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +1 -4
  268. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -1
  269. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
  270. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +1 -1
  271. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts +1 -1
  272. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.d.ts.map +1 -1
  273. package/dist/src/presentation/web/components/features/settings/ModelPicker/ModelPicker.stories.js +1 -1
  274. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -1
  275. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  276. package/dist/src/presentation/web/components/features/settings/ci-settings-section.stories.d.ts +1 -1
  277. package/dist/src/presentation/web/components/features/settings/ci-settings-section.stories.d.ts.map +1 -1
  278. package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.d.ts +1 -1
  279. package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.d.ts.map +1 -1
  280. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +1 -1
  281. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  282. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.stories.d.ts +1 -1
  283. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.stories.d.ts.map +1 -1
  284. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts +1 -1
  285. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  286. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.stories.d.ts +1 -1
  287. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.stories.d.ts.map +1 -1
  288. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts +1 -1
  289. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts.map +1 -1
  290. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts +1 -1
  291. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
  292. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +1 -1
  293. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  294. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
  295. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
  296. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +1 -1
  297. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.stories.d.ts +1 -1
  298. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.stories.d.ts.map +1 -1
  299. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts +1 -1
  300. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts.map +1 -1
  301. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
  302. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  303. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts +1 -1
  304. package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts.map +1 -1
  305. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts +1 -1
  306. package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts.map +1 -1
  307. package/dist/src/presentation/web/components/features/skills/skill-card.stories.js +3 -3
  308. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts +1 -1
  309. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts.map +1 -1
  310. package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.js +3 -3
  311. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts +1 -1
  312. package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts.map +1 -1
  313. package/dist/src/presentation/web/components/features/skills/skill-list.stories.js +4 -4
  314. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +1 -1
  315. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -1
  316. package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +8 -8
  317. package/dist/src/presentation/web/components/features/tools/tool-card.js +3 -5
  318. package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts +1 -1
  319. package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts.map +1 -1
  320. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +3 -7
  321. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts +1 -1
  322. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts.map +1 -1
  323. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts +1 -1
  324. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts.map +1 -1
  325. package/dist/src/presentation/web/components/features/version/version-page-client.stories.d.ts +1 -1
  326. package/dist/src/presentation/web/components/features/version/version-page-client.stories.d.ts.map +1 -1
  327. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.stories.d.ts +1 -1
  328. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.stories.d.ts.map +1 -1
  329. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts +1 -1
  330. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  331. package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.d.ts +1 -1
  332. package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.d.ts.map +1 -1
  333. package/dist/src/presentation/web/components/layouts/header/header.stories.d.ts +1 -1
  334. package/dist/src/presentation/web/components/layouts/header/header.stories.d.ts.map +1 -1
  335. package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.d.ts +1 -1
  336. package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.d.ts.map +1 -1
  337. package/dist/src/presentation/web/components/ui/accordion.stories.d.ts +1 -1
  338. package/dist/src/presentation/web/components/ui/accordion.stories.d.ts.map +1 -1
  339. package/dist/src/presentation/web/components/ui/alert-dialog.stories.d.ts +1 -1
  340. package/dist/src/presentation/web/components/ui/alert-dialog.stories.d.ts.map +1 -1
  341. package/dist/src/presentation/web/components/ui/alert.stories.d.ts +1 -1
  342. package/dist/src/presentation/web/components/ui/alert.stories.d.ts.map +1 -1
  343. package/dist/src/presentation/web/components/ui/alert.stories.js +2 -2
  344. package/dist/src/presentation/web/components/ui/badge.stories.d.ts +1 -1
  345. package/dist/src/presentation/web/components/ui/badge.stories.d.ts.map +1 -1
  346. package/dist/src/presentation/web/components/ui/button.stories.d.ts +1 -1
  347. package/dist/src/presentation/web/components/ui/button.stories.d.ts.map +1 -1
  348. package/dist/src/presentation/web/components/ui/card.stories.d.ts +1 -1
  349. package/dist/src/presentation/web/components/ui/card.stories.d.ts.map +1 -1
  350. package/dist/src/presentation/web/components/ui/checkbox-group-item.stories.d.ts +1 -1
  351. package/dist/src/presentation/web/components/ui/checkbox-group-item.stories.d.ts.map +1 -1
  352. package/dist/src/presentation/web/components/ui/checkbox-group.stories.d.ts +1 -1
  353. package/dist/src/presentation/web/components/ui/checkbox-group.stories.d.ts.map +1 -1
  354. package/dist/src/presentation/web/components/ui/checkbox.stories.d.ts +1 -1
  355. package/dist/src/presentation/web/components/ui/checkbox.stories.d.ts.map +1 -1
  356. package/dist/src/presentation/web/components/ui/comet-spinner.stories.d.ts +1 -1
  357. package/dist/src/presentation/web/components/ui/comet-spinner.stories.d.ts.map +1 -1
  358. package/dist/src/presentation/web/components/ui/command.stories.d.ts +2 -2
  359. package/dist/src/presentation/web/components/ui/command.stories.d.ts.map +1 -1
  360. package/dist/src/presentation/web/components/ui/dialog.stories.d.ts +1 -1
  361. package/dist/src/presentation/web/components/ui/dialog.stories.d.ts.map +1 -1
  362. package/dist/src/presentation/web/components/ui/drawer.stories.d.ts +1 -1
  363. package/dist/src/presentation/web/components/ui/drawer.stories.d.ts.map +1 -1
  364. package/dist/src/presentation/web/components/ui/dropdown-menu.stories.d.ts +1 -1
  365. package/dist/src/presentation/web/components/ui/dropdown-menu.stories.d.ts.map +1 -1
  366. package/dist/src/presentation/web/components/ui/github-icon.d.ts +13 -0
  367. package/dist/src/presentation/web/components/ui/github-icon.d.ts.map +1 -0
  368. package/dist/src/presentation/web/components/ui/github-icon.js +15 -0
  369. package/dist/src/presentation/web/components/ui/github-icon.stories.d.ts +10 -0
  370. package/dist/src/presentation/web/components/ui/github-icon.stories.d.ts.map +1 -0
  371. package/dist/src/presentation/web/components/ui/github-icon.stories.js +22 -0
  372. package/dist/src/presentation/web/components/ui/input.stories.d.ts +1 -1
  373. package/dist/src/presentation/web/components/ui/input.stories.d.ts.map +1 -1
  374. package/dist/src/presentation/web/components/ui/label.stories.d.ts +1 -1
  375. package/dist/src/presentation/web/components/ui/label.stories.d.ts.map +1 -1
  376. package/dist/src/presentation/web/components/ui/popover.stories.d.ts +1 -1
  377. package/dist/src/presentation/web/components/ui/popover.stories.d.ts.map +1 -1
  378. package/dist/src/presentation/web/components/ui/scroll-area.stories.d.ts +1 -1
  379. package/dist/src/presentation/web/components/ui/scroll-area.stories.d.ts.map +1 -1
  380. package/dist/src/presentation/web/components/ui/select.stories.d.ts +1 -1
  381. package/dist/src/presentation/web/components/ui/select.stories.d.ts.map +1 -1
  382. package/dist/src/presentation/web/components/ui/separator.stories.d.ts +1 -1
  383. package/dist/src/presentation/web/components/ui/separator.stories.d.ts.map +1 -1
  384. package/dist/src/presentation/web/components/ui/sheet.stories.d.ts +1 -1
  385. package/dist/src/presentation/web/components/ui/sheet.stories.d.ts.map +1 -1
  386. package/dist/src/presentation/web/components/ui/sidebar.stories.d.ts +1 -1
  387. package/dist/src/presentation/web/components/ui/sidebar.stories.d.ts.map +1 -1
  388. package/dist/src/presentation/web/components/ui/skeleton.stories.d.ts +1 -1
  389. package/dist/src/presentation/web/components/ui/skeleton.stories.d.ts.map +1 -1
  390. package/dist/src/presentation/web/components/ui/slider.stories.d.ts +1 -1
  391. package/dist/src/presentation/web/components/ui/slider.stories.d.ts.map +1 -1
  392. package/dist/src/presentation/web/components/ui/sonner.stories.d.ts +1 -1
  393. package/dist/src/presentation/web/components/ui/sonner.stories.d.ts.map +1 -1
  394. package/dist/src/presentation/web/components/ui/spinner.stories.d.ts +1 -1
  395. package/dist/src/presentation/web/components/ui/spinner.stories.d.ts.map +1 -1
  396. package/dist/src/presentation/web/components/ui/switch.stories.d.ts +1 -1
  397. package/dist/src/presentation/web/components/ui/switch.stories.d.ts.map +1 -1
  398. package/dist/src/presentation/web/components/ui/tabs.stories.d.ts +1 -1
  399. package/dist/src/presentation/web/components/ui/tabs.stories.d.ts.map +1 -1
  400. package/dist/src/presentation/web/components/ui/textarea.stories.d.ts +1 -1
  401. package/dist/src/presentation/web/components/ui/textarea.stories.d.ts.map +1 -1
  402. package/dist/src/presentation/web/components/ui/tooltip.stories.d.ts +2 -2
  403. package/dist/src/presentation/web/components/ui/tooltip.stories.d.ts.map +1 -1
  404. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts +1 -1
  405. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts.map +1 -1
  406. package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts +1 -1
  407. package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts.map +1 -1
  408. package/dist/src/presentation/web/hooks/use-sound.stories.d.ts +1 -1
  409. package/dist/src/presentation/web/hooks/use-sound.stories.d.ts.map +1 -1
  410. package/dist/src/presentation/web/lib/session-scanner.js +2 -2
  411. package/dist/src/presentation/web/lib/skills.js +2 -2
  412. package/dist/tsconfig.build.tsbuildinfo +1 -1
  413. package/package.json +21 -24
  414. package/web/.next/BUILD_ID +1 -1
  415. package/web/.next/build-manifest.json +5 -5
  416. package/web/.next/fallback-build-manifest.json +3 -3
  417. package/web/.next/prerender-manifest.json +3 -3
  418. package/web/.next/required-server-files.js +2 -2
  419. package/web/.next/required-server-files.json +2 -2
  420. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +2 -2
  421. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +3 -3
  422. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  423. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  424. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  425. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +2 -2
  426. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +3 -3
  427. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  428. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  429. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  430. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  431. package/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +3 -3
  432. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  433. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  434. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  435. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  436. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +3 -3
  437. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  438. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  439. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  440. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  441. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  442. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +3 -3
  443. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  444. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  445. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  446. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  447. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  448. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +3 -3
  449. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  450. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  451. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  452. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  453. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +3 -3
  454. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  455. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  456. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  457. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +2 -2
  458. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +3 -3
  459. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  460. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  461. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  462. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  463. package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +3 -3
  464. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  465. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  466. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  467. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  468. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +3 -3
  469. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  470. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  471. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  472. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  473. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  474. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +3 -3
  475. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  476. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  477. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  478. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  479. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  480. package/web/.next/server/app/(dashboard)/page/react-loadable-manifest.json +3 -3
  481. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  482. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  483. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  484. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  485. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +3 -3
  486. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  487. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  488. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  489. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  490. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +3 -3
  491. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  492. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  493. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  494. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  495. package/web/.next/server/app/_global-error.html +1 -1
  496. package/web/.next/server/app/_global-error.rsc +1 -1
  497. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  498. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  499. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  500. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  501. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  502. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  503. package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +3 -3
  504. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  505. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  506. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  507. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  508. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  509. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  510. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  511. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  512. package/web/.next/server/app/api/sessions/route.js +2 -2
  513. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  514. package/web/.next/server/app/settings/page/react-loadable-manifest.json +3 -3
  515. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  516. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  517. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  518. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  519. package/web/.next/server/app/skills/page/react-loadable-manifest.json +3 -3
  520. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  521. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  522. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  523. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  524. package/web/.next/server/app/tools/page/react-loadable-manifest.json +3 -3
  525. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  526. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  527. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  528. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  529. package/web/.next/server/app/version/page/react-loadable-manifest.json +3 -3
  530. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  531. package/web/.next/server/app/version/page.js.nft.json +1 -1
  532. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  533. package/web/.next/server/chunks/0n.o_server_app_api_interactive_chat_[featureId]_stop_route_actions_09da~zt.js +1 -1
  534. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js +1 -1
  535. package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
  536. package/web/.next/server/chunks/[root-of-the-server]__07suer1._.js.map +1 -1
  537. package/web/.next/server/chunks/[root-of-the-server]__0_.w-eb._.js +1 -1
  538. package/web/.next/server/chunks/[root-of-the-server]__0_.w-eb._.js.map +1 -1
  539. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  540. package/web/.next/server/chunks/[root-of-the-server]__13ni_ow._.js +1 -1
  541. package/web/.next/server/chunks/ssr/{0lyk_lucide-react_dist_esm_icons_0shxsmr._.js → 08qz_lucide-react_dist_esm_icons_0_gqlce._.js} +2 -2
  542. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0_gqlce._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js +3 -0
  544. package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js.map +1 -0
  545. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +1 -1
  546. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -1
  547. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +1 -1
  548. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -1
  549. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +1 -1
  550. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -1
  551. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  552. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  553. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +3 -3
  554. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  555. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  556. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  557. package/web/.next/server/chunks/ssr/11es_next_dist_0e36~wi._.js +2 -2
  558. package/web/.next/server/chunks/ssr/11es_next_dist_client_components_058~c_t._.js +1 -1
  559. package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0l-25e2.js +1 -1
  560. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_global-chat-drawer-client_tsx_03s32.q._.js +1 -1
  561. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  562. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  563. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uxn6-j._.js → [root-of-the-server]__045sv4b._.js} +2 -2
  564. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uxn6-j._.js.map → [root-of-the-server]__045sv4b._.js.map} +1 -1
  565. package/web/.next/server/chunks/ssr/[root-of-the-server]__0brje6_._.js +1 -1
  566. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0np51e2._.js → [root-of-the-server]__0d_0_fp._.js} +2 -2
  567. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0np51e2._.js.map → [root-of-the-server]__0d_0_fp._.js.map} +1 -1
  568. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0~h382a._.js → [root-of-the-server]__0l4d7e.._.js} +2 -2
  569. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0~h382a._.js.map → [root-of-the-server]__0l4d7e.._.js.map} +1 -1
  570. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0_ag.8y._.js → [root-of-the-server]__0lslgap._.js} +3 -3
  571. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js.map +1 -0
  572. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +3 -0
  573. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +1 -0
  574. package/web/.next/server/chunks/ssr/{[root-of-the-server]__01~y8wi._.js → [root-of-the-server]__0r32z03._.js} +2 -2
  575. package/web/.next/server/chunks/ssr/{[root-of-the-server]__01~y8wi._.js.map → [root-of-the-server]__0r32z03._.js.map} +1 -1
  576. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  577. package/web/.next/server/chunks/ssr/[root-of-the-server]__122xqm6._.js +1 -1
  578. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +1 -1
  579. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js.map +1 -1
  580. package/web/.next/server/chunks/ssr/{_0d-pkk0._.js → _0-09vq7._.js} +2 -2
  581. package/web/.next/server/chunks/ssr/_0-09vq7._.js.map +1 -0
  582. package/web/.next/server/chunks/ssr/_0.rsra~._.js.map +1 -1
  583. package/web/.next/server/chunks/ssr/_00k65h-._.js +3 -0
  584. package/web/.next/server/chunks/ssr/_00k65h-._.js.map +1 -0
  585. package/web/.next/server/chunks/ssr/_01mq~sm._.js +2 -2
  586. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +1 -1
  587. package/web/.next/server/chunks/ssr/_01sesw0._.js +3 -0
  588. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -0
  589. package/web/.next/server/chunks/ssr/_04s_q5r._.js +1 -1
  590. package/web/.next/server/chunks/ssr/_04s_q5r._.js.map +1 -1
  591. package/web/.next/server/chunks/ssr/{_0xtds88._.js → _08i-c2n._.js} +2 -2
  592. package/web/.next/server/chunks/ssr/_08i-c2n._.js.map +1 -0
  593. package/web/.next/server/chunks/ssr/{_0jk5q_z._.js → _09di2m~._.js} +2 -2
  594. package/web/.next/server/chunks/ssr/_09di2m~._.js.map +1 -0
  595. package/web/.next/server/chunks/ssr/_0gdghcr._.js +3 -0
  596. package/web/.next/server/chunks/ssr/_0gdghcr._.js.map +1 -0
  597. package/web/.next/server/chunks/ssr/_0hwjfpu._.js +3 -0
  598. package/web/.next/server/chunks/ssr/_0hwjfpu._.js.map +1 -0
  599. package/web/.next/server/chunks/ssr/_0hw~zvl._.js +3 -0
  600. package/web/.next/server/chunks/ssr/_0hw~zvl._.js.map +1 -0
  601. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +1 -1
  602. package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -1
  603. package/web/.next/server/chunks/ssr/_0phryzt._.js +3 -0
  604. package/web/.next/server/chunks/ssr/_0phryzt._.js.map +1 -0
  605. package/web/.next/server/chunks/ssr/_0r~xv6k._.js +3 -0
  606. package/web/.next/server/chunks/ssr/_0r~xv6k._.js.map +1 -0
  607. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +3 -0
  608. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -0
  609. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  610. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  611. package/web/.next/server/chunks/ssr/{_0j9vx-1._.js → _0y8u4.e._.js} +3 -3
  612. package/web/.next/server/chunks/ssr/_0y8u4.e._.js.map +1 -0
  613. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +3 -0
  614. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -0
  615. package/web/.next/server/chunks/ssr/{_0rvaoj4._.js → _109n-y4._.js} +2 -2
  616. package/web/.next/server/chunks/ssr/_109n-y4._.js.map +1 -0
  617. package/web/.next/server/chunks/ssr/{_13bl-l1._.js → _12104w0._.js} +2 -2
  618. package/web/.next/server/chunks/ssr/_12104w0._.js.map +1 -0
  619. package/web/.next/server/chunks/ssr/{_09g41d0._.js → _12un22l._.js} +3 -3
  620. package/web/.next/server/chunks/ssr/_12un22l._.js.map +1 -0
  621. package/web/.next/server/chunks/ssr/node_modules__pnpm_0l8_ov3._.js +3 -0
  622. package/web/.next/server/chunks/ssr/node_modules__pnpm_0l8_ov3._.js.map +1 -0
  623. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +1 -1
  624. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -1
  625. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +1 -1
  626. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -1
  627. package/web/.next/server/chunks/ssr/src_presentation_web_05-w-~v._.js +1 -1
  628. package/web/.next/server/chunks/ssr/src_presentation_web_05-w-~v._.js.map +1 -1
  629. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +2 -2
  630. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -1
  631. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +1 -1
  632. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -1
  633. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +1 -1
  634. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -1
  635. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +2 -2
  636. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -1
  637. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +1 -1
  638. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -1
  639. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js +1 -1
  640. package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js.map +1 -1
  641. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +1 -1
  642. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -1
  643. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +1 -1
  644. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -1
  645. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +1 -1
  646. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -1
  647. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +1 -1
  648. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -1
  649. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +1 -1
  650. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  651. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
  652. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  653. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  654. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
  655. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
  656. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_select_tsx_0b.-59k._.js +1 -1
  657. package/web/.next/server/middleware-build-manifest.js +5 -5
  658. package/web/.next/server/pages/500.html +1 -1
  659. package/web/.next/server/server-reference-manifest.js +1 -1
  660. package/web/.next/server/server-reference-manifest.json +49 -49
  661. package/web/.next/static/chunks/0-lu0b1ewsb0_.js +1 -0
  662. package/web/.next/static/chunks/00uywouqbytc0.js +5 -0
  663. package/web/.next/static/chunks/{0t_48qc0x7bhs.js → 01hf_nf2ge.tn.js} +3 -3
  664. package/web/.next/static/chunks/01~dudieyb7wl.js +5 -0
  665. package/web/.next/static/chunks/{0riti1bs-erm~.js → 02kpdawdtqcxm.js} +1 -1
  666. package/web/.next/static/chunks/{0~er~22zwvx0i.js → 09_oo_kc.j.df.js} +1 -1
  667. package/web/.next/static/chunks/0b01fd0lkhnzf.js +1 -0
  668. package/web/.next/static/chunks/0b_anwzlzr9p7.js +1 -0
  669. package/web/.next/static/chunks/0fg~vc93spa9c.js +1 -0
  670. package/web/.next/static/chunks/0fmbl3o08a~-h.js +1 -0
  671. package/web/.next/static/chunks/0j_0i2qsrwh-c.js +1 -0
  672. package/web/.next/static/chunks/{07yqyvabetyrh.js → 0l.kymg3jmf7n.js} +2 -2
  673. package/web/.next/static/chunks/0m5~9kij3s~81.js +1 -0
  674. package/web/.next/static/chunks/0ntps8p7wo1re.js +1 -0
  675. package/web/.next/static/chunks/{0wmckrtphfa12.js → 0odlgm-ixqorl.js} +1 -1
  676. package/web/.next/static/chunks/0q~uf2s33.48w.js +1 -0
  677. package/web/.next/static/chunks/0rfap2l5xz_-p.js +1 -0
  678. package/web/.next/static/chunks/0rhoh5o1y7grf.js +7 -0
  679. package/web/.next/static/chunks/0sywjtf8m0_fb.js +1 -0
  680. package/web/.next/static/chunks/{071_2_.sfp-im.js → 0tutcr7trd_7d.js} +1 -1
  681. package/web/.next/static/chunks/11bi612fz8agh.js +1 -0
  682. package/web/.next/static/chunks/121l3o3vd~hvn.js +1 -0
  683. package/web/.next/static/chunks/13ryk8qc9y3qu.js +1 -0
  684. package/web/.next/static/chunks/164dnpi666fv_.js +5 -0
  685. package/web/.next/static/chunks/16jcg65-2mxc..js +1 -0
  686. package/web/.next/static/chunks/{turbopack-0ve8f54_veg.u.js → turbopack-0wsav6to5abtk.js} +1 -1
  687. package/web/package.json +5 -5
  688. package/web/.next/server/chunks/ssr/0lyk_lucide-react_dist_esm_icons_06zrfq4._.js +0 -3
  689. package/web/.next/server/chunks/ssr/0lyk_lucide-react_dist_esm_icons_06zrfq4._.js.map +0 -1
  690. package/web/.next/server/chunks/ssr/0lyk_lucide-react_dist_esm_icons_0shxsmr._.js.map +0 -1
  691. package/web/.next/server/chunks/ssr/[root-of-the-server]__0_ag.8y._.js.map +0 -1
  692. package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js +0 -3
  693. package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js.map +0 -1
  694. package/web/.next/server/chunks/ssr/_0.gy.n8._.js +0 -3
  695. package/web/.next/server/chunks/ssr/_0.gy.n8._.js.map +0 -1
  696. package/web/.next/server/chunks/ssr/_0.k7wl.._.js +0 -3
  697. package/web/.next/server/chunks/ssr/_0.k7wl.._.js.map +0 -1
  698. package/web/.next/server/chunks/ssr/_09g41d0._.js.map +0 -1
  699. package/web/.next/server/chunks/ssr/_0aa~oer._.js +0 -3
  700. package/web/.next/server/chunks/ssr/_0aa~oer._.js.map +0 -1
  701. package/web/.next/server/chunks/ssr/_0d-pkk0._.js.map +0 -1
  702. package/web/.next/server/chunks/ssr/_0ez.1o4._.js +0 -3
  703. package/web/.next/server/chunks/ssr/_0ez.1o4._.js.map +0 -1
  704. package/web/.next/server/chunks/ssr/_0j9vx-1._.js.map +0 -1
  705. package/web/.next/server/chunks/ssr/_0jk5q_z._.js.map +0 -1
  706. package/web/.next/server/chunks/ssr/_0n.xy38._.js +0 -3
  707. package/web/.next/server/chunks/ssr/_0n.xy38._.js.map +0 -1
  708. package/web/.next/server/chunks/ssr/_0rvaoj4._.js.map +0 -1
  709. package/web/.next/server/chunks/ssr/_0v.yfmg._.js +0 -3
  710. package/web/.next/server/chunks/ssr/_0v.yfmg._.js.map +0 -1
  711. package/web/.next/server/chunks/ssr/_0vl.03w._.js +0 -3
  712. package/web/.next/server/chunks/ssr/_0vl.03w._.js.map +0 -1
  713. package/web/.next/server/chunks/ssr/_0xtds88._.js.map +0 -1
  714. package/web/.next/server/chunks/ssr/_11kuznh._.js +0 -3
  715. package/web/.next/server/chunks/ssr/_11kuznh._.js.map +0 -1
  716. package/web/.next/server/chunks/ssr/_13bl-l1._.js.map +0 -1
  717. package/web/.next/server/chunks/ssr/_13euo-f._.js +0 -3
  718. package/web/.next/server/chunks/ssr/_13euo-f._.js.map +0 -1
  719. package/web/.next/server/chunks/ssr/node_modules__pnpm_0xyo1be._.js +0 -3
  720. package/web/.next/server/chunks/ssr/node_modules__pnpm_0xyo1be._.js.map +0 -1
  721. package/web/.next/static/chunks/00racug7sobut.js +0 -1
  722. package/web/.next/static/chunks/06sdx5zm71_u5.js +0 -1
  723. package/web/.next/static/chunks/08iq.j3rbmhbm.js +0 -1
  724. package/web/.next/static/chunks/08iuksm8rvb09.js +0 -1
  725. package/web/.next/static/chunks/08se-_opmk~.7.js +0 -1
  726. package/web/.next/static/chunks/09b2usag59_bi.js +0 -5
  727. package/web/.next/static/chunks/0icjwdqytqa_8.js +0 -5
  728. package/web/.next/static/chunks/0qjoc4x5q-aeg.js +0 -1
  729. package/web/.next/static/chunks/0rhzqh.-6e6k7.js +0 -1
  730. package/web/.next/static/chunks/0s-e-ekdbgoqa.js +0 -1
  731. package/web/.next/static/chunks/0u5.s.lv2bae5.js +0 -1
  732. package/web/.next/static/chunks/0vgbvqu82ac1x.js +0 -1
  733. package/web/.next/static/chunks/0w~84g7r9307~.js +0 -1
  734. package/web/.next/static/chunks/0y1nwnouroh6k.js +0 -1
  735. package/web/.next/static/chunks/0zz.xgsd83.3n.js +0 -1
  736. package/web/.next/static/chunks/0~wymq55b2bn3.js +0 -1
  737. package/web/.next/static/chunks/10wo3waalauct.js +0 -5
  738. package/web/.next/static/chunks/15lcx-697j_3z.js +0 -7
  739. package/web/.next/static/chunks/176x256xw_viv.js +0 -1
  740. /package/web/.next/static/{xP_-L4TLYvd3i_sEmljLs → 21GZVGanhwKlq9p5dtTCB}/_buildManifest.js +0 -0
  741. /package/web/.next/static/{xP_-L4TLYvd3i_sEmljLs → 21GZVGanhwKlq9p5dtTCB}/_clientMiddlewareManifest.js +0 -0
  742. /package/web/.next/static/{xP_-L4TLYvd3i_sEmljLs → 21GZVGanhwKlq9p5dtTCB}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[92163,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(17300),e=a.i(41305),f=a.i(85536),g=a.i(88064),h=a.i(87926),i=a.i(9955);let j=(0,a.i(25700).default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var k=a.i(63698),l=a.i(53170),m=a.i(56926),n=a.i(4019),o=a.i(67075),p=a.i(21084),q=a.i(18948),r=a.i(82934),s=a.i(98410),t=a.i(72016),u=a.i(71238),v=a.i(24255);let w={linux:"Linux",darwin:"macOS",win32:"Windows"},x={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function y({status:a}){return"available"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400",children:[(0,b.jsx)(t.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===a?(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400",children:"Error"}):(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400",children:"Missing"})}function z({tool:a,open:d,onClose:e,onRefresh:f,autoStart:k}){let[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),{logs:r,status:A,startInstall:B}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)("idle"),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useCallback)(()=>{i.current&&(i.current.close(),i.current=null)},[]);return(0,c.useEffect)(()=>j,[j]),{logs:b,status:e,result:g,startInstall:(0,c.useCallback)(()=>{j(),d([]),h(null),f("streaming");let b=new EventSource(`/api/tools/${a}/install/stream`);i.current=b,b.onmessage=a=>{d(b=>[...b,a.data])},b.addEventListener("done",a=>{let b=JSON.parse(a.data);h(b),f("error"===b.status?"error":"done"),j()}),b.onerror=()=>{f("error"),j()}},[a,j])}}(a.id),C=(0,c.useRef)(null),D=(0,c.useRef)(!0),E=(0,c.useRef)(!1),F="available"===a.status.status,G="error"===a.status.status,H=F&&!!a.openDirectory,I=!F&&!G&&a.autoInstall;async function J(){o(!0);try{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})}finally{o(!1)}}(0,c.useEffect)(()=>{d&&k&&I&&"idle"===A&&!E.current&&(E.current=!0,B()),d||(E.current=!1)},[d,k,I,A,B]);let K=(0,c.useCallback)(()=>{let a=C.current;a&&(D.current=a.scrollTop+a.clientHeight>=a.scrollHeight-50)},[]);(0,c.useEffect)(()=>{D.current&&C.current&&(C.current.scrollTop=C.current.scrollHeight)},[r,A]),(0,c.useEffect)(()=>{"done"===A&&f&&f()},[A,f]);let L=(0,b.jsxs)("div",{className:"flex flex-col gap-1.5 pe-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,b.jsx)("h2",{className:"text-base font-bold",children:a.name}),(0,b.jsx)(y,{status:a.status.status})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:a.tags.map(a=>{let c=x[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,b.jsx)(d,{className:"h-3 w-3"}),c.label]},a)})})]});return(0,b.jsx)(v.BaseDrawer,{open:d,onClose:e,size:"md",modal:!0,title:a.name,header:L,"data-testid":"tool-detail-drawer",children:(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),a.author||a.platforms?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[a.author?(0,b.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",a.website?(0,b.jsx)("a",{href:a.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:a.author}):(0,b.jsx)("span",{className:"text-foreground",children:a.author})]}):null,a.platforms&&a.platforms.length>0?(0,b.jsx)("span",{className:"text-muted-foreground",children:a.platforms.map(a=>w[a]??a).join(" · ")}):null]}):null,a.installCommand?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,b.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,b.jsx)("pre",{className:"overflow-x-auto px-3 py-2.5 pe-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap",children:(0,b.jsx)("code",{children:a.installCommand})}),(0,b.jsxs)(q.Button,{variant:"ghost",size:"sm",className:"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100",onClick:function(){a.installCommand&&navigator.clipboard.writeText(a.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":l?"Copied!":"Copy install command",children:[l?(0,b.jsx)(t.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,b.jsx)(s.Copy,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"ms-1 text-[10px]",children:l?"Copied!":"Copy"})]})]})]}):null,(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[I?(0,b.jsxs)(q.Button,{size:"sm",onClick:B,disabled:"streaming"===A,"aria-label":`Install ${a.name}`,className:"cursor-pointer",children:["streaming"===A?(0,b.jsx)(g.Loader2,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(i.Download,{className:"me-1.5 h-3.5 w-3.5"}),"streaming"===A?"Installing...":"Install"]}):null,H?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:()=>void J(),disabled:n,"aria-label":`Launch ${a.name}`,className:"cursor-pointer",children:[n?(0,b.jsx)(g.Loader2,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1.5 h-3.5 w-3.5"}),"Launch"]}):null,a.documentationUrl?(0,b.jsx)(q.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,b.jsxs)("a",{href:a.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,b.jsx)(u.ExternalLink,{className:"ms-1 h-3 w-3"})]})}):null]}),("streaming"===A||"done"===A||"error"===A)&&r.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,b.jsxs)("div",{ref:C,onScroll:K,className:"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100","data-testid":"tool-install-log",children:[r.map((a,c)=>(0,b.jsx)("div",{className:"break-all whitespace-pre-wrap",children:a},c)),"done"===A?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===A?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let A={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function B({tool:a,onRefresh:d,className:e}){let[k,l]=(0,c.useState)(!1),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useTransition)(),w="available"===a.status.status,x="error"===a.status.status,y=w&&!!a.openDirectory;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{"data-testid":"tool-card",onClick:function(){t(!1),l(!0)},className:(0,f.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",e),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:a.name})]}),(0,b.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:a.tags.map(a=>{let c=A[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,b.jsx)(d,{className:"h-2.5 w-2.5"}),c.label]},a)})})]}),(0,b.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:a.summary}),(0,b.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[x&&"error"===a.status.status?(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:a.status.errorMessage,children:[(0,b.jsx)(m.CircleX,{className:"h-3 w-3 shrink-0"}),a.status.errorMessage??"Error"]}):w?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(o.CheckCircle2,{className:"h-3 w-3"}),"Installed"]}):(0,b.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,b.jsx)(n.Circle,{className:"h-3 w-3"}),"Not installed"]}),a.required?(0,b.jsx)(r.TooltipProvider,{children:(0,b.jsxs)(r.Tooltip,{children:[(0,b.jsx)(r.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400",children:"Required"})}),(0,b.jsx)(r.TooltipContent,{side:"top",children:"This tool is required for ShipIT to function properly"})]})}):null]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:w&&y?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:function(b){b.stopPropagation(),v(async()=>{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})})},disabled:u,"aria-label":`Launch ${a.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[u?(0,b.jsx)(g.Loader2,{className:"me-1 h-3 w-3 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1 h-3 w-3"}),"Launch"]}):w||x?null:(0,b.jsxs)(q.Button,{size:"sm",variant:"default",onClick:function(b){b.stopPropagation(),t(a.autoInstall),l(!0)},"aria-label":`Install ${a.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,b.jsx)(i.Download,{className:"me-1 h-3 w-3"}),"Install"]})})]})]}),(0,b.jsx)(z,{tool:a,open:k,onClose:()=>l(!1),onRefresh:d,autoStart:s})]})}let C={all:()=>!0,ide:a=>a.tags.includes("ide"),"cli-agent":a=>a.tags.includes("cli-agent"),vcs:a=>a.tags.includes("vcs"),terminal:a=>a.tags.includes("terminal")};a.s(["ToolsPageClient",0,function({tools:a,className:g}){let[h,i]=(0,c.useState)(a),[j,k]=(0,c.useState)("all"),l=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/tools");if(a.ok){let b=await a.json();i(b)}}catch{}},[]),m=h.filter(C[j]);return(0,b.jsxs)("div",{"data-testid":"tools-page-client",className:(0,f.cn)("space-y-4",g),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(d.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,b.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[h.filter(a=>"available"===a.status.status).length,"/",h.length," installed"]})]}),(0,b.jsxs)(e.Tabs,{value:j,onValueChange:a=>k(a),"data-testid":"tools-page-tabs",children:[(0,b.jsxs)(e.TabsList,{className:"h-7",children:[(0,b.jsx)(e.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,b.jsx)(e.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,b.jsx)(e.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,b.jsx)(e.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,b.jsx)(e.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,b.jsx)(e.TabsContent,{value:j,className:"mt-3",children:0===m.length?(0,b.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,b.jsx)(d.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,b.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,b.jsx)("div",{"data-testid":"tools-page-grid",className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:m.map(a=>(0,b.jsx)(B,{tool:a,onRefresh:l},a.id))})})]})]})}],92163)}];
1
+ module.exports=[92163,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(6168),e=a.i(41305),f=a.i(85536),g=a.i(20901),h=a.i(96436),i=a.i(44877);let j=(0,a.i(97624).default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var k=a.i(8685),l=a.i(37545),m=a.i(28966),n=a.i(86139),o=a.i(82912),p=a.i(69045),q=a.i(18948),r=a.i(82934),s=a.i(34948),t=a.i(60197),u=a.i(2),v=a.i(24255);let w={linux:"Linux",darwin:"macOS",win32:"Windows"},x={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function y({status:a}){return"available"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400",children:[(0,b.jsx)(t.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===a?(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400",children:"Error"}):(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400",children:"Missing"})}function z({tool:a,open:d,onClose:e,onRefresh:f,autoStart:k}){let[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),{logs:r,status:A,startInstall:B}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)("idle"),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useCallback)(()=>{i.current&&(i.current.close(),i.current=null)},[]);return(0,c.useEffect)(()=>j,[j]),{logs:b,status:e,result:g,startInstall:(0,c.useCallback)(()=>{j(),d([]),h(null),f("streaming");let b=new EventSource(`/api/tools/${a}/install/stream`);i.current=b,b.onmessage=a=>{d(b=>[...b,a.data])},b.addEventListener("done",a=>{let b=JSON.parse(a.data);h(b),f("error"===b.status?"error":"done"),j()}),b.onerror=()=>{f("error"),j()}},[a,j])}}(a.id),C=(0,c.useRef)(null),D=(0,c.useRef)(!0),E=(0,c.useRef)(!1),F="available"===a.status.status,G="error"===a.status.status,H=F&&!!a.openDirectory,I=!F&&!G&&a.autoInstall;async function J(){o(!0);try{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})}finally{o(!1)}}(0,c.useEffect)(()=>{d&&k&&I&&"idle"===A&&!E.current&&(E.current=!0,B()),d||(E.current=!1)},[d,k,I,A,B]);let K=(0,c.useCallback)(()=>{let a=C.current;a&&(D.current=a.scrollTop+a.clientHeight>=a.scrollHeight-50)},[]);(0,c.useEffect)(()=>{D.current&&C.current&&(C.current.scrollTop=C.current.scrollHeight)},[r,A]),(0,c.useEffect)(()=>{"done"===A&&f&&f()},[A,f]);let L=(0,b.jsxs)("div",{className:"flex flex-col gap-1.5 pe-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,b.jsx)("h2",{className:"text-base font-bold",children:a.name}),(0,b.jsx)(y,{status:a.status.status})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:a.tags.map(a=>{let c=x[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,b.jsx)(d,{className:"h-3 w-3"}),c.label]},a)})})]});return(0,b.jsx)(v.BaseDrawer,{open:d,onClose:e,size:"md",modal:!0,title:a.name,header:L,"data-testid":"tool-detail-drawer",children:(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),a.author||a.platforms?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[a.author?(0,b.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",a.website?(0,b.jsx)("a",{href:a.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:a.author}):(0,b.jsx)("span",{className:"text-foreground",children:a.author})]}):null,a.platforms&&a.platforms.length>0?(0,b.jsx)("span",{className:"text-muted-foreground",children:a.platforms.map(a=>w[a]??a).join(" · ")}):null]}):null,a.installCommand?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,b.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,b.jsx)("pre",{className:"overflow-x-auto px-3 py-2.5 pe-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap",children:(0,b.jsx)("code",{children:a.installCommand})}),(0,b.jsxs)(q.Button,{variant:"ghost",size:"sm",className:"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100",onClick:function(){a.installCommand&&navigator.clipboard.writeText(a.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":l?"Copied!":"Copy install command",children:[l?(0,b.jsx)(t.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,b.jsx)(s.Copy,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"ms-1 text-[10px]",children:l?"Copied!":"Copy"})]})]})]}):null,(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[I?(0,b.jsxs)(q.Button,{size:"sm",onClick:B,disabled:"streaming"===A,"aria-label":`Install ${a.name}`,className:"cursor-pointer",children:["streaming"===A?(0,b.jsx)(g.LoaderCircle,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(i.Download,{className:"me-1.5 h-3.5 w-3.5"}),"streaming"===A?"Installing...":"Install"]}):null,H?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:()=>void J(),disabled:n,"aria-label":`Launch ${a.name}`,className:"cursor-pointer",children:[n?(0,b.jsx)(g.LoaderCircle,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1.5 h-3.5 w-3.5"}),"Launch"]}):null,a.documentationUrl?(0,b.jsx)(q.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,b.jsxs)("a",{href:a.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,b.jsx)(u.ExternalLink,{className:"ms-1 h-3 w-3"})]})}):null]}),("streaming"===A||"done"===A||"error"===A)&&r.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,b.jsxs)("div",{ref:C,onScroll:K,className:"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100","data-testid":"tool-install-log",children:[r.map((a,c)=>(0,b.jsx)("div",{className:"break-all whitespace-pre-wrap",children:a},c)),"done"===A?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===A?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let A={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function B({tool:a,onRefresh:d,className:e}){let[k,l]=(0,c.useState)(!1),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useTransition)(),w="available"===a.status.status,x="error"===a.status.status,y=w&&!!a.openDirectory;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{"data-testid":"tool-card",onClick:function(){t(!1),l(!0)},className:(0,f.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",e),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:a.name})]}),(0,b.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:a.tags.map(a=>{let c=A[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,b.jsx)(d,{className:"h-2.5 w-2.5"}),c.label]},a)})})]}),(0,b.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:a.summary}),(0,b.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[x&&"error"===a.status.status?(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:a.status.errorMessage,children:[(0,b.jsx)(m.CircleX,{className:"h-3 w-3 shrink-0"}),a.status.errorMessage??"Error"]}):w?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(o.CircleCheck,{className:"h-3 w-3"}),"Installed"]}):(0,b.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,b.jsx)(n.Circle,{className:"h-3 w-3"}),"Not installed"]}),a.required?(0,b.jsx)(r.TooltipProvider,{children:(0,b.jsxs)(r.Tooltip,{children:[(0,b.jsx)(r.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400",children:"Required"})}),(0,b.jsx)(r.TooltipContent,{side:"top",children:"This tool is required for ShipIT to function properly"})]})}):null]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:w&&y?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:function(b){b.stopPropagation(),v(async()=>{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})})},disabled:u,"aria-label":`Launch ${a.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[u?(0,b.jsx)(g.LoaderCircle,{className:"me-1 h-3 w-3 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1 h-3 w-3"}),"Launch"]}):w||x?null:(0,b.jsxs)(q.Button,{size:"sm",variant:"default",onClick:function(b){b.stopPropagation(),t(a.autoInstall),l(!0)},"aria-label":`Install ${a.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,b.jsx)(i.Download,{className:"me-1 h-3 w-3"}),"Install"]})})]})]}),(0,b.jsx)(z,{tool:a,open:k,onClose:()=>l(!1),onRefresh:d,autoStart:s})]})}let C={all:()=>!0,ide:a=>a.tags.includes("ide"),"cli-agent":a=>a.tags.includes("cli-agent"),vcs:a=>a.tags.includes("vcs"),terminal:a=>a.tags.includes("terminal")};a.s(["ToolsPageClient",0,function({tools:a,className:g}){let[h,i]=(0,c.useState)(a),[j,k]=(0,c.useState)("all"),l=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/tools");if(a.ok){let b=await a.json();i(b)}}catch{}},[]),m=h.filter(C[j]);return(0,b.jsxs)("div",{"data-testid":"tools-page-client",className:(0,f.cn)("space-y-4",g),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(d.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,b.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[h.filter(a=>"available"===a.status.status).length,"/",h.length," installed"]})]}),(0,b.jsxs)(e.Tabs,{value:j,onValueChange:a=>k(a),"data-testid":"tools-page-tabs",children:[(0,b.jsxs)(e.TabsList,{className:"h-7",children:[(0,b.jsx)(e.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,b.jsx)(e.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,b.jsx)(e.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,b.jsx)(e.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,b.jsx)(e.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,b.jsx)(e.TabsContent,{value:j,className:"mt-3",children:0===m.length?(0,b.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,b.jsx)(d.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,b.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,b.jsx)("div",{"data-testid":"tools-page-grid",className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:m.map(a=>(0,b.jsx)(B,{tool:a,onRefresh:l},a.id))})})]})]})}],92163)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/hooks/use-tool-install-stream.ts","../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.tsx","../../../../../../../src/presentation/web/components/features/tools/tool-card.tsx","../../../../../../../src/presentation/web/components/features/tools/tools-page-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/monitor.ts"],"sourcesContent":["'use client';\n\nimport { useState, useRef, useCallback, useEffect } from 'react';\nimport type { ToolInstallationStatus } from '@shipit-ai/core/domain/generated/output';\n\nexport type InstallStreamStatus = 'idle' | 'streaming' | 'done' | 'error';\n\nexport interface UseToolInstallStreamResult {\n logs: string[];\n status: InstallStreamStatus;\n result: ToolInstallationStatus | null;\n startInstall: () => void;\n}\n\nexport function useToolInstallStream(toolId: string): UseToolInstallStreamResult {\n const [logs, setLogs] = useState<string[]>([]);\n const [status, setStatus] = useState<InstallStreamStatus>('idle');\n const [result, setResult] = useState<ToolInstallationStatus | null>(null);\n const esRef = useRef<EventSource | null>(null);\n\n const cleanup = useCallback(() => {\n if (esRef.current) {\n esRef.current.close();\n esRef.current = null;\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => cleanup, [cleanup]);\n\n const startInstall = useCallback(() => {\n cleanup();\n setLogs([]);\n setResult(null);\n setStatus('streaming');\n\n const es = new EventSource(`/api/tools/${toolId}/install/stream`);\n esRef.current = es;\n\n es.onmessage = (event: MessageEvent) => {\n setLogs((prev) => [...prev, event.data]);\n };\n\n es.addEventListener('done', (event: MessageEvent) => {\n const installResult: ToolInstallationStatus = JSON.parse(event.data);\n setResult(installResult);\n setStatus(installResult.status === 'error' ? 'error' : 'done');\n cleanup();\n });\n\n es.onerror = () => {\n setStatus('error');\n cleanup();\n };\n }, [toolId, cleanup]);\n\n return { logs, status, result, startInstall };\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport {\n Copy,\n Check,\n ExternalLink,\n Download,\n Rocket,\n Loader2,\n Monitor,\n Terminal,\n GitBranch,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { BaseDrawer } from '@/components/common/base-drawer/base-drawer';\nimport { useToolInstallStream } from '@/hooks/use-tool-install-stream';\nimport type { ToolItem } from '@shipit-ai/core/application/use-cases/tools/list-tools.use-case';\n\nconst PLATFORM_LABELS: Record<string, string> = {\n linux: 'Linux',\n darwin: 'macOS',\n win32: 'Windows',\n};\n\nexport interface ToolDetailDrawerProps {\n tool: ToolItem;\n open: boolean;\n onClose: () => void;\n onRefresh?: () => Promise<void>;\n autoStart?: boolean;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nconst AUTO_SCROLL_THRESHOLD = 50;\n\nfunction StatusBadge({ status }: { status: string }) {\n if (status === 'available') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\">\n <Check className=\"h-3 w-3\" />\n Installed\n </span>\n );\n }\n if (status === 'error') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400\">\n Error\n </span>\n );\n }\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400\">\n Missing\n </span>\n );\n}\n\nexport function ToolDetailDrawer({\n tool,\n open,\n onClose,\n onRefresh,\n autoStart,\n}: ToolDetailDrawerProps) {\n const [copied, setCopied] = useState(false);\n const [isLaunching, setIsLaunching] = useState(false);\n const { logs, status, startInstall } = useToolInstallStream(tool.id);\n const logRef = useRef<HTMLDivElement>(null);\n const isAtBottomRef = useRef(true);\n const autoStartedRef = useRef(false);\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n const canInstall = !isInstalled && !isError && tool.autoInstall;\n\n // Auto-start install when drawer opens with autoStart flag\n useEffect(() => {\n if (open && autoStart && canInstall && status === 'idle' && !autoStartedRef.current) {\n autoStartedRef.current = true;\n startInstall();\n }\n if (!open) {\n autoStartedRef.current = false;\n }\n }, [open, autoStart, canInstall, status, startInstall]);\n\n function handleCopy() {\n if (!tool.installCommand) return;\n void navigator.clipboard.writeText(tool.installCommand).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n async function handleLaunch() {\n setIsLaunching(true);\n try {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n } finally {\n setIsLaunching(false);\n }\n }\n\n const handleScroll = useCallback(() => {\n const el = logRef.current;\n if (!el) return;\n isAtBottomRef.current =\n el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;\n }, []);\n\n useEffect(() => {\n if (isAtBottomRef.current && logRef.current) {\n logRef.current.scrollTop = logRef.current.scrollHeight;\n }\n }, [logs, status]);\n\n // Refresh tool status after install completes\n useEffect(() => {\n if (status === 'done' && onRefresh) {\n void onRefresh();\n }\n }, [status, onRefresh]);\n\n const header = (\n <div className=\"flex flex-col gap-1.5 pe-6\">\n <div className=\"flex items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img src={tool.iconUrl} alt=\"\" width={24} height={24} className=\"shrink-0 dark:invert\" />\n ) : (\n <Package className=\"text-muted-foreground h-6 w-6 shrink-0\" />\n )}\n <h2 className=\"text-base font-bold\">{tool.name}</h2>\n <StatusBadge status={tool.status.status} />\n </div>\n <div className=\"flex items-center gap-2\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]\"\n >\n <TagIcon className=\"h-3 w-3\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n\n return (\n <BaseDrawer\n open={open}\n onClose={onClose}\n size=\"md\"\n modal\n title={tool.name}\n header={header}\n data-testid=\"tool-detail-drawer\"\n >\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\">\n {/* Description */}\n <p className=\"text-muted-foreground text-sm\">{tool.description}</p>\n\n {/* Meta info row: author + platforms */}\n {tool.author || tool.platforms ? (\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs\">\n {tool.author ? (\n <span className=\"text-muted-foreground\">\n by{' '}\n {tool.website ? (\n <a\n href={tool.website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground hover:underline\"\n >\n {tool.author}\n </a>\n ) : (\n <span className=\"text-foreground\">{tool.author}</span>\n )}\n </span>\n ) : null}\n {tool.platforms && tool.platforms.length > 0 ? (\n <span className=\"text-muted-foreground\">\n {tool.platforms.map((p) => PLATFORM_LABELS[p] ?? p).join(' · ')}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Install Command */}\n {tool.installCommand ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install command\n </span>\n <div className=\"relative rounded-md bg-zinc-900 text-zinc-100\">\n <pre className=\"overflow-x-auto px-3 py-2.5 pe-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap\">\n <code>{tool.installCommand}</code>\n </pre>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100\"\n onClick={handleCopy}\n aria-label={copied ? 'Copied!' : 'Copy install command'}\n >\n {copied ? (\n <Check className=\"h-3.5 w-3.5 text-emerald-500\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n )}\n <span className=\"ms-1 text-[10px]\">{copied ? 'Copied!' : 'Copy'}</span>\n </Button>\n </div>\n </div>\n ) : null}\n\n {/* Action Bar */}\n <div className=\"flex items-center gap-2\">\n {canInstall ? (\n <Button\n size=\"sm\"\n onClick={startInstall}\n disabled={status === 'streaming'}\n aria-label={`Install ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {status === 'streaming' ? (\n <Loader2 className=\"me-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Download className=\"me-1.5 h-3.5 w-3.5\" />\n )}\n {status === 'streaming' ? 'Installing...' : 'Install'}\n </Button>\n ) : null}\n {canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => void handleLaunch()}\n disabled={isLaunching}\n aria-label={`Launch ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {isLaunching ? (\n <Loader2 className=\"me-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Rocket className=\"me-1.5 h-3.5 w-3.5\" />\n )}\n Launch\n </Button>\n ) : null}\n {tool.documentationUrl ? (\n <Button variant=\"outline\" size=\"sm\" className=\"cursor-pointer\" asChild>\n <a href={tool.documentationUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Docs\n <ExternalLink className=\"ms-1 h-3 w-3\" />\n </a>\n </Button>\n ) : null}\n </div>\n\n {/* Install Log */}\n {(status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install log\n </span>\n <div\n ref={logRef}\n onScroll={handleScroll}\n className=\"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100\"\n data-testid=\"tool-install-log\"\n >\n {logs.map((line, idx) => (\n // eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder\n <div key={idx} className=\"break-all whitespace-pre-wrap\">\n {line}\n </div>\n ))}\n {status === 'done' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-emerald-400\">\n Installation complete\n </div>\n ) : null}\n {status === 'error' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-red-400\">\n Installation failed\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\nimport {\n Loader2,\n Rocket,\n Download,\n Monitor,\n Terminal,\n GitBranch,\n CircleX,\n Circle,\n CheckCircle2,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { ToolDetailDrawer } from './tool-detail-drawer';\nimport type { ToolItem } from '@shipit-ai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolCardProps {\n tool: ToolItem;\n onRefresh?: () => Promise<void>;\n className?: string;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nexport function ToolCard({ tool, onRefresh, className }: ToolCardProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [autoStartInstall, setAutoStartInstall] = useState(false);\n const [isPending, startTransition] = useTransition();\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n\n function handleLaunch(e: React.MouseEvent) {\n e.stopPropagation();\n startTransition(async () => {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n });\n }\n\n function handleCardClick() {\n setAutoStartInstall(false);\n setDrawerOpen(true);\n }\n\n function handleInstallClick(e: React.MouseEvent) {\n e.stopPropagation();\n setAutoStartInstall(tool.autoInstall);\n setDrawerOpen(true);\n }\n\n return (\n <>\n <div\n data-testid=\"tool-card\"\n onClick={handleCardClick}\n className={cn(\n 'bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md',\n className\n )}\n >\n {/* Top row: icon + name left, tag badges right */}\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img\n src={tool.iconUrl}\n alt=\"\"\n width={20}\n height={20}\n className=\"shrink-0 dark:invert\"\n />\n ) : (\n <Package className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n )}\n <h3 data-testid=\"tool-card-name\" className=\"truncate text-sm font-bold\">\n {tool.name}\n </h3>\n </div>\n <div data-testid=\"tool-card-tags\" className=\"flex shrink-0 items-center gap-1\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]\"\n >\n <TagIcon className=\"h-2.5 w-2.5\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n\n {/* Summary */}\n <p data-testid=\"tool-card-summary\" className=\"text-muted-foreground mt-1 truncate text-xs\">\n {tool.summary}\n </p>\n\n {/* Bottom section — pushed to bottom */}\n <div className=\"mt-auto flex items-center justify-between pt-3\">\n {/* Status text */}\n <div className=\"flex items-center gap-2\">\n {isError && tool.status.status === 'error' ? (\n <span\n className=\"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400\"\n title={tool.status.errorMessage}\n >\n <CircleX className=\"h-3 w-3 shrink-0\" />\n {tool.status.errorMessage ?? 'Error'}\n </span>\n ) : isInstalled ? (\n <span className=\"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Installed\n </span>\n ) : (\n <span className=\"text-muted-foreground flex items-center gap-1 text-[10px]\">\n <Circle className=\"h-3 w-3\" />\n Not installed\n </span>\n )}\n {tool.required ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400\">\n Required\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n This tool is required for ShipIT to function properly\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1\">\n {isInstalled && canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleLaunch}\n disabled={isPending}\n aria-label={`Launch ${tool.name}`}\n data-testid=\"tool-card-launch-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n {isPending ? (\n <Loader2 className=\"me-1 h-3 w-3 animate-spin\" />\n ) : (\n <Rocket className=\"me-1 h-3 w-3\" />\n )}\n Launch\n </Button>\n ) : !isInstalled && !isError ? (\n <Button\n size=\"sm\"\n variant=\"default\"\n onClick={handleInstallClick}\n aria-label={`Install ${tool.name}`}\n data-testid=\"tool-card-install-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n <Download className=\"me-1 h-3 w-3\" />\n Install\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n\n <ToolDetailDrawer\n tool={tool}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onRefresh={onRefresh}\n autoStart={autoStartInstall}\n />\n </>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Wrench } from 'lucide-react';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { cn } from '@/lib/utils';\nimport { ToolCard } from './tool-card';\nimport type { ToolItem } from '@shipit-ai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolsPageClientProps {\n tools: ToolItem[];\n className?: string;\n}\n\ntype TabValue = 'all' | 'ide' | 'cli-agent' | 'vcs' | 'terminal';\n\nconst TAB_FILTER: Record<TabValue, (tool: ToolItem) => boolean> = {\n all: () => true,\n ide: (tool) => tool.tags.includes('ide'),\n 'cli-agent': (tool) => tool.tags.includes('cli-agent'),\n vcs: (tool) => tool.tags.includes('vcs'),\n terminal: (tool) => tool.tags.includes('terminal'),\n};\n\nexport function ToolsPageClient({ tools: initialTools, className }: ToolsPageClientProps) {\n const [tools, setTools] = useState<ToolItem[]>(initialTools);\n const [activeTab, setActiveTab] = useState<TabValue>('all');\n\n const refreshTools = useCallback(async () => {\n try {\n const res = await fetch('/api/tools');\n if (res.ok) {\n const updated = (await res.json()) as ToolItem[];\n setTools(updated);\n }\n } catch {\n // Silently ignore refresh errors; user can re-navigate to refresh\n }\n }, []);\n\n const filtered = tools.filter(TAB_FILTER[activeTab]);\n\n return (\n <div data-testid=\"tools-page-client\" className={cn('space-y-4', className)}>\n {/* Compact header */}\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"text-muted-foreground h-4 w-4\" />\n <h1 className=\"text-sm font-bold tracking-tight\">Tools</h1>\n <span className=\"text-muted-foreground text-[10px]\">\n {tools.filter((t) => t.status.status === 'available').length}/{tools.length} installed\n </span>\n </div>\n\n <Tabs\n value={activeTab}\n onValueChange={(value) => setActiveTab(value as TabValue)}\n data-testid=\"tools-page-tabs\"\n >\n <TabsList className=\"h-7\">\n <TabsTrigger value=\"all\" data-testid=\"tools-tab-all\" className=\"px-2.5 text-xs\">\n All\n </TabsTrigger>\n <TabsTrigger value=\"ide\" data-testid=\"tools-tab-ide\" className=\"px-2.5 text-xs\">\n IDEs\n </TabsTrigger>\n <TabsTrigger\n value=\"cli-agent\"\n data-testid=\"tools-tab-cli-agent\"\n className=\"px-2.5 text-xs\"\n >\n CLI Agents\n </TabsTrigger>\n <TabsTrigger value=\"vcs\" data-testid=\"tools-tab-vcs\" className=\"px-2.5 text-xs\">\n Version Control\n </TabsTrigger>\n <TabsTrigger value=\"terminal\" data-testid=\"tools-tab-terminal\" className=\"px-2.5 text-xs\">\n Terminals\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value={activeTab} className=\"mt-3\">\n {filtered.length === 0 ? (\n <div\n data-testid=\"tools-page-empty\"\n className=\"text-muted-foreground flex flex-col items-center justify-center py-12 text-center\"\n >\n <Wrench className=\"mb-2 h-6 w-6 opacity-20\" />\n <p className=\"text-xs\">No tools in this category.</p>\n </div>\n ) : (\n <div\n data-testid=\"tools-page-grid\"\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n {filtered.map((tool) => (\n <ToolCard key={tool.id} tool={tool} onRefresh={refreshTools} />\n ))}\n </div>\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n];\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTQiIHg9IjIiIHk9IjMiIHJ4PSIyIiAvPgogIDxsaW5lIHgxPSI4IiB4Mj0iMTYiIHkxPSIyMSIgeTI9IjIxIiAvPgogIDxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iMTciIHkyPSIyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/monitor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Monitor = createLucideIcon('monitor', __iconNode);\n\nexport default Monitor;\n"],"names":["__iconNode"],"mappings":"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","ignoreList":[4]}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/hooks/use-tool-install-stream.ts","../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.tsx","../../../../../../../src/presentation/web/components/features/tools/tool-card.tsx","../../../../../../../src/presentation/web/components/features/tools/tools-page-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/monitor.ts"],"sourcesContent":["'use client';\n\nimport { useState, useRef, useCallback, useEffect } from 'react';\nimport type { ToolInstallationStatus } from '@shipit-ai/core/domain/generated/output';\n\nexport type InstallStreamStatus = 'idle' | 'streaming' | 'done' | 'error';\n\nexport interface UseToolInstallStreamResult {\n logs: string[];\n status: InstallStreamStatus;\n result: ToolInstallationStatus | null;\n startInstall: () => void;\n}\n\nexport function useToolInstallStream(toolId: string): UseToolInstallStreamResult {\n const [logs, setLogs] = useState<string[]>([]);\n const [status, setStatus] = useState<InstallStreamStatus>('idle');\n const [result, setResult] = useState<ToolInstallationStatus | null>(null);\n const esRef = useRef<EventSource | null>(null);\n\n const cleanup = useCallback(() => {\n if (esRef.current) {\n esRef.current.close();\n esRef.current = null;\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => cleanup, [cleanup]);\n\n const startInstall = useCallback(() => {\n cleanup();\n setLogs([]);\n setResult(null);\n setStatus('streaming');\n\n const es = new EventSource(`/api/tools/${toolId}/install/stream`);\n esRef.current = es;\n\n es.onmessage = (event: MessageEvent) => {\n setLogs((prev) => [...prev, event.data]);\n };\n\n es.addEventListener('done', (event: MessageEvent) => {\n const installResult: ToolInstallationStatus = JSON.parse(event.data);\n setResult(installResult);\n setStatus(installResult.status === 'error' ? 'error' : 'done');\n cleanup();\n });\n\n es.onerror = () => {\n setStatus('error');\n cleanup();\n };\n }, [toolId, cleanup]);\n\n return { logs, status, result, startInstall };\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport {\n Copy,\n Check,\n ExternalLink,\n Download,\n Rocket,\n LoaderCircle,\n Monitor,\n Terminal,\n GitBranch,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { BaseDrawer } from '@/components/common/base-drawer/base-drawer';\nimport { useToolInstallStream } from '@/hooks/use-tool-install-stream';\nimport type { ToolItem } from '@shipit-ai/core/application/use-cases/tools/list-tools.use-case';\n\nconst PLATFORM_LABELS: Record<string, string> = {\n linux: 'Linux',\n darwin: 'macOS',\n win32: 'Windows',\n};\n\nexport interface ToolDetailDrawerProps {\n tool: ToolItem;\n open: boolean;\n onClose: () => void;\n onRefresh?: () => Promise<void>;\n autoStart?: boolean;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nconst AUTO_SCROLL_THRESHOLD = 50;\n\nfunction StatusBadge({ status }: { status: string }) {\n if (status === 'available') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\">\n <Check className=\"h-3 w-3\" />\n Installed\n </span>\n );\n }\n if (status === 'error') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400\">\n Error\n </span>\n );\n }\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400\">\n Missing\n </span>\n );\n}\n\nexport function ToolDetailDrawer({\n tool,\n open,\n onClose,\n onRefresh,\n autoStart,\n}: ToolDetailDrawerProps) {\n const [copied, setCopied] = useState(false);\n const [isLaunching, setIsLaunching] = useState(false);\n const { logs, status, startInstall } = useToolInstallStream(tool.id);\n const logRef = useRef<HTMLDivElement>(null);\n const isAtBottomRef = useRef(true);\n const autoStartedRef = useRef(false);\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n const canInstall = !isInstalled && !isError && tool.autoInstall;\n\n // Auto-start install when drawer opens with autoStart flag\n useEffect(() => {\n if (open && autoStart && canInstall && status === 'idle' && !autoStartedRef.current) {\n autoStartedRef.current = true;\n startInstall();\n }\n if (!open) {\n autoStartedRef.current = false;\n }\n }, [open, autoStart, canInstall, status, startInstall]);\n\n function handleCopy() {\n if (!tool.installCommand) return;\n void navigator.clipboard.writeText(tool.installCommand).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n async function handleLaunch() {\n setIsLaunching(true);\n try {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n } finally {\n setIsLaunching(false);\n }\n }\n\n const handleScroll = useCallback(() => {\n const el = logRef.current;\n if (!el) return;\n isAtBottomRef.current =\n el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;\n }, []);\n\n useEffect(() => {\n if (isAtBottomRef.current && logRef.current) {\n logRef.current.scrollTop = logRef.current.scrollHeight;\n }\n }, [logs, status]);\n\n // Refresh tool status after install completes\n useEffect(() => {\n if (status === 'done' && onRefresh) {\n void onRefresh();\n }\n }, [status, onRefresh]);\n\n const header = (\n <div className=\"flex flex-col gap-1.5 pe-6\">\n <div className=\"flex items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img src={tool.iconUrl} alt=\"\" width={24} height={24} className=\"shrink-0 dark:invert\" />\n ) : (\n <Package className=\"text-muted-foreground h-6 w-6 shrink-0\" />\n )}\n <h2 className=\"text-base font-bold\">{tool.name}</h2>\n <StatusBadge status={tool.status.status} />\n </div>\n <div className=\"flex items-center gap-2\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]\"\n >\n <TagIcon className=\"h-3 w-3\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n\n return (\n <BaseDrawer\n open={open}\n onClose={onClose}\n size=\"md\"\n modal\n title={tool.name}\n header={header}\n data-testid=\"tool-detail-drawer\"\n >\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\">\n {/* Description */}\n <p className=\"text-muted-foreground text-sm\">{tool.description}</p>\n\n {/* Meta info row: author + platforms */}\n {tool.author || tool.platforms ? (\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs\">\n {tool.author ? (\n <span className=\"text-muted-foreground\">\n by{' '}\n {tool.website ? (\n <a\n href={tool.website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground hover:underline\"\n >\n {tool.author}\n </a>\n ) : (\n <span className=\"text-foreground\">{tool.author}</span>\n )}\n </span>\n ) : null}\n {tool.platforms && tool.platforms.length > 0 ? (\n <span className=\"text-muted-foreground\">\n {tool.platforms.map((p) => PLATFORM_LABELS[p] ?? p).join(' · ')}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Install Command */}\n {tool.installCommand ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install command\n </span>\n <div className=\"relative rounded-md bg-zinc-900 text-zinc-100\">\n <pre className=\"overflow-x-auto px-3 py-2.5 pe-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap\">\n <code>{tool.installCommand}</code>\n </pre>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100\"\n onClick={handleCopy}\n aria-label={copied ? 'Copied!' : 'Copy install command'}\n >\n {copied ? (\n <Check className=\"h-3.5 w-3.5 text-emerald-500\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n )}\n <span className=\"ms-1 text-[10px]\">{copied ? 'Copied!' : 'Copy'}</span>\n </Button>\n </div>\n </div>\n ) : null}\n\n {/* Action Bar */}\n <div className=\"flex items-center gap-2\">\n {canInstall ? (\n <Button\n size=\"sm\"\n onClick={startInstall}\n disabled={status === 'streaming'}\n aria-label={`Install ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {status === 'streaming' ? (\n <LoaderCircle className=\"me-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Download className=\"me-1.5 h-3.5 w-3.5\" />\n )}\n {status === 'streaming' ? 'Installing...' : 'Install'}\n </Button>\n ) : null}\n {canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => void handleLaunch()}\n disabled={isLaunching}\n aria-label={`Launch ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {isLaunching ? (\n <LoaderCircle className=\"me-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Rocket className=\"me-1.5 h-3.5 w-3.5\" />\n )}\n Launch\n </Button>\n ) : null}\n {tool.documentationUrl ? (\n <Button variant=\"outline\" size=\"sm\" className=\"cursor-pointer\" asChild>\n <a href={tool.documentationUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Docs\n <ExternalLink className=\"ms-1 h-3 w-3\" />\n </a>\n </Button>\n ) : null}\n </div>\n\n {/* Install Log */}\n {(status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install log\n </span>\n <div\n ref={logRef}\n onScroll={handleScroll}\n className=\"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100\"\n data-testid=\"tool-install-log\"\n >\n {logs.map((line, idx) => (\n // eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder\n <div key={idx} className=\"break-all whitespace-pre-wrap\">\n {line}\n </div>\n ))}\n {status === 'done' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-emerald-400\">\n Installation complete\n </div>\n ) : null}\n {status === 'error' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-red-400\">\n Installation failed\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\nimport {\n LoaderCircle,\n Rocket,\n Download,\n Monitor,\n Terminal,\n GitBranch,\n CircleX,\n Circle,\n CircleCheck,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { ToolDetailDrawer } from './tool-detail-drawer';\nimport type { ToolItem } from '@shipit-ai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolCardProps {\n tool: ToolItem;\n onRefresh?: () => Promise<void>;\n className?: string;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nexport function ToolCard({ tool, onRefresh, className }: ToolCardProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [autoStartInstall, setAutoStartInstall] = useState(false);\n const [isPending, startTransition] = useTransition();\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n\n function handleLaunch(e: React.MouseEvent) {\n e.stopPropagation();\n startTransition(async () => {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n });\n }\n\n function handleCardClick() {\n setAutoStartInstall(false);\n setDrawerOpen(true);\n }\n\n function handleInstallClick(e: React.MouseEvent) {\n e.stopPropagation();\n setAutoStartInstall(tool.autoInstall);\n setDrawerOpen(true);\n }\n\n return (\n <>\n <div\n data-testid=\"tool-card\"\n onClick={handleCardClick}\n className={cn(\n 'bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md',\n className\n )}\n >\n {/* Top row: icon + name left, tag badges right */}\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img\n src={tool.iconUrl}\n alt=\"\"\n width={20}\n height={20}\n className=\"shrink-0 dark:invert\"\n />\n ) : (\n <Package className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n )}\n <h3 data-testid=\"tool-card-name\" className=\"truncate text-sm font-bold\">\n {tool.name}\n </h3>\n </div>\n <div data-testid=\"tool-card-tags\" className=\"flex shrink-0 items-center gap-1\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]\"\n >\n <TagIcon className=\"h-2.5 w-2.5\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n\n {/* Summary */}\n <p data-testid=\"tool-card-summary\" className=\"text-muted-foreground mt-1 truncate text-xs\">\n {tool.summary}\n </p>\n\n {/* Bottom section — pushed to bottom */}\n <div className=\"mt-auto flex items-center justify-between pt-3\">\n {/* Status text */}\n <div className=\"flex items-center gap-2\">\n {isError && tool.status.status === 'error' ? (\n <span\n className=\"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400\"\n title={tool.status.errorMessage}\n >\n <CircleX className=\"h-3 w-3 shrink-0\" />\n {tool.status.errorMessage ?? 'Error'}\n </span>\n ) : isInstalled ? (\n <span className=\"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400\">\n <CircleCheck className=\"h-3 w-3\" />\n Installed\n </span>\n ) : (\n <span className=\"text-muted-foreground flex items-center gap-1 text-[10px]\">\n <Circle className=\"h-3 w-3\" />\n Not installed\n </span>\n )}\n {tool.required ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400\">\n Required\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n This tool is required for ShipIT to function properly\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1\">\n {isInstalled && canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleLaunch}\n disabled={isPending}\n aria-label={`Launch ${tool.name}`}\n data-testid=\"tool-card-launch-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n {isPending ? (\n <LoaderCircle className=\"me-1 h-3 w-3 animate-spin\" />\n ) : (\n <Rocket className=\"me-1 h-3 w-3\" />\n )}\n Launch\n </Button>\n ) : !isInstalled && !isError ? (\n <Button\n size=\"sm\"\n variant=\"default\"\n onClick={handleInstallClick}\n aria-label={`Install ${tool.name}`}\n data-testid=\"tool-card-install-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n <Download className=\"me-1 h-3 w-3\" />\n Install\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n\n <ToolDetailDrawer\n tool={tool}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onRefresh={onRefresh}\n autoStart={autoStartInstall}\n />\n </>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Wrench } from 'lucide-react';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { cn } from '@/lib/utils';\nimport { ToolCard } from './tool-card';\nimport type { ToolItem } from '@shipit-ai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolsPageClientProps {\n tools: ToolItem[];\n className?: string;\n}\n\ntype TabValue = 'all' | 'ide' | 'cli-agent' | 'vcs' | 'terminal';\n\nconst TAB_FILTER: Record<TabValue, (tool: ToolItem) => boolean> = {\n all: () => true,\n ide: (tool) => tool.tags.includes('ide'),\n 'cli-agent': (tool) => tool.tags.includes('cli-agent'),\n vcs: (tool) => tool.tags.includes('vcs'),\n terminal: (tool) => tool.tags.includes('terminal'),\n};\n\nexport function ToolsPageClient({ tools: initialTools, className }: ToolsPageClientProps) {\n const [tools, setTools] = useState<ToolItem[]>(initialTools);\n const [activeTab, setActiveTab] = useState<TabValue>('all');\n\n const refreshTools = useCallback(async () => {\n try {\n const res = await fetch('/api/tools');\n if (res.ok) {\n const updated = (await res.json()) as ToolItem[];\n setTools(updated);\n }\n } catch {\n // Silently ignore refresh errors; user can re-navigate to refresh\n }\n }, []);\n\n const filtered = tools.filter(TAB_FILTER[activeTab]);\n\n return (\n <div data-testid=\"tools-page-client\" className={cn('space-y-4', className)}>\n {/* Compact header */}\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"text-muted-foreground h-4 w-4\" />\n <h1 className=\"text-sm font-bold tracking-tight\">Tools</h1>\n <span className=\"text-muted-foreground text-[10px]\">\n {tools.filter((t) => t.status.status === 'available').length}/{tools.length} installed\n </span>\n </div>\n\n <Tabs\n value={activeTab}\n onValueChange={(value) => setActiveTab(value as TabValue)}\n data-testid=\"tools-page-tabs\"\n >\n <TabsList className=\"h-7\">\n <TabsTrigger value=\"all\" data-testid=\"tools-tab-all\" className=\"px-2.5 text-xs\">\n All\n </TabsTrigger>\n <TabsTrigger value=\"ide\" data-testid=\"tools-tab-ide\" className=\"px-2.5 text-xs\">\n IDEs\n </TabsTrigger>\n <TabsTrigger\n value=\"cli-agent\"\n data-testid=\"tools-tab-cli-agent\"\n className=\"px-2.5 text-xs\"\n >\n CLI Agents\n </TabsTrigger>\n <TabsTrigger value=\"vcs\" data-testid=\"tools-tab-vcs\" className=\"px-2.5 text-xs\">\n Version Control\n </TabsTrigger>\n <TabsTrigger value=\"terminal\" data-testid=\"tools-tab-terminal\" className=\"px-2.5 text-xs\">\n Terminals\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value={activeTab} className=\"mt-3\">\n {filtered.length === 0 ? (\n <div\n data-testid=\"tools-page-empty\"\n className=\"text-muted-foreground flex flex-col items-center justify-center py-12 text-center\"\n >\n <Wrench className=\"mb-2 h-6 w-6 opacity-20\" />\n <p className=\"text-xs\">No tools in this category.</p>\n </div>\n ) : (\n <div\n data-testid=\"tools-page-grid\"\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n {filtered.map((tool) => (\n <ToolCard key={tool.id} tool={tool} onRefresh={refreshTools} />\n ))}\n </div>\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n];\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTQiIHg9IjIiIHk9IjMiIHJ4PSIyIiAvPgogIDxsaW5lIHgxPSI4IiB4Mj0iMTYiIHkxPSIyMSIgeTI9IjIxIiAvPgogIDxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iMTciIHkyPSIyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/monitor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Monitor = createLucideIcon('monitor', __iconNode);\n\nexport default Monitor;\n"],"names":[],"mappings":"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","ignoreList":[4]}
@@ -1,3 +1,3 @@
1
- module.exports=[59175,48972,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(69214);function e(a,[b,c]){return Math.min(c,Math.max(b,a))}a.s(["clamp",0,e],48972);var f=a.i(59653),g=a.i(69471),h=a.i(80303),i=a.i(95819),j=a.i(60380),k=a.i(49350),l=a.i(98340),m=a.i(39990),n=a.i(55277),o=a.i(29724),p=a.i(50608),q=a.i(30419),r=a.i(92274),s=a.i(8725),t=a.i(47427),u=a.i(18867),v=a.i(41387),w=a.i(31078),x=a.i(16164),y=a.i(55571),z=[" ","Enter","ArrowUp","ArrowDown"],A=[" ","Enter"],B="Select",[C,D,E]=(0,g.createCollection)(B),[F,G]=(0,i.createContextScope)(B,[E,o.createPopperScope]),H=(0,o.createPopperScope)(),[I,J]=F(B),[K,L]=F(B),M=a=>{let{__scopeSelect:d,children:e,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:k,onValueChange:l,dir:m,name:p,autoComplete:q,disabled:r,required:s,form:u}=a,v=H(d),[w,x]=c.useState(null),[y,z]=c.useState(null),[A,D]=c.useState(!1),E=(0,j.useDirection)(m),[F,G]=(0,t.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:B}),[J,L]=(0,t.useControllableState)({prop:i,defaultProp:k,onChange:l,caller:B}),M=c.useRef(null),N=!w||u||!!w.closest("form"),[O,P]=c.useState(new Set),Q=Array.from(O).map(a=>a.props.value).join(";");return(0,b.jsx)(o.Root,{...v,children:(0,b.jsxs)(I,{required:s,scope:d,trigger:w,onTriggerChange:x,valueNode:y,onValueNodeChange:z,valueNodeHasChildren:A,onValueNodeHasChildrenChange:D,contentId:(0,n.useId)(),value:J,onValueChange:L,open:F,onOpenChange:G,dir:E,triggerPointerDownPosRef:M,disabled:r,children:[(0,b.jsx)(C.Provider,{scope:d,children:(0,b.jsx)(K,{scope:a.__scopeSelect,onNativeOptionAdd:c.useCallback(a=>{P(b=>new Set(b).add(a))},[]),onNativeOptionRemove:c.useCallback(a=>{P(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:e})}),N?(0,b.jsxs)(az,{"aria-hidden":!0,required:s,tabIndex:-1,name:p,autoComplete:q,value:J,onChange:a=>L(a.target.value),disabled:r,form:u,children:[void 0===J?(0,b.jsx)("option",{value:""}):null,Array.from(O)]},Q):null]})})};M.displayName=B;var N="SelectTrigger",O=c.forwardRef((a,d)=>{let{__scopeSelect:e,disabled:g=!1,...i}=a,j=H(e),k=J(N,e),l=k.disabled||g,m=(0,h.useComposedRefs)(d,k.onTriggerChange),n=D(e),p=c.useRef("touch"),[r,s,t]=aB(a=>{let b=n().filter(a=>!a.disabled),c=b.find(a=>a.value===k.value),d=aC(b,a,c);void 0!==d&&k.onValueChange(d.value)}),u=a=>{l||(k.onOpenChange(!0),t()),a&&(k.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,b.jsx)(o.Anchor,{asChild:!0,...j,children:(0,b.jsx)(q.Primitive.button,{type:"button",role:"combobox","aria-controls":k.contentId,"aria-expanded":k.open,"aria-required":k.required,"aria-autocomplete":"none",dir:k.dir,"data-state":k.open?"open":"closed",disabled:l,"data-disabled":l?"":void 0,"data-placeholder":aA(k.value)?"":void 0,...i,ref:m,onClick:(0,f.composeEventHandlers)(i.onClick,a=>{a.currentTarget.focus(),"mouse"!==p.current&&u(a)}),onPointerDown:(0,f.composeEventHandlers)(i.onPointerDown,a=>{p.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(u(a),a.preventDefault())}),onKeyDown:(0,f.composeEventHandlers)(i.onKeyDown,a=>{let b=""!==r.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||s(a.key),(!b||" "!==a.key)&&z.includes(a.key)&&(u(),a.preventDefault())})})})});O.displayName=N;var P="SelectValue",Q=c.forwardRef((a,c)=>{let{__scopeSelect:d,className:e,style:f,children:g,placeholder:i="",...j}=a,k=J(P,d),{onValueNodeHasChildrenChange:l}=k,m=void 0!==g,n=(0,h.useComposedRefs)(c,k.onValueNodeChange);return(0,u.useLayoutEffect)(()=>{l(m)},[l,m]),(0,b.jsx)(q.Primitive.span,{...j,ref:n,style:{pointerEvents:"none"},children:aA(k.value)?(0,b.jsx)(b.Fragment,{children:i}):g})});Q.displayName=P;var R=c.forwardRef((a,c)=>{let{__scopeSelect:d,children:e,...f}=a;return(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...f,ref:c,children:e||"▼"})});R.displayName="SelectIcon";var S=a=>(0,b.jsx)(p.Portal,{asChild:!0,...a});S.displayName="SelectPortal";var T="SelectContent",U=c.forwardRef((a,e)=>{let f=J(T,a.__scopeSelect),[g,h]=c.useState();return((0,u.useLayoutEffect)(()=>{h(new DocumentFragment)},[]),f.open)?(0,b.jsx)(Y,{...a,ref:e}):g?d.createPortal((0,b.jsx)(V,{scope:a.__scopeSelect,children:(0,b.jsx)(C.Slot,{scope:a.__scopeSelect,children:(0,b.jsx)("div",{children:a.children})})}),g):null});U.displayName=T;var[V,W]=F(T),X=(0,r.createSlot)("SelectContent.RemoveScroll"),Y=c.forwardRef((a,d)=>{let{__scopeSelect:e,position:g="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:j,onPointerDownOutside:n,side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z,...A}=a,B=J(T,e),[C,E]=c.useState(null),[F,G]=c.useState(null),H=(0,h.useComposedRefs)(d,a=>E(a)),[I,K]=c.useState(null),[L,M]=c.useState(null),N=D(e),[O,P]=c.useState(!1),Q=c.useRef(!1);c.useEffect(()=>{if(C)return(0,x.hideOthers)(C)},[C]),(0,l.useFocusGuards)();let R=c.useCallback(a=>{let[b,...c]=N().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&F&&(F.scrollTop=0),c===d&&F&&(F.scrollTop=F.scrollHeight),c?.focus(),document.activeElement!==e))return},[N,F]),S=c.useCallback(()=>R([I,C]),[R,I,C]);c.useEffect(()=>{O&&S()},[O,S]);let{onOpenChange:U,triggerPointerDownPosRef:W}=B;c.useEffect(()=>{if(C){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(W.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(W.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():C.contains(c.target)||U(!1),document.removeEventListener("pointermove",b),W.current=null};return null!==W.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[C,U,W]),c.useEffect(()=>{let a=()=>U(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[U]);let[Y,_]=aB(a=>{let b=N().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aC(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),aa=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&(K(a),d&&(Q.current=!0))},[B.value]),ab=c.useCallback(()=>C?.focus(),[C]),ac=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&M(a)},[B.value]),ad="popper"===g?$:Z,ae=ad===$?{side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z}:{};return(0,b.jsx)(V,{scope:e,content:C,viewport:F,onViewportChange:G,itemRefCallback:aa,selectedItem:I,onItemLeave:ab,itemTextRefCallback:ac,focusSelectedItem:S,selectedItemText:L,position:g,isPositioned:O,searchRef:Y,children:(0,b.jsx)(y.RemoveScroll,{as:X,allowPinchZoom:!0,children:(0,b.jsx)(m.FocusScope,{asChild:!0,trapped:B.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,f.composeEventHandlers)(i,a=>{B.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,b.jsx)(k.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:j,onPointerDownOutside:n,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>B.onOpenChange(!1),children:(0,b.jsx)(ad,{role:"listbox",id:B.contentId,"data-state":B.open?"open":"closed",dir:B.dir,onContextMenu:a=>a.preventDefault(),...A,...ae,onPlaced:()=>P(!0),ref:H,style:{display:"flex",flexDirection:"column",outline:"none",...A.style},onKeyDown:(0,f.composeEventHandlers)(A.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||_(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=N().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>R(b)),a.preventDefault()}})})})})})})});Y.displayName="SelectContentImpl";var Z=c.forwardRef((a,d)=>{let{__scopeSelect:f,onPlaced:g,...i}=a,j=J(T,f),k=W(T,f),[l,m]=c.useState(null),[n,o]=c.useState(null),p=(0,h.useComposedRefs)(d,a=>o(a)),r=D(f),s=c.useRef(!1),t=c.useRef(!0),{viewport:v,selectedItem:w,selectedItemText:x,focusSelectedItem:y}=k,z=c.useCallback(()=>{if(j.trigger&&j.valueNode&&l&&n&&v&&w&&x){let a=j.trigger.getBoundingClientRect(),b=n.getBoundingClientRect(),c=j.valueNode.getBoundingClientRect(),d=x.getBoundingClientRect();if("rtl"!==j.dir){let f=d.left-b.left,g=c.left-f,h=a.left-g,i=a.width+h,j=Math.max(i,b.width),k=e(g,[10,Math.max(10,window.innerWidth-10-j)]);l.style.minWidth=i+"px",l.style.left=k+"px"}else{let f=b.right-d.right,g=window.innerWidth-c.right-f,h=window.innerWidth-a.right-g,i=a.width+h,j=Math.max(i,b.width),k=e(g,[10,Math.max(10,window.innerWidth-10-j)]);l.style.minWidth=i+"px",l.style.right=k+"px"}let f=r(),h=window.innerHeight-20,i=v.scrollHeight,k=window.getComputedStyle(n),m=parseInt(k.borderTopWidth,10),o=parseInt(k.paddingTop,10),p=parseInt(k.borderBottomWidth,10),q=m+o+i+parseInt(k.paddingBottom,10)+p,t=Math.min(5*w.offsetHeight,q),u=window.getComputedStyle(v),y=parseInt(u.paddingTop,10),z=parseInt(u.paddingBottom,10),A=a.top+a.height/2-10,B=w.offsetHeight/2,C=m+o+(w.offsetTop+B);if(C<=A){let a=f.length>0&&w===f[f.length-1].ref.current;l.style.bottom="0px";let b=Math.max(h-A,B+(a?z:0)+(n.clientHeight-v.offsetTop-v.offsetHeight)+p);l.style.height=C+b+"px"}else{let a=f.length>0&&w===f[0].ref.current;l.style.top="0px";let b=Math.max(A,m+v.offsetTop+(a?y:0)+B);l.style.height=b+(q-C)+"px",v.scrollTop=C-A+v.offsetTop}l.style.margin="10px 0",l.style.minHeight=t+"px",l.style.maxHeight=h+"px",g?.(),requestAnimationFrame(()=>s.current=!0)}},[r,j.trigger,j.valueNode,l,n,v,w,x,j.dir,g]);(0,u.useLayoutEffect)(()=>z(),[z]);let[A,B]=c.useState();(0,u.useLayoutEffect)(()=>{n&&B(window.getComputedStyle(n).zIndex)},[n]);let C=c.useCallback(a=>{a&&!0===t.current&&(z(),y?.(),t.current=!1)},[z,y]);return(0,b.jsx)(_,{scope:f,contentWrapper:l,shouldExpandOnScrollRef:s,onScrollButtonChange:C,children:(0,b.jsx)("div",{ref:m,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:A},children:(0,b.jsx)(q.Primitive.div,{...i,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});Z.displayName="SelectItemAlignedPosition";var $=c.forwardRef((a,c)=>{let{__scopeSelect:d,align:e="start",collisionPadding:f=10,...g}=a,h=H(d);return(0,b.jsx)(o.Content,{...h,...g,ref:c,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});$.displayName="SelectPopperPosition";var[_,aa]=F(T,{}),ab="SelectViewport",ac=c.forwardRef((a,d)=>{let{__scopeSelect:e,nonce:g,...i}=a,j=W(ab,e),k=aa(ab,e),l=(0,h.useComposedRefs)(d,j.onViewportChange),m=c.useRef(0);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:g}),(0,b.jsx)(C.Slot,{scope:e,children:(0,b.jsx)(q.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:l,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:(0,f.composeEventHandlers)(i.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=k;if(d?.current&&c){let a=Math.abs(m.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}m.current=b.scrollTop})})})]})});ac.displayName=ab;var ad="SelectGroup",[ae,af]=F(ad),ag=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=(0,n.useId)();return(0,b.jsx)(ae,{scope:d,id:f,children:(0,b.jsx)(q.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:c})})});ag.displayName=ad;var ah="SelectLabel",ai=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=af(ah,d);return(0,b.jsx)(q.Primitive.div,{id:f.id,...e,ref:c})});ai.displayName=ah;var aj="SelectItem",[ak,al]=F(aj),am=c.forwardRef((a,d)=>{let{__scopeSelect:e,value:g,disabled:i=!1,textValue:j,...k}=a,l=J(aj,e),m=W(aj,e),o=l.value===g,[p,r]=c.useState(j??""),[s,t]=c.useState(!1),u=(0,h.useComposedRefs)(d,a=>m.itemRefCallback?.(a,g,i)),v=(0,n.useId)(),w=c.useRef("touch"),x=()=>{i||(l.onValueChange(g),l.onOpenChange(!1))};if(""===g)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,b.jsx)(ak,{scope:e,value:g,disabled:i,textId:v,isSelected:o,onItemTextChange:c.useCallback(a=>{r(b=>b||(a?.textContent??"").trim())},[]),children:(0,b.jsx)(C.ItemSlot,{scope:e,value:g,disabled:i,textValue:p,children:(0,b.jsx)(q.Primitive.div,{role:"option","aria-labelledby":v,"data-highlighted":s?"":void 0,"aria-selected":o&&s,"data-state":o?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...k,ref:u,onFocus:(0,f.composeEventHandlers)(k.onFocus,()=>t(!0)),onBlur:(0,f.composeEventHandlers)(k.onBlur,()=>t(!1)),onClick:(0,f.composeEventHandlers)(k.onClick,()=>{"mouse"!==w.current&&x()}),onPointerUp:(0,f.composeEventHandlers)(k.onPointerUp,()=>{"mouse"===w.current&&x()}),onPointerDown:(0,f.composeEventHandlers)(k.onPointerDown,a=>{w.current=a.pointerType}),onPointerMove:(0,f.composeEventHandlers)(k.onPointerMove,a=>{w.current=a.pointerType,i?m.onItemLeave?.():"mouse"===w.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,f.composeEventHandlers)(k.onPointerLeave,a=>{a.currentTarget===document.activeElement&&m.onItemLeave?.()}),onKeyDown:(0,f.composeEventHandlers)(k.onKeyDown,a=>{(m.searchRef?.current===""||" "!==a.key)&&(A.includes(a.key)&&x()," "===a.key&&a.preventDefault())})})})})});am.displayName=aj;var an="SelectItemText",ao=c.forwardRef((a,e)=>{let{__scopeSelect:f,className:g,style:i,...j}=a,k=J(an,f),l=W(an,f),m=al(an,f),n=L(an,f),[o,p]=c.useState(null),r=(0,h.useComposedRefs)(e,a=>p(a),m.onItemTextChange,a=>l.itemTextRefCallback?.(a,m.value,m.disabled)),s=o?.textContent,t=c.useMemo(()=>(0,b.jsx)("option",{value:m.value,disabled:m.disabled,children:s},m.value),[m.disabled,m.value,s]),{onNativeOptionAdd:v,onNativeOptionRemove:w}=n;return(0,u.useLayoutEffect)(()=>(v(t),()=>w(t)),[v,w,t]),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(q.Primitive.span,{id:m.textId,...j,ref:r}),m.isSelected&&k.valueNode&&!k.valueNodeHasChildren?d.createPortal(j.children,k.valueNode):null]})});ao.displayName=an;var ap="SelectItemIndicator",aq=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return al(ap,d).isSelected?(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...e,ref:c}):null});aq.displayName=ap;var ar="SelectScrollUpButton",as=c.forwardRef((a,d)=>{let e=W(ar,a.__scopeSelect),f=aa(ar,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){i(b.scrollTop>0)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});as.displayName=ar;var at="SelectScrollDownButton",au=c.forwardRef((a,d)=>{let e=W(at,a.__scopeSelect),f=aa(at,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;i(Math.ceil(b.scrollTop)<a)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});au.displayName=at;var av=c.forwardRef((a,d)=>{let{__scopeSelect:e,onAutoScroll:g,...h}=a,i=W("SelectScrollButton",e),j=c.useRef(null),k=D(e),l=c.useCallback(()=>{null!==j.current&&(window.clearInterval(j.current),j.current=null)},[]);return c.useEffect(()=>()=>l(),[l]),(0,u.useLayoutEffect)(()=>{let a=k().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[k]),(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...h,ref:d,style:{flexShrink:0,...h.style},onPointerDown:(0,f.composeEventHandlers)(h.onPointerDown,()=>{null===j.current&&(j.current=window.setInterval(g,50))}),onPointerMove:(0,f.composeEventHandlers)(h.onPointerMove,()=>{i.onItemLeave?.(),null===j.current&&(j.current=window.setInterval(g,50))}),onPointerLeave:(0,f.composeEventHandlers)(h.onPointerLeave,()=>{l()})})}),aw=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...e,ref:c})});aw.displayName="SelectSeparator";var ax="SelectArrow",ay=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=H(d),g=J(ax,d),h=W(ax,d);return g.open&&"popper"===h.position?(0,b.jsx)(o.Arrow,{...f,...e,ref:c}):null});ay.displayName=ax;var az=c.forwardRef(({__scopeSelect:a,value:d,...e},f)=>{let g=c.useRef(null),i=(0,h.useComposedRefs)(f,g),j=(0,v.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(j!==d&&b){let c=new Event("change",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[j,d]),(0,b.jsx)(q.Primitive.select,{...e,style:{...w.VISUALLY_HIDDEN_STYLES,...e.style},ref:i,defaultValue:d})});function aA(a){return""===a||void 0===a}function aB(a){let b=(0,s.useCallbackRef)(a),d=c.useRef(""),e=c.useRef(0),f=c.useCallback(a=>{let c=d.current+a;b(c),function a(b){d.current=b,window.clearTimeout(e.current),""!==b&&(e.current=window.setTimeout(()=>a(""),1e3))}(c)},[b]),g=c.useCallback(()=>{d.current="",window.clearTimeout(e.current)},[]);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),[d,f,g]}function aC(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}az.displayName="SelectBubbleInput",a.s(["Arrow",0,ay,"Content",0,U,"Group",0,ag,"Icon",0,R,"Item",0,am,"ItemIndicator",0,aq,"ItemText",0,ao,"Label",0,ai,"Portal",0,S,"Root",0,M,"ScrollDownButton",0,au,"ScrollUpButton",0,as,"Select",0,M,"SelectArrow",0,ay,"SelectContent",0,U,"SelectGroup",0,ag,"SelectIcon",0,R,"SelectItem",0,am,"SelectItemIndicator",0,aq,"SelectItemText",0,ao,"SelectLabel",0,ai,"SelectPortal",0,S,"SelectScrollDownButton",0,au,"SelectScrollUpButton",0,as,"SelectSeparator",0,aw,"SelectTrigger",0,O,"SelectValue",0,Q,"SelectViewport",0,ac,"Separator",0,aw,"Trigger",0,O,"Value",0,Q,"Viewport",0,ac,"createSelectScope",0,G],12526);var aD=a.i(12526),aD=aD,aE=a.i(72016),aF=a.i(71716),aG=a.i(19880),aH=a.i(85536);let aI=aD.Root;aD.Group;let aJ=aD.Value,aK=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Trigger,{ref:e,className:(0,aH.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...d,children:[c,(0,b.jsx)(aD.Icon,{asChild:!0,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));aK.displayName=aD.Trigger.displayName;let aL=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollUpButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aG.ChevronUp,{className:"h-4 w-4"})}));aL.displayName=aD.ScrollUpButton.displayName;let aM=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollDownButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4"})}));aM.displayName=aD.ScrollDownButton.displayName;let aN=c.forwardRef(({className:a,children:c,position:d="popper",...e},f)=>(0,b.jsx)(aD.Portal,{children:(0,b.jsxs)(aD.Content,{ref:f,className:(0,aH.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===d&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:d,...e,children:[(0,b.jsx)(aL,{}),(0,b.jsx)(aD.Viewport,{className:(0,aH.cn)("p-1","popper"===d&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:c}),(0,b.jsx)(aM,{})]})}));aN.displayName=aD.Content.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Label,{ref:d,className:(0,aH.cn)("px-2 py-1.5 text-sm font-semibold",a),...c})).displayName=aD.Label.displayName;let aO=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Item,{ref:e,className:(0,aH.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 ps-2 pe-8 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute end-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(aD.ItemIndicator,{children:(0,b.jsx)(aE.Check,{className:"h-4 w-4"})})}),(0,b.jsx)(aD.ItemText,{children:c})]}));aO.displayName=aD.Item.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Separator,{ref:d,className:(0,aH.cn)("bg-muted -mx-1 my-1 h-px",a),...c})).displayName=aD.Separator.displayName,a.s(["Select",0,aI,"SelectContent",0,aN,"SelectItem",0,aO,"SelectTrigger",0,aK,"SelectValue",0,aJ],59175)}];
1
+ module.exports=[59175,48972,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(69214);function e(a,[b,c]){return Math.min(c,Math.max(b,a))}a.s(["clamp",0,e],48972);var f=a.i(59653),g=a.i(69471),h=a.i(80303),i=a.i(95819),j=a.i(60380),k=a.i(49350),l=a.i(98340),m=a.i(39990),n=a.i(55277),o=a.i(29724),p=a.i(50608),q=a.i(30419),r=a.i(92274),s=a.i(8725),t=a.i(47427),u=a.i(18867),v=a.i(41387),w=a.i(31078),x=a.i(16164),y=a.i(55571),z=[" ","Enter","ArrowUp","ArrowDown"],A=[" ","Enter"],B="Select",[C,D,E]=(0,g.createCollection)(B),[F,G]=(0,i.createContextScope)(B,[E,o.createPopperScope]),H=(0,o.createPopperScope)(),[I,J]=F(B),[K,L]=F(B),M=a=>{let{__scopeSelect:d,children:e,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:k,onValueChange:l,dir:m,name:p,autoComplete:q,disabled:r,required:s,form:u}=a,v=H(d),[w,x]=c.useState(null),[y,z]=c.useState(null),[A,D]=c.useState(!1),E=(0,j.useDirection)(m),[F,G]=(0,t.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:B}),[J,L]=(0,t.useControllableState)({prop:i,defaultProp:k,onChange:l,caller:B}),M=c.useRef(null),N=!w||u||!!w.closest("form"),[O,P]=c.useState(new Set),Q=Array.from(O).map(a=>a.props.value).join(";");return(0,b.jsx)(o.Root,{...v,children:(0,b.jsxs)(I,{required:s,scope:d,trigger:w,onTriggerChange:x,valueNode:y,onValueNodeChange:z,valueNodeHasChildren:A,onValueNodeHasChildrenChange:D,contentId:(0,n.useId)(),value:J,onValueChange:L,open:F,onOpenChange:G,dir:E,triggerPointerDownPosRef:M,disabled:r,children:[(0,b.jsx)(C.Provider,{scope:d,children:(0,b.jsx)(K,{scope:a.__scopeSelect,onNativeOptionAdd:c.useCallback(a=>{P(b=>new Set(b).add(a))},[]),onNativeOptionRemove:c.useCallback(a=>{P(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:e})}),N?(0,b.jsxs)(az,{"aria-hidden":!0,required:s,tabIndex:-1,name:p,autoComplete:q,value:J,onChange:a=>L(a.target.value),disabled:r,form:u,children:[void 0===J?(0,b.jsx)("option",{value:""}):null,Array.from(O)]},Q):null]})})};M.displayName=B;var N="SelectTrigger",O=c.forwardRef((a,d)=>{let{__scopeSelect:e,disabled:g=!1,...i}=a,j=H(e),k=J(N,e),l=k.disabled||g,m=(0,h.useComposedRefs)(d,k.onTriggerChange),n=D(e),p=c.useRef("touch"),[r,s,t]=aB(a=>{let b=n().filter(a=>!a.disabled),c=b.find(a=>a.value===k.value),d=aC(b,a,c);void 0!==d&&k.onValueChange(d.value)}),u=a=>{l||(k.onOpenChange(!0),t()),a&&(k.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,b.jsx)(o.Anchor,{asChild:!0,...j,children:(0,b.jsx)(q.Primitive.button,{type:"button",role:"combobox","aria-controls":k.contentId,"aria-expanded":k.open,"aria-required":k.required,"aria-autocomplete":"none",dir:k.dir,"data-state":k.open?"open":"closed",disabled:l,"data-disabled":l?"":void 0,"data-placeholder":aA(k.value)?"":void 0,...i,ref:m,onClick:(0,f.composeEventHandlers)(i.onClick,a=>{a.currentTarget.focus(),"mouse"!==p.current&&u(a)}),onPointerDown:(0,f.composeEventHandlers)(i.onPointerDown,a=>{p.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(u(a),a.preventDefault())}),onKeyDown:(0,f.composeEventHandlers)(i.onKeyDown,a=>{let b=""!==r.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||s(a.key),(!b||" "!==a.key)&&z.includes(a.key)&&(u(),a.preventDefault())})})})});O.displayName=N;var P="SelectValue",Q=c.forwardRef((a,c)=>{let{__scopeSelect:d,className:e,style:f,children:g,placeholder:i="",...j}=a,k=J(P,d),{onValueNodeHasChildrenChange:l}=k,m=void 0!==g,n=(0,h.useComposedRefs)(c,k.onValueNodeChange);return(0,u.useLayoutEffect)(()=>{l(m)},[l,m]),(0,b.jsx)(q.Primitive.span,{...j,ref:n,style:{pointerEvents:"none"},children:aA(k.value)?(0,b.jsx)(b.Fragment,{children:i}):g})});Q.displayName=P;var R=c.forwardRef((a,c)=>{let{__scopeSelect:d,children:e,...f}=a;return(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...f,ref:c,children:e||"▼"})});R.displayName="SelectIcon";var S=a=>(0,b.jsx)(p.Portal,{asChild:!0,...a});S.displayName="SelectPortal";var T="SelectContent",U=c.forwardRef((a,e)=>{let f=J(T,a.__scopeSelect),[g,h]=c.useState();return((0,u.useLayoutEffect)(()=>{h(new DocumentFragment)},[]),f.open)?(0,b.jsx)(Y,{...a,ref:e}):g?d.createPortal((0,b.jsx)(V,{scope:a.__scopeSelect,children:(0,b.jsx)(C.Slot,{scope:a.__scopeSelect,children:(0,b.jsx)("div",{children:a.children})})}),g):null});U.displayName=T;var[V,W]=F(T),X=(0,r.createSlot)("SelectContent.RemoveScroll"),Y=c.forwardRef((a,d)=>{let{__scopeSelect:e,position:g="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:j,onPointerDownOutside:n,side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z,...A}=a,B=J(T,e),[C,E]=c.useState(null),[F,G]=c.useState(null),H=(0,h.useComposedRefs)(d,a=>E(a)),[I,K]=c.useState(null),[L,M]=c.useState(null),N=D(e),[O,P]=c.useState(!1),Q=c.useRef(!1);c.useEffect(()=>{if(C)return(0,x.hideOthers)(C)},[C]),(0,l.useFocusGuards)();let R=c.useCallback(a=>{let[b,...c]=N().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&F&&(F.scrollTop=0),c===d&&F&&(F.scrollTop=F.scrollHeight),c?.focus(),document.activeElement!==e))return},[N,F]),S=c.useCallback(()=>R([I,C]),[R,I,C]);c.useEffect(()=>{O&&S()},[O,S]);let{onOpenChange:U,triggerPointerDownPosRef:W}=B;c.useEffect(()=>{if(C){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(W.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(W.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():C.contains(c.target)||U(!1),document.removeEventListener("pointermove",b),W.current=null};return null!==W.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[C,U,W]),c.useEffect(()=>{let a=()=>U(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[U]);let[Y,_]=aB(a=>{let b=N().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aC(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),aa=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&(K(a),d&&(Q.current=!0))},[B.value]),ab=c.useCallback(()=>C?.focus(),[C]),ac=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&M(a)},[B.value]),ad="popper"===g?$:Z,ae=ad===$?{side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z}:{};return(0,b.jsx)(V,{scope:e,content:C,viewport:F,onViewportChange:G,itemRefCallback:aa,selectedItem:I,onItemLeave:ab,itemTextRefCallback:ac,focusSelectedItem:S,selectedItemText:L,position:g,isPositioned:O,searchRef:Y,children:(0,b.jsx)(y.RemoveScroll,{as:X,allowPinchZoom:!0,children:(0,b.jsx)(m.FocusScope,{asChild:!0,trapped:B.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,f.composeEventHandlers)(i,a=>{B.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,b.jsx)(k.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:j,onPointerDownOutside:n,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>B.onOpenChange(!1),children:(0,b.jsx)(ad,{role:"listbox",id:B.contentId,"data-state":B.open?"open":"closed",dir:B.dir,onContextMenu:a=>a.preventDefault(),...A,...ae,onPlaced:()=>P(!0),ref:H,style:{display:"flex",flexDirection:"column",outline:"none",...A.style},onKeyDown:(0,f.composeEventHandlers)(A.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||_(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=N().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>R(b)),a.preventDefault()}})})})})})})});Y.displayName="SelectContentImpl";var Z=c.forwardRef((a,d)=>{let{__scopeSelect:f,onPlaced:g,...i}=a,j=J(T,f),k=W(T,f),[l,m]=c.useState(null),[n,o]=c.useState(null),p=(0,h.useComposedRefs)(d,a=>o(a)),r=D(f),s=c.useRef(!1),t=c.useRef(!0),{viewport:v,selectedItem:w,selectedItemText:x,focusSelectedItem:y}=k,z=c.useCallback(()=>{if(j.trigger&&j.valueNode&&l&&n&&v&&w&&x){let a=j.trigger.getBoundingClientRect(),b=n.getBoundingClientRect(),c=j.valueNode.getBoundingClientRect(),d=x.getBoundingClientRect();if("rtl"!==j.dir){let f=d.left-b.left,g=c.left-f,h=a.left-g,i=a.width+h,j=Math.max(i,b.width),k=e(g,[10,Math.max(10,window.innerWidth-10-j)]);l.style.minWidth=i+"px",l.style.left=k+"px"}else{let f=b.right-d.right,g=window.innerWidth-c.right-f,h=window.innerWidth-a.right-g,i=a.width+h,j=Math.max(i,b.width),k=e(g,[10,Math.max(10,window.innerWidth-10-j)]);l.style.minWidth=i+"px",l.style.right=k+"px"}let f=r(),h=window.innerHeight-20,i=v.scrollHeight,k=window.getComputedStyle(n),m=parseInt(k.borderTopWidth,10),o=parseInt(k.paddingTop,10),p=parseInt(k.borderBottomWidth,10),q=m+o+i+parseInt(k.paddingBottom,10)+p,t=Math.min(5*w.offsetHeight,q),u=window.getComputedStyle(v),y=parseInt(u.paddingTop,10),z=parseInt(u.paddingBottom,10),A=a.top+a.height/2-10,B=w.offsetHeight/2,C=m+o+(w.offsetTop+B);if(C<=A){let a=f.length>0&&w===f[f.length-1].ref.current;l.style.bottom="0px";let b=Math.max(h-A,B+(a?z:0)+(n.clientHeight-v.offsetTop-v.offsetHeight)+p);l.style.height=C+b+"px"}else{let a=f.length>0&&w===f[0].ref.current;l.style.top="0px";let b=Math.max(A,m+v.offsetTop+(a?y:0)+B);l.style.height=b+(q-C)+"px",v.scrollTop=C-A+v.offsetTop}l.style.margin="10px 0",l.style.minHeight=t+"px",l.style.maxHeight=h+"px",g?.(),requestAnimationFrame(()=>s.current=!0)}},[r,j.trigger,j.valueNode,l,n,v,w,x,j.dir,g]);(0,u.useLayoutEffect)(()=>z(),[z]);let[A,B]=c.useState();(0,u.useLayoutEffect)(()=>{n&&B(window.getComputedStyle(n).zIndex)},[n]);let C=c.useCallback(a=>{a&&!0===t.current&&(z(),y?.(),t.current=!1)},[z,y]);return(0,b.jsx)(_,{scope:f,contentWrapper:l,shouldExpandOnScrollRef:s,onScrollButtonChange:C,children:(0,b.jsx)("div",{ref:m,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:A},children:(0,b.jsx)(q.Primitive.div,{...i,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});Z.displayName="SelectItemAlignedPosition";var $=c.forwardRef((a,c)=>{let{__scopeSelect:d,align:e="start",collisionPadding:f=10,...g}=a,h=H(d);return(0,b.jsx)(o.Content,{...h,...g,ref:c,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});$.displayName="SelectPopperPosition";var[_,aa]=F(T,{}),ab="SelectViewport",ac=c.forwardRef((a,d)=>{let{__scopeSelect:e,nonce:g,...i}=a,j=W(ab,e),k=aa(ab,e),l=(0,h.useComposedRefs)(d,j.onViewportChange),m=c.useRef(0);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:g}),(0,b.jsx)(C.Slot,{scope:e,children:(0,b.jsx)(q.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:l,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:(0,f.composeEventHandlers)(i.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=k;if(d?.current&&c){let a=Math.abs(m.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}m.current=b.scrollTop})})})]})});ac.displayName=ab;var ad="SelectGroup",[ae,af]=F(ad),ag=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=(0,n.useId)();return(0,b.jsx)(ae,{scope:d,id:f,children:(0,b.jsx)(q.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:c})})});ag.displayName=ad;var ah="SelectLabel",ai=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=af(ah,d);return(0,b.jsx)(q.Primitive.div,{id:f.id,...e,ref:c})});ai.displayName=ah;var aj="SelectItem",[ak,al]=F(aj),am=c.forwardRef((a,d)=>{let{__scopeSelect:e,value:g,disabled:i=!1,textValue:j,...k}=a,l=J(aj,e),m=W(aj,e),o=l.value===g,[p,r]=c.useState(j??""),[s,t]=c.useState(!1),u=(0,h.useComposedRefs)(d,a=>m.itemRefCallback?.(a,g,i)),v=(0,n.useId)(),w=c.useRef("touch"),x=()=>{i||(l.onValueChange(g),l.onOpenChange(!1))};if(""===g)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,b.jsx)(ak,{scope:e,value:g,disabled:i,textId:v,isSelected:o,onItemTextChange:c.useCallback(a=>{r(b=>b||(a?.textContent??"").trim())},[]),children:(0,b.jsx)(C.ItemSlot,{scope:e,value:g,disabled:i,textValue:p,children:(0,b.jsx)(q.Primitive.div,{role:"option","aria-labelledby":v,"data-highlighted":s?"":void 0,"aria-selected":o&&s,"data-state":o?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...k,ref:u,onFocus:(0,f.composeEventHandlers)(k.onFocus,()=>t(!0)),onBlur:(0,f.composeEventHandlers)(k.onBlur,()=>t(!1)),onClick:(0,f.composeEventHandlers)(k.onClick,()=>{"mouse"!==w.current&&x()}),onPointerUp:(0,f.composeEventHandlers)(k.onPointerUp,()=>{"mouse"===w.current&&x()}),onPointerDown:(0,f.composeEventHandlers)(k.onPointerDown,a=>{w.current=a.pointerType}),onPointerMove:(0,f.composeEventHandlers)(k.onPointerMove,a=>{w.current=a.pointerType,i?m.onItemLeave?.():"mouse"===w.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,f.composeEventHandlers)(k.onPointerLeave,a=>{a.currentTarget===document.activeElement&&m.onItemLeave?.()}),onKeyDown:(0,f.composeEventHandlers)(k.onKeyDown,a=>{(m.searchRef?.current===""||" "!==a.key)&&(A.includes(a.key)&&x()," "===a.key&&a.preventDefault())})})})})});am.displayName=aj;var an="SelectItemText",ao=c.forwardRef((a,e)=>{let{__scopeSelect:f,className:g,style:i,...j}=a,k=J(an,f),l=W(an,f),m=al(an,f),n=L(an,f),[o,p]=c.useState(null),r=(0,h.useComposedRefs)(e,a=>p(a),m.onItemTextChange,a=>l.itemTextRefCallback?.(a,m.value,m.disabled)),s=o?.textContent,t=c.useMemo(()=>(0,b.jsx)("option",{value:m.value,disabled:m.disabled,children:s},m.value),[m.disabled,m.value,s]),{onNativeOptionAdd:v,onNativeOptionRemove:w}=n;return(0,u.useLayoutEffect)(()=>(v(t),()=>w(t)),[v,w,t]),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(q.Primitive.span,{id:m.textId,...j,ref:r}),m.isSelected&&k.valueNode&&!k.valueNodeHasChildren?d.createPortal(j.children,k.valueNode):null]})});ao.displayName=an;var ap="SelectItemIndicator",aq=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return al(ap,d).isSelected?(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...e,ref:c}):null});aq.displayName=ap;var ar="SelectScrollUpButton",as=c.forwardRef((a,d)=>{let e=W(ar,a.__scopeSelect),f=aa(ar,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){i(b.scrollTop>0)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});as.displayName=ar;var at="SelectScrollDownButton",au=c.forwardRef((a,d)=>{let e=W(at,a.__scopeSelect),f=aa(at,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;i(Math.ceil(b.scrollTop)<a)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});au.displayName=at;var av=c.forwardRef((a,d)=>{let{__scopeSelect:e,onAutoScroll:g,...h}=a,i=W("SelectScrollButton",e),j=c.useRef(null),k=D(e),l=c.useCallback(()=>{null!==j.current&&(window.clearInterval(j.current),j.current=null)},[]);return c.useEffect(()=>()=>l(),[l]),(0,u.useLayoutEffect)(()=>{let a=k().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[k]),(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...h,ref:d,style:{flexShrink:0,...h.style},onPointerDown:(0,f.composeEventHandlers)(h.onPointerDown,()=>{null===j.current&&(j.current=window.setInterval(g,50))}),onPointerMove:(0,f.composeEventHandlers)(h.onPointerMove,()=>{i.onItemLeave?.(),null===j.current&&(j.current=window.setInterval(g,50))}),onPointerLeave:(0,f.composeEventHandlers)(h.onPointerLeave,()=>{l()})})}),aw=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...e,ref:c})});aw.displayName="SelectSeparator";var ax="SelectArrow",ay=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=H(d),g=J(ax,d),h=W(ax,d);return g.open&&"popper"===h.position?(0,b.jsx)(o.Arrow,{...f,...e,ref:c}):null});ay.displayName=ax;var az=c.forwardRef(({__scopeSelect:a,value:d,...e},f)=>{let g=c.useRef(null),i=(0,h.useComposedRefs)(f,g),j=(0,v.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(j!==d&&b){let c=new Event("change",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[j,d]),(0,b.jsx)(q.Primitive.select,{...e,style:{...w.VISUALLY_HIDDEN_STYLES,...e.style},ref:i,defaultValue:d})});function aA(a){return""===a||void 0===a}function aB(a){let b=(0,s.useCallbackRef)(a),d=c.useRef(""),e=c.useRef(0),f=c.useCallback(a=>{let c=d.current+a;b(c),function a(b){d.current=b,window.clearTimeout(e.current),""!==b&&(e.current=window.setTimeout(()=>a(""),1e3))}(c)},[b]),g=c.useCallback(()=>{d.current="",window.clearTimeout(e.current)},[]);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),[d,f,g]}function aC(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}az.displayName="SelectBubbleInput",a.s(["Arrow",0,ay,"Content",0,U,"Group",0,ag,"Icon",0,R,"Item",0,am,"ItemIndicator",0,aq,"ItemText",0,ao,"Label",0,ai,"Portal",0,S,"Root",0,M,"ScrollDownButton",0,au,"ScrollUpButton",0,as,"Select",0,M,"SelectArrow",0,ay,"SelectContent",0,U,"SelectGroup",0,ag,"SelectIcon",0,R,"SelectItem",0,am,"SelectItemIndicator",0,aq,"SelectItemText",0,ao,"SelectLabel",0,ai,"SelectPortal",0,S,"SelectScrollDownButton",0,au,"SelectScrollUpButton",0,as,"SelectSeparator",0,aw,"SelectTrigger",0,O,"SelectValue",0,Q,"SelectViewport",0,ac,"Separator",0,aw,"Trigger",0,O,"Value",0,Q,"Viewport",0,ac,"createSelectScope",0,G],12526);var aD=a.i(12526),aD=aD,aE=a.i(60197),aF=a.i(29345),aG=a.i(65798),aH=a.i(85536);let aI=aD.Root;aD.Group;let aJ=aD.Value,aK=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Trigger,{ref:e,className:(0,aH.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...d,children:[c,(0,b.jsx)(aD.Icon,{asChild:!0,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));aK.displayName=aD.Trigger.displayName;let aL=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollUpButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aG.ChevronUp,{className:"h-4 w-4"})}));aL.displayName=aD.ScrollUpButton.displayName;let aM=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollDownButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4"})}));aM.displayName=aD.ScrollDownButton.displayName;let aN=c.forwardRef(({className:a,children:c,position:d="popper",...e},f)=>(0,b.jsx)(aD.Portal,{children:(0,b.jsxs)(aD.Content,{ref:f,className:(0,aH.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===d&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:d,...e,children:[(0,b.jsx)(aL,{}),(0,b.jsx)(aD.Viewport,{className:(0,aH.cn)("p-1","popper"===d&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:c}),(0,b.jsx)(aM,{})]})}));aN.displayName=aD.Content.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Label,{ref:d,className:(0,aH.cn)("px-2 py-1.5 text-sm font-semibold",a),...c})).displayName=aD.Label.displayName;let aO=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Item,{ref:e,className:(0,aH.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 ps-2 pe-8 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute end-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(aD.ItemIndicator,{children:(0,b.jsx)(aE.Check,{className:"h-4 w-4"})})}),(0,b.jsx)(aD.ItemText,{children:c})]}));aO.displayName=aD.Item.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Separator,{ref:d,className:(0,aH.cn)("bg-muted -mx-1 my-1 h-px",a),...c})).displayName=aD.Separator.displayName,a.s(["Select",0,aI,"SelectContent",0,aN,"SelectItem",0,aO,"SelectTrigger",0,aK,"SelectValue",0,aJ],59175)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_components_ui_select_tsx_0b.-59k._.js.map
@@ -7,16 +7,16 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/03~yq9q893hmn.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/xP_-L4TLYvd3i_sEmljLs/_buildManifest.js",
11
- "static/xP_-L4TLYvd3i_sEmljLs/_ssgManifest.js",
12
- "static/xP_-L4TLYvd3i_sEmljLs/_clientMiddlewareManifest.js"
10
+ "static/21GZVGanhwKlq9p5dtTCB/_buildManifest.js",
11
+ "static/21GZVGanhwKlq9p5dtTCB/_ssgManifest.js",
12
+ "static/21GZVGanhwKlq9p5dtTCB/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/16~vw9ce~pa0c.js",
16
16
  "static/chunks/0xrbak95onw-v.js",
17
- "static/chunks/0~er~22zwvx0i.js",
17
+ "static/chunks/09_oo_kc.j.df.js",
18
18
  "static/chunks/17op3~2jku4g7.js",
19
19
  "static/chunks/0rfd5i_uq~-36.js",
20
- "static/chunks/turbopack-0ve8f54_veg.u.js"
20
+ "static/chunks/turbopack-0wsav6to5abtk.js"
21
21
  ]
22
22
  };
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/16~vw9ce~pa0c.js"/><script src="/_next/static/chunks/0xrbak95onw-v.js" async=""></script><script src="/_next/static/chunks/0~er~22zwvx0i.js" async=""></script><script src="/_next/static/chunks/17op3~2jku4g7.js" async=""></script><script src="/_next/static/chunks/0rfd5i_uq~-36.js" async=""></script><script src="/_next/static/chunks/turbopack-0ve8f54_veg.u.js" async=""></script><script src="/_next/static/chunks/0ia0v054b4ci_.js" async=""></script><script src="/_next/static/chunks/0rcp01fimyysj.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/16~vw9ce~pa0c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[10206,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"default\"]\n3:I[20397,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"default\"]\n4:I[91336,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[91336,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"ViewportBoundary\"]\na:I[91336,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"MetadataBoundary\"]\nc:I[98295,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"xP_-L4TLYvd3i_sEmljLs\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/16~vw9ce~pa0c.js"/><script src="/_next/static/chunks/0xrbak95onw-v.js" async=""></script><script src="/_next/static/chunks/09_oo_kc.j.df.js" async=""></script><script src="/_next/static/chunks/17op3~2jku4g7.js" async=""></script><script src="/_next/static/chunks/0rfd5i_uq~-36.js" async=""></script><script src="/_next/static/chunks/turbopack-0wsav6to5abtk.js" async=""></script><script src="/_next/static/chunks/0ia0v054b4ci_.js" async=""></script><script src="/_next/static/chunks/0rcp01fimyysj.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/16~vw9ce~pa0c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[10206,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"default\"]\n3:I[20397,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"default\"]\n4:I[91336,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[91336,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"ViewportBoundary\"]\na:I[91336,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"MetadataBoundary\"]\nc:I[98295,[\"/_next/static/chunks/0ia0v054b4ci_.js\",\"/_next/static/chunks/0rcp01fimyysj.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"21GZVGanhwKlq9p5dtTCB\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>