@chorus-aidlc/chorus 0.6.2 → 0.6.3

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 (177) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +140 -140
  3. package/.next/standalone/.next/app-path-routes-manifest.json +30 -30
  4. package/.next/standalone/.next/build-manifest.json +2 -2
  5. package/.next/standalone/.next/prerender-manifest.json +24 -24
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  41. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  42. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  45. package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  48. package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/admin.html +1 -1
  51. package/.next/standalone/.next/server/app/admin.rsc +1 -1
  52. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  72. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  96. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  104. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  118. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  124. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/index.html +1 -1
  135. package/.next/standalone/.next/server/app/index.rsc +1 -1
  136. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  138. package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
  139. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  141. package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
  142. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  145. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +1 -1
  146. package/.next/standalone/.next/server/app/login.html +1 -1
  147. package/.next/standalone/.next/server/app/login.rsc +1 -1
  148. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  150. package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
  151. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/projects.html +1 -1
  153. package/.next/standalone/.next/server/app/projects.rsc +1 -1
  154. package/.next/standalone/.next/server/app/settings.html +1 -1
  155. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  156. package/.next/standalone/.next/server/app-paths-manifest.json +30 -30
  157. package/.next/standalone/.next/server/chunks/1165.js +1 -1
  158. package/.next/standalone/.next/server/chunks/3507.js +1 -0
  159. package/.next/standalone/.next/server/chunks/{2679.js → 5031.js} +1 -1
  160. package/.next/standalone/.next/server/chunks/5173.js +13 -0
  161. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  162. package/.next/standalone/.next/server/chunks/8204.js +2 -2
  163. package/.next/standalone/.next/server/chunks/8479.js +2 -2
  164. package/.next/standalone/.next/server/chunks/849.js +1 -1
  165. package/.next/standalone/.next/server/chunks/9408.js +1 -1
  166. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  167. package/.next/standalone/.next/server/pages/404.html +1 -1
  168. package/.next/standalone/.next/server/pages/500.html +1 -1
  169. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  171. package/.next/standalone/package.json +1 -1
  172. package/chorus.mjs +9 -5
  173. package/package.json +1 -1
  174. package/.next/standalone/.next/server/chunks/5254.js +0 -1
  175. package/.next/standalone/.next/server/chunks/8818.js +0 -13
  176. /package/.next/standalone/.next/static/{jb5B7m43WYumWWRxjPTSp → tlKc7sJMhCvChscpoM0uf}/_buildManifest.js +0 -0
  177. /package/.next/standalone/.next/static/{jb5B7m43WYumWWRxjPTSp → tlKc7sJMhCvChscpoM0uf}/_ssgManifest.js +0 -0
@@ -9,86 +9,86 @@
9
9
  "/api/health/route": "app/api/health/route.js",
10
10
  "/api/mcp/route": "app/api/mcp/route.js",
11
11
  "/favicon.ico/route": "app/favicon.ico/route.js",
12
- "/api/admin/companies/route": "app/api/admin/companies/route.js",
12
+ "/api/admin/session/route": "app/api/admin/session/route.js",
13
13
  "/api/admin/login/route": "app/api/admin/login/route.js",
14
+ "/api/admin/companies/route": "app/api/admin/companies/route.js",
14
15
  "/api/admin/companies/[uuid]/route": "app/api/admin/companies/[uuid]/route.js",
15
- "/api/admin/session/route": "app/api/admin/session/route.js",
16
16
  "/api/agents/[uuid]/sessions/route": "app/api/agents/[uuid]/sessions/route.js",
17
- "/api/agents/route": "app/api/agents/route.js",
18
17
  "/api/api-keys/[uuid]/route": "app/api/api-keys/[uuid]/route.js",
19
- "/api/agents/[uuid]/route": "app/api/agents/[uuid]/route.js",
20
18
  "/api/auth/check-default/route": "app/api/auth/check-default/route.js",
21
- "/api/api-keys/route": "app/api/api-keys/route.js",
19
+ "/api/agents/route": "app/api/agents/route.js",
22
20
  "/api/auth/default-login/route": "app/api/auth/default-login/route.js",
21
+ "/api/api-keys/route": "app/api/api-keys/route.js",
23
22
  "/api/auth/identify/route": "app/api/auth/identify/route.js",
23
+ "/api/agents/[uuid]/route": "app/api/agents/[uuid]/route.js",
24
24
  "/api/comments/route": "app/api/comments/route.js",
25
- "/api/documents/[uuid]/route": "app/api/documents/[uuid]/route.js",
26
- "/api/events/route": "app/api/events/route.js",
27
25
  "/api/events/notifications/route": "app/api/events/notifications/route.js",
28
- "/api/ideas/[uuid]/move/route": "app/api/ideas/[uuid]/move/route.js",
26
+ "/api/events/route": "app/api/events/route.js",
27
+ "/api/documents/[uuid]/route": "app/api/documents/[uuid]/route.js",
29
28
  "/api/ideas/[uuid]/claim/route": "app/api/ideas/[uuid]/claim/route.js",
29
+ "/api/ideas/[uuid]/move/route": "app/api/ideas/[uuid]/move/route.js",
30
30
  "/api/ideas/[uuid]/release/route": "app/api/ideas/[uuid]/release/route.js",
31
31
  "/api/me/assignments/route": "app/api/me/assignments/route.js",
32
- "/api/ideas/[uuid]/route": "app/api/ideas/[uuid]/route.js",
33
32
  "/api/mentionables/route": "app/api/mentionables/route.js",
34
- "/api/notifications/[uuid]/archive/route": "app/api/notifications/[uuid]/archive/route.js",
35
33
  "/api/notifications/[uuid]/read/route": "app/api/notifications/[uuid]/read/route.js",
36
- "/api/notifications/preferences/route": "app/api/notifications/preferences/route.js",
34
+ "/api/ideas/[uuid]/route": "app/api/ideas/[uuid]/route.js",
35
+ "/api/notifications/[uuid]/archive/route": "app/api/notifications/[uuid]/archive/route.js",
37
36
  "/api/notifications/read-all/route": "app/api/notifications/read-all/route.js",
38
- "/api/notifications/route": "app/api/notifications/route.js",
39
37
  "/api/project-groups/[uuid]/dashboard/route": "app/api/project-groups/[uuid]/dashboard/route.js",
38
+ "/api/notifications/preferences/route": "app/api/notifications/preferences/route.js",
40
39
  "/api/notifications/unread-count/route": "app/api/notifications/unread-count/route.js",
40
+ "/api/notifications/route": "app/api/notifications/route.js",
41
41
  "/api/project-groups/route": "app/api/project-groups/route.js",
42
42
  "/api/project-groups/[uuid]/route": "app/api/project-groups/[uuid]/route.js",
43
- "/api/projects/[uuid]/activity/route": "app/api/projects/[uuid]/activity/route.js",
44
43
  "/api/projects/[uuid]/available/route": "app/api/projects/[uuid]/available/route.js",
45
- "/api/projects/[uuid]/documents/route": "app/api/projects/[uuid]/documents/route.js",
44
+ "/api/projects/[uuid]/activity/route": "app/api/projects/[uuid]/activity/route.js",
46
45
  "/api/projects/[uuid]/group/route": "app/api/projects/[uuid]/group/route.js",
47
- "/api/projects/[uuid]/ideas/tracker/route": "app/api/projects/[uuid]/ideas/tracker/route.js",
48
- "/api/projects/[uuid]/ideas/route": "app/api/projects/[uuid]/ideas/route.js",
49
46
  "/api/projects/[uuid]/proposals/[proposalUuid]/validate/route": "app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js",
47
+ "/api/projects/[uuid]/ideas/tracker/route": "app/api/projects/[uuid]/ideas/tracker/route.js",
50
48
  "/api/projects/[uuid]/proposals/summary/route": "app/api/projects/[uuid]/proposals/summary/route.js",
49
+ "/api/projects/[uuid]/documents/route": "app/api/projects/[uuid]/documents/route.js",
50
+ "/api/projects/[uuid]/ideas/route": "app/api/projects/[uuid]/ideas/route.js",
51
51
  "/api/projects/[uuid]/proposals/route": "app/api/projects/[uuid]/proposals/route.js",
52
- "/api/projects/[uuid]/stats/route": "app/api/projects/[uuid]/stats/route.js",
53
52
  "/api/projects/[uuid]/tasks/dependencies/route": "app/api/projects/[uuid]/tasks/dependencies/route.js",
53
+ "/api/projects/[uuid]/stats/route": "app/api/projects/[uuid]/stats/route.js",
54
+ "/api/proposals/[uuid]/approve/route": "app/api/proposals/[uuid]/approve/route.js",
54
55
  "/api/projects/[uuid]/route": "app/api/projects/[uuid]/route.js",
55
56
  "/api/projects/[uuid]/tasks/route": "app/api/projects/[uuid]/tasks/route.js",
56
- "/api/projects/route": "app/api/projects/route.js",
57
- "/api/proposals/[uuid]/approve/route": "app/api/proposals/[uuid]/approve/route.js",
58
57
  "/api/proposals/[uuid]/route": "app/api/proposals/[uuid]/route.js",
58
+ "/api/projects/route": "app/api/projects/route.js",
59
59
  "/api/proposals/[uuid]/close/route": "app/api/proposals/[uuid]/close/route.js",
60
60
  "/api/proposals/[uuid]/reject/route": "app/api/proposals/[uuid]/reject/route.js",
61
- "/api/sessions/[uuid]/route": "app/api/sessions/[uuid]/route.js",
62
- "/api/search/route": "app/api/search/route.js",
63
61
  "/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route": "app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js",
62
+ "/api/sessions/[uuid]/route": "app/api/sessions/[uuid]/route.js",
64
63
  "/api/tasks/[uuid]/claim/route": "app/api/tasks/[uuid]/claim/route.js",
64
+ "/api/search/route": "app/api/search/route.js",
65
65
  "/api/tasks/[uuid]/release/route": "app/api/tasks/[uuid]/release/route.js",
66
- "/api/tasks/[uuid]/dependencies/route": "app/api/tasks/[uuid]/dependencies/route.js",
67
66
  "/api/tasks/[uuid]/sessions/route": "app/api/tasks/[uuid]/sessions/route.js",
67
+ "/api/tasks/[uuid]/dependencies/route": "app/api/tasks/[uuid]/dependencies/route.js",
68
68
  "/api/tasks/[uuid]/route": "app/api/tasks/[uuid]/route.js",
69
- "/login/callback/page": "app/login/callback/page.js",
70
69
  "/login/admin/page": "app/login/admin/page.js",
70
+ "/login/callback/page": "app/login/callback/page.js",
71
71
  "/login/page": "app/login/page.js",
72
72
  "/login/silent-refresh/page": "app/login/silent-refresh/page.js",
73
- "/onboarding/page": "app/onboarding/page.js",
74
73
  "/page": "app/page.js",
74
+ "/onboarding/page": "app/onboarding/page.js",
75
75
  "/(dashboard)/project-groups/[uuid]/page": "app/(dashboard)/project-groups/[uuid]/page.js",
76
76
  "/(dashboard)/projects/[uuid]/activity/page": "app/(dashboard)/projects/[uuid]/activity/page.js",
77
- "/(dashboard)/projects/[uuid]/dashboard/page": "app/(dashboard)/projects/[uuid]/dashboard/page.js",
78
77
  "/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page": "app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js",
78
+ "/(dashboard)/projects/[uuid]/dashboard/page": "app/(dashboard)/projects/[uuid]/dashboard/page.js",
79
79
  "/(dashboard)/projects/[uuid]/documents/[documentUuid]/page": "app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js",
80
80
  "/(dashboard)/projects/[uuid]/documents/page": "app/(dashboard)/projects/[uuid]/documents/page.js",
81
- "/(dashboard)/projects/[uuid]/ideas/page": "app/(dashboard)/projects/[uuid]/ideas/page.js",
82
81
  "/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page": "app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js",
82
+ "/(dashboard)/projects/[uuid]/ideas/page": "app/(dashboard)/projects/[uuid]/ideas/page.js",
83
83
  "/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page": "app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js",
84
84
  "/(dashboard)/projects/[uuid]/proposals/new/page": "app/(dashboard)/projects/[uuid]/proposals/new/page.js",
85
85
  "/(dashboard)/projects/[uuid]/proposals/page": "app/(dashboard)/projects/[uuid]/proposals/page.js",
86
86
  "/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page": "app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js",
87
- "/(dashboard)/projects/[uuid]/tasks/page": "app/(dashboard)/projects/[uuid]/tasks/page.js",
88
87
  "/admin/companies/[uuid]/page": "app/admin/companies/[uuid]/page.js",
89
- "/admin/companies/new/page": "app/admin/companies/new/page.js",
88
+ "/(dashboard)/projects/[uuid]/tasks/page": "app/(dashboard)/projects/[uuid]/tasks/page.js",
90
89
  "/(dashboard)/projects/page": "app/(dashboard)/projects/page.js",
90
+ "/admin/companies/new/page": "app/admin/companies/new/page.js",
91
+ "/(dashboard)/settings/page": "app/(dashboard)/settings/page.js",
91
92
  "/admin/companies/page": "app/admin/companies/page.js",
92
- "/admin/page": "app/admin/page.js",
93
- "/(dashboard)/settings/page": "app/(dashboard)/settings/page.js"
93
+ "/admin/page": "app/admin/page.js"
94
94
  }
