cortex-react-components 3.3.0 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/dist/{chunk-Z54HOXSV.mjs → chunk-2254O4YT.mjs} +2 -2
  2. package/dist/{chunk-V6YEUAIH.mjs → chunk-3BYBIUZN.mjs} +3 -3
  3. package/dist/{chunk-XFJPL6FS.mjs → chunk-3IXZB3VP.mjs} +1 -1
  4. package/dist/{chunk-WJTVZ6CB.mjs → chunk-3NXXPFU2.mjs} +1 -1
  5. package/dist/{chunk-CONYNX7Y.mjs → chunk-4HKHDXKK.mjs} +3 -3
  6. package/dist/{chunk-DSVXGGGV.mjs → chunk-54AIO5ED.mjs} +2 -2
  7. package/dist/{chunk-7ZCW4XMR.mjs → chunk-64IBDKCH.mjs} +1 -1
  8. package/dist/{chunk-EJJITIA3.mjs → chunk-65ZDGR46.mjs} +5 -5
  9. package/dist/{chunk-I4MTJN23.mjs → chunk-6A7T3O6T.mjs} +6 -5
  10. package/dist/{chunk-HUZCVQP7.mjs → chunk-7IMTNL53.mjs} +1 -1
  11. package/dist/{chunk-IJ3E6ZXF.mjs → chunk-B2LFNC3C.mjs} +1 -1
  12. package/dist/{chunk-IDMTHUC4.mjs → chunk-B36NGEMF.mjs} +3 -3
  13. package/dist/{chunk-FABRRO2B.mjs → chunk-BAJ7NCAT.mjs} +1 -1
  14. package/dist/{chunk-4JHX6BW6.mjs → chunk-BEGQGEDH.mjs} +1 -1
  15. package/dist/{chunk-36W3BORX.mjs → chunk-BWS5MUG7.mjs} +1 -1
  16. package/dist/{chunk-5NGZXIP7.mjs → chunk-CI625DSA.mjs} +1 -1
  17. package/dist/{chunk-WX5QYPGU.mjs → chunk-CUUAA2TB.mjs} +1 -1
  18. package/dist/{chunk-ETG5N2OG.mjs → chunk-DOIUUDF6.mjs} +1 -1
  19. package/dist/{chunk-SSE3MQDP.mjs → chunk-DST7L2PX.mjs} +3 -3
  20. package/dist/{chunk-UETTBM3J.mjs → chunk-F6NJD6IG.mjs} +1 -1
  21. package/dist/{chunk-L4SNPNYU.mjs → chunk-FBCL4K4A.mjs} +1 -1
  22. package/dist/{chunk-IVOPNDSN.mjs → chunk-G5N5MCLS.mjs} +5 -5
  23. package/dist/{chunk-NQMJXY3N.mjs → chunk-GC7DB2Y5.mjs} +1 -1
  24. package/dist/{chunk-5CQITTLV.mjs → chunk-GMHZ7GGN.mjs} +1 -1
  25. package/dist/{chunk-C3CKYJ2F.mjs → chunk-GZRODHXY.mjs} +1 -1
  26. package/dist/{chunk-SM57JU3T.mjs → chunk-HCVN3YVW.mjs} +5 -5
  27. package/dist/{chunk-SSDRUPMS.mjs → chunk-HWSDSULO.mjs} +183 -36
  28. package/dist/{chunk-QPO45D6F.mjs → chunk-I2MVZVXE.mjs} +1 -1
  29. package/dist/chunk-IC4N2KYF.mjs +401 -0
  30. package/dist/{chunk-GGOGMLBY.mjs → chunk-JKVS2VFG.mjs} +4 -4
  31. package/dist/{chunk-OPJMXB4K.mjs → chunk-K4ZS4W4S.mjs} +2 -2
  32. package/dist/{chunk-Q6CUUDUR.mjs → chunk-LVLYUHSA.mjs} +1 -1
  33. package/dist/{chunk-UDCOG2XL.mjs → chunk-LY4RR7AL.mjs} +1 -1
  34. package/dist/{chunk-QMFGV3M5.mjs → chunk-LZUYY2G6.mjs} +2 -2
  35. package/dist/{chunk-XGHUG2WQ.mjs → chunk-MDG2I4PB.mjs} +1 -1
  36. package/dist/{chunk-YD7Q7IZX.mjs → chunk-MNJ5CMJM.mjs} +1 -1
  37. package/dist/{chunk-YY4VLYYH.mjs → chunk-MOMYX6OH.mjs} +26 -11
  38. package/dist/{chunk-EDYFH3EJ.mjs → chunk-NM7RODDO.mjs} +3 -3
  39. package/dist/{chunk-KOK3VCJZ.mjs → chunk-O5RKEF5N.mjs} +2 -2
  40. package/dist/chunk-PBIUFMQ7.mjs +595 -0
  41. package/dist/{chunk-GTHNG3Q7.mjs → chunk-PPESICX2.mjs} +1 -1
  42. package/dist/{chunk-F7JPOQIC.mjs → chunk-Q54XDKD6.mjs} +1 -1
  43. package/dist/{chunk-LTDXFLCW.mjs → chunk-QM3XSGNV.mjs} +13 -5
  44. package/dist/{chunk-LGGOEYDB.mjs → chunk-QU3TSSIT.mjs} +9 -9
  45. package/dist/{chunk-OCVHSV6Z.mjs → chunk-R4WRE5VN.mjs} +2 -2
  46. package/dist/{chunk-HMVIQFLN.mjs → chunk-S2JSIAMP.mjs} +1 -1
  47. package/dist/{chunk-4JSM5VYZ.mjs → chunk-SAVDOTMQ.mjs} +1 -1
  48. package/dist/{chunk-PE44IHZN.mjs → chunk-SBD4TWK2.mjs} +1 -1
  49. package/dist/{chunk-B7WVGDB6.mjs → chunk-SZJ6XME5.mjs} +1 -1
  50. package/dist/{chunk-URC56DLC.mjs → chunk-T2VDQBFT.mjs} +1 -1
  51. package/dist/{chunk-2D3EN2AX.mjs → chunk-T36HNGWV.mjs} +2 -2
  52. package/dist/{chunk-3BYULUMU.mjs → chunk-T62Q55Y5.mjs} +1 -1
  53. package/dist/{chunk-IBQBZNEA.mjs → chunk-T756T7P5.mjs} +1 -1
  54. package/dist/{chunk-HNBHBFLY.mjs → chunk-TZBPEFJY.mjs} +1 -1
  55. package/dist/{chunk-HQW5M4ND.mjs → chunk-U5XRK325.mjs} +1 -1
  56. package/dist/{chunk-4P5Q6UXF.mjs → chunk-UBFOKMYD.mjs} +5 -5
  57. package/dist/{chunk-6NRBLKM4.mjs → chunk-UM7KTWAX.mjs} +2 -2
  58. package/dist/{chunk-E5LGE3IW.mjs → chunk-W73LGNTH.mjs} +1 -1
  59. package/dist/{chunk-QETXXFRW.mjs → chunk-WNGLLRYA.mjs} +1 -1
  60. package/dist/{chunk-NVSA5BFC.mjs → chunk-XP74JZNW.mjs} +3 -3
  61. package/dist/{chunk-OXP3LJ53.mjs → chunk-XT7I7SJB.mjs} +4 -4
  62. package/dist/{chunk-JFXWP3RQ.mjs → chunk-Y7B7YO6Q.mjs} +1 -1
  63. package/dist/{chunk-XZFMQXYJ.mjs → chunk-ZD5DKC5T.mjs} +1 -1
  64. package/dist/{chunk-EC5I4CIO.mjs → chunk-ZJ5SRNYD.mjs} +1 -1
  65. package/dist/{chunk-LM4J7254.mjs → chunk-ZSGXRIK7.mjs} +7 -7
  66. package/dist/{chunk-MZVEK6A5.mjs → chunk-ZZQWZWMG.mjs} +19 -19
  67. package/dist/components/AdvancedComponents/AppSidebar.d.ts +1 -1
  68. package/dist/components/AdvancedComponents/AppSidebar.js +481 -302
  69. package/dist/components/AdvancedComponents/AppSidebar.mjs +4 -4
  70. package/dist/components/AdvancedComponents/index.js +481 -302
  71. package/dist/components/AdvancedComponents/index.mjs +4 -4
  72. package/dist/components/Blocks/Banner.mjs +6 -6
  73. package/dist/components/Blocks/CallToAction.mjs +6 -6
  74. package/dist/components/Blocks/CollapsibleArea.mjs +7 -7
  75. package/dist/components/Blocks/Content.mjs +7 -7
  76. package/dist/components/Blocks/FeaturesBlock.mjs +6 -6
  77. package/dist/components/Blocks/RelatedPosts.mjs +7 -7
  78. package/dist/components/Blocks/RenderBlocks.mjs +9 -9
  79. package/dist/components/Blocks/ReusableContentBlock.mjs +9 -9
  80. package/dist/components/Blocks/index.mjs +15 -15
  81. package/dist/components/CRM/CogeBoard.js +1 -1
  82. package/dist/components/CRM/CogeBoard.mjs +3 -3
  83. package/dist/components/CRM/DealDetails.js +1 -1
  84. package/dist/components/CRM/DealDetails.mjs +2 -2
  85. package/dist/components/CRM/KanbanBoard.js +1 -1
  86. package/dist/components/CRM/KanbanBoard.mjs +3 -3
  87. package/dist/components/CRM/NewDealForm.js +1 -1
  88. package/dist/components/CRM/NewDealForm.mjs +2 -2
  89. package/dist/components/CRM/index.js +1 -1
  90. package/dist/components/CRM/index.mjs +8 -8
  91. package/dist/components/Cards/ContentCard.mjs +6 -6
  92. package/dist/components/Cards/FeatureCard.mjs +6 -6
  93. package/dist/components/Cards/Image.js +1 -1
  94. package/dist/components/Cards/Image.mjs +2 -2
  95. package/dist/components/Cards/ImageProxy.js +1 -1
  96. package/dist/components/Cards/ImageProxy.mjs +2 -2
  97. package/dist/components/Cards/index.js +1 -1
  98. package/dist/components/Cards/index.mjs +12 -12
  99. package/dist/components/Chat/ChatInterface.mjs +11 -11
  100. package/dist/components/Chat/CopilotInterface.d.ts +1 -1
  101. package/dist/components/Chat/CopilotInterface.js +528 -331
  102. package/dist/components/Chat/CopilotInterface.mjs +17 -17
  103. package/dist/components/Chat/PartTypes/MessageHandler.mjs +9 -9
  104. package/dist/components/Chat/PartTypes/index.mjs +11 -11
  105. package/dist/components/Chat/chat-session-sidebar.d.ts +1 -1
  106. package/dist/components/Chat/demo-long-messages.js +528 -331
  107. package/dist/components/Chat/demo-long-messages.mjs +17 -17
  108. package/dist/components/Chat/demo-tests.js +528 -331
  109. package/dist/components/Chat/demo-tests.mjs +17 -17
  110. package/dist/components/Chat/demo.js +528 -331
  111. package/dist/components/Chat/demo.mjs +17 -17
  112. package/dist/components/Chat/example-usage.js +528 -331
  113. package/dist/components/Chat/example-usage.mjs +18 -18
  114. package/dist/components/Chat/example-with-vercel-ai.js +528 -331
  115. package/dist/components/Chat/example-with-vercel-ai.mjs +17 -17
  116. package/dist/components/Chat/index.js +528 -331
  117. package/dist/components/Chat/index.mjs +25 -25
  118. package/dist/components/DigitalColleagues/Views/TeamsIndexView.d.ts +1 -9
  119. package/dist/components/DigitalColleagues/Views/TeamsIndexView.js +23 -28
  120. package/dist/components/DigitalColleagues/Views/TeamsIndexView.mjs +5 -7
  121. package/dist/components/DigitalColleagues/index.d.ts +0 -18
  122. package/dist/components/DigitalColleagues/index.js +0 -16754
  123. package/dist/components/DigitalColleagues/test-data.d.ts +1 -112
  124. package/dist/components/DigitalColleagues/test-data.js +482 -308
  125. package/dist/components/DigitalColleagues/test-data.mjs +1 -5
  126. package/dist/components/Foundry/Knowledge/add-knowledge-modal.js +1 -1
  127. package/dist/components/Foundry/Knowledge/add-knowledge-modal.mjs +3 -3
  128. package/dist/components/Foundry/Knowledge/add-team-context.js +1 -1
  129. package/dist/components/Foundry/Knowledge/add-team-context.mjs +2 -2
  130. package/dist/components/Foundry/Knowledge/manage-team-context.js +1 -1
  131. package/dist/components/Foundry/Knowledge/manage-team-context.mjs +2 -2
  132. package/dist/components/Foundry/MainPage.mjs +3 -3
  133. package/dist/components/Foundry/ManagementSidebar.d.ts +2 -2
  134. package/dist/components/Foundry/ManagementSidebar.js +12 -4
  135. package/dist/components/Foundry/ManagementSidebar.mjs +1 -1
  136. package/dist/components/Foundry/Pages/dashboardpage.js +1424 -2040
  137. package/dist/components/Foundry/Pages/dashboardpage.mjs +25 -26
  138. package/dist/components/Foundry/RichText/index.js +1 -1
  139. package/dist/components/Foundry/RichText/index.mjs +5 -5
  140. package/dist/components/Foundry/RichText/plugins/image-plugin.js +1 -1
  141. package/dist/components/Foundry/RichText/plugins/image-plugin.mjs +2 -2
  142. package/dist/components/Foundry/RichText/plugins/toolbar-plugin.js +1 -1
  143. package/dist/components/Foundry/RichText/plugins/toolbar-plugin.mjs +4 -4
  144. package/dist/components/Foundry/Views/ColleaguesView.js +5 -4
  145. package/dist/components/Foundry/Views/ColleaguesView.mjs +3 -3
  146. package/dist/components/Foundry/Views/KnowledgeView.js +1 -1
  147. package/dist/components/Foundry/Views/KnowledgeView.mjs +12 -12
  148. package/dist/components/Foundry/Views/TeamsIndexView.js +6 -5
  149. package/dist/components/Foundry/Views/TeamsIndexView.mjs +5 -5
  150. package/dist/components/Foundry/Views/index.js +1352 -787
  151. package/dist/components/Foundry/Views/index.mjs +50 -49
  152. package/dist/components/{.archive → Foundry}/app-card.d.ts +1 -1
  153. package/dist/components/{DigitalColleagues/colleague-type-selection.js → Foundry/app-card.js} +89 -117
  154. package/dist/components/{DigitalColleagues/colleague-card.mjs → Foundry/app-card.mjs} +4 -5
  155. package/dist/components/Foundry/document-edit.js +1 -1
  156. package/dist/components/Foundry/document-edit.mjs +6 -6
  157. package/dist/components/Foundry/document-preview-examples.js +1 -1
  158. package/dist/components/Foundry/document-preview-examples.mjs +7 -7
  159. package/dist/components/Foundry/document-preview.js +1 -1
  160. package/dist/components/Foundry/document-preview.mjs +7 -7
  161. package/dist/components/Foundry/file-edit.js +1 -1
  162. package/dist/components/Foundry/file-edit.mjs +7 -7
  163. package/dist/components/Foundry/foundary-layout.js +481 -302
  164. package/dist/components/Foundry/foundary-layout.mjs +5 -5
  165. package/dist/components/Foundry/index.js +2748 -2868
  166. package/dist/components/Foundry/index.mjs +78 -79
  167. package/dist/components/Foundry/knowledge-browser.js +1 -1
  168. package/dist/components/Foundry/knowledge-browser.mjs +8 -8
  169. package/dist/components/Foundry/types.d.ts +26 -0
  170. package/dist/components/HeaderFooter/SectionHeading.mjs +7 -7
  171. package/dist/components/HeaderFooter/index.mjs +5 -5
  172. package/dist/components/Heros/DashboardHero/DashboardHero.js +5 -4
  173. package/dist/components/Heros/DashboardHero/DashboardHero.mjs +2 -2
  174. package/dist/components/Heros/DashboardHero/index.js +5 -4
  175. package/dist/components/Heros/DashboardHero/index.mjs +2 -2
  176. package/dist/components/Heros/HighImpact/index.mjs +7 -7
  177. package/dist/components/Heros/LowImpact/index.mjs +7 -7
  178. package/dist/components/Heros/MediumImpact/index.mjs +7 -7
  179. package/dist/components/Heros/PostHero/index.mjs +2 -2
  180. package/dist/components/Heros/RenderHero.mjs +10 -10
  181. package/dist/components/Heros/index.js +5 -4
  182. package/dist/components/Heros/index.mjs +15 -15
  183. package/dist/components/Layouts/OutputHeaderFooter.mjs +7 -7
  184. package/dist/components/Layouts/Print.mjs +11 -11
  185. package/dist/components/Layouts/SlideShow.mjs +13 -13
  186. package/dist/components/Layouts/index.mjs +17 -17
  187. package/dist/components/Payload/RichText/index.mjs +6 -6
  188. package/dist/components/Payload/RichText/serialize.mjs +6 -6
  189. package/dist/components/Payload/index.mjs +6 -6
  190. package/dist/components/Projects/AddEpicModal.js +1 -1
  191. package/dist/components/Projects/AddEpicModal.mjs +2 -2
  192. package/dist/components/Projects/AddFileModal.js +1 -1
  193. package/dist/components/Projects/AddFileModal.mjs +2 -2
  194. package/dist/components/Projects/AddSprintModal.js +1 -1
  195. package/dist/components/Projects/AddSprintModal.mjs +2 -2
  196. package/dist/components/Projects/AddTaskModal.js +1 -1
  197. package/dist/components/Projects/AddTaskModal.mjs +2 -2
  198. package/dist/components/Projects/EpicFilter.d.ts +6 -2
  199. package/dist/components/Projects/EpicFilter.js +6 -6
  200. package/dist/components/Projects/EpicFilter.mjs +6 -6
  201. package/dist/components/Projects/EpicsView.d.ts +12 -2
  202. package/dist/components/Projects/EpicsView.js +3980 -736
  203. package/dist/components/Projects/EpicsView.mjs +48 -6
  204. package/dist/components/Projects/FileView.js +6 -5
  205. package/dist/components/Projects/FileView.mjs +12 -12
  206. package/dist/components/Projects/GanttView.d.ts +13 -0
  207. package/dist/components/{DigitalColleagues/colleague-card.js → Projects/GanttView.js} +559 -260
  208. package/dist/components/{DigitalColleagues/digital-colleague-clone.mjs → Projects/GanttView.mjs} +7 -6
  209. package/dist/components/Projects/KanbanBoardView.js +6 -5
  210. package/dist/components/Projects/KanbanBoardView.mjs +17 -17
  211. package/dist/components/Projects/KanbanColumn.d.ts +1 -1
  212. package/dist/components/Projects/PlanningView.js +6 -5
  213. package/dist/components/Projects/PlanningView.mjs +5 -5
  214. package/dist/components/Projects/ProjectPage.d.ts +2 -2
  215. package/dist/components/Projects/ProjectPage.js +1727 -966
  216. package/dist/components/Projects/ProjectPage.mjs +30 -29
  217. package/dist/components/Projects/ProjectView.d.ts +1 -1
  218. package/dist/components/Projects/ProjectView.js +1209 -644
  219. package/dist/components/Projects/ProjectView.mjs +25 -24
  220. package/dist/components/Projects/ProjectsIndexView.js +6 -5
  221. package/dist/components/Projects/ProjectsIndexView.mjs +4 -4
  222. package/dist/components/Projects/SprintBoardView.d.ts +3 -0
  223. package/dist/components/Projects/SprintBoardView.js +252 -110
  224. package/dist/components/Projects/SprintBoardView.mjs +18 -18
  225. package/dist/components/Projects/TaskDetailsModal.js +1 -1
  226. package/dist/components/Projects/TaskDetailsModal.mjs +11 -11
  227. package/dist/components/Projects/TasksView.js +6 -5
  228. package/dist/components/Projects/TasksView.mjs +4 -4
  229. package/dist/components/Projects/business-unit-switcher.d.ts +1 -1
  230. package/dist/components/Projects/business-units.d.ts +1 -1
  231. package/dist/components/Projects/file-list.js +1 -1
  232. package/dist/components/Projects/file-list.mjs +8 -8
  233. package/dist/components/Projects/index.js +538 -231
  234. package/dist/components/Projects/index.mjs +23 -23
  235. package/dist/components/Projects/project-card.d.ts +1 -1
  236. package/dist/components/Projects/project-form.d.ts +1 -1
  237. package/dist/components/Projects/team-card.d.ts +1 -1
  238. package/dist/components/Projects/team-switcher-bar.d.ts +1 -1
  239. package/dist/components/Projects/test-data.d.ts +448 -29
  240. package/dist/components/dc-temp/dashboard-integration-example.js +498 -326
  241. package/dist/components/dc-temp/dashboard-integration-example.mjs +7 -7
  242. package/dist/components/dc-temp/index.d.ts +3 -3
  243. package/dist/components/dc-temp/index.js +3746 -2980
  244. package/dist/components/dc-temp/index.mjs +24 -22
  245. package/dist/components/dc-temp/mock-data.d.ts +1 -1
  246. package/dist/components/index.js +4129 -4210
  247. package/dist/components/index.mjs +174 -176
  248. package/dist/components/ui/command.js +1 -1
  249. package/dist/components/ui/command.mjs +2 -2
  250. package/dist/components/ui/dialog.js +1 -1
  251. package/dist/components/ui/dialog.mjs +1 -1
  252. package/dist/components/ui/index.js +1 -1
  253. package/dist/components/ui/index.mjs +2 -2
  254. package/dist/decorators/Intranet.css +54 -14
  255. package/dist/decorators/Intranet.mjs +103 -105
  256. package/dist/globals.css +54 -14
  257. package/dist/hooks/use-local-storage.d.ts +2 -1
  258. package/dist/hooks/use-local-storage.js +5 -4
  259. package/dist/hooks/use-local-storage.mjs +1 -1
  260. package/dist/index.js +4125 -4206
  261. package/dist/index.mjs +185 -187
  262. package/dist/metafile-cjs.json +1 -1
  263. package/dist/metafile-esm.json +1 -1
  264. package/dist/pages/Blog.mjs +11 -11
  265. package/dist/pages/Documentation.mjs +3 -3
  266. package/dist/pages/IndexPage.mjs +14 -14
  267. package/dist/pages/Intranet.mjs +1 -1
  268. package/dist/pages/LandingPage.mjs +113 -115
  269. package/dist/pages/Page.mjs +15 -15
  270. package/dist/pages/Publish.mjs +104 -106
  271. package/dist/pages/Website.mjs +18 -18
  272. package/dist/sections/AboutSection.mjs +8 -8
  273. package/dist/sections/BlogDetail.mjs +7 -7
  274. package/dist/sections/BlogList.mjs +8 -8
  275. package/dist/sections/ContactSection.mjs +8 -8
  276. package/dist/sections/PageSections.mjs +113 -115
  277. package/dist/sections/PricingSection.mjs +8 -8
  278. package/dist/sections/ServiceDetail.mjs +7 -7
  279. package/dist/sections/ServiceDetailSection.mjs +7 -7
  280. package/dist/sections/ServiceSection.mjs +104 -106
  281. package/dist/sections/index.mjs +113 -115
  282. package/package.json +5 -2
  283. package/dist/chunk-5MMSWFVA.mjs +0 -364
  284. package/dist/chunk-7TDXZ32Q.mjs +0 -197
  285. package/dist/chunk-APXXTGT4.mjs +0 -424
  286. package/dist/chunk-BZENEU5C.mjs +0 -160
  287. package/dist/chunk-C444TUVA.mjs +0 -306
  288. package/dist/chunk-CNQTT5P3.mjs +0 -276
  289. package/dist/chunk-CQKCEXF2.mjs +0 -82
  290. package/dist/chunk-EKQB7NJA.mjs +0 -194
  291. package/dist/chunk-G4WW3ZTX.mjs +0 -1063
  292. package/dist/chunk-IWG2URAU.mjs +0 -74
  293. package/dist/chunk-IWSATDRG.mjs +0 -118
  294. package/dist/chunk-JRNDRMIC.mjs +0 -73
  295. package/dist/chunk-K2C4VMGF.mjs +0 -121
  296. package/dist/chunk-LQQ6C7FN.mjs +0 -365
  297. package/dist/chunk-M6ELOAGS.mjs +0 -136
  298. package/dist/chunk-NAUBZM7P.mjs +0 -183
  299. package/dist/chunk-NHDPHK6D.mjs +0 -72
  300. package/dist/chunk-R5MJWISX.mjs +0 -194
  301. package/dist/chunk-RKYMAFRJ.mjs +0 -92
  302. package/dist/chunk-SZBUXY6L.mjs +0 -121
  303. package/dist/chunk-VY6L37RQ.mjs +0 -103
  304. package/dist/chunk-X6UI73UN.mjs +0 -262
  305. package/dist/components/DigitalColleagues/AppSidebarLeft.d.ts +0 -47
  306. package/dist/components/DigitalColleagues/AppSidebarLeft.js +0 -3407
  307. package/dist/components/DigitalColleagues/AppSidebarLeft.mjs +0 -23
  308. package/dist/components/DigitalColleagues/DashboardHeader.d.ts +0 -8
  309. package/dist/components/DigitalColleagues/DashboardHeader.js +0 -2756
  310. package/dist/components/DigitalColleagues/DashboardHeader.mjs +0 -15
  311. package/dist/components/DigitalColleagues/DigitalColleageusLayout.css +0 -917
  312. package/dist/components/DigitalColleagues/DigitalColleageusLayout.d.ts +0 -28
  313. package/dist/components/DigitalColleagues/DigitalColleageusLayout.js +0 -4417
  314. package/dist/components/DigitalColleagues/DigitalColleageusLayout.mjs +0 -31
  315. package/dist/components/DigitalColleagues/MainPage.css +0 -917
  316. package/dist/components/DigitalColleagues/MainPage.d.ts +0 -3
  317. package/dist/components/DigitalColleagues/MainPage.js +0 -4080
  318. package/dist/components/DigitalColleagues/MainPage.mjs +0 -46
  319. package/dist/components/DigitalColleagues/ManagementSidebar.d.ts +0 -8
  320. package/dist/components/DigitalColleagues/ManagementSidebar.js +0 -99
  321. package/dist/components/DigitalColleagues/ManagementSidebar.mjs +0 -9
  322. package/dist/components/DigitalColleagues/Pages/dashboardpage.css +0 -917
  323. package/dist/components/DigitalColleagues/Pages/dashboardpage.d.ts +0 -18
  324. package/dist/components/DigitalColleagues/Pages/dashboardpage.js +0 -8514
  325. package/dist/components/DigitalColleagues/Pages/dashboardpage.mjs +0 -78
  326. package/dist/components/DigitalColleagues/README-document-edit.js +0 -2
  327. package/dist/components/DigitalColleagues/README-document-edit.mjs +0 -7
  328. package/dist/components/DigitalColleagues/README-document-preview.js +0 -2
  329. package/dist/components/DigitalColleagues/README-document-preview.mjs +0 -7
  330. package/dist/components/DigitalColleagues/SearchableSelect.css +0 -917
  331. package/dist/components/DigitalColleagues/SearchableSelect.d.ts +0 -16
  332. package/dist/components/DigitalColleagues/SearchableSelect.js +0 -2745
  333. package/dist/components/DigitalColleagues/SearchableSelect.mjs +0 -16
  334. package/dist/components/DigitalColleagues/Views/ColleaguesView.css +0 -917
  335. package/dist/components/DigitalColleagues/Views/ColleaguesView.d.ts +0 -14
  336. package/dist/components/DigitalColleagues/Views/ColleaguesView.js +0 -3795
  337. package/dist/components/DigitalColleagues/Views/ColleaguesView.mjs +0 -28
  338. package/dist/components/DigitalColleagues/Views/KnowledgeView.css +0 -917
  339. package/dist/components/DigitalColleagues/Views/KnowledgeView.d.ts +0 -11
  340. package/dist/components/DigitalColleagues/Views/KnowledgeView.docs.js +0 -2
  341. package/dist/components/DigitalColleagues/Views/KnowledgeView.docs.mjs +0 -7
  342. package/dist/components/DigitalColleagues/Views/KnowledgeView.js +0 -3935
  343. package/dist/components/DigitalColleagues/Views/KnowledgeView.mjs +0 -26
  344. package/dist/components/DigitalColleagues/Views/index.css +0 -917
  345. package/dist/components/DigitalColleagues/Views/index.d.ts +0 -7
  346. package/dist/components/DigitalColleagues/Views/index.js +0 -12284
  347. package/dist/components/DigitalColleagues/Views/index.mjs +0 -114
  348. package/dist/components/DigitalColleagues/colleague-card.css +0 -917
  349. package/dist/components/DigitalColleagues/colleague-card.d.ts +0 -12
  350. package/dist/components/DigitalColleagues/colleague-form.css +0 -917
  351. package/dist/components/DigitalColleagues/colleague-form.d.ts +0 -14
  352. package/dist/components/DigitalColleagues/colleague-form.js +0 -3086
  353. package/dist/components/DigitalColleagues/colleague-form.mjs +0 -22
  354. package/dist/components/DigitalColleagues/colleague-type-selection.css +0 -917
  355. package/dist/components/DigitalColleagues/colleague-type-selection.d.ts +0 -7
  356. package/dist/components/DigitalColleagues/colleague-type-selection.mjs +0 -16
  357. package/dist/components/DigitalColleagues/digital-colleague-clone.css +0 -917
  358. package/dist/components/DigitalColleagues/digital-colleague-clone.d.ts +0 -9
  359. package/dist/components/DigitalColleagues/digital-colleague-clone.js +0 -2828
  360. package/dist/components/DigitalColleagues/digital-colleague-options.css +0 -917
  361. package/dist/components/DigitalColleagues/digital-colleague-options.d.ts +0 -7
  362. package/dist/components/DigitalColleagues/digital-colleague-options.js +0 -2697
  363. package/dist/components/DigitalColleagues/digital-colleague-options.mjs +0 -16
  364. package/dist/components/DigitalColleagues/document-edit.css +0 -917
  365. package/dist/components/DigitalColleagues/document-edit.d.ts +0 -10
  366. package/dist/components/DigitalColleagues/document-edit.js +0 -3112
  367. package/dist/components/DigitalColleagues/document-edit.mjs +0 -20
  368. package/dist/components/DigitalColleagues/document-preview-examples.css +0 -917
  369. package/dist/components/DigitalColleagues/document-preview-examples.d.ts +0 -12
  370. package/dist/components/DigitalColleagues/document-preview-examples.js +0 -3433
  371. package/dist/components/DigitalColleagues/document-preview-examples.mjs +0 -151
  372. package/dist/components/DigitalColleagues/document-preview.css +0 -917
  373. package/dist/components/DigitalColleagues/document-preview.d.ts +0 -18
  374. package/dist/components/DigitalColleagues/document-preview.js +0 -3296
  375. package/dist/components/DigitalColleagues/document-preview.mjs +0 -21
  376. package/dist/components/DigitalColleagues/index.css +0 -917
  377. package/dist/components/DigitalColleagues/index.mjs +0 -200
  378. package/dist/components/DigitalColleagues/knowledge-browser.css +0 -917
  379. package/dist/components/DigitalColleagues/knowledge-browser.d.ts +0 -13
  380. package/dist/components/DigitalColleagues/knowledge-browser.js +0 -3581
  381. package/dist/components/DigitalColleagues/knowledge-browser.mjs +0 -23
  382. package/dist/components/DigitalColleagues/knowledge-search.css +0 -917
  383. package/dist/components/DigitalColleagues/knowledge-search.d.ts +0 -12
  384. package/dist/components/DigitalColleagues/knowledge-search.js +0 -2819
  385. package/dist/components/DigitalColleagues/knowledge-search.mjs +0 -20
  386. package/dist/components/DigitalColleagues/team-form.css +0 -917
  387. package/dist/components/DigitalColleagues/team-form.d.ts +0 -24
  388. package/dist/components/DigitalColleagues/team-form.js +0 -2836
  389. package/dist/components/DigitalColleagues/team-form.mjs +0 -20
  390. package/dist/components/DigitalColleagues/types.d.ts +0 -289
  391. package/dist/components/DigitalColleagues/types.js +0 -18
  392. package/dist/{chunk-RFQKQLNT.mjs → chunk-JJDC25TG.mjs} +3 -3
  393. package/dist/{chunk-GZGWWPCP.mjs → chunk-L666B5DN.mjs} +12 -12
  394. /package/dist/components/{DigitalColleagues/AppSidebarLeft.css → Foundry/app-card.css} +0 -0
  395. /package/dist/components/{DigitalColleagues/DashboardHeader.css → Projects/GanttView.css} +0 -0
