@hed-hog/operations 0.0.322 → 0.0.325

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 (689) hide show
  1. package/dist/controllers/operations-collaborators.controller.d.ts +9 -0
  2. package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -1
  3. package/dist/controllers/operations-collaborators.controller.js +25 -0
  4. package/dist/controllers/operations-collaborators.controller.js.map +1 -1
  5. package/dist/controllers/operations-project-costs.controller.d.ts +422 -0
  6. package/dist/controllers/operations-project-costs.controller.d.ts.map +1 -0
  7. package/dist/controllers/operations-project-costs.controller.js +250 -0
  8. package/dist/controllers/operations-project-costs.controller.js.map +1 -0
  9. package/dist/controllers/operations-reports.controller.d.ts +9 -0
  10. package/dist/controllers/operations-reports.controller.d.ts.map +1 -1
  11. package/dist/controllers/operations-tasks.controller.d.ts +42 -0
  12. package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
  13. package/dist/controllers/operations-tasks.controller.js +48 -0
  14. package/dist/controllers/operations-tasks.controller.js.map +1 -1
  15. package/dist/controllers/operations-timesheets.controller.d.ts +1 -0
  16. package/dist/controllers/operations-timesheets.controller.d.ts.map +1 -1
  17. package/dist/dto/create-collaborator-project-assignment.dto.d.ts +5 -0
  18. package/dist/dto/create-collaborator-project-assignment.dto.d.ts.map +1 -0
  19. package/dist/dto/create-collaborator-project-assignment.dto.js +30 -0
  20. package/dist/dto/create-collaborator-project-assignment.dto.js.map +1 -0
  21. package/dist/dto/create-project-cost-category.dto.d.ts +10 -0
  22. package/dist/dto/create-project-cost-category.dto.d.ts.map +1 -0
  23. package/dist/dto/create-project-cost-category.dto.js +59 -0
  24. package/dist/dto/create-project-cost-category.dto.js.map +1 -0
  25. package/dist/dto/create-project-cost-type.dto.d.ts +14 -0
  26. package/dist/dto/create-project-cost-type.dto.d.ts.map +1 -0
  27. package/dist/dto/create-project-cost-type.dto.js +87 -0
  28. package/dist/dto/create-project-cost-type.dto.js.map +1 -0
  29. package/dist/dto/create-project-cost.dto.d.ts +22 -0
  30. package/dist/dto/create-project-cost.dto.d.ts.map +1 -0
  31. package/dist/dto/create-project-cost.dto.js +135 -0
  32. package/dist/dto/create-project-cost.dto.js.map +1 -0
  33. package/dist/dto/get-project-cost-report.dto.d.ts +10 -0
  34. package/dist/dto/get-project-cost-report.dto.d.ts.map +1 -0
  35. package/dist/dto/get-project-cost-report.dto.js +65 -0
  36. package/dist/dto/get-project-cost-report.dto.js.map +1 -0
  37. package/dist/dto/list-project-cost-categories.dto.d.ts +6 -0
  38. package/dist/dto/list-project-cost-categories.dto.d.ts.map +1 -0
  39. package/dist/dto/list-project-cost-categories.dto.js +34 -0
  40. package/dist/dto/list-project-cost-categories.dto.js.map +1 -0
  41. package/dist/dto/list-project-cost-types.dto.d.ts +8 -0
  42. package/dist/dto/list-project-cost-types.dto.d.ts.map +1 -0
  43. package/dist/dto/list-project-cost-types.dto.js +45 -0
  44. package/dist/dto/list-project-cost-types.dto.js.map +1 -0
  45. package/dist/dto/list-project-costs.dto.d.ts +14 -0
  46. package/dist/dto/list-project-costs.dto.d.ts.map +1 -0
  47. package/dist/dto/list-project-costs.dto.js +81 -0
  48. package/dist/dto/list-project-costs.dto.js.map +1 -0
  49. package/dist/dto/list-tasks.dto.d.ts +1 -0
  50. package/dist/dto/list-tasks.dto.d.ts.map +1 -1
  51. package/dist/dto/list-tasks.dto.js +6 -0
  52. package/dist/dto/list-tasks.dto.js.map +1 -1
  53. package/dist/dto/list-timesheets.dto.d.ts +1 -0
  54. package/dist/dto/list-timesheets.dto.d.ts.map +1 -1
  55. package/dist/dto/list-timesheets.dto.js +7 -0
  56. package/dist/dto/list-timesheets.dto.js.map +1 -1
  57. package/dist/dto/update-collaborator-project-assignment.dto.d.ts +11 -0
  58. package/dist/dto/update-collaborator-project-assignment.dto.d.ts.map +1 -0
  59. package/dist/dto/update-collaborator-project-assignment.dto.js +65 -0
  60. package/dist/dto/update-collaborator-project-assignment.dto.js.map +1 -0
  61. package/dist/dto/update-project-cost-category.dto.d.ts +6 -0
  62. package/dist/dto/update-project-cost-category.dto.d.ts.map +1 -0
  63. package/dist/dto/update-project-cost-category.dto.js +9 -0
  64. package/dist/dto/update-project-cost-category.dto.js.map +1 -0
  65. package/dist/dto/update-project-cost-type.dto.d.ts +6 -0
  66. package/dist/dto/update-project-cost-type.dto.d.ts.map +1 -0
  67. package/dist/dto/update-project-cost-type.dto.js +9 -0
  68. package/dist/dto/update-project-cost-type.dto.js.map +1 -0
  69. package/dist/dto/update-project-cost.dto.d.ts +6 -0
  70. package/dist/dto/update-project-cost.dto.d.ts.map +1 -0
  71. package/dist/dto/update-project-cost.dto.js +9 -0
  72. package/dist/dto/update-project-cost.dto.js.map +1 -0
  73. package/dist/operations.module.d.ts.map +1 -1
  74. package/dist/operations.module.js +2 -0
  75. package/dist/operations.module.js.map +1 -1
  76. package/dist/operations.service.d.ts +562 -0
  77. package/dist/operations.service.d.ts.map +1 -1
  78. package/dist/operations.service.js +1657 -47
  79. package/dist/operations.service.js.map +1 -1
  80. package/hedhog/data/menu.yaml +52 -0
  81. package/hedhog/data/operations_project_cost_category.yaml +80 -0
  82. package/hedhog/data/operations_project_cost_type.yaml +503 -0
  83. package/hedhog/data/route.yaml +274 -0
  84. package/hedhog/frontend/app/_components/collaborator-costs-section.tsx.ejs +2 -18
  85. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +185 -276
  86. package/hedhog/frontend/app/_components/collaborator-tasks-tab.tsx.ejs +358 -0
  87. package/hedhog/frontend/app/_components/collaborator-timesheets-tab.tsx.ejs +242 -0
  88. package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +167 -59
  89. package/hedhog/frontend/app/_components/person-select-with-create.tsx.ejs +1 -853
  90. package/hedhog/frontend/app/_components/project-assignments-tab.tsx.ejs +450 -0
  91. package/hedhog/frontend/app/_components/project-cost-report-screen.tsx.ejs +602 -0
  92. package/hedhog/frontend/app/_components/project-costs-section.tsx.ejs +1401 -0
  93. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +2003 -1846
  94. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +56 -11
  95. package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +297 -2
  96. package/hedhog/frontend/app/_components/task-form-sheet.tsx.ejs +530 -0
  97. package/hedhog/frontend/app/_lib/api.ts.ejs +247 -0
  98. package/hedhog/frontend/app/_lib/types.ts.ejs +196 -7
  99. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +9 -3
  100. package/hedhog/frontend/app/collaborators/page.tsx.ejs +18 -7
  101. package/hedhog/frontend/app/my-tasks/page.tsx.ejs +219 -122
  102. package/hedhog/frontend/app/project-cost-categories/page.tsx.ejs +674 -0
  103. package/hedhog/frontend/app/project-cost-types/page.tsx.ejs +845 -0
  104. package/hedhog/frontend/app/projects/[id]/costs-report/page.tsx.ejs +10 -0
  105. package/hedhog/frontend/app/reports/collaborators/page.tsx.ejs +20 -349
  106. package/hedhog/frontend/app/reports/projects/page.tsx.ejs +192 -484
  107. package/hedhog/frontend/messages/en.json +279 -10
  108. package/hedhog/frontend/messages/en.json.ejs +2043 -0
  109. package/hedhog/frontend/messages/operations/en.json +2068 -0
  110. package/hedhog/frontend/messages/operations/operations/en.json +2102 -0
  111. package/hedhog/frontend/messages/operations/operations/pt.json +2111 -0
  112. package/hedhog/frontend/messages/operations/pt.json +2072 -0
  113. package/hedhog/frontend/messages/pt.json +284 -13
  114. package/hedhog/frontend/messages/pt.json.ejs +2056 -0
  115. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/async-options-combobox.d.ts +29 -0
  116. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/async-options-combobox.d.ts.map +1 -0
  117. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/async-options-combobox.js +95 -0
  118. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/async-options-combobox.js.map +1 -0
  119. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/async-options-combobox.tsx +233 -0
  120. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-costs-section.d.ts +10 -0
  121. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-costs-section.d.ts.map +1 -0
  122. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-costs-section.js +577 -0
  123. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-costs-section.js.map +1 -0
  124. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-costs-section.tsx +868 -0
  125. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-details-screen.d.ts +4 -0
  126. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-details-screen.d.ts.map +1 -0
  127. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-details-screen.js +337 -0
  128. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-details-screen.js.map +1 -0
  129. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-details-screen.tsx +476 -0
  130. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-form-screen.d.ts +9 -0
  131. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-form-screen.d.ts.map +1 -0
  132. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-form-screen.js +1348 -0
  133. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-form-screen.js.map +1 -0
  134. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-form-screen.tsx +2233 -0
  135. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-select-with-create.d.ts +12 -0
  136. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-select-with-create.d.ts.map +1 -0
  137. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-select-with-create.js +162 -0
  138. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-select-with-create.js.map +1 -0
  139. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/collaborator-select-with-create.tsx +261 -0
  140. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-content-editor.d.ts +18 -0
  141. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-content-editor.d.ts.map +1 -0
  142. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-content-editor.js +145 -0
  143. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-content-editor.js.map +1 -0
  144. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-content-editor.tsx +258 -0
  145. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-details-screen.d.ts +4 -0
  146. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-details-screen.d.ts.map +1 -0
  147. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-details-screen.js +223 -0
  148. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-details-screen.js.map +1 -0
  149. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-details-screen.tsx +342 -0
  150. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-form-screen.d.ts +58 -0
  151. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-form-screen.d.ts.map +1 -0
  152. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-form-screen.js +438 -0
  153. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-form-screen.js.map +1 -0
  154. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/contract-form-screen.tsx +698 -0
  155. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/department-select-with-create.d.ts +20 -0
  156. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/department-select-with-create.d.ts.map +1 -0
  157. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/department-select-with-create.js +233 -0
  158. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/department-select-with-create.js.map +1 -0
  159. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/department-select-with-create.tsx +392 -0
  160. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/my-project-summary-screen.d.ts +4 -0
  161. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/my-project-summary-screen.d.ts.map +1 -0
  162. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/my-project-summary-screen.js +814 -0
  163. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/my-project-summary-screen.js.map +1 -0
  164. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/my-project-summary-screen.tsx +1288 -0
  165. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-calendar-view.d.ts +21 -0
  166. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-calendar-view.d.ts.map +1 -0
  167. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-calendar-view.js +174 -0
  168. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-calendar-view.js.map +1 -0
  169. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-calendar-view.tsx +306 -0
  170. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-header.d.ts +10 -0
  171. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-header.d.ts.map +1 -0
  172. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-header.js +12 -0
  173. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-header.js.map +1 -0
  174. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/operations-header.tsx +29 -0
  175. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/person-select-with-create.d.ts +15 -0
  176. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/person-select-with-create.d.ts.map +1 -0
  177. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/person-select-with-create.js +501 -0
  178. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/person-select-with-create.js.map +1 -0
  179. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/person-select-with-create.tsx +853 -0
  180. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-costs-section.d.ts +6 -0
  181. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-costs-section.d.ts.map +1 -0
  182. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-costs-section.js +847 -0
  183. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-costs-section.js.map +1 -0
  184. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-costs-section.tsx +1340 -0
  185. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-details-screen.d.ts +4 -0
  186. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-details-screen.d.ts.map +1 -0
  187. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-details-screen.js +2930 -0
  188. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-details-screen.js.map +1 -0
  189. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-details-screen.tsx +4378 -0
  190. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-form-screen.d.ts +9 -0
  191. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-form-screen.d.ts.map +1 -0
  192. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-form-screen.js +1013 -0
  193. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-form-screen.js.map +1 -0
  194. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/project-form-screen.tsx +1745 -0
  195. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/section-card.d.ts +13 -0
  196. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/section-card.d.ts.map +1 -0
  197. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/section-card.js +38 -0
  198. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/section-card.js.map +1 -0
  199. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/section-card.tsx +74 -0
  200. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/status-badge.d.ts +7 -0
  201. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/status-badge.d.ts.map +1 -0
  202. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/status-badge.js +11 -0
  203. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/status-badge.js.map +1 -0
  204. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/status-badge.tsx +15 -0
  205. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/system-user-select-with-create.d.ts +18 -0
  206. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/system-user-select-with-create.d.ts.map +1 -0
  207. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/system-user-select-with-create.js +406 -0
  208. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/system-user-select-with-create.js.map +1 -0
  209. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/system-user-select-with-create.tsx +660 -0
  210. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-detail-sheet.d.ts +26 -0
  211. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-detail-sheet.d.ts.map +1 -0
  212. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-detail-sheet.js +332 -0
  213. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-detail-sheet.js.map +1 -0
  214. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-detail-sheet.tsx +518 -0
  215. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-file-attachments.d.ts +6 -0
  216. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-file-attachments.d.ts.map +1 -0
  217. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-file-attachments.js +255 -0
  218. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-file-attachments.js.map +1 -0
  219. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/task-file-attachments.tsx +388 -0
  220. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/timesheet-task-create-sheet.d.ts +10 -0
  221. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/timesheet-task-create-sheet.d.ts.map +1 -0
  222. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/timesheet-task-create-sheet.js +131 -0
  223. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/timesheet-task-create-sheet.js.map +1 -0
  224. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_components/timesheet-task-create-sheet.tsx +214 -0
  225. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/api.d.ts +108 -0
  226. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/api.d.ts.map +1 -0
  227. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/api.js +162 -0
  228. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/api.js.map +1 -0
  229. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/api.ts +428 -0
  230. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/hooks/use-operations-access.d.ts +8 -0
  231. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/hooks/use-operations-access.d.ts.map +1 -0
  232. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/hooks/use-operations-access.js +36 -0
  233. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/hooks/use-operations-access.js.map +1 -0
  234. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/hooks/use-operations-access.ts +44 -0
  235. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/types.d.ts +836 -0
  236. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/types.d.ts.map +1 -0
  237. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/types.js +3 -0
  238. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/types.js.map +1 -0
  239. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/types.ts +860 -0
  240. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/format.d.ts +16 -0
  241. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/format.d.ts.map +1 -0
  242. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/format.js +182 -0
  243. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/format.js.map +1 -0
  244. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/format.ts +250 -0
  245. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/forms.d.ts +4 -0
  246. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/forms.d.ts.map +1 -0
  247. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/forms.js +51 -0
  248. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/forms.js.map +1 -0
  249. package/hedhog/frontend/src/app/(app)/(libraries)/operations/_lib/utils/forms.ts +61 -0
  250. package/hedhog/frontend/src/app/(app)/(libraries)/operations/approvals/page.d.ts +2 -0
  251. package/hedhog/frontend/src/app/(app)/(libraries)/operations/approvals/page.d.ts.map +1 -0
  252. package/hedhog/frontend/src/app/(app)/(libraries)/operations/approvals/page.js +954 -0
  253. package/hedhog/frontend/src/app/(app)/(libraries)/operations/approvals/page.js.map +1 -0
  254. package/hedhog/frontend/src/app/(app)/(libraries)/operations/approvals/page.tsx +1277 -0
  255. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborator-types/page.d.ts +2 -0
  256. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborator-types/page.d.ts.map +1 -0
  257. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborator-types/page.js +488 -0
  258. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborator-types/page.js.map +1 -0
  259. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborator-types/page.tsx +805 -0
  260. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/edit/page.d.ts +6 -0
  261. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/edit/page.d.ts.map +1 -0
  262. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/edit/page.js +9 -0
  263. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/edit/page.js.map +1 -0
  264. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/edit/page.tsx +11 -0
  265. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/page.d.ts +6 -0
  266. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/page.d.ts.map +1 -0
  267. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/page.js +9 -0
  268. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/page.js.map +1 -0
  269. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/[id]/page.tsx +11 -0
  270. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/new/page.d.ts +2 -0
  271. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/new/page.d.ts.map +1 -0
  272. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/new/page.js +8 -0
  273. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/new/page.js.map +1 -0
  274. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/new/page.tsx +5 -0
  275. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/page.d.ts +2 -0
  276. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/page.d.ts.map +1 -0
  277. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/page.js +612 -0
  278. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/page.js.map +1 -0
  279. package/hedhog/frontend/src/app/(app)/(libraries)/operations/collaborators/page.tsx +939 -0
  280. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/edit/page.d.ts +6 -0
  281. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/edit/page.d.ts.map +1 -0
  282. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/edit/page.js +9 -0
  283. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/edit/page.js.map +1 -0
  284. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/edit/page.tsx +11 -0
  285. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/page.d.ts +6 -0
  286. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/page.d.ts.map +1 -0
  287. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/page.js +9 -0
  288. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/page.js.map +1 -0
  289. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/[id]/page.tsx +11 -0
  290. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/new/page.d.ts +6 -0
  291. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/new/page.d.ts.map +1 -0
  292. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/new/page.js +9 -0
  293. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/new/page.js.map +1 -0
  294. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/new/page.tsx +17 -0
  295. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/page.d.ts +2 -0
  296. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/page.d.ts.map +1 -0
  297. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/page.js +348 -0
  298. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/page.js.map +1 -0
  299. package/hedhog/frontend/src/app/(app)/(libraries)/operations/contracts/page.tsx +536 -0
  300. package/hedhog/frontend/src/app/(app)/(libraries)/operations/departments/page.d.ts +2 -0
  301. package/hedhog/frontend/src/app/(app)/(libraries)/operations/departments/page.d.ts.map +1 -0
  302. package/hedhog/frontend/src/app/(app)/(libraries)/operations/departments/page.js +401 -0
  303. package/hedhog/frontend/src/app/(app)/(libraries)/operations/departments/page.js.map +1 -0
  304. package/hedhog/frontend/src/app/(app)/(libraries)/operations/departments/page.tsx +607 -0
  305. package/hedhog/frontend/src/app/(app)/(libraries)/operations/layout.d.ts +5 -0
  306. package/hedhog/frontend/src/app/(app)/(libraries)/operations/layout.d.ts.map +1 -0
  307. package/hedhog/frontend/src/app/(app)/(libraries)/operations/layout.js +7 -0
  308. package/hedhog/frontend/src/app/(app)/(libraries)/operations/layout.js.map +1 -0
  309. package/hedhog/frontend/src/app/(app)/(libraries)/operations/layout.tsx +9 -0
  310. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/[id]/page.d.ts +6 -0
  311. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/[id]/page.d.ts.map +1 -0
  312. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/[id]/page.js +9 -0
  313. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/[id]/page.js.map +1 -0
  314. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/[id]/page.tsx +11 -0
  315. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/page.d.ts +2 -0
  316. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/page.d.ts.map +1 -0
  317. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/page.js +321 -0
  318. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/page.js.map +1 -0
  319. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-projects/page.tsx +440 -0
  320. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-tasks/page.d.ts +2 -0
  321. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-tasks/page.d.ts.map +1 -0
  322. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-tasks/page.js +939 -0
  323. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-tasks/page.js.map +1 -0
  324. package/hedhog/frontend/src/app/(app)/(libraries)/operations/my-tasks/page.tsx +1499 -0
  325. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/async-options-combobox.d.ts +29 -0
  326. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/async-options-combobox.d.ts.map +1 -0
  327. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/async-options-combobox.js +95 -0
  328. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/async-options-combobox.js.map +1 -0
  329. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/async-options-combobox.tsx +233 -0
  330. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-costs-section.d.ts +10 -0
  331. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-costs-section.d.ts.map +1 -0
  332. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-costs-section.js +577 -0
  333. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-costs-section.js.map +1 -0
  334. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-costs-section.tsx +868 -0
  335. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-details-screen.d.ts +4 -0
  336. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-details-screen.d.ts.map +1 -0
  337. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-details-screen.js +337 -0
  338. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-details-screen.js.map +1 -0
  339. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-details-screen.tsx +476 -0
  340. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-form-screen.d.ts +9 -0
  341. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-form-screen.d.ts.map +1 -0
  342. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-form-screen.js +1348 -0
  343. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-form-screen.js.map +1 -0
  344. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-form-screen.tsx +2233 -0
  345. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-select-with-create.d.ts +12 -0
  346. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-select-with-create.d.ts.map +1 -0
  347. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-select-with-create.js +162 -0
  348. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-select-with-create.js.map +1 -0
  349. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/collaborator-select-with-create.tsx +261 -0
  350. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-content-editor.d.ts +18 -0
  351. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-content-editor.d.ts.map +1 -0
  352. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-content-editor.js +145 -0
  353. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-content-editor.js.map +1 -0
  354. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-content-editor.tsx +258 -0
  355. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-details-screen.d.ts +4 -0
  356. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-details-screen.d.ts.map +1 -0
  357. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-details-screen.js +223 -0
  358. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-details-screen.js.map +1 -0
  359. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-details-screen.tsx +342 -0
  360. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-form-screen.d.ts +58 -0
  361. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-form-screen.d.ts.map +1 -0
  362. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-form-screen.js +438 -0
  363. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-form-screen.js.map +1 -0
  364. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/contract-form-screen.tsx +698 -0
  365. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/department-select-with-create.d.ts +20 -0
  366. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/department-select-with-create.d.ts.map +1 -0
  367. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/department-select-with-create.js +233 -0
  368. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/department-select-with-create.js.map +1 -0
  369. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/department-select-with-create.tsx +392 -0
  370. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/my-project-summary-screen.d.ts +4 -0
  371. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/my-project-summary-screen.d.ts.map +1 -0
  372. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/my-project-summary-screen.js +814 -0
  373. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/my-project-summary-screen.js.map +1 -0
  374. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/my-project-summary-screen.tsx +1288 -0
  375. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-calendar-view.d.ts +21 -0
  376. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-calendar-view.d.ts.map +1 -0
  377. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-calendar-view.js +174 -0
  378. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-calendar-view.js.map +1 -0
  379. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-calendar-view.tsx +306 -0
  380. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-header.d.ts +10 -0
  381. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-header.d.ts.map +1 -0
  382. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-header.js +12 -0
  383. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-header.js.map +1 -0
  384. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/operations-header.tsx +29 -0
  385. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/person-select-with-create.d.ts +15 -0
  386. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/person-select-with-create.d.ts.map +1 -0
  387. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/person-select-with-create.js +501 -0
  388. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/person-select-with-create.js.map +1 -0
  389. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/person-select-with-create.tsx +853 -0
  390. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-cost-report-screen.d.ts +6 -0
  391. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-cost-report-screen.d.ts.map +1 -0
  392. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-cost-report-screen.js +459 -0
  393. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-cost-report-screen.js.map +1 -0
  394. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-cost-report-screen.tsx +598 -0
  395. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-costs-section.d.ts +6 -0
  396. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-costs-section.d.ts.map +1 -0
  397. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-costs-section.js +876 -0
  398. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-costs-section.js.map +1 -0
  399. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-costs-section.tsx +1368 -0
  400. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-details-screen.d.ts +4 -0
  401. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-details-screen.d.ts.map +1 -0
  402. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-details-screen.js +2930 -0
  403. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-details-screen.js.map +1 -0
  404. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-details-screen.tsx +4378 -0
  405. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-form-screen.d.ts +9 -0
  406. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-form-screen.d.ts.map +1 -0
  407. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-form-screen.js +1013 -0
  408. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-form-screen.js.map +1 -0
  409. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/project-form-screen.tsx +1745 -0
  410. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/section-card.d.ts +13 -0
  411. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/section-card.d.ts.map +1 -0
  412. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/section-card.js +38 -0
  413. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/section-card.js.map +1 -0
  414. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/section-card.tsx +74 -0
  415. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/status-badge.d.ts +7 -0
  416. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/status-badge.d.ts.map +1 -0
  417. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/status-badge.js +11 -0
  418. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/status-badge.js.map +1 -0
  419. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/status-badge.tsx +15 -0
  420. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/system-user-select-with-create.d.ts +18 -0
  421. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/system-user-select-with-create.d.ts.map +1 -0
  422. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/system-user-select-with-create.js +406 -0
  423. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/system-user-select-with-create.js.map +1 -0
  424. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/system-user-select-with-create.tsx +660 -0
  425. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-detail-sheet.d.ts +26 -0
  426. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-detail-sheet.d.ts.map +1 -0
  427. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-detail-sheet.js +332 -0
  428. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-detail-sheet.js.map +1 -0
  429. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-detail-sheet.tsx +518 -0
  430. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-file-attachments.d.ts +6 -0
  431. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-file-attachments.d.ts.map +1 -0
  432. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-file-attachments.js +255 -0
  433. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-file-attachments.js.map +1 -0
  434. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/task-file-attachments.tsx +388 -0
  435. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/timesheet-task-create-sheet.d.ts +10 -0
  436. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/timesheet-task-create-sheet.d.ts.map +1 -0
  437. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/timesheet-task-create-sheet.js +131 -0
  438. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/timesheet-task-create-sheet.js.map +1 -0
  439. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_components/timesheet-task-create-sheet.tsx +214 -0
  440. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/api.d.ts +108 -0
  441. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/api.d.ts.map +1 -0
  442. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/api.js +162 -0
  443. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/api.js.map +1 -0
  444. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/api.ts +428 -0
  445. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/hooks/use-operations-access.d.ts +8 -0
  446. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/hooks/use-operations-access.d.ts.map +1 -0
  447. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/hooks/use-operations-access.js +36 -0
  448. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/hooks/use-operations-access.js.map +1 -0
  449. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/hooks/use-operations-access.ts +44 -0
  450. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/types.d.ts +836 -0
  451. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/types.d.ts.map +1 -0
  452. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/types.js +3 -0
  453. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/types.js.map +1 -0
  454. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/types.ts +860 -0
  455. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/format.d.ts +16 -0
  456. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/format.d.ts.map +1 -0
  457. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/format.js +182 -0
  458. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/format.js.map +1 -0
  459. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/format.ts +250 -0
  460. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/forms.d.ts +4 -0
  461. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/forms.d.ts.map +1 -0
  462. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/forms.js +51 -0
  463. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/forms.js.map +1 -0
  464. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/_lib/utils/forms.ts +61 -0
  465. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/approvals/page.d.ts +2 -0
  466. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/approvals/page.d.ts.map +1 -0
  467. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/approvals/page.js +954 -0
  468. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/approvals/page.js.map +1 -0
  469. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/approvals/page.tsx +1277 -0
  470. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborator-types/page.d.ts +2 -0
  471. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborator-types/page.d.ts.map +1 -0
  472. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborator-types/page.js +488 -0
  473. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborator-types/page.js.map +1 -0
  474. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborator-types/page.tsx +805 -0
  475. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/edit/page.d.ts +6 -0
  476. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/edit/page.d.ts.map +1 -0
  477. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/edit/page.js +9 -0
  478. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/edit/page.js.map +1 -0
  479. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/edit/page.tsx +11 -0
  480. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/page.d.ts +6 -0
  481. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/page.d.ts.map +1 -0
  482. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/page.js +9 -0
  483. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/page.js.map +1 -0
  484. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/[id]/page.tsx +11 -0
  485. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/new/page.d.ts +2 -0
  486. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/new/page.d.ts.map +1 -0
  487. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/new/page.js +8 -0
  488. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/new/page.js.map +1 -0
  489. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/new/page.tsx +5 -0
  490. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/page.d.ts +2 -0
  491. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/page.d.ts.map +1 -0
  492. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/page.js +612 -0
  493. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/page.js.map +1 -0
  494. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/collaborators/page.tsx +939 -0
  495. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/edit/page.d.ts +6 -0
  496. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/edit/page.d.ts.map +1 -0
  497. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/edit/page.js +9 -0
  498. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/edit/page.js.map +1 -0
  499. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/edit/page.tsx +11 -0
  500. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/page.d.ts +6 -0
  501. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/page.d.ts.map +1 -0
  502. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/page.js +9 -0
  503. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/page.js.map +1 -0
  504. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/[id]/page.tsx +11 -0
  505. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/new/page.d.ts +6 -0
  506. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/new/page.d.ts.map +1 -0
  507. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/new/page.js +9 -0
  508. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/new/page.js.map +1 -0
  509. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/new/page.tsx +17 -0
  510. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/page.d.ts +2 -0
  511. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/page.d.ts.map +1 -0
  512. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/page.js +348 -0
  513. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/page.js.map +1 -0
  514. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/contracts/page.tsx +536 -0
  515. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/departments/page.d.ts +2 -0
  516. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/departments/page.d.ts.map +1 -0
  517. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/departments/page.js +401 -0
  518. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/departments/page.js.map +1 -0
  519. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/departments/page.tsx +607 -0
  520. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/layout.d.ts +5 -0
  521. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/layout.d.ts.map +1 -0
  522. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/layout.js +7 -0
  523. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/layout.js.map +1 -0
  524. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/layout.tsx +9 -0
  525. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/[id]/page.d.ts +6 -0
  526. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/[id]/page.d.ts.map +1 -0
  527. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/[id]/page.js +9 -0
  528. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/[id]/page.js.map +1 -0
  529. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/[id]/page.tsx +11 -0
  530. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/page.d.ts +2 -0
  531. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/page.d.ts.map +1 -0
  532. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/page.js +321 -0
  533. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/page.js.map +1 -0
  534. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-projects/page.tsx +440 -0
  535. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-tasks/page.d.ts +2 -0
  536. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-tasks/page.d.ts.map +1 -0
  537. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-tasks/page.js +939 -0
  538. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-tasks/page.js.map +1 -0
  539. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/my-tasks/page.tsx +1499 -0
  540. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/page.d.ts +2 -0
  541. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/page.d.ts.map +1 -0
  542. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/page.js +8 -0
  543. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/page.js.map +1 -0
  544. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/page.tsx +5 -0
  545. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-categories/page.d.ts +2 -0
  546. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-categories/page.d.ts.map +1 -0
  547. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-categories/page.js +436 -0
  548. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-categories/page.js.map +1 -0
  549. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-categories/page.tsx +675 -0
  550. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-types/page.d.ts +2 -0
  551. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-types/page.d.ts.map +1 -0
  552. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-types/page.js +563 -0
  553. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-types/page.js.map +1 -0
  554. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/project-cost-types/page.tsx +846 -0
  555. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/costs-report/page.d.ts +6 -0
  556. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/costs-report/page.d.ts.map +1 -0
  557. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/costs-report/page.js +9 -0
  558. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/costs-report/page.js.map +1 -0
  559. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/costs-report/page.tsx +10 -0
  560. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/edit/page.d.ts +6 -0
  561. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/edit/page.d.ts.map +1 -0
  562. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/edit/page.js +9 -0
  563. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/edit/page.js.map +1 -0
  564. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/edit/page.tsx +11 -0
  565. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/page.d.ts +6 -0
  566. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/page.d.ts.map +1 -0
  567. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/page.js +9 -0
  568. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/page.js.map +1 -0
  569. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/[id]/page.tsx +11 -0
  570. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/new/page.d.ts +2 -0
  571. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/new/page.d.ts.map +1 -0
  572. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/new/page.js +8 -0
  573. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/new/page.js.map +1 -0
  574. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/new/page.tsx +5 -0
  575. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/page.d.ts +2 -0
  576. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/page.d.ts.map +1 -0
  577. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/page.js +492 -0
  578. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/page.js.map +1 -0
  579. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/projects/page.tsx +757 -0
  580. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/collaborators/page.d.ts +2 -0
  581. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/collaborators/page.d.ts.map +1 -0
  582. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/collaborators/page.js +342 -0
  583. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/collaborators/page.js.map +1 -0
  584. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/collaborators/page.tsx +430 -0
  585. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/projects/page.d.ts +2 -0
  586. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/projects/page.d.ts.map +1 -0
  587. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/projects/page.js +338 -0
  588. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/projects/page.js.map +1 -0
  589. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/reports/projects/page.tsx +428 -0
  590. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/schedule-adjustments/page.d.ts +2 -0
  591. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/schedule-adjustments/page.d.ts.map +1 -0
  592. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/schedule-adjustments/page.js +660 -0
  593. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/schedule-adjustments/page.js.map +1 -0
  594. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/schedule-adjustments/page.tsx +992 -0
  595. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/time-off/page.d.ts +2 -0
  596. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/time-off/page.d.ts.map +1 -0
  597. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/time-off/page.js +515 -0
  598. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/time-off/page.js.map +1 -0
  599. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/time-off/page.tsx +707 -0
  600. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/timesheets/page.d.ts +2 -0
  601. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/timesheets/page.d.ts.map +1 -0
  602. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/timesheets/page.js +1141 -0
  603. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/timesheets/page.js.map +1 -0
  604. package/hedhog/frontend/src/app/(app)/(libraries)/operations/operations/timesheets/page.tsx +1705 -0
  605. package/hedhog/frontend/src/app/(app)/(libraries)/operations/page.d.ts +2 -0
  606. package/hedhog/frontend/src/app/(app)/(libraries)/operations/page.d.ts.map +1 -0
  607. package/hedhog/frontend/src/app/(app)/(libraries)/operations/page.js +8 -0
  608. package/hedhog/frontend/src/app/(app)/(libraries)/operations/page.js.map +1 -0
  609. package/hedhog/frontend/src/app/(app)/(libraries)/operations/page.tsx +5 -0
  610. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-categories/page.d.ts +2 -0
  611. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-categories/page.d.ts.map +1 -0
  612. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-categories/page.js +436 -0
  613. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-categories/page.js.map +1 -0
  614. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-categories/page.tsx +675 -0
  615. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-types/page.d.ts +2 -0
  616. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-types/page.d.ts.map +1 -0
  617. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-types/page.js +563 -0
  618. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-types/page.js.map +1 -0
  619. package/hedhog/frontend/src/app/(app)/(libraries)/operations/project-cost-types/page.tsx +846 -0
  620. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/edit/page.d.ts +6 -0
  621. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/edit/page.d.ts.map +1 -0
  622. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/edit/page.js +9 -0
  623. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/edit/page.js.map +1 -0
  624. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/edit/page.tsx +11 -0
  625. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/page.d.ts +6 -0
  626. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/page.d.ts.map +1 -0
  627. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/page.js +9 -0
  628. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/page.js.map +1 -0
  629. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/[id]/page.tsx +11 -0
  630. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/new/page.d.ts +2 -0
  631. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/new/page.d.ts.map +1 -0
  632. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/new/page.js +8 -0
  633. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/new/page.js.map +1 -0
  634. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/new/page.tsx +5 -0
  635. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/page.d.ts +2 -0
  636. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/page.d.ts.map +1 -0
  637. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/page.js +492 -0
  638. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/page.js.map +1 -0
  639. package/hedhog/frontend/src/app/(app)/(libraries)/operations/projects/page.tsx +757 -0
  640. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/collaborators/page.d.ts +2 -0
  641. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/collaborators/page.d.ts.map +1 -0
  642. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/collaborators/page.js +342 -0
  643. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/collaborators/page.js.map +1 -0
  644. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/collaborators/page.tsx +430 -0
  645. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/projects/page.d.ts +2 -0
  646. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/projects/page.d.ts.map +1 -0
  647. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/projects/page.js +338 -0
  648. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/projects/page.js.map +1 -0
  649. package/hedhog/frontend/src/app/(app)/(libraries)/operations/reports/projects/page.tsx +428 -0
  650. package/hedhog/frontend/src/app/(app)/(libraries)/operations/schedule-adjustments/page.d.ts +2 -0
  651. package/hedhog/frontend/src/app/(app)/(libraries)/operations/schedule-adjustments/page.d.ts.map +1 -0
  652. package/hedhog/frontend/src/app/(app)/(libraries)/operations/schedule-adjustments/page.js +660 -0
  653. package/hedhog/frontend/src/app/(app)/(libraries)/operations/schedule-adjustments/page.js.map +1 -0
  654. package/hedhog/frontend/src/app/(app)/(libraries)/operations/schedule-adjustments/page.tsx +992 -0
  655. package/hedhog/frontend/src/app/(app)/(libraries)/operations/time-off/page.d.ts +2 -0
  656. package/hedhog/frontend/src/app/(app)/(libraries)/operations/time-off/page.d.ts.map +1 -0
  657. package/hedhog/frontend/src/app/(app)/(libraries)/operations/time-off/page.js +515 -0
  658. package/hedhog/frontend/src/app/(app)/(libraries)/operations/time-off/page.js.map +1 -0
  659. package/hedhog/frontend/src/app/(app)/(libraries)/operations/time-off/page.tsx +707 -0
  660. package/hedhog/frontend/src/app/(app)/(libraries)/operations/timesheets/page.d.ts +2 -0
  661. package/hedhog/frontend/src/app/(app)/(libraries)/operations/timesheets/page.d.ts.map +1 -0
  662. package/hedhog/frontend/src/app/(app)/(libraries)/operations/timesheets/page.js +1141 -0
  663. package/hedhog/frontend/src/app/(app)/(libraries)/operations/timesheets/page.js.map +1 -0
  664. package/hedhog/frontend/src/app/(app)/(libraries)/operations/timesheets/page.tsx +1705 -0
  665. package/hedhog/table/operations_project_assignment.yaml +1 -0
  666. package/hedhog/table/operations_project_cost.yaml +93 -0
  667. package/hedhog/table/operations_project_cost_category.yaml +37 -0
  668. package/hedhog/table/operations_project_cost_type.yaml +55 -0
  669. package/hedhog/table/operations_task_comment.yaml +26 -0
  670. package/package.json +6 -6
  671. package/src/controllers/operations-collaborators.controller.ts +26 -0
  672. package/src/controllers/operations-project-costs.controller.ts +249 -0
  673. package/src/controllers/operations-tasks.controller.ts +49 -0
  674. package/src/dto/create-collaborator-project-assignment.dto.ts +14 -0
  675. package/src/dto/create-project-cost-category.dto.ts +37 -0
  676. package/src/dto/create-project-cost-type.dto.ts +64 -0
  677. package/src/dto/create-project-cost.dto.ts +126 -0
  678. package/src/dto/get-project-cost-report.dto.ts +46 -0
  679. package/src/dto/list-project-cost-categories.dto.ts +17 -0
  680. package/src/dto/list-project-cost-types.dto.ts +28 -0
  681. package/src/dto/list-project-costs.dto.ts +59 -0
  682. package/src/dto/list-tasks.dto.ts +7 -0
  683. package/src/dto/list-timesheets.dto.ts +7 -1
  684. package/src/dto/update-collaborator-project-assignment.dto.ts +58 -0
  685. package/src/dto/update-project-cost-category.dto.ts +4 -0
  686. package/src/dto/update-project-cost-type.dto.ts +4 -0
  687. package/src/dto/update-project-cost.dto.ts +4 -0
  688. package/src/operations.module.ts +2 -0
  689. package/src/operations.service.ts +2274 -39