@@ -1 +1 @@
1
- "use strict";exports.id=1165,exports.ids=[1165],exports.modules={54349:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Hu:()=>n,eT:()=>m,fg:()=>l,uA:()=>q});var e=c(52618),f=c(76872),g=c(90494),h=c(88437),i=c(42558),j=c(65582),k=a([e,f,g,h]);async function l({companyUuid:a,targetType:b,targetUuid:c,skip:d,take:g}){if(!await (0,f._9)(b,c,a))return{comments:[],total:0};let h={companyUuid:a,targetType:b,targetUuid:c},[i,j]=await Promise.all([e.z.comment.findMany({where:h,skip:d,take:g,orderBy:{createdAt:"asc"},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.comment.count({where:h})]);return{comments:await Promise.all(i.map(async a=>{let b=await (0,f.lR)(a.authorType,a.authorUuid);return{uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,content:a.content,author:{type:a.authorType,uuid:a.authorUuid,name:b??"Unknown"},createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})),total:j}}async function m({companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h}){if(!await (0,f._9)(b,c,a))throw Error(`Target ${b} with UUID ${c} not found`);let k=await e.z.comment.create({data:{companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),l=await (0,f.lR)(k.authorType,k.authorUuid);return n(b,c).then(d=>{d&&i.B.emitChange({companyUuid:a,projectUuid:d,entityType:b,entityUuid:c,action:"updated",actorUuid:h})}).catch(()=>{}),p(a,b,c,k.uuid,d,g,h).catch(a=>j.A.error({err:a},"Failed to process comment mentions")),{uuid:k.uuid,targetType:k.targetType,targetUuid:k.targetUuid,content:k.content,author:{type:k.authorType,uuid:k.authorUuid,name:l??"Unknown"},createdAt:k.createdAt.toISOString(),updatedAt:k.updatedAt.toISOString()}}async function n(a,b,c){let d=c?{companyUuid:c}:{};switch(a){case"task":{let a=await e.z.task.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"idea":{let a=await e.z.idea.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"proposal":{let a=await e.z.proposal.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"document":{let a=await e.z.document.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}default:return null}}async function o(a,b){switch(a){case"task":{let a=await e.z.task.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Task"}case"idea":{let a=await e.z.idea.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Idea"}case"proposal":{let a=await e.z.proposal.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Proposal"}case"document":{let a=await e.z.document.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Document"}default:return"Unknown"}}async function p(a,b,c,d,e,f,i){let j=g.Xs(e);if(0===j.length)return;let k=await n(b,c);if(!k)return;let l=await o(b,c);for(let m of(await g.AM({companyUuid:a,sourceType:"comment",sourceUuid:d,content:e,actorType:f,actorUuid:i,projectUuid:k,entityTitle:l}),j))(m.type!==f||m.uuid!==i)&&await h.createActivity({companyUuid:a,projectUuid:k,targetType:b,targetUuid:c,actorType:f,actorUuid:i,action:"mentioned",value:{mentionedType:m.type,mentionedUuid:m.uuid,mentionedName:m.displayName,sourceType:"comment",sourceUuid:d}})}async function q(a,b,c){if(0===c.length)return{};let d=await e.z.comment.groupBy({by:["targetUuid"],where:{companyUuid:a,targetType:b,targetUuid:{in:c}},_count:{targetUuid:!0}}),f={};for(let a of c)f[a]=0;for(let a of d)f[a.targetUuid]=a._count.targetUuid;return f}[e,f,g,h]=k.then?(await k)():k,d()}catch(a){d(a)}})},71165:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AY:()=>K,Cm:()=>M,Ew:()=>E,Fp:()=>y,IM:()=>L,K4:()=>u,QK:()=>x,QL:()=>H,RJ:()=>A,UT:()=>v,Vk:()=>s,_T:()=>B,cn:()=>C,gg:()=>t,j9:()=>I,lC:()=>w,vQ:()=>J,vq:()=>z,xI:()=>n});var e=c(52618),f=c(76872),g=c(42558),h=c(48873),i=c(54349),j=c(90494),k=c(88437),l=c(65582),m=a([e,f,i,j,k]);[e,f,i,j,k]=m.then?(await m)():m;let N={open:["assigned","closed"],assigned:["open","in_progress","closed"],in_progress:["to_verify","closed"],to_verify:["done","in_progress","closed"],done:["closed"],closed:[]};function n(a,b){return(N[a]||[]).includes(b)}let O={total:0,required:0,passed:0,failed:0,pending:0,requiredPassed:0,requiredFailed:0,requiredPending:0};function o(a){if(0===a.length)return{status:"not_started",summary:{...O}};let b={...O,total:a.length};for(let c of a)c.required&&b.required++,"passed"===c.status?(b.passed++,c.required&&b.requiredPassed++):"failed"===c.status?(b.failed++,c.required&&b.requiredFailed++):(b.pending++,c.required&&b.requiredPending++);return b.requiredFailed>0?{status:"failed",summary:b}:b.requiredPassed===b.required&&b.required>0?{status:"passed",summary:b}:b.passed>0||b.failed>0?{status:"in_progress",summary:b}:{status:"not_started",summary:b}}function p(a){return{uuid:a.uuid,description:a.description,required:a.required,devStatus:a.devStatus,devEvidence:a.devEvidence,devMarkedByType:a.devMarkedByType,devMarkedBy:a.devMarkedBy,devMarkedAt:a.devMarkedAt?.toISOString()??null,status:a.status,evidence:a.evidence,markedByType:a.markedByType,markedBy:a.markedBy,markedAt:a.markedAt?.toISOString()??null,sortOrder:a.sortOrder}}async function q(a,b=0){let[c,d]=await Promise.all([(0,f.ir)(a.assigneeType,a.assigneeUuid,a.assignedAt,a.assignedByUuid),(0,f.LS)(a.createdByUuid)]),e=(a.dependsOn||[]).map(a=>({uuid:a.dependsOn.uuid,title:a.dependsOn.title,status:a.dependsOn.status})),g=(a.dependedBy||[]).map(a=>({uuid:a.task.uuid,title:a.task.title,status:a.task.status})),h=(a.acceptanceCriteriaItems||[]).map(p),{status:i,summary:j}=o(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,storyPoints:a.storyPoints,acceptanceCriteria:a.acceptanceCriteria,acceptanceCriteriaItems:h,acceptanceStatus:i,acceptanceSummary:j,assignee:c,proposalUuid:a.proposalUuid,...a.project&&{project:a.project},createdBy:d,dependsOn:e,dependedBy:g,commentCount:b,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}}async function r(a,b){if(0===a.length)return[];let c=[],d=[];for(let b of a)b.assigneeType&&b.assigneeUuid&&c.push({type:b.assigneeType,uuid:b.assigneeUuid}),b.assignedByUuid&&c.push({type:"user",uuid:b.assignedByUuid}),d.push(b.createdByUuid);let[e,g]=await Promise.all([(0,f.Uo)(c),(0,f.Xx)(d)]);return a.map(a=>{let c=null;if(a.assigneeType&&a.assigneeUuid){let b=e.get(a.assigneeUuid);if(b){let d=null;if(a.assignedByUuid){let b=e.get(a.assignedByUuid);b&&(d={type:"user",uuid:a.assignedByUuid,name:b})}c={type:a.assigneeType,uuid:a.assigneeUuid,name:b,assignedAt:a.assignedAt?.toISOString()??null,assignedBy:d}}}let d=g.get(a.createdByUuid)??null,f=(a.dependsOn||[]).map(a=>({uuid:a.dependsOn.uuid,title:a.dependsOn.title,status:a.dependsOn.status})),h=(a.dependedBy||[]).map(a=>({uuid:a.task.uuid,title:a.task.title,status:a.task.status})),i=(a.acceptanceCriteriaItems||[]).map(p),{status:j,summary:k}=o(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,storyPoints:a.storyPoints,acceptanceCriteria:a.acceptanceCriteria,acceptanceCriteriaItems:i,acceptanceStatus:j,acceptanceSummary:k,assignee:c,proposalUuid:a.proposalUuid,...a.project&&{project:a.project},createdBy:d,dependsOn:f,dependedBy:h,commentCount:b[a.uuid]??0,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})}let P={dependsOn:{select:{dependsOn:{select:{uuid:!0,title:!0,status:!0}}}},dependedBy:{select:{task:{select:{uuid:!0,title:!0,status:!0}}}},acceptanceCriteriaItems:{orderBy:{sortOrder:"asc"}}};async function s({companyUuid:a,projectUuid:b,skip:c,take:d,status:f,priority:g,proposalUuids:h}){let j={projectUuid:b,companyUuid:a,...f&&{status:f},...g&&{priority:g},...h&&h.length>0&&{proposalUuid:{in:h}}},[k,l]=await Promise.all([e.z.task.findMany({where:j,skip:c,take:d,orderBy:[{priority:"desc"},{createdAt:"desc"}],select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0,...P}}),e.z.task.count({where:j})]),m=await (0,i.uA)(a,"task",k.map(a=>a.uuid));return{tasks:await r(k,m),total:l}}async function t(a,b){let c=await e.z.task.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}},...P}});if(!c)return null;let d=await e.z.comment.count({where:{companyUuid:a,targetType:"task",targetUuid:b}});return q(c,d)}async function u(a,b){return e.z.task.findFirst({where:{uuid:b,companyUuid:a}})}async function v(a){let b=await e.z.task.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,status:"open",priority:a.priority||"medium",storyPoints:a.storyPoints,acceptanceCriteria:a.acceptanceCriteria,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return g.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"task",entityUuid:b.uuid,action:"created"}),q(b)}async function w(a,b,c){let d=null;if(void 0!==b.description&&c){let b=await e.z.task.findUnique({where:{uuid:a},select:{description:!0}});d=b?.description??null}let f=await e.z.$transaction(async c=>{if(b.status&&"done"!==b.status){let b=await c.task.findUnique({where:{uuid:a},select:{status:!0}});b?.status==="to_verify"&&await c.acceptanceCriterion.updateMany({where:{taskUuid:a},data:{status:"pending",evidence:null,markedByType:null,markedBy:null,markedAt:null,devStatus:"pending",devEvidence:null,devMarkedByType:null,devMarkedBy:null,devMarkedAt:null}})}return c.task.update({where:{uuid:a},data:b,include:{project:{select:{uuid:!0,name:!0}}}})});return g.B.emitChange({companyUuid:f.companyUuid,projectUuid:f.project.uuid,entityType:"task",entityUuid:f.uuid,action:"updated"}),void 0!==b.description&&c&&b.description&&F(f.companyUuid,f.project.uuid,"task",f.uuid,f.title,d,b.description,c.actorType,c.actorUuid).catch(a=>l.A.error({err:a},"Failed to process task mentions")),q(f)}async function x({taskUuid:a,companyUuid:b,assigneeType:c,assigneeUuid:d,assignedByUuid:f}){try{let b=await e.z.task.update({where:{uuid:a,status:{in:["open","assigned"]}},data:{status:"assigned",assigneeType:c,assigneeUuid:d,assignedAt:new Date,assignedByUuid:f},include:{project:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:b.companyUuid,projectUuid:b.project.uuid,entityType:"task",entityUuid:b.uuid,action:"updated"}),q(b)}catch(a){if((0,h.Ik)(a))throw new h.Yy("Task");throw a}}async function y(a){try{let b=await e.z.task.update({where:{uuid:a,status:"assigned"},data:{status:"open",assigneeType:null,assigneeUuid:null,assignedAt:null,assignedByUuid:null},include:{project:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:b.companyUuid,projectUuid:b.project.uuid,entityType:"task",entityUuid:b.uuid,action:"updated"}),q(b)}catch(a){if((0,h.Ik)(a))throw new h.nm("Task");throw a}}async function z(a){let b=await e.z.task.delete({where:{uuid:a}});return g.B.emitChange({companyUuid:b.companyUuid,projectUuid:b.projectUuid,entityType:"task",entityUuid:b.uuid,action:"deleted"}),b}async function A(a,b,c,d,f){let g=new Map,h=f.map(f=>e.z.task.create({data:{companyUuid:a,projectUuid:b,title:f.title,description:f.description||null,status:"open",priority:f.priority||"medium",storyPoints:f.storyPoints||null,acceptanceCriteria:f.acceptanceCriteria||null,proposalUuid:c,createdByUuid:d},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}})),i=await Promise.all(h);for(let a=0;a<f.length;a++)f[a].uuid&&g.set(f[a].uuid,i[a].uuid);return{tasks:await Promise.all(i.map(q)),draftToTaskUuidMap:g}}async function B(a,b,c,d){let f=await e.z.task.findFirst({where:{uuid:b,companyUuid:a}});if(!f)throw Error("Task not found");let h=new Set((await e.z.acceptanceCriterion.findMany({where:{taskUuid:b},select:{uuid:!0}})).map(a=>a.uuid));for(let a of c)if(!h.has(a.uuid))throw Error(`Criterion ${a.uuid} does not belong to task ${b}`);for(let a of c)await e.z.acceptanceCriterion.update({where:{uuid:a.uuid},data:{status:a.status,evidence:a.evidence??null,markedByType:d.type,markedBy:d.actorUuid,markedAt:new Date}});return g.B.emitChange({companyUuid:a,projectUuid:f.projectUuid,entityType:"task",entityUuid:b,action:"updated"}),D(a,b)}async function C(a,b,c,d){let f=await e.z.task.findFirst({where:{uuid:b,companyUuid:a}});if(!f)throw Error("Task not found");let h=new Set((await e.z.acceptanceCriterion.findMany({where:{taskUuid:b},select:{uuid:!0}})).map(a=>a.uuid));for(let a of c)if(!h.has(a.uuid))throw Error(`Criterion ${a.uuid} does not belong to task ${b}`);for(let a of c)await e.z.acceptanceCriterion.update({where:{uuid:a.uuid},data:{devStatus:a.devStatus,devEvidence:a.devEvidence??null,devMarkedByType:d.type,devMarkedBy:d.actorUuid,devMarkedAt:new Date}});return g.B.emitChange({companyUuid:a,projectUuid:f.projectUuid,entityType:"task",entityUuid:b,action:"updated"}),D(a,b)}async function D(a,b){if(!await e.z.task.findFirst({where:{uuid:b,companyUuid:a}}))throw Error("Task not found");let c=await e.z.acceptanceCriterion.findMany({where:{taskUuid:b},orderBy:{sortOrder:"asc"}}),d=c.map(p),{status:f,summary:g}=o(c);return{items:d,status:f,summary:g}}async function E(a){let b=await e.z.acceptanceCriterion.findMany({where:{taskUuid:a},orderBy:{sortOrder:"asc"}});if(0===b.length||b.filter(a=>a.required).every(a=>"passed"===a.status))return{allowed:!0};let{summary:c}=o(b),d=b.filter(a=>a.required&&"passed"!==a.status).map(p);return{allowed:!1,reason:`Not all required acceptance criteria are passed. Required: ${c.required}, Passed: ${c.requiredPassed}, Failed: ${c.requiredFailed}, Pending: ${c.requiredPending}`,summary:c,unresolvedCriteria:d}}async function F(a,b,c,d,e,f,g,h,i){let l=f?j.Xs(f):[],m=j.Xs(g),n=new Set(l.map(a=>`${a.type}:${a.uuid}`)),o=m.filter(a=>!n.has(`${a.type}:${a.uuid}`));if(0!==o.length)for(let f of(await j.AM({companyUuid:a,sourceType:c,sourceUuid:d,content:g,actorType:h,actorUuid:i,projectUuid:b,entityTitle:e}),o))(f.type!==h||f.uuid!==i)&&await k.createActivity({companyUuid:a,projectUuid:b,targetType:c,targetUuid:d,actorType:h,actorUuid:i,action:"mentioned",value:{mentionedType:f.type,mentionedUuid:f.uuid,mentionedName:f.displayName,sourceType:c,sourceUuid:d}})}async function G(a,b){let c=await e.z.taskDependency.findMany({select:{taskUuid:!0,dependsOnUuid:!0}}),d=new Map;for(let a of c)d.has(a.taskUuid)||d.set(a.taskUuid,[]),d.get(a.taskUuid).push(a.dependsOnUuid);let f=new Set,g=[a];for(;g.length>0;){let a=g.pop();if(a===b)return!0;if(!f.has(a))for(let b of(f.add(a),d.get(a)||[]))f.has(b)||g.push(b)}return!1}async function H(a,b,c){if(b===c)throw Error("A task cannot depend on itself");let[d,f]=await Promise.all([e.z.task.findFirst({where:{uuid:b,companyUuid:a}}),e.z.task.findFirst({where:{uuid:c,companyUuid:a}})]);if(!d)throw Error("Task not found");if(!f)throw Error("Dependency task not found");if(d.projectUuid!==f.projectUuid)throw Error("Tasks must belong to the same project");if(await G(c,b))throw Error("Adding this dependency would create a cycle");let g=await e.z.taskDependency.create({data:{taskUuid:b,dependsOnUuid:c}});return{taskUuid:g.taskUuid,dependsOnUuid:g.dependsOnUuid,createdAt:g.createdAt}}async function I(a,b,c){if(!await e.z.task.findFirst({where:{uuid:b,companyUuid:a}}))throw Error("Task not found");await e.z.taskDependency.deleteMany({where:{taskUuid:b,dependsOnUuid:c}})}async function J(a,b){let c=await e.z.task.findFirst({where:{uuid:b,companyUuid:a},include:P});if(!c)throw Error("Task not found");return{dependsOn:c.dependsOn.map(a=>({uuid:a.dependsOn.uuid,title:a.dependsOn.title,status:a.dependsOn.status})),dependedBy:c.dependedBy.map(a=>({uuid:a.task.uuid,title:a.task.title,status:a.task.status}))}}async function K({companyUuid:a,projectUuid:b,proposalUuids:c}){let d={projectUuid:b,companyUuid:a,status:{in:["open","assigned"]},...c&&c.length>0&&{proposalUuid:{in:c}},NOT:{dependsOn:{some:{dependsOn:{status:{notIn:["done","closed"]}}}}}},[f,g]=await Promise.all([e.z.task.findMany({where:d,orderBy:[{priority:"desc"},{createdAt:"desc"}],select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0,...P}}),e.z.task.count({where:d})]),h=await (0,i.uA)(a,"task",f.map(a=>a.uuid));return{tasks:await r(f,h),total:g}}async function L(a){let b=await e.z.taskDependency.findMany({where:{taskUuid:a},select:{dependsOn:{select:{uuid:!0,title:!0,status:!0,assigneeType:!0,assigneeUuid:!0}}}});if(0===b.length)return{resolved:!0,blockers:[]};let c=b.filter(a=>"done"!==a.dependsOn.status&&"closed"!==a.dependsOn.status);if(0===c.length)return{resolved:!0,blockers:[]};let d=c.map(a=>a.dependsOn.uuid),[g,h]=await Promise.all([e.z.sessionTaskCheckin.findMany({where:{taskUuid:{in:d},checkoutAt:null},select:{taskUuid:!0,sessionUuid:!0,session:{select:{name:!0}}}}),(0,f.Uo)(c.filter(a=>a.dependsOn.assigneeType&&a.dependsOn.assigneeUuid).map(a=>({type:a.dependsOn.assigneeType,uuid:a.dependsOn.assigneeUuid})))]),i=new Map;for(let a of g)i.set(a.taskUuid,{sessionUuid:a.sessionUuid,sessionName:a.session.name});let j=c.map(a=>{let b=a.dependsOn,c=null;if(b.assigneeType&&b.assigneeUuid){let a=h.get(b.assigneeUuid);a&&(c={type:b.assigneeType,uuid:b.assigneeUuid,name:a})}return{uuid:b.uuid,title:b.title,status:b.status,assignee:c,sessionCheckin:i.get(b.uuid)??null}});return{resolved:!1,blockers:j}}async function M(a,b){let[c,d]=await Promise.all([e.z.task.findMany({where:{companyUuid:a,projectUuid:b},select:{uuid:!0,title:!0,status:!0,priority:!0,proposalUuid:!0}}),e.z.taskDependency.findMany({where:{task:{companyUuid:a,projectUuid:b}},select:{taskUuid:!0,dependsOnUuid:!0}})]);return{nodes:c.map(a=>({uuid:a.uuid,title:a.title,status:a.status,priority:a.priority,proposalUuid:a.proposalUuid??null})),edges:d.map(a=>({from:a.taskUuid,to:a.dependsOnUuid}))}}d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=1165,exports.ids=[1165],exports.modules={54349:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Hu:()=>n,eT:()=>m,fg:()=>l,uA:()=>q});var e=c(52618),f=c(76872),g=c(90494),h=c(88437),i=c(42558),j=c(65582),k=a([e,f,g,h]);async function l({companyUuid:a,targetType:b,targetUuid:c,skip:d,take:g}){if(!await (0,f._9)(b,c,a))return{comments:[],total:0};let h={companyUuid:a,targetType:b,targetUuid:c},[i,j]=await Promise.all([e.z.comment.findMany({where:h,skip:d,take:g,orderBy:{createdAt:"asc"},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.comment.count({where:h})]);return{comments:await Promise.all(i.map(async a=>{let b=await (0,f.lR)(a.authorType,a.authorUuid);return{uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,content:a.content,author:{type:a.authorType,uuid:a.authorUuid,name:b??"Unknown"},createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})),total:j}}async function m({companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h}){if(!await (0,f._9)(b,c,a))throw Error(`Target ${b} with UUID ${c} not found`);let k=await e.z.comment.create({data:{companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),l=await (0,f.lR)(k.authorType,k.authorUuid);return n(b,c).then(d=>{d&&i.B.emitChange({companyUuid:a,projectUuid:d,entityType:b,entityUuid:c,action:"updated",actorUuid:h})}).catch(()=>{}),p(a,b,c,k.uuid,d,g,h).catch(a=>j.A.error({err:a},"Failed to process comment mentions")),{uuid:k.uuid,targetType:k.targetType,targetUuid:k.targetUuid,content:k.content,author:{type:k.authorType,uuid:k.authorUuid,name:l??"Unknown"},createdAt:k.createdAt.toISOString(),updatedAt:k.updatedAt.toISOString()}}async function n(a,b,c){let d=c?{companyUuid:c}:{};switch(a){case"task":{let a=await e.z.task.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"idea":{let a=await e.z.idea.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"proposal":{let a=await e.z.proposal.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"document":{let a=await e.z.document.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}default:return null}}async function o(a,b){switch(a){case"task":{let a=await e.z.task.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Task"}case"idea":{let a=await e.z.idea.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Idea"}case"proposal":{let a=await e.z.proposal.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Proposal"}case"document":{let a=await e.z.document.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Document"}default:return"Unknown"}}async function p(a,b,c,d,e,f,i){let j=g.Xs(e);if(0===j.length)return;let k=await n(b,c);if(!k)return;let l=await o(b,c);for(let m of(await g.AM({companyUuid:a,sourceType:"comment",sourceUuid:d,content:e,actorType:f,actorUuid:i,projectUuid:k,entityTitle:l}),j))(m.type!==f||m.uuid!==i)&&await h.createActivity({companyUuid:a,projectUuid:k,targetType:b,targetUuid:c,actorType:f,actorUuid:i,action:"mentioned",value:{mentionedType:m.type,mentionedUuid:m.uuid,mentionedName:m.displayName,sourceType:"comment",sourceUuid:d}})}async function q(a,b,c){if(0===c.length)return{};let d=await e.z.comment.groupBy({by:["targetUuid"],where:{companyUuid:a,targetType:b,targetUuid:{in:c}},_count:{targetUuid:!0}}),f={};for(let a of c)f[a]=0;for(let a of d)f[a.targetUuid]=a._count.targetUuid;return f}[e,f,g,h]=k.then?(await k)():k,d()}catch(a){d(a)}})},71165:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AY:()=>J,Cm:()=>L,Ew:()=>D,Fp:()=>y,IM:()=>K,K4:()=>u,QK:()=>x,QL:()=>G,UT:()=>v,Vk:()=>s,_T:()=>A,cn:()=>B,gg:()=>t,j9:()=>H,lC:()=>w,vQ:()=>I,vq:()=>z,xI:()=>n});var e=c(52618),f=c(76872),g=c(42558),h=c(48873),i=c(54349),j=c(90494),k=c(88437),l=c(65582),m=a([e,f,i,j,k]);[e,f,i,j,k]=m.then?(await m)():m;let M={open:["assigned","closed"],assigned:["open","in_progress","closed"],in_progress:["to_verify","closed"],to_verify:["done","in_progress","closed"],done:["closed"],closed:[]};function n(a,b){return(M[a]||[]).includes(b)}let N={total:0,required:0,passed:0,failed:0,pending:0,requiredPassed:0,requiredFailed:0,requiredPending:0};function o(a){if(0===a.length)return{status:"not_started",summary:{...N}};let b={...N,total:a.length};for(let c of a)c.required&&b.required++,"passed"===c.status?(b.passed++,c.required&&b.requiredPassed++):"failed"===c.status?(b.failed++,c.required&&b.requiredFailed++):(b.pending++,c.required&&b.requiredPending++);return b.requiredFailed>0?{status:"failed",summary:b}:b.requiredPassed===b.required&&b.required>0?{status:"passed",summary:b}:b.passed>0||b.failed>0?{status:"in_progress",summary:b}:{status:"not_started",summary:b}}function p(a){return{uuid:a.uuid,description:a.description,required:a.required,devStatus:a.devStatus,devEvidence:a.devEvidence,devMarkedByType:a.devMarkedByType,devMarkedBy:a.devMarkedBy,devMarkedAt:a.devMarkedAt?.toISOString()??null,status:a.status,evidence:a.evidence,markedByType:a.markedByType,markedBy:a.markedBy,markedAt:a.markedAt?.toISOString()??null,sortOrder:a.sortOrder}}async function q(a,b=0){let[c,d]=await Promise.all([(0,f.ir)(a.assigneeType,a.assigneeUuid,a.assignedAt,a.assignedByUuid),(0,f.LS)(a.createdByUuid)]),e=(a.dependsOn||[]).map(a=>({uuid:a.dependsOn.uuid,title:a.dependsOn.title,status:a.dependsOn.status})),g=(a.dependedBy||[]).map(a=>({uuid:a.task.uuid,title:a.task.title,status:a.task.status})),h=(a.acceptanceCriteriaItems||[]).map(p),{status:i,summary:j}=o(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,storyPoints:a.storyPoints,acceptanceCriteria:a.acceptanceCriteria,acceptanceCriteriaItems:h,acceptanceStatus:i,acceptanceSummary:j,assignee:c,proposalUuid:a.proposalUuid,...a.project&&{project:a.project},createdBy:d,dependsOn:e,dependedBy:g,commentCount:b,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}}async function r(a,b){if(0===a.length)return[];let c=[],d=[];for(let b of a)b.assigneeType&&b.assigneeUuid&&c.push({type:b.assigneeType,uuid:b.assigneeUuid}),b.assignedByUuid&&c.push({type:"user",uuid:b.assignedByUuid}),d.push(b.createdByUuid);let[e,g]=await Promise.all([(0,f.Uo)(c),(0,f.Xx)(d)]);return a.map(a=>{let c=null;if(a.assigneeType&&a.assigneeUuid){let b=e.get(a.assigneeUuid);if(b){let d=null;if(a.assignedByUuid){let b=e.get(a.assignedByUuid);b&&(d={type:"user",uuid:a.assignedByUuid,name:b})}c={type:a.assigneeType,uuid:a.assigneeUuid,name:b,assignedAt:a.assignedAt?.toISOString()??null,assignedBy:d}}}let d=g.get(a.createdByUuid)??null,f=(a.dependsOn||[]).map(a=>({uuid:a.dependsOn.uuid,title:a.dependsOn.title,status:a.dependsOn.status})),h=(a.dependedBy||[]).map(a=>({uuid:a.task.uuid,title:a.task.title,status:a.task.status})),i=(a.acceptanceCriteriaItems||[]).map(p),{status:j,summary:k}=o(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,storyPoints:a.storyPoints,acceptanceCriteria:a.acceptanceCriteria,acceptanceCriteriaItems:i,acceptanceStatus:j,acceptanceSummary:k,assignee:c,proposalUuid:a.proposalUuid,...a.project&&{project:a.project},createdBy:d,dependsOn:f,dependedBy:h,commentCount:b[a.uuid]??0,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})}let O={dependsOn:{select:{dependsOn:{select:{uuid:!0,title:!0,status:!0}}}},dependedBy:{select:{task:{select:{uuid:!0,title:!0,status:!0}}}},acceptanceCriteriaItems:{orderBy:{sortOrder:"asc"}}};async function s({companyUuid:a,projectUuid:b,skip:c,take:d,status:f,priority:g,proposalUuids:h}){let j={projectUuid:b,companyUuid:a,...f&&{status:f},...g&&{priority:g},...h&&h.length>0&&{proposalUuid:{in:h}}},[k,l]=await Promise.all([e.z.task.findMany({where:j,skip:c,take:d,orderBy:[{priority:"desc"},{createdAt:"desc"}],select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0,...O}}),e.z.task.count({where:j})]),m=await (0,i.uA)(a,"task",k.map(a=>a.uuid));return{tasks:await r(k,m),total:l}}async function t(a,b){let c=await e.z.task.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}},...O}});if(!c)return null;let d=await e.z.comment.count({where:{companyUuid:a,targetType:"task",targetUuid:b}});return q(c,d)}async function u(a,b){return e.z.task.findFirst({where:{uuid:b,companyUuid:a}})}async function v(a){let b=await e.z.task.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,status:"open",priority:a.priority||"medium",storyPoints:a.storyPoints,acceptanceCriteria:a.acceptanceCriteria,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return g.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"task",entityUuid:b.uuid,action:"created"}),q(b)}async function w(a,b,c){let d=null;if(void 0!==b.description&&c){let b=await e.z.task.findUnique({where:{uuid:a},select:{description:!0}});d=b?.description??null}let f=await e.z.$transaction(async c=>{if(b.status&&"done"!==b.status){let b=await c.task.findUnique({where:{uuid:a},select:{status:!0}});b?.status==="to_verify"&&await c.acceptanceCriterion.updateMany({where:{taskUuid:a},data:{status:"pending",evidence:null,markedByType:null,markedBy:null,markedAt:null,devStatus:"pending",devEvidence:null,devMarkedByType:null,devMarkedBy:null,devMarkedAt:null}})}return c.task.update({where:{uuid:a},data:b,include:{project:{select:{uuid:!0,name:!0}}}})});return g.B.emitChange({companyUuid:f.companyUuid,projectUuid:f.project.uuid,entityType:"task",entityUuid:f.uuid,action:"updated"}),void 0!==b.description&&c&&b.description&&E(f.companyUuid,f.project.uuid,"task",f.uuid,f.title,d,b.description,c.actorType,c.actorUuid).catch(a=>l.A.error({err:a},"Failed to process task mentions")),q(f)}async function x({taskUuid:a,companyUuid:b,assigneeType:c,assigneeUuid:d,assignedByUuid:f}){try{let b=await e.z.task.update({where:{uuid:a,status:{in:["open","assigned"]}},data:{status:"assigned",assigneeType:c,assigneeUuid:d,assignedAt:new Date,assignedByUuid:f},include:{project:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:b.companyUuid,projectUuid:b.project.uuid,entityType:"task",entityUuid:b.uuid,action:"updated"}),q(b)}catch(a){if((0,h.Ik)(a))throw new h.Yy("Task");throw a}}async function y(a){try{let b=await e.z.task.update({where:{uuid:a,status:"assigned"},data:{status:"open",assigneeType:null,assigneeUuid:null,assignedAt:null,assignedByUuid:null},include:{project:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:b.companyUuid,projectUuid:b.project.uuid,entityType:"task",entityUuid:b.uuid,action:"updated"}),q(b)}catch(a){if((0,h.Ik)(a))throw new h.nm("Task");throw a}}async function z(a){let b=await e.z.task.delete({where:{uuid:a}});return g.B.emitChange({companyUuid:b.companyUuid,projectUuid:b.projectUuid,entityType:"task",entityUuid:b.uuid,action:"deleted"}),b}async function A(a,b,c,d){let f=await e.z.task.findFirst({where:{uuid:b,companyUuid:a}});if(!f)throw Error("Task not found");let h=new Set((await e.z.acceptanceCriterion.findMany({where:{taskUuid:b},select:{uuid:!0}})).map(a=>a.uuid));for(let a of c)if(!h.has(a.uuid))throw Error(`Criterion ${a.uuid} does not belong to task ${b}`);for(let a of c)await e.z.acceptanceCriterion.update({where:{uuid:a.uuid},data:{status:a.status,evidence:a.evidence??null,markedByType:d.type,markedBy:d.actorUuid,markedAt:new Date}});return g.B.emitChange({companyUuid:a,projectUuid:f.projectUuid,entityType:"task",entityUuid:b,action:"updated"}),C(a,b)}async function B(a,b,c,d){let f=await e.z.task.findFirst({where:{uuid:b,companyUuid:a}});if(!f)throw Error("Task not found");let h=new Set((await e.z.acceptanceCriterion.findMany({where:{taskUuid:b},select:{uuid:!0}})).map(a=>a.uuid));for(let a of c)if(!h.has(a.uuid))throw Error(`Criterion ${a.uuid} does not belong to task ${b}`);for(let a of c)await e.z.acceptanceCriterion.update({where:{uuid:a.uuid},data:{devStatus:a.devStatus,devEvidence:a.devEvidence??null,devMarkedByType:d.type,devMarkedBy:d.actorUuid,devMarkedAt:new Date}});return g.B.emitChange({companyUuid:a,projectUuid:f.projectUuid,entityType:"task",entityUuid:b,action:"updated"}),C(a,b)}async function C(a,b){if(!await e.z.task.findFirst({where:{uuid:b,companyUuid:a}}))throw Error("Task not found");let c=await e.z.acceptanceCriterion.findMany({where:{taskUuid:b},orderBy:{sortOrder:"asc"}}),d=c.map(p),{status:f,summary:g}=o(c);return{items:d,status:f,summary:g}}async function D(a){let b=await e.z.acceptanceCriterion.findMany({where:{taskUuid:a},orderBy:{sortOrder:"asc"}});if(0===b.length||b.filter(a=>a.required).every(a=>"passed"===a.status))return{allowed:!0};let{summary:c}=o(b),d=b.filter(a=>a.required&&"passed"!==a.status).map(p);return{allowed:!1,reason:`Not all required acceptance criteria are passed. Required: ${c.required}, Passed: ${c.requiredPassed}, Failed: ${c.requiredFailed}, Pending: ${c.requiredPending}`,summary:c,unresolvedCriteria:d}}async function E(a,b,c,d,e,f,g,h,i){let l=f?j.Xs(f):[],m=j.Xs(g),n=new Set(l.map(a=>`${a.type}:${a.uuid}`)),o=m.filter(a=>!n.has(`${a.type}:${a.uuid}`));if(0!==o.length)for(let f of(await j.AM({companyUuid:a,sourceType:c,sourceUuid:d,content:g,actorType:h,actorUuid:i,projectUuid:b,entityTitle:e}),o))(f.type!==h||f.uuid!==i)&&await k.createActivity({companyUuid:a,projectUuid:b,targetType:c,targetUuid:d,actorType:h,actorUuid:i,action:"mentioned",value:{mentionedType:f.type,mentionedUuid:f.uuid,mentionedName:f.displayName,sourceType:c,sourceUuid:d}})}async function F(a,b){let c=await e.z.taskDependency.findMany({select:{taskUuid:!0,dependsOnUuid:!0}}),d=new Map;for(let a of c)d.has(a.taskUuid)||d.set(a.taskUuid,[]),d.get(a.taskUuid).push(a.dependsOnUuid);let f=new Set,g=[a];for(;g.length>0;){let a=g.pop();if(a===b)return!0;if(!f.has(a))for(let b of(f.add(a),d.get(a)||[]))f.has(b)||g.push(b)}return!1}async function G(a,b,c){if(b===c)throw Error("A task cannot depend on itself");let[d,f]=await Promise.all([e.z.task.findFirst({where:{uuid:b,companyUuid:a}}),e.z.task.findFirst({where:{uuid:c,companyUuid:a}})]);if(!d)throw Error("Task not found");if(!f)throw Error("Dependency task not found");if(d.projectUuid!==f.projectUuid)throw Error("Tasks must belong to the same project");if(await F(c,b))throw Error("Adding this dependency would create a cycle");let g=await e.z.taskDependency.create({data:{taskUuid:b,dependsOnUuid:c}});return{taskUuid:g.taskUuid,dependsOnUuid:g.dependsOnUuid,createdAt:g.createdAt}}async function H(a,b,c){if(!await e.z.task.findFirst({where:{uuid:b,companyUuid:a}}))throw Error("Task not found");await e.z.taskDependency.deleteMany({where:{taskUuid:b,dependsOnUuid:c}})}async function I(a,b){let c=await e.z.task.findFirst({where:{uuid:b,companyUuid:a},include:O});if(!c)throw Error("Task not found");return{dependsOn:c.dependsOn.map(a=>({uuid:a.dependsOn.uuid,title:a.dependsOn.title,status:a.dependsOn.status})),dependedBy:c.dependedBy.map(a=>({uuid:a.task.uuid,title:a.task.title,status:a.task.status}))}}async function J({companyUuid:a,projectUuid:b,proposalUuids:c}){let d={projectUuid:b,companyUuid:a,status:{in:["open","assigned"]},...c&&c.length>0&&{proposalUuid:{in:c}},NOT:{dependsOn:{some:{dependsOn:{status:{notIn:["done","closed"]}}}}}},[f,g]=await Promise.all([e.z.task.findMany({where:d,orderBy:[{priority:"desc"},{createdAt:"desc"}],select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,storyPoints:!0,acceptanceCriteria:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0,...O}}),e.z.task.count({where:d})]),h=await (0,i.uA)(a,"task",f.map(a=>a.uuid));return{tasks:await r(f,h),total:g}}async function K(a){let b=await e.z.taskDependency.findMany({where:{taskUuid:a},select:{dependsOn:{select:{uuid:!0,title:!0,status:!0,assigneeType:!0,assigneeUuid:!0}}}});if(0===b.length)return{resolved:!0,blockers:[]};let c=b.filter(a=>"done"!==a.dependsOn.status&&"closed"!==a.dependsOn.status);if(0===c.length)return{resolved:!0,blockers:[]};let d=c.map(a=>a.dependsOn.uuid),[g,h]=await Promise.all([e.z.sessionTaskCheckin.findMany({where:{taskUuid:{in:d},checkoutAt:null},select:{taskUuid:!0,sessionUuid:!0,session:{select:{name:!0}}}}),(0,f.Uo)(c.filter(a=>a.dependsOn.assigneeType&&a.dependsOn.assigneeUuid).map(a=>({type:a.dependsOn.assigneeType,uuid:a.dependsOn.assigneeUuid})))]),i=new Map;for(let a of g)i.set(a.taskUuid,{sessionUuid:a.sessionUuid,sessionName:a.session.name});let j=c.map(a=>{let b=a.dependsOn,c=null;if(b.assigneeType&&b.assigneeUuid){let a=h.get(b.assigneeUuid);a&&(c={type:b.assigneeType,uuid:b.assigneeUuid,name:a})}return{uuid:b.uuid,title:b.title,status:b.status,assignee:c,sessionCheckin:i.get(b.uuid)??null}});return{resolved:!1,blockers:j}}async function L(a,b){let[c,d]=await Promise.all([e.z.task.findMany({where:{companyUuid:a,projectUuid:b},select:{uuid:!0,title:!0,status:!0,priority:!0,proposalUuid:!0}}),e.z.taskDependency.findMany({where:{task:{companyUuid:a,projectUuid:b}},select:{taskUuid:!0,dependsOnUuid:!0}})]);return{nodes:c.map(a=>({uuid:a.uuid,title:a.title,status:a.status,priority:a.priority,proposalUuid:a.proposalUuid??null})),edges:d.map(a=>({from:a.taskUuid,to:a.dependsOnUuid}))}}d()}catch(a){d(a)}})}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=3507,exports.ids=[3507],exports.modules={8777:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cs:()=>k,Nn:()=>n,YE:()=>j,lC:()=>i,lU:()=>m,ui:()=>l});var e=c(52618),f=c(76872),g=a([e,f]);async function h(a,b=!1){let c=await (0,f.LS)(a.createdByUuid),d={uuid:a.uuid,type:a.type,title:a.title,version:a.version,proposalUuid:a.proposalUuid,createdBy:c,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return b&&void 0!==a.content&&(d.content=a.content),a.project&&(d.project=a.project),d}async function i({companyUuid:a,projectUuid:b,skip:c,take:d,type:f}){let g={projectUuid:b,companyUuid:a,...f&&{type:f}},[i,j]=await Promise.all([e.z.document.findMany({where:g,skip:c,take:d,orderBy:{updatedAt:"desc"},select:{uuid:!0,type:!0,title:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.document.count({where:g})]);return{documents:await Promise.all(i.map(a=>h(a))),total:j}}async function j(a,b){let c=await e.z.document.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?h(c,!0):null}async function k(a,b){return e.z.document.findFirst({where:{uuid:b,companyUuid:a}})}async function l(a){let b=await e.z.document.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,type:a.type,title:a.title,content:a.content,version:1,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(b,!0)}async function m(a,{title:b,content:c,incrementVersion:d}){let f={};void 0!==b&&(f.title=b),void 0!==c&&(f.content=c),d&&(f.version={increment:1});let g=await e.z.document.update({where:{uuid:a},data:f,include:{project:{select:{uuid:!0,name:!0}}}});return h(g,!0)}async function n(a){return e.z.document.delete({where:{uuid:a}})}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},12102:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},19720:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]])},42558:(a,b,c)=>{c.d(b,{B:()=>s});var d=c(94735),e=c(55511),f=c(18481),g=c.n(f),h=c(65582);let i=h.A.child({module:"redis"}),j=function(){if(process.env.REDIS_URL)return process.env.REDIS_URL;let a=process.env.REDIS_HOST;if(!a)return;let b=process.env.REDIS_PORT||"6379",c=process.env.REDIS_USERNAME||"default",d=process.env.REDIS_PASSWORD,e="rediss";return d?`${e}://${c}:${encodeURIComponent(d)}@${a}:${b}`:`${e}://${a}:${b}`}(),k=globalThis;function l(a){let b=new(g())(j,{lazyConnect:!0,maxRetriesPerRequest:null,retryStrategy(b){let c=Math.min(200*b,5e3);return i.warn({name:a,delay:c,attempt:b},"Reconnecting"),c}});return b.on("error",b=>{i.error({name:a,err:b},"Redis error")}),b.on("connect",()=>{i.info({name:a},"Connected")}),b}function m(){return j?(k.redisPub||(k.redisPub=l("pub")),k.redisPub):null}function n(){return j?(k.redisSub||(k.redisSub=l("sub")),k.redisSub):null}let o=h.A.child({module:"event-bus"}),p="chorus:events";class q extends d.EventEmitter{static{this.THROTTLE_WINDOW_MS=2e3}static{this.EVICTION_INTERVAL_MS=3e4}static{this.EVICTION_TTL_MS=3e4}async connect(){if(this._connected||!j)return;this._connected=!0;let a=n(),b=m();a&&(await a.connect(),b&&await b.connect(),await a.subscribe(p),a.on("message",(a,b)=>{try{let a=JSON.parse(b);if(a._origin===this._instanceId)return;super.emit(a.channel,a.data)}catch{}}))}emit(a,...b){if("string"==typeof a&&j){let c=m();if(c&&"ready"===c.status){let d={_origin:this._instanceId,channel:a,data:b[0]};c.publish(p,JSON.stringify(d)).catch(()=>{})}}return super.emit(a,...b)}emitPresence(a){let b=`${a.agentUuid}:${a.entityType}:${a.entityUuid}${a.subEntityType?`:${a.subEntityType}`:""}${a.subEntityUuid?`:${a.subEntityUuid}`:""}`,c=Date.now(),d=this._presenceThrottle.get(b);d&&c-d<q.THROTTLE_WINDOW_MS||(this._presenceThrottle.set(b,c),this._ensureEvictionTimer(),this.emit("presence",a))}_ensureEvictionTimer(){!this._evictionTimer&&(this._evictionTimer=setInterval(()=>{let a=Date.now();for(let[b,c]of this._presenceThrottle)a-c>=q.EVICTION_TTL_MS&&this._presenceThrottle.delete(b);0===this._presenceThrottle.size&&(clearInterval(this._evictionTimer),this._evictionTimer=null)},q.EVICTION_INTERVAL_MS),this._evictionTimer&&"object"==typeof this._evictionTimer&&"unref"in this._evictionTimer&&this._evictionTimer.unref())}get _throttleMapSize(){return this._presenceThrottle.size}_resetPresenceState(){this._presenceThrottle.clear(),this._evictionTimer&&(clearInterval(this._evictionTimer),this._evictionTimer=null)}emitChange(a){this.emit("change",a)}async disconnect(){let a=m(),b=n();b&&await b.quit().catch(()=>{}),a&&await a.quit().catch(()=>{}),this._connected=!1}constructor(...a){super(...a),this._connected=!1,this._instanceId=(0,e.randomUUID)(),this._presenceThrottle=new Map,this._evictionTimer=null}}let r=globalThis,s=r.chorusEventBus??=new q;j&&s.connect().catch(a=>{o.error({err:a},"Redis connect failed, falling back to memory")})},43538:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("file-pen",[["path",{d:"M12.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v9.34",key:"o6klzx"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10.378 12.622a1 1 0 0 1 3 3.003L8.36 20.637a2 2 0 0 1-.854.506l-2.867.837a.5.5 0 0 1-.62-.62l.836-2.869a2 2 0 0 1 .506-.853z",key:"zhnas1"}]])},51899:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]])},53870:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cs:()=>i,lU:()=>k,ui:()=>j});var e=c(71255),f=c(92633),g=a([e,f]);async function h(a,b=!1){let c=await (0,f.LS)(a.createdByUuid),d={uuid:a.uuid,type:a.type,title:a.title,version:a.version,proposalUuid:a.proposalUuid,createdBy:c,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return b&&void 0!==a.content&&(d.content=a.content),a.project&&(d.project=a.project),d}async function i(a,b){return e.z.document.findFirst({where:{uuid:b,companyUuid:a}})}async function j(a){let b=await e.z.document.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,type:a.type,title:a.title,content:a.content,version:1,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(b,!0)}async function k(a,{title:b,content:c,incrementVersion:d}){let f={};void 0!==b&&(f.title=b),void 0!==c&&(f.content=c),d&&(f.version={increment:1});let g=await e.z.document.update({where:{uuid:a},data:f,include:{project:{select:{uuid:!0,name:!0}}}});return h(g,!0)}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},61159:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]])},63413:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(34269),e=c(42711);function f(...a){return(0,e.QP)((0,d.$)(a))}},74236:(a,b,c)=>{c.d(b,{Wu:()=>i,ZB:()=>h,Zp:()=>f,aR:()=>g});var d=c(10023);c(73426);var e=c(63413);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}},76872:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{LS:()=>i,SJ:()=>k,Uo:()=>l,Xx:()=>m,Z_:()=>h,_9:()=>n,ir:()=>j,lR:()=>g});var e=c(52618),f=a([e]);async function g(a,b){if("user"===a){let a=await e.z.user.findUnique({where:{uuid:b},select:{name:!0,email:!0}});return a&&(a.name||a.email)||"Unknown"}if("agent"===a){let a=await e.z.agent.findUnique({where:{uuid:b},select:{name:!0}});return a?.name??null}return null}async function h(a,b){if(!a||!b)return null;let c=await g(a,b);return c?{type:a,uuid:b,name:c}:null}async function i(a,b){if(b){let c=await g(b,a);return c?{type:b,uuid:a,name:c}:null}let c=await e.z.user.findUnique({where:{uuid:a},select:{name:!0,email:!0}});if(c)return{type:"user",uuid:a,name:c.name||c.email||"Unknown"};let d=await e.z.agent.findUnique({where:{uuid:a},select:{name:!0}});return d?{type:"agent",uuid:a,name:d.name}:null}async function j(a,b,c,d){if(!a||!b)return null;let e=await g(a,b);if(!e)return null;let f=null;if(d){let a=await g("user",d);a&&(f={type:"user",uuid:d,name:a})}return{type:a,uuid:b,name:e,assignedAt:c?.toISOString()??null,assignedBy:f}}async function k(a,b,c){if(!a)return null;let d=await g("user",a);return d?{reviewedBy:{type:"user",uuid:a,name:d},reviewNote:b,reviewedAt:c?.toISOString()??null}:null}async function l(a){let b=new Map;if(0===a.length)return b;let c=[...new Set(a.filter(a=>"user"===a.type).map(a=>a.uuid))],d=[...new Set(a.filter(a=>"agent"===a.type).map(a=>a.uuid))],[f,g]=await Promise.all([c.length>0?e.z.user.findMany({where:{uuid:{in:c}},select:{uuid:!0,name:!0,email:!0}}):[],d.length>0?e.z.agent.findMany({where:{uuid:{in:d}},select:{uuid:!0,name:!0}}):[]]);for(let a of f)b.set(a.uuid,a.name||a.email||"Unknown");for(let a of g)b.set(a.uuid,a.name);return b}async function m(a){let b=new Map;if(0===a.length)return b;let c=[...new Set(a)],d=await e.z.user.findMany({where:{uuid:{in:c}},select:{uuid:!0,name:!0,email:!0}}),f=new Set;for(let a of d)f.add(a.uuid),b.set(a.uuid,{type:"user",uuid:a.uuid,name:a.name||a.email||"Unknown"});let g=c.filter(a=>!f.has(a));if(g.length>0)for(let a of(await e.z.agent.findMany({where:{uuid:{in:g}},select:{uuid:!0,name:!0}})))b.set(a.uuid,{type:"agent",uuid:a.uuid,name:a.name});return b}async function n(a,b,c){let d={uuid:b,companyUuid:c};switch(a){case"idea":return!!await e.z.idea.findFirst({where:d,select:{uuid:!0}});case"proposal":return!!await e.z.proposal.findFirst({where:d,select:{uuid:!0}});case"task":return!!await e.z.task.findFirst({where:d,select:{uuid:!0}});case"document":return!!await e.z.document.findFirst({where:d,select:{uuid:!0}});default:return!1}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})}};
@@ -1 +1 @@
1
- "use strict";exports.id=2679,exports.ids=[2679],exports.modules={27380:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>Q});var e=c(10837),f=c(21968),g=c(1007),h=c(81512),i=c.n(h),j=c(9222),k=c(24364),l=c(87461),m=c(10694),n=c(16235),o=c(86460),p=c(9810),q=c(97443),r=c(65956),s=c(79543),t=c(49599),u=c(42424),v=c(9994),w=c(20170),x=c(2852),y=c(74645),z=c(10297),A=c(11568),B=c(6019),C=c(80251),D=c(56828);c(35568);var E=c(78714),F=c(69391),G=c(41709),H=c(83457),I=c(76605),J=c(17613),K=c(18789),L=c(94549),M=c(76172),N=c(31009),O=c(45148),P=a([D,H]);[D,H]=P.then?(await P)():P;let R={open:"bg-[#FFF3E0] text-[#E65100]",elaborating:"bg-[#E3F2FD] text-[#1976D2]",elaborated:"bg-[#E0F2F1] text-[#00796B]"},S={open:"open",elaborating:"elaborating",elaborated:"elaborated"};function Q({idea:a,projectUuid:b,currentUserUuid:c,isUsedInProposal:d,onClose:h,onDeleted:P}){let Q=(0,j.c)(),T=(0,g.useRouter)(),[U,V]=(0,f.useState)([]),[W,X]=(0,f.useState)(!0),[Y,Z]=(0,f.useState)(!1),[$,_]=(0,f.useState)(null),aa=(0,f.useCallback)(async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)},[a.uuid]);(0,M.eV)("idea",aa);let[ab,ac]=(0,f.useState)(!1),[ad,ae]=(0,f.useState)(""),[af,ag]=(0,f.useState)(!1),[ah,ai]=(0,f.useState)(null),[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(a.title),[an,ao]=(0,f.useState)(a.content||""),[ap,aq]=(0,f.useState)(!1),[ar,as]=(0,f.useState)(null),[at,au]=(0,f.useState)(!1),[av,aw]=(0,f.useState)(!1),[ax,ay]=(0,f.useState)([]),[az,aA]=(0,f.useState)(!1),[aB,aC]=(0,f.useState)(null),[aD,aE]=(0,f.useState)(!1),[aF,aG]=(0,f.useState)(null),[aH,aI]=(0,f.useState)(!1),aJ="elaborated"!==a.status,aK="resolved"===a.elaborationStatus,aL=("elaborating"===a.status||"elaborated"===a.status)&&aK,aM="elaborating"===a.status&&(!a.elaborationStatus||"resolved"!==a.elaborationStatus)&&a.assignee?.uuid===c,aN="elaborated"!==a.status,aO=()=>{ak(!1),am(a.title),ao(a.content||""),as(null)},aP=async()=>{if(!al.trim())return void as(Q("ideas.titleRequired"));aq(!0),as(null);let c=await (0,E.J)({ideaUuid:a.uuid,projectUuid:b,title:al.trim(),content:an.trim()||null});aq(!1),c.success?(ak(!1),T.refresh()):as(c.error||Q("ideas.updateFailed"))},aQ=async()=>{au(!0);let c=await (0,F.Z)(a.uuid,b);au(!1),c.success&&(P?.(),h(),T.refresh())},aR=async()=>{if(!ad.trim())return void ai(Q("elaboration.skipReasonRequired"));ag(!0),ai(null);let b=await (0,L.y)(a.uuid,ad.trim());ag(!1),b.success?(ac(!1),ae(""),T.refresh()):ai(b.error||Q("common.genericError"))},aS=async()=>{aw(!0),aC(null),aG(null),aA(!0);try{let[a,c]=await Promise.all([fetch("/api/projects?pageSize=100"),fetch("/api/project-groups")]),[d,e]=await Promise.all([a.json(),c.json()]);if(d.success){let a=d.data.filter(a=>a.uuid!==b).map(a=>({uuid:a.uuid,name:a.name,groupUuid:a.groupUuid})),c=new Map;if(e.success)for(let a of e.data.groups||e.data)c.set(a.uuid,a.name);let f=new Map,g=[];for(let b of a)b.groupUuid&&c.has(b.groupUuid)?(f.has(b.groupUuid)||f.set(b.groupUuid,{uuid:b.groupUuid,name:c.get(b.groupUuid),projects:[]}),f.get(b.groupUuid).projects.push({uuid:b.uuid,name:b.name})):g.push({uuid:b.uuid,name:b.name});let h=[...f.values()];g.length>0&&h.push({uuid:"ungrouped",name:Q("ideas.ungrouped"),projects:g}),ay(h)}}catch{ay([])}aA(!1)},aT=async()=>{if(aB&&!aD){aE(!0),aG(null);try{let b=await fetch(`/api/ideas/${a.uuid}/move`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetProjectUuid:aB.uuid})}),c=await b.json();c.success?(aw(!1),h(),T.refresh()):aG("string"==typeof c.error?c.error:c.error?.message||Q("ideas.moveFailed"))}catch{aG(Q("ideas.moveFailed"))}aE(!1)}};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20",onClick:h}),(0,e.jsxs)("div",{className:`fixed right-0 top-14 md:top-0 z-50 flex h-[calc(100%-3.5rem)] md:h-full w-full md:w-[480px] flex-col bg-white shadow-xl border-l border-[#E5E0D8] ${aH?"":"animate-in slide-in-from-right duration-300"}`,children:[(0,e.jsxs)("div",{className:"flex items-center justify-between border-b border-[#F5F2EC] px-6 py-5",children:[(0,e.jsx)("div",{className:"flex-1 min-w-0",children:aj?(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C]",children:Q("ideas.editIdea")}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C] truncate",children:a.title}),(0,e.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,e.jsx)(t.E,{className:R[a.status]||"",children:Q(`status.${S[a.status]||a.status}`)}),(0,e.jsx)("span",{className:"text-xs text-[#9A9A9A]",children:new Date(a.createdAt).toLocaleDateString()})]})]})}),(0,e.jsxs)("div",{className:"flex items-center gap-2 ml-4",children:[aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aS,title:Q("ideas.moveToProject"),children:(0,e.jsx)(k.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:()=>{am(a.title),ao(a.content||""),as(null),ak(!0)},children:(0,e.jsx)(l.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aj?aO:h,children:(0,e.jsx)(m.A,{className:"h-4 w-4 text-[#6B6B6B]"})})]})]}),(0,e.jsx)(y.F,{className:"flex-1 min-h-0 [&_[data-slot=scroll-area-viewport]>div]:!block",children:(0,e.jsx)("div",{className:"flex min-h-full flex-col px-6 py-5",children:aj?(0,e.jsxs)("div",{className:"space-y-5",children:[ar&&(0,e.jsx)("div",{className:"rounded-lg bg-destructive/10 p-3 text-sm text-destructive",children:ar}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-title",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("ideas.titleLabel")}),(0,e.jsx)(v.p,{id:"edit-title",value:al,onChange:a=>am(a.target.value),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0})]}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-content",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("common.content")}),(0,e.jsx)(w.T,{id:"edit-content",value:an,onChange:a=>ao(a.target.value),rows:8,className:"border-[#E5E0D8] text-sm resize-none focus-visible:ring-[#C67A52]"})]})]}):(0,e.jsxs)(N.P.div,{variants:O.qG,initial:"initial",animate:"animate",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.assignee")}),(0,e.jsx)("div",{className:"mt-2 flex items-center gap-2.5 rounded-lg bg-[#FAF8F4] p-3",children:a.assignee?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(C.eu,{className:"h-7 w-7",children:(0,e.jsx)(C.q5,{className:"agent"===a.assignee.type?"bg-[#C67A52] text-white":"bg-[#E5E0D8] text-[#6B6B6B]",children:"agent"===a.assignee.type?(0,e.jsx)(n.A,{className:"h-3.5 w-3.5"}):a.assignee.name.charAt(0).toUpperCase()})}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"text-sm font-medium text-[#2C2C2C]",children:a.assignee.name}),(0,e.jsx)("div",{className:"text-xs text-[#6B6B6B]",children:"agent"===a.assignee.type?`${Q("common.agent")} • ${a.assignee.assignedAt?new Date(a.assignee.assignedAt).toLocaleDateString():""}`:Q("common.user")})]})]}):(0,e.jsx)("span",{className:"text-sm text-[#9A9A9A]",children:Q("common.unassigned")})})]}),$&&$.rounds.length>0&&(0,e.jsx)("div",{className:"mt-5",children:(0,e.jsx)(J.R,{ideaUuid:a.uuid,elaboration:$,onRefresh:async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)}})}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.content")}),(0,e.jsx)("div",{className:"mt-2",children:a.content?(0,e.jsx)("div",{className:"prose prose-sm max-w-none text-[13px] leading-relaxed text-[#2C2C2C]",children:(0,e.jsx)(G.jH,{plugins:{code:H.a},children:a.content})}):(0,e.jsx)("p",{className:"text-sm italic text-[#9A9A9A]",children:Q("common.noContent")})})]}),(0,e.jsxs)("div",{className:"mt-5 flex-1",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.activity")}),(0,e.jsx)("div",{className:"mt-2 space-y-3",children:W?(0,e.jsx)("div",{className:"flex items-center justify-center py-4",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):0===U.length?(0,e.jsx)("p",{className:"text-sm text-[#9A9A9A] italic",children:Q("common.noActivity")}):U.map(a=>(0,e.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,e.jsx)("div",{className:"mt-1.5 h-2 w-2 shrink-0 rounded-full bg-[#9A9A9A]"}),(0,e.jsxs)("div",{className:"flex-1",children:[(0,e.jsx)("p",{className:"text-[13px] text-[#2C2C2C]",children:function(a,b){let{action:c,actorName:d}=a;switch(c){case"created":case"idea_created":return b("activity.ideaCreated",{actor:d});case"assigned":case"idea_assigned":return b("activity.ideaAssigned",{actor:d});case"claimed":case"idea_claimed":return b("activity.ideaClaimed",{actor:d});case"released":case"idea_released":return b("activity.ideaReleased",{actor:d});case"status_changed":case"idea_status_changed":return b("activity.ideaStatusChanged",{actor:d});case"elaboration_started":return b("activity.elaborationStarted",{actor:d});case"elaboration_answered":return b("activity.elaborationAnswered",{actor:d});case"elaboration_skipped":return b("activity.elaborationSkipped",{actor:d});case"elaboration_resolved":return b("activity.elaborationResolved",{actor:d});case"elaboration_followup":return b("activity.elaborationFollowup",{actor:d});default:return`${d}: ${c}`}}(a,Q)}),(0,e.jsx)("p",{className:"text-[11px] text-[#9A9A9A]",children:function(a,b){let c=new Date(a),d=new Date().getTime()-c.getTime(),e=Math.floor(d/6e4),f=Math.floor(d/36e5),g=Math.floor(d/864e5);return e<1?b("time.justNow"):e<60?b("time.minutesAgo",{minutes:e}):f<24?b("time.hoursAgo",{hours:f}):g<7?b("time.daysAgo",{days:g}):c.toLocaleDateString()}(a.createdAt,Q)})]})]},a.uuid))})]}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("comments.title")}),(0,e.jsx)("div",{className:"mt-2",children:(0,e.jsx)(D.$,{targetType:"idea",targetUuid:a.uuid,currentUserUuid:c,compact:!0})})]})]})})}),(0,e.jsx)("div",{className:"border-t border-[#F5F2EC] px-6 py-4",children:(0,e.jsx)("div",{className:"flex items-center justify-between gap-3",children:aj?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:aO,disabled:ap,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aP,disabled:ap||!al.trim(),children:ap?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.saving")]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(p.A,{className:"mr-2 h-4 w-4"}),Q("ideas.saveChanges")]})})]}):(0,e.jsxs)(e.Fragment,{children:[aJ&&(0,e.jsxs)(u.$,{variant:"outline",className:"shrink-0 border-[#E5E0D8] rounded-md px-4 py-2 text-[13px] font-medium",onClick:()=>Z(!0),children:[(0,e.jsx)(q.A,{className:"mr-2 h-4 w-4"}),a.assignee?Q("common.reassign"):Q("common.assign")]}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[aM&&(0,e.jsx)(u.$,{variant:"outline",size:"sm",className:"border-[#E5E0D8]",onClick:()=>{ae(""),ai(null),ac(!0)},children:Q("elaboration.skipButton")}),aL&&(0,e.jsx)(i(),{href:`/projects/${b}/proposals/new?ideaUuid=${a.uuid}`,children:(0,e.jsxs)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:[(0,e.jsx)(r.A,{className:"mr-2 h-4 w-4"}),Q("proposals.createProposal")]})}),"elaborating"===a.status&&!aK&&!aM&&(0,e.jsx)("span",{className:"text-[11px] text-[#9A9A9A]",children:Q("elaboration.elaborationRequiredHint")})]}),(0,e.jsxs)(B.Lt,{children:[(0,e.jsx)(B.tv,{asChild:!0,children:(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"shrink-0 h-8 w-8 border-[#E5E0D8] text-[#EF4444] hover:bg-[#FFEBEE] hover:text-[#EF4444] hover:border-[#EF4444]",children:(0,e.jsx)(s.A,{className:"h-4 w-4"})})}),(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("ideas.deleteIdea")}),(0,e.jsx)(B.$v,{children:Q("ideas.deleteIdeaConfirm",{title:a.title})})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{variant:"destructive",onClick:aQ,disabled:at,children:at?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.delete")]}):Q("common.delete")})]})]})]})]})})})]}),(0,e.jsx)(B.Lt,{open:ab,onOpenChange:ac,children:(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("elaboration.skipConfirmTitle")}),(0,e.jsx)(B.$v,{children:Q("elaboration.skipConfirmDescription")})]}),(0,e.jsxs)("div",{className:"space-y-2 py-2",children:[(0,e.jsx)(x.J,{htmlFor:"skip-reason",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("elaboration.skipReasonLabel")}),(0,e.jsx)(v.p,{id:"skip-reason",value:ad,onChange:a=>{ae(a.target.value),ah&&ai(null)},placeholder:Q("elaboration.skipReasonPlaceholder"),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0}),ah&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:ah})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{disabled:af,children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{onClick:a=>{a.preventDefault(),aR()},disabled:af||!ad.trim(),className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:af?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.processing")]}):Q("elaboration.skipButton")})]})]})}),(0,e.jsx)(A.lG,{open:av,onOpenChange:aw,children:(0,e.jsxs)(A.Cf,{children:[(0,e.jsxs)(A.c7,{children:[(0,e.jsx)(A.L3,{children:Q("ideas.moveIdeaTitle")}),(0,e.jsx)(A.rr,{children:Q("ideas.moveIdeaDescription")})]}),aF&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:aF}),az?(0,e.jsx)("div",{className:"flex items-center justify-center h-[320px] border border-[#E5E0D8] rounded-lg",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):(0,e.jsxs)(z.uB,{className:"border border-[#E5E0D8] rounded-lg",filter:(a,b,c)=>{let d=b.toLowerCase();return a.toLowerCase().includes(d)||c?.some(a=>a.toLowerCase().includes(d))?1:0},children:[(0,e.jsx)(z.G7,{placeholder:Q("ideas.searchProjects")}),(0,e.jsxs)(z.oI,{className:"h-[280px]",children:[(0,e.jsx)(z.xL,{children:Q("ideas.noProjectsFound")}),ax.map(a=>(0,e.jsx)(z.L$,{heading:a.name,children:a.projects.map(b=>(0,e.jsxs)(z.h_,{value:b.name,keywords:[a.name],onSelect:()=>aC(b),className:aB?.uuid===b.uuid?"bg-[#C67A52] text-white data-[selected=true]:bg-[#B56A42] data-[selected=true]:text-white":"",children:[(0,e.jsx)(p.A,{className:`mr-2 h-4 w-4 ${aB?.uuid===b.uuid?"opacity-100":"opacity-0"}`}),b.name]},b.uuid))},a.uuid))]})]}),(0,e.jsxs)("div",{className:"flex justify-end gap-3 pt-2",children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:()=>aw(!1),disabled:aD,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aT,disabled:!aB||aD,children:aD?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("ideas.moving")]}):Q("ideas.moveToProject")})]})]})}),Y&&(0,e.jsx)(I.i,{idea:{uuid:a.uuid,title:a.title,content:a.content,status:a.status,assignee:a.assignee?{type:a.assignee.type,uuid:a.assignee.uuid,name:a.assignee.name}:null},projectUuid:b,currentUserUuid:c,onClose:()=>{Z(!1),h()}})]})}d()}catch(a){d(a)}})},61007:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},63413:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(34269),e=c(42711);function f(...a){return(0,e.QP)((0,d.$)(a))}},74236:(a,b,c)=>{c.d(b,{Wu:()=>i,ZB:()=>h,Zp:()=>f,aR:()=>g});var d=c(10023);c(73426);var e=c(63413);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}},94549:(a,b,c)=>{c.d(b,{y:()=>e});var d=c(42377);let e=(0,d.createServerReference)("602890c9422ea07604ec0728f0486c48f543fd709f",d.callServer,void 0,d.findSourceMapURL,"skipElaborationAction")}};
1
+ "use strict";exports.id=5031,exports.ids=[5031],exports.modules={27380:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{D:()=>Q});var e=c(10837),f=c(21968),g=c(1007),h=c(81512),i=c.n(h),j=c(9222),k=c(24364),l=c(87461),m=c(10694),n=c(16235),o=c(86460),p=c(9810),q=c(97443),r=c(65956),s=c(79543),t=c(49599),u=c(42424),v=c(9994),w=c(20170),x=c(2852),y=c(74645),z=c(10297),A=c(11568),B=c(6019),C=c(80251),D=c(56828);c(35568);var E=c(78714),F=c(69391),G=c(41709),H=c(83457),I=c(76605),J=c(17613),K=c(18789),L=c(94549),M=c(76172),N=c(31009),O=c(45148),P=a([D,H]);[D,H]=P.then?(await P)():P;let R={open:"bg-[#FFF3E0] text-[#E65100]",elaborating:"bg-[#E3F2FD] text-[#1976D2]",elaborated:"bg-[#E0F2F1] text-[#00796B]"},S={open:"open",elaborating:"elaborating",elaborated:"elaborated"};function Q({idea:a,projectUuid:b,currentUserUuid:c,isUsedInProposal:d,onClose:h,onDeleted:P}){let Q=(0,j.c)(),T=(0,g.useRouter)(),[U,V]=(0,f.useState)([]),[W,X]=(0,f.useState)(!0),[Y,Z]=(0,f.useState)(!1),[$,_]=(0,f.useState)(null),aa=(0,f.useCallback)(async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)},[a.uuid]);(0,M.eV)("idea",aa);let[ab,ac]=(0,f.useState)(!1),[ad,ae]=(0,f.useState)(""),[af,ag]=(0,f.useState)(!1),[ah,ai]=(0,f.useState)(null),[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(a.title),[an,ao]=(0,f.useState)(a.content||""),[ap,aq]=(0,f.useState)(!1),[ar,as]=(0,f.useState)(null),[at,au]=(0,f.useState)(!1),[av,aw]=(0,f.useState)(!1),[ax,ay]=(0,f.useState)([]),[az,aA]=(0,f.useState)(!1),[aB,aC]=(0,f.useState)(null),[aD,aE]=(0,f.useState)(!1),[aF,aG]=(0,f.useState)(null),[aH,aI]=(0,f.useState)(!1),aJ="elaborated"!==a.status,aK="resolved"===a.elaborationStatus,aL=("elaborating"===a.status||"elaborated"===a.status)&&aK,aM="elaborating"===a.status&&(!a.elaborationStatus||"resolved"!==a.elaborationStatus)&&a.assignee?.uuid===c,aN="elaborated"!==a.status,aO=()=>{ak(!1),am(a.title),ao(a.content||""),as(null)},aP=async()=>{if(!al.trim())return void as(Q("ideas.titleRequired"));aq(!0),as(null);let c=await (0,E.J)({ideaUuid:a.uuid,projectUuid:b,title:al.trim(),content:an.trim()||null});aq(!1),c.success?(ak(!1),T.refresh()):as(c.error||Q("ideas.updateFailed"))},aQ=async()=>{au(!0);let c=await (0,F.Z)(a.uuid,b);au(!1),c.success&&(P?.(),h(),T.refresh())},aR=async()=>{if(!ad.trim())return void ai(Q("elaboration.skipReasonRequired"));ag(!0),ai(null);let b=await (0,L.y)(a.uuid,ad.trim());ag(!1),b.success?(ac(!1),ae(""),T.refresh()):ai(b.error||Q("common.genericError"))},aS=async()=>{aw(!0),aC(null),aG(null),aA(!0);try{let[a,c]=await Promise.all([fetch("/api/projects?pageSize=100"),fetch("/api/project-groups")]),[d,e]=await Promise.all([a.json(),c.json()]);if(d.success){let a=d.data.filter(a=>a.uuid!==b).map(a=>({uuid:a.uuid,name:a.name,groupUuid:a.groupUuid})),c=new Map;if(e.success)for(let a of e.data.groups||e.data)c.set(a.uuid,a.name);let f=new Map,g=[];for(let b of a)b.groupUuid&&c.has(b.groupUuid)?(f.has(b.groupUuid)||f.set(b.groupUuid,{uuid:b.groupUuid,name:c.get(b.groupUuid),projects:[]}),f.get(b.groupUuid).projects.push({uuid:b.uuid,name:b.name})):g.push({uuid:b.uuid,name:b.name});let h=[...f.values()];g.length>0&&h.push({uuid:"ungrouped",name:Q("ideas.ungrouped"),projects:g}),ay(h)}}catch{ay([])}aA(!1)},aT=async()=>{if(aB&&!aD){aE(!0),aG(null);try{let b=await fetch(`/api/ideas/${a.uuid}/move`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetProjectUuid:aB.uuid})}),c=await b.json();c.success?(aw(!1),h(),T.refresh()):aG("string"==typeof c.error?c.error:c.error?.message||Q("ideas.moveFailed"))}catch{aG(Q("ideas.moveFailed"))}aE(!1)}};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"fixed inset-0 z-40 bg-black/20",onClick:h}),(0,e.jsxs)("div",{className:`fixed right-0 top-14 md:top-0 z-50 flex h-[calc(100%-3.5rem)] md:h-full w-full md:w-[480px] flex-col bg-white shadow-xl border-l border-[#E5E0D8] ${aH?"":"animate-in slide-in-from-right duration-300"}`,children:[(0,e.jsxs)("div",{className:"flex items-center justify-between border-b border-[#F5F2EC] px-6 py-5",children:[(0,e.jsx)("div",{className:"flex-1 min-w-0",children:aj?(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C]",children:Q("ideas.editIdea")}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("h2",{className:"text-base font-semibold text-[#2C2C2C] truncate",children:a.title}),(0,e.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,e.jsx)(t.E,{className:R[a.status]||"",children:Q(`status.${S[a.status]||a.status}`)}),(0,e.jsx)("span",{className:"text-xs text-[#9A9A9A]",children:new Date(a.createdAt).toLocaleDateString()})]})]})}),(0,e.jsxs)("div",{className:"flex items-center gap-2 ml-4",children:[aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aS,title:Q("ideas.moveToProject"),children:(0,e.jsx)(k.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),aN&&!aj&&(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:()=>{am(a.title),ao(a.content||""),as(null),ak(!0)},children:(0,e.jsx)(l.A,{className:"h-4 w-4 text-[#6B6B6B]"})}),(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"h-8 w-8 border-[#E5E0D8]",onClick:aj?aO:h,children:(0,e.jsx)(m.A,{className:"h-4 w-4 text-[#6B6B6B]"})})]})]}),(0,e.jsx)(y.F,{className:"flex-1 min-h-0 [&_[data-slot=scroll-area-viewport]>div]:!block",children:(0,e.jsx)("div",{className:"flex min-h-full flex-col px-6 py-5",children:aj?(0,e.jsxs)("div",{className:"space-y-5",children:[ar&&(0,e.jsx)("div",{className:"rounded-lg bg-destructive/10 p-3 text-sm text-destructive",children:ar}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-title",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("ideas.titleLabel")}),(0,e.jsx)(v.p,{id:"edit-title",value:al,onChange:a=>am(a.target.value),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0})]}),(0,e.jsxs)("div",{className:"space-y-2",children:[(0,e.jsx)(x.J,{htmlFor:"edit-content",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("common.content")}),(0,e.jsx)(w.T,{id:"edit-content",value:an,onChange:a=>ao(a.target.value),rows:8,className:"border-[#E5E0D8] text-sm resize-none focus-visible:ring-[#C67A52]"})]})]}):(0,e.jsxs)(N.P.div,{variants:O.qG,initial:"initial",animate:"animate",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.assignee")}),(0,e.jsx)("div",{className:"mt-2 flex items-center gap-2.5 rounded-lg bg-[#FAF8F4] p-3",children:a.assignee?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(C.eu,{className:"h-7 w-7",children:(0,e.jsx)(C.q5,{className:"agent"===a.assignee.type?"bg-[#C67A52] text-white":"bg-[#E5E0D8] text-[#6B6B6B]",children:"agent"===a.assignee.type?(0,e.jsx)(n.A,{className:"h-3.5 w-3.5"}):a.assignee.name.charAt(0).toUpperCase()})}),(0,e.jsxs)("div",{children:[(0,e.jsx)("div",{className:"text-sm font-medium text-[#2C2C2C]",children:a.assignee.name}),(0,e.jsx)("div",{className:"text-xs text-[#6B6B6B]",children:"agent"===a.assignee.type?`${Q("common.agent")} • ${a.assignee.assignedAt?new Date(a.assignee.assignedAt).toLocaleDateString():""}`:Q("common.user")})]})]}):(0,e.jsx)("span",{className:"text-sm text-[#9A9A9A]",children:Q("common.unassigned")})})]}),$&&$.rounds.length>0&&(0,e.jsx)("div",{className:"mt-5",children:(0,e.jsx)(J.R,{ideaUuid:a.uuid,elaboration:$,onRefresh:async()=>{let b=await (0,K.z)(a.uuid);b.success&&b.data&&_(b.data)}})}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.content")}),(0,e.jsx)("div",{className:"mt-2",children:a.content?(0,e.jsx)("div",{className:"prose prose-sm max-w-none text-[13px] leading-relaxed text-[#2C2C2C]",children:(0,e.jsx)(G.jH,{plugins:{code:H.a},children:a.content})}):(0,e.jsx)("p",{className:"text-sm italic text-[#9A9A9A]",children:Q("common.noContent")})})]}),(0,e.jsxs)("div",{className:"mt-5 flex-1",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("common.activity")}),(0,e.jsx)("div",{className:"mt-2 space-y-3",children:W?(0,e.jsx)("div",{className:"flex items-center justify-center py-4",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):0===U.length?(0,e.jsx)("p",{className:"text-sm text-[#9A9A9A] italic",children:Q("common.noActivity")}):U.map(a=>(0,e.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,e.jsx)("div",{className:"mt-1.5 h-2 w-2 shrink-0 rounded-full bg-[#9A9A9A]"}),(0,e.jsxs)("div",{className:"flex-1",children:[(0,e.jsx)("p",{className:"text-[13px] text-[#2C2C2C]",children:function(a,b){let{action:c,actorName:d}=a;switch(c){case"created":case"idea_created":return b("activity.ideaCreated",{actor:d});case"assigned":case"idea_assigned":return b("activity.ideaAssigned",{actor:d});case"claimed":case"idea_claimed":return b("activity.ideaClaimed",{actor:d});case"released":case"idea_released":return b("activity.ideaReleased",{actor:d});case"status_changed":case"idea_status_changed":return b("activity.ideaStatusChanged",{actor:d});case"elaboration_started":return b("activity.elaborationStarted",{actor:d});case"elaboration_answered":return b("activity.elaborationAnswered",{actor:d});case"elaboration_skipped":return b("activity.elaborationSkipped",{actor:d});case"elaboration_resolved":return b("activity.elaborationResolved",{actor:d});case"elaboration_followup":return b("activity.elaborationFollowup",{actor:d});default:return`${d}: ${c}`}}(a,Q)}),(0,e.jsx)("p",{className:"text-[11px] text-[#9A9A9A]",children:function(a,b){let c=new Date(a),d=new Date().getTime()-c.getTime(),e=Math.floor(d/6e4),f=Math.floor(d/36e5),g=Math.floor(d/864e5);return e<1?b("time.justNow"):e<60?b("time.minutesAgo",{minutes:e}):f<24?b("time.hoursAgo",{hours:f}):g<7?b("time.daysAgo",{days:g}):c.toLocaleDateString()}(a.createdAt,Q)})]})]},a.uuid))})]}),(0,e.jsxs)("div",{className:"mt-5",children:[(0,e.jsx)("label",{className:"text-[11px] font-medium uppercase tracking-wider text-[#9A9A9A]",children:Q("comments.title")}),(0,e.jsx)("div",{className:"mt-2",children:(0,e.jsx)(D.$,{targetType:"idea",targetUuid:a.uuid,currentUserUuid:c,compact:!0})})]})]})})}),(0,e.jsx)("div",{className:"border-t border-[#F5F2EC] px-6 py-4",children:(0,e.jsx)("div",{className:"flex items-center justify-between gap-3",children:aj?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:aO,disabled:ap,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aP,disabled:ap||!al.trim(),children:ap?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.saving")]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(p.A,{className:"mr-2 h-4 w-4"}),Q("ideas.saveChanges")]})})]}):(0,e.jsxs)(e.Fragment,{children:[aJ&&(0,e.jsxs)(u.$,{variant:"outline",className:"shrink-0 border-[#E5E0D8] rounded-md px-4 py-2 text-[13px] font-medium",onClick:()=>Z(!0),children:[(0,e.jsx)(q.A,{className:"mr-2 h-4 w-4"}),a.assignee?Q("common.reassign"):Q("common.assign")]}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[aM&&(0,e.jsx)(u.$,{variant:"outline",size:"sm",className:"border-[#E5E0D8]",onClick:()=>{ae(""),ai(null),ac(!0)},children:Q("elaboration.skipButton")}),aL&&(0,e.jsx)(i(),{href:`/projects/${b}/proposals/new?ideaUuid=${a.uuid}`,children:(0,e.jsxs)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:[(0,e.jsx)(r.A,{className:"mr-2 h-4 w-4"}),Q("proposals.createProposal")]})}),"elaborating"===a.status&&!aK&&!aM&&(0,e.jsx)("span",{className:"text-[11px] text-[#9A9A9A]",children:Q("elaboration.elaborationRequiredHint")})]}),(0,e.jsxs)(B.Lt,{children:[(0,e.jsx)(B.tv,{asChild:!0,children:(0,e.jsx)(u.$,{variant:"outline",size:"icon",className:"shrink-0 h-8 w-8 border-[#E5E0D8] text-[#EF4444] hover:bg-[#FFEBEE] hover:text-[#EF4444] hover:border-[#EF4444]",children:(0,e.jsx)(s.A,{className:"h-4 w-4"})})}),(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("ideas.deleteIdea")}),(0,e.jsx)(B.$v,{children:Q("ideas.deleteIdeaConfirm",{title:a.title})})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{variant:"destructive",onClick:aQ,disabled:at,children:at?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.delete")]}):Q("common.delete")})]})]})]})]})})})]}),(0,e.jsx)(B.Lt,{open:ab,onOpenChange:ac,children:(0,e.jsxs)(B.EO,{children:[(0,e.jsxs)(B.wd,{children:[(0,e.jsx)(B.r7,{children:Q("elaboration.skipConfirmTitle")}),(0,e.jsx)(B.$v,{children:Q("elaboration.skipConfirmDescription")})]}),(0,e.jsxs)("div",{className:"space-y-2 py-2",children:[(0,e.jsx)(x.J,{htmlFor:"skip-reason",className:"text-[13px] font-medium text-[#2C2C2C]",children:Q("elaboration.skipReasonLabel")}),(0,e.jsx)(v.p,{id:"skip-reason",value:ad,onChange:a=>{ae(a.target.value),ah&&ai(null)},placeholder:Q("elaboration.skipReasonPlaceholder"),className:"border-[#E5E0D8] text-sm focus-visible:ring-[#C67A52]",autoFocus:!0}),ah&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:ah})]}),(0,e.jsxs)(B.ck,{children:[(0,e.jsx)(B.Zr,{disabled:af,children:Q("common.cancel")}),(0,e.jsx)(B.Rx,{onClick:a=>{a.preventDefault(),aR()},disabled:af||!ad.trim(),className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",children:af?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("common.processing")]}):Q("elaboration.skipButton")})]})]})}),(0,e.jsx)(A.lG,{open:av,onOpenChange:aw,children:(0,e.jsxs)(A.Cf,{children:[(0,e.jsxs)(A.c7,{children:[(0,e.jsx)(A.L3,{children:Q("ideas.moveIdeaTitle")}),(0,e.jsx)(A.rr,{children:Q("ideas.moveIdeaDescription")})]}),aF&&(0,e.jsx)("p",{className:"text-xs text-destructive",children:aF}),az?(0,e.jsx)("div",{className:"flex items-center justify-center h-[320px] border border-[#E5E0D8] rounded-lg",children:(0,e.jsx)(o.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):(0,e.jsxs)(z.uB,{className:"border border-[#E5E0D8] rounded-lg",filter:(a,b,c)=>{let d=b.toLowerCase();return a.toLowerCase().includes(d)||c?.some(a=>a.toLowerCase().includes(d))?1:0},children:[(0,e.jsx)(z.G7,{placeholder:Q("ideas.searchProjects")}),(0,e.jsxs)(z.oI,{className:"h-[280px]",children:[(0,e.jsx)(z.xL,{children:Q("ideas.noProjectsFound")}),ax.map(a=>(0,e.jsx)(z.L$,{heading:a.name,children:a.projects.map(b=>(0,e.jsxs)(z.h_,{value:b.name,keywords:[a.name],onSelect:()=>aC(b),className:aB?.uuid===b.uuid?"bg-[#C67A52] text-white data-[selected=true]:bg-[#B56A42] data-[selected=true]:text-white":"",children:[(0,e.jsx)(p.A,{className:`mr-2 h-4 w-4 ${aB?.uuid===b.uuid?"opacity-100":"opacity-0"}`}),b.name]},b.uuid))},a.uuid))]})]}),(0,e.jsxs)("div",{className:"flex justify-end gap-3 pt-2",children:[(0,e.jsx)(u.$,{variant:"outline",className:"border-[#E5E0D8]",onClick:()=>aw(!1),disabled:aD,children:Q("common.cancel")}),(0,e.jsx)(u.$,{className:"bg-[#C67A52] hover:bg-[#B56A42] text-white",onClick:aT,disabled:!aB||aD,children:aD?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.A,{className:"mr-2 h-4 w-4 animate-spin"}),Q("ideas.moving")]}):Q("ideas.moveToProject")})]})]})}),Y&&(0,e.jsx)(I.i,{idea:{uuid:a.uuid,title:a.title,content:a.content,status:a.status,assignee:a.assignee?{type:a.assignee.type,uuid:a.assignee.uuid,name:a.assignee.name}:null},projectUuid:b,currentUserUuid:c,onClose:()=>{Z(!1),h()}})]})}d()}catch(a){d(a)}})},54349:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Hu:()=>n,eT:()=>m,fg:()=>l,uA:()=>q});var e=c(52618),f=c(76872),g=c(90494),h=c(88437),i=c(42558),j=c(65582),k=a([e,f,g,h]);async function l({companyUuid:a,targetType:b,targetUuid:c,skip:d,take:g}){if(!await (0,f._9)(b,c,a))return{comments:[],total:0};let h={companyUuid:a,targetType:b,targetUuid:c},[i,j]=await Promise.all([e.z.comment.findMany({where:h,skip:d,take:g,orderBy:{createdAt:"asc"},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.comment.count({where:h})]);return{comments:await Promise.all(i.map(async a=>{let b=await (0,f.lR)(a.authorType,a.authorUuid);return{uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,content:a.content,author:{type:a.authorType,uuid:a.authorUuid,name:b??"Unknown"},createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})),total:j}}async function m({companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h}){if(!await (0,f._9)(b,c,a))throw Error(`Target ${b} with UUID ${c} not found`);let k=await e.z.comment.create({data:{companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),l=await (0,f.lR)(k.authorType,k.authorUuid);return n(b,c).then(d=>{d&&i.B.emitChange({companyUuid:a,projectUuid:d,entityType:b,entityUuid:c,action:"updated",actorUuid:h})}).catch(()=>{}),p(a,b,c,k.uuid,d,g,h).catch(a=>j.A.error({err:a},"Failed to process comment mentions")),{uuid:k.uuid,targetType:k.targetType,targetUuid:k.targetUuid,content:k.content,author:{type:k.authorType,uuid:k.authorUuid,name:l??"Unknown"},createdAt:k.createdAt.toISOString(),updatedAt:k.updatedAt.toISOString()}}async function n(a,b,c){let d=c?{companyUuid:c}:{};switch(a){case"task":{let a=await e.z.task.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"idea":{let a=await e.z.idea.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"proposal":{let a=await e.z.proposal.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}case"document":{let a=await e.z.document.findFirst({where:{uuid:b,...d},select:{projectUuid:!0}});return a?.projectUuid??null}default:return null}}async function o(a,b){switch(a){case"task":{let a=await e.z.task.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Task"}case"idea":{let a=await e.z.idea.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Idea"}case"proposal":{let a=await e.z.proposal.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Proposal"}case"document":{let a=await e.z.document.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Document"}default:return"Unknown"}}async function p(a,b,c,d,e,f,i){let j=g.Xs(e);if(0===j.length)return;let k=await n(b,c);if(!k)return;let l=await o(b,c);for(let m of(await g.AM({companyUuid:a,sourceType:"comment",sourceUuid:d,content:e,actorType:f,actorUuid:i,projectUuid:k,entityTitle:l}),j))(m.type!==f||m.uuid!==i)&&await h.createActivity({companyUuid:a,projectUuid:k,targetType:b,targetUuid:c,actorType:f,actorUuid:i,action:"mentioned",value:{mentionedType:m.type,mentionedUuid:m.uuid,mentionedName:m.displayName,sourceType:"comment",sourceUuid:d}})}async function q(a,b,c){if(0===c.length)return{};let d=await e.z.comment.groupBy({by:["targetUuid"],where:{companyUuid:a,targetType:b,targetUuid:{in:c}},_count:{targetUuid:!0}}),f={};for(let a of c)f[a]=0;for(let a of d)f[a.targetUuid]=a._count.targetUuid;return f}[e,f,g,h]=k.then?(await k)():k,d()}catch(a){d(a)}})},61007:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(91533).A)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},63413:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(34269),e=c(42711);function f(...a){return(0,e.QP)((0,d.$)(a))}},74236:(a,b,c)=>{c.d(b,{Wu:()=>i,ZB:()=>h,Zp:()=>f,aR:()=>g});var d=c(10023);c(73426);var e=c(63413);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}},94549:(a,b,c)=>{c.d(b,{y:()=>e});var d=c(42377);let e=(0,d.createServerReference)("602890c9422ea07604ec0728f0486c48f543fd709f",d.callServer,void 0,d.findSourceMapURL,"skipElaborationAction")}};
@@ -0,0 +1,13 @@
1
+ "use strict";exports.id=5173,exports.ids=[5173],exports.modules={11573:(a,b,c)=>{c.d(b,{j:()=>e});let d=["#E06C75","#E5C07B","#98C379","#56B6C2","#61AFEF","#C678DD","#D19A66","#BE5046","#7EC8E3","#C3E88D","#F78C6C","#A9DC76"];function e(a){let b=function(a){let b=0;for(let c=0;c<a.length;c++)b=(b<<5)-b+a.charCodeAt(c)|0;return Math.abs(b)}(a)%d.length;return d[b]}},22727:(a,b,c)=>{c.d(b,{D:()=>h});var d=c(10837),e=c(90061),f=c(11573),g=c(16235);function h({entityType:a,entityUuid:b,subEntityType:c,subEntityUuid:g,children:h,badgeInside:j}){let{getPresence:k}=(0,e.xQ)(),l=k(a,b,c,g),m=l.length>0,n=m&&l.some(a=>"mutate"===a.action),o=m?n?l.find(a=>"mutate"===a.action):l[l.length-1]:null,p=o?(0,f.j)(o.agentName):"transparent";return(0,d.jsxs)("div",{className:"relative",style:m?{outline:`2px ${n?"solid":"dashed"} ${p}`,outlineOffset:"-2px",borderRadius:"var(--radius)"}:void 0,children:[m&&(0,d.jsxs)("div",{className:`absolute flex gap-1 z-10 justify-end ${j?"top-0.5 right-1.5 max-w-[70%]":"-top-2.5 right-2 max-w-[80%]"}`,children:[l.slice(0,3).map(a=>(0,d.jsx)(i,{entry:a},a.agentUuid)),l.length>3&&(0,d.jsxs)("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-medium text-white bg-gray-500 whitespace-nowrap",children:["+",l.length-3]})]}),h]})}function i({entry:a}){let b=(0,f.j)(a.agentName);return(0,d.jsxs)("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] font-medium text-white whitespace-nowrap animate-in fade-in duration-300 ease-out sm:text-[11px] sm:px-2",style:{backgroundColor:b},children:[(0,d.jsx)(g.A,{className:"h-2.5 w-2.5"}),a.agentName]})}},24433:(a,b,c)=>{c.d(b,{c:()=>n});var d=c(10837),e=c(21968),f=c(87864),g=c(45150),h=c(49101),i=c(96307);let j=h.A.extend({addAttributes(){return{...this.parent?.(),mentionType:{default:"user",parseHTML:a=>a.getAttribute("data-mention-type")||"user",renderHTML:a=>({"data-mention-type":a.mentionType||"user"})}}}});function k(a){let b=a.getJSON();return b.content?b.content.map(a=>(function a(b){if("mention"===b.type){let a=b.attrs;return a?`@[${a.label||a.id}](${a.mentionType||"user"}:${a.id})`:""}if("text"===b.type)return b.text||"";if("hardBreak"===b.type)return"\n";let c=b.content;return c?c.map(a).join(""):""})(a)).join("\n"):""}function l(a){if(!a)return{type:"doc",content:[{type:"paragraph"}]};let b=/@\[([^\]]+)\]\((user|agent):([a-f0-9-]+)\)/g;return{type:"doc",content:a.split("\n").map(a=>{let c,d=[],e=0,f=RegExp(b.source,"g");for(;null!==(c=f.exec(a));)c.index>e&&d.push({type:"text",text:a.slice(e,c.index)}),d.push({type:"mention",attrs:{id:c[3],label:c[1],mentionType:c[2]}}),e=c.index+c[0].length;return e<a.length&&d.push({type:"text",text:a.slice(e)}),{type:"paragraph",content:d.length>0?d:void 0}})}}function m(a,b,c,d,e){if(e.innerHTML="",b){let a=document.createElement("div");a.className="flex items-center justify-center py-3 px-4",a.innerHTML='<div class="h-4 w-4 animate-spin rounded-full border-2 border-[#9A9A9A] border-t-transparent"></div>',e.appendChild(a);return}if(0===a.length){let a=document.createElement("div");a.className="py-2 px-3 text-xs text-[#9A9A9A]",a.textContent="No results",e.appendChild(a);return}let f=document.createElement("div");f.className="py-1";let g=0,h=a=>{c({id:a.uuid,label:a.name,mentionType:a.type})},i=()=>{f.innerHTML="",a.forEach((a,b)=>{let c=document.createElement("button");c.type="button",c.className=`flex w-full items-center gap-2.5 px-3 py-1.5 text-left text-sm transition-colors ${b===g?"bg-[#FAF8F4] text-[#2C2C2C]":"text-[#6B6B6B] hover:bg-[#FAF8F4]"}`,c.onclick=()=>h(a);let d=document.createElement("div");d.className=`flex h-6 w-6 shrink-0 items-center justify-center rounded-full ${"agent"===a.type?"bg-[#C67A52] text-white":"bg-[#E5E0D8] text-[#6B6B6B]"}`,d.innerHTML="agent"===a.type?'<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 8V4H8"/><rect width="16" height="12" x="4" y="8" rx="2"/><path d="M2 14h2"/><path d="M20 14h2"/><path d="M15 13v2"/><path d="M9 13v2"/></svg>':'<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>';let e=document.createElement("div");e.className="min-w-0 flex-1";let i=document.createElement("div");if(i.className="truncate text-xs font-medium",i.textContent=a.name,e.appendChild(i),a.email){let b=document.createElement("div");b.className="truncate text-[10px] text-[#9A9A9A]",b.textContent=a.email,e.appendChild(b)}if("agent"===a.type&&a.roles&&a.roles.length>0){let b=document.createElement("div");b.className="truncate text-[10px] text-[#9A9A9A]",b.textContent=a.roles.join(", "),e.appendChild(b)}c.appendChild(d),c.appendChild(e),f.appendChild(c)})};i(),e.appendChild(f),d.current={onKeyDown:({event:b})=>"ArrowUp"===b.key?(g=g<=0?a.length-1:g-1,i(),!0):"ArrowDown"===b.key?(g=g>=a.length-1?0:g+1,i(),!0):"Enter"===b.key?(a[g]&&h(a[g]),!0):"Escape"===b.key}}let n=(0,e.forwardRef)(({value:a,onChange:b,placeholder:c,className:h,disabled:n,onSubmit:o},p)=>{let q=(0,e.useRef)([]),r=(0,e.useRef)(!1),s=(0,e.useRef)(null),t=(0,e.useRef)(null),u=(0,e.useRef)(null),[,v]=(0,e.useState)(0),w=(0,e.useRef)(!1),x=function(a,b){let c=(0,e.useRef)(null),d=(0,e.useRef)(a);return d.current=a,(0,e.useCallback)(a=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>d.current(a),250)},[250])}((0,e.useCallback)(async a=>{r.current=!0,v(a=>a+1);try{let b=await fetch(`/api/mentionables?q=${encodeURIComponent(a)}&limit=10`);if(b.ok){let a=await b.json();a.success&&(q.current=a.data)}}catch{q.current=[]}finally{r.current=!1,v(a=>a+1)}},[]),250);(0,e.useEffect)(()=>{t.current&&u.current&&m(q.current,r.current,u.current,s,t.current)});let y=(0,f.hG)({immediatelyRender:!1,extensions:[g.A.configure({heading:!1,blockquote:!1,codeBlock:!1,bulletList:!1,orderedList:!1,listItem:!1,horizontalRule:!1}),j.configure({HTMLAttributes:{class:"text-blue-600 font-medium"},renderText:({node:a})=>`@${a.attrs.label??a.attrs.id}`,suggestion:{char:"@",allowSpaces:!0,items:({query:a})=>(x(a),q.current),render:()=>({onStart:a=>{let b=document.createElement("div");if(b.className="z-[100] rounded-md border border-[#E5E0D8] bg-white shadow-md min-w-[200px] max-w-[300px] overflow-hidden",t.current=b,u.current=a.command,a.clientRect){let c="function"==typeof a.clientRect?a.clientRect():a.clientRect;c&&(b.style.position="fixed",b.style.left=`${c.left}px`,window.innerHeight-c.bottom<220?b.style.bottom=`${window.innerHeight-c.top+4}px`:b.style.top=`${c.bottom+4}px`)}document.body.appendChild(b),m(q.current,r.current,a.command,s,b)},onUpdate:a=>{if(u.current=a.command,t.current&&a.clientRect){let b="function"==typeof a.clientRect?a.clientRect():a.clientRect;b&&(t.current.style.left=`${b.left}px`,window.innerHeight-b.bottom<220?(t.current.style.top="",t.current.style.bottom=`${window.innerHeight-b.top+4}px`):(t.current.style.bottom="",t.current.style.top=`${b.bottom+4}px`))}t.current&&m(q.current,r.current,a.command,s,t.current)},onKeyDown:a=>!!s.current&&s.current.onKeyDown(a),onExit:()=>{t.current?.remove(),t.current=null,u.current=null,q.current=[],r.current=!1}})}})],content:l(a),editable:!n,editorProps:{attributes:{class:(0,i.cn)("min-h-[36px] max-h-[120px] overflow-y-auto px-3 py-2 text-sm outline-none","prose prose-sm max-w-none [&_p]:my-0"),"data-placeholder":c||""},handleKeyDown:(a,b)=>"Enter"===b.key&&!b.shiftKey&&!t.current&&!!o&&(b.preventDefault(),o(),!0)},onUpdate:({editor:a})=>{w.current=!0,b(k(a))}});return(0,e.useEffect)(()=>{if(!y||w.current){w.current=!1;return}k(y)!==a&&y.commands.setContent(l(a))},[a,y]),(0,e.useEffect)(()=>{y&&y.setEditable(!n)},[n,y]),(0,e.useImperativeHandle)(p,()=>({focus:()=>y?.commands.focus(),clear:()=>{y?.commands.clearContent(),b("")}})),(0,d.jsxs)("div",{className:(0,i.cn)("relative rounded-md border border-input bg-transparent shadow-xs transition-[color,box-shadow]","focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]",n&&"cursor-not-allowed opacity-50",h),children:[(0,d.jsx)(f.$Z,{editor:y}),(0,d.jsx)("style",{children:`
2
+ .tiptap p.is-editor-empty:first-child::before {
3
+ content: attr(data-placeholder);
4
+ color: #9A9A9A;
5
+ float: left;
6
+ height: 0;
7
+ pointer-events: none;
8
+ }
9
+ .tiptap .mention {
10
+ color: #2563eb;
11
+ font-weight: 500;
12
+ }
13
+ `})]})});n.displayName="MentionEditor"},35198:(a,b,c)=>{c.d(b,{BT:()=>i,Wu:()=>k,X9:()=>j,ZB:()=>h,Zp:()=>f,aR:()=>g,wL:()=>l});var d=c(10837);c(21968);var e=c(96307);function f({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card",className:(0,e.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",a),...b})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("leading-none font-semibold",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-description",className:(0,e.cn)("text-muted-foreground text-sm",a),...b})}function j({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-action",className:(0,e.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",a),...b})}function k({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-6",a),...b})}function l({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-footer",className:(0,e.cn)("flex items-center px-6 [.border-t]:pt-6",a),...b})}},56828:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>x});var e=c(10837),f=c(21968),g=c(9222),h=c(97443),i=c(86460),j=c(24714),k=c(33091),l=c(16235),m=c(42424),n=c(80251),o=c(24433),p=c(75620),q=c(78988),r=c(82831),s=c(76172),t=c(22727),u=c(11573),v=c(76549),w=a([r]);function x({targetType:a,targetUuid:b,currentUserUuid:c,onCountChange:d,compact:l=!1}){let r=(0,g.c)(),[u,w]=(0,f.useState)(""),[x,z]=(0,f.useState)([]),[A,B]=(0,f.useState)(!0),[C,D]=(0,f.useState)(null),[E,F]=(0,f.useState)(!1),G=(0,f.useRef)(null),H=l?"h-6 w-6":"h-[30px] w-[30px]",I=l?"gap-2":"gap-2.5",J=l?"h-3 w-3":"h-[15px] w-[15px]",K=(0,f.useCallback)(async()=>{B(!0),D(null);let c=await (0,p.d)(a,b);c.success?z(c.comments):D(c.error),B(!1)},[a,b]);(0,s.w0)(a,b,d=>{c&&d.actorUuid===c||(0,p.d)(a,b).then(a=>{a.success&&z(a.comments)})});let L=async()=>{if(!u.trim()||E)return;F(!0);let c=await (0,q.s)(a,b,u);F(!1),c.success?(z(a=>[...a,c.comment]),w(""),G.current?.clear()):v.oR.error(c.error)},M=[...x].reverse();return(0,e.jsx)(t.D,{entityType:a,entityUuid:b,subEntityType:"comment",children:(0,e.jsxs)("div",{className:"flex flex-col gap-0",children:[(0,e.jsxs)("div",{className:`flex items-center ${I} pb-3 border-b border-[#F0EDE8]`,children:[(0,e.jsx)(n.eu,{className:`${l?"h-6 w-6":"h-7 w-7"} shrink-0`,children:(0,e.jsx)(n.q5,{className:"bg-[#E5E0D8] text-[#6B6B6B]",children:(0,e.jsx)(h.A,{className:`${l?"h-3 w-3":"h-3.5 w-3.5"}`})})}),(0,e.jsx)("div",{className:"flex-1 min-w-0",children:(0,e.jsx)(o.c,{ref:G,value:u,onChange:w,onSubmit:L,placeholder:r("comments.addComment"),className:"border border-[#E5E0D8] bg-white text-sm rounded-lg",disabled:E})}),(0,e.jsx)(m.$,{size:"sm",className:"shrink-0 gap-1 bg-[#E07A5F] text-white hover:bg-[#D06A4F]",disabled:!u.trim()||E,onClick:L,children:E?(0,e.jsx)(i.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,e.jsx)(j.A,{className:"h-3.5 w-3.5"})})]}),(0,e.jsx)("div",{children:A?(0,e.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,e.jsx)(i.A,{className:"h-4 w-4 animate-spin text-[#9A9A9A]"})}):C?(0,e.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-sm text-[#9A9A9A]",children:[(0,e.jsx)(k.A,{className:"h-4 w-4"}),(0,e.jsx)("p",{children:r("comments.loadError")}),(0,e.jsx)(m.$,{variant:"outline",size:"sm",onClick:K,children:r("comments.retry")})]}):0===M.length?(0,e.jsx)("p",{className:"py-8 text-center text-sm text-[#9A9A9A] italic",children:r("comments.noComments")}):M.map(a=>(0,e.jsx)(y,{comment:a,compact:l,avatarSize:H,gap:I,iconSize:J,t:r},a.uuid))})]})})}function y({comment:a,compact:b,avatarSize:c,gap:d,iconSize:g,t:h}){let[i,j]=(0,f.useState)(!1),k="agent"===a.author.type,o=k?(0,u.j)(a.author.name):null,p=a.content.length>200,q=o?`${o}18`:void 0;return(0,e.jsxs)("div",{className:`flex ${d} py-3 border-b border-[#F0EDE8] last:border-b-0`,children:[(0,e.jsx)(n.eu,{className:`${c} shrink-0`,children:(0,e.jsx)(n.q5,{style:k?{backgroundColor:q,color:o??void 0}:void 0,className:k?"":"bg-[#E5E0D8] text-[#6B6B6B] text-[11px] font-medium",children:k?(0,e.jsx)(l.A,{className:g}):a.author.name.charAt(0).toUpperCase()})}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,e.jsxs)("div",{className:"flex items-center gap-1.5 flex-wrap",children:[(0,e.jsx)("span",{className:`${b?"text-xs":"text-[13px]"} font-semibold text-[#1A1A1A]`,children:a.author.name}),(0,e.jsx)("span",{style:k?{backgroundColor:q,color:o??void 0}:void 0,className:`inline-flex items-center rounded px-1.5 py-px text-[9px] font-medium ${k?"":"bg-[#F0EDE8] text-[#6B6B6B]"}`,children:h(k?"comments.roleAgent":"comments.roleHuman")}),(0,e.jsx)("span",{className:"text-[11px] text-[#BFBFBF]",children:function(a,b){let c=new Date(a),d=new Date().getTime()-c.getTime(),e=Math.floor(d/6e4),f=Math.floor(d/36e5),g=Math.floor(d/864e5);return e<1?b("time.justNow"):e<60?b("time.minutesAgo",{minutes:e}):f<24?b("time.hoursAgo",{hours:f}):g<7?b("time.daysAgo",{days:g}):c.toLocaleDateString()}(a.createdAt,h)})]}),k&&a.author.owner&&(0,e.jsx)("div",{className:"flex items-center gap-1 mt-0.5",children:(0,e.jsx)("span",{className:"text-[11px] text-[#A3A3A3] italic",children:h("comments.onBehalfOf",{name:a.author.owner.name})})}),(0,e.jsx)("div",{className:`mt-1 ${b?"text-xs":"text-[13px]"} leading-relaxed text-[#3D3D3D] max-w-none [&_h1]:text-sm [&_h1]:font-semibold [&_h1]:mt-2 [&_h1]:mb-1 [&_h2]:text-[13px] [&_h2]:font-semibold [&_h2]:mt-2 [&_h2]:mb-1 [&_h3]:text-[13px] [&_h3]:font-semibold [&_h3]:mt-1.5 [&_h3]:mb-0.5 [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1 [&_li]:my-0.5`,children:p&&!i?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(r.z7,{children:a.content.slice(0,200)+"..."}),(0,e.jsx)(m.$,{variant:"link",size:"sm",onClick:()=>j(!0),className:"h-auto p-0 text-[#E07A5F] text-xs font-medium mt-1",children:h("comments.showMore")})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(r.z7,{children:a.content}),p&&(0,e.jsx)(m.$,{variant:"link",size:"sm",onClick:()=>j(!1),className:"h-auto p-0 text-[#E07A5F] text-xs font-medium mt-1",children:h("comments.showLess")})]})})]})]})}r=(w.then?(await w)():w)[0],d()}catch(a){d(a)}})},75620:(a,b,c)=>{c.d(b,{d:()=>e});var d=c(42377);let e=(0,d.createServerReference)("60aaaf09814b29767a23a36b59555df07282407555",d.callServer,void 0,d.findSourceMapURL,"getCommentsAction")},78988:(a,b,c)=>{c.d(b,{s:()=>e});var d=c(42377);let e=(0,d.createServerReference)("70b2bba30986179182b8c1ff03c83ce22ac6c8090b",d.callServer,void 0,d.findSourceMapURL,"createCommentAction")},80251:(a,b,c)=>{c.d(b,{eu:()=>g,q5:()=>h});var d=c(10837);c(21968);var e=c(14672),f=c(96307);function g({className:a,size:b="default",...c}){return(0,d.jsx)(e.Root,{"data-slot":"avatar","data-size":b,className:(0,f.cn)("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6",a),...c})}function h({className:a,...b}){return(0,d.jsx)(e.Fallback,{"data-slot":"avatar-fallback",className:(0,f.cn)("bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs",a),...b})}},82831:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z7:()=>k});var e=c(10837),f=c(21968),g=c.n(f),h=c(41709),i=c(83457),j=a([i]);i=(j.then?(await j)():j)[0];let m=/@\[([^\]]+)\]\((user|agent):([a-f0-9-]+)\)/g;function k({children:a}){if(!a||"string"!=typeof a)return null;if(!new RegExp(m.source).test(a))return(0,e.jsx)("div",{className:"overflow-hidden [&_pre]:overflow-x-auto",children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:a})});let{processed:b,mentions:c}=function(a){let b=[],c=RegExp(m.source,"g");return{processed:a.replace(c,(a,c,d,e)=>{let f=b.length;return b.push({displayName:c,type:d,uuid:e}),`\u200B\u200BMENTION_${f}\u200B\u200B`}),mentions:b}}(a);return(0,e.jsx)(l,{mentions:c,children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:b})})}function l({children:a,mentions:b}){let c=g().useRef(null);return(0,e.jsx)("div",{ref:c,className:"overflow-hidden [&_pre]:overflow-x-auto",children:a})}d()}catch(a){d(a)}})},90061:(a,b,c)=>{c.d(b,{fv:()=>p,xQ:()=>q});var d=c(21968),e=c(76172);let f=new Map,g=new Map,h=new Map,i=new Set,j=0;function k(a,b,c,d){return c?d?`${a}:${b}:${c}:${d}`:`${a}:${b}:${c}`:`${a}:${b}`}function l(){j++,i.forEach(a=>a())}function m(a){let b=a.subEntityType,c=a.subEntityUuid,d=k(a.entityType,a.entityUuid,b,c),e=function(a,b,c,d,e){let f=k(a,b,d,e);return`${f}:${c}`}(a.entityType,a.entityUuid,a.agentUuid,b,c),i=g.get(e);if(i&&Date.now()-i<3e3)return;g.set(e,Date.now());let j={agentUuid:a.agentUuid,agentName:a.agentName,action:a.action,timestamp:Date.now()},m=(f.get(d)??[]).filter(b=>b.agentUuid!==a.agentUuid);m.push(j),f.set(d,m);let n=h.get(e);n&&clearTimeout(n);let o=setTimeout(()=>{let b=f.get(d);if(b){let c=b.filter(b=>b.agentUuid!==a.agentUuid);0===c.length?f.delete(d):f.set(d,c)}g.delete(e),h.delete(e),l()},3e3);h.set(e,o),l()}function n(){return j}function o(a){return i.add(a),()=>{i.delete(a)}}function p(a){m({type:"presence",companyUuid:"",projectUuid:"",...a,timestamp:Date.now()})}function q(){return(0,d.useSyncExternalStore)(o,n,n),(0,e.S2)(m),{getPresence:(a,b,c,d)=>{if(c)return f.get(k(a,b,c,d))??[];let e=`${a}:${b}`,g=new Map;for(let[a,b]of f)if(a===e||a.startsWith(e+":"))for(let a of b){let b=g.get(a.agentUuid);(!b||a.timestamp>b.timestamp)&&g.set(a.agentUuid,a)}return[...g.values()]}}}},98581:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{d:()=>l,s:()=>m});var e=c(2613);c(50785);var f=c(9259),g=c(466),h=c(67738),i=c(97307),j=c(12217),k=a([f,g,h]);[f,g,h]=k.then?(await k)():k;let n=["idea","proposal","task","document"];async function l(a,b){let c=await (0,f.d)();if(!c)return{success:!1,error:"Unauthorized"};if(!n.includes(a))return{success:!1,error:`Invalid target type: ${a}`};try{let d=await (0,g.fg)({companyUuid:c.companyUuid,targetType:a,targetUuid:b,skip:0,take:100}),e=await (0,g.Yt)(d.comments);return{success:!0,comments:e,total:d.total}}catch(b){return i.A.error({err:b,targetType:a},"Failed to get comments"),{success:!1,error:"Failed to load comments"}}}async function m(a,b,c){let d=await (0,f.d)();if(!d)return{success:!1,error:"Unauthorized"};if(!n.includes(a))return{success:!1,error:`Invalid target type: ${a}`};if(!c.trim())return{success:!1,error:"Comment content is required"};try{let e=await (0,g.eT)({companyUuid:d.companyUuid,targetType:a,targetUuid:b,content:c.trim(),authorType:d.type,authorUuid:d.actorUuid}),f=await (0,g.Hu)(a,b,d.companyUuid);f&&await (0,h.createActivity)({companyUuid:d.companyUuid,projectUuid:f,targetType:a,targetUuid:b,actorType:d.type,actorUuid:d.actorUuid,action:"comment_added"});let[i]=await (0,g.Yt)([e]);return{success:!0,comment:i}}catch(b){return i.A.error({err:b,targetType:a},"Failed to create comment"),{success:!1,error:"Failed to create comment"}}}(0,j.D)([l,m]),(0,e.A)(l,"60aaaf09814b29767a23a36b59555df07282407555",null),(0,e.A)(m,"70b2bba30986179182b8c1ff03c83ce22ac6c8090b",null),d()}catch(a){d(a)}})}};
@@ -1,2 +1,2 @@
1
- "use strict";exports.id=7578,exports.ids=[7578],exports.modules={8777:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cs:()=>k,Nn:()=>n,YE:()=>j,lC:()=>i,lU:()=>m,oS:()=>o,ui:()=>l});var e=c(52618),f=c(76872),g=a([e,f]);async function h(a,b=!1){let c=await (0,f.LS)(a.createdByUuid),d={uuid:a.uuid,type:a.type,title:a.title,version:a.version,proposalUuid:a.proposalUuid,createdBy:c,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return b&&void 0!==a.content&&(d.content=a.content),a.project&&(d.project=a.project),d}async function i({companyUuid:a,projectUuid:b,skip:c,take:d,type:f}){let g={projectUuid:b,companyUuid:a,...f&&{type:f}},[i,j]=await Promise.all([e.z.document.findMany({where:g,skip:c,take:d,orderBy:{updatedAt:"desc"},select:{uuid:!0,type:!0,title:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}}),e.z.document.count({where:g})]);return{documents:await Promise.all(i.map(a=>h(a))),total:j}}async function j(a,b){let c=await e.z.document.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?h(c,!0):null}async function k(a,b){return e.z.document.findFirst({where:{uuid:b,companyUuid:a}})}async function l(a){let b=await e.z.document.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,type:a.type,title:a.title,content:a.content,version:1,proposalUuid:a.proposalUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(b,!0)}async function m(a,{title:b,content:c,incrementVersion:d}){let f={};void 0!==b&&(f.title=b),void 0!==c&&(f.content=c),d&&(f.version={increment:1});let g=await e.z.document.update({where:{uuid:a},data:f,include:{project:{select:{uuid:!0,name:!0}}}});return h(g,!0)}async function n(a){return e.z.document.delete({where:{uuid:a}})}async function o(a,b,c,d,f){let g=await e.z.document.create({data:{companyUuid:a,projectUuid:b,type:f.type||"prd",title:f.title,content:f.content||null,version:1,proposalUuid:c,createdByUuid:d},select:{uuid:!0,type:!0,title:!0,content:!0,version:!0,proposalUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return h(g,!0)}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},57578:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>r,Bf:()=>G,CA:()=>B,Eh:()=>D,FD:()=>z,HF:()=>t,IV:()=>x,LJ:()=>y,M9:()=>A,PK:()=>u,X2:()=>v,e1:()=>q,gF:()=>w,gT:()=>C,lh:()=>F,nW:()=>E,v3:()=>p,wV:()=>s});var e=c(55511),f=c(52618),g=c(18818),h=c(76872),i=c(42558),j=c(8777),k=c(71165),l=a([f,h,j,k]);function m(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function n(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function o(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function p(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function q(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function r(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function s({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>o(a))),total:i}}async function t(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?o(c):null}async function u(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function v(a){let b=a.documentDrafts?.map(m),c=a.taskDrafts?.map(n),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),o(d)}async function w(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:l}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],l=[];if(g&&g.length>0)for(let a of g){let b=await (0,j.oS)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,a);l.push({draftUuid:a.uuid,documentUuid:b.uuid,title:b.title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let{draftToTaskUuidMap:a}=await (0,k.RJ)(e.companyUuid,e.projectUuid,e.uuid,e.createdByUuid,h);for(let b of h){let c=a.get(b.uuid);c&&i.push({draftUuid:b.uuid,taskUuid:c,title:b.title})}for(let c of h){if(c.dependsOnDraftUuids&&c.dependsOnDraftUuids.length>0){let d=a.get(c.uuid);if(!d)continue;for(let e of c.dependsOnDraftUuids){let c=a.get(e);c&&await b.taskDependency.create({data:{taskUuid:d,dependsOnUuid:c}})}}if(c.acceptanceCriteriaItems&&c.acceptanceCriteriaItems.length>0){let d=a.get(c.uuid);if(!d)continue;await b.acceptanceCriterion.createMany({data:c.acceptanceCriteriaItems.map((a,b)=>({taskUuid:d,description:a.description.trim(),required:a.required??!0,sortOrder:b}))})}}}return{updatedProposal:f,materializedTasks:i,materializedDocuments:l}});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let m=await o(g);return h.length>0&&(m.materializedTasks=h),l.length>0&&(m.materializedDocuments=l),m}async function x(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function y(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),o(d)}async function z(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await p(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
2
- ${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),o(e)}async function A(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.documentDrafts||[],g=m(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),o(j)}async function B(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.taskDrafts||[],g=n(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),o(j)}async function C(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.documentDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Document draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),o(j)}async function D(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.taskDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Task draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),o(j)}async function E(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.documentDrafts||[]).filter(a=>a.uuid!==c),h=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),o(h)}async function F(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.taskDrafts||[]).filter(a=>a.uuid!==c).map(a=>({...a,dependsOnDraftUuids:a.dependsOnDraftUuids?.filter(a=>a!==c)})),h=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),o(h)}async function G(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,projectUuid:b,status:"approved"},select:{uuid:!0,title:!0,createdAt:!0},orderBy:{createdAt:"asc"}}),d=await f.z.task.groupBy({by:["proposalUuid"],where:{companyUuid:a,projectUuid:b,proposalUuid:{in:c.map(a=>a.uuid)}},_count:!0}),e=new Map(d.map(a=>[a.proposalUuid,a._count]));return c.map((a,b)=>({uuid:a.uuid,title:a.title,sequenceNumber:b+1,taskCount:e.get(a.uuid)??0}))}[f,h,j,k]=l.then?(await l)():l,d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=7578,exports.ids=[7578],exports.modules={57578:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AU:()=>p,Bf:()=>E,CA:()=>z,Eh:()=>B,FD:()=>x,HF:()=>r,IV:()=>v,LJ:()=>w,M9:()=>y,PK:()=>s,X2:()=>t,e1:()=>o,gF:()=>u,gT:()=>A,lh:()=>D,nW:()=>C,v3:()=>n,wV:()=>q});var e=c(55511),f=c(52618),g=c(18818),h=c(76872),i=c(42558),j=a([f,h]);function k(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function l(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function m(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.project&&(e.project=a.project),e}async function n(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Proposal not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"idea"===c.inputType&&h.length>0)for(let b of(await f.z.idea.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.storyPoints&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function o(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,inputType:"idea"},select:{uuid:!0,title:!0,inputUuids:!0}}),d=[];for(let a of c){let c=a.inputUuids;for(let e of b)c.includes(e)&&d.push({uuid:e,proposalUuid:a.uuid,proposalTitle:a.title})}return{available:0===d.length,usedIdeas:d}}async function p(a,b,c,d){let e=await f.z.idea.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedIdeas:g}}async function q({companyUuid:a,projectUuid:b,skip:c,take:d,status:e}){let g={projectUuid:b,companyUuid:a,...e&&{status:e}},[h,i]=await Promise.all([f.z.proposal.findMany({where:g,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}}),f.z.proposal.count({where:g})]);return{proposals:await Promise.all(h.map(a=>m(a))),total:i}}async function r(a,b){let c=await f.z.proposal.findFirst({where:{uuid:b,companyUuid:a},include:{project:{select:{uuid:!0,name:!0}}}});return c?m(c):null}async function s(a,b){return f.z.proposal.findFirst({where:{uuid:b,companyUuid:a}})}async function t(a){let b=a.documentDrafts?.map(k),c=a.taskDrafts?.map(l),d=await f.z.proposal.create({data:{companyUuid:a.companyUuid,projectUuid:a.projectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,projectUuid:a.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"created"}),m(d)}async function u(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("Proposal not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:j}=await f.z.$transaction(async b=>{let f=await b.proposal.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],j=[];if(g&&g.length>0){let a=await b.document.createManyAndReturn({data:g.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,type:a.type||"prd",title:a.title,content:a.content||null,version:1,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}});for(let b=0;b<g.length;b++)j.push({draftUuid:g[b].uuid,documentUuid:a[b].uuid,title:a[b].title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let a=await b.task.createManyAndReturn({data:h.map(a=>({companyUuid:e.companyUuid,projectUuid:e.projectUuid,title:a.title,description:a.description||null,status:"open",priority:a.priority||"medium",storyPoints:a.storyPoints||null,acceptanceCriteria:a.acceptanceCriteria||null,proposalUuid:e.uuid,createdByUuid:e.createdByUuid})),select:{uuid:!0,title:!0}}),c=new Map;for(let b=0;b<h.length;b++)c.set(h[b].uuid,a[b].uuid),i.push({draftUuid:h[b].uuid,taskUuid:a[b].uuid,title:a[b].title});let d=[];for(let a of h)if(a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0){let b=c.get(a.uuid);if(!b)continue;for(let e of a.dependsOnDraftUuids){let a=c.get(e);a&&d.push({taskUuid:b,dependsOnUuid:a})}}d.length>0&&await b.taskDependency.createMany({data:d});let f=[];for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0){let b=c.get(a.uuid);if(!b)continue;for(let c=0;c<a.acceptanceCriteriaItems.length;c++){let d=a.acceptanceCriteriaItems[c];f.push({taskUuid:b,description:d.description.trim(),required:d.required??!0,sortOrder:c})}}f.length>0&&await b.acceptanceCriterion.createMany({data:f})}return{updatedProposal:f,materializedTasks:i,materializedDocuments:j}},{timeout:15e3});i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"});let k=await m(g);return h.length>0&&(k.materializedTasks=h),j.length>0&&(k.materializedDocuments=j),k}async function v(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function w(a,b,c){let d=await f.z.proposal.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:d.uuid,action:"updated"}),m(d)}async function x(a,b){let c=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("Proposal not found");if("draft"!==c.status)throw Error("Only draft proposals can be submitted for review");let d=await n(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`Proposal validation failed:
2
+ ${a.join("\n")}`)}let e=await f.z.proposal.update({where:{uuid:a},data:{status:"pending"},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:e.companyUuid,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:e.uuid,action:"updated"}),m(e)}async function y(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.documentDrafts||[],g=k(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function z(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=d.taskDrafts||[],g=l(c),h=[...e,g],j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:h},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function A(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.documentDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Document draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function B(a,b,c,d){let e=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("Proposal not found or not in draft status");let g=e.taskDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Task draft not found");g[h]={...g[h],...d};let j=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:g},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:e.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(j)}async function C(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.documentDrafts||[]).filter(a=>a.uuid!==c),h=await f.z.proposal.update({where:{uuid:a},data:{documentDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}async function D(a,b,c){let d=await f.z.proposal.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("Proposal not found or not in draft status");let e=(d.taskDrafts||[]).filter(a=>a.uuid!==c).map(a=>({...a,dependsOnDraftUuids:a.dependsOnDraftUuids?.filter(a=>a!==c)})),h=await f.z.proposal.update({where:{uuid:a},data:{taskDrafts:e.length>0?e:g.D1.Fj},include:{project:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:b,projectUuid:d.projectUuid,entityType:"proposal",entityUuid:a,action:"updated"}),m(h)}async function E(a,b){let c=await f.z.proposal.findMany({where:{companyUuid:a,projectUuid:b,status:"approved"},select:{uuid:!0,title:!0,createdAt:!0},orderBy:{createdAt:"asc"}}),d=await f.z.task.groupBy({by:["proposalUuid"],where:{companyUuid:a,projectUuid:b,proposalUuid:{in:c.map(a=>a.uuid)}},_count:!0}),e=new Map(d.map(a=>[a.proposalUuid,a._count]));return c.map((a,b)=>({uuid:a.uuid,title:a.title,sequenceNumber:b+1,taskCount:e.get(a.uuid)??0}))}[f,h]=j.then?(await j)():j,d()}catch(a){d(a)}})}};