@@ -4497,15 +4497,16 @@ function useLocalStorage(key, initialValue) {
4497
4497
  return initialValue;
4498
4498
  }
4499
4499
  });
4500
- const setValue = (value) => {
4500
+ const setValue = (0, import_react14.useCallback)((value) => {
4501
4501
  try {
4502
- setStoredValue(value);
4502
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
4503
+ setStoredValue(valueToStore);
4503
4504
  if (typeof window !== "undefined") {
4504
- window.localStorage.setItem(key, JSON.stringify(value));
4505
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
4505
4506
  }
4506
4507
  } catch (error) {
4507
4508
  }
4508
- };
4509
+ }, [key, storedValue]);
4509
4510
  (0, import_react14.useEffect)(() => {
4510
4511
  setValue(storedValue);
4511
4512
  }, []);
@@ -5094,7 +5095,7 @@ var DialogContent = React10.forwardRef(({ className, children, ...props }, ref)
5094
5095
  {
5095
5096
  ref,
5096
5097
  className: cn(
5097
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
5098
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg max-h-[90vh] overflow-y-auto translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
5098
5099
  className
5099
5100
  ),
5100
5101
  ...props,
@@ -5984,8 +5985,8 @@ function ToolbarPlugin() {
5984
5985
  blockNode = curr;
5985
5986
  }
5986
5987
  if (blockNode) {
5987
- const format2 = blockNode.getFormatType();
5988
- setAlignment(format2 || "left");
5988
+ const format3 = blockNode.getFormatType();
5989
+ setAlignment(format3 || "left");
5989
5990
  }
5990
5991
  const tag = anchorNode.getTopLevelElement()?.__tag;
5991
5992
  setBlockType(tag || "p");
@@ -7077,7 +7078,7 @@ var markdownToLexical = (markdown) => {
7077
7078
  var convertFileTypeToKnowledgeDocument = async (file) => {
7078
7079
  let content = "";
7079
7080
  let richTextContent = void 0;
7080
- let format2 = "text";
7081
+ let format3 = "text";
7081
7082
  if (file.url) {
7082
7083
  try {
7083
7084
  let url = file.url;
@@ -7098,18 +7099,18 @@ var convertFileTypeToKnowledgeDocument = async (file) => {
7098
7099
  console.warn("No URL provided for file:", file.name);
7099
7100
  }
7100
7101
  if (file.mimeType === "text/markdown") {
7101
- format2 = "richText";
7102
+ format3 = "richText";
7102
7103
  richTextContent = markdownToLexical(content);
7103
7104
  } else if (file.mimeType?.startsWith("text/")) {
7104
- format2 = "text";
7105
+ format3 = "text";
7105
7106
  }
7106
7107
  return {
7107
7108
  id: file.id.toString(),
7108
7109
  title: file.name,
7109
7110
  description: void 0,
7110
- content: format2 === "richText" ? void 0 : content,
7111
- richTextContent: format2 === "richText" ? richTextContent : void 0,
7112
- format: format2,
7111
+ content: format3 === "richText" ? void 0 : content,
7112
+ richTextContent: format3 === "richText" ? richTextContent : void 0,
7113
+ format: format3,
7113
7114
  metadata: {},
7114
7115
  createdAt: typeof file.createdAt === "string" ? new Date(file.createdAt) : file.createdAt,
7115
7116
  updatedAt: /* @__PURE__ */ new Date()
@@ -7159,8 +7160,8 @@ function FileEdit({ document: document2, onCancel, onSave, onFileUpdate }) {
7159
7160
  setRichTextContent(document2.richTextContent);
7160
7161
  }
7161
7162
  }, [document2]);
7162
- const formatIcon = (format2) => {
7163
- switch (format2) {
7163
+ const formatIcon = (format3) => {
7164
+ switch (format3) {
7164
7165
  case "markdown":
7165
7166
  case "mdx":
7166
7167
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react19.FileText, { className: "h-6 w-6 text-primary" });
@@ -7172,8 +7173,8 @@ function FileEdit({ document: document2, onCancel, onSave, onFileUpdate }) {
7172
7173
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react19.File, { className: "h-6 w-6 text-muted-foreground" });
7173
7174
  }
7174
7175
  };
7175
- const formatBadgeColor = (format2) => {
7176
- switch (format2) {
7176
+ const formatBadgeColor = (format3) => {
7177
+ switch (format3) {
7177
7178
  case "markdown":
7178
7179
  return "bg-primary/10 text-primary border-primary/20";
7179
7180
  case "mdx":
@@ -7901,8 +7902,8 @@ function DocumentEdit({
7901
7902
  (0, import_react32.useEffect)(() => {
7902
7903
  setEditedDocument(document2);
7903
7904
  }, [document2]);
7904
- const formatIcon = (format2) => {
7905
- switch (format2) {
7905
+ const formatIcon = (format3) => {
7906
+ switch (format3) {
7906
7907
  case "markdown":
7907
7908
  case "mdx":
7908
7909
  return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react23.FileText, { className: "h-6 w-6 text-primary" });
@@ -7914,8 +7915,8 @@ function DocumentEdit({
7914
7915
  return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react23.File, { className: "h-6 w-6 text-muted-foreground" });
7915
7916
  }
7916
7917
  };
7917
- const formatBadgeColor = (format2) => {
7918
- switch (format2) {
7918
+ const formatBadgeColor = (format3) => {
7919
+ switch (format3) {
7919
7920
  case "markdown":
7920
7921
  return "bg-primary/10 text-primary border-primary/20";
7921
7922
  case "mdx":
@@ -8239,8 +8240,8 @@ function DocumentPreview({
8239
8240
  (0, import_react34.useEffect)(() => {
8240
8241
  setDocument(initialDocument);
8241
8242
  }, [initialDocument]);
8242
- const formatIcon = (format2) => {
8243
- switch (format2) {
8243
+ const formatIcon = (format3) => {
8244
+ switch (format3) {
8244
8245
  case "markdown":
8245
8246
  case "mdx":
8246
8247
  return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react24.FileText, { className: "h-6 w-6 text-primary" });
@@ -8252,8 +8253,8 @@ function DocumentPreview({
8252
8253
  return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react24.File, { className: "h-6 w-6 text-muted-foreground" });
8253
8254
  }
8254
8255
  };
8255
- const formatBadgeColor = (format2) => {
8256
- switch (format2) {
8256
+ const formatBadgeColor = (format3) => {
8257
+ switch (format3) {
8257
8258
  case "markdown":
8258
8259
  return "bg-primary/10 text-primary border-primary/20";
8259
8260
  case "mdx":
@@ -8266,15 +8267,15 @@ function DocumentPreview({
8266
8267
  return "bg-muted text-muted-foreground border-border";
8267
8268
  }
8268
8269
  };
8269
- const renderContent = (content, format2) => {
8270
+ const renderContent = (content, format3) => {
8270
8271
  const defaultRenderers = {
8271
8272
  markdown: defaultMarkdownRenderer,
8272
8273
  mdx: defaultMDXRenderer,
8273
8274
  // richText: defaultRichTextRenderer,
8274
8275
  text: defaultTextRenderer
8275
8276
  };
8276
- const renderer = renderers?.[format2] || defaultRenderers[format2];
8277
- if (format2 === "richText" && typeof content === "object") {
8277
+ const renderer = renderers?.[format3] || defaultRenderers[format3];
8278
+ if (format3 === "richText" && typeof content === "object") {
8278
8279
  return defaultRichTextRenderer(content);
8279
8280
  }
8280
8281
  if (renderer) {
@@ -8441,8 +8442,8 @@ function MenuItem({
8441
8442
  const [isExpanded, setIsExpanded] = (0, import_react36.useState)(level === 0);
8442
8443
  const hasChildren = children && Object.keys(children).length > 0;
8443
8444
  const totalDocuments = documents.length + (children ? Object.values(children).reduce((acc, child) => acc + child.documents.length, 0) : 0);
8444
- const formatDocumentIcon = (format2) => {
8445
- switch (format2) {
8445
+ const formatDocumentIcon = (format3) => {
8446
+ switch (format3) {
8446
8447
  case "markdown":
8447
8448
  case "mdx":
8448
8449
  return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react25.FileText, { className: "h-3.5 w-3.5 text-muted-foreground" });
@@ -9335,9 +9336,9 @@ function KnowledgeView({
9335
9336
  }
9336
9337
 
9337
9338
  // src/components/Projects/ProjectView.tsx
9338
- var import_react52 = require("react");
9339
+ var import_react53 = require("react");
9339
9340
 
9340
- // src/components/DigitalColleagues/ManagementSidebar.tsx
9341
+ // src/components/Foundry/ManagementSidebar.tsx
9341
9342
  var import_lucide_react29 = require("lucide-react");
9342
9343
  var import_jsx_runtime54 = require("react/jsx-runtime");
9343
9344
  var viewConfig = [
@@ -9376,6 +9377,14 @@ var viewConfig = [
9376
9377
  label: "Tasks",
9377
9378
  color: "bg-brand-cyan",
9378
9379
  title: "Tasks"
9380
+ },
9381
+ {
9382
+ key: "gantt",
9383
+ icon: import_lucide_react29.BarChart2,
9384
+ label: "Gantt",
9385
+ color: "bg-brand-blue",
9386
+ title: "Gantt Chart",
9387
+ hiddenOnMobile: true
9379
9388
  }
9380
9389
  ];
9381
9390
  var ManagementSidebar = ({
@@ -9383,15 +9392,15 @@ var ManagementSidebar = ({
9383
9392
  onViewChange,
9384
9393
  children
9385
9394
  }) => {
9386
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex w-full h-screen", children: [
9387
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "w-12 h-full bg-sidebar-background flex flex-col flex-shrink-0", children: viewConfig.map((view) => {
9395
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex w-full h-full", children: [
9396
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "w-12 h-full bg-sidebar-background flex flex-col flex-shrink-0 z-50 relative overflow-visible", children: viewConfig.map((view) => {
9388
9397
  const Icon2 = view.icon;
9389
9398
  const isActive = currentView === view.key;
9390
9399
  return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9391
9400
  "button",
9392
9401
  {
9393
9402
  onClick: () => onViewChange(view.key),
9394
- className: `flex-1 w-12 flex items-center justify-center text-sidebar-foreground transition-all duration-200 relative overflow-hidden group/btn ${isActive ? view.color : `${view.color}/75 hover:${view.color}`} ${view.hiddenOnMobile ? "hidden md:flex" : ""} hover:w-28 hover:justify-start hover:pl-3`,
9403
+ className: `flex-1 w-12 flex items-center justify-center text-sidebar-foreground transition-all duration-200 relative group/btn z-50 hover:w-28 hover:justify-start hover:pl-3 ${isActive ? view.color : `${view.color} brightness-75 hover:brightness-100`} ${view.hiddenOnMobile ? "hidden md:flex" : ""}`,
9395
9404
  title: view.title,
9396
9405
  children: [
9397
9406
  /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon2, { className: "h-4 w-4 flex-shrink-0" }),
@@ -9401,7 +9410,7 @@ var ManagementSidebar = ({
9401
9410
  view.key
9402
9411
  );
9403
9412
  }) }),
9404
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex-1 min-w-0 px-4 md:px-6 h-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "w-full h-full", children }) })
9413
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex-1 min-w-0 px-4 md:px-6 h-full overflow-auto z-0 relative", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "w-full h-full", children }) })
9405
9414
  ] });
9406
9415
  };
9407
9416
 
@@ -11121,17 +11130,25 @@ var import_react48 = require("react");
11121
11130
  var import_lucide_react35 = require("lucide-react");
11122
11131
  var import_jsx_runtime65 = require("react/jsx-runtime");
11123
11132
  var EpicsView = ({
11133
+ projectId,
11124
11134
  tasks,
11125
11135
  epics,
11126
11136
  sprints,
11137
+ colleagues = [],
11127
11138
  onUpdateTask,
11128
11139
  onTaskClick,
11129
11140
  onAddTaskToEpic,
11130
11141
  onAddEpic,
11131
11142
  onUpdateEpic,
11132
- onDeleteEpic
11143
+ onDeleteEpic,
11144
+ onDeleteTask,
11145
+ onAddComment,
11146
+ onUploadFile,
11147
+ onDeleteFile,
11148
+ onFileUpdate
11133
11149
  }) => {
11134
11150
  const [availableEpics, setAvailableEpics] = (0, import_react48.useState)(epics);
11151
+ const [availableTasks, setAvailableTasks] = (0, import_react48.useState)(tasks);
11135
11152
  const [draggedTask, setDraggedTask] = (0, import_react48.useState)(null);
11136
11153
  const [editingEpic, setEditingEpic] = (0, import_react48.useState)(null);
11137
11154
  const [editForm, setEditForm] = (0, import_react48.useState)({});
@@ -11139,16 +11156,29 @@ var EpicsView = ({
11139
11156
  const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react48.useState)(false);
11140
11157
  const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react48.useState)(false);
11141
11158
  const [addTaskEpic, setAddTaskEpic] = (0, import_react48.useState)(null);
11159
+ const [selectedTask, setSelectedTask] = (0, import_react48.useState)(null);
11160
+ const [selectedEpicIds, setSelectedEpicIds] = useLocalStorage(
11161
+ `epicsView_selectedEpics${projectId ? `_${projectId}` : ""}`,
11162
+ []
11163
+ );
11164
+ const [isEpicSelectorOpen, setIsEpicSelectorOpen] = (0, import_react48.useState)(false);
11142
11165
  const heroRef = (0, import_react48.useRef)(null);
11143
11166
  const containerRef = (0, import_react48.useRef)(null);
11144
11167
  (0, import_react48.useEffect)(() => {
11145
11168
  setAvailableEpics(epics);
11169
+ const validIds = new Set(epics.map((e) => e.id.toString()));
11170
+ setSelectedEpicIds((prev) => prev.filter((id) => validIds.has(id)));
11146
11171
  }, [epics]);
11172
+ (0, import_react48.useEffect)(() => {
11173
+ setAvailableTasks(tasks);
11174
+ if (selectedTask) {
11175
+ setSelectedTask(tasks.find((t) => t.id === selectedTask.id) || null);
11176
+ }
11177
+ }, [tasks]);
11147
11178
  (0, import_react48.useEffect)(() => {
11148
11179
  const measureHeroHeight = () => {
11149
11180
  if (heroRef.current) {
11150
- const height = heroRef.current.offsetHeight;
11151
- setHeroHeight(height);
11181
+ setHeroHeight(heroRef.current.offsetHeight);
11152
11182
  }
11153
11183
  };
11154
11184
  measureHeroHeight();
@@ -11173,6 +11203,12 @@ var EpicsView = ({
11173
11203
  }, 300);
11174
11204
  return () => clearTimeout(timer);
11175
11205
  }, [editingEpic]);
11206
+ const visibleEpics = selectedEpicIds.length === 0 ? availableEpics : availableEpics.filter((e) => selectedEpicIds.includes(e.id.toString()));
11207
+ const toggleEpicView = (epicId) => {
11208
+ setSelectedEpicIds(
11209
+ (prev) => prev.includes(epicId) ? prev.filter((id) => id !== epicId) : [...prev, epicId]
11210
+ );
11211
+ };
11176
11212
  const handleDragStart = (task) => {
11177
11213
  setDraggedTask(task);
11178
11214
  };
@@ -11182,14 +11218,41 @@ var EpicsView = ({
11182
11218
  const handleDrop = (e, epicId) => {
11183
11219
  e.preventDefault();
11184
11220
  if (draggedTask && extractId(draggedTask.epic).toString() !== epicId) {
11185
- onUpdateTask(draggedTask.id.toString(), {
11186
- epic: Number(epicId)
11187
- });
11221
+ onUpdateTask(draggedTask.id.toString(), { epic: Number(epicId) });
11222
+ setAvailableTasks(
11223
+ (prev) => prev.map((t) => t.id === draggedTask.id ? { ...t, epic: Number(epicId) } : t)
11224
+ );
11188
11225
  setDraggedTask(null);
11189
11226
  }
11190
11227
  };
11191
11228
  const getTasksByEpic = (epicId) => {
11192
- return tasks.filter((task) => extractId(task.epic).toString() === epicId);
11229
+ return availableTasks.filter((task) => extractId(task.epic).toString() === epicId);
11230
+ };
11231
+ const handleTaskClick = (task) => {
11232
+ setSelectedTask(task);
11233
+ onTaskClick?.(task);
11234
+ };
11235
+ const handleUpdateTask = async (taskId, updates) => {
11236
+ setAvailableTasks(
11237
+ (prev) => prev.map((t) => t.id === Number(taskId) ? { ...t, ...updates } : t)
11238
+ );
11239
+ if (selectedTask?.id === Number(taskId)) {
11240
+ setSelectedTask((prev) => prev ? { ...prev, ...updates } : null);
11241
+ }
11242
+ await onUpdateTask(taskId, updates);
11243
+ };
11244
+ const handleDeleteTask = async (taskId) => {
11245
+ setAvailableTasks((prev) => prev.filter((t) => t.id !== Number(taskId)));
11246
+ if (selectedTask?.id === Number(taskId)) {
11247
+ setSelectedTask(null);
11248
+ }
11249
+ await onDeleteTask?.(taskId);
11250
+ };
11251
+ const handleRemoveFromEpic = (task) => {
11252
+ onUpdateTask(task.id.toString(), { epic: null });
11253
+ setAvailableTasks(
11254
+ (prev) => prev.map((t) => t.id === task.id ? { ...t, epic: null } : t)
11255
+ );
11193
11256
  };
11194
11257
  const handleEditEpic = (epic) => {
11195
11258
  setEditingEpic(epic.id.toString());
@@ -11198,19 +11261,15 @@ var EpicsView = ({
11198
11261
  description: epic.description,
11199
11262
  confidence: epic.confidence,
11200
11263
  phase: epic.phase
11201
- // progress: epic.progress || 0, // This is a number, not a string
11202
11264
  });
11203
11265
  };
11204
11266
  const handleSaveEdit = async () => {
11205
11267
  if (editingEpic && editForm.name) {
11206
11268
  await onUpdateEpic(editingEpic.toString(), editForm);
11207
11269
  setAvailableEpics(
11208
- (prev) => prev.map((epic) => {
11209
- if (epic.id.toString() === editingEpic) {
11210
- return { ...epic, ...editForm };
11211
- }
11212
- return epic;
11213
- })
11270
+ (prev) => prev.map(
11271
+ (epic) => epic.id.toString() === editingEpic ? { ...epic, ...editForm } : epic
11272
+ )
11214
11273
  );
11215
11274
  setEditingEpic(null);
11216
11275
  setEditForm({});
@@ -11226,6 +11285,7 @@ var EpicsView = ({
11226
11285
  )) {
11227
11286
  await onDeleteEpic(epicId);
11228
11287
  setAvailableEpics((prev) => prev.filter((epic) => epic.id.toString() !== epicId));
11288
+ setSelectedEpicIds((prev) => prev.filter((id) => id !== epicId));
11229
11289
  }
11230
11290
  };
11231
11291
  const getPhaseLabel = (phase) => {
@@ -11268,218 +11328,315 @@ var EpicsView = ({
11268
11328
  }
11269
11329
  }
11270
11330
  ) }),
11271
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11331
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11272
11332
  "div",
11273
11333
  {
11274
- className: "h-full overflow-y-auto",
11334
+ className: "h-full overflow-y-auto no-scrollbar",
11275
11335
  style: {
11276
11336
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
11277
11337
  },
11278
- children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6 auto-rows-max", children: availableEpics.map((epic) => {
11279
- const epicTasks = getTasksByEpic(epic.id.toString());
11280
- const totalPoints = epicTasks.reduce(
11281
- (sum, task) => sum + (task.storyPoints || 0),
11282
- 0
11283
- );
11284
- const availableHeight = heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 14rem)";
11285
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11286
- Card,
11287
- {
11288
- className: `flex flex-col ${editingEpic === epic.id.toString() ? "h-auto" : ""} bg-card shadow-sm`,
11289
- style: {
11290
- height: editingEpic === epic.id.toString() ? "auto" : availableHeight,
11291
- minHeight: "400px"
11292
- },
11293
- onDragOver: handleDragOver,
11294
- onDrop: (e) => handleDrop(e, epic.id.toString()),
11295
- children: [
11296
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "p-4 border-b border-border", children: editingEpic === epic.id.toString() ? (
11297
- /* Edit Mode */
11298
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "space-y-4", children: [
11299
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-between", children: [
11300
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11301
- Input,
11302
- {
11303
- value: editForm.name || "",
11304
- onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
11305
- placeholder: "Epic name",
11306
- className: "font-semibold"
11307
- }
11308
- ),
11309
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex gap-2 ml-2", children: [
11310
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11311
- Button,
11312
- {
11313
- size: "sm",
11314
- variant: "ghost",
11315
- onClick: handleSaveEdit,
11316
- className: "p-1 h-8 w-8",
11317
- children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Check, { className: "h-4 w-4" })
11318
- }
11319
- ),
11338
+ children: [
11339
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "mb-4", children: [
11340
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-between", children: [
11341
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-3", children: [
11342
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { children: [
11343
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Epics" }),
11344
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "text-xs text-muted-foreground", children: selectedEpicIds.length === 0 ? "All showing" : `${selectedEpicIds.length}/${availableEpics.length} selected` })
11345
+ ] }),
11346
+ selectedEpicIds.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-2", children: [
11347
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
11348
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleEpics.map((epic) => /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11349
+ "div",
11350
+ {
11351
+ className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
11352
+ children: [
11353
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
11354
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "max-w-[80px] truncate", children: epic.name }),
11320
11355
  /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11321
- Button,
11356
+ "button",
11322
11357
  {
11323
- size: "sm",
11324
- variant: "ghost",
11325
- onClick: handleCancelEdit,
11326
- className: "p-1 h-8 w-8",
11358
+ onClick: () => toggleEpicView(epic.id.toString()),
11359
+ className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
11327
11360
  children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.X, { className: "h-4 w-4" })
11328
11361
  }
11329
11362
  )
11330
- ] })
11363
+ ]
11364
+ },
11365
+ epic.id
11366
+ )) })
11367
+ ] })
11368
+ ] }),
11369
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11370
+ Button,
11371
+ {
11372
+ onClick: () => setIsEpicSelectorOpen(!isEpicSelectorOpen),
11373
+ variant: "outline",
11374
+ size: "sm",
11375
+ className: "gap-1",
11376
+ children: [
11377
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Layers, { className: "h-3 w-3" }),
11378
+ isEpicSelectorOpen ? "Close" : "Select"
11379
+ ]
11380
+ }
11381
+ )
11382
+ ] }) }),
11383
+ isEpicSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11384
+ "div",
11385
+ {
11386
+ className: "fixed inset-0 bg-black/20 z-[5]",
11387
+ onClick: () => setIsEpicSelectorOpen(false)
11388
+ }
11389
+ ),
11390
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11391
+ "div",
11392
+ {
11393
+ className: `fixed top-0 right-0 h-full w-80 bg-background border-l shadow-xl z-10 transition-all duration-300 ease-in-out ${isEpicSelectorOpen ? "translate-x-0 opacity-100 visible" : "translate-x-full opacity-0 invisible"}`,
11394
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
11395
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
11396
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-between", children: [
11397
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Epics" }),
11398
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11399
+ Button,
11400
+ {
11401
+ variant: "ghost",
11402
+ size: "sm",
11403
+ onClick: () => setIsEpicSelectorOpen(false),
11404
+ className: "h-8 w-8 p-0",
11405
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.X, { className: "h-4 w-4" })
11406
+ }
11407
+ )
11331
11408
  ] }),
11332
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11333
- Textarea,
11409
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Filter which epics to display. Select none to show all." })
11410
+ ] }),
11411
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto no-scrollbar", children: availableEpics.length > 0 ? availableEpics.map((epic) => {
11412
+ const isSelected = selectedEpicIds.includes(epic.id.toString());
11413
+ const taskCount = availableTasks.filter(
11414
+ (t) => extractId(t.epic) === epic.id
11415
+ ).length;
11416
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11417
+ "div",
11334
11418
  {
11335
- value: editForm.description || "",
11336
- onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
11337
- placeholder: "Epic description",
11338
- className: "text-sm min-h-[60px]"
11339
- }
11340
- ),
11341
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
11342
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { children: [
11343
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
11344
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11345
- "select",
11346
- {
11347
- value: editForm.confidence || epic.confidence,
11348
- onChange: (e) => setEditForm({
11349
- ...editForm,
11350
- confidence: e.target.value
11351
- }),
11352
- className: "flex h-8 w-full rounded-md border border-input bg-background px-3 py-2 text-xs ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
11353
- children: [
11354
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("option", { value: "low", children: "Low" }),
11355
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("option", { value: "medium", children: "Medium" }),
11356
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("option", { value: "high", children: "High" })
11357
- ]
11358
- }
11359
- )
11360
- ] }),
11361
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { children: [
11362
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
11363
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11364
- "select",
11365
- {
11366
- value: editForm.phase?.toString() || epic.phase.toString(),
11367
- onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
11368
- className: "flex h-8 w-full rounded-md border border-input bg-background px-3 py-2 text-xs ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
11369
- children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("option", { value: phase.toString(), children: [
11370
- "Phase ",
11371
- phase
11372
- ] }, phase))
11373
- }
11374
- )
11375
- ] })
11376
- ] })
11377
- ] })
11378
- ) : (
11379
- /* Display Mode */
11380
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
11381
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
11382
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: `w-4 h-4 rounded-full ${epic.color}` }),
11383
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { className: "font-semibold text-foreground select-none flex-1", children: epic.name }),
11384
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex gap-1", children: [
11419
+ className: `p-3 rounded-lg border transition-all ${isSelected ? "bg-primary/10 border-primary/30 ring-1 ring-primary/20" : "bg-card border-border"}`,
11420
+ children: [
11421
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-between", children: [
11422
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [
11423
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
11424
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "font-medium text-sm text-foreground truncate", children: epic.name })
11425
+ ] }),
11426
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "ml-2 flex items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Badge, { variant: "secondary", className: "text-xs", children: taskCount }) })
11427
+ ] }),
11428
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11429
+ Button,
11430
+ {
11431
+ variant: isSelected ? "default" : "outline",
11432
+ size: "sm",
11433
+ className: "w-full mt-2 text-xs h-7",
11434
+ onClick: () => toggleEpicView(epic.id.toString()),
11435
+ children: isSelected ? "Deselect" : "Select"
11436
+ }
11437
+ )
11438
+ ]
11439
+ },
11440
+ epic.id
11441
+ );
11442
+ }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "text-sm text-muted-foreground text-center py-8", children: "No epics yet. Add one to get started." }) }) })
11443
+ ] })
11444
+ }
11445
+ )
11446
+ ] }),
11447
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 gap-3 auto-rows-max", children: visibleEpics.map((epic) => {
11448
+ const epicTasks = getTasksByEpic(epic.id.toString());
11449
+ const totalPoints = epicTasks.reduce(
11450
+ (sum, task) => sum + (task.storyPoints || 0),
11451
+ 0
11452
+ );
11453
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11454
+ Card,
11455
+ {
11456
+ className: "flex flex-col bg-card shadow-sm",
11457
+ style: { maxHeight: "420px" },
11458
+ onDragOver: handleDragOver,
11459
+ onDrop: (e) => handleDrop(e, epic.id.toString()),
11460
+ children: [
11461
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "p-3 border-b border-border flex-shrink-0", children: editingEpic === epic.id.toString() ? (
11462
+ /* Edit Mode */
11463
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "space-y-3", children: [
11464
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-between", children: [
11385
11465
  /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11386
- Button,
11466
+ Input,
11387
11467
  {
11388
- size: "sm",
11389
- variant: "ghost",
11390
- onClick: () => handleEditEpic(epic),
11391
- className: "p-1 h-8 w-8",
11392
- children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Edit2, { className: "h-3 w-3" })
11468
+ value: editForm.name || "",
11469
+ onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
11470
+ placeholder: "Epic name",
11471
+ className: "font-semibold text-sm"
11393
11472
  }
11394
11473
  ),
11395
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11396
- Button,
11397
- {
11398
- size: "sm",
11399
- variant: "ghost",
11400
- onClick: () => handleDeleteEpic(epic.id.toString()),
11401
- className: "p-1 h-8 w-8 hover:bg-destructive/10 hover:text-destructive",
11402
- children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Trash2, { className: "h-3 w-3" })
11403
- }
11404
- )
11405
- ] })
11406
- ] }),
11407
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex flex-wrap gap-2 mb-3", children: [
11408
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Badge, { className: `text-xs ${getConfidenceColor(epic.confidence)}`, children: [
11409
- epic.confidence,
11410
- " confidence"
11411
- ] }),
11412
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Badge, { variant: "outline", className: "text-xs", children: [
11413
- "Phase ",
11414
- epic.phase
11474
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex gap-1 ml-2", children: [
11475
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11476
+ Button,
11477
+ {
11478
+ size: "sm",
11479
+ variant: "ghost",
11480
+ onClick: handleSaveEdit,
11481
+ className: "p-1 h-7 w-7",
11482
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Check, { className: "h-3 w-3" })
11483
+ }
11484
+ ),
11485
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11486
+ Button,
11487
+ {
11488
+ size: "sm",
11489
+ variant: "ghost",
11490
+ onClick: handleCancelEdit,
11491
+ className: "p-1 h-7 w-7",
11492
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.X, { className: "h-3 w-3" })
11493
+ }
11494
+ )
11495
+ ] })
11415
11496
  ] }),
