@shepai/cli 1.194.3-pr586.23e3597 → 1.194.4

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 (302) 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 +3 -3
  9. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +36 -36
  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 +3 -3
  13. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +34 -34
  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 +3 -3
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +37 -37
  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 +3 -3
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +46 -46
  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 +3 -3
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +46 -46
  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 +3 -3
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +35 -35
  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 +3 -3
  33. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +35 -35
  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 +3 -3
  37. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +34 -34
  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 +3 -3
  41. package/web/.next/server/app/(dashboard)/control-center/page/server-reference-manifest.json +34 -34
  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 +3 -3
  45. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +37 -37
  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 +3 -3
  49. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +46 -46
  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 +3 -3
  53. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +46 -46
  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 +3 -3
  57. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +35 -35
  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 +3 -3
  61. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +35 -35
  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 +3 -3
  72. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +8 -8
  73. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +3 -3
  75. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +17 -17
  76. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  77. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/applications/page/react-loadable-manifest.json +3 -3
  79. package/web/.next/server/app/applications/page/server-reference-manifest.json +18 -18
  80. package/web/.next/server/app/applications/page.js.nft.json +1 -1
  81. package/web/.next/server/app/applications/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/features/page/react-loadable-manifest.json +3 -3
  83. package/web/.next/server/app/features/page/server-reference-manifest.json +30 -30
  84. package/web/.next/server/app/features/page.js.nft.json +1 -1
  85. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/page/react-loadable-manifest.json +3 -3
  87. package/web/.next/server/app/page/server-reference-manifest.json +8 -8
  88. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/react-loadable-manifest.json +3 -3
  90. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/server-reference-manifest.json +15 -15
  91. package/web/.next/server/app/projects/[slug]/items/[itemId]/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/projects/[slug]/page/react-loadable-manifest.json +3 -3
  93. package/web/.next/server/app/projects/[slug]/page/server-reference-manifest.json +27 -27
  94. package/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/app/projects/[slug]/pages/page/react-loadable-manifest.json +3 -3
  96. package/web/.next/server/app/projects/[slug]/pages/page/server-reference-manifest.json +11 -11
  97. package/web/.next/server/app/projects/[slug]/pages/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/projects/[slug]/settings/page/react-loadable-manifest.json +3 -3
  99. package/web/.next/server/app/projects/[slug]/settings/page/server-reference-manifest.json +17 -17
  100. package/web/.next/server/app/projects/[slug]/settings/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/projects/page/react-loadable-manifest.json +3 -3
  102. package/web/.next/server/app/projects/page/server-reference-manifest.json +9 -9
  103. package/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/settings/page/react-loadable-manifest.json +3 -3
  105. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  106. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/skills/page/react-loadable-manifest.json +3 -3
  108. package/web/.next/server/app/skills/page/server-reference-manifest.json +16 -16
  109. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/tools/page/react-loadable-manifest.json +3 -3
  111. package/web/.next/server/app/tools/page/server-reference-manifest.json +14 -14
  112. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/version/page/react-loadable-manifest.json +3 -3
  114. package/web/.next/server/app/version/page/server-reference-manifest.json +8 -8
  115. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/chunks/[root-of-the-server]__10e976f3._.js +1 -1
  117. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_99cb41a4.js +1 -1
  118. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_99cb41a4.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_3bcbcc2f.js +1 -1
  120. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_3bcbcc2f.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_059f6735.js +1 -1
  122. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_059f6735.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_control-center_page_actions_86edeb51.js +1 -1
  124. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_control-center_page_actions_86edeb51.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js +1 -1
  126. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js +1 -1
  128. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  130. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__012a0e7d._.js +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__012a0e7d._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/[root-of-the-server]__0462fa34._.js +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__0462fa34._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__1973d644._.js +1 -1
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a86d5fe._.js +1 -1
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a86d5fe._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__30326387._.js +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__30326387._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__3438c354._.js +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__3438c354._.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__361129f0._.js +1 -1
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__361129f0._.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__4adb4a94._.js +3 -3
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__4adb4a94._.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__5c25ef9b._.js +2 -2
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__5c25ef9b._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__5c5f9704._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__5c5f9704._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__638955bc._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__78e1366f._.js +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__78e1366f._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0d04b8e2._.js → [root-of-the-server]__8ccbc357._.js} +2 -2
  155. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0d04b8e2._.js.map → [root-of-the-server]__8ccbc357._.js.map} +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__97b6831c._.js +3 -3
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__9b16348d._.js +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__9b16348d._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1e902e32._.js → [root-of-the-server]__b2926b69._.js} +2 -2
  160. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1e902e32._.js.map → [root-of-the-server]__b2926b69._.js.map} +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3bc9689._.js +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__b3bc9689._.js.map +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba8cbee2._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba8cbee2._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__dbde193f._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__dbde193f._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__f6adb460._.js +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__f6adb460._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/_101de7c3._.js +1 -1
  170. package/web/.next/server/chunks/ssr/_101de7c3._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/_12ba4a07._.js +1 -1
  172. package/web/.next/server/chunks/ssr/_12ba4a07._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/_15634d5b._.js +1 -1
  174. package/web/.next/server/chunks/ssr/_15634d5b._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/_27c2f774._.js +1 -1
  176. package/web/.next/server/chunks/ssr/_27c2f774._.js.map +1 -1
  177. package/web/.next/server/chunks/ssr/_30787024._.js +1 -1
  178. package/web/.next/server/chunks/ssr/_30787024._.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/_3bd60fa3._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_402d53bf._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_402d53bf._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/_6868b4b1._.js +1 -1
  185. package/web/.next/server/chunks/ssr/{_3906be1d._.js → _759e7aaa._.js} +2 -2
  186. package/web/.next/server/chunks/ssr/{_3906be1d._.js.map → _759e7aaa._.js.map} +1 -1
  187. package/web/.next/server/chunks/ssr/{_12f37a55._.js → _7cd98562._.js} +2 -2
  188. package/web/.next/server/chunks/ssr/{_12f37a55._.js.map → _7cd98562._.js.map} +1 -1
  189. package/web/.next/server/chunks/ssr/_805ae1aa._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_805ae1aa._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/_8a700ff4._.js +1 -1
  192. package/web/.next/server/chunks/ssr/_8a700ff4._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/_8f4f8aa1._.js +1 -1
  194. package/web/.next/server/chunks/ssr/_8f4f8aa1._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/{_fe68c1e2._.js → _9df39bfe._.js} +2 -2
  196. package/web/.next/server/chunks/ssr/{_fe68c1e2._.js.map → _9df39bfe._.js.map} +1 -1
  197. package/web/.next/server/chunks/ssr/{_1055ec32._.js → _a31c3a42._.js} +2 -2
  198. package/web/.next/server/chunks/ssr/{_1055ec32._.js.map → _a31c3a42._.js.map} +1 -1
  199. package/web/.next/server/chunks/ssr/_b40a4fc3._.js +1 -1
  200. package/web/.next/server/chunks/ssr/_b40a4fc3._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/_c44ec376._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_c44ec376._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/_cd641c61._.js +1 -1
  204. package/web/.next/server/chunks/ssr/_cd641c61._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/_d53224a9._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_d53224a9._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/{_60246ee2._.js → _de93c45c._.js} +2 -2
  208. package/web/.next/server/chunks/ssr/{_60246ee2._.js.map → _de93c45c._.js.map} +1 -1
  209. package/web/.next/server/chunks/ssr/{_8ee3123d._.js → _e0e86221._.js} +2 -2
  210. package/web/.next/server/chunks/ssr/{_8ee3123d._.js.map → _e0e86221._.js.map} +1 -1
  211. package/web/.next/server/chunks/ssr/_e6271303._.js +1 -1
  212. package/web/.next/server/chunks/ssr/_e6271303._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/_ed8fd56c._.js +1 -1
  214. package/web/.next/server/chunks/ssr/_ed8fd56c._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/_f602cc9f._.js +1 -1
  216. package/web/.next/server/chunks/ssr/_f602cc9f._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  218. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web_05bba4dc._.js +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web_05bba4dc._.js.map +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web_43451480._.js +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_43451480._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/src_presentation_web_4b306bb3._.js +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web_4b306bb3._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/{src_presentation_web_1f525bd4._.js → src_presentation_web_5c844690._.js} +2 -2
  227. package/web/.next/server/chunks/ssr/{src_presentation_web_1f525bd4._.js.map → src_presentation_web_5c844690._.js.map} +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web_81dd84ae._.js +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web_81dd84ae._.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +1 -1
  231. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -1
  232. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_7ab26c98._.js +3 -3
  233. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js +1 -1
  237. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +1 -1
  239. package/web/.next/server/chunks/ssr/src_presentation_web_b504e3e2._.js +1 -1
  240. package/web/.next/server/chunks/ssr/src_presentation_web_b504e3e2._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/src_presentation_web_b5838705._.js +1 -1
  242. package/web/.next/server/chunks/ssr/src_presentation_web_b5838705._.js.map +1 -1
  243. package/web/.next/server/chunks/ssr/src_presentation_web_b6b4baa1._.js +1 -1
  244. package/web/.next/server/chunks/ssr/src_presentation_web_b6b4baa1._.js.map +1 -1
  245. package/web/.next/server/chunks/ssr/src_presentation_web_c3d0de23._.js +1 -1
  246. package/web/.next/server/chunks/ssr/src_presentation_web_c3d0de23._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js +1 -1
  248. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
  250. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  252. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/{src_presentation_web_dc5ba3cf._.js → src_presentation_web_e596fda8._.js} +2 -2
  254. package/web/.next/server/chunks/ssr/{src_presentation_web_dc5ba3cf._.js.map → src_presentation_web_e596fda8._.js.map} +1 -1
  255. package/web/.next/server/chunks/ssr/src_presentation_web_fc29283f._.js +1 -1
  256. package/web/.next/server/chunks/ssr/src_presentation_web_fc29283f._.js.map +1 -1
  257. package/web/.next/server/pages/500.html +2 -2
  258. package/web/.next/server/server-reference-manifest.js +1 -1
  259. package/web/.next/server/server-reference-manifest.json +98 -98
  260. package/web/.next/static/chunks/{1d72f699758c6d3a.js → 089bd320dc4b1575.js} +1 -1
  261. package/web/.next/static/chunks/{913f8613ffba3e5c.js → 0fc17b433aa79b46.js} +1 -1
  262. package/web/.next/static/chunks/105bb00cb34ccd38.js +1 -0
  263. package/web/.next/static/chunks/{d5b120471ecd81c3.js → 18be29465f4a1def.js} +1 -1
  264. package/web/.next/static/chunks/1f42ad4a0931acd3.js +1 -0
  265. package/web/.next/static/chunks/{dddb3a86ceab0299.js → 298594ed8c886cbf.js} +1 -1
  266. package/web/.next/static/chunks/{6d5150e080c53d51.js → 33317caa5c5abd6b.js} +1 -1
  267. package/web/.next/static/chunks/{6ac3de2ae9fd6923.js → 34593f30cd188c4a.js} +1 -1
  268. package/web/.next/static/chunks/{3be081e466e5c38f.js → 37ea114b14bec27f.js} +1 -1
  269. package/web/.next/static/chunks/{5d7f74c25dacc25c.js → 3c250fbfb60ee24f.js} +1 -1
  270. package/web/.next/static/chunks/{79865a986c6f7b78.js → 3c98769f57d9cab5.js} +1 -1
  271. package/web/.next/static/chunks/{88de900956cc7c59.js → 3d2af4aff402ec27.js} +1 -1
  272. package/web/.next/static/chunks/{60fd7ec231b71fe6.js → 424eadec8be0f312.js} +1 -1
  273. package/web/.next/static/chunks/{600304d205fb6d78.js → 4936903aae95a25f.js} +1 -1
  274. package/web/.next/static/chunks/4d47b81085b62d87.js +1 -0
  275. package/web/.next/static/chunks/{127b0c5b93da3ad5.js → 4e2de41996b256eb.js} +1 -1
  276. package/web/.next/static/chunks/{e09a852e65d50ea9.js → 512f87d97c19d83c.js} +1 -1
  277. package/web/.next/static/chunks/{d8a8d0ea290869a7.js → 51de8a6b0bdc70c9.js} +1 -1
  278. package/web/.next/static/chunks/57a7139e142ed273.js +1 -0
  279. package/web/.next/static/chunks/{31eb52265493ef76.js → 61757ff9dcbbd032.js} +1 -1
  280. package/web/.next/static/chunks/674e4d59f39b85e2.js +1 -0
  281. package/web/.next/static/chunks/93ea366bd74183ac.js +1 -0
  282. package/web/.next/static/chunks/{b0658275cec08831.js → ae7430dbb2e98782.js} +1 -1
  283. package/web/.next/static/chunks/{07361c8c12a5843e.js → b2abfb9855755aa4.js} +1 -1
  284. package/web/.next/static/chunks/{eb53dfcd51b8c265.js → c3d369f4301955a1.js} +1 -1
  285. package/web/.next/static/chunks/{07c57742ecdf243e.js → cd057f6e3acdf607.js} +1 -1
  286. package/web/.next/static/chunks/{afc90b9d319294e0.js → d5563287e193adaa.js} +1 -1
  287. package/web/.next/static/chunks/{c777b5c3be68f05b.js → d861a3318a70ff49.js} +1 -1
  288. package/web/.next/static/chunks/{88cebfaa6dd82cc7.js → da7737afc53217ed.js} +3 -3
  289. package/web/.next/static/chunks/{4cecc66a490b21f7.js → e115c6778a53c0b0.js} +1 -1
  290. package/web/.next/static/chunks/{39b106ba3f6b82ea.js → ea904b744cea3776.js} +1 -1
  291. package/web/.next/static/chunks/{6ae0cf4dd1f41683.js → f0c7b0a956112e63.js} +1 -1
  292. package/web/.next/static/chunks/{a59dfab21ca0ba91.js → f31db8ecfc2d481e.js} +1 -1
  293. package/web/.next/static/chunks/{a98de0590c6ebab9.js → f8a21f4841d519ff.js} +1 -1
  294. package/web/.next/static/chunks/00f78bad91244b81.js +0 -1
  295. package/web/.next/static/chunks/55b11c087456741a.js +0 -1
  296. package/web/.next/static/chunks/64b32c7716c3cde3.js +0 -1
  297. package/web/.next/static/chunks/83b6dc76bfe00b00.js +0 -1
  298. package/web/.next/static/chunks/a29ef3fcc3085a7d.js +0 -1
  299. package/web/.next/static/chunks/b6f72b83e6cf64bc.js +0 -1
  300. /package/web/.next/static/{VT3SIc3eQMRpCzfl2igIb → wfZhz3kojQGb8pd6OW9Lk}/_buildManifest.js +0 -0
  301. /package/web/.next/static/{VT3SIc3eQMRpCzfl2igIb → wfZhz3kojQGb8pd6OW9Lk}/_clientMiddlewareManifest.json +0 -0
  302. /package/web/.next/static/{VT3SIc3eQMRpCzfl2igIb → wfZhz3kojQGb8pd6OW9Lk}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/projects/%5Bslug%5D/settings/project-settings-client.tsx","../../../../../../../src/presentation/web/components/features/projects/project-members-panel.tsx","../../../../../../../src/presentation/web/app/actions/data%3A9eb31d%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ac732dc%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ab40316%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A06708f%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A365cc6%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A652df5%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Aa16e15%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Aa99a63%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { ArrowLeft, Settings, Trash2, Plus } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Badge } from '@/components/ui/badge';\nimport type {\n PmProject,\n WorkItemState,\n Label,\n PmProjectMember,\n} from '@shepai/core/domain/generated/output';\nimport { EstimateSettings } from '@/components/pm/estimate-settings/estimate-settings';\nimport { ProjectMembersPanel } from '@/components/features/projects/project-members-panel';\nimport { updatePmProject } from '@/app/actions/update-pm-project';\nimport { deletePmProject } from '@/app/actions/delete-pm-project';\nimport { createWorkItemState, deleteWorkItemState } from '@/app/actions/manage-work-item-states';\nimport { createLabel, deleteLabel } from '@/app/actions/manage-labels';\nimport { addProjectMember } from '@/app/actions/add-project-member';\nimport { removeProjectMember } from '@/app/actions/remove-project-member';\nimport { updateProjectMemberRole } from '@/app/actions/update-project-member-role';\n\nexport interface ProjectSettingsClientProps {\n project: PmProject;\n states: WorkItemState[];\n labels: Label[];\n members?: PmProjectMember[];\n className?: string;\n}\n\nconst STATE_GROUP_COLORS: Record<string, string> = {\n backlog: 'bg-gray-400',\n unstarted: 'bg-blue-400',\n started: 'bg-yellow-400',\n completed: 'bg-green-400',\n cancelled: 'bg-red-400',\n};\n\nexport function ProjectSettingsClient({\n project,\n states: initialStates,\n labels: initialLabels,\n members: initialMembers = [],\n className,\n}: ProjectSettingsClientProps) {\n const router = useRouter();\n const [name, setName] = useState(project.name);\n const [description, setDescription] = useState(project.description ?? '');\n const [saving, setSaving] = useState(false);\n const [states, setStates] = useState<WorkItemState[]>(initialStates);\n const [labels, setLabels] = useState<Label[]>(initialLabels);\n const [newStateName, setNewStateName] = useState('');\n const [newLabelName, setNewLabelName] = useState('');\n const [newLabelColor, setNewLabelColor] = useState('#6366f1');\n const [deleteConfirm, setDeleteConfirm] = useState('');\n\n const handleSaveGeneral = useCallback(async () => {\n setSaving(true);\n await updatePmProject(project.id, {\n name: name.trim(),\n description: description.trim() || undefined,\n });\n setSaving(false);\n }, [project.id, name, description]);\n\n const handleAddState = useCallback(async () => {\n if (!newStateName.trim()) return;\n const result = await createWorkItemState({\n projectId: project.id,\n name: newStateName.trim(),\n color: '#6366f1',\n stateGroup: 'unstarted',\n });\n if (result.state) {\n setStates((prev) => [...prev, result.state!]);\n setNewStateName('');\n }\n }, [project.id, newStateName]);\n\n const handleDeleteState = useCallback(async (stateId: string) => {\n const result = await deleteWorkItemState(stateId);\n if (!result.error) {\n setStates((prev) => prev.filter((s) => s.id !== stateId));\n }\n }, []);\n\n const handleAddLabel = useCallback(async () => {\n if (!newLabelName.trim()) return;\n const result = await createLabel({\n projectId: project.id,\n name: newLabelName.trim(),\n color: newLabelColor,\n });\n if (result.label) {\n setLabels((prev) => [...prev, result.label!]);\n setNewLabelName('');\n }\n }, [project.id, newLabelName, newLabelColor]);\n\n const handleDeleteLabel = useCallback(async (labelId: string) => {\n const result = await deleteLabel(labelId);\n if (!result.error) {\n setLabels((prev) => prev.filter((l) => l.id !== labelId));\n }\n }, []);\n\n const handleDeleteProject = useCallback(async () => {\n if (deleteConfirm !== project.name) return;\n const result = await deletePmProject(project.id);\n if (!result.error) {\n router.push('/projects');\n }\n }, [project.id, project.name, deleteConfirm, router]);\n\n return (\n <div data-testid=\"project-settings\" className={cn('max-w-2xl space-y-8', className)}>\n {/* Header */}\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 <Settings className=\"text-muted-foreground h-4 w-4\" />\n <h1 className=\"text-sm font-bold tracking-tight\">Project Settings</h1>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {project.identifierPrefix}\n </Badge>\n </div>\n\n {/* General Settings */}\n <section className=\"space-y-3\" data-testid=\"general-settings\">\n <h2 className=\"text-xs font-semibold tracking-wide uppercase\">General</h2>\n <div className=\"space-y-2\">\n <div>\n <label className=\"text-muted-foreground mb-1 block text-[10px] font-medium\">\n Project Name\n </label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n className=\"h-8 text-xs\"\n data-testid=\"project-name-input\"\n />\n </div>\n <div>\n <label className=\"text-muted-foreground mb-1 block text-[10px] font-medium\">\n Description\n </label>\n <Input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Optional description\"\n className=\"h-8 text-xs\"\n data-testid=\"project-description-input\"\n />\n </div>\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleSaveGeneral}\n disabled={saving || !name.trim()}\n data-testid=\"save-general-btn\"\n >\n {saving ? 'Saving...' : 'Save Changes'}\n </Button>\n </div>\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Estimate Settings */}\n <section data-testid=\"estimate-settings-section\">\n <EstimateSettings projectId={project.id} currentEstimateType={project.estimateType} />\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Work Item States */}\n <section className=\"space-y-3\" data-testid=\"states-settings\">\n <h2 className=\"text-xs font-semibold tracking-wide uppercase\">Work Item States</h2>\n <div className=\"space-y-1\">\n {states.map((state) => (\n <div\n key={state.id}\n className=\"group flex items-center gap-2 rounded-sm px-2 py-1 text-xs\"\n data-testid={`state-${state.id}`}\n >\n <span\n className=\"h-2.5 w-2.5 shrink-0 rounded-full\"\n style={{ backgroundColor: state.color }}\n />\n <span className=\"flex-1\">{state.name}</span>\n <Badge\n variant=\"outline\"\n className={cn('text-[9px]', STATE_GROUP_COLORS[state.stateGroup] ?? 'bg-gray-400')}\n >\n {state.stateGroup}\n </Badge>\n {state.isDefault ? (\n <Badge variant=\"secondary\" className=\"text-[9px]\">\n default\n </Badge>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive hidden h-5 w-5 p-0 group-hover:flex\"\n onClick={() => handleDeleteState(state.id)}\n title=\"Delete state\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Input\n value={newStateName}\n onChange={(e) => setNewStateName(e.target.value)}\n placeholder=\"New state name\"\n className=\"h-7 flex-1 text-xs\"\n data-testid=\"new-state-input\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAddState();\n }}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleAddState}\n disabled={!newStateName.trim()}\n data-testid=\"add-state-btn\"\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Add\n </Button>\n </div>\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Labels */}\n <section className=\"space-y-3\" data-testid=\"labels-settings\">\n <h2 className=\"text-xs font-semibold tracking-wide uppercase\">Labels</h2>\n {labels.length === 0 ? (\n <p className=\"text-muted-foreground text-[10px]\">No labels yet</p>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {labels.map((label) => (\n <div\n key={label.id}\n className=\"group flex items-center gap-1 rounded-full border px-2 py-0.5\"\n data-testid={`label-${label.id}`}\n >\n <span className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: label.color }} />\n <span className=\"text-[10px]\">{label.name}</span>\n <button\n type=\"button\"\n className=\"text-destructive ml-0.5 hidden text-xs group-hover:inline\"\n onClick={() => handleDeleteLabel(label.id)}\n title=\"Delete label\"\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={newLabelColor}\n onChange={(e) => setNewLabelColor(e.target.value)}\n className=\"h-7 w-7 cursor-pointer rounded border-0 p-0\"\n data-testid=\"new-label-color\"\n />\n <Input\n value={newLabelName}\n onChange={(e) => setNewLabelName(e.target.value)}\n placeholder=\"New label name\"\n className=\"h-7 flex-1 text-xs\"\n data-testid=\"new-label-input\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAddLabel();\n }}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleAddLabel}\n disabled={!newLabelName.trim()}\n data-testid=\"add-label-btn\"\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Add\n </Button>\n </div>\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Members */}\n <section data-testid=\"members-settings\">\n <ProjectMembersPanel\n projectId={project.id}\n members={initialMembers}\n currentUserId=\"\"\n onAddMember={addProjectMember}\n onRemoveMember={removeProjectMember}\n onUpdateRole={updateProjectMemberRole}\n />\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Danger Zone */}\n <section className=\"space-y-3\" data-testid=\"danger-zone\">\n <h2 className=\"text-destructive text-xs font-semibold tracking-wide uppercase\">\n Danger Zone\n </h2>\n <div className=\"border-destructive/20 rounded-md border p-3\">\n <p className=\"mb-2 text-xs\">\n Permanently delete this project and all its work items, cycles, modules, and pages.\n </p>\n <p className=\"text-muted-foreground mb-2 text-[10px]\">\n Type <strong>{project.name}</strong> to confirm.\n </p>\n <div className=\"flex items-center gap-2\">\n <Input\n value={deleteConfirm}\n onChange={(e) => setDeleteConfirm(e.target.value)}\n placeholder={project.name}\n className=\"h-7 flex-1 text-xs\"\n data-testid=\"delete-confirm-input\"\n />\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleDeleteProject}\n disabled={deleteConfirm !== project.name}\n data-testid=\"delete-project-btn\"\n >\n <Trash2 className=\"mr-1 h-3 w-3\" />\n Delete Project\n </Button>\n </div>\n </div>\n </section>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\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 { Badge } from '@/components/ui/badge';\nimport { ProjectRole } from '@shepai/core/domain/generated/output';\nimport type { PmProjectMember } from '@shepai/core/domain/generated/output';\n\nexport interface ProjectMembersPanelProps {\n projectId: string;\n members: PmProjectMember[];\n currentUserId: string;\n onAddMember: (input: {\n projectId: string;\n userId: string;\n role: ProjectRole;\n actorId: string;\n }) => Promise<{ member?: PmProjectMember; error?: string }>;\n onRemoveMember: (input: {\n projectId: string;\n userId: string;\n actorId: string;\n }) => Promise<{ error?: string }>;\n onUpdateRole: (input: {\n projectId: string;\n userId: string;\n newRole: ProjectRole;\n actorId: string;\n }) => Promise<{ error?: string }>;\n}\n\nconst ROLE_COLORS: Record<string, string> = {\n Admin: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300',\n Member: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300',\n Guest: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-300',\n};\n\nexport function ProjectMembersPanel({\n projectId,\n members: initialMembers,\n currentUserId,\n onAddMember,\n onRemoveMember,\n onUpdateRole,\n}: ProjectMembersPanelProps) {\n const [members, setMembers] = useState<PmProjectMember[]>(initialMembers);\n const [newUserId, setNewUserId] = useState('');\n const [newRole, setNewRole] = useState<ProjectRole>(ProjectRole.Member);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const isCurrentUserAdmin = members.some(\n (m) => m.userId === currentUserId && m.role === ProjectRole.Admin\n );\n\n const handleAdd = useCallback(async () => {\n if (!newUserId.trim()) return;\n setLoading(true);\n setError(null);\n\n const result = await onAddMember({\n projectId,\n userId: newUserId.trim(),\n role: newRole,\n actorId: currentUserId,\n });\n\n if (result.error) {\n setError(result.error);\n } else if (result.member) {\n setMembers((prev) => [...prev, result.member!]);\n setNewUserId('');\n setNewRole(ProjectRole.Member);\n }\n setLoading(false);\n }, [newUserId, newRole, projectId, currentUserId, onAddMember]);\n\n const handleRemove = useCallback(\n async (userId: string) => {\n setError(null);\n const result = await onRemoveMember({ projectId, userId, actorId: currentUserId });\n if (result.error) {\n setError(result.error);\n } else {\n setMembers((prev) => prev.filter((m) => m.userId !== userId));\n }\n },\n [projectId, currentUserId, onRemoveMember]\n );\n\n const handleRoleChange = useCallback(\n async (userId: string, role: ProjectRole) => {\n setError(null);\n const result = await onUpdateRole({\n projectId,\n userId,\n newRole: role,\n actorId: currentUserId,\n });\n if (result.error) {\n setError(result.error);\n } else {\n setMembers((prev) => prev.map((m) => (m.userId === userId ? { ...m, role } : m)));\n }\n },\n [projectId, currentUserId, onUpdateRole]\n );\n\n return (\n <div data-testid=\"project-members-panel\" className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">Project Members</h3>\n\n {error ? (\n <div\n data-testid=\"members-error\"\n 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\"\n >\n {error}\n </div>\n ) : null}\n\n <div className=\"divide-y rounded border\">\n {members.map((member) => (\n <div\n key={member.id}\n data-testid={`member-row-${member.userId}`}\n className=\"flex items-center justify-between p-3\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium\">{member.userId}</span>\n <Badge className={ROLE_COLORS[member.role] ?? ''} variant=\"secondary\">\n {member.role}\n </Badge>\n </div>\n\n {isCurrentUserAdmin && member.userId !== currentUserId ? (\n <div className=\"flex items-center gap-2\">\n <Select\n value={member.role}\n onValueChange={(value) => handleRoleChange(member.userId, value as ProjectRole)}\n >\n <SelectTrigger className=\"w-[120px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ProjectRole.Admin}>Admin</SelectItem>\n <SelectItem value={ProjectRole.Member}>Member</SelectItem>\n <SelectItem value={ProjectRole.Guest}>Guest</SelectItem>\n </SelectContent>\n </Select>\n <Button variant=\"destructive\" size=\"sm\" onClick={() => handleRemove(member.userId)}>\n Remove\n </Button>\n </div>\n ) : null}\n </div>\n ))}\n\n {members.length === 0 && (\n <div className=\"text-muted-foreground p-4 text-center text-sm\">\n No members in this project.\n </div>\n )}\n </div>\n\n {isCurrentUserAdmin ? (\n <div data-testid=\"add-member-form\" className=\"flex items-end gap-3 rounded border p-3\">\n <div className=\"flex-1\">\n <Label htmlFor=\"new-user-id\">User ID</Label>\n <Input\n id=\"new-user-id\"\n value={newUserId}\n onChange={(e) => setNewUserId(e.target.value)}\n placeholder=\"Enter user ID\"\n disabled={loading}\n />\n </div>\n <div className=\"w-[140px]\">\n <Label htmlFor=\"new-role\">Role</Label>\n <Select value={newRole} onValueChange={(value) => setNewRole(value as ProjectRole)}>\n <SelectTrigger id=\"new-role\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ProjectRole.Admin}>Admin</SelectItem>\n <SelectItem value={ProjectRole.Member}>Member</SelectItem>\n <SelectItem value={ProjectRole.Guest}>Guest</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <Button onClick={handleAdd} disabled={loading || !newUserId.trim()}>\n {loading ? 'Adding...' : 'Add Member'}\n </Button>\n </div>\n ) : null}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40bbf5ca45ef6fba6523a977e428298c3043eff91d\":\"deletePmProject\"},\"src/presentation/web/app/actions/delete-pm-project.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40bbf5ca45ef6fba6523a977e428298c3043eff91d\",callServer,void 0,findSourceMapURL,\"deletePmProject\");export{$$RSC_SERVER_ACTION_0 as deletePmProject};","/* __next_internal_action_entry_do_not_use__ [{\"408b9903384744977f372935f7410cb0a5d12022fe\":\"createWorkItemState\"},\"src/presentation/web/app/actions/manage-work-item-states.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"408b9903384744977f372935f7410cb0a5d12022fe\",callServer,void 0,findSourceMapURL,\"createWorkItemState\");export{$$RSC_SERVER_ACTION_1 as createWorkItemState};","/* __next_internal_action_entry_do_not_use__ [{\"402cbe9c31259e2e5b3685d644c1cc3facf6ab77bd\":\"deleteWorkItemState\"},\"src/presentation/web/app/actions/manage-work-item-states.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"402cbe9c31259e2e5b3685d644c1cc3facf6ab77bd\",callServer,void 0,findSourceMapURL,\"deleteWorkItemState\");export{$$RSC_SERVER_ACTION_3 as deleteWorkItemState};","/* __next_internal_action_entry_do_not_use__ [{\"40a6e585734909abc7806fe3e4abf486b84098a965\":\"createLabel\"},\"src/presentation/web/app/actions/manage-labels.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40a6e585734909abc7806fe3e4abf486b84098a965\",callServer,void 0,findSourceMapURL,\"createLabel\");export{$$RSC_SERVER_ACTION_1 as createLabel};","/* __next_internal_action_entry_do_not_use__ [{\"4087778414ba317af503e392f0a67168d7f26310f1\":\"deleteLabel\"},\"src/presentation/web/app/actions/manage-labels.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"4087778414ba317af503e392f0a67168d7f26310f1\",callServer,void 0,findSourceMapURL,\"deleteLabel\");export{$$RSC_SERVER_ACTION_3 as deleteLabel};","/* __next_internal_action_entry_do_not_use__ [{\"40824c2eae4fc3d15b2e75c79ccc3c1504d5340615\":\"addProjectMember\"},\"src/presentation/web/app/actions/add-project-member.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40824c2eae4fc3d15b2e75c79ccc3c1504d5340615\",callServer,void 0,findSourceMapURL,\"addProjectMember\");export{$$RSC_SERVER_ACTION_0 as addProjectMember};","/* __next_internal_action_entry_do_not_use__ [{\"40629586d982896c790428e5817031237333ac913f\":\"removeProjectMember\"},\"src/presentation/web/app/actions/remove-project-member.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40629586d982896c790428e5817031237333ac913f\",callServer,void 0,findSourceMapURL,\"removeProjectMember\");export{$$RSC_SERVER_ACTION_0 as removeProjectMember};","/* __next_internal_action_entry_do_not_use__ [{\"40bdd681b95ce4a5639fbd1fab105b1ee879cfd741\":\"updateProjectMemberRole\"},\"src/presentation/web/app/actions/update-project-member-role.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40bdd681b95ce4a5639fbd1fab105b1ee879cfd741\",callServer,void 0,findSourceMapURL,\"updateProjectMemberRole\");export{$$RSC_SERVER_ACTION_0 as updateProjectMemberRole};"],"names":[],"mappings":"0DAEA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAOA,EAAA,EAAA,CAAA,CAAA,QCVA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAQA,EAAA,EAAA,CAAA,CAAA,QA0BA,IAAM,EAAsC,CAC1C,MAAO,gEACP,OAAQ,oEACR,MAAO,+DACT,EAEO,SAAS,EAAoB,WAClC,CAAS,CACT,QAAS,CAAc,eACvB,CAAa,aACb,CAAW,gBACX,CAAc,cACd,CAAY,CACa,EACzB,GAAM,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAoB,GACpD,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IACrC,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAc,EAAA,WAAW,CAAC,MAAM,EAChE,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAwB,MAC5C,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GAEjC,EAAqB,EAAQ,IAAI,CACrC,AAAC,GAAM,EAAE,MAAM,GAAK,GAAiB,EAAE,IAAI,GAAK,EAAA,WAAW,CAAC,KAAK,EAG7D,EAAY,CAAA,EAAA,EAAA,WAAW,AAAX,EAAY,UAC5B,GAAI,CAAC,EAAU,IAAI,GAAI,OACvB,GAAW,GACX,EAAS,MAET,IAAM,EAAS,MAAM,EAAY,WAC/B,EACA,OAAQ,EAAU,IAAI,GACtB,KAAM,EACN,QAAS,CACX,GAEI,EAAO,KAAK,CACd,CADgB,CACP,EAAO,KAAK,EACZ,EAAO,MAAM,EAAE,CACxB,EAAW,AAAC,GAAS,IAAI,EAAM,EAAO,MAAM,CAAE,EAC9C,EAAa,IACb,EAAW,EAAA,WAAW,CAAC,MAAM,GAE/B,GAAW,EACb,EAAG,CAAC,EAAW,EAAS,EAAW,EAAe,EAAY,EAExD,EAAe,CAAA,EAAA,EAAA,WAAA,AAAW,EAC9B,MAAO,IACL,EAAS,MACT,IAAM,EAAS,MAAM,EAAe,WAAE,SAAW,EAAQ,QAAS,CAAc,GAC5E,EAAO,KAAK,CACd,CADgB,CACP,EAAO,KAAK,EAErB,EAAW,AAAC,GAAS,EAAK,MAAM,CAAC,AAAC,GAAM,EAAE,MAAM,GAAK,GAEzD,EACA,CAAC,EAAW,EAAe,EAAe,EAGtC,EAAmB,CAAA,EAAA,EAAA,WAAA,AAAW,EAClC,MAAO,EAAgB,KACrB,EAAS,MACT,IAAM,EAAS,MAAM,EAAa,CAChC,YACA,SACA,QAAS,EACT,QAAS,CACX,GACI,EAAO,KAAK,CACd,CADgB,CACP,EAAO,KAAK,EAErB,EAAW,AAAC,GAAS,EAAK,GAAG,CAAC,AAAC,GAAO,EAAE,MAAM,GAAK,EAAS,CAAE,GAAG,CAAC,MAAE,CAAK,EAAI,GAEjF,EACA,CAAC,EAAW,EAAe,EAAa,EAG1C,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,cAAY,wBAAwB,UAAU,sBACjD,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,iCAAwB,oBAErC,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,cAAY,gBACZ,UAAU,kIAET,IAED,KAEJ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACZ,EAAQ,GAAG,CAAC,AAAC,GACZ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAEC,cAAa,CAAC,WAAW,EAAE,EAAO,MAAM,CAAA,CAAE,CAC1C,UAAU,kDAEV,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,+BAAuB,EAAO,MAAM,GACpD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAW,CAAW,CAAC,EAAO,IAAI,CAAC,EAAI,GAAI,QAAQ,qBACvD,EAAO,IAAI,MAIf,GAAsB,EAAO,MAAM,GAAK,EACvC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,EAAO,IAAI,CAClB,cAAe,AAAC,GAAU,EAAiB,EAAO,MAAM,CAAE,aAE1D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,qBACvB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,WACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAO,EAAA,WAAW,CAAC,KAAK,UAAE,UACtC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAO,EAAA,WAAW,CAAC,MAAM,UAAE,WACvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAO,EAAA,WAAW,CAAC,KAAK,UAAE,gBAG1C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAQ,cAAc,KAAK,KAAK,QAAS,IAAM,EAAa,EAAO,MAAM,WAAG,cAIpF,OA9BC,EAAO,EAAE,GAkCE,AAAnB,MAAQ,MAAM,EACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yDAAgD,mCAMlE,EACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,cAAY,kBAAkB,UAAU,oDAC3C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,uBAAc,YAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,GAAG,cACH,MAAO,EACP,SAAW,AAAD,GAAO,EAAa,EAAE,MAAM,CAAC,KAAK,EAC5C,YAAY,gBACZ,SAAU,OAGd,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,oBAAW,SAC1B,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CAAC,MAAO,EAAS,cAAe,AAAC,GAAU,EAAW,aAC3D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,GAAG,oBAChB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,WACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAO,EAAA,WAAW,CAAC,KAAK,UAAE,UACtC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAO,EAAA,WAAW,CAAC,MAAM,UAAE,WACvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAO,EAAA,WAAW,CAAC,KAAK,UAAE,mBAI5C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAS,EAAW,SAAU,GAAW,CAAC,EAAU,IAAI,YAC7D,EAAU,YAAc,kBAG3B,OAGV,CD7LA,IAAA,EAAA,EAAA,CAAA,CAAA,QEjB6M,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,mBCA/H,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,uBCAzI,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,uBCA3J,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,eCAzI,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAkC,AAArB,EAAsB,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,eCA/H,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAkC,AAArB,EAAsB,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,oBCAnI,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAkC,AAArB,EAAsB,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,uBCAhI,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,2BTiC7c,EAA6C,CACjD,QAAS,cACT,UAAW,cACX,QAAS,gBACT,UAAW,eACX,UAAW,YACb,EAEO,SAAS,EAAsB,SACpC,CAAO,CACP,OAAQ,CAAa,CACrB,OAAQ,CAAa,CACrB,QAAS,EAAiB,EAAE,WAC5B,CAAS,CACkB,EAC3B,IAAM,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,EAAQ,IAAI,EACvC,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,EAAQ,WAAW,EAAI,IAChE,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GAC/B,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAA0B,GAChD,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAU,GACxC,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC3C,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC3C,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,WAC7C,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAE7C,EAAoB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,UACpC,GAAU,GACV,MAAM,CAAA,EAAA,EAAA,eAAA,AAAe,EAAC,EAAQ,EAAE,CAAE,CAChC,KAAM,EAAK,IAAI,GACf,YAAa,EAAY,IAAI,IAAM,MACrC,GACA,GAAU,EACZ,EAAG,CAAC,EAAQ,EAAE,CAAE,EAAM,EAAY,EAE5B,EAAiB,CAAA,EAAA,EAAA,WAAW,AAAX,EAAY,UACjC,GAAI,CAAC,EAAa,IAAI,GAAI,OAC1B,IAAM,EAAS,MAAM,EAAoB,CACvC,UAAW,EAAQ,EAAE,CACrB,KAAM,EAAa,IAAI,GACvB,MAAO,UACP,WAAY,WACd,GACI,EAAO,KAAK,EAAE,CAChB,EAAU,AAAC,GAAS,IAAI,EAAM,EAAO,KAAK,CAAE,EAC5C,EAAgB,IAEpB,EAAG,CAAC,EAAQ,EAAE,CAAE,EAAa,EAEvB,EAAoB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,MAAO,IAEvC,AAAC,CADU,MAAM,EAAoB,EAAA,EAC7B,KAAK,EACf,AADiB,EACN,AAAD,GAAU,EAAK,MAAM,CAAC,AAAC,GAAM,EAAE,EAAE,GAAK,GAEpD,EAAG,EAAE,EAEC,EAAiB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,UACjC,GAAI,CAAC,EAAa,IAAI,GAAI,OAC1B,IAAM,EAAS,MAAM,EAAY,CAC/B,UAAW,EAAQ,EAAE,CACrB,KAAM,EAAa,IAAI,GACvB,MAAO,CACT,GACI,EAAO,KAAK,EAAE,CAChB,EAAU,AAAC,GAAS,IAAI,EAAM,EAAO,KAAK,CAAE,EAC5C,EAAgB,IAEpB,EAAG,CAAC,EAAQ,EAAE,CAAE,EAAc,EAAc,EAEtC,EAAoB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,MAAO,IAEvC,AAAC,CADU,MAAM,EAAY,EAAA,EACrB,KAAK,EAAE,AACjB,EAAU,AAAC,GAAS,EAAK,MAAM,CAAC,AAAC,GAAM,EAAE,EAAE,GAAK,GAEpD,EAAG,EAAE,EAEC,EAAsB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,UACtC,AAAI,IAAkB,EAAQ,IAAI,EAAE,AAE/B,CADU,MAAM,EAAgB,EAAQ,GAAE,EACnC,KAAK,EACf,AADiB,EACV,IAAI,CAAC,YAEhB,EAAG,CAAC,EAAQ,EAAE,CAAE,EAAQ,IAAI,CAAE,EAAe,EAAO,EAEpD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,cAAY,mBAAmB,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,sBAAuB,aAEvE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,UAAU,cACV,QAAS,IAAM,EAAO,IAAI,CAAC,CAAC,UAAU,EAAE,EAAQ,IAAI,CAAA,CAAE,EACtD,cAAY,2BAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,cAEvB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CAAC,UAAU,kCACpB,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,4CAAmC,qBACjD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,UAAU,UAAU,uBAChC,EAAQ,gBAAgB,MAK7B,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,YAAY,cAAY,6BACzC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,yDAAgD,YAC9D,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAU,oEAA2D,iBAG5E,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,MAAO,EACP,SAAU,AAAC,GAAM,EAAQ,EAAE,MAAM,CAAC,KAAK,EACvC,UAAU,cACV,cAAY,0BAGhB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAU,oEAA2D,gBAG5E,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,MAAO,EACP,SAAU,AAAC,GAAM,EAAe,EAAE,MAAM,CAAC,KAAK,EAC9C,YAAY,uBACZ,UAAU,cACV,cAAY,iCAGhB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAK,KACL,UAAU,cACV,QAAS,EACT,SAAU,GAAU,CAAC,EAAK,IAAI,GAC9B,cAAY,4BAEX,EAAS,YAAc,uBAK9B,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,kBAGd,CAAA,EAAA,EAAA,GAAA,EAAC,UAAA,CAAQ,cAAY,qCACnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,gBAAgB,CAAA,CAAC,UAAW,EAAQ,EAAE,CAAE,oBAAqB,EAAQ,YAAY,KAGpF,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,kBAGd,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,YAAY,cAAY,4BACzC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,yDAAgD,qBAC9D,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,qBACZ,EAAO,GAAG,CAAC,AAAC,GACX,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAEC,UAAU,6DACV,cAAa,CAAC,MAAM,EAAE,EAAM,EAAE,CAAA,CAAE,WAEhC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACC,UAAU,oCACV,MAAO,CAAE,gBAAiB,EAAM,KAAK,AAAC,IAExC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,kBAAU,EAAM,IAAI,GACpC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,QAAQ,UACR,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,aAAc,CAAkB,CAAC,EAAM,UAAU,CAAC,EAAI,wBAEnE,EAAM,UAAU,GAElB,EAAM,SAAS,CACd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,YAAY,UAAU,sBAAa,YAIlD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,UAAU,uDACV,QAAS,IAAM,EAAkB,EAAM,EAAE,EACzC,MAAM,wBAEN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,gBA3BjB,EAAM,EAAE,KAiCnB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,MAAO,EACP,SAAU,AAAC,GAAM,EAAgB,EAAE,MAAM,CAAC,KAAK,EAC/C,YAAY,iBACZ,UAAU,qBACV,cAAY,kBACZ,UAAW,AAAC,IACI,UAAV,EAAE,GAAG,EAAc,GACzB,IAEF,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,UAAU,cACV,QAAS,EACT,SAAU,CAAC,EAAa,IAAI,GAC5B,cAAY,0BAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,CAAC,UAAU,iBAAiB,eAMvC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,kBAGd,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,YAAY,cAAY,4BACzC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,yDAAgD,WAC3C,IAAlB,EAAO,MAAM,CACZ,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,6CAAoC,kBAEjD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,kCACZ,EAAO,GAAG,CAAC,AAAC,GACX,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAEC,UAAU,gEACV,cAAa,CAAC,MAAM,EAAE,EAAM,EAAE,CAAA,CAAE,WAEhC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uBAAuB,MAAO,CAAE,gBAAiB,EAAM,KAAK,AAAC,IAC7E,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uBAAe,EAAM,IAAI,GACzC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,UAAU,4DACV,QAAS,IAAM,EAAkB,EAAM,EAAE,EACzC,MAAM,wBACP,QAXI,EAAM,EAAE,KAkBrB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAK,QACL,MAAO,EACP,SAAU,AAAC,GAAM,EAAiB,EAAE,MAAM,CAAC,KAAK,EAChD,UAAU,8CACV,cAAY,oBAEd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,MAAO,EACP,SAAU,AAAC,GAAM,EAAgB,EAAE,MAAM,CAAC,KAAK,EAC/C,YAAY,iBACZ,UAAU,qBACV,cAAY,kBACZ,UAAW,AAAC,IACI,UAAV,EAAE,GAAG,EAAc,GACzB,IAEF,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,UAAU,cACV,QAAS,EACT,SAAU,CAAC,EAAa,IAAI,GAC5B,cAAY,0BAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,CAAC,UAAU,iBAAiB,eAMvC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,kBAGd,CAAA,EAAA,EAAA,GAAA,EAAC,UAAA,CAAQ,cAAY,4BACnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,UAAW,EAAQ,EAAE,CACrB,QAAS,EACT,cAAc,GACd,YAAa,EACb,eAAgB,EAChB,aAAc,MAIlB,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,kBAGd,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,YAAY,cAAY,wBACzC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,0EAAiE,gBAG/E,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wDACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,wBAAe,wFAG5B,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,mDAAyC,QAC/C,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,UAAQ,EAAQ,IAAI,GAAU,kBAEtC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,MAAO,EACP,SAAU,AAAC,GAAM,EAAiB,EAAE,MAAM,CAAC,KAAK,EAChD,YAAa,EAAQ,IAAI,CACzB,UAAU,qBACV,cAAY,yBAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,cACR,KAAK,KACL,UAAU,cACV,QAAS,EACT,SAAU,IAAkB,EAAQ,IAAI,CACxC,cAAY,+BAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,iBAAiB,+BAQjD"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/projects/%5Bslug%5D/settings/project-settings-client.tsx","../../../../../../../src/presentation/web/components/features/projects/project-members-panel.tsx","../../../../../../../src/presentation/web/app/actions/data%3A03d4eb%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A525be0%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ace4709%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ae78845%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ae86b0f%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ae6ab4a%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ae123ba%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A8c541f%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { ArrowLeft, Settings, Trash2, Plus } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Badge } from '@/components/ui/badge';\nimport type {\n PmProject,\n WorkItemState,\n Label,\n PmProjectMember,\n} from '@shepai/core/domain/generated/output';\nimport { EstimateSettings } from '@/components/pm/estimate-settings/estimate-settings';\nimport { ProjectMembersPanel } from '@/components/features/projects/project-members-panel';\nimport { updatePmProject } from '@/app/actions/update-pm-project';\nimport { deletePmProject } from '@/app/actions/delete-pm-project';\nimport { createWorkItemState, deleteWorkItemState } from '@/app/actions/manage-work-item-states';\nimport { createLabel, deleteLabel } from '@/app/actions/manage-labels';\nimport { addProjectMember } from '@/app/actions/add-project-member';\nimport { removeProjectMember } from '@/app/actions/remove-project-member';\nimport { updateProjectMemberRole } from '@/app/actions/update-project-member-role';\n\nexport interface ProjectSettingsClientProps {\n project: PmProject;\n states: WorkItemState[];\n labels: Label[];\n members?: PmProjectMember[];\n className?: string;\n}\n\nconst STATE_GROUP_COLORS: Record<string, string> = {\n backlog: 'bg-gray-400',\n unstarted: 'bg-blue-400',\n started: 'bg-yellow-400',\n completed: 'bg-green-400',\n cancelled: 'bg-red-400',\n};\n\nexport function ProjectSettingsClient({\n project,\n states: initialStates,\n labels: initialLabels,\n members: initialMembers = [],\n className,\n}: ProjectSettingsClientProps) {\n const router = useRouter();\n const [name, setName] = useState(project.name);\n const [description, setDescription] = useState(project.description ?? '');\n const [saving, setSaving] = useState(false);\n const [states, setStates] = useState<WorkItemState[]>(initialStates);\n const [labels, setLabels] = useState<Label[]>(initialLabels);\n const [newStateName, setNewStateName] = useState('');\n const [newLabelName, setNewLabelName] = useState('');\n const [newLabelColor, setNewLabelColor] = useState('#6366f1');\n const [deleteConfirm, setDeleteConfirm] = useState('');\n\n const handleSaveGeneral = useCallback(async () => {\n setSaving(true);\n await updatePmProject(project.id, {\n name: name.trim(),\n description: description.trim() || undefined,\n });\n setSaving(false);\n }, [project.id, name, description]);\n\n const handleAddState = useCallback(async () => {\n if (!newStateName.trim()) return;\n const result = await createWorkItemState({\n projectId: project.id,\n name: newStateName.trim(),\n color: '#6366f1',\n stateGroup: 'unstarted',\n });\n if (result.state) {\n setStates((prev) => [...prev, result.state!]);\n setNewStateName('');\n }\n }, [project.id, newStateName]);\n\n const handleDeleteState = useCallback(async (stateId: string) => {\n const result = await deleteWorkItemState(stateId);\n if (!result.error) {\n setStates((prev) => prev.filter((s) => s.id !== stateId));\n }\n }, []);\n\n const handleAddLabel = useCallback(async () => {\n if (!newLabelName.trim()) return;\n const result = await createLabel({\n projectId: project.id,\n name: newLabelName.trim(),\n color: newLabelColor,\n });\n if (result.label) {\n setLabels((prev) => [...prev, result.label!]);\n setNewLabelName('');\n }\n }, [project.id, newLabelName, newLabelColor]);\n\n const handleDeleteLabel = useCallback(async (labelId: string) => {\n const result = await deleteLabel(labelId);\n if (!result.error) {\n setLabels((prev) => prev.filter((l) => l.id !== labelId));\n }\n }, []);\n\n const handleDeleteProject = useCallback(async () => {\n if (deleteConfirm !== project.name) return;\n const result = await deletePmProject(project.id);\n if (!result.error) {\n router.push('/projects');\n }\n }, [project.id, project.name, deleteConfirm, router]);\n\n return (\n <div data-testid=\"project-settings\" className={cn('max-w-2xl space-y-8', className)}>\n {/* Header */}\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 <Settings className=\"text-muted-foreground h-4 w-4\" />\n <h1 className=\"text-sm font-bold tracking-tight\">Project Settings</h1>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {project.identifierPrefix}\n </Badge>\n </div>\n\n {/* General Settings */}\n <section className=\"space-y-3\" data-testid=\"general-settings\">\n <h2 className=\"text-xs font-semibold tracking-wide uppercase\">General</h2>\n <div className=\"space-y-2\">\n <div>\n <label className=\"text-muted-foreground mb-1 block text-[10px] font-medium\">\n Project Name\n </label>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n className=\"h-8 text-xs\"\n data-testid=\"project-name-input\"\n />\n </div>\n <div>\n <label className=\"text-muted-foreground mb-1 block text-[10px] font-medium\">\n Description\n </label>\n <Input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Optional description\"\n className=\"h-8 text-xs\"\n data-testid=\"project-description-input\"\n />\n </div>\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleSaveGeneral}\n disabled={saving || !name.trim()}\n data-testid=\"save-general-btn\"\n >\n {saving ? 'Saving...' : 'Save Changes'}\n </Button>\n </div>\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Estimate Settings */}\n <section data-testid=\"estimate-settings-section\">\n <EstimateSettings projectId={project.id} currentEstimateType={project.estimateType} />\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Work Item States */}\n <section className=\"space-y-3\" data-testid=\"states-settings\">\n <h2 className=\"text-xs font-semibold tracking-wide uppercase\">Work Item States</h2>\n <div className=\"space-y-1\">\n {states.map((state) => (\n <div\n key={state.id}\n className=\"group flex items-center gap-2 rounded-sm px-2 py-1 text-xs\"\n data-testid={`state-${state.id}`}\n >\n <span\n className=\"h-2.5 w-2.5 shrink-0 rounded-full\"\n style={{ backgroundColor: state.color }}\n />\n <span className=\"flex-1\">{state.name}</span>\n <Badge\n variant=\"outline\"\n className={cn('text-[9px]', STATE_GROUP_COLORS[state.stateGroup] ?? 'bg-gray-400')}\n >\n {state.stateGroup}\n </Badge>\n {state.isDefault ? (\n <Badge variant=\"secondary\" className=\"text-[9px]\">\n default\n </Badge>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive hidden h-5 w-5 p-0 group-hover:flex\"\n onClick={() => handleDeleteState(state.id)}\n title=\"Delete state\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Input\n value={newStateName}\n onChange={(e) => setNewStateName(e.target.value)}\n placeholder=\"New state name\"\n className=\"h-7 flex-1 text-xs\"\n data-testid=\"new-state-input\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAddState();\n }}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleAddState}\n disabled={!newStateName.trim()}\n data-testid=\"add-state-btn\"\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Add\n </Button>\n </div>\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Labels */}\n <section className=\"space-y-3\" data-testid=\"labels-settings\">\n <h2 className=\"text-xs font-semibold tracking-wide uppercase\">Labels</h2>\n {labels.length === 0 ? (\n <p className=\"text-muted-foreground text-[10px]\">No labels yet</p>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {labels.map((label) => (\n <div\n key={label.id}\n className=\"group flex items-center gap-1 rounded-full border px-2 py-0.5\"\n data-testid={`label-${label.id}`}\n >\n <span className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: label.color }} />\n <span className=\"text-[10px]\">{label.name}</span>\n <button\n type=\"button\"\n className=\"text-destructive ml-0.5 hidden text-xs group-hover:inline\"\n onClick={() => handleDeleteLabel(label.id)}\n title=\"Delete label\"\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={newLabelColor}\n onChange={(e) => setNewLabelColor(e.target.value)}\n className=\"h-7 w-7 cursor-pointer rounded border-0 p-0\"\n data-testid=\"new-label-color\"\n />\n <Input\n value={newLabelName}\n onChange={(e) => setNewLabelName(e.target.value)}\n placeholder=\"New label name\"\n className=\"h-7 flex-1 text-xs\"\n data-testid=\"new-label-input\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAddLabel();\n }}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleAddLabel}\n disabled={!newLabelName.trim()}\n data-testid=\"add-label-btn\"\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n Add\n </Button>\n </div>\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Members */}\n <section data-testid=\"members-settings\">\n <ProjectMembersPanel\n projectId={project.id}\n members={initialMembers}\n currentUserId=\"\"\n onAddMember={addProjectMember}\n onRemoveMember={removeProjectMember}\n onUpdateRole={updateProjectMemberRole}\n />\n </section>\n\n <hr className=\"border-border\" />\n\n {/* Danger Zone */}\n <section className=\"space-y-3\" data-testid=\"danger-zone\">\n <h2 className=\"text-destructive text-xs font-semibold tracking-wide uppercase\">\n Danger Zone\n </h2>\n <div className=\"border-destructive/20 rounded-md border p-3\">\n <p className=\"mb-2 text-xs\">\n Permanently delete this project and all its work items, cycles, modules, and pages.\n </p>\n <p className=\"text-muted-foreground mb-2 text-[10px]\">\n Type <strong>{project.name}</strong> to confirm.\n </p>\n <div className=\"flex items-center gap-2\">\n <Input\n value={deleteConfirm}\n onChange={(e) => setDeleteConfirm(e.target.value)}\n placeholder={project.name}\n className=\"h-7 flex-1 text-xs\"\n data-testid=\"delete-confirm-input\"\n />\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={handleDeleteProject}\n disabled={deleteConfirm !== project.name}\n data-testid=\"delete-project-btn\"\n >\n <Trash2 className=\"mr-1 h-3 w-3\" />\n Delete Project\n </Button>\n </div>\n </div>\n </section>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\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 { Badge } from '@/components/ui/badge';\nimport { ProjectRole } from '@shepai/core/domain/generated/output';\nimport type { PmProjectMember } from '@shepai/core/domain/generated/output';\n\nexport interface ProjectMembersPanelProps {\n projectId: string;\n members: PmProjectMember[];\n currentUserId: string;\n onAddMember: (input: {\n projectId: string;\n userId: string;\n role: ProjectRole;\n actorId: string;\n }) => Promise<{ member?: PmProjectMember; error?: string }>;\n onRemoveMember: (input: {\n projectId: string;\n userId: string;\n actorId: string;\n }) => Promise<{ error?: string }>;\n onUpdateRole: (input: {\n projectId: string;\n userId: string;\n newRole: ProjectRole;\n actorId: string;\n }) => Promise<{ error?: string }>;\n}\n\nconst ROLE_COLORS: Record<string, string> = {\n Admin: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300',\n Member: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300',\n Guest: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-300',\n};\n\nexport function ProjectMembersPanel({\n projectId,\n members: initialMembers,\n currentUserId,\n onAddMember,\n onRemoveMember,\n onUpdateRole,\n}: ProjectMembersPanelProps) {\n const [members, setMembers] = useState<PmProjectMember[]>(initialMembers);\n const [newUserId, setNewUserId] = useState('');\n const [newRole, setNewRole] = useState<ProjectRole>(ProjectRole.Member);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const isCurrentUserAdmin = members.some(\n (m) => m.userId === currentUserId && m.role === ProjectRole.Admin\n );\n\n const handleAdd = useCallback(async () => {\n if (!newUserId.trim()) return;\n setLoading(true);\n setError(null);\n\n const result = await onAddMember({\n projectId,\n userId: newUserId.trim(),\n role: newRole,\n actorId: currentUserId,\n });\n\n if (result.error) {\n setError(result.error);\n } else if (result.member) {\n setMembers((prev) => [...prev, result.member!]);\n setNewUserId('');\n setNewRole(ProjectRole.Member);\n }\n setLoading(false);\n }, [newUserId, newRole, projectId, currentUserId, onAddMember]);\n\n const handleRemove = useCallback(\n async (userId: string) => {\n setError(null);\n const result = await onRemoveMember({ projectId, userId, actorId: currentUserId });\n if (result.error) {\n setError(result.error);\n } else {\n setMembers((prev) => prev.filter((m) => m.userId !== userId));\n }\n },\n [projectId, currentUserId, onRemoveMember]\n );\n\n const handleRoleChange = useCallback(\n async (userId: string, role: ProjectRole) => {\n setError(null);\n const result = await onUpdateRole({\n projectId,\n userId,\n newRole: role,\n actorId: currentUserId,\n });\n if (result.error) {\n setError(result.error);\n } else {\n setMembers((prev) => prev.map((m) => (m.userId === userId ? { ...m, role } : m)));\n }\n },\n [projectId, currentUserId, onUpdateRole]\n );\n\n return (\n <div data-testid=\"project-members-panel\" className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">Project Members</h3>\n\n {error ? (\n <div\n data-testid=\"members-error\"\n 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\"\n >\n {error}\n </div>\n ) : null}\n\n <div className=\"divide-y rounded border\">\n {members.map((member) => (\n <div\n key={member.id}\n data-testid={`member-row-${member.userId}`}\n className=\"flex items-center justify-between p-3\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium\">{member.userId}</span>\n <Badge className={ROLE_COLORS[member.role] ?? ''} variant=\"secondary\">\n {member.role}\n </Badge>\n </div>\n\n {isCurrentUserAdmin && member.userId !== currentUserId ? (\n <div className=\"flex items-center gap-2\">\n <Select\n value={member.role}\n onValueChange={(value) => handleRoleChange(member.userId, value as ProjectRole)}\n >\n <SelectTrigger className=\"w-[120px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ProjectRole.Admin}>Admin</SelectItem>\n <SelectItem value={ProjectRole.Member}>Member</SelectItem>\n <SelectItem value={ProjectRole.Guest}>Guest</SelectItem>\n </SelectContent>\n </Select>\n <Button variant=\"destructive\" size=\"sm\" onClick={() => handleRemove(member.userId)}>\n Remove\n </Button>\n </div>\n ) : null}\n </div>\n ))}\n\n {members.length === 0 && (\n <div className=\"text-muted-foreground p-4 text-center text-sm\">\n No members in this project.\n </div>\n )}\n </div>\n\n {isCurrentUserAdmin ? (\n <div data-testid=\"add-member-form\" className=\"flex items-end gap-3 rounded border p-3\">\n <div className=\"flex-1\">\n <Label htmlFor=\"new-user-id\">User ID</Label>\n <Input\n id=\"new-user-id\"\n value={newUserId}\n onChange={(e) => setNewUserId(e.target.value)}\n placeholder=\"Enter user ID\"\n disabled={loading}\n />\n </div>\n <div className=\"w-[140px]\">\n <Label htmlFor=\"new-role\">Role</Label>\n <Select value={newRole} onValueChange={(value) => setNewRole(value as ProjectRole)}>\n <SelectTrigger id=\"new-role\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ProjectRole.Admin}>Admin</SelectItem>\n <SelectItem value={ProjectRole.Member}>Member</SelectItem>\n <SelectItem value={ProjectRole.Guest}>Guest</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <Button onClick={handleAdd} disabled={loading || !newUserId.trim()}>\n {loading ? 'Adding...' : 'Add Member'}\n </Button>\n </div>\n ) : null}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40706ef1d2a5bdba333f25a03ff7c551522a1cbe84\":\"deletePmProject\"},\"src/presentation/web/app/actions/delete-pm-project.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40706ef1d2a5bdba333f25a03ff7c551522a1cbe84\",callServer,void 0,findSourceMapURL,\"deletePmProject\");export{$$RSC_SERVER_ACTION_0 as deletePmProject};","/* __next_internal_action_entry_do_not_use__ [{\"40d65d73615b06b97c1adaf7b1e6d0bdddc87f34ff\":\"createWorkItemState\"},\"src/presentation/web/app/actions/manage-work-item-states.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40d65d73615b06b97c1adaf7b1e6d0bdddc87f34ff\",callServer,void 0,findSourceMapURL,\"createWorkItemState\");export{$$RSC_SERVER_ACTION_1 as createWorkItemState};","/* __next_internal_action_entry_do_not_use__ [{\"40d0c4b0c519c909d23fed9a21063a4ba80a98714f\":\"deleteWorkItemState\"},\"src/presentation/web/app/actions/manage-work-item-states.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40d0c4b0c519c909d23fed9a21063a4ba80a98714f\",callServer,void 0,findSourceMapURL,\"deleteWorkItemState\");export{$$RSC_SERVER_ACTION_3 as deleteWorkItemState};","/* __next_internal_action_entry_do_not_use__ [{\"40f7417e78cbb185a8dbf33a3c24bbbba3c12cbb0d\":\"createLabel\"},\"src/presentation/web/app/actions/manage-labels.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40f7417e78cbb185a8dbf33a3c24bbbba3c12cbb0d\",callServer,void 0,findSourceMapURL,\"createLabel\");export{$$RSC_SERVER_ACTION_1 as createLabel};","/* __next_internal_action_entry_do_not_use__ [{\"40cfda6b5de14df88bb3c179fb2298462a2511c2ed\":\"deleteLabel\"},\"src/presentation/web/app/actions/manage-labels.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40cfda6b5de14df88bb3c179fb2298462a2511c2ed\",callServer,void 0,findSourceMapURL,\"deleteLabel\");export{$$RSC_SERVER_ACTION_3 as deleteLabel};","/* __next_internal_action_entry_do_not_use__ [{\"402641aebbc03c55604b6cccc94eeba5cb39c60b7f\":\"addProjectMember\"},\"src/presentation/web/app/actions/add-project-member.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402641aebbc03c55604b6cccc94eeba5cb39c60b7f\",callServer,void 0,findSourceMapURL,\"addProjectMember\");export{$$RSC_SERVER_ACTION_0 as addProjectMember};","/* __next_internal_action_entry_do_not_use__ [{\"4039b95ed651f9acebc45fd31c4923a83abb53417b\":\"removeProjectMember\"},\"src/presentation/web/app/actions/remove-project-member.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4039b95ed651f9acebc45fd31c4923a83abb53417b\",callServer,void 0,findSourceMapURL,\"removeProjectMember\");export{$$RSC_SERVER_ACTION_0 as removeProjectMember};","/* __next_internal_action_entry_do_not_use__ [{\"405b16f4a233f75276939a76a99f7aec8896fc3b27\":\"updateProjectMemberRole\"},\"src/presentation/web/app/actions/update-project-member-role.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"405b16f4a233f75276939a76a99f7aec8896fc3b27\",callServer,void 0,findSourceMapURL,\"updateProjectMemberRole\");export{$$RSC_SERVER_ACTION_0 as updateProjectMemberRole};"],"names":[],"mappings":"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"}