@@ -0,0 +1,1013 @@
1
+ "use strict";
2
+ 'use client';
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ProjectFormScreen = ProjectFormScreen;
8
+ const entity_list_1 = require("@/components/entity-list");
9
+ const avatar_1 = require("@/components/ui/avatar");
10
+ const button_1 = require("@/components/ui/button");
11
+ const checkbox_1 = require("@/components/ui/checkbox");
12
+ const command_1 = require("@/components/ui/command");
13
+ const form_1 = require("@/components/ui/form");
14
+ const form_actions_1 = require("@/components/ui/form-actions");
15
+ const input_1 = require("@/components/ui/input");
16
+ const input_money_1 = require("@/components/ui/input-money");
17
+ const label_1 = require("@/components/ui/label");
18
+ const popover_1 = require("@/components/ui/popover");
19
+ const select_1 = require("@/components/ui/select");
20
+ const sheet_1 = require("@/components/ui/sheet");
21
+ const textarea_1 = require("@/components/ui/textarea");
22
+ const tooltip_1 = require("@/components/ui/tooltip");
23
+ const next_app_provider_1 = require("@hed-hog/next-app-provider");
24
+ const zod_1 = require("@hookform/resolvers/zod");
25
+ const lucide_react_1 = require("lucide-react");
26
+ const next_intl_1 = require("next-intl");
27
+ const link_1 = __importDefault(require("next/link"));
28
+ const navigation_1 = require("next/navigation");
29
+ const react_1 = require("react");
30
+ const react_hook_form_1 = require("react-hook-form");
31
+ const zod_2 = require("zod");
32
+ const api_1 = require("../_lib/api");
33
+ const use_operations_access_1 = require("../_lib/hooks/use-operations-access");
34
+ const format_1 = require("../_lib/utils/format");
35
+ const forms_1 = require("../_lib/utils/forms");
36
+ const contract_form_screen_1 = require("./contract-form-screen");
37
+ const department_select_with_create_1 = require("./department-select-with-create");
38
+ const operations_header_1 = require("./operations-header");
39
+ const person_select_with_create_1 = require("./person-select-with-create");
40
+ const OPTION_PAGE_SIZE = 12;
41
+ function generateProjectCode(name) {
42
+ const words = name.trim().split(/\s+/).filter(Boolean);
43
+ if (words.length === 0)
44
+ return '';
45
+ if (words.length === 1)
46
+ return words[0].slice(0, 5).toUpperCase();
47
+ return words
48
+ .map((w) => w[0].toUpperCase())
49
+ .join('')
50
+ .slice(0, 6);
51
+ }
52
+ function normalizeDateInputValue(value) {
53
+ if (!value) {
54
+ return '';
55
+ }
56
+ const normalizedValue = String(value).trim();
57
+ if (!normalizedValue) {
58
+ return '';
59
+ }
60
+ const directMatch = normalizedValue.match(/^\d{4}-\d{2}-\d{2}/);
61
+ if (directMatch === null || directMatch === void 0 ? void 0 : directMatch[0]) {
62
+ return directMatch[0];
63
+ }
64
+ const parsedDate = new Date(normalizedValue);
65
+ if (Number.isNaN(parsedDate.getTime())) {
66
+ return normalizedValue;
67
+ }
68
+ return parsedDate.toISOString().slice(0, 10);
69
+ }
70
+ function buildEmptyForm(collaborators = []) {
71
+ return {
72
+ contractId: 'none',
73
+ managerCollaboratorId: 'none',
74
+ code: '',
75
+ name: '',
76
+ clientName: '',
77
+ summary: '',
78
+ status: 'planning',
79
+ progressPercent: '',
80
+ deliveryModel: 'project_delivery',
81
+ budgetAmount: '',
82
+ startDate: '',
83
+ endDate: '',
84
+ billingModel: 'time_and_material',
85
+ monthlyHourCap: '',
86
+ contractCode: '',
87
+ contractName: '',
88
+ contractDescription: '',
89
+ teamAssignments: collaborators.map((collaborator) => ({
90
+ collaboratorId: collaborator.id,
91
+ selected: false,
92
+ projectRoleId: 'none',
93
+ roleLabel: '',
94
+ weeklyHours: '',
95
+ allocationPercent: '',
96
+ status: 'active',
97
+ startDate: new Date().toISOString().split('T')[0],
98
+ endDate: '',
99
+ })),
100
+ };
101
+ }
102
+ function toFormState(project, collaborators) {
103
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
104
+ const collaboratorOptions = collaborators.length > 0
105
+ ? collaborators
106
+ : ((_a = project.assignments) !== null && _a !== void 0 ? _a : []).map((assignment) => ({
107
+ id: assignment.collaboratorId,
108
+ code: '',
109
+ displayName: assignment.collaboratorName,
110
+ department: null,
111
+ title: null,
112
+ status: 'active',
113
+ }));
114
+ const assignments = new Map(((_b = project.assignments) !== null && _b !== void 0 ? _b : []).map((assignment) => [
115
+ assignment.collaboratorId,
116
+ assignment,
117
+ ]));
118
+ return {
119
+ contractId: ((_c = project.relatedContract) === null || _c === void 0 ? void 0 : _c.id)
120
+ ? String(project.relatedContract.id)
121
+ : 'none',
122
+ managerCollaboratorId: project.managerCollaboratorId
123
+ ? String(project.managerCollaboratorId)
124
+ : 'none',
125
+ code: (_d = project.code) !== null && _d !== void 0 ? _d : '',
126
+ name: (_e = project.name) !== null && _e !== void 0 ? _e : '',
127
+ clientName: (_f = project.clientName) !== null && _f !== void 0 ? _f : '',
128
+ summary: (_g = project.summary) !== null && _g !== void 0 ? _g : '',
129
+ status: (_h = project.status) !== null && _h !== void 0 ? _h : 'planning',
130
+ progressPercent: project.progressPercent !== null && project.progressPercent !== undefined
131
+ ? String(project.progressPercent)
132
+ : '',
133
+ deliveryModel: (_j = project.deliveryModel) !== null && _j !== void 0 ? _j : 'project_delivery',
134
+ budgetAmount: project.budgetAmount !== null && project.budgetAmount !== undefined
135
+ ? String(project.budgetAmount)
136
+ : '',
137
+ startDate: normalizeDateInputValue(project.startDate),
138
+ endDate: normalizeDateInputValue(project.endDate),
139
+ billingModel: (_l = (_k = project.relatedContract) === null || _k === void 0 ? void 0 : _k.billingModel) !== null && _l !== void 0 ? _l : 'time_and_material',
140
+ monthlyHourCap: ((_m = project.relatedContract) === null || _m === void 0 ? void 0 : _m.monthlyHourCap) !== null &&
141
+ ((_o = project.relatedContract) === null || _o === void 0 ? void 0 : _o.monthlyHourCap) !== undefined
142
+ ? String(project.relatedContract.monthlyHourCap)
143
+ : '',
144
+ contractCode: (_q = (_p = project.relatedContract) === null || _p === void 0 ? void 0 : _p.code) !== null && _q !== void 0 ? _q : '',
145
+ contractName: (_s = (_r = project.relatedContract) === null || _r === void 0 ? void 0 : _r.name) !== null && _s !== void 0 ? _s : '',
146
+ contractDescription: (_u = (_t = project.relatedContract) === null || _t === void 0 ? void 0 : _t.description) !== null && _u !== void 0 ? _u : '',
147
+ teamAssignments: collaboratorOptions.map((collaborator) => {
148
+ var _a, _b;
149
+ const assignment = assignments.get(collaborator.id);
150
+ return {
151
+ collaboratorId: collaborator.id,
152
+ selected: Boolean(assignment),
153
+ projectRoleId: (assignment === null || assignment === void 0 ? void 0 : assignment.projectRoleId)
154
+ ? String(assignment.projectRoleId)
155
+ : 'none',
156
+ roleLabel: (_a = assignment === null || assignment === void 0 ? void 0 : assignment.roleLabel) !== null && _a !== void 0 ? _a : '',
157
+ weeklyHours: (assignment === null || assignment === void 0 ? void 0 : assignment.weeklyHours) !== null &&
158
+ (assignment === null || assignment === void 0 ? void 0 : assignment.weeklyHours) !== undefined
159
+ ? String(assignment.weeklyHours)
160
+ : '',
161
+ allocationPercent: (assignment === null || assignment === void 0 ? void 0 : assignment.allocationPercent) !== null &&
162
+ (assignment === null || assignment === void 0 ? void 0 : assignment.allocationPercent) !== undefined
163
+ ? String(assignment.allocationPercent)
164
+ : '',
165
+ status: (_b = assignment === null || assignment === void 0 ? void 0 : assignment.status) !== null && _b !== void 0 ? _b : 'active',
166
+ startDate: normalizeDateInputValue(assignment === null || assignment === void 0 ? void 0 : assignment.startDate) || new Date().toISOString().split('T')[0],
167
+ endDate: normalizeDateInputValue(assignment === null || assignment === void 0 ? void 0 : assignment.endDate),
168
+ };
169
+ }),
170
+ };
171
+ }
172
+ function SearchableSelect({ label, value, options, placeholder, searchPlaceholder, emptyLabel, onChange, }) {
173
+ var _a;
174
+ const commonT = (0, next_intl_1.useTranslations)('operations.Common');
175
+ const [open, setOpen] = (0, react_1.useState)(false);
176
+ const [search, setSearch] = (0, react_1.useState)('');
177
+ const [visibleCount, setVisibleCount] = (0, react_1.useState)(OPTION_PAGE_SIZE);
178
+ const filteredOptions = (0, react_1.useMemo)(() => {
179
+ const normalizedSearch = search.trim().toLowerCase();
180
+ if (!normalizedSearch) {
181
+ return options;
182
+ }
183
+ return options.filter((option) => [option.title, option.description]
184
+ .filter(Boolean)
185
+ .some((field) => String(field).toLowerCase().includes(normalizedSearch)));
186
+ }, [options, search]);
187
+ const selectedOption = options.find((option) => String(option.id) === value);
188
+ const visibleOptions = filteredOptions.slice(0, visibleCount);
189
+ return (<div className="grid gap-2">
190
+ {label ? <label_1.Label>{label}</label_1.Label> : null}
191
+
192
+ <popover_1.Popover open={open} onOpenChange={(nextOpen) => {
193
+ setOpen(nextOpen);
194
+ setVisibleCount(OPTION_PAGE_SIZE);
195
+ if (!nextOpen) {
196
+ setSearch('');
197
+ }
198
+ }}>
199
+ <popover_1.PopoverTrigger asChild>
200
+ <button_1.Button type="button" variant="outline" role="combobox" className="w-full justify-between overflow-hidden">
201
+ <span className="truncate text-left">
202
+ {(_a = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.title) !== null && _a !== void 0 ? _a : emptyLabel}
203
+ </span>
204
+ <lucide_react_1.ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50"/>
205
+ </button_1.Button>
206
+ </popover_1.PopoverTrigger>
207
+ <popover_1.PopoverContent className="p-0" style={{ width: 'var(--radix-popover-trigger-width)' }}>
208
+ <command_1.Command shouldFilter={false}>
209
+ <command_1.CommandInput placeholder={searchPlaceholder} value={search} onValueChange={(nextValue) => {
210
+ setSearch(nextValue);
211
+ setVisibleCount(OPTION_PAGE_SIZE);
212
+ }}/>
213
+ <command_1.CommandList>
214
+ <command_1.CommandEmpty>
215
+ <div className="p-2 text-sm text-muted-foreground">
216
+ {commonT('states.emptyDescription')}
217
+ </div>
218
+ </command_1.CommandEmpty>
219
+
220
+ <command_1.CommandGroup>
221
+ <command_1.CommandItem value="none" onSelect={() => {
222
+ onChange('none');
223
+ setOpen(false);
224
+ }}>
225
+ {value === 'none' ? (<lucide_react_1.Check className="mr-2 h-4 w-4"/>) : (<span className="mr-2 h-4 w-4"/>)}
226
+ {placeholder}
227
+ </command_1.CommandItem>
228
+
229
+ {visibleOptions.map((option) => {
230
+ var _a;
231
+ return (<command_1.CommandItem key={option.id} value={`${option.title} ${(_a = option.description) !== null && _a !== void 0 ? _a : ''}`} onSelect={() => {
232
+ onChange(String(option.id));
233
+ setOpen(false);
234
+ }}>
235
+ {String(option.id) === value ? (<lucide_react_1.Check className="mr-2 h-4 w-4"/>) : (<span className="mr-2 h-4 w-4"/>)}
236
+ {option.avatarUrl !== undefined ? (<avatar_1.Avatar className="mr-2 h-6 w-6 shrink-0">
237
+ {option.avatarUrl ? (<avatar_1.AvatarImage src={option.avatarUrl} alt={option.title}/>) : null}
238
+ <avatar_1.AvatarFallback className="text-[9px] font-medium">
239
+ {option.title
240
+ .trim()
241
+ .split(' ')
242
+ .filter(Boolean)
243
+ .slice(0, 2)
244
+ .map((w) => w[0].toUpperCase())
245
+ .join('')}
246
+ </avatar_1.AvatarFallback>
247
+ </avatar_1.Avatar>) : null}
248
+ <div className="min-w-0">
249
+ <div className="truncate">{option.title}</div>
250
+ {option.description ? (<div className="truncate text-xs text-muted-foreground">
251
+ {option.description}
252
+ </div>) : null}
253
+ </div>
254
+ </command_1.CommandItem>);
255
+ })}
256
+ </command_1.CommandGroup>
257
+
258
+ {filteredOptions.length > visibleCount ? (<div className="border-t p-2">
259
+ <button_1.Button type="button" variant="ghost" className="w-full" onClick={() => setVisibleCount((current) => current + OPTION_PAGE_SIZE)}>
260
+ {commonT('actions.loadMore')}
261
+ </button_1.Button>
262
+ </div>) : null}
263
+ </command_1.CommandList>
264
+ </command_1.Command>
265
+ </popover_1.PopoverContent>
266
+ </popover_1.Popover>
267
+ </div>);
268
+ }
269
+ function FieldLabel({ label, hint }) {
270
+ return (<div className="flex items-center gap-1.5">
271
+ <label_1.Label>{label}</label_1.Label>
272
+ {hint ? (<tooltip_1.Tooltip>
273
+ <tooltip_1.TooltipTrigger asChild>
274
+ <span className="inline-flex cursor-help text-muted-foreground">
275
+ <lucide_react_1.Info className="h-3.5 w-3.5"/>
276
+ </span>
277
+ </tooltip_1.TooltipTrigger>
278
+ <tooltip_1.TooltipContent>
279
+ <p>{hint}</p>
280
+ </tooltip_1.TooltipContent>
281
+ </tooltip_1.Tooltip>) : null}
282
+ </div>);
283
+ }
284
+ function ContractSelectWithCreate({ value, contracts, label, selectPlaceholder, searchPlaceholder, onChange, onCreated, initialValues, }) {
285
+ const commonT = (0, next_intl_1.useTranslations)('operations.Common');
286
+ const contractT = (0, next_intl_1.useTranslations)('operations.ContractFormPage');
287
+ const selectedContract = contracts.find((item) => String(item.id) === value);
288
+ const hasSelection = value !== 'none';
289
+ const [isCreateSheetOpen, setIsCreateSheetOpen] = (0, react_1.useState)(false);
290
+ return (<>
291
+ <div className="space-y-2">
292
+ <div className="grid min-w-0 grid-cols-[minmax(0,1fr)_auto] gap-2 sm:grid-cols-[minmax(0,1fr)_auto_auto]">
293
+ <SearchableSelect label={label} value={value} options={contracts.map((contract) => ({
294
+ id: contract.id,
295
+ title: contract.name ||
296
+ contract.code ||
297
+ commonT('labels.notAvailable'),
298
+ description: [
299
+ contract.code,
300
+ contract.clientName,
301
+ contractT.has(`options.contractTypes.${contract.contractType}`)
302
+ ? contractT(`options.contractTypes.${contract.contractType}`)
303
+ : (0, format_1.formatEnumLabel)(contract.contractType),
304
+ ]
305
+ .filter(Boolean)
306
+ .join(' • '),
307
+ }))} placeholder={selectPlaceholder} searchPlaceholder={searchPlaceholder} emptyLabel={commonT('labels.notAssigned')} onChange={onChange}/>
308
+
309
+ {hasSelection ? (<button_1.Button type="button" variant="outline" size="icon" className="shrink-0" onClick={() => onChange('none')} aria-label={commonT('actions.clearSelection')}>
310
+ <lucide_react_1.X className="size-4"/>
311
+ </button_1.Button>) : null}
312
+
313
+ <button_1.Button type="button" variant="outline" size="icon" className="shrink-0" onClick={() => setIsCreateSheetOpen(true)} aria-label={commonT('actions.create')}>
314
+ <lucide_react_1.Plus className="size-4"/>
315
+ </button_1.Button>
316
+ </div>
317
+
318
+ {selectedContract ? (<button_1.Button type="button" variant="outline" size="sm" asChild className="w-fit">
319
+ <link_1.default href={`/operations/contracts?edit=${selectedContract.id}`}>
320
+ <lucide_react_1.FileText className="size-4"/>
321
+ {commonT('actions.openContract')}
322
+ </link_1.default>
323
+ </button_1.Button>) : null}
324
+ </div>
325
+
326
+ <sheet_1.Sheet open={isCreateSheetOpen} onOpenChange={setIsCreateSheetOpen}>
327
+ <sheet_1.SheetContent className="w-full overflow-y-auto sm:max-w-7xl">
328
+ <sheet_1.SheetHeader>
329
+ <sheet_1.SheetTitle>{contractT('newTitle')}</sheet_1.SheetTitle>
330
+ <sheet_1.SheetDescription>{contractT('description')}</sheet_1.SheetDescription>
331
+ </sheet_1.SheetHeader>
332
+
333
+ <contract_form_screen_1.ContractFormScreen initialValues={initialValues} onCancel={() => setIsCreateSheetOpen(false)} onSaved={async (contract) => {
334
+ const createdContractId = (contract === null || contract === void 0 ? void 0 : contract.id)
335
+ ? String(contract.id)
336
+ : value;
337
+ onChange(createdContractId);
338
+ await (onCreated === null || onCreated === void 0 ? void 0 : onCreated(contract));
339
+ setIsCreateSheetOpen(false);
340
+ }}/>
341
+ </sheet_1.SheetContent>
342
+ </sheet_1.Sheet>
343
+ </>);
344
+ }
345
+ function ProjectFormScreen({ projectId, onSaved, onCancel, }) {
346
+ const t = (0, next_intl_1.useTranslations)('operations.ProjectFormPage');
347
+ const commonT = (0, next_intl_1.useTranslations)('operations.Common');
348
+ const contractT = (0, next_intl_1.useTranslations)('operations.ContractFormPage');
349
+ const { request, showToastHandler, currentLocaleCode } = (0, next_app_provider_1.useApp)();
350
+ const access = (0, use_operations_access_1.useOperationsAccess)();
351
+ const router = (0, navigation_1.useRouter)();
352
+ const [assignmentSearch, setAssignmentSearch] = (0, react_1.useState)('');
353
+ const isSheetMode = Boolean(onCancel);
354
+ const isCreateMode = !projectId;
355
+ const [codeAutoMode, setCodeAutoMode] = (0, react_1.useState)(isCreateMode);
356
+ const projectFormSchema = (0, react_1.useMemo)(() => zod_2.z.object({
357
+ contractId: zod_2.z.string(),
358
+ managerCollaboratorId: zod_2.z.string(),
359
+ code: zod_2.z.string().trim().min(1, t('messages.requiredFields')),
360
+ name: zod_2.z.string().trim().min(1, t('messages.requiredFields')),
361
+ clientName: zod_2.z.string().trim().min(1, t('messages.requiredFields')),
362
+ summary: zod_2.z.string(),
363
+ status: zod_2.z.string(),
364
+ progressPercent: zod_2.z
365
+ .string()
366
+ .refine((value) => !value ||
367
+ (!Number.isNaN(Number(value)) &&
368
+ Number(value) >= 0 &&
369
+ Number(value) <= 100), t('hints.progressPercent')),
370
+ deliveryModel: zod_2.z.string(),
371
+ budgetAmount: zod_2.z.string(),
372
+ startDate: zod_2.z.string(),
373
+ endDate: zod_2.z.string(),
374
+ billingModel: zod_2.z.string(),
375
+ monthlyHourCap: zod_2.z.string(),
376
+ contractCode: zod_2.z.string(),
377
+ contractName: zod_2.z.string(),
378
+ contractDescription: zod_2.z.string(),
379
+ teamAssignments: zod_2.z
380
+ .array(zod_2.z.object({
381
+ collaboratorId: zod_2.z.number(),
382
+ selected: zod_2.z.boolean(),
383
+ projectRoleId: zod_2.z.string(),
384
+ roleLabel: zod_2.z.string(),
385
+ weeklyHours: zod_2.z.string(),
386
+ allocationPercent: zod_2.z.string(),
387
+ status: zod_2.z.string(),
388
+ startDate: zod_2.z.string(),
389
+ endDate: zod_2.z.string(),
390
+ }))
391
+ .superRefine((assignments, ctx) => {
392
+ assignments.forEach((assignment, index) => {
393
+ if (assignment.selected && !assignment.roleLabel.trim()) {
394
+ ctx.addIssue({
395
+ code: zod_2.z.ZodIssueCode.custom,
396
+ message: t('messages.roleRequired'),
397
+ path: [index, 'roleLabel'],
398
+ });
399
+ }
400
+ });
401
+ }),
402
+ }), [t]);
403
+ const formMethods = (0, react_hook_form_1.useForm)({
404
+ resolver: (0, zod_1.zodResolver)(projectFormSchema),
405
+ defaultValues: buildEmptyForm(),
406
+ mode: 'onSubmit',
407
+ reValidateMode: 'onChange',
408
+ });
409
+ const form = formMethods.watch();
410
+ const setForm = (updater) => {
411
+ const current = formMethods.getValues();
412
+ const next = typeof updater === 'function' ? updater(current) : updater;
413
+ formMethods.reset(next, {
414
+ keepErrors: true,
415
+ keepDirty: true,
416
+ keepTouched: true,
417
+ });
418
+ };
419
+ const { data: rawCollaborators } = (0, next_app_provider_1.useQuery)({
420
+ queryKey: ['operations-project-form-collaborators', currentLocaleCode],
421
+ enabled: access.isDirector,
422
+ queryFn: () => (0, api_1.fetchOperations)(request, '/operations/collaborators'),
423
+ });
424
+ // Stable reference prevents the useEffect(reset, [collaborators, project]) from
425
+ // re-running on every render while the query is still loading (undefined → [] new ref).
426
+ const collaborators = (0, react_1.useMemo)(() => rawCollaborators !== null && rawCollaborators !== void 0 ? rawCollaborators : [], [rawCollaborators]);
427
+ const { data: contracts = [], refetch: refetchContracts } = (0, next_app_provider_1.useQuery)({
428
+ queryKey: ['operations-project-form-contracts', currentLocaleCode],
429
+ enabled: access.isDirector,
430
+ queryFn: () => (0, api_1.fetchOperations)(request, '/operations/contracts'),
431
+ });
432
+ const { data: projectRoles = [], refetch: refetchProjectRoles } = (0, next_app_provider_1.useQuery)({
433
+ queryKey: ['operations-project-form-project-roles', currentLocaleCode],
434
+ enabled: access.isDirector,
435
+ staleTime: 0,
436
+ refetchOnMount: 'always',
437
+ queryFn: () => (0, api_1.fetchOperations)(request, '/operations/project-roles'),
438
+ });
439
+ const { data: project, isLoading: isLoadingProject } = (0, next_app_provider_1.useQuery)({
440
+ queryKey: ['operations-project-form', currentLocaleCode, projectId],
441
+ enabled: Boolean(projectId),
442
+ staleTime: 0,
443
+ refetchOnMount: 'always',
444
+ queryFn: () => (0, api_1.fetchOperations)(request, `/operations/projects/${projectId}`),
445
+ });
446
+ (0, react_1.useEffect)(() => {
447
+ if (project) {
448
+ formMethods.reset(toFormState(project, collaborators));
449
+ return;
450
+ }
451
+ if (!collaborators.length) {
452
+ return;
453
+ }
454
+ const currentValues = formMethods.getValues();
455
+ if (!currentValues.teamAssignments.length) {
456
+ formMethods.reset(buildEmptyForm(collaborators));
457
+ }
458
+ }, [collaborators, formMethods, project]);
459
+ const availableCollaborators = (0, react_1.useMemo)(() => {
460
+ var _a, _b;
461
+ const byId = new Map();
462
+ for (const collaborator of collaborators) {
463
+ byId.set(collaborator.id, collaborator);
464
+ }
465
+ if ((project === null || project === void 0 ? void 0 : project.managerCollaboratorId) &&
466
+ !byId.has(project.managerCollaboratorId)) {
467
+ byId.set(project.managerCollaboratorId, {
468
+ id: project.managerCollaboratorId,
469
+ code: '',
470
+ displayName: (_a = project.managerName) !== null && _a !== void 0 ? _a : `#${project.managerCollaboratorId}`,
471
+ department: null,
472
+ title: null,
473
+ status: 'active',
474
+ });
475
+ }
476
+ for (const assignment of (_b = project === null || project === void 0 ? void 0 : project.assignments) !== null && _b !== void 0 ? _b : []) {
477
+ if (!byId.has(assignment.collaboratorId)) {
478
+ byId.set(assignment.collaboratorId, {
479
+ id: assignment.collaboratorId,
480
+ code: '',
481
+ displayName: assignment.collaboratorName,
482
+ department: null,
483
+ title: null,
484
+ status: 'active',
485
+ });
486
+ }
487
+ }
488
+ return Array.from(byId.values());
489
+ }, [collaborators, project]);
490
+ const availableContracts = (0, react_1.useMemo)(() => {
491
+ if (!(project === null || project === void 0 ? void 0 : project.relatedContract)) {
492
+ return contracts;
493
+ }
494
+ const hasSelectedContract = contracts.some((contract) => { var _a; return contract.id === ((_a = project.relatedContract) === null || _a === void 0 ? void 0 : _a.id); });
495
+ return hasSelectedContract
496
+ ? contracts
497
+ : [project.relatedContract, ...contracts];
498
+ }, [contracts, project]);
499
+ const selectedContract = (0, react_1.useMemo)(() => {
500
+ var _a;
501
+ return (_a = availableContracts.find((contract) => String(contract.id) === form.contractId)) !== null && _a !== void 0 ? _a : null;
502
+ }, [availableContracts, form.contractId]);
503
+ const managerOptions = (0, react_1.useMemo)(() => availableCollaborators.map((collaborator) => ({
504
+ id: collaborator.id,
505
+ title: collaborator.displayName,
506
+ description: [collaborator.department, collaborator.title]
507
+ .filter(Boolean)
508
+ .join(' • '),
509
+ avatarUrl: typeof collaborator.personAvatarId === 'number' &&
510
+ collaborator.personAvatarId > 0
511
+ ? `${process.env.NEXT_PUBLIC_API_BASE_URL}/person/avatar/${collaborator.personAvatarId}`
512
+ : null,
513
+ })), [availableCollaborators]);
514
+ const projectRoleOptions = (0, react_1.useMemo)(() => projectRoles.map((role) => {
515
+ var _a, _b;
516
+ return ({
517
+ id: role.id,
518
+ name: role.name,
519
+ code: (_a = role.code) !== null && _a !== void 0 ? _a : null,
520
+ description: (_b = role.description) !== null && _b !== void 0 ? _b : null,
521
+ });
522
+ }), [projectRoles]);
523
+ const createProjectRole = async (projectRoleName) => {
524
+ try {
525
+ const createdRole = await (0, api_1.mutateOperations)(request, '/operations/project-roles', 'POST', {
526
+ name: projectRoleName,
527
+ });
528
+ await refetchProjectRoles();
529
+ return createdRole;
530
+ }
531
+ catch (error) {
532
+ showToastHandler === null || showToastHandler === void 0 ? void 0 : showToastHandler('error', (0, api_1.getOperationsErrorMessage)(error, t('messages.projectRoleSaveError')));
533
+ return null;
534
+ }
535
+ };
536
+ const selectedAssignmentsCount = (0, react_1.useMemo)(() => form.teamAssignments.filter((assignment) => assignment.selected).length, [form.teamAssignments]);
537
+ const filteredAssignments = (0, react_1.useMemo)(() => {
538
+ const normalizedSearch = assignmentSearch.trim().toLowerCase();
539
+ return form.teamAssignments.filter((assignment) => {
540
+ const collaborator = availableCollaborators.find((item) => item.id === assignment.collaboratorId);
541
+ if (!collaborator) {
542
+ return false;
543
+ }
544
+ if (!normalizedSearch) {
545
+ return true;
546
+ }
547
+ return [
548
+ collaborator.displayName,
549
+ collaborator.department,
550
+ collaborator.title,
551
+ collaborator.code,
552
+ ]
553
+ .filter(Boolean)
554
+ .some((value) => String(value).toLowerCase().includes(normalizedSearch));
555
+ });
556
+ }, [assignmentSearch, availableCollaborators, form.teamAssignments]);
557
+ const updateAssignment = (collaboratorId, patch) => {
558
+ const nextAssignments = formMethods
559
+ .getValues('teamAssignments')
560
+ .map((assignment) => assignment.collaboratorId === collaboratorId
561
+ ? Object.assign(Object.assign({}, assignment), patch) : assignment);
562
+ formMethods.setValue('teamAssignments', nextAssignments, {
563
+ shouldDirty: true,
564
+ shouldValidate: true,
565
+ });
566
+ };
567
+ const onSubmit = async (values) => {
568
+ var _a;
569
+ const payload = {
570
+ contractId: values.contractId === 'none'
571
+ ? null
572
+ : (0, forms_1.parseNumberInput)(values.contractId),
573
+ managerCollaboratorId: values.managerCollaboratorId === 'none'
574
+ ? null
575
+ : (0, forms_1.parseNumberInput)(values.managerCollaboratorId),
576
+ code: values.code.trim(),
577
+ name: values.name.trim(),
578
+ clientName: (0, forms_1.trimToNull)(values.clientName),
579
+ summary: (0, forms_1.trimToNull)(values.summary),
580
+ status: values.status,
581
+ progressPercent: (0, forms_1.parseNumberInput)(values.progressPercent),
582
+ deliveryModel: (_a = (0, forms_1.trimToNull)(values.deliveryModel)) !== null && _a !== void 0 ? _a : 'project_delivery',
583
+ budgetAmount: (0, forms_1.parseNumberInput)(values.budgetAmount),
584
+ startDate: (0, forms_1.trimToNull)(values.startDate),
585
+ endDate: (0, forms_1.trimToNull)(values.endDate),
586
+ billingModel: values.billingModel,
587
+ monthlyHourCap: (0, forms_1.parseNumberInput)(values.monthlyHourCap),
588
+ contractCode: (0, forms_1.trimToNull)(values.contractCode),
589
+ contractName: (0, forms_1.trimToNull)(values.contractName),
590
+ contractDescription: (0, forms_1.trimToNull)(values.contractDescription),
591
+ teamAssignments: values.teamAssignments
592
+ .filter((assignment) => assignment.selected)
593
+ .map((assignment) => ({
594
+ collaboratorId: assignment.collaboratorId,
595
+ projectRoleId: assignment.projectRoleId === 'none'
596
+ ? null
597
+ : (0, forms_1.parseNumberInput)(assignment.projectRoleId),
598
+ roleLabel: (0, forms_1.trimToNull)(assignment.roleLabel),
599
+ weeklyHours: (0, forms_1.parseNumberInput)(assignment.weeklyHours),
600
+ allocationPercent: (0, forms_1.parseNumberInput)(assignment.allocationPercent),
601
+ status: assignment.status,
602
+ startDate: (0, forms_1.trimToNull)(assignment.startDate),
603
+ endDate: (0, forms_1.trimToNull)(assignment.endDate),
604
+ })),
605
+ };
606
+ try {
607
+ const response = projectId
608
+ ? await (0, api_1.mutateOperations)(request, `/operations/projects/${projectId}`, 'PATCH', payload)
609
+ : await (0, api_1.mutateOperations)(request, '/operations/projects', 'POST', payload);
610
+ showToastHandler === null || showToastHandler === void 0 ? void 0 : showToastHandler('success', projectId ? t('messages.updateSuccess') : t('messages.createSuccess'));
611
+ if (onSaved) {
612
+ await onSaved(response);
613
+ return;
614
+ }
615
+ router.push(`/operations/projects/${response.id}`);
616
+ }
617
+ catch (error) {
618
+ showToastHandler === null || showToastHandler === void 0 ? void 0 : showToastHandler('error', (0, api_1.getOperationsErrorMessage)(error, projectId ? t('messages.updateError') : t('messages.createError')));
619
+ }
620
+ };
621
+ const handleInvalidSubmit = () => {
622
+ showToastHandler === null || showToastHandler === void 0 ? void 0 : showToastHandler('error', t('messages.requiredFields'));
623
+ };
624
+ const noAccessState = (<entity_list_1.EmptyState icon={<lucide_react_1.FolderKanban className="size-12"/>} title={commonT('states.noAccessTitle')} description={t('noAccessDescription')} actionLabel={commonT('actions.refresh')} onAction={() => router.refresh()}/>);
625
+ if (!access.isDirector && !access.isLoading) {
626
+ if (isSheetMode) {
627
+ return <div className="pt-4">{noAccessState}</div>;
628
+ }
629
+ return (<entity_list_1.Page>
630
+ <operations_header_1.OperationsHeader title={t(projectId ? 'editTitle' : 'newTitle')} description={t('description')} current={t('breadcrumb')}/>
631
+ {noAccessState}
632
+ </entity_list_1.Page>);
633
+ }
634
+ const formContent = (<form_1.Form {...formMethods}>
635
+ <form onSubmit={formMethods.handleSubmit(onSubmit, handleInvalidSubmit)} className="min-w-0 space-y-5 overflow-x-hidden px-4">
636
+ <section className="space-y-3">
637
+ <div className="space-y-0.5">
638
+ <h3 className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
639
+ {t('sections.basicInfo')}
640
+ </h3>
641
+ <p className="text-[11px] text-muted-foreground/80">
642
+ {t(isCreateMode
643
+ ? 'sections.basicInfoCreateDescription'
644
+ : 'sections.basicInfoDescription')}
645
+ </p>
646
+ </div>
647
+ <form_1.FormField control={formMethods.control} name="name" render={({ field }) => (<form_1.FormItem className="min-w-0">
648
+ <form_1.FormLabel>{t('fields.name')}</form_1.FormLabel>
649
+ <form_1.FormControl>
650
+ <input_1.Input {...field} placeholder={t('placeholders.name')} autoFocus onChange={(e) => {
651
+ field.onChange(e);
652
+ if (codeAutoMode) {
653
+ formMethods.setValue('code', generateProjectCode(e.target.value));
654
+ }
655
+ }}/>
656
+ </form_1.FormControl>
657
+ <form_1.FormMessage />
658
+ </form_1.FormItem>)}/>
659
+ <div className="grid min-w-0 gap-3 lg:grid-cols-6">
660
+ <form_1.FormField control={formMethods.control} name="code" render={({ field }) => (<form_1.FormItem className="min-w-0 lg:col-span-1">
661
+ <form_1.FormLabel>{t('fields.code')}</form_1.FormLabel>
662
+ <form_1.FormControl>
663
+ <input_1.Input {...field} placeholder={t('placeholders.code')} onChange={(e) => {
664
+ setCodeAutoMode(false);
665
+ field.onChange(e);
666
+ }}/>
667
+ </form_1.FormControl>
668
+ <form_1.FormMessage />
669
+ </form_1.FormItem>)}/>
670
+ <form_1.FormField control={formMethods.control} name="clientName" render={({ field, fieldState }) => (<form_1.FormItem className="min-w-0 lg:col-span-3">
671
+ <form_1.FormLabel>{t('fields.clientName')}</form_1.FormLabel>
672
+ <form_1.FormControl>
673
+ <div className={fieldState.error
674
+ ? 'rounded-md border border-destructive p-1'
675
+ : ''}>
676
+ <person_select_with_create_1.PersonSelectWithCreate label="" entityLabel={t('fields.clientName')} value={null} initialSelectedLabel={field.value} selectPlaceholder={t('placeholders.clientName')} onChange={(_, personName) => field.onChange(personName !== null && personName !== void 0 ? personName : '')} personTypeFilter="all" createType="company"/>
677
+ </div>
678
+ </form_1.FormControl>
679
+ <form_1.FormMessage />
680
+ </form_1.FormItem>)}/>
681
+
682
+ <form_1.FormField control={formMethods.control} name="deliveryModel" render={({ field }) => (<form_1.FormItem className="min-w-0 lg:col-span-2">
683
+ <form_1.FormLabel>{t('fields.deliveryModel')}</form_1.FormLabel>
684
+ <select_1.Select value={field.value} onValueChange={field.onChange}>
685
+ <form_1.FormControl>
686
+ <select_1.SelectTrigger className="w-full">
687
+ <select_1.SelectValue />
688
+ </select_1.SelectTrigger>
689
+ </form_1.FormControl>
690
+ <select_1.SelectContent>
691
+ <select_1.SelectItem value="project_delivery">
692
+ {t('options.deliveryModels.project_delivery')}
693
+ </select_1.SelectItem>
694
+ <select_1.SelectItem value="dedicated_team">
695
+ {t('options.deliveryModels.dedicated_team')}
696
+ </select_1.SelectItem>
697
+ <select_1.SelectItem value="shared_team">
698
+ {t('options.deliveryModels.shared_team')}
699
+ </select_1.SelectItem>
700
+ <select_1.SelectItem value="support">
701
+ {t('options.deliveryModels.support')}
702
+ </select_1.SelectItem>
703
+ </select_1.SelectContent>
704
+ </select_1.Select>
705
+ <form_1.FormMessage />
706
+ </form_1.FormItem>)}/>
707
+ <form_1.FormField control={formMethods.control} name="summary" render={({ field }) => (<form_1.FormItem className="min-w-0 lg:col-span-6">
708
+ <form_1.FormLabel>{t('fields.summary')}</form_1.FormLabel>
709
+ <form_1.FormControl>
710
+ <textarea_1.Textarea {...field} rows={3} placeholder={t('placeholders.summary')}/>
711
+ </form_1.FormControl>
712
+ <form_1.FormMessage />
713
+ </form_1.FormItem>)}/>
714
+ </div>
715
+ </section>
716
+
717
+ <section className="space-y-3">
718
+ <div className="space-y-0.5">
719
+ <h3 className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
720
+ {t('sections.governance')}
721
+ </h3>
722
+ <p className="text-[11px] text-muted-foreground/80">
723
+ {t(isCreateMode
724
+ ? 'sections.governanceCreateDescription'
725
+ : 'sections.governanceDescription')}
726
+ </p>
727
+ </div>
728
+ <div className="grid min-w-0 gap-3 md:grid-cols-2 xl:grid-cols-5">
729
+ <div className="min-w-0 space-y-2">
730
+ <FieldLabel label={commonT('labels.manager')}/>
731
+ <SearchableSelect label="" value={form.managerCollaboratorId} options={managerOptions} placeholder={commonT('labels.notAssigned')} searchPlaceholder={t('placeholders.managerSearch')} emptyLabel={commonT('labels.notAssigned')} onChange={(value) => setForm((current) => (Object.assign(Object.assign({}, current), { managerCollaboratorId: value })))}/>
732
+ </div>
733
+ <div className="min-w-0 space-y-2">
734
+ <FieldLabel label={commonT('labels.startDate')}/>
735
+ <input_1.Input type="date" value={form.startDate} onChange={(event) => setForm((current) => (Object.assign(Object.assign({}, current), { startDate: event.target.value })))}/>
736
+ </div>
737
+ {!isCreateMode ? (<>
738
+ <div className="min-w-0 space-y-2">
739
+ <FieldLabel label={commonT('labels.status')}/>
740
+ <select_1.Select value={form.status} onValueChange={(value) => setForm((current) => (Object.assign(Object.assign({}, current), { status: value })))}>
741
+ <select_1.SelectTrigger className="w-full">
742
+ <select_1.SelectValue />
743
+ </select_1.SelectTrigger>
744
+ <select_1.SelectContent>
745
+ <select_1.SelectItem value="planning">
746
+ {t('options.statuses.planning')}
747
+ </select_1.SelectItem>
748
+ <select_1.SelectItem value="active">
749
+ {t('options.statuses.active')}
750
+ </select_1.SelectItem>
751
+ <select_1.SelectItem value="at_risk">
752
+ {t('options.statuses.at_risk')}
753
+ </select_1.SelectItem>
754
+ <select_1.SelectItem value="paused">
755
+ {t('options.statuses.paused')}
756
+ </select_1.SelectItem>
757
+ <select_1.SelectItem value="completed">
758
+ {t('options.statuses.completed')}
759
+ </select_1.SelectItem>
760
+ <select_1.SelectItem value="archived">
761
+ {t('options.statuses.archived')}
762
+ </select_1.SelectItem>
763
+ </select_1.SelectContent>
764
+ </select_1.Select>
765
+ </div>
766
+ <div className="min-w-0 space-y-2">
767
+ <FieldLabel label={commonT('labels.endDate')}/>
768
+ <input_1.Input type="date" value={form.endDate} onChange={(event) => setForm((current) => (Object.assign(Object.assign({}, current), { endDate: event.target.value })))}/>
769
+ </div>
770
+ <form_1.FormField control={formMethods.control} name="progressPercent" render={({ field }) => {
771
+ var _a;
772
+ return (<form_1.FormItem className="min-w-0 gap-0">
773
+ <form_1.FormLabel>{t('fields.progressPercent')}</form_1.FormLabel>
774
+ <form_1.FormControl>
775
+ <input_1.Input {...field} type="text" inputMode="decimal" placeholder={t('placeholders.progressPercent')} value={(_a = field.value) !== null && _a !== void 0 ? _a : ''} onChange={(event) => field.onChange((0, forms_1.normalizePercentInput)(event.target.value))}/>
776
+ </form_1.FormControl>
777
+ <form_1.FormMessage />
778
+ </form_1.FormItem>);
779
+ }}/>
780
+ </>) : null}
781
+ </div>
782
+ </section>
783
+
784
+ {!isCreateMode ? (<>
785
+ <section className="space-y-3">
786
+ <div className="space-y-0.5">
787
+ <h3 className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
788
+ {t('sections.financials')}
789
+ </h3>
790
+ <p className="text-[11px] text-muted-foreground/80">
791
+ {t('sections.financialsDescription')}
792
+ </p>
793
+ </div>
794
+ <div className="grid min-w-0 gap-3 md:grid-cols-2 xl:grid-cols-4">
795
+ <div className="min-w-0 space-y-2">
796
+ <FieldLabel label={commonT('labels.budget')}/>
797
+ <input_money_1.InputMoney value={form.budgetAmount === '' ? '' : Number(form.budgetAmount)} onValueChange={(value) => setForm((current) => (Object.assign(Object.assign({}, current), { budgetAmount: value !== null ? String(value) : '' })))}/>
798
+ </div>
799
+ <div className="min-w-0 space-y-2">
800
+ <FieldLabel label={commonT('labels.monthlyHourCap')} hint={t('hints.monthlyHourCap')}/>
801
+ <input_1.Input type="text" inputMode="numeric" placeholder={t('placeholders.monthlyHourCap')} value={form.monthlyHourCap} onChange={(event) => {
802
+ const raw = event.target.value.replace(/[^0-9]/g, '');
803
+ setForm((current) => (Object.assign(Object.assign({}, current), { monthlyHourCap: raw })));
804
+ }}/>
805
+ </div>
806
+ <div className="min-w-0 space-y-2">
807
+ <FieldLabel label={commonT('labels.billingModel')}/>
808
+ <select_1.Select value={form.billingModel} onValueChange={(value) => setForm((current) => (Object.assign(Object.assign({}, current), { billingModel: value })))}>
809
+ <select_1.SelectTrigger className="w-full">
810
+ <select_1.SelectValue />
811
+ </select_1.SelectTrigger>
812
+ <select_1.SelectContent>
813
+ <select_1.SelectItem value="time_and_material">
814
+ {t('options.billingModels.time_and_material')}
815
+ </select_1.SelectItem>
816
+ <select_1.SelectItem value="monthly_retainer">
817
+ {t('options.billingModels.monthly_retainer')}
818
+ </select_1.SelectItem>
819
+ <select_1.SelectItem value="fixed_price">
820
+ {t('options.billingModels.fixed_price')}
821
+ </select_1.SelectItem>
822
+ </select_1.SelectContent>
823
+ </select_1.Select>
824
+ </div>
825
+ <div className="min-w-0 space-y-2">
826
+ <FieldLabel label={commonT('labels.contract')} hint={t('hints.contract')}/>
827
+ <ContractSelectWithCreate label="" value={form.contractId} contracts={availableContracts} selectPlaceholder={commonT('labels.notAssigned')} searchPlaceholder={t('placeholders.contractSearch')} onChange={(value) => setForm((current) => (Object.assign(Object.assign({}, current), { contractId: value })))} onCreated={async (contract) => {
828
+ await refetchContracts();
829
+ setForm((current) => {
830
+ var _a;
831
+ return (Object.assign(Object.assign({}, current), { contractId: (contract === null || contract === void 0 ? void 0 : contract.id)
832
+ ? String(contract.id)
833
+ : current.contractId, billingModel: (_a = contract === null || contract === void 0 ? void 0 : contract.billingModel) !== null && _a !== void 0 ? _a : current.billingModel, monthlyHourCap: (contract === null || contract === void 0 ? void 0 : contract.monthlyHourCap) !== null &&
834
+ (contract === null || contract === void 0 ? void 0 : contract.monthlyHourCap) !== undefined
835
+ ? String(contract.monthlyHourCap)
836
+ : current.monthlyHourCap }));
837
+ });
838
+ }} initialValues={{
839
+ code: form.code ? `PRJ-${form.code}` : '',
840
+ name: form.name ? `${form.name} Service Agreement` : '',
841
+ clientName: form.clientName,
842
+ contractCategory: 'client',
843
+ contractType: 'service_agreement',
844
+ signatureStatus: 'not_started',
845
+ billingModel: form.billingModel,
846
+ budgetAmount: form.budgetAmount,
847
+ monthlyHourCap: form.monthlyHourCap,
848
+ startDate: form.startDate,
849
+ endDate: form.endDate,
850
+ description: form.summary,
851
+ contentHtml: '',
852
+ }}/>
853
+ </div>
854
+ </div>
855
+ </section>
856
+
857
+ <section className="space-y-3">
858
+ <div className="space-y-0.5">
859
+ <h3 className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
860
+ {t('sections.team')}
861
+ </h3>
862
+ <p className="text-[11px] text-muted-foreground/80">
863
+ {t('sections.teamDescription', {
864
+ count: selectedAssignmentsCount,
865
+ })}
866
+ </p>
867
+ </div>
868
+ <div className="space-y-3">
869
+ <div className="relative">
870
+ <lucide_react_1.Search className="pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"/>
871
+ <input_1.Input className="pl-9" value={assignmentSearch} placeholder={t('placeholders.assignmentSearch')} onChange={(event) => setAssignmentSearch(event.target.value)}/>
872
+ </div>
873
+
874
+ <div className="space-y-2">
875
+ {filteredAssignments.map((assignment) => {
876
+ var _a, _b;
877
+ const collaborator = availableCollaborators.find((item) => item.id === assignment.collaboratorId);
878
+ const assignmentIndex = form.teamAssignments.findIndex((item) => item.collaboratorId === assignment.collaboratorId);
879
+ const roleError = assignmentIndex >= 0
880
+ ? (_b = (_a = formMethods.formState.errors.teamAssignments) === null || _a === void 0 ? void 0 : _a[assignmentIndex]) === null || _b === void 0 ? void 0 : _b.roleLabel
881
+ : undefined;
882
+ if (!collaborator) {
883
+ return null;
884
+ }
885
+ return (<div key={assignment.collaboratorId} className="grid min-w-0 gap-2 rounded-lg border px-3 py-2 xl:grid-cols-[minmax(0,1.25fr)_minmax(0,1.2fr)_110px_110px]">
886
+ <label className="flex cursor-pointer items-start gap-3 py-1">
887
+ <checkbox_1.Checkbox checked={assignment.selected} onCheckedChange={(checked) => updateAssignment(assignment.collaboratorId, {
888
+ selected: checked === true,
889
+ })}/>
890
+ <div className="min-w-0">
891
+ <div className="truncate font-medium">
892
+ {collaborator.displayName}
893
+ </div>
894
+ <div className="truncate text-xs text-muted-foreground">
895
+ {[
896
+ collaborator.department,
897
+ collaborator.title,
898
+ collaborator.code,
899
+ ]
900
+ .filter(Boolean)
901
+ .join(' • ') || commonT('labels.notAvailable')}
902
+ </div>
903
+ </div>
904
+ </label>
905
+ <div className="space-y-1">
906
+ <department_select_with_create_1.DepartmentSelectWithCreate label="" value={assignment.roleLabel} options={projectRoleOptions} disabled={!assignment.selected} selectPlaceholder={t('placeholders.roleLabel')} createDescription={t('fields.roleLabel')} createPlaceholder={t('placeholders.roleLabelCreate')} onChange={(role) => updateAssignment(assignment.collaboratorId, {
907
+ projectRoleId: role.id
908
+ ? String(role.id)
909
+ : 'none',
910
+ roleLabel: role.name,
911
+ })} onCreate={createProjectRole}/>
912
+ {(roleError === null || roleError === void 0 ? void 0 : roleError.message) ? (<p className="text-sm text-destructive">
913
+ {String(roleError.message)}
914
+ </p>) : null}
915
+ </div>
916
+ <input_1.Input className="h-9 mt-2 self-start" type="number" min="0" step="0.5" placeholder={t('fields.weeklyHours')} value={assignment.weeklyHours} disabled={!assignment.selected} onChange={(event) => {
917
+ const hours = event.target.value;
918
+ const updates = {
919
+ weeklyHours: hours,
920
+ };
921
+ const cap = collaborator.weeklyCapacityHours;
922
+ if (cap && hours && Number(hours) > 0) {
923
+ const pct = Math.round((Number(hours) / cap) * 100);
924
+ updates.allocationPercent = String(Math.min(pct, 100));
925
+ }
926
+ updateAssignment(assignment.collaboratorId, updates);
927
+ }}/>
928
+ <input_1.Input className="h-9 mt-2 self-start" type="text" inputMode="decimal" placeholder={t('fields.allocationPercent')} value={assignment.allocationPercent} disabled={!assignment.selected} onChange={(event) => {
929
+ const pct = (0, forms_1.normalizePercentInput)(event.target.value);
930
+ const updates = {
931
+ allocationPercent: pct,
932
+ };
933
+ const cap = collaborator.weeklyCapacityHours;
934
+ if (cap && pct && Number(pct) > 0) {
935
+ const hours = Math.round((Number(pct) / 100) * cap);
936
+ updates.weeklyHours = String(hours);
937
+ }
938
+ updateAssignment(assignment.collaboratorId, updates);
939
+ }}/>
940
+ <div className="flex items-center gap-2 xl:col-span-4">
941
+ <div className="flex-1">
942
+ <label className="text-xs text-muted-foreground">{t('fields.assignmentStartDate')}</label>
943
+ <input_1.Input className="h-9" type="date" value={assignment.startDate} disabled={!assignment.selected} onChange={(event) => updateAssignment(assignment.collaboratorId, {
944
+ startDate: event.target.value,
945
+ })}/>
946
+ </div>
947
+ <div className="flex-1">
948
+ <label className="text-xs text-muted-foreground">{t('fields.assignmentEndDate')}</label>
949
+ <input_1.Input className="h-9" type="date" value={assignment.endDate} disabled={!assignment.selected} onChange={(event) => updateAssignment(assignment.collaboratorId, {
950
+ endDate: event.target.value,
951
+ })}/>
952
+ </div>
953
+ </div>
954
+ </div>);
955
+ })}
956
+ </div>
957
+ </div>
958
+ </section>
959
+ </>) : (<section className="space-y-3 rounded-lg border border-dashed bg-muted/20 px-4 py-4">
960
+ <div className="space-y-0.5">
961
+ <h3 className="text-xs font-semibold uppercase tracking-wide text-muted-foreground">
962
+ {t('sections.nextSteps')}
963
+ </h3>
964
+ <p className="text-[11px] text-muted-foreground/80">
965
+ {t('sections.nextStepsDescription')}
966
+ </p>
967
+ </div>
968
+ </section>)}
969
+ </form>
970
+ </form_1.Form>);
971
+ const loadingState = projectId && isLoadingProject ? (<div className="text-sm text-muted-foreground">{t('loading')}</div>) : null;
972
+ const contractStatusState = project ? (<div className="text-xs text-muted-foreground">
973
+ {t('messages.currentContractStatus', {
974
+ status: project.contractStatus
975
+ ? project.contractStatus
976
+ : commonT('labels.notAssigned'),
977
+ })}
978
+ </div>) : null;
979
+ if (isSheetMode) {
980
+ return (<div className="mt-6 space-y-4 pb-6">
981
+ {formContent}
982
+ <div className="space-y-2 px-4">
983
+ {loadingState}
984
+ {contractStatusState}
985
+ </div>
986
+
987
+ <form_actions_1.FormActions sheet cancelLabel={commonT('actions.cancel')} onCancel={onCancel} onSubmit={() => void formMethods.handleSubmit(onSubmit, handleInvalidSubmit)()} submitIcon={<lucide_react_1.Save className="size-4"/>} submitLabel={commonT('actions.save')} submitSize="lg"/>
988
+ </div>);
989
+ }
990
+ return (<entity_list_1.Page>
991
+ <operations_header_1.OperationsHeader title={t(projectId ? 'editTitle' : 'newTitle')} description={t('description')} current={t('breadcrumb')} actions={<div className="flex gap-2">
992
+ <button_1.Button variant="outline" size="sm" asChild>
993
+ <link_1.default href={projectId
994
+ ? `/operations/projects/${projectId}`
995
+ : '/operations/projects'}>
996
+ <lucide_react_1.ArrowLeft className="size-4"/>
997
+ {commonT('actions.back')}
998
+ </link_1.default>
999
+ </button_1.Button>
1000
+ <button_1.Button size="sm" type="button" onClick={() => void formMethods.handleSubmit(onSubmit, handleInvalidSubmit)()}>
1001
+ <lucide_react_1.Save className="size-4"/>
1002
+ {commonT('actions.save')}
1003
+ </button_1.Button>
1004
+ </div>}/>
1005
+
1006
+ {formContent}
1007
+ <div className="space-y-2">
1008
+ {loadingState}
1009
+ {contractStatusState}
1010
+ </div>
1011
+ </entity_list_1.Page>);
1012
+ }
1013
+ //# sourceMappingURL=project-form-screen.js.map