11416
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11417
- Badge,
11497
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11498
+ Textarea,
11418
11499
  {
11419
- variant: "secondary",
11420
- className: "text-xs bg-muted text-muted-foreground",
11421
- children: [
11422
- epicTasks.length,
11423
- " tasks"
11424
- ]
11500
+ value: editForm.description || "",
11501
+ onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
11502
+ placeholder: "Epic description",
11503
+ className: "text-xs min-h-[50px]"
11425
11504
  }
11426
11505
  ),
11506
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
11507
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { children: [
11508
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
11509
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11510
+ "select",
11511
+ {
11512
+ value: editForm.confidence || epic.confidence,
11513
+ onChange: (e) => setEditForm({
11514
+ ...editForm,
11515
+ confidence: e.target.value
11516
+ }),
11517
+ className: "flex h-7 w-full rounded-md border border-input bg-background px-2 py-1 text-xs ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
11518
+ children: [
11519
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("option", { value: "low", children: "Low" }),
11520
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("option", { value: "medium", children: "Medium" }),
11521
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("option", { value: "high", children: "High" })
11522
+ ]
11523
+ }
11524
+ )
11525
+ ] }),
11526
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { children: [
11527
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
11528
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11529
+ "select",
11530
+ {
11531
+ value: editForm.phase?.toString() || epic.phase.toString(),
11532
+ onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
11533
+ className: "flex h-7 w-full rounded-md border border-input bg-background px-2 py-1 text-xs ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
11534
+ children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("option", { value: phase.toString(), children: [
11535
+ "Phase ",
11536
+ phase
11537
+ ] }, phase))
11538
+ }
11539
+ )
11540
+ ] })
11541
+ ] })
11542
+ ] })
11543
+ ) : (
11544
+ /* Display Mode */
11545
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
11546
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-1.5 mb-1.5", children: [
11547
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
11548
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { className: "font-semibold text-foreground text-sm select-none flex-1 truncate", children: epic.name }),
11549
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex gap-0.5", children: [
11550
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11551
+ Button,
11552
+ {
11553
+ size: "sm",
11554
+ variant: "ghost",
11555
+ onClick: () => handleEditEpic(epic),
11556
+ className: "p-1 h-6 w-6",
11557
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Edit2, { className: "h-3 w-3" })
11558
+ }
11559
+ ),
11560
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11561
+ Button,
11562
+ {
11563
+ size: "sm",
11564
+ variant: "ghost",
11565
+ onClick: () => handleDeleteEpic(epic.id.toString()),
11566
+ className: "p-1 h-6 w-6 hover:bg-destructive/10 hover:text-destructive",
11567
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Trash2, { className: "h-3 w-3" })
11568
+ }
11569
+ )
11570
+ ] })
11571
+ ] }),
11572
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex flex-wrap gap-1 mb-2", children: [
11573
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Badge, { className: `text-xs px-1.5 py-0 ${getConfidenceColor(epic.confidence)}`, children: epic.confidence }),
11574
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Badge, { variant: "outline", className: "text-xs px-1.5 py-0", children: getPhaseLabel(epic.phase) }),
11575
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Badge, { variant: "secondary", className: "text-xs px-1.5 py-0 bg-muted text-muted-foreground", children: [
11576
+ epicTasks.length,
11577
+ "t \xB7 ",
11578
+ totalPoints,
11579
+ "pt"
11580
+ ] })
11581
+ ] }),
11582
+ epic.description && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "text-xs text-muted-foreground mb-2 select-none line-clamp-2", children: epic.description }),
11427
11583
  /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11428
- Badge,
11584
+ Button,
11429
11585
  {
11430
- variant: "secondary",
11431
- className: "text-xs bg-muted text-muted-foreground",
11586
+ onClick: () => {
11587
+ setIsAddTaskModalOpen(true);
11588
+ setAddTaskEpic(epic);
11589
+ },
11590
+ variant: "outline",
11591
+ size: "sm",
11592
+ className: "w-full gap-1 h-7 text-xs",
11432
11593
  children: [
11433
- totalPoints,
11434
- " pts"
11594
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Plus, { className: "h-3 w-3" }),
11595
+ "Add Task"
11435
11596
  ]
11436
11597
  }
11437
11598
  )
11438
- ] }),
11439
- epic.description && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "text-sm text-muted-foreground mb-3 select-none", children: epic.description }),
11440
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
11441
- Button,
11442
- {
11443
- onClick: () => {
11444
- setIsAddTaskModalOpen(true);
11445
- setAddTaskEpic(epic);
11446
- },
11447
- variant: "outline",
11448
- size: "sm",
11449
- className: "w-full gap-2",
11450
- children: [
11451
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Plus, { className: "h-4 w-4" }),
11452
- "Add Task"
11453
- ]
11454
- }
11455
- )
11456
- ] })
11457
- ) }),
11458
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "flex-1 p-4 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11459
- "div",
11460
- {
11461
- className: `space-y-3 min-h-[200px] border-2 border-dashed rounded p-3 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
11462
- children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex flex-col items-center justify-center h-32 text-muted-foreground border-2 border-dashed border-border rounded-lg", children: [
11463
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Move, { className: "h-8 w-8 mb-2" }),
11464
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "text-sm select-none", children: "Drop tasks here" })
11465
- ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11466
- TaskCard,
11467
- {
11468
- task,
11469
- epic,
11470
- onDragStart: handleDragStart,
11471
- onTaskClick,
11472
- isCompact: true
11473
- },
11474
- task.id
11475
- ))
11476
- }
11477
- ) })
11478
- ]
11479
- },
11480
- epic.id
11481
- );
11482
- }) })
11599
+ ] })
11600
+ ) }),
11601
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "flex-1 p-2 overflow-y-auto no-scrollbar min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11602
+ "div",
11603
+ {
11604
+ className: `space-y-2 min-h-[80px] border-2 border-dashed rounded p-2 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
11605
+ children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex flex-col items-center justify-center h-16 text-muted-foreground", children: [
11606
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.Move, { className: "h-5 w-5 mb-1" }),
11607
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "text-xs select-none", children: "Drop tasks here" })
11608
+ ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "relative group", children: [
11609
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11610
+ TaskCard,
11611
+ {
11612
+ task,
11613
+ epic,
11614
+ onDragStart: handleDragStart,
11615
+ onTaskClick: handleTaskClick,
11616
+ isCompact: true
11617
+ }
11618
+ ),
11619
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11620
+ "button",
11621
+ {
11622
+ onClick: (e) => {
11623
+ e.stopPropagation();
11624
+ handleRemoveFromEpic(task);
11625
+ },
11626
+ title: "Remove from epic",
11627
+ className: "absolute top-1 right-1 opacity-0 group-hover:opacity-100 transition-opacity bg-background/80 hover:bg-destructive/10 hover:text-destructive rounded p-0.5",
11628
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react35.X, { className: "h-3 w-3" })
11629
+ }
11630
+ )
11631
+ ] }, task.id))
11632
+ }
11633
+ ) })
11634
+ ]
11635
+ },
11636
+ epic.id
11637
+ );
11638
+ }) })
11639
+ ]
11483
11640
  }
11484
11641
  ) })
11485
11642
  ] }),
@@ -11502,21 +11659,417 @@ var EpicsView = ({
11502
11659
  defaultEpicId: addTaskEpic?.id.toString() || "",
11503
11660
  sprints
11504
11661
  }
11662
+ ),
11663
+ selectedTask && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11664
+ TaskDetailsModal,
11665
+ {
11666
+ isOpen: !!selectedTask,
11667
+ onClose: () => setSelectedTask(null),
11668
+ initialTask: selectedTask,
11669
+ epics: availableEpics,
11670
+ sprints,
11671
+ onUpdateTask: handleUpdateTask,
11672
+ onDeleteTask: handleDeleteTask,
11673
+ onAddComment,
11674
+ colleagues,
11675
+ onUploadFile,
11676
+ onDeleteFile,
11677
+ onFileUpdate
11678
+ }
11505
11679
  )
