@shepai/cli 1.202.1-pr606.60460ac → 1.202.2

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 (372) hide show
  1. package/package.json +1 -1
  2. package/web/.next/BUILD_ID +1 -1
  3. package/web/.next/build-manifest.json +2 -2
  4. package/web/.next/fallback-build-manifest.json +2 -2
  5. package/web/.next/prerender-manifest.json +3 -3
  6. package/web/.next/required-server-files.js +2 -2
  7. package/web/.next/required-server-files.json +2 -2
  8. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +4 -4
  9. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +37 -37
  10. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  11. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +4 -4
  13. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +35 -35
  14. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  15. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  16. package/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +4 -4
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +38 -38
  18. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  19. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +4 -4
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +47 -47
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +47 -47
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +4 -4
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +36 -36
  30. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +4 -4
  33. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +36 -36
  34. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +4 -4
  37. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +35 -35
  38. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/control-center/page/react-loadable-manifest.json +4 -4
  41. package/web/.next/server/app/(dashboard)/control-center/page/server-reference-manifest.json +35 -35
  42. package/web/.next/server/app/(dashboard)/control-center/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/control-center/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +4 -4
  45. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +38 -38
  46. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +4 -4
  49. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +47 -47
  50. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  53. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +47 -47
  54. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +4 -4
  57. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +36 -36
  58. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +4 -4
  61. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +36 -36
  62. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/_global-error.html +2 -2
  65. package/web/.next/server/app/_global-error.rsc +1 -1
  66. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  67. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  69. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  70. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  71. package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +4 -4
  72. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +9 -9
  73. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/agent-questions/page/react-loadable-manifest.json +4 -4
  75. package/web/.next/server/app/agent-questions/page/server-reference-manifest.json +11 -11
  76. package/web/.next/server/app/agent-questions/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/agents/[agentType]/page/react-loadable-manifest.json +4 -4
  78. package/web/.next/server/app/agents/[agentType]/page/server-reference-manifest.json +13 -13
  79. package/web/.next/server/app/agents/[agentType]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/agents/page/react-loadable-manifest.json +4 -4
  81. package/web/.next/server/app/agents/page/server-reference-manifest.json +10 -10
  82. package/web/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +4 -4
  84. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +18 -18
  85. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  86. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/application/[id]/supervisor/page/react-loadable-manifest.json +4 -4
  88. package/web/.next/server/app/application/[id]/supervisor/page/server-reference-manifest.json +10 -10
  89. package/web/.next/server/app/application/[id]/supervisor/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/applications/page/react-loadable-manifest.json +4 -4
  91. package/web/.next/server/app/applications/page/server-reference-manifest.json +20 -20
  92. package/web/.next/server/app/applications/page.js.nft.json +1 -1
  93. package/web/.next/server/app/applications/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/features/page/react-loadable-manifest.json +4 -4
  95. package/web/.next/server/app/features/page/server-reference-manifest.json +31 -31
  96. package/web/.next/server/app/features/page.js.nft.json +1 -1
  97. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/onboarding/page/react-loadable-manifest.json +4 -4
  99. package/web/.next/server/app/onboarding/page/server-reference-manifest.json +9 -9
  100. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/page/react-loadable-manifest.json +4 -4
  102. package/web/.next/server/app/page/server-reference-manifest.json +9 -9
  103. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/react-loadable-manifest.json +4 -4
  105. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/server-reference-manifest.json +16 -16
  106. package/web/.next/server/app/projects/[slug]/items/[itemId]/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/projects/[slug]/page/react-loadable-manifest.json +4 -4
  108. package/web/.next/server/app/projects/[slug]/page/server-reference-manifest.json +28 -28
  109. package/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/projects/[slug]/pages/page/react-loadable-manifest.json +4 -4
  111. package/web/.next/server/app/projects/[slug]/pages/page/server-reference-manifest.json +12 -12
  112. package/web/.next/server/app/projects/[slug]/pages/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/projects/[slug]/settings/page/react-loadable-manifest.json +4 -4
  114. package/web/.next/server/app/projects/[slug]/settings/page/server-reference-manifest.json +18 -18
  115. package/web/.next/server/app/projects/[slug]/settings/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/projects/page/react-loadable-manifest.json +4 -4
  117. package/web/.next/server/app/projects/page/server-reference-manifest.json +10 -10
  118. package/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/settings/page/react-loadable-manifest.json +4 -4
  120. package/web/.next/server/app/settings/page/server-reference-manifest.json +15 -15
  121. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/skills/page/react-loadable-manifest.json +4 -4
  123. package/web/.next/server/app/skills/page/server-reference-manifest.json +17 -17
  124. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/supervisor/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  126. package/web/.next/server/app/supervisor/feature/[featureId]/page/server-reference-manifest.json +10 -10
  127. package/web/.next/server/app/supervisor/feature/[featureId]/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/supervisor/page/react-loadable-manifest.json +4 -4
  129. package/web/.next/server/app/supervisor/page/server-reference-manifest.json +10 -10
  130. package/web/.next/server/app/supervisor/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/supervisor/repo/[repositoryId]/page/react-loadable-manifest.json +4 -4
  132. package/web/.next/server/app/supervisor/repo/[repositoryId]/page/server-reference-manifest.json +10 -10
  133. package/web/.next/server/app/supervisor/repo/[repositoryId]/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/tools/page/react-loadable-manifest.json +4 -4
  135. package/web/.next/server/app/tools/page/server-reference-manifest.json +15 -15
  136. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/version/page/react-loadable-manifest.json +4 -4
  138. package/web/.next/server/app/version/page/server-reference-manifest.json +9 -9
  139. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/chunks/[root-of-the-server]__10e976f3._.js +1 -1
  141. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agent-questions_page_actions_4b694f8d.js +1 -1
  142. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agent-questions_page_actions_4b694f8d.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agents_[agentType]_page_actions_103679a6.js +1 -1
  144. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agents_[agentType]_page_actions_103679a6.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_projects_[slug]_pages_page_actions_19d50f6c.js +1 -1
  146. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_projects_[slug]_pages_page_actions_19d50f6c.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js +1 -1
  148. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js +1 -1
  150. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  152. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +1 -1
  154. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__0af8610a._.js +3 -3
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__0af8610a._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b652a2f._.js +1 -1
  158. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b73253b._.js → [root-of-the-server]__2e388ba3._.js} +2 -2
  159. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b73253b._.js.map → [root-of-the-server]__2e388ba3._.js.map} +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__56cf47e7._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__56cf47e7._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__648730d4._.js +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__68df6415._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__68df6415._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bc6bf96._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bc6bf96._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__9852cb08._.js +2 -2
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__9852cb08._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__a1167cec._.js +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__a1167cec._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__a12d0ad7._.js +3 -0
  172. package/web/.next/server/chunks/ssr/{[root-of-the-server]__52ca7f88._.js.map → [root-of-the-server]__a12d0ad7._.js.map} +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba699bec._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba699bec._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0741ee1._.js +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0fa59e6._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0fa59e6._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__ea26ff90._.js +3 -3
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__ff0095e3._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_07036593._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_07036593._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_0d2a7595._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_0d2a7595._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/_101de7c3._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_101de7c3._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/{_db111d21._.js → _10f54ace._.js} +2 -2
  187. package/web/.next/server/chunks/ssr/{_db111d21._.js.map → _10f54ace._.js.map} +1 -1
  188. package/web/.next/server/chunks/ssr/_24fca3cf._.js +1 -1
  189. package/web/.next/server/chunks/ssr/_24fca3cf._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/{_6ff832ad._.js → _2759af76._.js} +2 -2
  191. package/web/.next/server/chunks/ssr/{_6ff832ad._.js.map → _2759af76._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/_2bc48f3d._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_2bc48f3d._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/{_fb539286._.js → _2bef1982._.js} +2 -2
  195. package/web/.next/server/chunks/ssr/{_fb539286._.js.map → _2bef1982._.js.map} +1 -1
  196. package/web/.next/server/chunks/ssr/_32f66845._.js +1 -1
  197. package/web/.next/server/chunks/ssr/_408848e6._.js +1 -1
  198. package/web/.next/server/chunks/ssr/_408848e6._.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/_40e02782._.js +1 -1
  200. package/web/.next/server/chunks/ssr/_40e02782._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/_486d45d6._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_486d45d6._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/{_824d5772._.js → _498cba11._.js} +2 -2
  204. package/web/.next/server/chunks/ssr/{_824d5772._.js.map → _498cba11._.js.map} +1 -1
  205. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/_5cbb0e22._.js +1 -1
  208. package/web/.next/server/chunks/ssr/_5cbb0e22._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/{_5a3edc88._.js → _673be4f1._.js} +2 -2
  210. package/web/.next/server/chunks/ssr/{_5a3edc88._.js.map → _673be4f1._.js.map} +1 -1
  211. package/web/.next/server/chunks/ssr/_7ba67729._.js +1 -1
  212. package/web/.next/server/chunks/ssr/_7ba67729._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/_805ae1aa._.js +1 -1
  214. package/web/.next/server/chunks/ssr/_805ae1aa._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/_87cf18c3._.js +1 -1
  216. package/web/.next/server/chunks/ssr/_87cf18c3._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/_8a700ff4._.js +1 -1
  218. package/web/.next/server/chunks/ssr/_8a700ff4._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/_95b97274._.js +1 -1
  220. package/web/.next/server/chunks/ssr/_95b97274._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/{_fbcfaf3a._.js → _9d18d1b1._.js} +2 -2
  222. package/web/.next/server/chunks/ssr/{_fbcfaf3a._.js.map → _9d18d1b1._.js.map} +1 -1
  223. package/web/.next/server/chunks/ssr/{_70ff64a1._.js → _a93687e6._.js} +2 -2
  224. package/web/.next/server/chunks/ssr/{_70ff64a1._.js.map → _a93687e6._.js.map} +1 -1
  225. package/web/.next/server/chunks/ssr/_c2e196ee._.js +1 -1
  226. package/web/.next/server/chunks/ssr/_c2e196ee._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/_ca3b7bf7._.js +1 -1
  228. package/web/.next/server/chunks/ssr/_ca3b7bf7._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/_d53224a9._.js +1 -1
  230. package/web/.next/server/chunks/ssr/_d53224a9._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/_d573dcc2._.js +1 -1
  232. package/web/.next/server/chunks/ssr/_e2671e14._.js +1 -1
  233. package/web/.next/server/chunks/ssr/_e2671e14._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/_ecd45b17._.js +1 -1
  235. package/web/.next/server/chunks/ssr/_ecd45b17._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/{_f0d45e47._.js → _f46d2018._.js} +2 -2
  237. package/web/.next/server/chunks/ssr/{_f0d45e47._.js.map → _f46d2018._.js.map} +1 -1
  238. package/web/.next/server/chunks/ssr/_f602cc9f._.js +1 -1
  239. package/web/.next/server/chunks/ssr/_f602cc9f._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/{_20a56008._.js → _f71954a5._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/{_20a56008._.js.map → _f71954a5._.js.map} +1 -1
  242. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  243. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  245. package/web/.next/server/chunks/ssr/src_presentation_web_0e291f0b._.js +1 -1
  246. package/web/.next/server/chunks/ssr/src_presentation_web_0e291f0b._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/{src_presentation_web_40673f0c._.js → src_presentation_web_16c83ab4._.js} +2 -2
  248. package/web/.next/server/chunks/ssr/{src_presentation_web_40673f0c._.js.map → src_presentation_web_16c83ab4._.js.map} +1 -1
  249. package/web/.next/server/chunks/ssr/src_presentation_web_1d8d177f._.js +1 -1
  250. package/web/.next/server/chunks/ssr/src_presentation_web_1d8d177f._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/src_presentation_web_450b58fc._.js +1 -1
  252. package/web/.next/server/chunks/ssr/src_presentation_web_450b58fc._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/src_presentation_web_47727150._.js +1 -1
  254. package/web/.next/server/chunks/ssr/src_presentation_web_47727150._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/src_presentation_web_64fcfc84._.js +1 -1
  256. package/web/.next/server/chunks/ssr/src_presentation_web_64fcfc84._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/src_presentation_web_74b7bdb2._.js +1 -1
  258. package/web/.next/server/chunks/ssr/src_presentation_web_74b7bdb2._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/src_presentation_web_82aeca34._.js +1 -1
  260. package/web/.next/server/chunks/ssr/src_presentation_web_82aeca34._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/src_presentation_web_8a564d47._.js +1 -1
  262. package/web/.next/server/chunks/ssr/src_presentation_web_8a564d47._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +1 -1
  264. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_f4f3fad9.js +1 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_f4f3fad9.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_agents_page_actions_d4bd4711.js +1 -1
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_agents_page_actions_d4bd4711.js.map +1 -1
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_onboarding_page_actions_bb695e8d.js +1 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_onboarding_page_actions_bb695e8d.js.map +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_ac47e420.js +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_ac47e420.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_projects_page_actions_c91a23a8.js +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_projects_page_actions_c91a23a8.js.map +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_63c2d912.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_63c2d912.js.map +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_a53a3da6._.js +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_a53a3da6._.js.map +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_246617fe._.js +3 -3
  280. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js +1 -1
  281. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +1 -1
  283. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js +1 -1
  284. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js.map +1 -1
  285. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +1 -1
  286. package/web/.next/server/chunks/ssr/src_presentation_web_b1b3c26c._.js +1 -1
  287. package/web/.next/server/chunks/ssr/src_presentation_web_b1b3c26c._.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web_b98a4353._.js +1 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web_b98a4353._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/src_presentation_web_c96ca051._.js +1 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web_c96ca051._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/{src_presentation_web_e812a69b._.js → src_presentation_web_cb0d2c28._.js} +2 -2
  293. package/web/.next/server/chunks/ssr/{src_presentation_web_e812a69b._.js.map → src_presentation_web_cb0d2c28._.js.map} +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_components_agent-editor_agent-editor-tabs_tsx_d5a954b4._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_components_agent-editor_agent-editor-tabs_tsx_d5a954b4._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_d3858f16._.js +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_d3858f16._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_d7f8130c._.js +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_d7f8130c._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_dddd8ccd._.js +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_dddd8ccd._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_e13d58b0._.js +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_e13d58b0._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web_ee94a9aa._.js +1 -1
  309. package/web/.next/server/chunks/ssr/src_presentation_web_ee94a9aa._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/src_presentation_web_f0fcfdff._.js +1 -1
  311. package/web/.next/server/chunks/ssr/src_presentation_web_f0fcfdff._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/src_presentation_web_f17e8516._.js +1 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web_f17e8516._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/src_presentation_web_f7180fec._.js +1 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_f7180fec._.js.map +1 -1
  316. package/web/.next/server/pages/500.html +2 -2
  317. package/web/.next/server/server-reference-manifest.js +1 -1
  318. package/web/.next/server/server-reference-manifest.json +111 -111
  319. package/web/.next/static/chunks/{5faa828877b1e669.js → 03dda23205877d8b.js} +1 -1
  320. package/web/.next/static/chunks/{4bf4f333302e24a4.js → 054e3a5f5ff4db71.js} +1 -1
  321. package/web/.next/static/chunks/{a868014dbe1b4e42.js → 06e58041911c290b.js} +1 -1
  322. package/web/.next/static/chunks/{b5ff852fee23795d.js → 089ef5b749d79ebd.js} +1 -1
  323. package/web/.next/static/chunks/{1a093b13a9d6952e.js → 0d106010c498c198.js} +2 -2
  324. package/web/.next/static/chunks/193e5a0540757f5e.js +1 -0
  325. package/web/.next/static/chunks/{9abc3e68af98e636.js → 25111a2f2597f500.js} +1 -1
  326. package/web/.next/static/chunks/285e724d07901ef6.js +1 -0
  327. package/web/.next/static/chunks/{3c396f63ebefe875.js → 2b2bfc0465b18a7d.js} +1 -1
  328. package/web/.next/static/chunks/{6af99a08ccacdbce.js → 2b436562e69d2827.js} +1 -1
  329. package/web/.next/static/chunks/{8c96a835b3b0dc44.js → 2e3844d0ac487ac7.js} +1 -1
  330. package/web/.next/static/chunks/325859b8a9482427.js +1 -0
  331. package/web/.next/static/chunks/{2773e7b2587bc9cc.js → 44ab458ceb89d85d.js} +1 -1
  332. package/web/.next/static/chunks/4fdf36904f5421a6.js +1 -0
  333. package/web/.next/static/chunks/59004c65d552581c.js +1 -0
  334. package/web/.next/static/chunks/{0edcdc8a2dd06b7a.js → 5c4837e88a3431b8.js} +1 -1
  335. package/web/.next/static/chunks/{a131f868af7f1f7c.js → 74cdd562eb663f72.js} +1 -1
  336. package/web/.next/static/chunks/{0315591c972888a6.js → 7670d76d4ee743e6.js} +1 -1
  337. package/web/.next/static/chunks/{02d88da9fd656fcd.js → 83fc784ce05a701e.js} +1 -1
  338. package/web/.next/static/chunks/{460cedaa85c821e7.js → 8dd4fdd20b103a66.js} +1 -1
  339. package/web/.next/static/chunks/9336bdc7fc319282.js +1 -0
  340. package/web/.next/static/chunks/9d285565922b2de7.js +1 -0
  341. package/web/.next/static/chunks/{45eeca36eabbed23.js → 9f7f2a11937d87eb.js} +1 -1
  342. package/web/.next/static/chunks/{c3931fdbae836be6.js → a7c7bcfb6f7696a3.js} +1 -1
  343. package/web/.next/static/chunks/{9f7985e2a73929a2.js → a8f57d2a12849f32.js} +1 -1
  344. package/web/.next/static/chunks/{0e1c933065a1100a.js → abe98954ccdf29db.js} +1 -1
  345. package/web/.next/static/chunks/{4378715fa2b5e7de.js → b05808da85e8b34c.js} +1 -1
  346. package/web/.next/static/chunks/{b5dc7979d66caa38.js → b5f83e5e1dad23d5.js} +1 -1
  347. package/web/.next/static/chunks/{6d2074fa3453d333.js → b8293a56f257e5a2.js} +1 -1
  348. package/web/.next/static/chunks/{bc5b87e4068ba11d.js → c61c5e97c76dc733.js} +1 -1
  349. package/web/.next/static/chunks/c6b411bf31744ca7.js +1 -0
  350. package/web/.next/static/chunks/{bdaa907bf3d1d932.js → c732d6cc4c5e4343.js} +1 -1
  351. package/web/.next/static/chunks/{25a200f055ae5cba.js → d214d6a670f48d79.js} +1 -1
  352. package/web/.next/static/chunks/{6901861cb53ab483.js → d7b17a93a26e97c8.js} +1 -1
  353. package/web/.next/static/chunks/{a0325f77bbccc63d.js → d8f14fac959a6bd0.js} +1 -1
  354. package/web/.next/static/chunks/{24ea54516dc249c0.js → d98912f5b6cf4938.js} +1 -1
  355. package/web/.next/static/chunks/{21500b3fe3754296.js → df79667c16344317.js} +1 -1
  356. package/web/.next/static/chunks/{05e8df10619fb980.js → ec8f19328ad1ecd4.js} +1 -1
  357. package/web/.next/static/chunks/{e6e6ba783b2e4d14.js → f0157331838ac962.js} +1 -1
  358. package/web/.next/static/chunks/{c687ed21b9518d73.js → f757d865fae71faf.js} +1 -1
  359. package/web/.next/static/chunks/fb3cbb7f575a7128.js +1 -0
  360. package/web/.next/server/chunks/ssr/[root-of-the-server]__52ca7f88._.js +0 -3
  361. package/web/.next/static/chunks/03d7b81c2554d52f.js +0 -1
  362. package/web/.next/static/chunks/15acdaaea57bb459.js +0 -1
  363. package/web/.next/static/chunks/39fe1c1397d5483b.js +0 -1
  364. package/web/.next/static/chunks/495883829026f13f.js +0 -1
  365. package/web/.next/static/chunks/4b3a4f416a6eb1ac.js +0 -1
  366. package/web/.next/static/chunks/4b4160f36cf2a3d6.js +0 -1
  367. package/web/.next/static/chunks/7269537b2188650d.js +0 -1
  368. package/web/.next/static/chunks/b1534b2f3d814fef.js +0 -1
  369. package/web/.next/static/chunks/f6dc1ba364203bb2.js +0 -1
  370. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_buildManifest.js +0 -0
  371. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_clientMiddlewareManifest.json +0 -0
  372. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/data%3Af6cd2a%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/projects/%5Bslug%5D/items/%5BitemId%5D/work-item-detail-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3Ab93807%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Af28d10%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/pm/relations/add-relation-dialog.tsx","../../../../../../../src/presentation/web/components/pm/relations/work-item-relations-panel.tsx","../../../../../../../src/presentation/web/components/pm/sub-items/sub-items-section.tsx","../../../../../../../src/presentation/web/app/actions/data%3A5dc914%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/pm/attachments/attachment-list.tsx","../../../../../../../src/presentation/web/app/actions/data%3Aece8e4%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A000777%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/pm/time-entries/time-entry-list.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/link-2.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/upload.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"4033c4021394916e42cdeece43333b1a1a531cd15a\":\"listWorkItemRelations\"},\"src/presentation/web/app/actions/list-work-item-relations.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4033c4021394916e42cdeece43333b1a1a531cd15a\",callServer,void 0,findSourceMapURL,\"listWorkItemRelations\");export{$$RSC_SERVER_ACTION_0 as listWorkItemRelations};","'use client';\n\nimport { useMemo } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { ArrowLeft } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport type {\n PmProject,\n WorkItem,\n WorkItemState,\n PmAttachment,\n TimeEntry,\n} from '@shepai/core/domain/generated/output';\nimport type { WorkItemRelation } from '@shepai/core/application/ports/output/repositories/work-item-relation-repository.interface';\nimport { WorkItemRelationsPanel } from '@/components/pm/relations/work-item-relations-panel';\nimport { SubItemsSection } from '@/components/pm/sub-items/sub-items-section';\nimport { AttachmentList } from '@/components/pm/attachments/attachment-list';\nimport { TimeEntryList } from '@/components/pm/time-entries/time-entry-list';\n\nconst PRIORITY_COLORS: Record<string, string> = {\n Urgent: 'bg-red-500/10 text-red-500',\n High: 'bg-orange-500/10 text-orange-500',\n Medium: 'bg-yellow-500/10 text-yellow-500',\n Low: 'bg-blue-500/10 text-blue-500',\n None: 'bg-muted text-muted-foreground',\n};\n\nexport interface WorkItemDetailClientProps {\n project: PmProject;\n workItem: WorkItem;\n allWorkItems: WorkItem[];\n states: WorkItemState[];\n relations: WorkItemRelation[];\n attachments: PmAttachment[];\n timeEntries: TimeEntry[];\n totalMinutes: number;\n className?: string;\n}\n\nexport function WorkItemDetailClient({\n project,\n workItem,\n allWorkItems,\n states,\n relations,\n attachments,\n timeEntries,\n totalMinutes,\n className,\n}: WorkItemDetailClientProps) {\n const router = useRouter();\n const stateMap = new Map(states.map((s) => [s.id, s]));\n const workItemsMap = useMemo(\n () => new Map(allWorkItems.map((wi) => [wi.id, wi])),\n [allWorkItems]\n );\n const state = stateMap.get(workItem.stateId);\n const identifier = `${project.identifierPrefix}-${workItem.sequenceId}`;\n\n const handleSubItemClick = (child: WorkItem) => {\n router.push(`/projects/${project.slug}/items/${child.id}`);\n };\n\n return (\n <div data-testid=\"work-item-detail\" className={cn('space-y-6', className)}>\n {/* Header */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n onClick={() => router.push(`/projects/${project.slug}`)}\n data-testid=\"back-to-project\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-muted-foreground font-mono text-xs\">{identifier}</span>\n {state ? (\n <Badge variant=\"outline\" className=\"text-[10px]\">\n <span\n className=\"mr-1 inline-block h-2 w-2 rounded-full\"\n style={{ backgroundColor: state.color }}\n />\n {state.name}\n </Badge>\n ) : null}\n {workItem.priority && workItem.priority !== 'None' ? (\n <Badge\n variant=\"secondary\"\n className={cn('text-[10px]', PRIORITY_COLORS[workItem.priority])}\n >\n {workItem.priority}\n </Badge>\n ) : null}\n </div>\n <h1 className=\"text-lg font-bold tracking-tight\">{workItem.title}</h1>\n {workItem.description ? (\n <p className=\"text-muted-foreground text-sm\">{workItem.description}</p>\n ) : null}\n </div>\n\n {/* Details grid */}\n <div className=\"grid gap-4 md:grid-cols-3\">\n <div className=\"space-y-1\">\n <span className=\"text-muted-foreground text-[10px] font-medium uppercase\">\n Start Date\n </span>\n <p className=\"text-xs\">\n {workItem.startDate ? new Date(workItem.startDate).toLocaleDateString() : '—'}\n </p>\n </div>\n <div className=\"space-y-1\">\n <span className=\"text-muted-foreground text-[10px] font-medium uppercase\">Due Date</span>\n <p className=\"text-xs\">\n {workItem.dueDate ? new Date(workItem.dueDate).toLocaleDateString() : '—'}\n </p>\n </div>\n <div className=\"space-y-1\">\n <span className=\"text-muted-foreground text-[10px] font-medium uppercase\">Estimate</span>\n <p className=\"text-xs\">{workItem.estimateValue ?? '—'}</p>\n </div>\n </div>\n\n <hr className=\"border-border\" />\n\n {/* Sub-items */}\n <SubItemsSection\n workItem={workItem}\n allWorkItems={allWorkItems}\n states={states}\n projectPrefix={project.identifierPrefix}\n projectId={project.id}\n onSubItemClick={handleSubItemClick}\n />\n\n <hr className=\"border-border\" />\n\n {/* Relations */}\n <WorkItemRelationsPanel\n workItemId={workItem.id}\n workItemsMap={workItemsMap}\n projectPrefix={project.identifierPrefix}\n initialRelations={relations}\n />\n\n <hr className=\"border-border\" />\n\n {/* Attachments */}\n <AttachmentList workItemId={workItem.id} attachments={attachments} />\n\n <hr className=\"border-border\" />\n\n {/* Time Tracking */}\n <TimeEntryList\n workItemId={workItem.id}\n timeEntries={timeEntries}\n totalMinutes={totalMinutes}\n />\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4071227318669ea1cb7748bed916e264b516fa38e0\":\"deleteWorkItemRelation\"},\"src/presentation/web/app/actions/delete-work-item-relation.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4071227318669ea1cb7748bed916e264b516fa38e0\",callServer,void 0,findSourceMapURL,\"deleteWorkItemRelation\");export{$$RSC_SERVER_ACTION_0 as deleteWorkItemRelation};","/* __next_internal_action_entry_do_not_use__ [{\"40218e7c2ef388cf2deda721d08cfcebd63684fc61\":\"createWorkItemRelation\"},\"src/presentation/web/app/actions/create-work-item-relation.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40218e7c2ef388cf2deda721d08cfcebd63684fc61\",callServer,void 0,findSourceMapURL,\"createWorkItemRelation\");export{$$RSC_SERVER_ACTION_0 as createWorkItemRelation};","'use client';\n\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { RelationType } from '@shepai/core/domain/generated/output';\nimport type { WorkItemRelation } from '@shepai/core/application/ports/output/repositories/work-item-relation-repository.interface';\nimport { createWorkItemRelation } from '@/app/actions/create-work-item-relation';\n\nconst RELATION_TYPE_OPTIONS: { value: string; label: string }[] = [\n { value: RelationType.Blocking, label: 'Blocking' },\n { value: RelationType.RelatesTo, label: 'Relates to' },\n { value: RelationType.Duplicate, label: 'Duplicate' },\n { value: RelationType.StartsBefore, label: 'Starts before' },\n { value: RelationType.FinishesBefore, label: 'Finishes before' },\n];\n\nexport interface AddRelationDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n sourceWorkItemId: string;\n onCreated: (relation: WorkItemRelation) => void;\n}\n\nexport function AddRelationDialog({\n open,\n onOpenChange,\n sourceWorkItemId,\n onCreated,\n}: AddRelationDialogProps) {\n const [relationType, setRelationType] = useState<string>(RelationType.RelatesTo);\n const [targetWorkItemId, setTargetWorkItemId] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n const handleSubmit = async () => {\n setError(null);\n if (!targetWorkItemId.trim()) {\n setError('Target work item ID is required');\n return;\n }\n setSubmitting(true);\n try {\n const result = await createWorkItemRelation({\n sourceWorkItemId,\n targetWorkItemId: targetWorkItemId.trim(),\n relationType,\n });\n if (result.error) {\n setError(result.error);\n } else if (result.relation) {\n onCreated(result.relation);\n setTargetWorkItemId('');\n setRelationType(RelationType.RelatesTo);\n }\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent data-testid=\"add-relation-dialog\">\n <DialogHeader>\n <DialogTitle>Add Relation</DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"relation-type\">Relation Type</Label>\n <Select value={relationType} onValueChange={setRelationType}>\n <SelectTrigger data-testid=\"relation-type-select\">\n <SelectValue placeholder=\"Select type\" />\n </SelectTrigger>\n <SelectContent>\n {RELATION_TYPE_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"target-work-item\">Target Work Item ID</Label>\n <Input\n id=\"target-work-item\"\n value={targetWorkItemId}\n onChange={(e) => setTargetWorkItemId(e.target.value)}\n placeholder=\"Enter work item ID or identifier\"\n data-testid=\"target-work-item-input\"\n />\n </div>\n {error ? (\n <p className=\"text-destructive text-xs\" data-testid=\"add-relation-error\">\n {error}\n </p>\n ) : null}\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={submitting}>\n Cancel\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={!targetWorkItemId.trim() || submitting}\n data-testid=\"add-relation-submit\"\n >\n {submitting ? 'Adding...' : 'Add Relation'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { Link2, X, Plus, Loader2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport type { WorkItemRelation } from '@shepai/core/application/ports/output/repositories/work-item-relation-repository.interface';\nimport type { WorkItem } from '@shepai/core/domain/generated/output';\nimport { RelationType } from '@shepai/core/domain/generated/output';\nimport { listWorkItemRelations } from '@/app/actions/list-work-item-relations';\nimport { deleteWorkItemRelation } from '@/app/actions/delete-work-item-relation';\nimport { AddRelationDialog } from './add-relation-dialog';\n\nconst RELATION_TYPE_LABELS: Record<string, string> = {\n [RelationType.Blocking]: 'Blocking',\n [RelationType.RelatesTo]: 'Relates to',\n [RelationType.Duplicate]: 'Duplicate of',\n [RelationType.StartsBefore]: 'Starts before',\n [RelationType.FinishesBefore]: 'Finishes before',\n};\n\nexport interface WorkItemRelationsPanelProps {\n workItemId: string;\n /** Map of work item ID to WorkItem for displaying linked item details */\n workItemsMap: Map<string, WorkItem>;\n /** Project prefix for displaying identifiers (e.g., 'FE') */\n projectPrefix: string;\n /** Optional pre-loaded relations to avoid an initial fetch */\n initialRelations?: WorkItemRelation[];\n className?: string;\n}\n\nexport function WorkItemRelationsPanel({\n workItemId,\n workItemsMap,\n projectPrefix,\n initialRelations,\n className,\n}: WorkItemRelationsPanelProps) {\n const [relations, setRelations] = useState<WorkItemRelation[]>(initialRelations ?? []);\n const [loading, setLoading] = useState(!initialRelations);\n const [error, setError] = useState<string | null>(null);\n const [showAddDialog, setShowAddDialog] = useState(false);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n\n const fetchRelations = useCallback(async () => {\n setLoading(true);\n setError(null);\n const result = await listWorkItemRelations(workItemId);\n if (result.error) {\n setError(result.error);\n } else if (result.relations) {\n setRelations(result.relations);\n }\n setLoading(false);\n }, [workItemId]);\n\n useEffect(() => {\n if (!initialRelations) {\n void fetchRelations();\n }\n }, [fetchRelations, initialRelations]);\n\n const handleDelete = async (relationId: string) => {\n setDeletingId(relationId);\n const result = await deleteWorkItemRelation(relationId);\n if (result.error) {\n setError(result.error);\n } else {\n setRelations((prev) => prev.filter((r) => r.id !== relationId));\n }\n setDeletingId(null);\n };\n\n const handleRelationCreated = (relation: WorkItemRelation) => {\n setRelations((prev) => [...prev, relation]);\n setShowAddDialog(false);\n };\n\n const grouped = groupRelationsByType(relations);\n\n const getLinkedItemIdentifier = (relation: WorkItemRelation): string => {\n const linkedId =\n relation.sourceWorkItemId === workItemId\n ? relation.targetWorkItemId\n : relation.sourceWorkItemId;\n const item = workItemsMap.get(linkedId);\n if (item) {\n return `${projectPrefix}-${item.sequenceId}`;\n }\n return linkedId.substring(0, 8);\n };\n\n const getLinkedItemTitle = (relation: WorkItemRelation): string => {\n const linkedId =\n relation.sourceWorkItemId === workItemId\n ? relation.targetWorkItemId\n : relation.sourceWorkItemId;\n const item = workItemsMap.get(linkedId);\n return item?.title ?? 'Unknown item';\n };\n\n return (\n <div data-testid=\"work-item-relations-panel\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Link2 className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">Relations</span>\n {relations.length > 0 && (\n <span className=\"text-muted-foreground text-[10px]\">{relations.length}</span>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-1.5 text-[10px]\"\n onClick={() => setShowAddDialog(true)}\n data-testid=\"add-relation-btn\"\n >\n <Plus className=\"mr-0.5 h-3 w-3\" />\n Add\n </Button>\n </div>\n\n {loading ? (\n <div className=\"flex items-center justify-center py-4\" data-testid=\"relations-loading\">\n <Loader2 className=\"text-muted-foreground h-4 w-4 animate-spin\" />\n </div>\n ) : null}\n\n {error ? (\n <p className=\"text-destructive text-[10px]\" data-testid=\"relations-error\">\n {error}\n </p>\n ) : null}\n\n {!loading && relations.length === 0 && !error && (\n <p\n className=\"text-muted-foreground py-2 text-center text-[10px]\"\n data-testid=\"relations-empty\"\n >\n No relations yet.\n </p>\n )}\n\n {!loading && grouped.length > 0 && (\n <div className=\"space-y-2\" data-testid=\"relations-list\">\n {grouped.map(({ type, items }) => (\n <div key={type} data-testid={`relation-group-${type}`}>\n <span className=\"text-muted-foreground mb-1 block text-[10px] font-medium\">\n {RELATION_TYPE_LABELS[type] ?? type}\n </span>\n <div className=\"space-y-1\">\n {items.map((relation) => (\n <div\n key={relation.id}\n data-testid={`relation-item-${relation.id}`}\n className=\"hover:bg-accent/50 flex items-center gap-2 rounded px-2 py-1 transition-colors\"\n >\n <Badge variant=\"outline\" className=\"shrink-0 font-mono text-[10px]\">\n {getLinkedItemIdentifier(relation)}\n </Badge>\n <span className=\"min-w-0 flex-1 truncate text-[11px]\">\n {getLinkedItemTitle(relation)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 w-5 shrink-0 p-0\"\n onClick={() => handleDelete(relation.id)}\n disabled={deletingId === relation.id}\n data-testid={`delete-relation-${relation.id}`}\n >\n {deletingId === relation.id ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n <X className=\"h-3 w-3\" />\n )}\n </Button>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n <AddRelationDialog\n open={showAddDialog}\n onOpenChange={setShowAddDialog}\n sourceWorkItemId={workItemId}\n onCreated={handleRelationCreated}\n />\n </div>\n );\n}\n\ninterface GroupedRelations {\n type: string;\n items: WorkItemRelation[];\n}\n\nfunction groupRelationsByType(relations: WorkItemRelation[]): GroupedRelations[] {\n const map = new Map<string, WorkItemRelation[]>();\n for (const relation of relations) {\n const arr = map.get(relation.relationType) ?? [];\n arr.push(relation);\n map.set(relation.relationType, arr);\n }\n return Array.from(map.entries()).map(([type, items]) => ({ type, items }));\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Plus, Layers, AlertTriangle } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport type { WorkItem, WorkItemState } from '@shepai/core/domain/generated/output';\nimport { CreateWorkItemDialog } from '@/components/features/projects/create-work-item-dialog';\n\nconst MAX_DEPTH = 3;\n\nconst PRIORITY_COLORS: Record<string, string> = {\n Urgent: 'bg-red-500/10 text-red-500',\n High: 'bg-orange-500/10 text-orange-500',\n Medium: 'bg-yellow-500/10 text-yellow-500',\n Low: 'bg-blue-500/10 text-blue-500',\n None: 'bg-muted text-muted-foreground',\n};\n\nexport interface SubItemsSectionProps {\n /** The current work item (parent) */\n workItem: WorkItem;\n /** All work items in the project (used to find children) */\n allWorkItems: WorkItem[];\n /** Available workflow states for display */\n states: WorkItemState[];\n /** Project prefix for identifiers (e.g., 'FE') */\n projectPrefix: string;\n /** Project ID for creating new sub-items */\n projectId: string;\n /** Current nesting depth (0-based) */\n currentDepth?: number;\n /** Callback when a sub-item is clicked */\n onSubItemClick?: (workItem: WorkItem) => void;\n className?: string;\n}\n\nexport function SubItemsSection({\n workItem,\n allWorkItems,\n states,\n projectPrefix,\n projectId,\n currentDepth = 0,\n onSubItemClick,\n className,\n}: SubItemsSectionProps) {\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [localItems, setLocalItems] = useState<WorkItem[]>([]);\n\n const stateMap = new Map(states.map((s) => [s.id, s]));\n\n const childItems = [\n ...allWorkItems.filter((wi) => wi.parentId === workItem.id),\n ...localItems.filter((li) => !allWorkItems.some((wi) => wi.id === li.id)),\n ];\n\n const atMaxDepth = currentDepth >= MAX_DEPTH - 1;\n\n const handleCreated = (newItem: WorkItem) => {\n setLocalItems((prev) => [...prev, newItem]);\n setShowCreateDialog(false);\n };\n\n return (\n <div data-testid=\"sub-items-section\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Layers className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">Sub-items</span>\n {childItems.length > 0 && (\n <span className=\"text-muted-foreground text-[10px]\">{childItems.length}</span>\n )}\n </div>\n {!atMaxDepth && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-1.5 text-[10px]\"\n onClick={() => setShowCreateDialog(true)}\n data-testid=\"add-sub-item-btn\"\n >\n <Plus className=\"mr-0.5 h-3 w-3\" />\n Add\n </Button>\n )}\n </div>\n\n {atMaxDepth ? (\n <div\n className=\"flex items-center gap-1.5 rounded bg-yellow-500/10 px-2 py-1.5\"\n data-testid=\"max-depth-warning\"\n >\n <AlertTriangle className=\"h-3 w-3 shrink-0 text-yellow-500\" />\n <span className=\"text-[10px] text-yellow-600 dark:text-yellow-400\">\n Maximum nesting depth reached ({MAX_DEPTH} levels). Cannot add sub-items here.\n </span>\n </div>\n ) : null}\n\n {childItems.length === 0 && !atMaxDepth && (\n <p\n className=\"text-muted-foreground py-2 text-center text-[10px]\"\n data-testid=\"sub-items-empty\"\n >\n No sub-items yet.\n </p>\n )}\n\n {childItems.length > 0 && (\n <div className=\"divide-y rounded-lg border\" data-testid=\"sub-items-list\">\n {childItems.map((child) => {\n const state = stateMap.get(child.stateId);\n const identifier = `${projectPrefix}-${child.sequenceId}`;\n return (\n <div\n key={child.id}\n data-testid={`sub-item-${identifier}`}\n className=\"hover:bg-accent/50 flex cursor-pointer items-center gap-3 px-3 py-2 transition-colors\"\n onClick={() => onSubItemClick?.(child)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onSubItemClick?.(child);\n }\n }}\n >\n <span className=\"text-muted-foreground shrink-0 font-mono text-[10px]\">\n {identifier}\n </span>\n {state ? (\n <span\n className=\"h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: state.color }}\n title={state.name}\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate text-xs\">{child.title}</span>\n {child.priority && child.priority !== 'None' ? (\n <Badge\n variant=\"secondary\"\n className={`shrink-0 text-[10px] ${PRIORITY_COLORS[child.priority] ?? ''}`}\n >\n {child.priority}\n </Badge>\n ) : null}\n </div>\n );\n })}\n </div>\n )}\n\n {!atMaxDepth && (\n <CreateWorkItemDialog\n open={showCreateDialog}\n onOpenChange={setShowCreateDialog}\n projectId={projectId}\n states={states}\n onCreated={handleCreated}\n parentId={workItem.id}\n />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4044cd38a2292132e1ee473b049c8f1f3f1c6e5546\":\"deleteAttachment\"},\"src/presentation/web/app/actions/manage-attachments.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"4044cd38a2292132e1ee473b049c8f1f3f1c6e5546\",callServer,void 0,findSourceMapURL,\"deleteAttachment\");export{$$RSC_SERVER_ACTION_1 as deleteAttachment};","'use client';\n\nimport { useState, useCallback, useRef } from 'react';\nimport { Paperclip, Trash2, Download, Upload, FileIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport type { PmAttachment } from '@shepai/core/domain/generated/output';\nimport { deleteAttachment } from '@/app/actions/manage-attachments';\n\nexport interface AttachmentListProps {\n workItemId: string;\n attachments: PmAttachment[];\n className?: string;\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${String(bytes)} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function AttachmentList({\n workItemId,\n attachments: initialAttachments,\n className,\n}: AttachmentListProps) {\n const [attachments, setAttachments] = useState<PmAttachment[]>(initialAttachments);\n const [uploading, setUploading] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleUpload = useCallback(\n async (files: FileList | null) => {\n if (!files || files.length === 0) return;\n setUploading(true);\n\n try {\n for (const file of Array.from(files)) {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('workItemId', workItemId);\n\n const res = await fetch('/api/pm-attachments/upload', {\n method: 'POST',\n body: formData,\n });\n\n if (res.ok) {\n const data = (await res.json()) as {\n id: string;\n filename: string;\n mimeType: string;\n fileSize: number;\n createdAt: string;\n };\n const newAttachment: PmAttachment = {\n id: data.id,\n workItemId,\n filename: data.filename,\n mimeType: data.mimeType,\n fileSize: data.fileSize,\n storagePath: '',\n createdAt: new Date(data.createdAt),\n updatedAt: new Date(data.createdAt),\n deletedAt: undefined,\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n }\n } finally {\n setUploading(false);\n if (fileInputRef.current) fileInputRef.current.value = '';\n }\n },\n [workItemId]\n );\n\n const handleDelete = useCallback(async (attachmentId: string) => {\n const result = await deleteAttachment(attachmentId);\n if (!result.error) {\n setAttachments((prev) => prev.filter((a) => a.id !== attachmentId));\n }\n }, []);\n\n const handleDownload = useCallback((attachmentId: string) => {\n window.open(`/api/pm-attachments/download?id=${attachmentId}`, '_blank');\n }, []);\n\n return (\n <div data-testid=\"attachment-list\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Paperclip className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">\n Attachments {attachments.length > 0 ? `(${String(attachments.length)})` : ''}\n </span>\n </div>\n <div>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => handleUpload(e.target.files)}\n data-testid=\"file-input\"\n />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 text-xs\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n data-testid=\"upload-btn\"\n >\n <Upload className=\"h-3 w-3\" />\n {uploading ? 'Uploading...' : 'Upload'}\n </Button>\n </div>\n </div>\n\n {attachments.length === 0 ? (\n <p className=\"text-muted-foreground text-[10px]\">No attachments</p>\n ) : (\n <div className=\"space-y-1\">\n {attachments.map((att) => (\n <div\n key={att.id}\n data-testid={`attachment-${att.id}`}\n className=\"group hover:bg-accent/50 flex items-center gap-2 rounded-sm px-2 py-1 text-xs\"\n >\n <FileIcon className=\"text-muted-foreground h-3.5 w-3.5 shrink-0\" />\n <span className=\"flex-1 truncate\">{att.filename}</span>\n <span className=\"text-muted-foreground text-[10px]\">\n {formatFileSize(att.fileSize)}\n </span>\n <div className=\"hidden gap-0.5 group-hover:flex\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 w-5 p-0\"\n onClick={() => handleDownload(att.id)}\n title=\"Download\"\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive h-5 w-5 p-0\"\n onClick={() => handleDelete(att.id)}\n title=\"Delete\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"70f5c675911d985603f043cc8c7ef8decc099c297f\":\"logTimeEntry\"},\"src/presentation/web/app/actions/manage-time-entries.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"70f5c675911d985603f043cc8c7ef8decc099c297f\",callServer,void 0,findSourceMapURL,\"logTimeEntry\");export{$$RSC_SERVER_ACTION_0 as logTimeEntry};","/* __next_internal_action_entry_do_not_use__ [{\"40b9ee0a9c86c568adb39bc632b4684921e073da3e\":\"deleteTimeEntry\"},\"src/presentation/web/app/actions/manage-time-entries.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"40b9ee0a9c86c568adb39bc632b4684921e073da3e\",callServer,void 0,findSourceMapURL,\"deleteTimeEntry\");export{$$RSC_SERVER_ACTION_2 as deleteTimeEntry};","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Clock, Plus, Trash2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport type { TimeEntry } from '@shepai/core/domain/generated/output';\nimport { logTimeEntry, deleteTimeEntry } from '@/app/actions/manage-time-entries';\n\nexport interface TimeEntryListProps {\n workItemId: string;\n timeEntries: TimeEntry[];\n totalMinutes: number;\n className?: string;\n}\n\nfunction formatDuration(minutes: number): string {\n if (minutes < 60) return `${String(minutes)}m`;\n const h = Math.floor(minutes / 60);\n const m = minutes % 60;\n return m > 0 ? `${String(h)}h ${String(m)}m` : `${String(h)}h`;\n}\n\nfunction formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function TimeEntryList({\n workItemId,\n timeEntries: initialEntries,\n totalMinutes: initialTotal,\n className,\n}: TimeEntryListProps) {\n const [entries, setEntries] = useState<TimeEntry[]>(initialEntries);\n const [totalMinutes, setTotalMinutes] = useState(initialTotal);\n const [showForm, setShowForm] = useState(false);\n const [hours, setHours] = useState('');\n const [minutes, setMinutes] = useState('');\n const [note, setNote] = useState('');\n const [saving, setSaving] = useState(false);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n const h = parseInt(hours, 10) || 0;\n const m = parseInt(minutes, 10) || 0;\n const total = h * 60 + m;\n if (total <= 0) return;\n\n setSaving(true);\n try {\n const result = await logTimeEntry(workItemId, total, note || undefined);\n if (result.timeEntry) {\n setEntries((prev) => [result.timeEntry!, ...prev]);\n setTotalMinutes((prev) => prev + total);\n setHours('');\n setMinutes('');\n setNote('');\n setShowForm(false);\n }\n } finally {\n setSaving(false);\n }\n },\n [workItemId, hours, minutes, note]\n );\n\n const handleDelete = useCallback(async (entryId: string, duration: number) => {\n const result = await deleteTimeEntry(entryId);\n if (!result.error) {\n setEntries((prev) => prev.filter((e) => e.id !== entryId));\n setTotalMinutes((prev) => prev - duration);\n }\n }, []);\n\n return (\n <div data-testid=\"time-entry-list\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Clock className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">Time Logged</span>\n {totalMinutes > 0 ? (\n <span className=\"text-muted-foreground text-[10px]\">\n ({formatDuration(totalMinutes)} total)\n </span>\n ) : null}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 text-xs\"\n onClick={() => setShowForm(!showForm)}\n data-testid=\"log-time-btn\"\n >\n <Plus className=\"h-3 w-3\" />\n Log Time\n </Button>\n </div>\n\n {showForm ? (\n <form\n onSubmit={handleSubmit}\n className=\"bg-muted/50 space-y-2 rounded-md border p-2\"\n data-testid=\"log-time-form\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min=\"0\"\n placeholder=\"0\"\n value={hours}\n onChange={(e) => setHours(e.target.value)}\n className=\"h-7 w-14 text-xs\"\n data-testid=\"hours-input\"\n />\n <span className=\"text-muted-foreground text-xs\">h</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min=\"0\"\n max=\"59\"\n placeholder=\"0\"\n value={minutes}\n onChange={(e) => setMinutes(e.target.value)}\n className=\"h-7 w-14 text-xs\"\n data-testid=\"minutes-input\"\n />\n <span className=\"text-muted-foreground text-xs\">m</span>\n </div>\n </div>\n <Input\n placeholder=\"Note (optional)\"\n value={note}\n onChange={(e) => setNote(e.target.value)}\n className=\"h-7 text-xs\"\n data-testid=\"note-input\"\n />\n <div className=\"flex justify-end gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 text-xs\"\n onClick={() => setShowForm(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n size=\"sm\"\n className=\"h-6 text-xs\"\n disabled={saving}\n data-testid=\"save-time-btn\"\n >\n {saving ? 'Saving...' : 'Save'}\n </Button>\n </div>\n </form>\n ) : null}\n\n {entries.length === 0 ? (\n <p className=\"text-muted-foreground text-[10px]\">No time logged</p>\n ) : (\n <div className=\"space-y-1\">\n {entries.map((entry) => (\n <div\n key={entry.id}\n data-testid={`time-entry-${entry.id}`}\n className=\"group hover:bg-accent/50 flex items-center gap-2 rounded-sm px-2 py-1 text-xs\"\n >\n <Clock className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"font-medium\">{formatDuration(entry.durationMinutes)}</span>\n {entry.note ? (\n <span className=\"text-muted-foreground flex-1 truncate\">{entry.note}</span>\n ) : (\n <span className=\"flex-1\" />\n )}\n <span className=\"text-muted-foreground text-[10px]\">\n {formatDate(entry.loggedAt)}\n </span>\n <div className=\"hidden group-hover:flex\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive h-5 w-5 p-0\"\n onClick={() => handleDelete(entry.id, entry.durationMinutes)}\n title=\"Delete\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7h2', key: '8i5ue5' }],\n ['path', { d: 'M15 7h2a5 5 0 1 1 0 10h-2', key: '1b9ql8' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12', key: '1jonct' }],\n];\n\n/**\n * @component @name Link2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAxN0g3QTUgNSAwIDAgMSA3IDdoMiIgLz4KICA8cGF0aCBkPSJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIiAvPgogIDxsaW5lIHgxPSI4IiB4Mj0iMTYiIHkxPSIxMiIgeTI9IjEyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/link-2\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 Link2 = createLucideIcon('link-2', __iconNode);\n\nexport default Link2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 3v12', key: '1x0j5s' }],\n ['path', { d: 'm17 8-5-5-5 5', key: '7q97r8' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n];\n\n/**\n * @component @name Upload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgM3YxMiIgLz4KICA8cGF0aCBkPSJtMTcgOC01LTUtNSA1IiAvPgogIDxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/upload\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 Upload = createLucideIcon('upload', __iconNode);\n\nexport default Upload;\n"],"names":[],"mappings":"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","ignoreList":[12,13]}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/data%3Afbfb9c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/projects/%5Bslug%5D/items/%5BitemId%5D/work-item-detail-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3A396ec6%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Adee2db%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/pm/relations/add-relation-dialog.tsx","../../../../../../../src/presentation/web/components/pm/relations/work-item-relations-panel.tsx","../../../../../../../src/presentation/web/components/pm/sub-items/sub-items-section.tsx","../../../../../../../src/presentation/web/app/actions/data%3A2f6cfd%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/pm/attachments/attachment-list.tsx","../../../../../../../src/presentation/web/app/actions/data%3A79a818%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A44916c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/pm/time-entries/time-entry-list.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/link-2.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/upload.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"40ebec3541c18e87efe1c82ca3ccb47ad8aac1bc72\":\"listWorkItemRelations\"},\"src/presentation/web/app/actions/list-work-item-relations.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40ebec3541c18e87efe1c82ca3ccb47ad8aac1bc72\",callServer,void 0,findSourceMapURL,\"listWorkItemRelations\");export{$$RSC_SERVER_ACTION_0 as listWorkItemRelations};","'use client';\n\nimport { useMemo } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { ArrowLeft } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport type {\n PmProject,\n WorkItem,\n WorkItemState,\n PmAttachment,\n TimeEntry,\n} from '@shepai/core/domain/generated/output';\nimport type { WorkItemRelation } from '@shepai/core/application/ports/output/repositories/work-item-relation-repository.interface';\nimport { WorkItemRelationsPanel } from '@/components/pm/relations/work-item-relations-panel';\nimport { SubItemsSection } from '@/components/pm/sub-items/sub-items-section';\nimport { AttachmentList } from '@/components/pm/attachments/attachment-list';\nimport { TimeEntryList } from '@/components/pm/time-entries/time-entry-list';\n\nconst PRIORITY_COLORS: Record<string, string> = {\n Urgent: 'bg-red-500/10 text-red-500',\n High: 'bg-orange-500/10 text-orange-500',\n Medium: 'bg-yellow-500/10 text-yellow-500',\n Low: 'bg-blue-500/10 text-blue-500',\n None: 'bg-muted text-muted-foreground',\n};\n\nexport interface WorkItemDetailClientProps {\n project: PmProject;\n workItem: WorkItem;\n allWorkItems: WorkItem[];\n states: WorkItemState[];\n relations: WorkItemRelation[];\n attachments: PmAttachment[];\n timeEntries: TimeEntry[];\n totalMinutes: number;\n className?: string;\n}\n\nexport function WorkItemDetailClient({\n project,\n workItem,\n allWorkItems,\n states,\n relations,\n attachments,\n timeEntries,\n totalMinutes,\n className,\n}: WorkItemDetailClientProps) {\n const router = useRouter();\n const stateMap = new Map(states.map((s) => [s.id, s]));\n const workItemsMap = useMemo(\n () => new Map(allWorkItems.map((wi) => [wi.id, wi])),\n [allWorkItems]\n );\n const state = stateMap.get(workItem.stateId);\n const identifier = `${project.identifierPrefix}-${workItem.sequenceId}`;\n\n const handleSubItemClick = (child: WorkItem) => {\n router.push(`/projects/${project.slug}/items/${child.id}`);\n };\n\n return (\n <div data-testid=\"work-item-detail\" className={cn('space-y-6', className)}>\n {/* Header */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n onClick={() => router.push(`/projects/${project.slug}`)}\n data-testid=\"back-to-project\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-muted-foreground font-mono text-xs\">{identifier}</span>\n {state ? (\n <Badge variant=\"outline\" className=\"text-[10px]\">\n <span\n className=\"mr-1 inline-block h-2 w-2 rounded-full\"\n style={{ backgroundColor: state.color }}\n />\n {state.name}\n </Badge>\n ) : null}\n {workItem.priority && workItem.priority !== 'None' ? (\n <Badge\n variant=\"secondary\"\n className={cn('text-[10px]', PRIORITY_COLORS[workItem.priority])}\n >\n {workItem.priority}\n </Badge>\n ) : null}\n </div>\n <h1 className=\"text-lg font-bold tracking-tight\">{workItem.title}</h1>\n {workItem.description ? (\n <p className=\"text-muted-foreground text-sm\">{workItem.description}</p>\n ) : null}\n </div>\n\n {/* Details grid */}\n <div className=\"grid gap-4 md:grid-cols-3\">\n <div className=\"space-y-1\">\n <span className=\"text-muted-foreground text-[10px] font-medium uppercase\">\n Start Date\n </span>\n <p className=\"text-xs\">\n {workItem.startDate ? new Date(workItem.startDate).toLocaleDateString() : '—'}\n </p>\n </div>\n <div className=\"space-y-1\">\n <span className=\"text-muted-foreground text-[10px] font-medium uppercase\">Due Date</span>\n <p className=\"text-xs\">\n {workItem.dueDate ? new Date(workItem.dueDate).toLocaleDateString() : '—'}\n </p>\n </div>\n <div className=\"space-y-1\">\n <span className=\"text-muted-foreground text-[10px] font-medium uppercase\">Estimate</span>\n <p className=\"text-xs\">{workItem.estimateValue ?? '—'}</p>\n </div>\n </div>\n\n <hr className=\"border-border\" />\n\n {/* Sub-items */}\n <SubItemsSection\n workItem={workItem}\n allWorkItems={allWorkItems}\n states={states}\n projectPrefix={project.identifierPrefix}\n projectId={project.id}\n onSubItemClick={handleSubItemClick}\n />\n\n <hr className=\"border-border\" />\n\n {/* Relations */}\n <WorkItemRelationsPanel\n workItemId={workItem.id}\n workItemsMap={workItemsMap}\n projectPrefix={project.identifierPrefix}\n initialRelations={relations}\n />\n\n <hr className=\"border-border\" />\n\n {/* Attachments */}\n <AttachmentList workItemId={workItem.id} attachments={attachments} />\n\n <hr className=\"border-border\" />\n\n {/* Time Tracking */}\n <TimeEntryList\n workItemId={workItem.id}\n timeEntries={timeEntries}\n totalMinutes={totalMinutes}\n />\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40cf75f6c631fa26f3ad2eee468c58dd22885dba94\":\"deleteWorkItemRelation\"},\"src/presentation/web/app/actions/delete-work-item-relation.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40cf75f6c631fa26f3ad2eee468c58dd22885dba94\",callServer,void 0,findSourceMapURL,\"deleteWorkItemRelation\");export{$$RSC_SERVER_ACTION_0 as deleteWorkItemRelation};","/* __next_internal_action_entry_do_not_use__ [{\"40d20b87f427c51c0ca41ae672d7da742c7198ab34\":\"createWorkItemRelation\"},\"src/presentation/web/app/actions/create-work-item-relation.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d20b87f427c51c0ca41ae672d7da742c7198ab34\",callServer,void 0,findSourceMapURL,\"createWorkItemRelation\");export{$$RSC_SERVER_ACTION_0 as createWorkItemRelation};","'use client';\n\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { RelationType } from '@shepai/core/domain/generated/output';\nimport type { WorkItemRelation } from '@shepai/core/application/ports/output/repositories/work-item-relation-repository.interface';\nimport { createWorkItemRelation } from '@/app/actions/create-work-item-relation';\n\nconst RELATION_TYPE_OPTIONS: { value: string; label: string }[] = [\n { value: RelationType.Blocking, label: 'Blocking' },\n { value: RelationType.RelatesTo, label: 'Relates to' },\n { value: RelationType.Duplicate, label: 'Duplicate' },\n { value: RelationType.StartsBefore, label: 'Starts before' },\n { value: RelationType.FinishesBefore, label: 'Finishes before' },\n];\n\nexport interface AddRelationDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n sourceWorkItemId: string;\n onCreated: (relation: WorkItemRelation) => void;\n}\n\nexport function AddRelationDialog({\n open,\n onOpenChange,\n sourceWorkItemId,\n onCreated,\n}: AddRelationDialogProps) {\n const [relationType, setRelationType] = useState<string>(RelationType.RelatesTo);\n const [targetWorkItemId, setTargetWorkItemId] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n const handleSubmit = async () => {\n setError(null);\n if (!targetWorkItemId.trim()) {\n setError('Target work item ID is required');\n return;\n }\n setSubmitting(true);\n try {\n const result = await createWorkItemRelation({\n sourceWorkItemId,\n targetWorkItemId: targetWorkItemId.trim(),\n relationType,\n });\n if (result.error) {\n setError(result.error);\n } else if (result.relation) {\n onCreated(result.relation);\n setTargetWorkItemId('');\n setRelationType(RelationType.RelatesTo);\n }\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent data-testid=\"add-relation-dialog\">\n <DialogHeader>\n <DialogTitle>Add Relation</DialogTitle>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"relation-type\">Relation Type</Label>\n <Select value={relationType} onValueChange={setRelationType}>\n <SelectTrigger data-testid=\"relation-type-select\">\n <SelectValue placeholder=\"Select type\" />\n </SelectTrigger>\n <SelectContent>\n {RELATION_TYPE_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"target-work-item\">Target Work Item ID</Label>\n <Input\n id=\"target-work-item\"\n value={targetWorkItemId}\n onChange={(e) => setTargetWorkItemId(e.target.value)}\n placeholder=\"Enter work item ID or identifier\"\n data-testid=\"target-work-item-input\"\n />\n </div>\n {error ? (\n <p className=\"text-destructive text-xs\" data-testid=\"add-relation-error\">\n {error}\n </p>\n ) : null}\n </div>\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={submitting}>\n Cancel\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={!targetWorkItemId.trim() || submitting}\n data-testid=\"add-relation-submit\"\n >\n {submitting ? 'Adding...' : 'Add Relation'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { Link2, X, Plus, Loader2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport type { WorkItemRelation } from '@shepai/core/application/ports/output/repositories/work-item-relation-repository.interface';\nimport type { WorkItem } from '@shepai/core/domain/generated/output';\nimport { RelationType } from '@shepai/core/domain/generated/output';\nimport { listWorkItemRelations } from '@/app/actions/list-work-item-relations';\nimport { deleteWorkItemRelation } from '@/app/actions/delete-work-item-relation';\nimport { AddRelationDialog } from './add-relation-dialog';\n\nconst RELATION_TYPE_LABELS: Record<string, string> = {\n [RelationType.Blocking]: 'Blocking',\n [RelationType.RelatesTo]: 'Relates to',\n [RelationType.Duplicate]: 'Duplicate of',\n [RelationType.StartsBefore]: 'Starts before',\n [RelationType.FinishesBefore]: 'Finishes before',\n};\n\nexport interface WorkItemRelationsPanelProps {\n workItemId: string;\n /** Map of work item ID to WorkItem for displaying linked item details */\n workItemsMap: Map<string, WorkItem>;\n /** Project prefix for displaying identifiers (e.g., 'FE') */\n projectPrefix: string;\n /** Optional pre-loaded relations to avoid an initial fetch */\n initialRelations?: WorkItemRelation[];\n className?: string;\n}\n\nexport function WorkItemRelationsPanel({\n workItemId,\n workItemsMap,\n projectPrefix,\n initialRelations,\n className,\n}: WorkItemRelationsPanelProps) {\n const [relations, setRelations] = useState<WorkItemRelation[]>(initialRelations ?? []);\n const [loading, setLoading] = useState(!initialRelations);\n const [error, setError] = useState<string | null>(null);\n const [showAddDialog, setShowAddDialog] = useState(false);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n\n const fetchRelations = useCallback(async () => {\n setLoading(true);\n setError(null);\n const result = await listWorkItemRelations(workItemId);\n if (result.error) {\n setError(result.error);\n } else if (result.relations) {\n setRelations(result.relations);\n }\n setLoading(false);\n }, [workItemId]);\n\n useEffect(() => {\n if (!initialRelations) {\n void fetchRelations();\n }\n }, [fetchRelations, initialRelations]);\n\n const handleDelete = async (relationId: string) => {\n setDeletingId(relationId);\n const result = await deleteWorkItemRelation(relationId);\n if (result.error) {\n setError(result.error);\n } else {\n setRelations((prev) => prev.filter((r) => r.id !== relationId));\n }\n setDeletingId(null);\n };\n\n const handleRelationCreated = (relation: WorkItemRelation) => {\n setRelations((prev) => [...prev, relation]);\n setShowAddDialog(false);\n };\n\n const grouped = groupRelationsByType(relations);\n\n const getLinkedItemIdentifier = (relation: WorkItemRelation): string => {\n const linkedId =\n relation.sourceWorkItemId === workItemId\n ? relation.targetWorkItemId\n : relation.sourceWorkItemId;\n const item = workItemsMap.get(linkedId);\n if (item) {\n return `${projectPrefix}-${item.sequenceId}`;\n }\n return linkedId.substring(0, 8);\n };\n\n const getLinkedItemTitle = (relation: WorkItemRelation): string => {\n const linkedId =\n relation.sourceWorkItemId === workItemId\n ? relation.targetWorkItemId\n : relation.sourceWorkItemId;\n const item = workItemsMap.get(linkedId);\n return item?.title ?? 'Unknown item';\n };\n\n return (\n <div data-testid=\"work-item-relations-panel\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Link2 className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">Relations</span>\n {relations.length > 0 && (\n <span className=\"text-muted-foreground text-[10px]\">{relations.length}</span>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-1.5 text-[10px]\"\n onClick={() => setShowAddDialog(true)}\n data-testid=\"add-relation-btn\"\n >\n <Plus className=\"mr-0.5 h-3 w-3\" />\n Add\n </Button>\n </div>\n\n {loading ? (\n <div className=\"flex items-center justify-center py-4\" data-testid=\"relations-loading\">\n <Loader2 className=\"text-muted-foreground h-4 w-4 animate-spin\" />\n </div>\n ) : null}\n\n {error ? (\n <p className=\"text-destructive text-[10px]\" data-testid=\"relations-error\">\n {error}\n </p>\n ) : null}\n\n {!loading && relations.length === 0 && !error && (\n <p\n className=\"text-muted-foreground py-2 text-center text-[10px]\"\n data-testid=\"relations-empty\"\n >\n No relations yet.\n </p>\n )}\n\n {!loading && grouped.length > 0 && (\n <div className=\"space-y-2\" data-testid=\"relations-list\">\n {grouped.map(({ type, items }) => (\n <div key={type} data-testid={`relation-group-${type}`}>\n <span className=\"text-muted-foreground mb-1 block text-[10px] font-medium\">\n {RELATION_TYPE_LABELS[type] ?? type}\n </span>\n <div className=\"space-y-1\">\n {items.map((relation) => (\n <div\n key={relation.id}\n data-testid={`relation-item-${relation.id}`}\n className=\"hover:bg-accent/50 flex items-center gap-2 rounded px-2 py-1 transition-colors\"\n >\n <Badge variant=\"outline\" className=\"shrink-0 font-mono text-[10px]\">\n {getLinkedItemIdentifier(relation)}\n </Badge>\n <span className=\"min-w-0 flex-1 truncate text-[11px]\">\n {getLinkedItemTitle(relation)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 w-5 shrink-0 p-0\"\n onClick={() => handleDelete(relation.id)}\n disabled={deletingId === relation.id}\n data-testid={`delete-relation-${relation.id}`}\n >\n {deletingId === relation.id ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n <X className=\"h-3 w-3\" />\n )}\n </Button>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n <AddRelationDialog\n open={showAddDialog}\n onOpenChange={setShowAddDialog}\n sourceWorkItemId={workItemId}\n onCreated={handleRelationCreated}\n />\n </div>\n );\n}\n\ninterface GroupedRelations {\n type: string;\n items: WorkItemRelation[];\n}\n\nfunction groupRelationsByType(relations: WorkItemRelation[]): GroupedRelations[] {\n const map = new Map<string, WorkItemRelation[]>();\n for (const relation of relations) {\n const arr = map.get(relation.relationType) ?? [];\n arr.push(relation);\n map.set(relation.relationType, arr);\n }\n return Array.from(map.entries()).map(([type, items]) => ({ type, items }));\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Plus, Layers, AlertTriangle } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport type { WorkItem, WorkItemState } from '@shepai/core/domain/generated/output';\nimport { CreateWorkItemDialog } from '@/components/features/projects/create-work-item-dialog';\n\nconst MAX_DEPTH = 3;\n\nconst PRIORITY_COLORS: Record<string, string> = {\n Urgent: 'bg-red-500/10 text-red-500',\n High: 'bg-orange-500/10 text-orange-500',\n Medium: 'bg-yellow-500/10 text-yellow-500',\n Low: 'bg-blue-500/10 text-blue-500',\n None: 'bg-muted text-muted-foreground',\n};\n\nexport interface SubItemsSectionProps {\n /** The current work item (parent) */\n workItem: WorkItem;\n /** All work items in the project (used to find children) */\n allWorkItems: WorkItem[];\n /** Available workflow states for display */\n states: WorkItemState[];\n /** Project prefix for identifiers (e.g., 'FE') */\n projectPrefix: string;\n /** Project ID for creating new sub-items */\n projectId: string;\n /** Current nesting depth (0-based) */\n currentDepth?: number;\n /** Callback when a sub-item is clicked */\n onSubItemClick?: (workItem: WorkItem) => void;\n className?: string;\n}\n\nexport function SubItemsSection({\n workItem,\n allWorkItems,\n states,\n projectPrefix,\n projectId,\n currentDepth = 0,\n onSubItemClick,\n className,\n}: SubItemsSectionProps) {\n const [showCreateDialog, setShowCreateDialog] = useState(false);\n const [localItems, setLocalItems] = useState<WorkItem[]>([]);\n\n const stateMap = new Map(states.map((s) => [s.id, s]));\n\n const childItems = [\n ...allWorkItems.filter((wi) => wi.parentId === workItem.id),\n ...localItems.filter((li) => !allWorkItems.some((wi) => wi.id === li.id)),\n ];\n\n const atMaxDepth = currentDepth >= MAX_DEPTH - 1;\n\n const handleCreated = (newItem: WorkItem) => {\n setLocalItems((prev) => [...prev, newItem]);\n setShowCreateDialog(false);\n };\n\n return (\n <div data-testid=\"sub-items-section\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Layers className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">Sub-items</span>\n {childItems.length > 0 && (\n <span className=\"text-muted-foreground text-[10px]\">{childItems.length}</span>\n )}\n </div>\n {!atMaxDepth && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-1.5 text-[10px]\"\n onClick={() => setShowCreateDialog(true)}\n data-testid=\"add-sub-item-btn\"\n >\n <Plus className=\"mr-0.5 h-3 w-3\" />\n Add\n </Button>\n )}\n </div>\n\n {atMaxDepth ? (\n <div\n className=\"flex items-center gap-1.5 rounded bg-yellow-500/10 px-2 py-1.5\"\n data-testid=\"max-depth-warning\"\n >\n <AlertTriangle className=\"h-3 w-3 shrink-0 text-yellow-500\" />\n <span className=\"text-[10px] text-yellow-600 dark:text-yellow-400\">\n Maximum nesting depth reached ({MAX_DEPTH} levels). Cannot add sub-items here.\n </span>\n </div>\n ) : null}\n\n {childItems.length === 0 && !atMaxDepth && (\n <p\n className=\"text-muted-foreground py-2 text-center text-[10px]\"\n data-testid=\"sub-items-empty\"\n >\n No sub-items yet.\n </p>\n )}\n\n {childItems.length > 0 && (\n <div className=\"divide-y rounded-lg border\" data-testid=\"sub-items-list\">\n {childItems.map((child) => {\n const state = stateMap.get(child.stateId);\n const identifier = `${projectPrefix}-${child.sequenceId}`;\n return (\n <div\n key={child.id}\n data-testid={`sub-item-${identifier}`}\n className=\"hover:bg-accent/50 flex cursor-pointer items-center gap-3 px-3 py-2 transition-colors\"\n onClick={() => onSubItemClick?.(child)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onSubItemClick?.(child);\n }\n }}\n >\n <span className=\"text-muted-foreground shrink-0 font-mono text-[10px]\">\n {identifier}\n </span>\n {state ? (\n <span\n className=\"h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: state.color }}\n title={state.name}\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate text-xs\">{child.title}</span>\n {child.priority && child.priority !== 'None' ? (\n <Badge\n variant=\"secondary\"\n className={`shrink-0 text-[10px] ${PRIORITY_COLORS[child.priority] ?? ''}`}\n >\n {child.priority}\n </Badge>\n ) : null}\n </div>\n );\n })}\n </div>\n )}\n\n {!atMaxDepth && (\n <CreateWorkItemDialog\n open={showCreateDialog}\n onOpenChange={setShowCreateDialog}\n projectId={projectId}\n states={states}\n onCreated={handleCreated}\n parentId={workItem.id}\n />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40df373c6521d8ded793f0beced439d3a67835936e\":\"deleteAttachment\"},\"src/presentation/web/app/actions/manage-attachments.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40df373c6521d8ded793f0beced439d3a67835936e\",callServer,void 0,findSourceMapURL,\"deleteAttachment\");export{$$RSC_SERVER_ACTION_1 as deleteAttachment};","'use client';\n\nimport { useState, useCallback, useRef } from 'react';\nimport { Paperclip, Trash2, Download, Upload, FileIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport type { PmAttachment } from '@shepai/core/domain/generated/output';\nimport { deleteAttachment } from '@/app/actions/manage-attachments';\n\nexport interface AttachmentListProps {\n workItemId: string;\n attachments: PmAttachment[];\n className?: string;\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${String(bytes)} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function AttachmentList({\n workItemId,\n attachments: initialAttachments,\n className,\n}: AttachmentListProps) {\n const [attachments, setAttachments] = useState<PmAttachment[]>(initialAttachments);\n const [uploading, setUploading] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleUpload = useCallback(\n async (files: FileList | null) => {\n if (!files || files.length === 0) return;\n setUploading(true);\n\n try {\n for (const file of Array.from(files)) {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('workItemId', workItemId);\n\n const res = await fetch('/api/pm-attachments/upload', {\n method: 'POST',\n body: formData,\n });\n\n if (res.ok) {\n const data = (await res.json()) as {\n id: string;\n filename: string;\n mimeType: string;\n fileSize: number;\n createdAt: string;\n };\n const newAttachment: PmAttachment = {\n id: data.id,\n workItemId,\n filename: data.filename,\n mimeType: data.mimeType,\n fileSize: data.fileSize,\n storagePath: '',\n createdAt: new Date(data.createdAt),\n updatedAt: new Date(data.createdAt),\n deletedAt: undefined,\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n }\n } finally {\n setUploading(false);\n if (fileInputRef.current) fileInputRef.current.value = '';\n }\n },\n [workItemId]\n );\n\n const handleDelete = useCallback(async (attachmentId: string) => {\n const result = await deleteAttachment(attachmentId);\n if (!result.error) {\n setAttachments((prev) => prev.filter((a) => a.id !== attachmentId));\n }\n }, []);\n\n const handleDownload = useCallback((attachmentId: string) => {\n window.open(`/api/pm-attachments/download?id=${attachmentId}`, '_blank');\n }, []);\n\n return (\n <div data-testid=\"attachment-list\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Paperclip className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">\n Attachments {attachments.length > 0 ? `(${String(attachments.length)})` : ''}\n </span>\n </div>\n <div>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => handleUpload(e.target.files)}\n data-testid=\"file-input\"\n />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 text-xs\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n data-testid=\"upload-btn\"\n >\n <Upload className=\"h-3 w-3\" />\n {uploading ? 'Uploading...' : 'Upload'}\n </Button>\n </div>\n </div>\n\n {attachments.length === 0 ? (\n <p className=\"text-muted-foreground text-[10px]\">No attachments</p>\n ) : (\n <div className=\"space-y-1\">\n {attachments.map((att) => (\n <div\n key={att.id}\n data-testid={`attachment-${att.id}`}\n className=\"group hover:bg-accent/50 flex items-center gap-2 rounded-sm px-2 py-1 text-xs\"\n >\n <FileIcon className=\"text-muted-foreground h-3.5 w-3.5 shrink-0\" />\n <span className=\"flex-1 truncate\">{att.filename}</span>\n <span className=\"text-muted-foreground text-[10px]\">\n {formatFileSize(att.fileSize)}\n </span>\n <div className=\"hidden gap-0.5 group-hover:flex\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-5 w-5 p-0\"\n onClick={() => handleDownload(att.id)}\n title=\"Download\"\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive h-5 w-5 p-0\"\n onClick={() => handleDelete(att.id)}\n title=\"Delete\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"70b0419b7b76b0be91b873b9c59561f4be37895bb1\":\"logTimeEntry\"},\"src/presentation/web/app/actions/manage-time-entries.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"70b0419b7b76b0be91b873b9c59561f4be37895bb1\",callServer,void 0,findSourceMapURL,\"logTimeEntry\");export{$$RSC_SERVER_ACTION_0 as logTimeEntry};","/* __next_internal_action_entry_do_not_use__ [{\"40d35021d7d3db7606cde4af9b4b256d843f01cc05\":\"deleteTimeEntry\"},\"src/presentation/web/app/actions/manage-time-entries.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"40d35021d7d3db7606cde4af9b4b256d843f01cc05\",callServer,void 0,findSourceMapURL,\"deleteTimeEntry\");export{$$RSC_SERVER_ACTION_2 as deleteTimeEntry};","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Clock, Plus, Trash2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport type { TimeEntry } from '@shepai/core/domain/generated/output';\nimport { logTimeEntry, deleteTimeEntry } from '@/app/actions/manage-time-entries';\n\nexport interface TimeEntryListProps {\n workItemId: string;\n timeEntries: TimeEntry[];\n totalMinutes: number;\n className?: string;\n}\n\nfunction formatDuration(minutes: number): string {\n if (minutes < 60) return `${String(minutes)}m`;\n const h = Math.floor(minutes / 60);\n const m = minutes % 60;\n return m > 0 ? `${String(h)}h ${String(m)}m` : `${String(h)}h`;\n}\n\nfunction formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function TimeEntryList({\n workItemId,\n timeEntries: initialEntries,\n totalMinutes: initialTotal,\n className,\n}: TimeEntryListProps) {\n const [entries, setEntries] = useState<TimeEntry[]>(initialEntries);\n const [totalMinutes, setTotalMinutes] = useState(initialTotal);\n const [showForm, setShowForm] = useState(false);\n const [hours, setHours] = useState('');\n const [minutes, setMinutes] = useState('');\n const [note, setNote] = useState('');\n const [saving, setSaving] = useState(false);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n const h = parseInt(hours, 10) || 0;\n const m = parseInt(minutes, 10) || 0;\n const total = h * 60 + m;\n if (total <= 0) return;\n\n setSaving(true);\n try {\n const result = await logTimeEntry(workItemId, total, note || undefined);\n if (result.timeEntry) {\n setEntries((prev) => [result.timeEntry!, ...prev]);\n setTotalMinutes((prev) => prev + total);\n setHours('');\n setMinutes('');\n setNote('');\n setShowForm(false);\n }\n } finally {\n setSaving(false);\n }\n },\n [workItemId, hours, minutes, note]\n );\n\n const handleDelete = useCallback(async (entryId: string, duration: number) => {\n const result = await deleteTimeEntry(entryId);\n if (!result.error) {\n setEntries((prev) => prev.filter((e) => e.id !== entryId));\n setTotalMinutes((prev) => prev - duration);\n }\n }, []);\n\n return (\n <div data-testid=\"time-entry-list\" className={cn('space-y-3', className)}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1.5\">\n <Clock className=\"text-muted-foreground h-3.5 w-3.5\" />\n <span className=\"text-xs font-medium\">Time Logged</span>\n {totalMinutes > 0 ? (\n <span className=\"text-muted-foreground text-[10px]\">\n ({formatDuration(totalMinutes)} total)\n </span>\n ) : null}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 text-xs\"\n onClick={() => setShowForm(!showForm)}\n data-testid=\"log-time-btn\"\n >\n <Plus className=\"h-3 w-3\" />\n Log Time\n </Button>\n </div>\n\n {showForm ? (\n <form\n onSubmit={handleSubmit}\n className=\"bg-muted/50 space-y-2 rounded-md border p-2\"\n data-testid=\"log-time-form\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min=\"0\"\n placeholder=\"0\"\n value={hours}\n onChange={(e) => setHours(e.target.value)}\n className=\"h-7 w-14 text-xs\"\n data-testid=\"hours-input\"\n />\n <span className=\"text-muted-foreground text-xs\">h</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min=\"0\"\n max=\"59\"\n placeholder=\"0\"\n value={minutes}\n onChange={(e) => setMinutes(e.target.value)}\n className=\"h-7 w-14 text-xs\"\n data-testid=\"minutes-input\"\n />\n <span className=\"text-muted-foreground text-xs\">m</span>\n </div>\n </div>\n <Input\n placeholder=\"Note (optional)\"\n value={note}\n onChange={(e) => setNote(e.target.value)}\n className=\"h-7 text-xs\"\n data-testid=\"note-input\"\n />\n <div className=\"flex justify-end gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 text-xs\"\n onClick={() => setShowForm(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n size=\"sm\"\n className=\"h-6 text-xs\"\n disabled={saving}\n data-testid=\"save-time-btn\"\n >\n {saving ? 'Saving...' : 'Save'}\n </Button>\n </div>\n </form>\n ) : null}\n\n {entries.length === 0 ? (\n <p className=\"text-muted-foreground text-[10px]\">No time logged</p>\n ) : (\n <div className=\"space-y-1\">\n {entries.map((entry) => (\n <div\n key={entry.id}\n data-testid={`time-entry-${entry.id}`}\n className=\"group hover:bg-accent/50 flex items-center gap-2 rounded-sm px-2 py-1 text-xs\"\n >\n <Clock className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"font-medium\">{formatDuration(entry.durationMinutes)}</span>\n {entry.note ? (\n <span className=\"text-muted-foreground flex-1 truncate\">{entry.note}</span>\n ) : (\n <span className=\"flex-1\" />\n )}\n <span className=\"text-muted-foreground text-[10px]\">\n {formatDate(entry.loggedAt)}\n </span>\n <div className=\"hidden group-hover:flex\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive h-5 w-5 p-0\"\n onClick={() => handleDelete(entry.id, entry.durationMinutes)}\n title=\"Delete\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7h2', key: '8i5ue5' }],\n ['path', { d: 'M15 7h2a5 5 0 1 1 0 10h-2', key: '1b9ql8' }],\n ['line', { x1: '8', x2: '16', y1: '12', y2: '12', key: '1jonct' }],\n];\n\n/**\n * @component @name Link2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAxN0g3QTUgNSAwIDAgMSA3IDdoMiIgLz4KICA8cGF0aCBkPSJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIiAvPgogIDxsaW5lIHgxPSI4IiB4Mj0iMTYiIHkxPSIxMiIgeTI9IjEyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/link-2\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 Link2 = createLucideIcon('link-2', __iconNode);\n\nexport default Link2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 3v12', key: '1x0j5s' }],\n ['path', { d: 'm17 8-5-5-5 5', key: '7q97r8' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n];\n\n/**\n * @component @name Upload\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgM3YxMiIgLz4KICA8cGF0aCBkPSJtMTcgOC01LTUtNSA1IiAvPgogIDxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/upload\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 Upload = createLucideIcon('upload', __iconNode);\n\nexport default Upload;\n"],"names":[],"mappings":"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","ignoreList":[12,13]}
@@ -1,3 +1,3 @@
1
- module.exports=[893788,a=>{"use strict";var b=a.i(556365),c=a.i(944592),d=a.i(91109),e=a.i(476945),f=a.i(832703),g=a.i(216605),h=a.i(867837),i=a.i(385536),j=a.i(118948),k=a.i(390920),l=a.i(658339),m=a.i(223750),n=a.i(758860),o=a.i(159175),p=a.i(746847);let q={Admin:"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300",Member:"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300",Guest:"bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-300"};function r({projectId:a,members:d,currentUserId:e,onAddMember:f,onRemoveMember:g,onUpdateRole:h}){let[i,m]=(0,c.useState)(d),[r,s]=(0,c.useState)(""),[t,u]=(0,c.useState)(p.ProjectRole.Member),[v,w]=(0,c.useState)(null),[x,y]=(0,c.useState)(!1),z=i.some(a=>a.userId===e&&a.role===p.ProjectRole.Admin),A=(0,c.useCallback)(async()=>{if(!r.trim())return;y(!0),w(null);let b=await f({projectId:a,userId:r.trim(),role:t,actorId:e});b.error?w(b.error):b.member&&(m(a=>[...a,b.member]),s(""),u(p.ProjectRole.Member)),y(!1)},[r,t,a,e,f]),B=(0,c.useCallback)(async b=>{w(null);let c=await g({projectId:a,userId:b,actorId:e});c.error?w(c.error):m(a=>a.filter(a=>a.userId!==b))},[a,e,g]),C=(0,c.useCallback)(async(b,c)=>{w(null);let d=await h({projectId:a,userId:b,newRole:c,actorId:e});d.error?w(d.error):m(a=>a.map(a=>a.userId===b?{...a,role:c}:a))},[a,e,h]);return(0,b.jsxs)("div",{"data-testid":"project-members-panel",className:"space-y-4",children:[(0,b.jsx)("h3",{className:"text-lg font-semibold",children:"Project Members"}),v?(0,b.jsx)("div",{"data-testid":"members-error",className:"rounded border border-red-200 bg-red-50 p-3 text-sm text-red-800 dark:border-red-800 dark:bg-red-950 dark:text-red-300",children:v}):null,(0,b.jsxs)("div",{className:"divide-y rounded border",children:[i.map(a=>(0,b.jsxs)("div",{"data-testid":`member-row-${a.userId}`,className:"flex items-center justify-between p-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:a.userId}),(0,b.jsx)(l.Badge,{className:q[a.role]??"",variant:"secondary",children:a.role})]}),z&&a.userId!==e?(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)(o.Select,{value:a.role,onValueChange:b=>C(a.userId,b),children:[(0,b.jsx)(o.SelectTrigger,{className:"w-[120px]",children:(0,b.jsx)(o.SelectValue,{})}),(0,b.jsxs)(o.SelectContent,{children:[(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Admin,children:"Admin"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Member,children:"Member"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Guest,children:"Guest"})]})]}),(0,b.jsx)(j.Button,{variant:"destructive",size:"sm",onClick:()=>B(a.userId),children:"Remove"})]}):null]},a.id)),0===i.length&&(0,b.jsx)("div",{className:"text-muted-foreground p-4 text-center text-sm",children:"No members in this project."})]}),z?(0,b.jsxs)("div",{"data-testid":"add-member-form",className:"flex items-end gap-3 rounded border p-3",children:[(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)(n.Label,{htmlFor:"new-user-id",children:"User ID"}),(0,b.jsx)(k.Input,{id:"new-user-id",value:r,onChange:a=>s(a.target.value),placeholder:"Enter user ID",disabled:x})]}),(0,b.jsxs)("div",{className:"w-[140px]",children:[(0,b.jsx)(n.Label,{htmlFor:"new-role",children:"Role"}),(0,b.jsxs)(o.Select,{value:t,onValueChange:a=>u(a),children:[(0,b.jsx)(o.SelectTrigger,{id:"new-role",children:(0,b.jsx)(o.SelectValue,{})}),(0,b.jsxs)(o.SelectContent,{children:[(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Admin,children:"Admin"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Member,children:"Member"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Guest,children:"Guest"})]})]})]}),(0,b.jsx)(j.Button,{onClick:A,disabled:x||!r.trim(),children:x?"Adding...":"Add Member"})]}):null]})}var s=a.i(290448),t=a.i(289111);let u=(0,t.createServerReference)("40289a4e863f54f78381dfbe15c63e8a178430576a",t.callServer,void 0,t.findSourceMapURL,"deletePmProject"),v=(0,t.createServerReference)("4030a2f311e416baf7edadcebe8c87c71dc09539fb",t.callServer,void 0,t.findSourceMapURL,"createWorkItemState"),w=(0,t.createServerReference)("402e71f701be517941a93d5eef136a547831f34527",t.callServer,void 0,t.findSourceMapURL,"deleteWorkItemState"),x=(0,t.createServerReference)("40d046f0c0e592036d89328c22271fd61610900338",t.callServer,void 0,t.findSourceMapURL,"createLabel"),y=(0,t.createServerReference)("40d2670c7ce03e2093c350e67b3c5d659067343118",t.callServer,void 0,t.findSourceMapURL,"deleteLabel"),z=(0,t.createServerReference)("408a61da1b8e721521f0bed672fc7870960ed3ed89",t.callServer,void 0,t.findSourceMapURL,"addProjectMember"),A=(0,t.createServerReference)("40e07ae6b9d836379d413f0ed53da44b07e0f06b26",t.callServer,void 0,t.findSourceMapURL,"removeProjectMember"),B=(0,t.createServerReference)("406d28830ca590cdcd0368927f56f1b8f2eadb6ed2",t.callServer,void 0,t.findSourceMapURL,"updateProjectMemberRole"),C={backlog:"bg-gray-400",unstarted:"bg-blue-400",started:"bg-yellow-400",completed:"bg-green-400",cancelled:"bg-red-400"};function D({project:a,states:n,labels:o,members:p=[],className:q}){let t=(0,d.useRouter)(),[D,E]=(0,c.useState)(a.name),[F,G]=(0,c.useState)(a.description??""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(n),[L,M]=(0,c.useState)(o),[N,O]=(0,c.useState)(""),[P,Q]=(0,c.useState)(""),[R,S]=(0,c.useState)("#6366f1"),[T,U]=(0,c.useState)(""),V=(0,c.useCallback)(async()=>{I(!0),await (0,s.updatePmProject)(a.id,{name:D.trim(),description:F.trim()||void 0}),I(!1)},[a.id,D,F]),W=(0,c.useCallback)(async()=>{if(!N.trim())return;let b=await v({projectId:a.id,name:N.trim(),color:"#6366f1",stateGroup:"unstarted"});b.state&&(K(a=>[...a,b.state]),O(""))},[a.id,N]),X=(0,c.useCallback)(async a=>{(await w(a)).error||K(b=>b.filter(b=>b.id!==a))},[]),Y=(0,c.useCallback)(async()=>{if(!P.trim())return;let b=await x({projectId:a.id,name:P.trim(),color:R});b.label&&(M(a=>[...a,b.label]),Q(""))},[a.id,P,R]),Z=(0,c.useCallback)(async a=>{(await y(a)).error||M(b=>b.filter(b=>b.id!==a))},[]),$=(0,c.useCallback)(async()=>{T!==a.name||(await u(a.id)).error||t.push("/projects")},[a.id,a.name,T,t]);return(0,b.jsxs)("div",{"data-testid":"project-settings",className:(0,i.cn)("max-w-2xl space-y-8",q),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:()=>t.push(`/projects/${a.slug}`),"data-testid":"back-to-project",children:(0,b.jsx)(e.ArrowLeft,{className:"h-4 w-4"})}),(0,b.jsx)(f.Settings,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Project Settings"}),(0,b.jsx)(l.Badge,{variant:"outline",className:"text-[10px]",children:a.identifierPrefix})]}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"general-settings",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold tracking-wide uppercase",children:"General"}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-muted-foreground mb-1 block text-[10px] font-medium",children:"Project Name"}),(0,b.jsx)(k.Input,{value:D,onChange:a=>E(a.target.value),className:"h-8 text-xs","data-testid":"project-name-input"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-muted-foreground mb-1 block text-[10px] font-medium",children:"Description"}),(0,b.jsx)(k.Input,{value:F,onChange:a=>G(a.target.value),placeholder:"Optional description",className:"h-8 text-xs","data-testid":"project-description-input"})]}),(0,b.jsx)(j.Button,{size:"sm",className:"h-7 text-xs",onClick:V,disabled:H||!D.trim(),"data-testid":"save-general-btn",children:H?"Saving...":"Save Changes"})]})]}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsx)("section",{"data-testid":"estimate-settings-section",children:(0,b.jsx)(m.EstimateSettings,{projectId:a.id,currentEstimateType:a.estimateType})}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"states-settings",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold tracking-wide uppercase",children:"Work Item States"}),(0,b.jsx)("div",{className:"space-y-1",children:J.map(a=>(0,b.jsxs)("div",{className:"group flex items-center gap-2 rounded-sm px-2 py-1 text-xs","data-testid":`state-${a.id}`,children:[(0,b.jsx)("span",{className:"h-2.5 w-2.5 shrink-0 rounded-full",style:{backgroundColor:a.color}}),(0,b.jsx)("span",{className:"flex-1",children:a.name}),(0,b.jsx)(l.Badge,{variant:"outline",className:(0,i.cn)("text-[9px]",C[a.stateGroup]??"bg-gray-400"),children:a.stateGroup}),a.isDefault?(0,b.jsx)(l.Badge,{variant:"secondary",className:"text-[9px]",children:"default"}):(0,b.jsx)(j.Button,{variant:"ghost",size:"sm",className:"text-destructive hidden h-5 w-5 p-0 group-hover:flex",onClick:()=>X(a.id),title:"Delete state",children:(0,b.jsx)(g.Trash2,{className:"h-3 w-3"})})]},a.id))}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(k.Input,{value:N,onChange:a=>O(a.target.value),placeholder:"New state name",className:"h-7 flex-1 text-xs","data-testid":"new-state-input",onKeyDown:a=>{"Enter"===a.key&&W()}}),(0,b.jsxs)(j.Button,{variant:"outline",size:"sm",className:"h-7 text-xs",onClick:W,disabled:!N.trim(),"data-testid":"add-state-btn",children:[(0,b.jsx)(h.Plus,{className:"mr-1 h-3 w-3"}),"Add"]})]})]}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"labels-settings",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold tracking-wide uppercase",children:"Labels"}),0===L.length?(0,b.jsx)("p",{className:"text-muted-foreground text-[10px]",children:"No labels yet"}):(0,b.jsx)("div",{className:"flex flex-wrap gap-1.5",children:L.map(a=>(0,b.jsxs)("div",{className:"group flex items-center gap-1 rounded-full border px-2 py-0.5","data-testid":`label-${a.id}`,children:[(0,b.jsx)("span",{className:"h-2 w-2 rounded-full",style:{backgroundColor:a.color}}),(0,b.jsx)("span",{className:"text-[10px]",children:a.name}),(0,b.jsx)("button",{type:"button",className:"text-destructive ml-0.5 hidden text-xs group-hover:inline",onClick:()=>Z(a.id),title:"Delete label",children:"×"})]},a.id))}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"color",value:R,onChange:a=>S(a.target.value),className:"h-7 w-7 cursor-pointer rounded border-0 p-0","data-testid":"new-label-color"}),(0,b.jsx)(k.Input,{value:P,onChange:a=>Q(a.target.value),placeholder:"New label name",className:"h-7 flex-1 text-xs","data-testid":"new-label-input",onKeyDown:a=>{"Enter"===a.key&&Y()}}),(0,b.jsxs)(j.Button,{variant:"outline",size:"sm",className:"h-7 text-xs",onClick:Y,disabled:!P.trim(),"data-testid":"add-label-btn",children:[(0,b.jsx)(h.Plus,{className:"mr-1 h-3 w-3"}),"Add"]})]})]}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsx)("section",{"data-testid":"members-settings",children:(0,b.jsx)(r,{projectId:a.id,members:p,currentUserId:"",onAddMember:z,onRemoveMember:A,onUpdateRole:B})}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"danger-zone",children:[(0,b.jsx)("h2",{className:"text-destructive text-xs font-semibold tracking-wide uppercase",children:"Danger Zone"}),(0,b.jsxs)("div",{className:"border-destructive/20 rounded-md border p-3",children:[(0,b.jsx)("p",{className:"mb-2 text-xs",children:"Permanently delete this project and all its work items, cycles, modules, and pages."}),(0,b.jsxs)("p",{className:"text-muted-foreground mb-2 text-[10px]",children:["Type ",(0,b.jsx)("strong",{children:a.name})," to confirm."]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(k.Input,{value:T,onChange:a=>U(a.target.value),placeholder:a.name,className:"h-7 flex-1 text-xs","data-testid":"delete-confirm-input"}),(0,b.jsxs)(j.Button,{variant:"destructive",size:"sm",className:"h-7 text-xs",onClick:$,disabled:T!==a.name,"data-testid":"delete-project-btn",children:[(0,b.jsx)(g.Trash2,{className:"mr-1 h-3 w-3"}),"Delete Project"]})]})]})]})]})}a.s(["ProjectSettingsClient",()=>D],893788)}];
1
+ module.exports=[893788,a=>{"use strict";var b=a.i(556365),c=a.i(944592),d=a.i(91109),e=a.i(476945),f=a.i(832703),g=a.i(216605),h=a.i(867837),i=a.i(385536),j=a.i(118948),k=a.i(390920),l=a.i(658339),m=a.i(223750),n=a.i(758860),o=a.i(159175),p=a.i(746847);let q={Admin:"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300",Member:"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300",Guest:"bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-300"};function r({projectId:a,members:d,currentUserId:e,onAddMember:f,onRemoveMember:g,onUpdateRole:h}){let[i,m]=(0,c.useState)(d),[r,s]=(0,c.useState)(""),[t,u]=(0,c.useState)(p.ProjectRole.Member),[v,w]=(0,c.useState)(null),[x,y]=(0,c.useState)(!1),z=i.some(a=>a.userId===e&&a.role===p.ProjectRole.Admin),A=(0,c.useCallback)(async()=>{if(!r.trim())return;y(!0),w(null);let b=await f({projectId:a,userId:r.trim(),role:t,actorId:e});b.error?w(b.error):b.member&&(m(a=>[...a,b.member]),s(""),u(p.ProjectRole.Member)),y(!1)},[r,t,a,e,f]),B=(0,c.useCallback)(async b=>{w(null);let c=await g({projectId:a,userId:b,actorId:e});c.error?w(c.error):m(a=>a.filter(a=>a.userId!==b))},[a,e,g]),C=(0,c.useCallback)(async(b,c)=>{w(null);let d=await h({projectId:a,userId:b,newRole:c,actorId:e});d.error?w(d.error):m(a=>a.map(a=>a.userId===b?{...a,role:c}:a))},[a,e,h]);return(0,b.jsxs)("div",{"data-testid":"project-members-panel",className:"space-y-4",children:[(0,b.jsx)("h3",{className:"text-lg font-semibold",children:"Project Members"}),v?(0,b.jsx)("div",{"data-testid":"members-error",className:"rounded border border-red-200 bg-red-50 p-3 text-sm text-red-800 dark:border-red-800 dark:bg-red-950 dark:text-red-300",children:v}):null,(0,b.jsxs)("div",{className:"divide-y rounded border",children:[i.map(a=>(0,b.jsxs)("div",{"data-testid":`member-row-${a.userId}`,className:"flex items-center justify-between p-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:a.userId}),(0,b.jsx)(l.Badge,{className:q[a.role]??"",variant:"secondary",children:a.role})]}),z&&a.userId!==e?(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)(o.Select,{value:a.role,onValueChange:b=>C(a.userId,b),children:[(0,b.jsx)(o.SelectTrigger,{className:"w-[120px]",children:(0,b.jsx)(o.SelectValue,{})}),(0,b.jsxs)(o.SelectContent,{children:[(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Admin,children:"Admin"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Member,children:"Member"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Guest,children:"Guest"})]})]}),(0,b.jsx)(j.Button,{variant:"destructive",size:"sm",onClick:()=>B(a.userId),children:"Remove"})]}):null]},a.id)),0===i.length&&(0,b.jsx)("div",{className:"text-muted-foreground p-4 text-center text-sm",children:"No members in this project."})]}),z?(0,b.jsxs)("div",{"data-testid":"add-member-form",className:"flex items-end gap-3 rounded border p-3",children:[(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)(n.Label,{htmlFor:"new-user-id",children:"User ID"}),(0,b.jsx)(k.Input,{id:"new-user-id",value:r,onChange:a=>s(a.target.value),placeholder:"Enter user ID",disabled:x})]}),(0,b.jsxs)("div",{className:"w-[140px]",children:[(0,b.jsx)(n.Label,{htmlFor:"new-role",children:"Role"}),(0,b.jsxs)(o.Select,{value:t,onValueChange:a=>u(a),children:[(0,b.jsx)(o.SelectTrigger,{id:"new-role",children:(0,b.jsx)(o.SelectValue,{})}),(0,b.jsxs)(o.SelectContent,{children:[(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Admin,children:"Admin"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Member,children:"Member"}),(0,b.jsx)(o.SelectItem,{value:p.ProjectRole.Guest,children:"Guest"})]})]})]}),(0,b.jsx)(j.Button,{onClick:A,disabled:x||!r.trim(),children:x?"Adding...":"Add Member"})]}):null]})}var s=a.i(642761),t=a.i(289111);let u=(0,t.createServerReference)("4017a70c5c1e2da830ce1a9c053d40c3f67e72d9cb",t.callServer,void 0,t.findSourceMapURL,"deletePmProject"),v=(0,t.createServerReference)("40ef962d6872be283839fc987699032959d5b66114",t.callServer,void 0,t.findSourceMapURL,"createWorkItemState"),w=(0,t.createServerReference)("40aab04f82dea5df4c7b0f176bf9d7e9c590c52ea7",t.callServer,void 0,t.findSourceMapURL,"deleteWorkItemState"),x=(0,t.createServerReference)("4097ac3d9da3a1fd6741976ecb84042481a920e8a6",t.callServer,void 0,t.findSourceMapURL,"createLabel"),y=(0,t.createServerReference)("4036ad604274b05ade8b75c7ed91b1aa99550036da",t.callServer,void 0,t.findSourceMapURL,"deleteLabel"),z=(0,t.createServerReference)("40b559ec5522a09d854d7b046575eceb8610c57161",t.callServer,void 0,t.findSourceMapURL,"addProjectMember"),A=(0,t.createServerReference)("40a2d46892357d491f2e95c0b6d19147256a62e455",t.callServer,void 0,t.findSourceMapURL,"removeProjectMember"),B=(0,t.createServerReference)("402f9a6fffdda99b6fbaba4f7d41f10bbc70d8cc38",t.callServer,void 0,t.findSourceMapURL,"updateProjectMemberRole"),C={backlog:"bg-gray-400",unstarted:"bg-blue-400",started:"bg-yellow-400",completed:"bg-green-400",cancelled:"bg-red-400"};function D({project:a,states:n,labels:o,members:p=[],className:q}){let t=(0,d.useRouter)(),[D,E]=(0,c.useState)(a.name),[F,G]=(0,c.useState)(a.description??""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(n),[L,M]=(0,c.useState)(o),[N,O]=(0,c.useState)(""),[P,Q]=(0,c.useState)(""),[R,S]=(0,c.useState)("#6366f1"),[T,U]=(0,c.useState)(""),V=(0,c.useCallback)(async()=>{I(!0),await (0,s.updatePmProject)(a.id,{name:D.trim(),description:F.trim()||void 0}),I(!1)},[a.id,D,F]),W=(0,c.useCallback)(async()=>{if(!N.trim())return;let b=await v({projectId:a.id,name:N.trim(),color:"#6366f1",stateGroup:"unstarted"});b.state&&(K(a=>[...a,b.state]),O(""))},[a.id,N]),X=(0,c.useCallback)(async a=>{(await w(a)).error||K(b=>b.filter(b=>b.id!==a))},[]),Y=(0,c.useCallback)(async()=>{if(!P.trim())return;let b=await x({projectId:a.id,name:P.trim(),color:R});b.label&&(M(a=>[...a,b.label]),Q(""))},[a.id,P,R]),Z=(0,c.useCallback)(async a=>{(await y(a)).error||M(b=>b.filter(b=>b.id!==a))},[]),$=(0,c.useCallback)(async()=>{T!==a.name||(await u(a.id)).error||t.push("/projects")},[a.id,a.name,T,t]);return(0,b.jsxs)("div",{"data-testid":"project-settings",className:(0,i.cn)("max-w-2xl space-y-8",q),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(j.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:()=>t.push(`/projects/${a.slug}`),"data-testid":"back-to-project",children:(0,b.jsx)(e.ArrowLeft,{className:"h-4 w-4"})}),(0,b.jsx)(f.Settings,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Project Settings"}),(0,b.jsx)(l.Badge,{variant:"outline",className:"text-[10px]",children:a.identifierPrefix})]}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"general-settings",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold tracking-wide uppercase",children:"General"}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-muted-foreground mb-1 block text-[10px] font-medium",children:"Project Name"}),(0,b.jsx)(k.Input,{value:D,onChange:a=>E(a.target.value),className:"h-8 text-xs","data-testid":"project-name-input"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-muted-foreground mb-1 block text-[10px] font-medium",children:"Description"}),(0,b.jsx)(k.Input,{value:F,onChange:a=>G(a.target.value),placeholder:"Optional description",className:"h-8 text-xs","data-testid":"project-description-input"})]}),(0,b.jsx)(j.Button,{size:"sm",className:"h-7 text-xs",onClick:V,disabled:H||!D.trim(),"data-testid":"save-general-btn",children:H?"Saving...":"Save Changes"})]})]}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsx)("section",{"data-testid":"estimate-settings-section",children:(0,b.jsx)(m.EstimateSettings,{projectId:a.id,currentEstimateType:a.estimateType})}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"states-settings",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold tracking-wide uppercase",children:"Work Item States"}),(0,b.jsx)("div",{className:"space-y-1",children:J.map(a=>(0,b.jsxs)("div",{className:"group flex items-center gap-2 rounded-sm px-2 py-1 text-xs","data-testid":`state-${a.id}`,children:[(0,b.jsx)("span",{className:"h-2.5 w-2.5 shrink-0 rounded-full",style:{backgroundColor:a.color}}),(0,b.jsx)("span",{className:"flex-1",children:a.name}),(0,b.jsx)(l.Badge,{variant:"outline",className:(0,i.cn)("text-[9px]",C[a.stateGroup]??"bg-gray-400"),children:a.stateGroup}),a.isDefault?(0,b.jsx)(l.Badge,{variant:"secondary",className:"text-[9px]",children:"default"}):(0,b.jsx)(j.Button,{variant:"ghost",size:"sm",className:"text-destructive hidden h-5 w-5 p-0 group-hover:flex",onClick:()=>X(a.id),title:"Delete state",children:(0,b.jsx)(g.Trash2,{className:"h-3 w-3"})})]},a.id))}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(k.Input,{value:N,onChange:a=>O(a.target.value),placeholder:"New state name",className:"h-7 flex-1 text-xs","data-testid":"new-state-input",onKeyDown:a=>{"Enter"===a.key&&W()}}),(0,b.jsxs)(j.Button,{variant:"outline",size:"sm",className:"h-7 text-xs",onClick:W,disabled:!N.trim(),"data-testid":"add-state-btn",children:[(0,b.jsx)(h.Plus,{className:"mr-1 h-3 w-3"}),"Add"]})]})]}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"labels-settings",children:[(0,b.jsx)("h2",{className:"text-xs font-semibold tracking-wide uppercase",children:"Labels"}),0===L.length?(0,b.jsx)("p",{className:"text-muted-foreground text-[10px]",children:"No labels yet"}):(0,b.jsx)("div",{className:"flex flex-wrap gap-1.5",children:L.map(a=>(0,b.jsxs)("div",{className:"group flex items-center gap-1 rounded-full border px-2 py-0.5","data-testid":`label-${a.id}`,children:[(0,b.jsx)("span",{className:"h-2 w-2 rounded-full",style:{backgroundColor:a.color}}),(0,b.jsx)("span",{className:"text-[10px]",children:a.name}),(0,b.jsx)("button",{type:"button",className:"text-destructive ml-0.5 hidden text-xs group-hover:inline",onClick:()=>Z(a.id),title:"Delete label",children:"×"})]},a.id))}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"color",value:R,onChange:a=>S(a.target.value),className:"h-7 w-7 cursor-pointer rounded border-0 p-0","data-testid":"new-label-color"}),(0,b.jsx)(k.Input,{value:P,onChange:a=>Q(a.target.value),placeholder:"New label name",className:"h-7 flex-1 text-xs","data-testid":"new-label-input",onKeyDown:a=>{"Enter"===a.key&&Y()}}),(0,b.jsxs)(j.Button,{variant:"outline",size:"sm",className:"h-7 text-xs",onClick:Y,disabled:!P.trim(),"data-testid":"add-label-btn",children:[(0,b.jsx)(h.Plus,{className:"mr-1 h-3 w-3"}),"Add"]})]})]}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsx)("section",{"data-testid":"members-settings",children:(0,b.jsx)(r,{projectId:a.id,members:p,currentUserId:"",onAddMember:z,onRemoveMember:A,onUpdateRole:B})}),(0,b.jsx)("hr",{className:"border-border"}),(0,b.jsxs)("section",{className:"space-y-3","data-testid":"danger-zone",children:[(0,b.jsx)("h2",{className:"text-destructive text-xs font-semibold tracking-wide uppercase",children:"Danger Zone"}),(0,b.jsxs)("div",{className:"border-destructive/20 rounded-md border p-3",children:[(0,b.jsx)("p",{className:"mb-2 text-xs",children:"Permanently delete this project and all its work items, cycles, modules, and pages."}),(0,b.jsxs)("p",{className:"text-muted-foreground mb-2 text-[10px]",children:["Type ",(0,b.jsx)("strong",{children:a.name})," to confirm."]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(k.Input,{value:T,onChange:a=>U(a.target.value),placeholder:a.name,className:"h-7 flex-1 text-xs","data-testid":"delete-confirm-input"}),(0,b.jsxs)(j.Button,{variant:"destructive",size:"sm",className:"h-7 text-xs",onClick:$,disabled:T!==a.name,"data-testid":"delete-project-btn",children:[(0,b.jsx)(g.Trash2,{className:"mr-1 h-3 w-3"}),"Delete Project"]})]})]})]})]})}a.s(["ProjectSettingsClient",()=>D],893788)}];
2
2
 
3
3
  //# sourceMappingURL=744ca_web_app_projects_%5Bslug%5D_settings_project-settings-client_tsx_e8b85ddc._.js.map