11506
11680
  ] });
11507
11681
  };
11508
11682
 
11509
- // src/components/Projects/PlanningView.tsx
11510
- var import_react50 = require("react");
11511
- var import_lucide_react37 = require("lucide-react");
11512
-
11513
- // src/components/Projects/AddSprintModal.tsx
11683
+ // src/components/Projects/GanttView.tsx
11514
11684
  var import_react49 = require("react");
11515
- var import_lucide_react36 = require("lucide-react");
11516
11685
  var import_date_fns = require("date-fns");
11686
+ var import_lucide_react36 = require("lucide-react");
11517
11687
  var import_jsx_runtime66 = require("react/jsx-runtime");
11688
+ var PHASE_LABELS = {
11689
+ 1: "Plan",
11690
+ 2: "Dev",
11691
+ 3: "Test",
11692
+ 4: "Deploy",
11693
+ 5: "Review",
11694
+ 6: "Maint.",
11695
+ 7: "Complete",
11696
+ 8: "Archive",
11697
+ 9: "Legacy"
11698
+ };
11699
+ var ZOOM_LEVELS = [
11700
+ { label: "Quarter", dayWidth: 3 },
11701
+ { label: "Month", dayWidth: 7 },
11702
+ { label: "Week", dayWidth: 14 },
11703
+ { label: "Day", dayWidth: 40 }
11704
+ ];
11705
+ var ROW_HEIGHT = 48;
11706
+ var TIME_HEADER_HEIGHT = 60;
11707
+ var GanttView = ({
11708
+ tasks,
11709
+ epics,
11710
+ sprints,
11711
+ onTaskClick
11712
+ }) => {
11713
+ const [dayWidth, setDayWidth] = (0, import_react49.useState)(7);
11714
+ const [isFullscreen, setIsFullscreen] = (0, import_react49.useState)(false);
11715
+ const scrollRef = (0, import_react49.useRef)(null);
11716
+ const heroRef = (0, import_react49.useRef)(null);
11717
+ const [heroHeight, setHeroHeight] = (0, import_react49.useState)(0);
11718
+ (0, import_react49.useEffect)(() => {
11719
+ const measure = () => {
11720
+ if (heroRef.current) setHeroHeight(heroRef.current.offsetHeight);
11721
+ };
11722
+ const observer = new ResizeObserver(measure);
11723
+ if (heroRef.current) observer.observe(heroRef.current);
11724
+ return () => observer.disconnect();
11725
+ }, []);
11726
+ const { timelineStart, timelineEnd, totalDays } = (0, import_react49.useMemo)(() => {
11727
+ if (epics.length === 0) {
11728
+ const today = /* @__PURE__ */ new Date();
11729
+ const start = (0, import_date_fns.addDays)(today, -14);
11730
+ const end = (0, import_date_fns.addDays)(today, 76);
11731
+ return { timelineStart: start, timelineEnd: end, totalDays: 90 };
11732
+ }
11733
+ const allDates = epics.flatMap((e) => [new Date(e.startDate), new Date(e.endDate)]);
11734
+ const minTime = Math.min(...allDates.map((d) => d.getTime()));
11735
+ const maxTime = Math.max(...allDates.map((d) => d.getTime()));
11736
+ const paddedStart = (0, import_date_fns.addDays)(new Date(minTime), -14);
11737
+ const paddedEnd = (0, import_date_fns.addDays)(new Date(maxTime), 14);
11738
+ return {
11739
+ timelineStart: paddedStart,
11740
+ timelineEnd: paddedEnd,
11741
+ totalDays: (0, import_date_fns.differenceInDays)(paddedEnd, paddedStart)
11742
+ };
11743
+ }, [epics]);
11744
+ const { groups, sortedKeys } = (0, import_react49.useMemo)(() => {
11745
+ const groups2 = {};
11746
+ epics.forEach((epic) => {
11747
+ if (!groups2[epic.name]) groups2[epic.name] = [];
11748
+ groups2[epic.name].push(epic);
11749
+ });
11750
+ Object.values(groups2).forEach((list) => list.sort((a, b) => a.phase - b.phase));
11751
+ const sortedKeys2 = Object.keys(groups2).sort((a, b) => {
11752
+ const aMin = Math.min(...groups2[a].map((e) => new Date(e.startDate).getTime()));
11753
+ const bMin = Math.min(...groups2[b].map((e) => new Date(e.startDate).getTime()));
11754
+ return aMin - bMin;
11755
+ });
11756
+ return { groups: groups2, sortedKeys: sortedKeys2 };
11757
+ }, [epics]);
11758
+ const realSprints = (0, import_react49.useMemo)(
11759
+ () => sprints.filter((s) => {
11760
+ const name = s.name.toLowerCase();
11761
+ return name !== "backlog" && name !== "all tasks";
11762
+ }),
11763
+ [sprints]
11764
+ );
11765
+ const monthHeaders = (0, import_react49.useMemo)(
11766
+ () => (0, import_date_fns.eachMonthOfInterval)({ start: timelineStart, end: timelineEnd }).map((month) => ({
11767
+ month,
11768
+ left: (0, import_date_fns.differenceInDays)(month, timelineStart) * dayWidth
11769
+ })),
11770
+ [timelineStart, timelineEnd, dayWidth]
11771
+ );
11772
+ const totalWidth = Math.max(totalDays * dayWidth, 600);
11773
+ const scrollToToday = (0, import_react49.useCallback)(() => {
11774
+ if (scrollRef.current) {
11775
+ const todayOffset = (0, import_date_fns.differenceInDays)(/* @__PURE__ */ new Date(), timelineStart) * dayWidth;
11776
+ scrollRef.current.scrollLeft = Math.max(0, todayOffset - 200);
11777
+ }
11778
+ }, [timelineStart, dayWidth]);
11779
+ const todayLeft = (0, import_date_fns.differenceInDays)(/* @__PURE__ */ new Date(), timelineStart) * dayWidth;
11780
+ const getEpicStats = (epic) => {
11781
+ const epicTasks = tasks.filter((t) => extractId(t.epic) === epic.id);
11782
+ const done = epicTasks.filter((t) => t.status === "done").length;
11783
+ const pct = epicTasks.length > 0 ? Math.round(done / epicTasks.length * 100) : 0;
11784
+ return { total: epicTasks.length, done, pct };
11785
+ };
11786
+ const getGroupStats = (epicList) => {
11787
+ const allTasks = epicList.flatMap(
11788
+ (e) => tasks.filter((t) => extractId(t.epic) === e.id)
11789
+ );
11790
+ const done = allTasks.filter((t) => t.status === "done").length;
11791
+ const pct = allTasks.length > 0 ? Math.round(done / allTasks.length * 100) : 0;
11792
+ return { total: allTasks.length, done, pct };
11793
+ };
11794
+ const isSprintActive = (sprint) => {
11795
+ const today = /* @__PURE__ */ new Date();
11796
+ try {
11797
+ return (0, import_date_fns.isWithinInterval)(today, {
11798
+ start: new Date(sprint.startDate),
11799
+ end: new Date(sprint.endDate)
11800
+ });
11801
+ } catch {
11802
+ return false;
11803
+ }
11804
+ };
11805
+ const chartContent = /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
11806
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "w-52 flex-shrink-0 border-r bg-background z-10 flex flex-col", children: [
11807
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11808
+ "div",
11809
+ {
11810
+ className: "border-b flex items-end pb-2 px-3 flex-shrink-0 bg-muted/20",
11811
+ style: { height: TIME_HEADER_HEIGHT },
11812
+ children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-xs font-semibold text-muted-foreground tracking-wider uppercase", children: "Epic" })
11813
+ }
11814
+ ),
11815
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "overflow-y-auto flex-1", children: [
11816
+ sortedKeys.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "flex items-center justify-center h-24 text-sm text-muted-foreground", children: "No epics" }),
11817
+ sortedKeys.map((name) => {
11818
+ const stats = getGroupStats(groups[name]);
11819
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
11820
+ "div",
11821
+ {
11822
+ className: "flex flex-col justify-center px-3 border-b",
11823
+ style: { height: ROW_HEIGHT },
11824
+ children: [
11825
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-sm font-medium truncate", title: name, children: name }),
11826
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
11827
+ stats.total,
11828
+ " task",
11829
+ stats.total !== 1 ? "s" : "",
11830
+ " \xB7 ",
11831
+ stats.pct,
11832
+ "%"
11833
+ ] })
11834
+ ]
11835
+ },
11836
+ name
11837
+ );
11838
+ })
11839
+ ] })
11840
+ ] }),
11841
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "flex-1 overflow-x-auto overflow-y-auto", ref: scrollRef, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { style: { width: totalWidth, position: "relative" }, children: [
11842
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
11843
+ "div",
11844
+ {
11845
+ className: "sticky top-0 border-b bg-muted/20 z-20 flex-shrink-0",
11846
+ style: { height: TIME_HEADER_HEIGHT, width: totalWidth },
11847
+ children: [
11848
+ monthHeaders.map(({ month, left }) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11849
+ "div",
11850
+ {
11851
+ className: "absolute top-2 text-xs font-semibold text-muted-foreground select-none",
11852
+ style: { left: left + 4 },
11853
+ children: (0, import_date_fns.format)(month, "MMM yyyy")
11854
+ },
11855
+ month.toISOString()
11856
+ )),
11857
+ realSprints.map((sprint) => {
11858
+ const start = new Date(sprint.startDate);
11859
+ const end = new Date(sprint.endDate);
11860
+ if (start > timelineEnd || end < timelineStart) return null;
11861
+ const left = Math.max(0, (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth);
11862
+ const right = Math.min(
11863
+ totalWidth,
11864
+ (0, import_date_fns.differenceInDays)(end, timelineStart) * dayWidth
11865
+ );
11866
+ const width = right - left;
11867
+ if (width <= 0) return null;
11868
+ const active = isSprintActive(sprint);
11869
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11870
+ "div",
11871
+ {
11872
+ className: `absolute bottom-0 border-l border-t text-xs px-1 overflow-hidden whitespace-nowrap select-none flex items-center ${active ? "border-primary/50 bg-primary/10 text-primary font-medium" : "border-border bg-muted/40 text-muted-foreground"}`,
11873
+ style: { left, width, height: 22 },
11874
+ title: sprint.name,
11875
+ children: sprint.name
11876
+ },
11877
+ `header-sprint-${sprint.id}`
11878
+ );
11879
+ })
11880
+ ]
11881
+ }
11882
+ ),
11883
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { style: { position: "relative", width: totalWidth }, children: [
11884
+ realSprints.map((sprint) => {
11885
+ const start = new Date(sprint.startDate);
11886
+ const end = new Date(sprint.endDate);
11887
+ if (start > timelineEnd || end < timelineStart) return null;
11888
+ const left = Math.max(0, (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth);
11889
+ const right = Math.min(
11890
+ totalWidth,
11891
+ (0, import_date_fns.differenceInDays)(end, timelineStart) * dayWidth
11892
+ );
11893
+ const width = right - left;
11894
+ if (width <= 0 || !isSprintActive(sprint)) return null;
11895
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11896
+ "div",
11897
+ {
11898
+ className: "absolute inset-y-0 bg-primary/5 pointer-events-none",
11899
+ style: { left, width }
11900
+ },
11901
+ `bg-${sprint.id}`
11902
+ );
11903
+ }),
11904
+ realSprints.map((sprint) => {
11905
+ const left = (0, import_date_fns.differenceInDays)(new Date(sprint.startDate), timelineStart) * dayWidth;
11906
+ if (left < 0 || left > totalWidth) return null;
11907
+ const active = isSprintActive(sprint);
11908
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11909
+ "div",
11910
+ {
11911
+ className: `absolute inset-y-0 pointer-events-none ${active ? "border-l border-primary/40" : "border-l border-dashed border-border/60"}`,
11912
+ style: { left }
11913
+ },
11914
+ `line-${sprint.id}`
11915
+ );
11916
+ }),
11917
+ todayLeft >= 0 && todayLeft <= totalWidth && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
11918
+ "div",
11919
+ {
11920
+ className: "absolute inset-y-0 pointer-events-none z-10",
11921
+ style: { left: todayLeft },
11922
+ children: [
11923
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "absolute inset-y-0 w-0.5 bg-destructive/50" }),
11924
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "absolute top-1 -translate-x-1/2 w-2 h-2 rounded-full bg-destructive" })
11925
+ ]
11926
+ }
11927
+ ),
11928
+ monthHeaders.map(({ month, left }) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11929
+ "div",
11930
+ {
11931
+ className: "absolute inset-y-0 border-l border-border/30 pointer-events-none",
11932
+ style: { left }
11933
+ },
11934
+ `grid-${month.toISOString()}`
11935
+ )),
11936
+ sortedKeys.map((name) => {
11937
+ const epicList = groups[name];
11938
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11939
+ "div",
11940
+ {
11941
+ className: "border-b relative flex items-center",
11942
+ style: { height: ROW_HEIGHT },
11943
+ children: epicList.map((epic) => {
11944
+ const start = new Date(epic.startDate);
11945
+ const end = new Date(epic.endDate);
11946
+ const left = (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth;
11947
+ const width = Math.max(8, (0, import_date_fns.differenceInDays)(end, start) * dayWidth);
11948
+ const stats = getEpicStats(epic);
11949
+ const phaseLabel = PHASE_LABELS[epic.phase] ?? `Phase ${epic.phase}`;
11950
+ const showLabel = width >= 50;
11951
+ const tooltip = [
11952
+ `${epic.name} \xB7 ${phaseLabel}`,
11953
+ epic.description ? epic.description : null,
11954
+ `${(0, import_date_fns.format)(start, "dd MMM yyyy")} \u2192 ${(0, import_date_fns.format)(end, "dd MMM yyyy")}`,
11955
+ `${stats.total} tasks \xB7 ${stats.pct}% complete`
11956
+ ].filter(Boolean).join("\n");
11957
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
11958
+ "div",
11959
+ {
11960
+ className: "absolute rounded overflow-hidden cursor-pointer hover:ring-2 hover:ring-white/40 transition-all",
11961
+ style: { left, width, height: 32, top: 8 },
11962
+ title: tooltip,
11963
+ children: [
11964
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11965
+ "div",
11966
+ {
11967
+ className: `absolute inset-0 ${epic.color}`,
11968
+ style: { opacity: 0.2 }
11969
+ }
11970
+ ),
11971
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11972
+ "div",
11973
+ {
11974
+ className: `absolute inset-y-0 left-0 ${epic.color} transition-all`,
11975
+ style: { width: `${stats.pct}%`, opacity: 0.85 }
11976
+ }
11977
+ ),
11978
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "absolute inset-0 flex items-center px-2 gap-1.5 z-10", children: [
11979
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-xs font-semibold text-white drop-shadow truncate", children: phaseLabel }),
11980
+ stats.total > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "text-xs text-white/80 drop-shadow shrink-0", children: [
11981
+ stats.pct,
11982
+ "%"
11983
+ ] })
11984
+ ] })
11985
+ ]
11986
+ },
11987
+ epic.id
11988
+ );
11989
+ })
11990
+ },
11991
+ name
11992
+ );
11993
+ }),
11994
+ sortedKeys.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11995
+ "div",
11996
+ {
11997
+ className: "flex items-center justify-center text-sm text-muted-foreground",
11998
+ style: { height: 200 },
11999
+ children: "No epics to display on the timeline"
12000
+ }
12001
+ )
12002
+ ] })
12003
+ ] }) })
12004
+ ] });
12005
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: `flex flex-col ${isFullscreen ? "h-screen" : "h-full"} overflow-hidden`, children: [
12006
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12007
+ DashboardHero,
12008
+ {
12009
+ title: "Gantt Chart",
12010
+ description: "Epic timeline with sprint alignment and phase-based grouping.",
12011
+ gradient: "bg-gradient-to-r from-indigo-600 via-blue-600 to-cyan-600",
12012
+ badge: `${sortedKeys.length} epic${sortedKeys.length !== 1 ? "s" : ""}`
12013
+ }
12014
+ ) }),
12015
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-center gap-2 px-4 py-2 border-b bg-background flex-shrink-0", children: [
12016
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react36.BarChart2, { className: "h-4 w-4 text-muted-foreground" }),
12017
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "flex items-center gap-1", children: ZOOM_LEVELS.map((z) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12018
+ Button,
12019
+ {
12020
+ variant: dayWidth === z.dayWidth ? "default" : "outline",
12021
+ size: "sm",
12022
+ className: "h-7 px-2 text-xs",
12023
+ onClick: () => setDayWidth(z.dayWidth),
12024
+ children: z.label
12025
+ },
12026
+ z.label
12027
+ )) }),
12028
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "flex-1" }),
12029
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
12030
+ Button,
12031
+ {
12032
+ variant: "outline",
12033
+ size: "sm",
12034
+ className: "h-7 px-2 text-xs",
12035
+ onClick: scrollToToday,
12036
+ children: [
12037
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react36.Calendar, { className: "h-3 w-3 mr-1" }),
12038
+ "Today"
12039
+ ]
12040
+ }
12041
+ ),
12042
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12043
+ Button,
12044
+ {
12045
+ variant: "outline",
12046
+ size: "sm",
12047
+ className: "h-7 w-7 p-0",
12048
+ onClick: () => setIsFullscreen((v) => !v),
12049
+ title: isFullscreen ? "Exit fullscreen" : "Fullscreen",
12050
+ children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react36.Minimize2, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react36.Maximize2, { className: "h-3.5 w-3.5" })
12051
+ }
12052
+ )
12053
+ ] }),
12054
+ chartContent
12055
+ ] });
12056
+ if (isFullscreen) {
12057
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "fixed inset-0 z-50 bg-background overflow-hidden", children: inner });
12058
+ }
12059
+ return inner;
12060
+ };
12061
+
12062
+ // src/components/Projects/PlanningView.tsx
12063
+ var import_react51 = require("react");
12064
+ var import_lucide_react38 = require("lucide-react");
12065
+
12066
+ // src/components/Projects/AddSprintModal.tsx
12067
+ var import_react50 = require("react");
12068
+ var import_lucide_react37 = require("lucide-react");
12069
+ var import_date_fns2 = require("date-fns");
12070
+ var import_jsx_runtime67 = require("react/jsx-runtime");
11518
12071
  var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11519
- const [formData, setFormData] = (0, import_react49.useState)({
12072
+ const [formData, setFormData] = (0, import_react50.useState)({
11520
12073
  name: "",
11521
12074
  description: "",
11522
12075
  startDate: void 0,
@@ -11557,12 +12110,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11557
12110
  });
11558
12111
  onClose();
11559
12112
  };
11560
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DialogContent, { className: "sm:max-w-md", children: [
11561
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DialogTitle, { children: "Add New Sprint" }) }),
11562
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
11563
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "space-y-2", children: [
11564
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Label3, { htmlFor: "name", children: "Sprint Name *" }),
11565
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12113
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(DialogContent, { className: "sm:max-w-md", children: [
12114
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(DialogTitle, { children: "Add New Sprint" }) }),
12115
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
12116
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12117
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Label3, { htmlFor: "name", children: "Sprint Name *" }),
12118
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11566
12119
  Input,
11567
12120
  {
11568
12121
  id: "name",
@@ -11573,9 +12126,9 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11573
12126
  }
11574
12127
  )
11575
12128
  ] }),
11576
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "space-y-2", children: [
11577
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Label3, { htmlFor: "description", children: "Description" }),
11578
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12129
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12130
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Label3, { htmlFor: "description", children: "Description" }),
12131
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11579
12132
  Textarea,
11580
12133
  {
11581
12134
  id: "description",
@@ -11586,11 +12139,11 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11586
12139
  }
11587
12140
  )
11588
12141
  ] }),
11589
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
11590
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "space-y-2", children: [
11591
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Label3, { children: "Start Date *" }),
11592
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(Popover, { children: [
11593
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
12142
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
12143
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12144
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Label3, { children: "Start Date *" }),
12145
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Popover, { children: [
12146
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
11594
12147
  Button,
11595
12148
  {
11596
12149
  variant: "outline",
@@ -11599,12 +12152,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11599
12152
  !formData.startDate && "text-muted-foreground"
11600
12153
  ),
11601
12154
  children: [
11602
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react36.CalendarIcon, { className: "mr-2 h-4 w-4" }),
11603
- formData.startDate ? (0, import_date_fns.format)(formData.startDate, "PPP") : "Pick a date"
12155
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.CalendarIcon, { className: "mr-2 h-4 w-4" }),
12156
+ formData.startDate ? (0, import_date_fns2.format)(formData.startDate, "PPP") : "Pick a date"
11604
12157
  ]
11605
12158
  }
11606
12159
  ) }),
11607
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12160
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11608
12161
  Calendar3,
11609
12162
  {
11610
12163
  mode: "single",
@@ -11615,10 +12168,10 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11615
12168
  ) })
11616
12169
  ] })
11617
12170
  ] }),
11618
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "space-y-2", children: [
11619
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Label3, { children: "End Date *" }),
11620
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(Popover, { children: [
11621
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
12171
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12172
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Label3, { children: "End Date *" }),
12173
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Popover, { children: [
12174
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
11622
12175
  Button,
11623
12176
  {
11624
12177
  variant: "outline",
@@ -11627,12 +12180,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11627
12180
  !formData.endDate && "text-muted-foreground"
11628
12181
  ),
11629
12182
  children: [
11630
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react36.CalendarIcon, { className: "mr-2 h-4 w-4" }),
11631
- formData.endDate ? (0, import_date_fns.format)(formData.endDate, "PPP") : "Pick a date"
12183
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.CalendarIcon, { className: "mr-2 h-4 w-4" }),
12184
+ formData.endDate ? (0, import_date_fns2.format)(formData.endDate, "PPP") : "Pick a date"
11632
12185
  ]
11633
12186
  }
11634
12187
  ) }),
11635
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12188
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11636
12189
  Calendar3,
11637
12190
  {
11638
12191
  mode: "single",
@@ -11645,9 +12198,9 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11645
12198
  ] })
11646
12199
  ] })
11647
12200
  ] }),
11648
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex justify-end gap-3 pt-4", children: [
11649
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, children: "Cancel" }),
11650
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12201
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex justify-end gap-3 pt-4", children: [
12202
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, children: "Cancel" }),
12203
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11651
12204
  Button,
11652
12205
  {
11653
12206
  type: "submit",
@@ -11661,7 +12214,7 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
11661
12214
  };
11662
12215
 
11663
12216
  // src/components/Projects/PlanningView.tsx
11664
- var import_jsx_runtime67 = require("react/jsx-runtime");
12217
+ var import_jsx_runtime68 = require("react/jsx-runtime");
11665
12218
  var PlanningView = ({
11666
12219
  tasks,
11667
12220
  epics,
@@ -11672,25 +12225,25 @@ var PlanningView = ({
11672
12225
  onUpdateSprint,
11673
12226
  onDeleteSprint
11674
12227
  }) => {
11675
- const [selectedSprintIds, setSelectedSprintIds] = (0, import_react50.useState)([]);
11676
- const [collapsedEpics, setCollapsedEpics] = (0, import_react50.useState)(/* @__PURE__ */ new Set());
11677
- const [draggedTask, setDraggedTask] = (0, import_react50.useState)(null);
11678
- const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react50.useState)(false);
11679
- const [dragOverTarget, setDragOverTarget] = (0, import_react50.useState)(null);
11680
- const [editingSprintId, setEditingSprintId] = (0, import_react50.useState)(null);
11681
- const [sprintEditForm, setSprintEditForm] = (0, import_react50.useState)({
12228
+ const [selectedSprintIds, setSelectedSprintIds] = (0, import_react51.useState)([]);
12229
+ const [collapsedEpics, setCollapsedEpics] = (0, import_react51.useState)(/* @__PURE__ */ new Set());
12230
+ const [draggedTask, setDraggedTask] = (0, import_react51.useState)(null);
12231
+ const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react51.useState)(false);
12232
+ const [dragOverTarget, setDragOverTarget] = (0, import_react51.useState)(null);
12233
+ const [editingSprintId, setEditingSprintId] = (0, import_react51.useState)(null);
12234
+ const [sprintEditForm, setSprintEditForm] = (0, import_react51.useState)({
11682
12235
  name: "",
11683
12236
  description: "",
11684
12237
  startDate: "",
11685
12238
  endDate: ""
11686
12239
  });
11687
- const [availableSprints, setAvailableSprints] = (0, import_react50.useState)([]);
11688
- const [sprintFilter, setSprintFilter] = (0, import_react50.useState)("upcoming");
11689
- const [isSprintSelectorOpen, setIsSprintSelectorOpen] = (0, import_react50.useState)(false);
11690
- const [heroHeight, setHeroHeight] = (0, import_react50.useState)(0);
11691
- const heroRef = (0, import_react50.useRef)(null);
11692
- const containerRef = (0, import_react50.useRef)(null);
11693
- (0, import_react50.useEffect)(() => {
12240
+ const [availableSprints, setAvailableSprints] = (0, import_react51.useState)([]);
12241
+ const [sprintFilter, setSprintFilter] = (0, import_react51.useState)("upcoming");
12242
+ const [isSprintSelectorOpen, setIsSprintSelectorOpen] = (0, import_react51.useState)(false);
12243
+ const [heroHeight, setHeroHeight] = (0, import_react51.useState)(0);
12244
+ const heroRef = (0, import_react51.useRef)(null);
12245
+ const containerRef = (0, import_react51.useRef)(null);
12246
+ (0, import_react51.useEffect)(() => {
11694
12247
  const savedSprintIds = localStorage.getItem("planningView_selectedSprints");
11695
12248
  if (savedSprintIds) {
11696
12249
  try {
@@ -11703,10 +12256,10 @@ var PlanningView = ({
11703
12256
  }
11704
12257
  }
11705
12258
  }, []);
11706
- (0, import_react50.useEffect)(() => {
12259
+ (0, import_react51.useEffect)(() => {
11707
12260
  localStorage.setItem("planningView_selectedSprints", JSON.stringify(selectedSprintIds));
11708
12261
  }, [selectedSprintIds]);
11709
- (0, import_react50.useEffect)(() => {
12262
+ (0, import_react51.useEffect)(() => {
11710
12263
  const updateHeroHeight = () => {
11711
12264
  if (heroRef.current) {
11712
12265
  setHeroHeight(heroRef.current.offsetHeight);
@@ -11767,7 +12320,7 @@ var PlanningView = ({
11767
12320
  });
11768
12321
  return { tasksByEpic, unassignedTasks };
11769
12322
  };
11770
- (0, import_react50.useEffect)(() => {
12323
+ (0, import_react51.useEffect)(() => {
11771
12324
  setAvailableSprints(sprints);
11772
12325
  }, [sprints]);
11773
12326
  const displayedSprints = availableSprints.filter((sprint) => {
@@ -11890,7 +12443,7 @@ var PlanningView = ({
11890
12443
  e.dataTransfer.setData("text/plain", task.id.toString());
11891
12444
  handleDragStart(e, task);
11892
12445
  };
11893
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12446
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
11894
12447
  Card,
11895
12448
  {
11896
12449
  className: "p-3 cursor-grab active:cursor-grabbing hover:shadow-md transition-all duration-200 border border-border bg-card hover:bg-accent/50",
@@ -11898,28 +12451,28 @@ var PlanningView = ({
11898
12451
  onDragStart: handleCardDragStart,
11899
12452
  onClick: handleCardClick,
11900
12453
  style: { userSelect: "none" },
11901
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2 pointer-events-none", children: [
11902
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
11903
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h4", { className: "font-medium text-sm text-foreground line-clamp-1", children: task.name }),
11904
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Badge, { className: `text-xs ${getPriorityColor(task.priority || "medium")}`, children: task.priority?.[0]?.toUpperCase() })
12454
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2 pointer-events-none", children: [
12455
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
12456
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h4", { className: "font-medium text-sm text-foreground line-clamp-1", children: task.name }),
12457
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Badge, { className: `text-xs ${getPriorityColor(task.priority || "medium")}`, children: task.priority?.[0]?.toUpperCase() })
11905
12458
  ] }),
11906
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
11907
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-1", children: [
11908
- epic && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
11909
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-muted-foreground truncate", children: epic?.name })
12459
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
12460
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-1", children: [
12461
+ epic && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
12462
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-muted-foreground truncate", children: epic?.name })
11910
12463
  ] }),
11911
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-muted-foreground", children: getDisplayName(task.assignee?.value?.name) })
12464
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-muted-foreground", children: getDisplayName(task.assignee?.value?.name) })
11912
12465
  ] }),
11913
- showSprint && sprint && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
11914
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Calendar, { className: "h-3 w-3" }),
11915
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: sprint.name })
12466
+ showSprint && sprint && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
12467
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Calendar, { className: "h-3 w-3" }),
12468
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: sprint.name })
11916
12469
  ] })
11917
12470
  ] })
11918
12471
  }
11919
12472
  );
11920
12473
  };
11921
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { ref: containerRef, className: "h-full flex flex-col px-2 md:px-4 py-4", children: [
11922
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12474
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { ref: containerRef, className: "h-full flex flex-col px-2 md:px-4 py-4", children: [
12475
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
11923
12476
  DashboardHero,
11924
12477
  {
11925
12478
  title: "Sprint Planning",
@@ -11931,7 +12484,7 @@ var PlanningView = ({
11931
12484
  }
11932
12485
  }
11933
12486
  ) }),
11934
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12487
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
11935
12488
  "div",
11936
12489
  {
11937
12490
  className: "h-full",
@@ -11939,30 +12492,30 @@ var PlanningView = ({
11939
12492
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
11940
12493
  },
11941
12494
  children: [
11942
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "mb-4", children: [
11943
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center justify-between", children: [
11944
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-3", children: [
11945
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
11946
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Sprint Board" }),
11947
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
12495
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "mb-4", children: [
12496
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center justify-between", children: [
12497
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-3", children: [
12498
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12499
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Sprint Board" }),
12500
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
11948
12501
  selectedSprintIds?.length,
11949
12502
  "/3 selected"
11950
12503
  ] })
11951
12504
  ] }),
11952
- selectedSprintIds?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-2", children: [
11953
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
11954
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleSprints.map((sprint) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12505
+ selectedSprintIds?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-2", children: [
12506
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
12507
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleSprints.map((sprint) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
11955
12508
  "div",
11956
12509
  {
11957
12510
  className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
11958
12511
  children: [
11959
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "max-w-[80px] truncate", children: sprint.name }),
11960
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12512
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "max-w-[80px] truncate", children: sprint.name }),
12513
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
11961
12514
  "button",
11962
12515
  {
11963
12516
  onClick: () => toggleSprintView(sprint.id.toString()),
11964
12517
  className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
11965
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.X, { className: "h-4 w-4" })
12518
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.X, { className: "h-4 w-4" })
11966
12519
  }
11967
12520
  )
11968
12521
  ]
@@ -11971,20 +12524,20 @@ var PlanningView = ({
11971
12524
  )) })
11972
12525
  ] })
11973
12526
  ] }),
11974
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-2", children: [
11975
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12527
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-2", children: [
12528
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
11976
12529
  Button,
11977
12530
  {
11978
12531
  onClick: () => setIsAddSprintModalOpen(true),
11979
12532
  className: "bg-primary hover:bg-primary/90 text-primary-foreground gap-1",
11980
12533
  size: "sm",
11981
12534
  children: [
11982
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Plus, { className: "h-3 w-3" }),
12535
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Plus, { className: "h-3 w-3" }),
11983
12536
  "Add"
11984
12537
  ]
11985
12538
  }
11986
12539
  ),
11987
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12540
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
11988
12541
  Button,
11989
12542
  {
11990
12543
  onClick: () => setIsSprintSelectorOpen(!isSprintSelectorOpen),
@@ -11992,43 +12545,43 @@ var PlanningView = ({
11992
12545
  size: "sm",
11993
12546
  className: "gap-1",
11994
12547
  children: [
11995
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Calendar, { className: "h-3 w-3" }),
12548
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Calendar, { className: "h-3 w-3" }),
11996
12549
  isSprintSelectorOpen ? "Close" : "Select"
11997
12550
  ]
11998
12551
  }
11999
12552
  )
12000
12553
  ] })
12001
12554
  ] }) }),
12002
- isSprintSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12555
+ isSprintSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12003
12556
  "div",
12004
12557
  {
12005
12558
  className: "fixed inset-0 bg-black/20 z-[5]",
12006
12559
  onClick: () => setIsSprintSelectorOpen(false)
12007
12560
  }
12008
12561
  ),
12009
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12562
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12010
12563
  "div",
12011
12564
  {
12012
12565
  className: `fixed top-0 right-0 h-full w-80 bg-background border-l shadow-xl z-10 transition-all duration-300 ease-in-out ${isSprintSelectorOpen ? "translate-x-0 opacity-100 visible" : "translate-x-full opacity-0 invisible"}`,
12013
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
12014
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
12015
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center justify-between", children: [
12016
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Sprints" }),
12017
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12566
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
12567
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
12568
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center justify-between", children: [
12569
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Sprints" }),
12570
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12018
12571
  Button,
12019
12572
  {
12020
12573
  variant: "ghost",
12021
12574
  size: "sm",
12022
12575
  onClick: () => setIsSprintSelectorOpen(false),
12023
12576
  className: "h-8 w-8 p-0",
12024
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.X, { className: "h-4 w-4" })
12577
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.X, { className: "h-4 w-4" })
12025
12578
  }
12026
12579
  )
12027
12580
  ] }),
12028
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Choose up to 3 sprints to view in your planning board" })
12581
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Choose up to 3 sprints to view in your planning board" })
12029
12582
  ] }),
12030
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: [
12031
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex gap-1 mb-4 bg-muted p-1 rounded-lg", children: [
12583
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: [
12584
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex gap-1 mb-4 bg-muted p-1 rounded-lg", children: [
12032
12585
  { key: "all", label: "All", count: sprints.length },
12033
12586
  {
12034
12587
  key: "active",
@@ -12040,7 +12593,7 @@ var PlanningView = ({
12040
12593
  label: "Upcoming"
12041
12594
  // count: sprints.filter((s) => !s.isActive).length,
12042
12595
  }
12043
- ].map((filter) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12596
+ ].map((filter) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12044
12597
  Button,
12045
12598
  {
12046
12599
  variant: sprintFilter === filter.key ? "default" : "outline",
@@ -12056,18 +12609,18 @@ var PlanningView = ({
12056
12609
  },
12057
12610
  filter.key
12058
12611
  )) }),
12059
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto", children: displayedSprints.length > 0 ? displayedSprints.map((sprint) => {
12612
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto", children: displayedSprints.length > 0 ? displayedSprints.map((sprint) => {
12060
12613
  const isSelected = selectedSprintIds.includes(sprint.id.toString());
12061
12614
  const taskCount = tasks.filter(
12062
12615
  (task) => extractId(task.sprint) === sprint.id
12063
12616
  ).length;
12064
12617
  const canSelect = !isSelected && selectedSprintIds.length < 3;
12065
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12618
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12066
12619
  "div",
12067
12620
  {
12068
12621
  className: `p-3 rounded-lg border transition-all ${isSelected ? "bg-primary/10 border-primary/30" : canSelect ? "bg-card border-border hover:border-primary/50" : "bg-muted/30 border-border/30 opacity-60"}`,
12069
- children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-3", children: [
12070
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12622
+ children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-3", children: [
12623
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12071
12624
  Input,
12072
12625
  {
12073
12626
  value: sprintEditForm.name,
@@ -12076,7 +12629,7 @@ var PlanningView = ({
12076
12629
  placeholder: "Sprint name"
12077
12630
  }
12078
12631
  ),
12079
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12632
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12080
12633
  Textarea,
12081
12634
  {
12082
12635
  value: sprintEditForm.description,
@@ -12088,10 +12641,10 @@ var PlanningView = ({
12088
12641
  placeholder: "Sprint description"
12089
12642
  }
12090
12643
  ),
12091
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
12092
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
12093
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
12094
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12644
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
12645
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12646
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
12647
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12095
12648
  Input,
12096
12649
  {
12097
12650
  type: "date",
@@ -12104,9 +12657,9 @@ var PlanningView = ({
12104
12657
  }
12105
12658
  )
12106
12659
  ] }),
12107
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
12108
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
12109
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12660
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12661
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
12662
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12110
12663
  Input,
12111
12664
  {
12112
12665
  type: "date",
@@ -12120,20 +12673,20 @@ var PlanningView = ({
12120
12673
  )
12121
12674
  ] })
12122
12675
  ] }),
12123
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex gap-2", children: [
12124
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12676
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex gap-2", children: [
12677
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12125
12678
  Button,
12126
12679
  {
12127
12680
  size: "sm",
12128
12681
  onClick: () => handleSprintEditSave(),
12129
12682
  className: "flex-1",
12130
12683
  children: [
12131
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Check, { className: "h-3 w-3 mr-1" }),
12684
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Check, { className: "h-3 w-3 mr-1" }),
12132
12685
  "Save"
12133
12686
  ]
12134
12687
  }
12135
12688
  ),
12136
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12689
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12137
12690
  Button,
12138
12691
  {
12139
12692
  size: "sm",
@@ -12141,18 +12694,18 @@ var PlanningView = ({
12141
12694
  onClick: handleSprintEditCancel,
12142
12695
  className: "flex-1",
12143
12696
  children: [
12144
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.X, { className: "h-3 w-3 mr-1" }),
12697
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.X, { className: "h-3 w-3 mr-1" }),
12145
12698
  "Cancel"
12146
12699
  ]
12147
12700
  }
12148
12701
  )
12149
12702
  ] })
12150
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
12151
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-start justify-between", children: [
12152
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex-1 min-w-0", children: [
12153
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-2 mb-1", children: [
12154
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h4", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
12155
- isSprintActive(sprint) && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12703
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12704
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-start justify-between", children: [
12705
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex-1 min-w-0", children: [
12706
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-2 mb-1", children: [
12707
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h4", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
12708
+ isSprintActive(sprint) && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12156
12709
  Badge,
12157
12710
  {
12158
12711
  variant: "default",
@@ -12161,43 +12714,43 @@ var PlanningView = ({
12161
12714
  }
12162
12715
  )
12163
12716
  ] }),
12164
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: sprint.description }),
12165
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
12166
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "flex items-center gap-1", children: [
12167
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.CalendarDays, { className: "h-3 w-3" }),
12717
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: sprint.description }),
12718
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
12719
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "flex items-center gap-1", children: [
12720
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.CalendarDays, { className: "h-3 w-3" }),
12168
12721
  new Date(sprint.startDate).toLocaleDateString()
12169
12722
  ] }),
12170
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "flex items-center gap-1", children: [
12171
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.User, { className: "h-3 w-3" }),
12723
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "flex items-center gap-1", children: [
12724
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.User, { className: "h-3 w-3" }),
12172
12725
  taskCount,
12173
12726
  " tasks"
12174
12727
  ] })
12175
12728
  ] })
12176
12729
  ] }),
12177
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
12178
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12730
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
12731
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12179
12732
  Button,
12180
12733
  {
12181
12734
  size: "sm",
12182
12735
  variant: "ghost",
12183
12736
  onClick: () => handleSprintEditStart(sprint),
12184
12737
  className: "h-6 w-6 p-0",
12185
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Edit2, { className: "h-3 w-3" })
12738
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Edit2, { className: "h-3 w-3" })
12186
12739
  }
12187
12740
  ),
12188
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12741
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12189
12742
  Button,
12190
12743
  {
12191
12744
  size: "sm",
12192
12745
  variant: "ghost",
12193
12746
  onClick: () => onDeleteSprint(sprint.id.toString()),
12194
12747
  className: "h-6 w-6 p-0 text-destructive hover:text-destructive",
12195
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Trash2, { className: "h-3 w-3" })
12748
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Trash2, { className: "h-3 w-3" })
12196
12749
  }
12197
12750
  )
12198
12751
  ] })
12199
12752
  ] }),
12200
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex items-center justify-between mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12753
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex items-center justify-between mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12201
12754
  Button,
12202
12755
  {
12203
12756
  variant: isSelected ? "default" : "outline",
@@ -12205,21 +12758,21 @@ var PlanningView = ({
12205
12758
  className: "text-xs w-full h-8 flex items-center justify-center cursor-pointer",
12206
12759
  onClick: () => toggleSprintView(sprint.id.toString()),
12207
12760
  disabled: !isSelected && selectedSprintIds?.length >= 3,
12208
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "pointer-events-none select-none", children: isSelected ? "Deselect" : selectedSprintIds?.length >= 3 ? "Limit Reached" : "Select" })
12761
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "pointer-events-none select-none", children: isSelected ? "Deselect" : selectedSprintIds?.length >= 3 ? "Limit Reached" : "Select" })
12209
12762
  }
12210
12763
  ) })
12211
12764
  ] })
12212
12765
  },
12213
12766
  sprint.id
12214
12767
  );
12215
- }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "text-center py-8 text-muted-foreground", children: [
12216
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Calendar, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
12217
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("p", { className: "text-sm", children: [
12768
+ }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "text-center py-8 text-muted-foreground", children: [
12769
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Calendar, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
12770
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("p", { className: "text-sm", children: [
12218
12771
  'No sprints found for "',
12219
12772
  sprintFilter,
12220
12773
  '" filter'
12221
12774
  ] }),
12222
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12775
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12223
12776
  Button,
12224
12777
  {
12225
12778
  variant: "link",
@@ -12230,18 +12783,18 @@ var PlanningView = ({
12230
12783
  }
12231
12784
  )
12232
12785
  ] }) }),
12233
- selectedSprintIds?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "mt-4 p-4 bg-muted/50 rounded-lg border-2 border-dashed border-border", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "text-center", children: [
12234
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Calendar, { className: "h-6 w-6 mx-auto mb-2 text-muted-foreground" }),
12235
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "text-sm text-muted-foreground font-medium", children: "Select sprints to start planning" }),
12236
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "text-xs text-muted-foreground mt-1", children: "Choose up to 3 sprints to view alongside your backlog" })
12786
+ selectedSprintIds?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "mt-4 p-4 bg-muted/50 rounded-lg border-2 border-dashed border-border", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "text-center", children: [
12787
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Calendar, { className: "h-6 w-6 mx-auto mb-2 text-muted-foreground" }),
12788
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-sm text-muted-foreground font-medium", children: "Select sprints to start planning" }),
12789
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-xs text-muted-foreground mt-1", children: "Choose up to 3 sprints to view alongside your backlog" })
12237
12790
  ] }) })
12238
12791
  ] })
12239
12792
  ] })
12240
12793
  }
12241
12794
  )
12242
12795
  ] }),
12243
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-4 gap-6 h-full flex-1 min-h-0", children: [
12244
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "lg:col-span-1", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12796
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-4 gap-6 h-full flex-1 min-h-0", children: [
12797
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "lg:col-span-1", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12245
12798
  Card,
12246
12799
  {
12247
12800
  className: "p-4 h-full bg-card border-l-4 border-l-gray-400 shadow-sm hover:shadow-md transition-shadow duration-200 flex flex-col",
@@ -12253,78 +12806,78 @@ var PlanningView = ({
12253
12806
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 16rem)"
12254
12807
  },
12255
12808
  children: [
12256
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
12257
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: "Backlog" }),
12258
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-2", children: [
12259
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Badge, { variant: "secondary", className: "bg-muted text-muted-foreground", children: [
12809
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
12810
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: "Backlog" }),
12811
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-2", children: [
12812
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Badge, { variant: "secondary", className: "bg-muted text-muted-foreground", children: [
12260
12813
  backlogTasks?.length,
12261
12814
  " tasks"
12262
12815
  ] }),
12263
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Badge, { variant: "outline", className: "bg-gray-50 text-gray-700 border-gray-200", children: [
12816
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Badge, { variant: "outline", className: "bg-gray-50 text-gray-700 border-gray-200", children: [
12264
12817
  backlogStoryPoints,
12265
12818
  " pts"
12266
12819
  ] })
12267
12820
  ] })
12268
12821
  ] }),
12269
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12822
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12270
12823
  "div",
12271
12824
  {
12272
12825
  className: `flex-1 overflow-y-auto space-y-3 min-h-0 p-3 rounded transition-colors ${dragOverTarget === "backlog" ? "bg-primary/10" : ""}`,
12273
12826
  children: (() => {
12274
12827
  const { tasksByEpic, unassignedTasks } = getTasksByEpic(backlogTasks);
12275
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
12828
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
12276
12829
  Object.entries(tasksByEpic).map(([epicId, epicTasks]) => {
12277
12830
  const epic = getEpicById(epicId);
12278
12831
  if (!epic) return null;
12279
12832
  const isCollapsed = collapsedEpics.has(epicId);
12280
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12281
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12833
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2", children: [
12834
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12282
12835
  "div",
12283
12836
  {
12284
12837
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
12285
12838
  onClick: () => toggleEpicCollapse(epicId),
12286
12839
  children: [
12287
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
12288
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
12289
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "text-muted-foreground", children: [
12840
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
12841
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
12842
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "text-muted-foreground", children: [
12290
12843
  "(",
12291
12844
  epicTasks?.length,
12292
12845
  ")"
12293
12846
  ] }),
12294
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12847
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12295
12848
  ]
12296
12849
  }
12297
12850
  ),
12298
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CompactTaskCard, { task }, task.id)) })
12851
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CompactTaskCard, { task }, task.id)) })
12299
12852
  ] }, epicId);
12300
12853
  }),
12301
12854
  unassignedTasks?.length > 0 && (() => {
12302
12855
  const isCollapsed = collapsedEpics.has("no-epic");
12303
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12304
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12856
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2", children: [
12857
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12305
12858
  "div",
12306
12859
  {
12307
12860
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
12308
12861
  onClick: () => toggleEpicCollapse("no-epic"),
12309
12862
  children: [
12310
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
12311
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
12312
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "text-muted-foreground", children: [
12863
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
12864
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
12865
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "text-muted-foreground", children: [
12313
12866
  "(",
12314
12867
  unassignedTasks?.length,
12315
12868
  ")"
12316
12869
  ] }),
12317
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12870
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12318
12871
  ]
12319
12872
  }
12320
12873
  ),
12321
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CompactTaskCard, { task }, task.id)) })
12874
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CompactTaskCard, { task }, task.id)) })
12322
12875
  ] });
12323
12876
  })(),
12324
- backlogTasks?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here to move to backlog" }),
12325
- backlogTasks?.length > 0 && Object.keys(tasksByEpic).length === 0 && unassignedTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12326
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "text-xs text-muted-foreground mb-2", children: "Direct backlog tasks:" }),
12327
- backlogTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CompactTaskCard, { task }, task.id))
12877
+ backlogTasks?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here to move to backlog" }),
12878
+ backlogTasks?.length > 0 && Object.keys(tasksByEpic).length === 0 && unassignedTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2", children: [
12879
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-xs text-muted-foreground mb-2", children: "Direct backlog tasks:" }),
12880
+ backlogTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CompactTaskCard, { task }, task.id))
12328
12881
  ] })
12329
12882
  ] });
12330
12883
  })()
@@ -12341,7 +12894,7 @@ var PlanningView = ({
12341
12894
  (sum, task) => sum + (task?.storyPoints || 0),
12342
12895
  0
12343
12896
  );
12344
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12897
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12345
12898
  Card,
12346
12899
  {
12347
12900
  className: "p-4 h-full bg-card border-l-4 border-l-blue-500 shadow-sm hover:shadow-md transition-shadow duration-200 flex flex-col",
@@ -12353,10 +12906,10 @@ var PlanningView = ({
12353
12906
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 16rem)"
12354
12907
  },
12355
12908
  children: [
12356
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
12357
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: sprint.name }) }),
12358
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center gap-2", children: [
12359
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12909
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
12910
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: sprint.name }) }),
12911
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center gap-2", children: [
12912
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12360
12913
  Badge,
12361
12914
  {
12362
12915
  variant: "secondary",
@@ -12367,7 +12920,7 @@ var PlanningView = ({
12367
12920
  ]
12368
12921
  }
12369
12922
  ),
12370
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12923
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12371
12924
  Badge,
12372
12925
  {
12373
12926
  variant: "outline",
@@ -12378,7 +12931,7 @@ var PlanningView = ({
12378
12931
  ]
12379
12932
  }
12380
12933
  ),
12381
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12934
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12382
12935
  Button,
12383
12936
  {
12384
12937
  size: "sm",
@@ -12388,73 +12941,73 @@ var PlanningView = ({
12388
12941
  handleSprintEditStart(sprint);
12389
12942
  },
12390
12943
  className: "h-6 px-2",
12391
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Edit2, { className: "h-3 w-3" })
12944
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Edit2, { className: "h-3 w-3" })
12392
12945
  }
12393
12946
  ),
12394
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12947
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12395
12948
  Button,
12396
12949
  {
12397
12950
  size: "sm",
12398
12951
  variant: "ghost",
12399
12952
  onClick: () => onDeleteSprint(sprint.id.toString()),
12400
12953
  className: "h-6 px-2 text-destructive hover:text-destructive",
12401
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.Trash2, { className: "h-3 w-3" })
12954
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Trash2, { className: "h-3 w-3" })
12402
12955
  }
12403
12956
  )
12404
12957
  ] })
12405
12958
  ] }),
12406
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex-1 overflow-y-auto space-y-3 min-h-0", children: (() => {
12959
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex-1 overflow-y-auto space-y-3 min-h-0", children: (() => {
12407
12960
  const { tasksByEpic, unassignedTasks } = getTasksByEpic(sprintTasksFiltered);
12408
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
12961
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
12409
12962
  Object.entries(tasksByEpic).map(([epicId, epicTasks]) => {
12410
12963
  const epic = getEpicById(epicId);
12411
12964
  if (!epic) return null;
12412
12965
  const isCollapsed = collapsedEpics.has(epicId);
12413
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12414
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12966
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2", children: [
12967
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12415
12968
  "div",
12416
12969
  {
12417
12970
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
12418
12971
  onClick: () => toggleEpicCollapse(epicId),
12419
12972
  children: [
12420
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
12421
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
12422
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "text-muted-foreground", children: [
12973
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
12974
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
12975
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "text-muted-foreground", children: [
12423
12976
  "(",
12424
12977
  epicTasks?.length,
12425
12978
  ")"
12426
12979
  ] }),
12427
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12980
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12428
12981
  ]
12429
12982
  }
12430
12983
  ),
12431
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CompactTaskCard, { task }, task.id)) })
12984
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CompactTaskCard, { task }, task.id)) })
12432
12985
  ] }, epicId);
12433
12986
  }),
12434
12987
  unassignedTasks?.length > 0 && (() => {
12435
12988
  const isCollapsed = collapsedEpics.has("no-epic");
12436
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "space-y-2", children: [
12437
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
12989
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2", children: [
12990
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
12438
12991
  "div",
12439
12992
  {
12440
12993
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
12441
12994
  onClick: () => toggleEpicCollapse("no-epic"),
12442
12995
  children: [
12443
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
12444
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
12445
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "text-muted-foreground", children: [
12996
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
12997
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
12998
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "text-muted-foreground", children: [
12446
12999
  "(",
12447
13000
  unassignedTasks?.length,
12448
13001
  ")"
12449
13002
  ] }),
12450
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_lucide_react37.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
13003
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
12451
13004
  ]
12452
13005
  }
12453
13006
  ),
12454
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CompactTaskCard, { task }, task.id)) })
13007
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CompactTaskCard, { task }, task.id)) })
12455
13008
  ] });
12456
13009
  })(),
12457
- sprintTasksFiltered?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here" })
13010
+ sprintTasksFiltered?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here" })
12458
13011
  ] });
12459
13012
  })() })
12460
13013
  ]
@@ -12463,7 +13016,7 @@ var PlanningView = ({
12463
13016
  );
12464
13017
  })
12465
13018
  ] }),
12466
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
13019
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12467
13020
  AddSprintModal,
12468
13021
  {
12469
13022
  isOpen: isAddSprintModalOpen,
@@ -12478,9 +13031,9 @@ var PlanningView = ({
12478
13031
  };
12479
13032
 
12480
13033
  // src/components/Projects/TasksView.tsx
12481
- var import_react51 = require("react");
12482
- var import_lucide_react38 = require("lucide-react");
12483
- var import_jsx_runtime68 = require("react/jsx-runtime");
13034
+ var import_react52 = require("react");
13035
+ var import_lucide_react39 = require("lucide-react");
13036
+ var import_jsx_runtime69 = require("react/jsx-runtime");
12484
13037
  var formatDate = (date) => {
12485
13038
  return date.toLocaleDateString("en-US", {
12486
13039
  weekday: "short",
@@ -12518,7 +13071,7 @@ var isTomorrow = (date) => {
12518
13071
  return date.toDateString() === tomorrow.toDateString();
12519
13072
  };
12520
13073
  var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12521
- const [formData, setFormData] = (0, import_react51.useState)({
13074
+ const [formData, setFormData] = (0, import_react52.useState)({
12522
13075
  title: "",
12523
13076
  description: "",
12524
13077
  dueDate: "",
@@ -12532,7 +13085,7 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12532
13085
  reminderMinutes: 15,
12533
13086
  tags: ""
12534
13087
  });
12535
- const [isColleagueError, setIsColleagueError] = (0, import_react51.useState)(false);
13088
+ const [isColleagueError, setIsColleagueError] = (0, import_react52.useState)(false);
12536
13089
  const handleSubmit = (e) => {
12537
13090
  e.preventDefault();
12538
13091
  const colleague = colleagues.find((c) => c?.id.toString() === formData.colleagueId.toString());
@@ -12577,18 +13130,18 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12577
13130
  tags: ""
12578
13131
  });
12579
13132
  };
12580
- (0, import_react51.useEffect)(() => {
13133
+ (0, import_react52.useEffect)(() => {
12581
13134
  if (formData.colleagueId) {
12582
13135
  setIsColleagueError(false);
12583
13136
  }
12584
13137
  }, [formData.colleagueId]);
12585
13138
  const validColleagues = colleagues.filter(Boolean);
12586
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(DialogContent, { className: "max-w-2xl", children: [
12587
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DialogTitle, { children: "Add New Reminder" }) }),
12588
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
12589
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12590
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "title", children: "Title" }),
12591
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13139
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogContent, { className: "max-w-2xl", children: [
13140
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(DialogTitle, { children: "Add New Reminder" }) }),
13141
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
13142
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13143
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "title", children: "Title" }),
13144
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12592
13145
  Input,
12593
13146
  {
12594
13147
  id: "title",
@@ -12599,9 +13152,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12599
13152
  }
12600
13153
  )
12601
13154
  ] }) }),
12602
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12603
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "description", children: "Description" }),
12604
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13155
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13156
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "description", children: "Description" }),
13157
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12605
13158
  Textarea,
12606
13159
  {
12607
13160
  id: "description",
@@ -12612,10 +13165,10 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12612
13165
  }
12613
13166
  )
12614
13167
  ] }),
12615
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
12616
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12617
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "dueDate", children: "Due Date" }),
12618
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13168
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
13169
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13170
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "dueDate", children: "Due Date" }),
13171
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12619
13172
  Input,
12620
13173
  {
12621
13174
  id: "dueDate",
@@ -12626,9 +13179,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12626
13179
  }
12627
13180
  )
12628
13181
  ] }),
12629
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12630
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "dueTime", children: "Due Time (optional)" }),
12631
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13182
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13183
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "dueTime", children: "Due Time (optional)" }),
13184
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12632
13185
  Input,
12633
13186
  {
12634
13187
  id: "dueTime",
@@ -12639,9 +13192,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12639
13192
  )
12640
13193
  ] })
12641
13194
  ] }),
12642
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12643
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { className: `${isColleagueError ? "text-destructive" : ""}`, htmlFor: "colleague", children: "Assigned Colleague" }),
12644
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
13195
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13196
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { className: `${isColleagueError ? "text-destructive" : ""}`, htmlFor: "colleague", children: "Assigned Colleague" }),
13197
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
12645
13198
  Select,
12646
13199
  {
12647
13200
  value: formData.colleagueId,
@@ -12650,11 +13203,11 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12650
13203
  },
12651
13204
  required: true,
12652
13205
  children: [
12653
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13206
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12654
13207
  SelectTrigger,
12655
13208
  {
12656
13209
  className: `${isColleagueError ? "text-destructive border-red-500" : ""}`,
12657
- children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13210
+ children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12658
13211
  SelectValue,
12659
13212
  {
12660
13213
  className: `${isColleagueError ? "text-destructive border-red-500" : ""}`,
@@ -12664,15 +13217,15 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12664
13217
  )
12665
13218
  }
12666
13219
  ),
12667
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectContent, { children: validColleagues.map((colleague) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectItem, { value: colleague.id.toString(), children: colleague.name }, colleague.id)) })
13220
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectContent, { children: validColleagues.map((colleague) => /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectItem, { value: colleague.id.toString(), children: colleague.name }, colleague.id)) })
12668
13221
  ]
12669
13222
  }
12670
13223
  ),
12671
- isColleagueError && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-destructive text-sm", children: "Please select a digital colleague" })
13224
+ isColleagueError && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("p", { className: "text-destructive text-sm", children: "Please select a digital colleague" })
12672
13225
  ] }),
12673
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "space-y-2", children: [
12674
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-2", children: [
12675
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13226
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "space-y-2", children: [
13227
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-2", children: [
13228
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12676
13229
  "input",
12677
13230
  {
12678
13231
  type: "checkbox",
@@ -12682,12 +13235,12 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12682
13235
  className: "rounded border-border"
12683
13236
  }
12684
13237
  ),
12685
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "isRecurring", children: "Make this a recurring reminder" })
13238
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "isRecurring", children: "Make this a recurring reminder" })
12686
13239
  ] }),
12687
- formData.isRecurring && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
12688
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12689
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "recurrencePattern", children: "Frequency" }),
12690
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
13240
+ formData.isRecurring && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
13241
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13242
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "recurrencePattern", children: "Frequency" }),
13243
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
12691
13244
  Select,
12692
13245
  {
12693
13246
  value: formData.recurrencePattern,
@@ -12696,20 +13249,20 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12696
13249
  recurrencePattern: value
12697
13250
  }),
12698
13251
  children: [
12699
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectValue, {}) }),
12700
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(SelectContent, { children: [
12701
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectItem, { value: "daily", children: "Daily" }),
12702
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectItem, { value: "weekly", children: "Weekly" }),
12703
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectItem, { value: "monthly", children: "Monthly" }),
12704
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectItem, { value: "yearly", children: "Yearly" })
13252
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectValue, {}) }),
13253
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(SelectContent, { children: [
13254
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectItem, { value: "daily", children: "Daily" }),
13255
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectItem, { value: "weekly", children: "Weekly" }),
13256
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectItem, { value: "monthly", children: "Monthly" }),
13257
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectItem, { value: "yearly", children: "Yearly" })
12705
13258
  ] })
12706
13259
  ]
12707
13260
  }
12708
13261
  )
12709
13262
  ] }),
12710
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12711
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "recurrenceInterval", children: "Every" }),
12712
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13263
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13264
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "recurrenceInterval", children: "Every" }),
13265
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12713
13266
  Input,
12714
13267
  {
12715
13268
  id: "recurrenceInterval",
@@ -12722,15 +13275,15 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
12722
13275
  ] })
12723
13276
  ] })
12724
13277
  ] }),
12725
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex justify-end space-x-2", children: [
12726
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" }),
12727
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Button, { type: "submit", children: "Add Reminder" })
13278
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex justify-end space-x-2", children: [
13279
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" }),
13280
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Button, { type: "submit", children: "Add Reminder" })
12728
13281
  ] })
12729
13282
  ] })
12730
13283
  ] }) });
12731
13284
  };
12732
13285
  var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose }) => {
12733
- const [formData, setFormData] = (0, import_react51.useState)({
13286
+ const [formData, setFormData] = (0, import_react52.useState)({
12734
13287
  title: reminder.title,
12735
13288
  description: reminder.description,
12736
13289
  dueDate: reminder.dueDate?.toString().split("T")[0],
@@ -12764,12 +13317,12 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
12764
13317
  onClose();
12765
13318
  };
12766
13319
  const validColleagues = colleagues.filter(Boolean);
12767
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(DialogContent, { className: "max-w-2xl", children: [
12768
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DialogTitle, { children: "Edit Reminder" }) }),
12769
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
12770
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12771
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "edit-title", children: "Title" }),
12772
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13320
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(DialogContent, { className: "max-w-2xl", children: [
13321
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(DialogTitle, { children: "Edit Reminder" }) }),
13322
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
13323
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13324
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "edit-title", children: "Title" }),
13325
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12773
13326
  Input,
12774
13327
  {
12775
13328
  id: "edit-title",
@@ -12780,9 +13333,9 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
12780
13333
  }
12781
13334
  )
12782
13335
  ] }) }),
12783
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12784
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "edit-description", children: "Description" }),
12785
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13336
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13337
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "edit-description", children: "Description" }),
13338
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12786
13339
  Textarea,
12787
13340
  {
12788
13341
  id: "edit-description",
@@ -12793,10 +13346,10 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
12793
13346
  }
12794
13347
  )
12795
13348
  ] }),
12796
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
12797
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12798
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "edit-dueDate", children: "Due Date" }),
12799
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13349
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
13350
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13351
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "edit-dueDate", children: "Due Date" }),
13352
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12800
13353
  Input,
12801
13354
  {
12802
13355
  id: "edit-dueDate",
@@ -12807,9 +13360,9 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
12807
13360
  }
12808
13361
  )
12809
13362
  ] }),
12810
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
12811
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "edit-dueTime", children: "Due Time (optional)" }),
12812
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13363
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13364
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "edit-dueTime", children: "Due Time (optional)" }),
13365
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12813
13366
  Input,
12814
13367
  {
12815
13368
  id: "edit-dueTime",
@@ -12820,8 +13373,8 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
12820
13373
  )
12821
13374
  ] })
12822
13375
  ] }),
12823
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-2", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-2", children: [
12824
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13376
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "space-y-2", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-2", children: [
13377
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12825
13378
  "input",
12826
13379
  {
12827
13380
  type: "checkbox",
@@ -12831,17 +13384,17 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
12831
13384
  className: "rounded border-border"
12832
13385
  }
12833
13386
  ),
12834
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Label3, { htmlFor: "edit-isRecurring", children: "Make this a recurring reminder" })
13387
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Label3, { htmlFor: "edit-isRecurring", children: "Make this a recurring reminder" })
12835
13388
  ] }) }),
12836
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex justify-end space-x-2", children: [
12837
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
12838
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Button, { type: "submit", children: "Save Changes" })
13389
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex justify-end space-x-2", children: [
13390
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
13391
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Button, { type: "submit", children: "Save Changes" })
12839
13392
  ] })
12840
13393
  ] })
12841
13394
  ] }) });
12842
13395
  };
12843
13396
  var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }) => {
12844
- const [isEditing, setIsEditing] = (0, import_react51.useState)(false);
13397
+ const [isEditing, setIsEditing] = (0, import_react52.useState)(false);
12845
13398
  if (!reminder || !reminder.id) {
12846
13399
  return null;
12847
13400
  }
@@ -12859,8 +13412,8 @@ var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }
12859
13412
  if (tomorrow) return "Tomorrow";
12860
13413
  return formatDate(new Date(reminder.dueDate || ""));
12861
13414
  };
12862
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
12863
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13415
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
13416
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12864
13417
  EditReminderModal,
12865
13418
  {
12866
13419
  reminder,
@@ -12870,61 +13423,61 @@ var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }
12870
13423
  onClose: () => setIsEditing(false)
12871
13424
  }
12872
13425
  ),
12873
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13426
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12874
13427
  Card,
12875
13428
  {
12876
- children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CardContent, { className: "p-4", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-start justify-between", children: [
12877
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-start space-x-3 flex-1", children: [
12878
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13429
+ children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(CardContent, { className: "p-4", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-start justify-between", children: [
13430
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-start space-x-3 flex-1", children: [
13431
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12879
13432
  "button",
12880
13433
  {
12881
13434
  onClick: handleToggleComplete,
12882
13435
  className: "mt-1 text-primary hover:text-primary/80"
12883
13436
  }
12884
13437
  ),
12885
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex-1", children: [
12886
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex items-center space-x-2 mb-1", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13438
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex-1", children: [
13439
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "flex items-center space-x-2 mb-1", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12887
13440
  "h3",
12888
13441
  {
12889
13442
  children: reminder.title
12890
13443
  }
12891
13444
  ) }),
12892
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-sm text-muted-foreground mb-2", children: reminder.description }),
12893
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-4 text-sm text-muted-foreground", children: [
12894
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-1", children: [
12895
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Calendar, { className: "h-4 w-4" }),
12896
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: overdue ? "text-destructive font-medium" : "", children: getDateLabel() })
13445
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("p", { className: "text-sm text-muted-foreground mb-2", children: reminder.description }),
13446
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-4 text-sm text-muted-foreground", children: [
13447
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-1", children: [
13448
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react39.Calendar, { className: "h-4 w-4" }),
13449
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: overdue ? "text-destructive font-medium" : "", children: getDateLabel() })
12897
13450
  ] }),
12898
- reminder.dueTime && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-1", children: [
12899
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Clock, { className: "h-4 w-4" }),
12900
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: formatTime(reminder.dueTime) })
13451
+ reminder.dueTime && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-1", children: [
13452
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react39.Clock, { className: "h-4 w-4" }),
13453
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: formatTime(reminder.dueTime) })
12901
13454
  ] }),
12902
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-1", children: [
12903
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.User, { className: "h-4 w-4" }),
12904
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: typeof reminder.assignedColleague !== "number" ? reminder.assignedColleague.name : "Unknown Colleague" })
13455
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-1", children: [
13456
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react39.User, { className: "h-4 w-4" }),
13457
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: typeof reminder.assignedColleague !== "number" ? reminder.assignedColleague.name : "Unknown Colleague" })
12905
13458
  ] })
12906
13459
  ] })
12907
13460
  ] })
12908
13461
  ] }),
12909
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-1", children: [
12910
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13462
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-1", children: [
13463
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12911
13464
  Button,
12912
13465
  {
12913
13466
  variant: "ghost",
12914
13467
  size: "sm",
12915
13468
  onClick: () => setIsEditing(true),
12916
13469
  className: "h-8 w-8 p-0",
12917
- children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Edit2, { className: "h-4 w-4" })
13470
+ children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react39.Edit2, { className: "h-4 w-4" })
12918
13471
  }
12919
13472
  ),
12920
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13473
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12921
13474
  Button,
12922
13475
  {
12923
13476
  variant: "ghost",
12924
13477
  size: "sm",
12925
13478
  onClick: () => onDeleteReminder(reminder.id.toString()),
12926
13479
  className: "h-8 w-8 p-0 text-destructive hover:text-destructive/80",
12927
- children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Trash2, { className: "h-4 w-4" })
13480
+ children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react39.Trash2, { className: "h-4 w-4" })
12928
13481
  }
12929
13482
  )
12930
13483
  ] })
@@ -12940,15 +13493,15 @@ var TasksView = ({
12940
13493
  onUpdateReminder,
12941
13494
  onDeleteReminder
12942
13495
  }) => {
12943
- const [reminders, setReminders] = (0, import_react51.useState)(initialReminders.filter(Boolean));
12944
- const [colleagues, setColleagues] = (0, import_react51.useState)(initialColleagues.filter(Boolean));
12945
- const [filter, setFilter] = (0, import_react51.useState)("all");
12946
- const [searchTerm, setSearchTerm] = (0, import_react51.useState)("");
12947
- const [openAddReminderModal, setOpenAddReminderModal] = (0, import_react51.useState)(false);
12948
- (0, import_react51.useEffect)(() => {
13496
+ const [reminders, setReminders] = (0, import_react52.useState)(initialReminders.filter(Boolean));
13497
+ const [colleagues, setColleagues] = (0, import_react52.useState)(initialColleagues.filter(Boolean));
13498
+ const [filter, setFilter] = (0, import_react52.useState)("all");
13499
+ const [searchTerm, setSearchTerm] = (0, import_react52.useState)("");
13500
+ const [openAddReminderModal, setOpenAddReminderModal] = (0, import_react52.useState)(false);
13501
+ (0, import_react52.useEffect)(() => {
12949
13502
  setReminders(initialReminders.filter(Boolean));
12950
13503
  }, [initialReminders]);
12951
- (0, import_react51.useEffect)(() => {
13504
+ (0, import_react52.useEffect)(() => {
12952
13505
  setColleagues(initialColleagues.filter(Boolean));
12953
13506
  }, [initialColleagues]);
12954
13507
  const handleAddReminder = (newReminder) => {
@@ -13036,8 +13589,8 @@ var TasksView = ({
13036
13589
  // lastUpdated: new Date(),
13037
13590
  // isActive: true,
13038
13591
  };
13039
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
13040
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13592
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
13593
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
13041
13594
  DashboardHero,
13042
13595
  {
13043
13596
  title: "Task Reminders",
@@ -13051,8 +13604,8 @@ var TasksView = ({
13051
13604
  }
13052
13605
  }
13053
13606
  ),
13054
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "h-full bg-background", children: [
13055
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13607
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "h-full bg-background", children: [
13608
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
13056
13609
  AddReminderModal,
13057
13610
  {
13058
13611
  colleagues,
@@ -13061,48 +13614,48 @@ var TasksView = ({
13061
13614
  setOpen: setOpenAddReminderModal
13062
13615
  }
13063
13616
  ),
13064
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "p-6", children: [
13065
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [
13066
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
13067
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h1", { className: "text-2xl font-bold text-foreground", children: "Task Reminders" }),
13068
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-muted-foreground", children: "Manage your digital colleague task reminders" })
13617
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "p-6", children: [
13618
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [
13619
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { children: [
13620
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("h1", { className: "text-2xl font-bold text-foreground", children: "Task Reminders" }),
13621
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("p", { className: "text-muted-foreground", children: "Manage your digital colleague task reminders" })
13069
13622
  ] }),
13070
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
13623
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
13071
13624
  Button,
13072
13625
  {
13073
13626
  className: "flex items-center space-x-2",
13074
13627
  onClick: () => setOpenAddReminderModal(true),
13075
13628
  children: [
13076
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_lucide_react38.Plus, { className: "h-4 w-4" }),
13077
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: "Add Reminder" })
13629
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_lucide_react39.Plus, { className: "h-4 w-4" }),
13630
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: "Add Reminder" })
13078
13631
  ]
13079
13632
  }
13080
13633
  )
13081
13634
  ] }),
13082
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "grid grid-cols-5 gap-4 mb-6", children: [
13083
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "p-4", children: [
13084
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-2xl font-bold text-foreground", children: stats.total }),
13085
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-sm text-muted-foreground", children: "Total" })
13635
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "grid grid-cols-5 gap-4 mb-6", children: [
13636
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Card, { className: "p-4", children: [
13637
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-2xl font-bold text-foreground", children: stats.total }),
13638
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-sm text-muted-foreground", children: "Total" })
13086
13639
  ] }),
13087
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "p-4", children: [
13088
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-2xl font-bold text-primary", children: stats.overdue }),
13089
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-sm text-muted-foreground", children: "Pending" })
13640
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Card, { className: "p-4", children: [
13641
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-2xl font-bold text-primary", children: stats.overdue }),
13642
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-sm text-muted-foreground", children: "Pending" })
13090
13643
  ] }),
13091
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "p-4", children: [
13092
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-2xl font-bold text-success", children: stats.today }),
13093
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-sm text-muted-foreground", children: "Completed" })
13644
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Card, { className: "p-4", children: [
13645
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-2xl font-bold text-success", children: stats.today }),
13646
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-sm text-muted-foreground", children: "Completed" })
13094
13647
  ] }),
13095
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "p-4", children: [
13096
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-2xl font-bold text-destructive", children: stats.overdue }),
13097
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-sm text-muted-foreground", children: "Overdue" })
13648
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Card, { className: "p-4", children: [
13649
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-2xl font-bold text-destructive", children: stats.overdue }),
13650
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-sm text-muted-foreground", children: "Overdue" })
13098
13651
  ] }),
13099
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "p-4", children: [
13100
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-2xl font-bold text-warning", children: stats.today }),
13101
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-sm text-muted-foreground", children: "Today" })
13652
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Card, { className: "p-4", children: [
13653
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-2xl font-bold text-warning", children: stats.today }),
13654
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-sm text-muted-foreground", children: "Today" })
13102
13655
  ] })
13103
13656
  ] }),
13104
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center space-x-4 mb-6", children: [
13105
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13657
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex items-center space-x-4 mb-6", children: [
13658
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
13106
13659
  Input,
13107
13660
  {
13108
13661
  placeholder: "Search reminders...",
@@ -13111,25 +13664,25 @@ var TasksView = ({
13111
13664
  className: "max-w-md"
13112
13665
  }
13113
13666
  ) }),
13114
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Select, { value: filter, onValueChange: (value) => setFilter(value), children: [
13115
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectValue, {}) }),
13116
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(SelectContent, { children: [
13117
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(SelectItem, { value: "all", children: [
13667
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Select, { value: filter, onValueChange: (value) => setFilter(value), children: [
13668
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(SelectValue, {}) }),
13669
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(SelectContent, { children: [
13670
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(SelectItem, { value: "all", children: [
13118
13671
  "All (",
13119
13672
  stats.total,
13120
13673
  ")"
13121
13674
  ] }),
13122
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(SelectItem, { value: "overdue", children: [
13675
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(SelectItem, { value: "overdue", children: [
13123
13676
  "Overdue (",
13124
13677
  stats.overdue,
13125
13678
  ")"
13126
13679
  ] }),
13127
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(SelectItem, { value: "overdue", children: [
13680
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(SelectItem, { value: "overdue", children: [
13128
13681
  "Overdue (",
13129
13682
  stats.overdue,
13130
13683
  ")"
13131
13684
  ] }),
13132
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(SelectItem, { value: "today", children: [
13685
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(SelectItem, { value: "today", children: [
13133
13686
  "Today (",
13134
13687
  stats.today,
13135
13688
  ")"
@@ -13137,11 +13690,11 @@ var TasksView = ({
13137
13690
  ] })
13138
13691
  ] })
13139
13692
  ] }),
13140
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "space-y-4", children: sortedReminders.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(Card, { className: "p-8 text-center", children: [
13141
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "text-muted-foreground", children: searchTerm || filter !== "all" ? "No reminders match your filters" : "No reminders yet" }),
13142
- !searchTerm && filter === "all" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "text-sm text-muted-foreground/60 mt-2", children: "Create your first reminder to get started" })
13693
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "space-y-4", children: sortedReminders.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Card, { className: "p-8 text-center", children: [
13694
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "text-muted-foreground", children: searchTerm || filter !== "all" ? "No reminders match your filters" : "No reminders yet" }),
13695
+ !searchTerm && filter === "all" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("p", { className: "text-sm text-muted-foreground/60 mt-2", children: "Create your first reminder to get started" })
13143
13696
  ] }) : sortedReminders.map(
13144
- (reminder) => reminder && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
13697
+ (reminder) => reminder && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
13145
13698
  ReminderCard,
13146
13699
  {
13147
13700
  reminder,
@@ -13159,7 +13712,7 @@ var TasksView = ({
13159
13712
 
13160
13713
  // src/components/Projects/ProjectView.tsx
13161
13714
  var import_navigation = require("next/navigation");
13162
- var import_jsx_runtime69 = require("react/jsx-runtime");
13715
+ var import_jsx_runtime70 = require("react/jsx-runtime");
13163
13716
  function ProjectView({
13164
13717
  title = "",
13165
13718
  initialTasks = [],
@@ -13207,47 +13760,47 @@ function ProjectView({
13207
13760
  onCopilotClick,
13208
13761
  handleAddComment
13209
13762
  }) {
13210
- const [tasks, setTasks] = (0, import_react52.useState)(initialTasks);
13211
- const [epics, setEpics] = (0, import_react52.useState)(initialEpics);
13212
- const [sprints, setSprints] = (0, import_react52.useState)(initialSprints);
13213
- const [projects, setProjects] = (0, import_react52.useState)(initialProjects);
13214
- const [reminders, setReminders] = (0, import_react52.useState)(initialReminders);
13215
- const [colleagues, setColleagues] = (0, import_react52.useState)(initialColleagues);
13216
- const [users, setUsers] = (0, import_react52.useState)(initialUsers);
13217
- const [files, setFiles] = (0, import_react52.useState)(initialFiles);
13218
- const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react52.useState)(false);
13219
- const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react52.useState)(false);
13220
- const [selectedTask, setSelectedTask] = (0, import_react52.useState)(null);
13221
- const [selectedEpicForTask, setSelectedEpicForTask] = (0, import_react52.useState)(null);
13222
- const [draggedTask, setDraggedTask] = (0, import_react52.useState)(null);
13223
- const [currentView, setCurrentView] = (0, import_react52.useState)(initialView || "kanban");
13224
- const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react52.useState)(false);
13763
+ const [tasks, setTasks] = (0, import_react53.useState)(initialTasks);
13764
+ const [epics, setEpics] = (0, import_react53.useState)(initialEpics);
13765
+ const [sprints, setSprints] = (0, import_react53.useState)(initialSprints);
13766
+ const [projects, setProjects] = (0, import_react53.useState)(initialProjects);
13767
+ const [reminders, setReminders] = (0, import_react53.useState)(initialReminders);
13768
+ const [colleagues, setColleagues] = (0, import_react53.useState)(initialColleagues);
13769
+ const [users, setUsers] = (0, import_react53.useState)(initialUsers);
13770
+ const [files, setFiles] = (0, import_react53.useState)(initialFiles);
13771
+ const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react53.useState)(false);
13772
+ const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react53.useState)(false);
13773
+ const [selectedTask, setSelectedTask] = (0, import_react53.useState)(null);
13774
+ const [selectedEpicForTask, setSelectedEpicForTask] = (0, import_react53.useState)(null);
13775
+ const [draggedTask, setDraggedTask] = (0, import_react53.useState)(null);
13776
+ const [currentView, setCurrentView] = (0, import_react53.useState)(initialView || "kanban");
13777
+ const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react53.useState)(false);
13225
13778
  const router = (0, import_navigation.useRouter)();
13226
- (0, import_react52.useEffect)(() => {
13779
+ (0, import_react53.useEffect)(() => {
13227
13780
  setTasks(initialTasks);
13228
13781
  }, [initialTasks]);
13229
- (0, import_react52.useEffect)(() => {
13782
+ (0, import_react53.useEffect)(() => {
13230
13783
  setSprints(initialSprints);
13231
13784
  }, [initialSprints]);
13232
- (0, import_react52.useEffect)(() => {
13785
+ (0, import_react53.useEffect)(() => {
13233
13786
  setEpics(initialEpics);
13234
13787
  }, [initialEpics]);
13235
- (0, import_react52.useEffect)(() => {
13788
+ (0, import_react53.useEffect)(() => {
13236
13789
  setProjects(initialProjects);
13237
13790
  }, [initialProjects]);
13238
- (0, import_react52.useEffect)(() => {
13791
+ (0, import_react53.useEffect)(() => {
13239
13792
  setFiles(initialFiles);
13240
13793
  }, [initialFiles]);
13241
- (0, import_react52.useEffect)(() => {
13794
+ (0, import_react53.useEffect)(() => {
13242
13795
  setUsers(initialUsers);
13243
13796
  }, [initialUsers]);
13244
- (0, import_react52.useEffect)(() => {
13797
+ (0, import_react53.useEffect)(() => {
13245
13798
  setColleagues(initialColleagues);
13246
13799
  }, [initialColleagues]);
13247
- (0, import_react52.useEffect)(() => {
13800
+ (0, import_react53.useEffect)(() => {
13248
13801
  setReminders(initialReminders);
13249
13802
  }, [initialReminders]);
13250
- (0, import_react52.useEffect)(() => {
13803
+ (0, import_react53.useEffect)(() => {
13251
13804
  setCurrentView(initialView);
13252
13805
  }, [initialView]);
13253
13806
  const filteredTasks = tasks.filter((task) => {
@@ -13453,6 +14006,8 @@ function ProjectView({
13453
14006
  return "Documentation";
13454
14007
  case "epics":
13455
14008
  return "Epic Planning";
14009
+ case "gantt":
14010
+ return "Gantt Chart";
13456
14011
  default:
13457
14012
  return "Project Board";
13458
14013
  }
@@ -13468,8 +14023,8 @@ function ProjectView({
13468
14023
  const recentTeams = mockTeams.sort((a, b) => b.lastUsed.getTime() - a.lastUsed.getTime()).slice(0, 3);
13469
14024
  const hasMoreTeams = mockTeams.length > 3;
13470
14025
  const additionalTeams = mockTeams.slice(3);
13471
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(ManagementSidebar, { currentView, onViewChange: handleViewChange, children: [
13472
- currentView === "kanban" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "h-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14026
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(ManagementSidebar, { currentView, onViewChange: handleViewChange, children: [
14027
+ currentView === "kanban" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "h-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13473
14028
  KanbanBoardView,
13474
14029
  {
13475
14030
  initialProjects: projects,
@@ -13486,7 +14041,7 @@ function ProjectView({
13486
14041
  onAddComment: handleAddComment
13487
14042
  }
13488
14043
  ) }),
13489
- currentView === "planning" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14044
+ currentView === "planning" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13490
14045
  PlanningView,
13491
14046
  {
13492
14047
  tasks,
@@ -13499,7 +14054,7 @@ function ProjectView({
13499
14054
  onDeleteSprint: handleDeleteSprint
13500
14055
  }
13501
14056
  ) }),
13502
- currentView === "tasks" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14057
+ currentView === "tasks" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13503
14058
  TasksView,
13504
14059
  {
13505
14060
  initialReminders: reminders,
@@ -13509,7 +14064,7 @@ function ProjectView({
13509
14064
  onDeleteReminder: handleDeleteReminder
13510
14065
  }
13511
14066
  ) }),
13512
- currentView === "files" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14067
+ currentView === "files" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13513
14068
  FileView,
13514
14069
  {
13515
14070
  initialFiles: files,
@@ -13520,7 +14075,7 @@ function ProjectView({
13520
14075
  compactView: false
13521
14076
  }
13522
14077
  ) }),
13523
- currentView === "epics" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14078
+ currentView === "epics" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13524
14079
  EpicsView,
13525
14080
  {
13526
14081
  tasks,
@@ -13534,7 +14089,17 @@ function ProjectView({
13534
14089
  onDeleteEpic: handleDeleteEpic
13535
14090
  }
13536
14091
  ) }),
13537
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14092
+ currentView === "gantt" && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
14093
+ GanttView,
14094
+ {
14095
+ tasks,
14096
+ epics,
14097
+ sprints,
14098
+ onUpdateEpic: handleUpdateEpic,
14099
+ onTaskClick: handleTaskClick
14100
+ }
14101
+ ) }),
14102
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13538
14103
  AddTaskModal,
13539
14104
  {
13540
14105
  isOpen: isAddTaskModalOpen,
@@ -13546,7 +14111,7 @@ function ProjectView({
13546
14111
  defaultEpicId: selectedEpicForTask || void 0
13547
14112
  }
13548
14113
  ),
13549
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
14114
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13550
14115
  AddEpicModal,
13551
14116
  {
13552
14117
  isOpen: isAddEpicModalOpen,
@@ -13558,18 +14123,18 @@ function ProjectView({
13558
14123
  }
13559
14124
 
13560
14125
  // src/components/Projects/ProjectsIndexView.tsx
13561
- var import_react55 = require("react");
13562
- var import_react56 = require("motion/react");
14126
+ var import_react56 = require("react");
14127
+ var import_react57 = require("motion/react");
13563
14128
 
13564
14129
  // src/components/Projects/project-card.tsx
13565
- var import_react53 = require("motion/react");
13566
- var import_lucide_react39 = require("lucide-react");
14130
+ var import_react54 = require("motion/react");
14131
+ var import_lucide_react40 = require("lucide-react");
13567
14132
 
13568
14133
  // src/components/ui/progress.tsx
13569
- var React35 = __toESM(require("react"));
14134
+ var React36 = __toESM(require("react"));
13570
14135
  var ProgressPrimitive = __toESM(require("@radix-ui/react-progress"));
13571
- var import_jsx_runtime70 = require("react/jsx-runtime");
13572
- var Progress = React35.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
14136
+ var import_jsx_runtime71 = require("react/jsx-runtime");
14137
+ var Progress = React36.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13573
14138
  ProgressPrimitive.Root,
13574
14139
  {
13575
14140
  ref,
@@ -13578,7 +14143,7 @@ var Progress = React35.forwardRef(({ className, value, ...props }, ref) => /* @_
13578
14143
  className
13579
14144
  ),
13580
14145
  ...props,
13581
- children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
14146
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13582
14147
  ProgressPrimitive.Indicator,
13583
14148
  {
13584
14149
  className: "h-full w-full flex-1 bg-primary transition-all",
@@ -13590,54 +14155,54 @@ var Progress = React35.forwardRef(({ className, value, ...props }, ref) => /* @_
13590
14155
  Progress.displayName = ProgressPrimitive.Root.displayName;
13591
14156
 
13592
14157
  // src/components/Projects/project-card.tsx
13593
- var import_jsx_runtime71 = require("react/jsx-runtime");
14158
+ var import_jsx_runtime72 = require("react/jsx-runtime");
13594
14159
  function ProjectCard({ project, onOpen, onShare, className }) {
13595
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react53.motion.div, { whileHover: { scale: 1.02, y: -5 }, whileTap: { scale: 0.98 }, className, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Card, { className: "overflow-hidden rounded-3xl border hover:border-primary/50 transition-all duration-300", children: [
13596
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(CardHeader, { children: [
13597
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center justify-between", children: [
13598
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CardTitle, { children: project.name }),
13599
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Badge, { variant: "outline", className: "rounded-xl", children: [
14160
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_react54.motion.div, { whileHover: { scale: 1.02, y: -5 }, whileTap: { scale: 0.98 }, className, children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Card, { className: "overflow-hidden rounded-3xl border hover:border-primary/50 transition-all duration-300", children: [
14161
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(CardHeader, { children: [
14162
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center justify-between", children: [
14163
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CardTitle, { children: project.name }),
14164
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Badge, { variant: "outline", className: "rounded-xl", children: [
13600
14165
  "Due ",
13601
14166
  project.dueDate
13602
14167
  ] })
13603
14168
  ] }),
13604
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CardDescription, { children: project.description })
14169
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(CardDescription, { children: project.description })
13605
14170
  ] }),
13606
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(CardContent, { className: "space-y-4", children: [
13607
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "space-y-2", children: [
13608
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
13609
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { children: "Progress" }),
13610
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
14171
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(CardContent, { className: "space-y-4", children: [
14172
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-2", children: [
14173
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
14174
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: "Progress" }),
14175
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
13611
14176
  project.progress,
13612
14177
  "%"
13613
14178
  ] })
13614
14179
  ] }),
13615
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Progress, { value: project.progress, className: "h-2 rounded-xl" })
14180
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Progress, { value: project.progress, className: "h-2 rounded-xl" })
13616
14181
  ] }),
13617
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center justify-between text-sm text-muted-foreground", children: [
13618
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center", children: [
13619
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_lucide_react39.Users, { className: "mr-1 h-4 w-4" }),
14182
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center justify-between text-sm text-muted-foreground", children: [
14183
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center", children: [
14184
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.Users, { className: "mr-1 h-4 w-4" }),
13620
14185
  project.members,
13621
14186
  " members"
13622
14187
  ] }),
13623
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex items-center", children: [
13624
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_lucide_react39.FileText, { className: "mr-1 h-4 w-4" }),
14188
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center", children: [
14189
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.FileText, { className: "mr-1 h-4 w-4" }),
13625
14190
  project.files,
13626
14191
  " files"
13627
14192
  ] })
13628
14193
  ] })
13629
14194
  ] }),
13630
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(CardFooter, { className: "flex gap-2", children: [
13631
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Button, { variant: "secondary", className: "flex-1 rounded-2xl", onClick: () => onOpen?.(project), children: "Open Project" }),
13632
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Button, { variant: "outline", size: "icon", className: "rounded-2xl", onClick: () => onShare?.(project), children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_lucide_react39.Share2, { className: "h-4 w-4" }) })
14195
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(CardFooter, { className: "flex gap-2", children: [
14196
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Button, { variant: "secondary", className: "flex-1 rounded-2xl", onClick: () => onOpen?.(project), children: "Open Project" }),
14197
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Button, { variant: "outline", size: "icon", className: "rounded-2xl", onClick: () => onShare?.(project), children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.Share2, { className: "h-4 w-4" }) })
13633
14198
  ] })
13634
14199
  ] }) });
13635
14200
  }
13636
14201
 
13637
14202
  // src/components/Projects/project-form.tsx
13638
- var import_react54 = require("react");
13639
- var import_lucide_react40 = require("lucide-react");
13640
- var import_jsx_runtime72 = require("react/jsx-runtime");
14203
+ var import_react55 = require("react");
14204
+ var import_lucide_react41 = require("lucide-react");
14205
+ var import_jsx_runtime73 = require("react/jsx-runtime");
13641
14206
  var ProjectForm = ({
13642
14207
  onSubmit,
13643
14208
  onCancel,
@@ -13645,14 +14210,14 @@ var ProjectForm = ({
13645
14210
  initialData,
13646
14211
  className = ""
13647
14212
  }) => {
13648
- const [formData, setFormData] = (0, import_react54.useState)({
14213
+ const [formData, setFormData] = (0, import_react55.useState)({
13649
14214
  name: initialData?.name || "",
13650
14215
  description: initialData?.description || "",
13651
14216
  objectives: initialData?.objectives || "",
13652
14217
  workInstructions: initialData?.workInstructions || "",
13653
14218
  plan: initialData?.plan || false
13654
14219
  });
13655
- const [errors, setErrors] = (0, import_react54.useState)({});
14220
+ const [errors, setErrors] = (0, import_react55.useState)({});
13656
14221
  const validateForm = () => {
13657
14222
  const newErrors = {};
13658
14223
  if (!formData.name.trim()) {
@@ -13690,19 +14255,19 @@ var ProjectForm = ({
13690
14255
  setErrors((prev) => ({ ...prev, [field]: void 0 }));
13691
14256
  }
13692
14257
  };
13693
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: `w-full max-w-2xl ${className}`, children: [
13694
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "mb-4", children: [
13695
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center gap-2", children: [
13696
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.Plus, { className: "h-5 w-5" }),
14258
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: `w-full max-w-2xl ${className}`, children: [
14259
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "mb-4", children: [
14260
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "flex items-center gap-2", children: [
14261
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_lucide_react41.Plus, { className: "h-5 w-5" }),
13697
14262
  "Create New Project"
13698
14263
  ] }),
13699
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "text-sm text-gray-500", children: "Set up a new project with clear objectives and work instructions to help your team collaborate effectively." })
14264
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("p", { className: "text-sm text-gray-500", children: "Set up a new project with clear objectives and work instructions to help your team collaborate effectively." })
13700
14265
  ] }),
13701
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("form", { onSubmit: handleSubmit, children: [
13702
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-6", children: [
13703
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-2", children: [
13704
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Label3, { htmlFor: "name", className: "text-sm font-medium", children: "Project Name *" }),
13705
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
14266
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("form", { onSubmit: handleSubmit, children: [
14267
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "space-y-6", children: [
14268
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "space-y-2", children: [
14269
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Label3, { htmlFor: "name", className: "text-sm font-medium", children: "Project Name *" }),
14270
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13706
14271
  Input,
13707
14272
  {
13708
14273
  id: "name",
@@ -13715,11 +14280,11 @@ var ProjectForm = ({
13715
14280
  maxLength: 100
13716
14281
  }
13717
14282
  ),
13718
- errors.name && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "text-sm text-red-600", children: errors.name })
14283
+ errors.name && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("p", { className: "text-sm text-red-600", children: errors.name })
13719
14284
  ] }),
13720
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-2", children: [
13721
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Label3, { htmlFor: "name", className: "text-sm font-medium", children: "Project Description *" }),
13722
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
14285
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "space-y-2", children: [
14286
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Label3, { htmlFor: "name", className: "text-sm font-medium", children: "Project Description *" }),
14287
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13723
14288
  Input,
13724
14289
  {
13725
14290
  id: "description",
@@ -13732,11 +14297,11 @@ var ProjectForm = ({
13732
14297
  maxLength: 100
13733
14298
  }
13734
14299
  ),
13735
- errors.description && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "text-sm text-red-600", children: errors.description })
14300
+ errors.description && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("p", { className: "text-sm text-red-600", children: errors.description })
13736
14301
  ] }),
13737
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-2", children: [
13738
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Label3, { htmlFor: "objectives", className: "text-sm font-medium", children: "Project Objectives *" }),
13739
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
14302
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "space-y-2", children: [
14303
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Label3, { htmlFor: "objectives", className: "text-sm font-medium", children: "Project Objectives *" }),
14304
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13740
14305
  Textarea,
13741
14306
  {
13742
14307
  id: "objectives",
@@ -13748,17 +14313,17 @@ var ProjectForm = ({
13748
14313
  maxLength: 1e3
13749
14314
  }
13750
14315
  ),
13751
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex justify-between text-xs text-gray-500", children: [
13752
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: errors.objectives && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "text-red-600", children: errors.objectives }) }),
13753
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
14316
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "flex justify-between text-xs text-gray-500", children: [
14317
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: errors.objectives && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "text-red-600", children: errors.objectives }) }),
14318
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
13754
14319
  formData.objectives.length,
13755
14320
  "/1000"
13756
14321
  ] })
13757
14322
  ] })
13758
14323
  ] }),
13759
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-2", children: [
13760
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Label3, { htmlFor: "workInstructions", className: "text-sm font-medium", children: "Work Instructions *" }),
13761
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
14324
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "space-y-2", children: [
14325
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Label3, { htmlFor: "workInstructions", className: "text-sm font-medium", children: "Work Instructions *" }),
14326
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13762
14327
  Textarea,
13763
14328
  {
13764
14329
  id: "workInstructions",
@@ -13770,18 +14335,18 @@ var ProjectForm = ({
13770
14335
  maxLength: 2e3
13771
14336
  }
13772
14337
  ),
13773
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex justify-between text-xs text-gray-500", children: [
13774
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: errors.workInstructions && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "text-red-600", children: errors.workInstructions }) }),
13775
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
14338
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "flex justify-between text-xs text-gray-500", children: [
14339
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: errors.workInstructions && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "text-red-600", children: errors.workInstructions }) }),
14340
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
13776
14341
  formData.workInstructions.length,
13777
14342
  "/2000"
13778
14343
  ] })
13779
14344
  ] })
13780
14345
  ] }),
13781
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "space-y-3", children: [
13782
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Label3, { className: "text-sm font-medium", children: "Project Management" }),
13783
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex items-center space-x-2", children: [
13784
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
14346
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "space-y-3", children: [
14347
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Label3, { className: "text-sm font-medium", children: "Project Management" }),
14348
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "flex items-center space-x-2", children: [
14349
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13785
14350
  Checkbox,
13786
14351
  {
13787
14352
  id: "plan",
@@ -13790,13 +14355,13 @@ var ProjectForm = ({
13790
14355
  disabled: isLoading
13791
14356
  }
13792
14357
  ),
13793
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Label3, { htmlFor: "plan", className: "text-sm text-gray-700 cursor-pointer", children: "Enable project planning and management features" })
14358
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Label3, { htmlFor: "plan", className: "text-sm text-gray-700 cursor-pointer", children: "Enable project planning and management features" })
13794
14359
  ] }),
13795
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "text-xs text-gray-500 ml-6", children: "This will allow project managers to create sprints, assign tasks, and track progress." })
14360
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("p", { className: "text-xs text-gray-500 ml-6", children: "This will allow project managers to create sprints, assign tasks, and track progress." })
13796
14361
  ] })
13797
14362
  ] }),
13798
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "flex justify-end gap-3", children: [
13799
- onCancel && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
14363
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "flex justify-end gap-3", children: [
14364
+ onCancel && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
13800
14365
  Button,
13801
14366
  {
13802
14367
  type: "button",
@@ -13805,16 +14370,16 @@ var ProjectForm = ({
13805
14370
  disabled: isLoading,
13806
14371
  className: "flex items-center gap-2",
13807
14372
  children: [
13808
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.X, { className: "h-4 w-4" }),
14373
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_lucide_react41.X, { className: "h-4 w-4" }),
13809
14374
  "Cancel"
13810
14375
  ]
13811
14376
  }
13812
14377
  ),
13813
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Button, { type: "submit", disabled: isLoading, className: "flex items-center gap-2", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
13814
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.Loader2, { className: "h-4 w-4 animate-spin" }),
14378
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Button, { type: "submit", disabled: isLoading, className: "flex items-center gap-2", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
14379
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_lucide_react41.Loader2, { className: "h-4 w-4 animate-spin" }),
13815
14380
  "Creating..."
13816
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
13817
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react40.Plus, { className: "h-4 w-4" }),
14381
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
14382
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_lucide_react41.Plus, { className: "h-4 w-4" }),
13818
14383
  "Create Project"
13819
14384
  ] }) })
13820
14385
  ] })
@@ -13823,15 +14388,15 @@ var ProjectForm = ({
13823
14388
  };
13824
14389
 
13825
14390
  // src/components/Projects/ProjectsIndexView.tsx
13826
- var import_jsx_runtime73 = require("react/jsx-runtime");
14391
+ var import_jsx_runtime74 = require("react/jsx-runtime");
13827
14392
  function Home({
13828
14393
  projects = [],
13829
14394
  onAddProject,
13830
14395
  handleProjectOpen,
13831
14396
  handleProjectShare
13832
14397
  }) {
13833
- const [isNewProjectDialogOpen, setIsNewProjectDialogOpen] = (0, import_react55.useState)(false);
13834
- const [isSubmitting, setIsSubmitting] = (0, import_react55.useState)(false);
14398
+ const [isNewProjectDialogOpen, setIsNewProjectDialogOpen] = (0, import_react56.useState)(false);
14399
+ const [isSubmitting, setIsSubmitting] = (0, import_react56.useState)(false);
13835
14400
  const handleCreateProject = async (formData) => {
13836
14401
  setIsSubmitting(true);
13837
14402
  try {
@@ -13846,16 +14411,16 @@ function Home({
13846
14411
  const handleNewProjectClick = () => {
13847
14412
  setIsNewProjectDialogOpen(true);
13848
14413
  };
13849
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
13850
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_react56.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
13851
- import_react56.motion.div,
14414
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
14415
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_react57.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
14416
+ import_react57.motion.div,
13852
14417
  {
13853
14418
  initial: { opacity: 0, y: 10 },
13854
14419
  animate: { opacity: 1, y: 0 },
13855
14420
  exit: { opacity: 0, y: -10 },
13856
14421
  transition: { duration: 0.2 },
13857
14422
  children: [
13858
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
14423
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13859
14424
  DashboardHero,
13860
14425
  {
13861
14426
  title: "Project Management",
@@ -13867,9 +14432,9 @@ function Home({
13867
14432
  }
13868
14433
  }
13869
14434
  ),
13870
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("section", { className: "space-y-4 mt-8", children: [
13871
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("h2", { className: "text-2xl font-semibold", children: "Active Projects" }),
13872
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "grid grid-cols-1 gap-3 md:grid-cols-2 lg:grid-cols-3", children: projects.map((project) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
14435
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("section", { className: "space-y-4 mt-8", children: [
14436
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("h2", { className: "text-2xl font-semibold", children: "Active Projects" }),
14437
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "grid grid-cols-1 gap-3 md:grid-cols-2 lg:grid-cols-3", children: projects.map((project) => /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13873
14438
  ProjectCard,
13874
14439
  {
13875
14440
  project,
@@ -13883,12 +14448,12 @@ function Home({
13883
14448
  },
13884
14449
  "projects-index-view"
13885
14450
  ) }),
13886
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Dialog, { open: isNewProjectDialogOpen, onOpenChange: setIsNewProjectDialogOpen, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(DialogContent, { className: "max-w-3xl max-h-[90vh] overflow-y-auto", children: [
13887
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(DialogHeader, { className: "sr-only", children: [
13888
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(DialogTitle, { children: "Create New Project" }),
13889
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(DialogDescription, { children: "Fill out the form below to create a new project." })
14451
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Dialog, { open: isNewProjectDialogOpen, onOpenChange: setIsNewProjectDialogOpen, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(DialogContent, { className: "max-w-3xl max-h-[90vh] overflow-y-auto", children: [
14452
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(DialogHeader, { className: "sr-only", children: [
14453
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(DialogTitle, { children: "Create New Project" }),
14454
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(DialogDescription, { children: "Fill out the form below to create a new project." })
13890
14455
  ] }),
13891
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
14456
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13892
14457
  ProjectForm,
13893
14458
  {
13894
14459
  onSubmit: handleCreateProject,
@@ -13902,45 +14467,45 @@ function Home({
13902
14467
  }
13903
14468
 
13904
14469
  // src/components/Foundry/Views/TeamsIndexView.tsx
13905
- var import_react59 = require("react");
13906
- var import_react60 = require("motion/react");
14470
+ var import_react60 = require("react");
14471
+ var import_react61 = require("motion/react");
13907
14472
 
13908
14473
  // src/components/Projects/team-card.tsx
13909
- var import_react57 = require("motion/react");
13910
- var import_lucide_react41 = require("lucide-react");
13911
- var import_jsx_runtime74 = require("react/jsx-runtime");
14474
+ var import_react58 = require("motion/react");
14475
+ var import_lucide_react42 = require("lucide-react");
14476
+ var import_jsx_runtime75 = require("react/jsx-runtime");
13912
14477
  function TeamCard({ team, onOpen, className }) {
13913
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_react57.motion.div, { whileHover: { scale: 1.02, y: -5 }, whileTap: { scale: 0.98 }, className, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Card, { className: "overflow-hidden rounded-3xl border hover:border-primary/50 transition-all duration-300", children: [
13914
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(CardHeader, { children: [
13915
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(CardTitle, { className: "text-lg", children: team.name }),
13916
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(CardDescription, { className: "mt-1 text-sm", children: team.description })
14478
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_react58.motion.div, { whileHover: { scale: 1.02, y: -5 }, whileTap: { scale: 0.98 }, className, children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Card, { className: "overflow-hidden rounded-3xl border hover:border-primary/50 transition-all duration-300", children: [
14479
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(CardHeader, { children: [
14480
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CardTitle, { className: "text-lg", children: team.name }),
14481
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CardDescription, { className: "mt-1 text-sm", children: team.description })
13917
14482
  ] }),
13918
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(CardContent, { className: "space-y-4", children: [
13919
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
13920
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
13921
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex items-center gap-2", children: [
13922
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_lucide_react41.Users, { className: "h-4 w-4 text-blue-500" }),
13923
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { children: "Human" })
14483
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(CardContent, { className: "space-y-4", children: [
14484
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
14485
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
14486
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center gap-2", children: [
14487
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react42.Users, { className: "h-4 w-4 text-blue-500" }),
14488
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: "Human" })
13924
14489
  ] }),
13925
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "font-medium", children: team.humanColleagues })
14490
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "font-medium", children: team.humanColleagues })
13926
14491
  ] }),
13927
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
13928
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex items-center gap-2", children: [
13929
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_lucide_react41.Bot, { className: "h-4 w-4 text-purple-500" }),
13930
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { children: "Digital" })
14492
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
14493
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center gap-2", children: [
14494
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react42.Bot, { className: "h-4 w-4 text-purple-500" }),
14495
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: "Digital" })
13931
14496
  ] }),
13932
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "font-medium", children: team.digitalColleagues })
14497
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "font-medium", children: team.digitalColleagues })
13933
14498
  ] })
13934
14499
  ] }),
13935
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex items-center justify-between text-sm border-t pt-4", children: [
13936
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "flex items-center gap-2", children: [
13937
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_lucide_react41.FolderOpen, { className: "h-4 w-4 text-green-500" }),
13938
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { children: "Projects" })
14500
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center justify-between text-sm border-t pt-4", children: [
14501
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "flex items-center gap-2", children: [
14502
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_lucide_react42.FolderOpen, { className: "h-4 w-4 text-green-500" }),
14503
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: "Projects" })
13939
14504
  ] }),
13940
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "font-medium", children: team.projects })
14505
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "font-medium", children: team.projects })
13941
14506
  ] })
13942
14507
  ] }),
13943
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(CardFooter, { className: "flex gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
14508
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CardFooter, { className: "flex gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13944
14509
  Button,
13945
14510
  {
13946
14511
  variant: "secondary",
@@ -13953,14 +14518,14 @@ function TeamCard({ team, onOpen, className }) {
13953
14518
  }
13954
14519
 
13955
14520
  // src/components/Foundry/team-form.tsx
13956
- var import_react58 = require("react");
13957
- var import_lucide_react42 = require("lucide-react");
14521
+ var import_react59 = require("react");
14522
+ var import_lucide_react43 = require("lucide-react");
13958
14523
 
13959
14524
  // src/components/ui/switch.tsx
13960
- var React37 = __toESM(require("react"));
14525
+ var React38 = __toESM(require("react"));
13961
14526
  var SwitchPrimitives = __toESM(require("@radix-ui/react-switch"));
13962
- var import_jsx_runtime75 = require("react/jsx-runtime");
13963
- var Switch = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
14527
+ var import_jsx_runtime76 = require("react/jsx-runtime");
14528
+ var Switch = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13964
14529
  SwitchPrimitives.Root,
13965
14530
  {
13966
14531
  className: cn(
@@ -13969,7 +14534,7 @@ var Switch = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
13969
14534
  ),
13970
14535
  ...props,
13971
14536
  ref,
13972
- children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
14537
+ children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13973
14538
  SwitchPrimitives.Thumb,
13974
14539
  {
13975
14540
  className: cn(
@@ -13982,7 +14547,7 @@ var Switch = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
13982
14547
  Switch.displayName = SwitchPrimitives.Root.displayName;
13983
14548
 
13984
14549
  // src/components/Foundry/team-form.tsx
13985
- var import_jsx_runtime76 = require("react/jsx-runtime");
14550
+ var import_jsx_runtime77 = require("react/jsx-runtime");
13986
14551
  function TeamForm({
13987
14552
  team,
13988
14553
  onSave,
@@ -13993,7 +14558,7 @@ function TeamForm({
13993
14558
  cancelLabel = "Cancel",
13994
14559
  readOnly = false
13995
14560
  }) {
13996
- const [formData, setFormData] = (0, import_react58.useState)({
14561
+ const [formData, setFormData] = (0, import_react59.useState)({
13997
14562
  name: "",
13998
14563
  description: "",
13999
14564
  systemMsg: "",
@@ -14003,8 +14568,8 @@ function TeamForm({
14003
14568
  useChat: false,
14004
14569
  ...team
14005
14570
  });
14006
- const [editMode, setEditMode] = (0, import_react58.useState)(!readOnly);
14007
- (0, import_react58.useEffect)(() => {
14571
+ const [editMode, setEditMode] = (0, import_react59.useState)(!readOnly);
14572
+ (0, import_react59.useEffect)(() => {
14008
14573
  if (team) {
14009
14574
  setFormData(team);
14010
14575
  }
@@ -14031,16 +14596,16 @@ function TeamForm({
14031
14596
  };
14032
14597
  const formTitle = title || (!editMode ? "View Team" : team ? "Edit Team" : "Create New Team");
14033
14598
  const buttonLabel = submitLabel || (team ? "Update Team" : "Create Team");
14034
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
14035
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center gap-2", children: [
14036
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react42.Users, { className: "h-5 w-5" }),
14599
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
14600
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center gap-2", children: [
14601
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react43.Users, { className: "h-5 w-5" }),
14037
14602
  formTitle
14038
14603
  ] }),
14039
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
14040
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "space-y-4", children: [
14041
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "space-y-2", children: [
14042
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "name", children: "Team Name *" }),
14043
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14604
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
14605
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-4", children: [
14606
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-2", children: [
14607
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "name", children: "Team Name *" }),
14608
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14044
14609
  Input,
14045
14610
  {
14046
14611
  id: "name",
@@ -14052,9 +14617,9 @@ function TeamForm({
14052
14617
  }
14053
14618
  )
14054
14619
  ] }),
14055
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "space-y-2", children: [
14056
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "description", children: "Description" }),
14057
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14620
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-2", children: [
14621
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "description", children: "Description" }),
14622
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14058
14623
  Textarea,
14059
14624
  {
14060
14625
  id: "description",
@@ -14066,9 +14631,9 @@ function TeamForm({
14066
14631
  }
14067
14632
  )
14068
14633
  ] }),
14069
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "space-y-2", children: [
14070
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "systemMsg", children: "Ways of working" }),
14071
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14634
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-2", children: [
14635
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "systemMsg", children: "Ways of working" }),
14636
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14072
14637
  Textarea,
14073
14638
  {
14074
14639
  id: "systemMsg",
@@ -14081,11 +14646,11 @@ function TeamForm({
14081
14646
  )
14082
14647
  ] })
14083
14648
  ] }),
14084
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "space-y-4", children: [
14085
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("h3", { className: "text-lg font-semibold", children: "Team Configuration" }),
14086
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
14087
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center space-x-2", children: [
14088
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14649
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "space-y-4", children: [
14650
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("h3", { className: "text-lg font-semibold", children: "Team Configuration" }),
14651
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
14652
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center space-x-2", children: [
14653
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14089
14654
  Switch,
14090
14655
  {
14091
14656
  id: "useProjects",
@@ -14094,10 +14659,10 @@ function TeamForm({
14094
14659
  disabled: isLoading || !editMode
14095
14660
  }
14096
14661
  ),
14097
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "useProjects", children: "Enable Projects" })
14662
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "useProjects", children: "Enable Projects" })
14098
14663
  ] }),
14099
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center space-x-2", children: [
14100
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14664
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center space-x-2", children: [
14665
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14101
14666
  Switch,
14102
14667
  {
14103
14668
  id: "useKnowledge",
@@ -14106,10 +14671,10 @@ function TeamForm({
14106
14671
  disabled: isLoading || !editMode
14107
14672
  }
14108
14673
  ),
14109
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "useKnowledge", children: "Enable Knowledge Base" })
14674
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "useKnowledge", children: "Enable Knowledge Base" })
14110
14675
  ] }),
14111
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center space-x-2", children: [
14112
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14676
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center space-x-2", children: [
14677
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14113
14678
  Switch,
14114
14679
  {
14115
14680
  id: "useFiles",
@@ -14118,10 +14683,10 @@ function TeamForm({
14118
14683
  disabled: isLoading || !editMode
14119
14684
  }
14120
14685
  ),
14121
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "useFiles", children: "Enable File Management" })
14686
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "useFiles", children: "Enable File Management" })
14122
14687
  ] }),
14123
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex items-center space-x-2", children: [
14124
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14688
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex items-center space-x-2", children: [
14689
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14125
14690
  Switch,
14126
14691
  {
14127
14692
  id: "useChat",
@@ -14130,29 +14695,29 @@ function TeamForm({
14130
14695
  disabled: isLoading || !editMode
14131
14696
  }
14132
14697
  ),
14133
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Label3, { htmlFor: "useChat", children: "Enable Team Chat" })
14698
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Label3, { htmlFor: "useChat", children: "Enable Team Chat" })
14134
14699
  ] })
14135
14700
  ] })
14136
14701
  ] }),
14137
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "flex justify-end gap-2 pt-4 border-t", children: [
14138
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isLoading, children: !editMode ? "Close" : cancelLabel }),
14139
- !editMode ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Button, { type: "button", onClick: handleEditToggle, disabled: isLoading, className: "gap-2", children: [
14140
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_lucide_react42.Edit, { className: "h-4 w-4" }),
14702
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "flex justify-end gap-2 pt-4 border-t", children: [
14703
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Button, { type: "button", variant: "outline", onClick: onCancel, disabled: isLoading, children: !editMode ? "Close" : cancelLabel }),
14704
+ !editMode ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Button, { type: "button", onClick: handleEditToggle, disabled: isLoading, className: "gap-2", children: [
14705
+ /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_lucide_react43.Edit, { className: "h-4 w-4" }),
14141
14706
  "Edit"
14142
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Button, { type: "submit", disabled: isLoading || !formData.name?.trim(), children: isLoading ? "Saving..." : buttonLabel })
14707
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Button, { type: "submit", disabled: isLoading || !formData.name?.trim(), children: isLoading ? "Saving..." : buttonLabel })
14143
14708
  ] })
14144
14709
  ] })
14145
14710
  ] });
14146
14711
  }
14147
14712
 
14148
14713
  // src/components/Foundry/Views/TeamsIndexView.tsx
14149
- var import_jsx_runtime77 = require("react/jsx-runtime");
14714
+ var import_jsx_runtime78 = require("react/jsx-runtime");
14150
14715
  function TeamsIndexView({
14151
14716
  teams = [],
14152
14717
  onCreateTeam,
14153
14718
  onTeamOpen
14154
14719
  }) {
14155
- const [isNewTeamDialogOpen, setIsNewTeamDialogOpen] = (0, import_react59.useState)(false);
14720
+ const [isNewTeamDialogOpen, setIsNewTeamDialogOpen] = (0, import_react60.useState)(false);
14156
14721
  const handleNewTeamClick = () => {
14157
14722
  setIsNewTeamDialogOpen(true);
14158
14723
  };
@@ -14166,16 +14731,16 @@ function TeamsIndexView({
14166
14731
  const handleTeamOpen = (team) => {
14167
14732
  onTeamOpen?.(team);
14168
14733
  };
14169
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
14170
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react60.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
14171
- import_react60.motion.div,
14734
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
14735
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_react61.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
14736
+ import_react61.motion.div,
14172
14737
  {
14173
14738
  initial: { opacity: 0, y: 10 },
14174
14739
  animate: { opacity: 1, y: 0 },
14175
14740
  exit: { opacity: 0, y: -10 },
14176
14741
  transition: { duration: 0.2 },
14177
14742
  children: [
14178
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14743
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
14179
14744
  DashboardHero,
14180
14745
  {
14181
14746
  title: "My Teams",
@@ -14187,23 +14752,23 @@ function TeamsIndexView({
14187
14752
  }
14188
14753
  }
14189
14754
  ),
14190
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("section", { className: "space-y-4 mt-8", children: [
14191
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("h2", { className: "text-2xl font-semibold", children: "Active Teams" }),
14192
- teams.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "text-center py-12", children: [
14193
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("p", { className: "text-muted-foreground text-lg", children: "You're not part of any teams yet." }),
14194
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("p", { className: "text-muted-foreground text-sm mt-2", children: "Create a new team or ask to be added to an existing one." })
14195
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", children: teams.map((team) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(TeamCard, { team, onOpen: handleTeamOpen }, team.id)) })
14755
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("section", { className: "space-y-4 mt-8", children: [
14756
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("h2", { className: "text-2xl font-semibold", children: "Active Teams" }),
14757
+ teams.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "text-center py-12", children: [
14758
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("p", { className: "text-muted-foreground text-lg", children: "You're not part of any teams yet." }),
14759
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("p", { className: "text-muted-foreground text-sm mt-2", children: "Create a new team or ask to be added to an existing one." })
14760
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", children: teams.map((team) => /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(TeamCard, { team, onOpen: handleTeamOpen }, team.id)) })
14196
14761
  ] })
14197
14762
  ]
14198
14763
  },
14199
14764
  "teams-index-view"
14200
14765
  ) }),
14201
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Dialog, { open: isNewTeamDialogOpen, onOpenChange: setIsNewTeamDialogOpen, children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(DialogContent, { className: "max-w-4xl max-h-[90vh] overflow-y-auto", children: [
14202
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(DialogHeader, { children: [
14203
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(DialogTitle, { children: "Create New Team" }),
14204
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(DialogDescription, { children: "Set up a new team to collaborate with colleagues on projects." })
14766
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Dialog, { open: isNewTeamDialogOpen, onOpenChange: setIsNewTeamDialogOpen, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(DialogContent, { className: "max-w-4xl max-h-[90vh] overflow-y-auto", children: [
14767
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(DialogHeader, { children: [
14768
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DialogTitle, { children: "Create New Team" }),
14769
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DialogDescription, { children: "Set up a new team to collaborate with colleagues on projects." })
14205
14770
  ] }) }),
14206
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14771
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
14207
14772
  TeamForm,
14208
14773
  {
14209
14774
  title: "Create New Team",