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
@@ -38,9 +38,9 @@ __export(ProjectView_exports, {
38
38
  default: () => ProjectView
39
39
  });
40
40
  module.exports = __toCommonJS(ProjectView_exports);
41
- var import_react29 = require("react");
41
+ var import_react30 = require("react");
42
42
 
43
- // src/components/DigitalColleagues/ManagementSidebar.tsx
43
+ // src/components/Foundry/ManagementSidebar.tsx
44
44
  var import_lucide_react = require("lucide-react");
45
45
  var import_jsx_runtime = require("react/jsx-runtime");
46
46
  var viewConfig = [
@@ -79,6 +79,14 @@ var viewConfig = [
79
79
  label: "Tasks",
80
80
  color: "bg-brand-cyan",
81
81
  title: "Tasks"
82
+ },
83
+ {
84
+ key: "gantt",
85
+ icon: import_lucide_react.BarChart2,
86
+ label: "Gantt",
87
+ color: "bg-brand-blue",
88
+ title: "Gantt Chart",
89
+ hiddenOnMobile: true
82
90
  }
83
91
  ];
84
92
  var ManagementSidebar = ({
@@ -86,15 +94,15 @@ var ManagementSidebar = ({
86
94
  onViewChange,
87
95
  children
88
96
  }) => {
89
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex w-full h-screen", children: [
90
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-12 h-full bg-sidebar-background flex flex-col flex-shrink-0", children: viewConfig.map((view) => {
97
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex w-full h-full", children: [
98
+ /* @__PURE__ */ (0, import_jsx_runtime.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) => {
91
99
  const Icon2 = view.icon;
92
100
  const isActive = currentView === view.key;
93
101
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
94
102
  "button",
95
103
  {
96
104
  onClick: () => onViewChange(view.key),
97
- 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`,
105
+ 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" : ""}`,
98
106
  title: view.title,
99
107
  children: [
100
108
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon2, { className: "h-4 w-4 flex-shrink-0" }),
@@ -104,7 +112,7 @@ var ManagementSidebar = ({
104
112
  view.key
105
113
  );
106
114
  }) }),
107
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1 min-w-0 px-4 md:px-6 h-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-full", children }) })
115
+ /* @__PURE__ */ (0, import_jsx_runtime.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_runtime.jsx)("div", { className: "w-full h-full", children }) })
108
116
  ] });
109
117
  };
110
118
 
@@ -2853,7 +2861,7 @@ var DialogContent = React2.forwardRef(({ className, children, ...props }, ref) =
2853
2861
  {
2854
2862
  ref,
2855
2863
  className: cn(
2856
- "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",
2864
+ "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",
2857
2865
  className
2858
2866
  ),
2859
2867
  ...props,
@@ -4940,8 +4948,8 @@ function ToolbarPlugin() {
4940
4948
  blockNode = curr;
4941
4949
  }
4942
4950
  if (blockNode) {
4943
- const format2 = blockNode.getFormatType();
4944
- setAlignment(format2 || "left");
4951
+ const format3 = blockNode.getFormatType();
4952
+ setAlignment(format3 || "left");
4945
4953
  }
4946
4954
  const tag = anchorNode.getTopLevelElement()?.__tag;
4947
4955
  setBlockType(tag || "p");
@@ -5990,7 +5998,7 @@ var markdownToLexical = (markdown) => {
5990
5998
  var convertFileTypeToKnowledgeDocument = async (file) => {
5991
5999
  let content = "";
5992
6000
  let richTextContent = void 0;
5993
- let format2 = "text";
6001
+ let format3 = "text";
5994
6002
  if (file.url) {
5995
6003
  try {
5996
6004
  let url = file.url;
@@ -6011,18 +6019,18 @@ var convertFileTypeToKnowledgeDocument = async (file) => {
6011
6019
  console.warn("No URL provided for file:", file.name);
6012
6020
  }
6013
6021
  if (file.mimeType === "text/markdown") {
6014
- format2 = "richText";
6022
+ format3 = "richText";
6015
6023
  richTextContent = markdownToLexical(content);
6016
6024
  } else if (file.mimeType?.startsWith("text/")) {
6017
- format2 = "text";
6025
+ format3 = "text";
6018
6026
  }
6019
6027
  return {
6020
6028
  id: file.id.toString(),
6021
6029
  title: file.name,
6022
6030
  description: void 0,
6023
- content: format2 === "richText" ? void 0 : content,
6024
- richTextContent: format2 === "richText" ? richTextContent : void 0,
6025
- format: format2,
6031
+ content: format3 === "richText" ? void 0 : content,
6032
+ richTextContent: format3 === "richText" ? richTextContent : void 0,
6033
+ format: format3,
6026
6034
  metadata: {},
6027
6035
  createdAt: typeof file.createdAt === "string" ? new Date(file.createdAt) : file.createdAt,
6028
6036
  updatedAt: /* @__PURE__ */ new Date()
@@ -6072,8 +6080,8 @@ function FileEdit({ document: document2, onCancel, onSave, onFileUpdate }) {
6072
6080
  setRichTextContent(document2.richTextContent);
6073
6081
  }
6074
6082
  }, [document2]);
6075
- const formatIcon = (format2) => {
6076
- switch (format2) {
6083
+ const formatIcon = (format3) => {
6084
+ switch (format3) {
6077
6085
  case "markdown":
6078
6086
  case "mdx":
6079
6087
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react11.FileText, { className: "h-6 w-6 text-primary" });
@@ -6085,8 +6093,8 @@ function FileEdit({ document: document2, onCancel, onSave, onFileUpdate }) {
6085
6093
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react11.File, { className: "h-6 w-6 text-muted-foreground" });
6086
6094
  }
6087
6095
  };
6088
- const formatBadgeColor = (format2) => {
6089
- switch (format2) {
6096
+ const formatBadgeColor = (format3) => {
6097
+ switch (format3) {
6090
6098
  case "markdown":
6091
6099
  return "bg-primary/10 text-primary border-primary/20";
6092
6100
  case "mdx":
@@ -6934,15 +6942,16 @@ function useLocalStorage(key, initialValue) {
6934
6942
  return initialValue;
6935
6943
  }
6936
6944
  });
6937
- const setValue = (value) => {
6945
+ const setValue = (0, import_react18.useCallback)((value) => {
6938
6946
  try {
6939
- setStoredValue(value);
6947
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
6948
+ setStoredValue(valueToStore);
6940
6949
  if (typeof window !== "undefined") {
6941
- window.localStorage.setItem(key, JSON.stringify(value));
6950
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
6942
6951
  }
6943
6952
  } catch (error) {
6944
6953
  }
6945
- };
6954
+ }, [key, storedValue]);
6946
6955
  (0, import_react18.useEffect)(() => {
6947
6956
  setValue(storedValue);
6948
6957
  }, []);
@@ -7387,17 +7396,25 @@ var import_react22 = require("react");
7387
7396
  var import_lucide_react16 = require("lucide-react");
7388
7397
  var import_jsx_runtime45 = require("react/jsx-runtime");
7389
7398
  var EpicsView = ({
7399
+ projectId,
7390
7400
  tasks,
7391
7401
  epics,
7392
7402
  sprints,
7403
+ colleagues = [],
7393
7404
  onUpdateTask,
7394
7405
  onTaskClick,
7395
7406
  onAddTaskToEpic,
7396
7407
  onAddEpic,
7397
7408
  onUpdateEpic,
7398
- onDeleteEpic
7409
+ onDeleteEpic,
7410
+ onDeleteTask,
7411
+ onAddComment,
7412
+ onUploadFile,
7413
+ onDeleteFile,
7414
+ onFileUpdate
7399
7415
  }) => {
7400
7416
  const [availableEpics, setAvailableEpics] = (0, import_react22.useState)(epics);
7417
+ const [availableTasks, setAvailableTasks] = (0, import_react22.useState)(tasks);
7401
7418
  const [draggedTask, setDraggedTask] = (0, import_react22.useState)(null);
7402
7419
  const [editingEpic, setEditingEpic] = (0, import_react22.useState)(null);
7403
7420
  const [editForm, setEditForm] = (0, import_react22.useState)({});
@@ -7405,16 +7422,29 @@ var EpicsView = ({
7405
7422
  const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react22.useState)(false);
7406
7423
  const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react22.useState)(false);
7407
7424
  const [addTaskEpic, setAddTaskEpic] = (0, import_react22.useState)(null);
7425
+ const [selectedTask, setSelectedTask] = (0, import_react22.useState)(null);
7426
+ const [selectedEpicIds, setSelectedEpicIds] = useLocalStorage(
7427
+ `epicsView_selectedEpics${projectId ? `_${projectId}` : ""}`,
7428
+ []
7429
+ );
7430
+ const [isEpicSelectorOpen, setIsEpicSelectorOpen] = (0, import_react22.useState)(false);
7408
7431
  const heroRef = (0, import_react22.useRef)(null);
7409
7432
  const containerRef = (0, import_react22.useRef)(null);
7410
7433
  (0, import_react22.useEffect)(() => {
7411
7434
  setAvailableEpics(epics);
7435
+ const validIds = new Set(epics.map((e) => e.id.toString()));
7436
+ setSelectedEpicIds((prev) => prev.filter((id) => validIds.has(id)));
7412
7437
  }, [epics]);
7438
+ (0, import_react22.useEffect)(() => {
7439
+ setAvailableTasks(tasks);
7440
+ if (selectedTask) {
7441
+ setSelectedTask(tasks.find((t) => t.id === selectedTask.id) || null);
7442
+ }
7443
+ }, [tasks]);
7413
7444
  (0, import_react22.useEffect)(() => {
7414
7445
  const measureHeroHeight = () => {
7415
7446
  if (heroRef.current) {
7416
- const height = heroRef.current.offsetHeight;
7417
- setHeroHeight(height);
7447
+ setHeroHeight(heroRef.current.offsetHeight);
7418
7448
  }
7419
7449
  };
7420
7450
  measureHeroHeight();
@@ -7439,6 +7469,12 @@ var EpicsView = ({
7439
7469
  }, 300);
7440
7470
  return () => clearTimeout(timer);
7441
7471
  }, [editingEpic]);
7472
+ const visibleEpics = selectedEpicIds.length === 0 ? availableEpics : availableEpics.filter((e) => selectedEpicIds.includes(e.id.toString()));
7473
+ const toggleEpicView = (epicId) => {
7474
+ setSelectedEpicIds(
7475
+ (prev) => prev.includes(epicId) ? prev.filter((id) => id !== epicId) : [...prev, epicId]
7476
+ );
7477
+ };
7442
7478
  const handleDragStart = (task) => {
7443
7479
  setDraggedTask(task);
7444
7480
  };
@@ -7448,14 +7484,41 @@ var EpicsView = ({
7448
7484
  const handleDrop = (e, epicId) => {
7449
7485
  e.preventDefault();
7450
7486
  if (draggedTask && extractId(draggedTask.epic).toString() !== epicId) {
7451
- onUpdateTask(draggedTask.id.toString(), {
7452
- epic: Number(epicId)
7453
- });
7487
+ onUpdateTask(draggedTask.id.toString(), { epic: Number(epicId) });
7488
+ setAvailableTasks(
7489
+ (prev) => prev.map((t) => t.id === draggedTask.id ? { ...t, epic: Number(epicId) } : t)
7490
+ );
7454
7491
  setDraggedTask(null);
7455
7492
  }
7456
7493
  };
7457
7494
  const getTasksByEpic = (epicId) => {
7458
- return tasks.filter((task) => extractId(task.epic).toString() === epicId);
7495
+ return availableTasks.filter((task) => extractId(task.epic).toString() === epicId);
7496
+ };
7497
+ const handleTaskClick = (task) => {
7498
+ setSelectedTask(task);
7499
+ onTaskClick?.(task);
7500
+ };
7501
+ const handleUpdateTask = async (taskId, updates) => {
7502
+ setAvailableTasks(
7503
+ (prev) => prev.map((t) => t.id === Number(taskId) ? { ...t, ...updates } : t)
7504
+ );
7505
+ if (selectedTask?.id === Number(taskId)) {
7506
+ setSelectedTask((prev) => prev ? { ...prev, ...updates } : null);
7507
+ }
7508
+ await onUpdateTask(taskId, updates);
7509
+ };
7510
+ const handleDeleteTask = async (taskId) => {
7511
+ setAvailableTasks((prev) => prev.filter((t) => t.id !== Number(taskId)));
7512
+ if (selectedTask?.id === Number(taskId)) {
7513
+ setSelectedTask(null);
7514
+ }
7515
+ await onDeleteTask?.(taskId);
7516
+ };
7517
+ const handleRemoveFromEpic = (task) => {
7518
+ onUpdateTask(task.id.toString(), { epic: null });
7519
+ setAvailableTasks(
7520
+ (prev) => prev.map((t) => t.id === task.id ? { ...t, epic: null } : t)
7521
+ );
7459
7522
  };
7460
7523
  const handleEditEpic = (epic) => {
7461
7524
  setEditingEpic(epic.id.toString());
@@ -7464,19 +7527,15 @@ var EpicsView = ({
7464
7527
  description: epic.description,
7465
7528
  confidence: epic.confidence,
7466
7529
  phase: epic.phase
7467
- // progress: epic.progress || 0, // This is a number, not a string
7468
7530
  });
7469
7531
  };
7470
7532
  const handleSaveEdit = async () => {
7471
7533
  if (editingEpic && editForm.name) {
7472
7534
  await onUpdateEpic(editingEpic.toString(), editForm);
7473
7535
  setAvailableEpics(
7474
- (prev) => prev.map((epic) => {
7475
- if (epic.id.toString() === editingEpic) {
7476
- return { ...epic, ...editForm };
7477
- }
7478
- return epic;
7479
- })
7536
+ (prev) => prev.map(
7537
+ (epic) => epic.id.toString() === editingEpic ? { ...epic, ...editForm } : epic
7538
+ )
7480
7539
  );
7481
7540
  setEditingEpic(null);
7482
7541
  setEditForm({});
@@ -7492,6 +7551,7 @@ var EpicsView = ({
7492
7551
  )) {
7493
7552
  await onDeleteEpic(epicId);
7494
7553
  setAvailableEpics((prev) => prev.filter((epic) => epic.id.toString() !== epicId));
7554
+ setSelectedEpicIds((prev) => prev.filter((id) => id !== epicId));
7495
7555
  }
7496
7556
  };
7497
7557
  const getPhaseLabel = (phase) => {
@@ -7534,218 +7594,315 @@ var EpicsView = ({
7534
7594
  }
7535
7595
  }
7536
7596
  ) }),
7537
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7597
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7538
7598
  "div",
7539
7599
  {
7540
- className: "h-full overflow-y-auto",
7600
+ className: "h-full overflow-y-auto no-scrollbar",
7541
7601
  style: {
7542
7602
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
7543
7603
  },
7544
- children: /* @__PURE__ */ (0, import_jsx_runtime45.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) => {
7545
- const epicTasks = getTasksByEpic(epic.id.toString());
7546
- const totalPoints = epicTasks.reduce(
7547
- (sum, task) => sum + (task.storyPoints || 0),
7548
- 0
7549
- );
7550
- const availableHeight = heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 14rem)";
7551
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7552
- Card,
7553
- {
7554
- className: `flex flex-col ${editingEpic === epic.id.toString() ? "h-auto" : ""} bg-card shadow-sm`,
7555
- style: {
7556
- height: editingEpic === epic.id.toString() ? "auto" : availableHeight,
7557
- minHeight: "400px"
7558
- },
7559
- onDragOver: handleDragOver,
7560
- onDrop: (e) => handleDrop(e, epic.id.toString()),
7561
- children: [
7562
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "p-4 border-b border-border", children: editingEpic === epic.id.toString() ? (
7563
- /* Edit Mode */
7564
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "space-y-4", children: [
7565
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between", children: [
7566
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7567
- Input,
7568
- {
7569
- value: editForm.name || "",
7570
- onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
7571
- placeholder: "Epic name",
7572
- className: "font-semibold"
7573
- }
7574
- ),
7575
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex gap-2 ml-2", children: [
7576
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7577
- Button,
7578
- {
7579
- size: "sm",
7580
- variant: "ghost",
7581
- onClick: handleSaveEdit,
7582
- className: "p-1 h-8 w-8",
7583
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Check, { className: "h-4 w-4" })
7584
- }
7585
- ),
7604
+ children: [
7605
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "mb-4", children: [
7606
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between", children: [
7607
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-3", children: [
7608
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
7609
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Epics" }),
7610
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "text-xs text-muted-foreground", children: selectedEpicIds.length === 0 ? "All showing" : `${selectedEpicIds.length}/${availableEpics.length} selected` })
7611
+ ] }),
7612
+ selectedEpicIds.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-2", children: [
7613
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
7614
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleEpics.map((epic) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7615
+ "div",
7616
+ {
7617
+ className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
7618
+ children: [
7619
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
7620
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "max-w-[80px] truncate", children: epic.name }),
7586
7621
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7587
- Button,
7622
+ "button",
7588
7623
  {
7589
- size: "sm",
7590
- variant: "ghost",
7591
- onClick: handleCancelEdit,
7592
- className: "p-1 h-8 w-8",
7624
+ onClick: () => toggleEpicView(epic.id.toString()),
7625
+ className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
7593
7626
  children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.X, { className: "h-4 w-4" })
7594
7627
  }
7595
7628
  )
7596
- ] })
7629
+ ]
7630
+ },
7631
+ epic.id
7632
+ )) })
7633
+ ] })
7634
+ ] }),
7635
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7636
+ Button,
7637
+ {
7638
+ onClick: () => setIsEpicSelectorOpen(!isEpicSelectorOpen),
7639
+ variant: "outline",
7640
+ size: "sm",
7641
+ className: "gap-1",
7642
+ children: [
7643
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Layers, { className: "h-3 w-3" }),
7644
+ isEpicSelectorOpen ? "Close" : "Select"
7645
+ ]
7646
+ }
7647
+ )
7648
+ ] }) }),
7649
+ isEpicSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7650
+ "div",
7651
+ {
7652
+ className: "fixed inset-0 bg-black/20 z-[5]",
7653
+ onClick: () => setIsEpicSelectorOpen(false)
7654
+ }
7655
+ ),
7656
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7657
+ "div",
7658
+ {
7659
+ 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"}`,
7660
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
7661
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
7662
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between", children: [
7663
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Epics" }),
7664
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7665
+ Button,
7666
+ {
7667
+ variant: "ghost",
7668
+ size: "sm",
7669
+ onClick: () => setIsEpicSelectorOpen(false),
7670
+ className: "h-8 w-8 p-0",
7671
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.X, { className: "h-4 w-4" })
7672
+ }
7673
+ )
7597
7674
  ] }),
7598
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7599
- Textarea,
7675
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Filter which epics to display. Select none to show all." })
7676
+ ] }),
7677
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto no-scrollbar", children: availableEpics.length > 0 ? availableEpics.map((epic) => {
7678
+ const isSelected = selectedEpicIds.includes(epic.id.toString());
7679
+ const taskCount = availableTasks.filter(
7680
+ (t) => extractId(t.epic) === epic.id
7681
+ ).length;
7682
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7683
+ "div",
7600
7684
  {
7601
- value: editForm.description || "",
7602
- onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
7603
- placeholder: "Epic description",
7604
- className: "text-sm min-h-[60px]"
7605
- }
7606
- ),
7607
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
7608
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
7609
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
7610
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7611
- "select",
7612
- {
7613
- value: editForm.confidence || epic.confidence,
7614
- onChange: (e) => setEditForm({
7615
- ...editForm,
7616
- confidence: e.target.value
7617
- }),
7618
- 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",
7619
- children: [
7620
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("option", { value: "low", children: "Low" }),
7621
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("option", { value: "medium", children: "Medium" }),
7622
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("option", { value: "high", children: "High" })
7623
- ]
7624
- }
7625
- )
7626
- ] }),
7627
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
7628
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
7629
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7630
- "select",
7631
- {
7632
- value: editForm.phase?.toString() || epic.phase.toString(),
7633
- onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
7634
- 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",
7635
- children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("option", { value: phase.toString(), children: [
7636
- "Phase ",
7637
- phase
7638
- ] }, phase))
7639
- }
7640
- )
7641
- ] })
7642
- ] })
7643
- ] })
7644
- ) : (
7645
- /* Display Mode */
7646
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
7647
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
7648
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: `w-4 h-4 rounded-full ${epic.color}` }),
7649
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("h3", { className: "font-semibold text-foreground select-none flex-1", children: epic.name }),
7650
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex gap-1", children: [
7685
+ className: `p-3 rounded-lg border transition-all ${isSelected ? "bg-primary/10 border-primary/30 ring-1 ring-primary/20" : "bg-card border-border"}`,
7686
+ children: [
7687
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between", children: [
7688
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [
7689
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
7690
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "font-medium text-sm text-foreground truncate", children: epic.name })
7691
+ ] }),
7692
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "ml-2 flex items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Badge, { variant: "secondary", className: "text-xs", children: taskCount }) })
7693
+ ] }),
7694
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7695
+ Button,
7696
+ {
7697
+ variant: isSelected ? "default" : "outline",
7698
+ size: "sm",
7699
+ className: "w-full mt-2 text-xs h-7",
7700
+ onClick: () => toggleEpicView(epic.id.toString()),
7701
+ children: isSelected ? "Deselect" : "Select"
7702
+ }
7703
+ )
7704
+ ]
7705
+ },
7706
+ epic.id
7707
+ );
7708
+ }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "text-sm text-muted-foreground text-center py-8", children: "No epics yet. Add one to get started." }) }) })
7709
+ ] })
7710
+ }
7711
+ )
7712
+ ] }),
7713
+ /* @__PURE__ */ (0, import_jsx_runtime45.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) => {
7714
+ const epicTasks = getTasksByEpic(epic.id.toString());
7715
+ const totalPoints = epicTasks.reduce(
7716
+ (sum, task) => sum + (task.storyPoints || 0),
7717
+ 0
7718
+ );
7719
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7720
+ Card,
7721
+ {
7722
+ className: "flex flex-col bg-card shadow-sm",
7723
+ style: { maxHeight: "420px" },
7724
+ onDragOver: handleDragOver,
7725
+ onDrop: (e) => handleDrop(e, epic.id.toString()),
7726
+ children: [
7727
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "p-3 border-b border-border flex-shrink-0", children: editingEpic === epic.id.toString() ? (
7728
+ /* Edit Mode */
7729
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "space-y-3", children: [
7730
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center justify-between", children: [
7651
7731
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7652
- Button,
7732
+ Input,
7653
7733
  {
7654
- size: "sm",
7655
- variant: "ghost",
7656
- onClick: () => handleEditEpic(epic),
7657
- className: "p-1 h-8 w-8",
7658
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Edit2, { className: "h-3 w-3" })
7734
+ value: editForm.name || "",
7735
+ onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
7736
+ placeholder: "Epic name",
7737
+ className: "font-semibold text-sm"
7659
7738
  }
7660
7739
  ),
7661
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7662
- Button,
7663
- {
7664
- size: "sm",
7665
- variant: "ghost",
7666
- onClick: () => handleDeleteEpic(epic.id.toString()),
7667
- className: "p-1 h-8 w-8 hover:bg-destructive/10 hover:text-destructive",
7668
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Trash2, { className: "h-3 w-3" })
7669
- }
7670
- )
7671
- ] })
7672
- ] }),
7673
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex flex-wrap gap-2 mb-3", children: [
7674
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Badge, { className: `text-xs ${getConfidenceColor(epic.confidence)}`, children: [
7675
- epic.confidence,
7676
- " confidence"
7677
- ] }),
7678
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Badge, { variant: "outline", className: "text-xs", children: [
7679
- "Phase ",
7680
- epic.phase
7740
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex gap-1 ml-2", children: [
7741
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7742
+ Button,
7743
+ {
7744
+ size: "sm",
7745
+ variant: "ghost",
7746
+ onClick: handleSaveEdit,
7747
+ className: "p-1 h-7 w-7",
7748
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Check, { className: "h-3 w-3" })
7749
+ }
7750
+ ),
7751
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7752
+ Button,
7753
+ {
7754
+ size: "sm",
7755
+ variant: "ghost",
7756
+ onClick: handleCancelEdit,
7757
+ className: "p-1 h-7 w-7",
7758
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.X, { className: "h-3 w-3" })
7759
+ }
7760
+ )
7761
+ ] })
7681
7762
  ] }),
7682
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7683
- Badge,
7763
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7764
+ Textarea,
7684
7765
  {
7685
- variant: "secondary",
7686
- className: "text-xs bg-muted text-muted-foreground",
7687
- children: [
7688
- epicTasks.length,
7689
- " tasks"
7690
- ]
7766
+ value: editForm.description || "",
7767
+ onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
7768
+ placeholder: "Epic description",
7769
+ className: "text-xs min-h-[50px]"
7691
7770
  }
7692
7771
  ),
7772
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
7773
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
7774
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
7775
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7776
+ "select",
7777
+ {
7778
+ value: editForm.confidence || epic.confidence,
7779
+ onChange: (e) => setEditForm({
7780
+ ...editForm,
7781
+ confidence: e.target.value
7782
+ }),
7783
+ 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",
7784
+ children: [
7785
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("option", { value: "low", children: "Low" }),
7786
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("option", { value: "medium", children: "Medium" }),
7787
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("option", { value: "high", children: "High" })
7788
+ ]
7789
+ }
7790
+ )
7791
+ ] }),
7792
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
7793
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
7794
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7795
+ "select",
7796
+ {
7797
+ value: editForm.phase?.toString() || epic.phase.toString(),
7798
+ onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
7799
+ 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",
7800
+ children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("option", { value: phase.toString(), children: [
7801
+ "Phase ",
7802
+ phase
7803
+ ] }, phase))
7804
+ }
7805
+ )
7806
+ ] })
7807
+ ] })
7808
+ ] })
7809
+ ) : (
7810
+ /* Display Mode */
7811
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
7812
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-center gap-1.5 mb-1.5", children: [
7813
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
7814
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("h3", { className: "font-semibold text-foreground text-sm select-none flex-1 truncate", children: epic.name }),
7815
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex gap-0.5", children: [
7816
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7817
+ Button,
7818
+ {
7819
+ size: "sm",
7820
+ variant: "ghost",
7821
+ onClick: () => handleEditEpic(epic),
7822
+ className: "p-1 h-6 w-6",
7823
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Edit2, { className: "h-3 w-3" })
7824
+ }
7825
+ ),
7826
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7827
+ Button,
7828
+ {
7829
+ size: "sm",
7830
+ variant: "ghost",
7831
+ onClick: () => handleDeleteEpic(epic.id.toString()),
7832
+ className: "p-1 h-6 w-6 hover:bg-destructive/10 hover:text-destructive",
7833
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Trash2, { className: "h-3 w-3" })
7834
+ }
7835
+ )
7836
+ ] })
7837
+ ] }),
7838
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex flex-wrap gap-1 mb-2", children: [
7839
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Badge, { className: `text-xs px-1.5 py-0 ${getConfidenceColor(epic.confidence)}`, children: epic.confidence }),
7840
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Badge, { variant: "outline", className: "text-xs px-1.5 py-0", children: getPhaseLabel(epic.phase) }),
7841
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Badge, { variant: "secondary", className: "text-xs px-1.5 py-0 bg-muted text-muted-foreground", children: [
7842
+ epicTasks.length,
7843
+ "t \xB7 ",
7844
+ totalPoints,
7845
+ "pt"
7846
+ ] })
7847
+ ] }),
7848
+ epic.description && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "text-xs text-muted-foreground mb-2 select-none line-clamp-2", children: epic.description }),
7693
7849
  /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7694
- Badge,
7850
+ Button,
7695
7851
  {
7696
- variant: "secondary",
7697
- className: "text-xs bg-muted text-muted-foreground",
7852
+ onClick: () => {
7853
+ setIsAddTaskModalOpen(true);
7854
+ setAddTaskEpic(epic);
7855
+ },
7856
+ variant: "outline",
7857
+ size: "sm",
7858
+ className: "w-full gap-1 h-7 text-xs",
7698
7859
  children: [
7699
- totalPoints,
7700
- " pts"
7860
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Plus, { className: "h-3 w-3" }),
7861
+ "Add Task"
7701
7862
  ]
7702
7863
  }
7703
7864
  )
7704
- ] }),
7705
- epic.description && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "text-sm text-muted-foreground mb-3 select-none", children: epic.description }),
7706
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7707
- Button,
7708
- {
7709
- onClick: () => {
7710
- setIsAddTaskModalOpen(true);
7711
- setAddTaskEpic(epic);
7712
- },
7713
- variant: "outline",
7714
- size: "sm",
7715
- className: "w-full gap-2",
7716
- children: [
7717
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Plus, { className: "h-4 w-4" }),
7718
- "Add Task"
7719
- ]
7720
- }
7721
- )
7722
- ] })
7723
- ) }),
7724
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex-1 p-4 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7725
- "div",
7726
- {
7727
- className: `space-y-3 min-h-[200px] border-2 border-dashed rounded p-3 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
7728
- children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex flex-col items-center justify-center h-32 text-muted-foreground border-2 border-dashed border-border rounded-lg", children: [
7729
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Move, { className: "h-8 w-8 mb-2" }),
7730
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-sm select-none", children: "Drop tasks here" })
7731
- ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7732
- TaskCard,
7733
- {
7734
- task,
7735
- epic,
7736
- onDragStart: handleDragStart,
7737
- onTaskClick,
7738
- isCompact: true
7739
- },
7740
- task.id
7741
- ))
7742
- }
7743
- ) })
7744
- ]
7745
- },
7746
- epic.id
7747
- );
7748
- }) })
7865
+ ] })
7866
+ ) }),
7867
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex-1 p-2 overflow-y-auto no-scrollbar min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7868
+ "div",
7869
+ {
7870
+ className: `space-y-2 min-h-[80px] border-2 border-dashed rounded p-2 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
7871
+ children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex flex-col items-center justify-center h-16 text-muted-foreground", children: [
7872
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.Move, { className: "h-5 w-5 mb-1" }),
7873
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xs select-none", children: "Drop tasks here" })
7874
+ ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "relative group", children: [
7875
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7876
+ TaskCard,
7877
+ {
7878
+ task,
7879
+ epic,
7880
+ onDragStart: handleDragStart,
7881
+ onTaskClick: handleTaskClick,
7882
+ isCompact: true
7883
+ }
7884
+ ),
7885
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7886
+ "button",
7887
+ {
7888
+ onClick: (e) => {
7889
+ e.stopPropagation();
7890
+ handleRemoveFromEpic(task);
7891
+ },
7892
+ title: "Remove from epic",
7893
+ 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",
7894
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react16.X, { className: "h-3 w-3" })
7895
+ }
7896
+ )
7897
+ ] }, task.id))
7898
+ }
7899
+ ) })
7900
+ ]
7901
+ },
7902
+ epic.id
7903
+ );
7904
+ }) })
7905
+ ]
7749
7906
  }
7750
7907
  ) })
7751
7908
  ] }),
@@ -7768,21 +7925,417 @@ var EpicsView = ({
7768
7925
  defaultEpicId: addTaskEpic?.id.toString() || "",
7769
7926
  sprints
7770
7927
  }
7928
+ ),
7929
+ selectedTask && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7930
+ TaskDetailsModal,
7931
+ {
7932
+ isOpen: !!selectedTask,
7933
+ onClose: () => setSelectedTask(null),
7934
+ initialTask: selectedTask,
7935
+ epics: availableEpics,
7936
+ sprints,
7937
+ onUpdateTask: handleUpdateTask,
7938
+ onDeleteTask: handleDeleteTask,
7939
+ onAddComment,
7940
+ colleagues,
7941
+ onUploadFile,
7942
+ onDeleteFile,
7943
+ onFileUpdate
7944
+ }
7771
7945
  )
7772
7946
  ] });
7773
7947
  };
7774
7948
 
7775
- // src/components/Projects/PlanningView.tsx
7776
- var import_react24 = require("react");
7777
- var import_lucide_react18 = require("lucide-react");
7778
-
7779
- // src/components/Projects/AddSprintModal.tsx
7949
+ // src/components/Projects/GanttView.tsx
7780
7950
  var import_react23 = require("react");
7781
- var import_lucide_react17 = require("lucide-react");
7782
7951
  var import_date_fns = require("date-fns");
7952
+ var import_lucide_react17 = require("lucide-react");
7783
7953
  var import_jsx_runtime46 = require("react/jsx-runtime");
7954
+ var PHASE_LABELS = {
7955
+ 1: "Plan",
7956
+ 2: "Dev",
7957
+ 3: "Test",
7958
+ 4: "Deploy",
7959
+ 5: "Review",
7960
+ 6: "Maint.",
7961
+ 7: "Complete",
7962
+ 8: "Archive",
7963
+ 9: "Legacy"
7964
+ };
7965
+ var ZOOM_LEVELS = [
7966
+ { label: "Quarter", dayWidth: 3 },
7967
+ { label: "Month", dayWidth: 7 },
7968
+ { label: "Week", dayWidth: 14 },
7969
+ { label: "Day", dayWidth: 40 }
7970
+ ];
7971
+ var ROW_HEIGHT = 48;
7972
+ var TIME_HEADER_HEIGHT = 60;
7973
+ var GanttView = ({
7974
+ tasks,
7975
+ epics,
7976
+ sprints,
7977
+ onTaskClick
7978
+ }) => {
7979
+ const [dayWidth, setDayWidth] = (0, import_react23.useState)(7);
7980
+ const [isFullscreen, setIsFullscreen] = (0, import_react23.useState)(false);
7981
+ const scrollRef = (0, import_react23.useRef)(null);
7982
+ const heroRef = (0, import_react23.useRef)(null);
7983
+ const [heroHeight, setHeroHeight] = (0, import_react23.useState)(0);
7984
+ (0, import_react23.useEffect)(() => {
7985
+ const measure = () => {
7986
+ if (heroRef.current) setHeroHeight(heroRef.current.offsetHeight);
7987
+ };
7988
+ const observer = new ResizeObserver(measure);
7989
+ if (heroRef.current) observer.observe(heroRef.current);
7990
+ return () => observer.disconnect();
7991
+ }, []);
7992
+ const { timelineStart, timelineEnd, totalDays } = (0, import_react23.useMemo)(() => {
7993
+ if (epics.length === 0) {
7994
+ const today = /* @__PURE__ */ new Date();
7995
+ const start = (0, import_date_fns.addDays)(today, -14);
7996
+ const end = (0, import_date_fns.addDays)(today, 76);
7997
+ return { timelineStart: start, timelineEnd: end, totalDays: 90 };
7998
+ }
7999
+ const allDates = epics.flatMap((e) => [new Date(e.startDate), new Date(e.endDate)]);
8000
+ const minTime = Math.min(...allDates.map((d) => d.getTime()));
8001
+ const maxTime = Math.max(...allDates.map((d) => d.getTime()));
8002
+ const paddedStart = (0, import_date_fns.addDays)(new Date(minTime), -14);
8003
+ const paddedEnd = (0, import_date_fns.addDays)(new Date(maxTime), 14);
8004
+ return {
8005
+ timelineStart: paddedStart,
8006
+ timelineEnd: paddedEnd,
8007
+ totalDays: (0, import_date_fns.differenceInDays)(paddedEnd, paddedStart)
8008
+ };
8009
+ }, [epics]);
8010
+ const { groups, sortedKeys } = (0, import_react23.useMemo)(() => {
8011
+ const groups2 = {};
8012
+ epics.forEach((epic) => {
8013
+ if (!groups2[epic.name]) groups2[epic.name] = [];
8014
+ groups2[epic.name].push(epic);
8015
+ });
8016
+ Object.values(groups2).forEach((list) => list.sort((a, b) => a.phase - b.phase));
8017
+ const sortedKeys2 = Object.keys(groups2).sort((a, b) => {
8018
+ const aMin = Math.min(...groups2[a].map((e) => new Date(e.startDate).getTime()));
8019
+ const bMin = Math.min(...groups2[b].map((e) => new Date(e.startDate).getTime()));
8020
+ return aMin - bMin;
8021
+ });
8022
+ return { groups: groups2, sortedKeys: sortedKeys2 };
8023
+ }, [epics]);
8024
+ const realSprints = (0, import_react23.useMemo)(
8025
+ () => sprints.filter((s) => {
8026
+ const name = s.name.toLowerCase();
8027
+ return name !== "backlog" && name !== "all tasks";
8028
+ }),
8029
+ [sprints]
8030
+ );
8031
+ const monthHeaders = (0, import_react23.useMemo)(
8032
+ () => (0, import_date_fns.eachMonthOfInterval)({ start: timelineStart, end: timelineEnd }).map((month) => ({
8033
+ month,
8034
+ left: (0, import_date_fns.differenceInDays)(month, timelineStart) * dayWidth
8035
+ })),
8036
+ [timelineStart, timelineEnd, dayWidth]
8037
+ );
8038
+ const totalWidth = Math.max(totalDays * dayWidth, 600);
8039
+ const scrollToToday = (0, import_react23.useCallback)(() => {
8040
+ if (scrollRef.current) {
8041
+ const todayOffset = (0, import_date_fns.differenceInDays)(/* @__PURE__ */ new Date(), timelineStart) * dayWidth;
8042
+ scrollRef.current.scrollLeft = Math.max(0, todayOffset - 200);
8043
+ }
8044
+ }, [timelineStart, dayWidth]);
8045
+ const todayLeft = (0, import_date_fns.differenceInDays)(/* @__PURE__ */ new Date(), timelineStart) * dayWidth;
8046
+ const getEpicStats = (epic) => {
8047
+ const epicTasks = tasks.filter((t) => extractId(t.epic) === epic.id);
8048
+ const done = epicTasks.filter((t) => t.status === "done").length;
8049
+ const pct = epicTasks.length > 0 ? Math.round(done / epicTasks.length * 100) : 0;
8050
+ return { total: epicTasks.length, done, pct };
8051
+ };
8052
+ const getGroupStats = (epicList) => {
8053
+ const allTasks = epicList.flatMap(
8054
+ (e) => tasks.filter((t) => extractId(t.epic) === e.id)
8055
+ );
8056
+ const done = allTasks.filter((t) => t.status === "done").length;
8057
+ const pct = allTasks.length > 0 ? Math.round(done / allTasks.length * 100) : 0;
8058
+ return { total: allTasks.length, done, pct };
8059
+ };
8060
+ const isSprintActive = (sprint) => {
8061
+ const today = /* @__PURE__ */ new Date();
8062
+ try {
8063
+ return (0, import_date_fns.isWithinInterval)(today, {
8064
+ start: new Date(sprint.startDate),
8065
+ end: new Date(sprint.endDate)
8066
+ });
8067
+ } catch {
8068
+ return false;
8069
+ }
8070
+ };
8071
+ const chartContent = /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
8072
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "w-52 flex-shrink-0 border-r bg-background z-10 flex flex-col", children: [
8073
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8074
+ "div",
8075
+ {
8076
+ className: "border-b flex items-end pb-2 px-3 flex-shrink-0 bg-muted/20",
8077
+ style: { height: TIME_HEADER_HEIGHT },
8078
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-xs font-semibold text-muted-foreground tracking-wider uppercase", children: "Epic" })
8079
+ }
8080
+ ),
8081
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "overflow-y-auto flex-1", children: [
8082
+ sortedKeys.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex items-center justify-center h-24 text-sm text-muted-foreground", children: "No epics" }),
8083
+ sortedKeys.map((name) => {
8084
+ const stats = getGroupStats(groups[name]);
8085
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8086
+ "div",
8087
+ {
8088
+ className: "flex flex-col justify-center px-3 border-b",
8089
+ style: { height: ROW_HEIGHT },
8090
+ children: [
8091
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-sm font-medium truncate", title: name, children: name }),
8092
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
8093
+ stats.total,
8094
+ " task",
8095
+ stats.total !== 1 ? "s" : "",
8096
+ " \xB7 ",
8097
+ stats.pct,
8098
+ "%"
8099
+ ] })
8100
+ ]
8101
+ },
8102
+ name
8103
+ );
8104
+ })
8105
+ ] })
8106
+ ] }),
8107
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex-1 overflow-x-auto overflow-y-auto", ref: scrollRef, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { style: { width: totalWidth, position: "relative" }, children: [
8108
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8109
+ "div",
8110
+ {
8111
+ className: "sticky top-0 border-b bg-muted/20 z-20 flex-shrink-0",
8112
+ style: { height: TIME_HEADER_HEIGHT, width: totalWidth },
8113
+ children: [
8114
+ monthHeaders.map(({ month, left }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8115
+ "div",
8116
+ {
8117
+ className: "absolute top-2 text-xs font-semibold text-muted-foreground select-none",
8118
+ style: { left: left + 4 },
8119
+ children: (0, import_date_fns.format)(month, "MMM yyyy")
8120
+ },
8121
+ month.toISOString()
8122
+ )),
8123
+ realSprints.map((sprint) => {
8124
+ const start = new Date(sprint.startDate);
8125
+ const end = new Date(sprint.endDate);
8126
+ if (start > timelineEnd || end < timelineStart) return null;
8127
+ const left = Math.max(0, (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth);
8128
+ const right = Math.min(
8129
+ totalWidth,
8130
+ (0, import_date_fns.differenceInDays)(end, timelineStart) * dayWidth
8131
+ );
8132
+ const width = right - left;
8133
+ if (width <= 0) return null;
8134
+ const active = isSprintActive(sprint);
8135
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8136
+ "div",
8137
+ {
8138
+ 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"}`,
8139
+ style: { left, width, height: 22 },
8140
+ title: sprint.name,
8141
+ children: sprint.name
8142
+ },
8143
+ `header-sprint-${sprint.id}`
8144
+ );
8145
+ })
8146
+ ]
8147
+ }
8148
+ ),
8149
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { style: { position: "relative", width: totalWidth }, children: [
8150
+ realSprints.map((sprint) => {
8151
+ const start = new Date(sprint.startDate);
8152
+ const end = new Date(sprint.endDate);
8153
+ if (start > timelineEnd || end < timelineStart) return null;
8154
+ const left = Math.max(0, (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth);
8155
+ const right = Math.min(
8156
+ totalWidth,
8157
+ (0, import_date_fns.differenceInDays)(end, timelineStart) * dayWidth
8158
+ );
8159
+ const width = right - left;
8160
+ if (width <= 0 || !isSprintActive(sprint)) return null;
8161
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8162
+ "div",
8163
+ {
8164
+ className: "absolute inset-y-0 bg-primary/5 pointer-events-none",
8165
+ style: { left, width }
8166
+ },
8167
+ `bg-${sprint.id}`
8168
+ );
8169
+ }),
8170
+ realSprints.map((sprint) => {
8171
+ const left = (0, import_date_fns.differenceInDays)(new Date(sprint.startDate), timelineStart) * dayWidth;
8172
+ if (left < 0 || left > totalWidth) return null;
8173
+ const active = isSprintActive(sprint);
8174
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8175
+ "div",
8176
+ {
8177
+ className: `absolute inset-y-0 pointer-events-none ${active ? "border-l border-primary/40" : "border-l border-dashed border-border/60"}`,
8178
+ style: { left }
8179
+ },
8180
+ `line-${sprint.id}`
8181
+ );
8182
+ }),
8183
+ todayLeft >= 0 && todayLeft <= totalWidth && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8184
+ "div",
8185
+ {
8186
+ className: "absolute inset-y-0 pointer-events-none z-10",
8187
+ style: { left: todayLeft },
8188
+ children: [
8189
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "absolute inset-y-0 w-0.5 bg-destructive/50" }),
8190
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "absolute top-1 -translate-x-1/2 w-2 h-2 rounded-full bg-destructive" })
8191
+ ]
8192
+ }
8193
+ ),
8194
+ monthHeaders.map(({ month, left }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8195
+ "div",
8196
+ {
8197
+ className: "absolute inset-y-0 border-l border-border/30 pointer-events-none",
8198
+ style: { left }
8199
+ },
8200
+ `grid-${month.toISOString()}`
8201
+ )),
8202
+ sortedKeys.map((name) => {
8203
+ const epicList = groups[name];
8204
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8205
+ "div",
8206
+ {
8207
+ className: "border-b relative flex items-center",
8208
+ style: { height: ROW_HEIGHT },
8209
+ children: epicList.map((epic) => {
8210
+ const start = new Date(epic.startDate);
8211
+ const end = new Date(epic.endDate);
8212
+ const left = (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth;
8213
+ const width = Math.max(8, (0, import_date_fns.differenceInDays)(end, start) * dayWidth);
8214
+ const stats = getEpicStats(epic);
8215
+ const phaseLabel = PHASE_LABELS[epic.phase] ?? `Phase ${epic.phase}`;
8216
+ const showLabel = width >= 50;
8217
+ const tooltip = [
8218
+ `${epic.name} \xB7 ${phaseLabel}`,
8219
+ epic.description ? epic.description : null,
8220
+ `${(0, import_date_fns.format)(start, "dd MMM yyyy")} \u2192 ${(0, import_date_fns.format)(end, "dd MMM yyyy")}`,
8221
+ `${stats.total} tasks \xB7 ${stats.pct}% complete`
8222
+ ].filter(Boolean).join("\n");
8223
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8224
+ "div",
8225
+ {
8226
+ className: "absolute rounded overflow-hidden cursor-pointer hover:ring-2 hover:ring-white/40 transition-all",
8227
+ style: { left, width, height: 32, top: 8 },
8228
+ title: tooltip,
8229
+ children: [
8230
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8231
+ "div",
8232
+ {
8233
+ className: `absolute inset-0 ${epic.color}`,
8234
+ style: { opacity: 0.2 }
8235
+ }
8236
+ ),
8237
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8238
+ "div",
8239
+ {
8240
+ className: `absolute inset-y-0 left-0 ${epic.color} transition-all`,
8241
+ style: { width: `${stats.pct}%`, opacity: 0.85 }
8242
+ }
8243
+ ),
8244
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "absolute inset-0 flex items-center px-2 gap-1.5 z-10", children: [
8245
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-xs font-semibold text-white drop-shadow truncate", children: phaseLabel }),
8246
+ stats.total > 0 && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { className: "text-xs text-white/80 drop-shadow shrink-0", children: [
8247
+ stats.pct,
8248
+ "%"
8249
+ ] })
8250
+ ] })
8251
+ ]
8252
+ },
8253
+ epic.id
8254
+ );
8255
+ })
8256
+ },
8257
+ name
8258
+ );
8259
+ }),
8260
+ sortedKeys.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8261
+ "div",
8262
+ {
8263
+ className: "flex items-center justify-center text-sm text-muted-foreground",
8264
+ style: { height: 200 },
8265
+ children: "No epics to display on the timeline"
8266
+ }
8267
+ )
8268
+ ] })
8269
+ ] }) })
8270
+ ] });
8271
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: `flex flex-col ${isFullscreen ? "h-screen" : "h-full"} overflow-hidden`, children: [
8272
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8273
+ DashboardHero,
8274
+ {
8275
+ title: "Gantt Chart",
8276
+ description: "Epic timeline with sprint alignment and phase-based grouping.",
8277
+ gradient: "bg-gradient-to-r from-indigo-600 via-blue-600 to-cyan-600",
8278
+ badge: `${sortedKeys.length} epic${sortedKeys.length !== 1 ? "s" : ""}`
8279
+ }
8280
+ ) }),
8281
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center gap-2 px-4 py-2 border-b bg-background flex-shrink-0", children: [
8282
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react17.BarChart2, { className: "h-4 w-4 text-muted-foreground" }),
8283
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex items-center gap-1", children: ZOOM_LEVELS.map((z) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8284
+ Button,
8285
+ {
8286
+ variant: dayWidth === z.dayWidth ? "default" : "outline",
8287
+ size: "sm",
8288
+ className: "h-7 px-2 text-xs",
8289
+ onClick: () => setDayWidth(z.dayWidth),
8290
+ children: z.label
8291
+ },
8292
+ z.label
8293
+ )) }),
8294
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex-1" }),
8295
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8296
+ Button,
8297
+ {
8298
+ variant: "outline",
8299
+ size: "sm",
8300
+ className: "h-7 px-2 text-xs",
8301
+ onClick: scrollToToday,
8302
+ children: [
8303
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react17.Calendar, { className: "h-3 w-3 mr-1" }),
8304
+ "Today"
8305
+ ]
8306
+ }
8307
+ ),
8308
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8309
+ Button,
8310
+ {
8311
+ variant: "outline",
8312
+ size: "sm",
8313
+ className: "h-7 w-7 p-0",
8314
+ onClick: () => setIsFullscreen((v) => !v),
8315
+ title: isFullscreen ? "Exit fullscreen" : "Fullscreen",
8316
+ children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react17.Minimize2, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react17.Maximize2, { className: "h-3.5 w-3.5" })
8317
+ }
8318
+ )
8319
+ ] }),
8320
+ chartContent
8321
+ ] });
8322
+ if (isFullscreen) {
8323
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "fixed inset-0 z-50 bg-background overflow-hidden", children: inner });
8324
+ }
8325
+ return inner;
8326
+ };
8327
+
8328
+ // src/components/Projects/PlanningView.tsx
8329
+ var import_react25 = require("react");
8330
+ var import_lucide_react19 = require("lucide-react");
8331
+
8332
+ // src/components/Projects/AddSprintModal.tsx
8333
+ var import_react24 = require("react");
8334
+ var import_lucide_react18 = require("lucide-react");
8335
+ var import_date_fns2 = require("date-fns");
8336
+ var import_jsx_runtime47 = require("react/jsx-runtime");
7784
8337
  var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7785
- const [formData, setFormData] = (0, import_react23.useState)({
8338
+ const [formData, setFormData] = (0, import_react24.useState)({
7786
8339
  name: "",
7787
8340
  description: "",
7788
8341
  startDate: void 0,
@@ -7823,12 +8376,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7823
8376
  });
7824
8377
  onClose();
7825
8378
  };
7826
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(DialogContent, { className: "sm:max-w-md", children: [
7827
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(DialogTitle, { children: "Add New Sprint" }) }),
7828
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
7829
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "space-y-2", children: [
7830
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label2, { htmlFor: "name", children: "Sprint Name *" }),
7831
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8379
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(DialogContent, { className: "sm:max-w-md", children: [
8380
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DialogTitle, { children: "Add New Sprint" }) }),
8381
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
8382
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8383
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Label2, { htmlFor: "name", children: "Sprint Name *" }),
8384
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7832
8385
  Input,
7833
8386
  {
7834
8387
  id: "name",
@@ -7839,9 +8392,9 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7839
8392
  }
7840
8393
  )
7841
8394
  ] }),
7842
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "space-y-2", children: [
7843
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label2, { htmlFor: "description", children: "Description" }),
7844
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8395
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8396
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Label2, { htmlFor: "description", children: "Description" }),
8397
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7845
8398
  Textarea,
7846
8399
  {
7847
8400
  id: "description",
@@ -7852,11 +8405,11 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7852
8405
  }
7853
8406
  )
7854
8407
  ] }),
7855
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
7856
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "space-y-2", children: [
7857
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label2, { children: "Start Date *" }),
7858
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Popover, { children: [
7859
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8408
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
8409
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8410
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Label2, { children: "Start Date *" }),
8411
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Popover, { children: [
8412
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
7860
8413
  Button,
7861
8414
  {
7862
8415
  variant: "outline",
@@ -7865,12 +8418,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7865
8418
  !formData.startDate && "text-muted-foreground"
7866
8419
  ),
7867
8420
  children: [
7868
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react17.CalendarIcon, { className: "mr-2 h-4 w-4" }),
7869
- formData.startDate ? (0, import_date_fns.format)(formData.startDate, "PPP") : "Pick a date"
8421
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.CalendarIcon, { className: "mr-2 h-4 w-4" }),
8422
+ formData.startDate ? (0, import_date_fns2.format)(formData.startDate, "PPP") : "Pick a date"
7870
8423
  ]
7871
8424
  }
7872
8425
  ) }),
7873
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8426
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7874
8427
  Calendar4,
7875
8428
  {
7876
8429
  mode: "single",
@@ -7881,10 +8434,10 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7881
8434
  ) })
7882
8435
  ] })
7883
8436
  ] }),
7884
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "space-y-2", children: [
7885
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label2, { children: "End Date *" }),
7886
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Popover, { children: [
7887
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
8437
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8438
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Label2, { children: "End Date *" }),
8439
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Popover, { children: [
8440
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
7888
8441
  Button,
7889
8442
  {
7890
8443
  variant: "outline",
@@ -7893,12 +8446,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7893
8446
  !formData.endDate && "text-muted-foreground"
7894
8447
  ),
7895
8448
  children: [
7896
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react17.CalendarIcon, { className: "mr-2 h-4 w-4" }),
7897
- formData.endDate ? (0, import_date_fns.format)(formData.endDate, "PPP") : "Pick a date"
8449
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.CalendarIcon, { className: "mr-2 h-4 w-4" }),
8450
+ formData.endDate ? (0, import_date_fns2.format)(formData.endDate, "PPP") : "Pick a date"
7898
8451
  ]
7899
8452
  }
7900
8453
  ) }),
7901
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8454
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7902
8455
  Calendar4,
7903
8456
  {
7904
8457
  mode: "single",
@@ -7911,9 +8464,9 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7911
8464
  ] })
7912
8465
  ] })
7913
8466
  ] }),
7914
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex justify-end gap-3 pt-4", children: [
7915
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, children: "Cancel" }),
7916
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
8467
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex justify-end gap-3 pt-4", children: [
8468
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, children: "Cancel" }),
8469
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7917
8470
  Button,
7918
8471
  {
7919
8472
  type: "submit",
@@ -7927,7 +8480,7 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
7927
8480
  };
7928
8481
 
7929
8482
  // src/components/Projects/PlanningView.tsx
7930
- var import_jsx_runtime47 = require("react/jsx-runtime");
8483
+ var import_jsx_runtime48 = require("react/jsx-runtime");
7931
8484
  var PlanningView = ({
7932
8485
  tasks,
7933
8486
  epics,
@@ -7938,25 +8491,25 @@ var PlanningView = ({
7938
8491
  onUpdateSprint,
7939
8492
  onDeleteSprint
7940
8493
  }) => {
7941
- const [selectedSprintIds, setSelectedSprintIds] = (0, import_react24.useState)([]);
7942
- const [collapsedEpics, setCollapsedEpics] = (0, import_react24.useState)(/* @__PURE__ */ new Set());
7943
- const [draggedTask, setDraggedTask] = (0, import_react24.useState)(null);
7944
- const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react24.useState)(false);
7945
- const [dragOverTarget, setDragOverTarget] = (0, import_react24.useState)(null);
7946
- const [editingSprintId, setEditingSprintId] = (0, import_react24.useState)(null);
7947
- const [sprintEditForm, setSprintEditForm] = (0, import_react24.useState)({
8494
+ const [selectedSprintIds, setSelectedSprintIds] = (0, import_react25.useState)([]);
8495
+ const [collapsedEpics, setCollapsedEpics] = (0, import_react25.useState)(/* @__PURE__ */ new Set());
8496
+ const [draggedTask, setDraggedTask] = (0, import_react25.useState)(null);
8497
+ const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react25.useState)(false);
8498
+ const [dragOverTarget, setDragOverTarget] = (0, import_react25.useState)(null);
8499
+ const [editingSprintId, setEditingSprintId] = (0, import_react25.useState)(null);
8500
+ const [sprintEditForm, setSprintEditForm] = (0, import_react25.useState)({
7948
8501
  name: "",
7949
8502
  description: "",
7950
8503
  startDate: "",
7951
8504
  endDate: ""
7952
8505
  });
7953
- const [availableSprints, setAvailableSprints] = (0, import_react24.useState)([]);
7954
- const [sprintFilter, setSprintFilter] = (0, import_react24.useState)("upcoming");
7955
- const [isSprintSelectorOpen, setIsSprintSelectorOpen] = (0, import_react24.useState)(false);
7956
- const [heroHeight, setHeroHeight] = (0, import_react24.useState)(0);
7957
- const heroRef = (0, import_react24.useRef)(null);
7958
- const containerRef = (0, import_react24.useRef)(null);
7959
- (0, import_react24.useEffect)(() => {
8506
+ const [availableSprints, setAvailableSprints] = (0, import_react25.useState)([]);
8507
+ const [sprintFilter, setSprintFilter] = (0, import_react25.useState)("upcoming");
8508
+ const [isSprintSelectorOpen, setIsSprintSelectorOpen] = (0, import_react25.useState)(false);
8509
+ const [heroHeight, setHeroHeight] = (0, import_react25.useState)(0);
8510
+ const heroRef = (0, import_react25.useRef)(null);
8511
+ const containerRef = (0, import_react25.useRef)(null);
8512
+ (0, import_react25.useEffect)(() => {
7960
8513
  const savedSprintIds = localStorage.getItem("planningView_selectedSprints");
7961
8514
  if (savedSprintIds) {
7962
8515
  try {
@@ -7969,10 +8522,10 @@ var PlanningView = ({
7969
8522
  }
7970
8523
  }
7971
8524
  }, []);
7972
- (0, import_react24.useEffect)(() => {
8525
+ (0, import_react25.useEffect)(() => {
7973
8526
  localStorage.setItem("planningView_selectedSprints", JSON.stringify(selectedSprintIds));
7974
8527
  }, [selectedSprintIds]);
7975
- (0, import_react24.useEffect)(() => {
8528
+ (0, import_react25.useEffect)(() => {
7976
8529
  const updateHeroHeight = () => {
7977
8530
  if (heroRef.current) {
7978
8531
  setHeroHeight(heroRef.current.offsetHeight);
@@ -8033,7 +8586,7 @@ var PlanningView = ({
8033
8586
  });
8034
8587
  return { tasksByEpic, unassignedTasks };
8035
8588
  };
8036
- (0, import_react24.useEffect)(() => {
8589
+ (0, import_react25.useEffect)(() => {
8037
8590
  setAvailableSprints(sprints);
8038
8591
  }, [sprints]);
8039
8592
  const displayedSprints = availableSprints.filter((sprint) => {
@@ -8156,7 +8709,7 @@ var PlanningView = ({
8156
8709
  e.dataTransfer.setData("text/plain", task.id.toString());
8157
8710
  handleDragStart(e, task);
8158
8711
  };
8159
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8712
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8160
8713
  Card,
8161
8714
  {
8162
8715
  className: "p-3 cursor-grab active:cursor-grabbing hover:shadow-md transition-all duration-200 border border-border bg-card hover:bg-accent/50",
@@ -8164,28 +8717,28 @@ var PlanningView = ({
8164
8717
  onDragStart: handleCardDragStart,
8165
8718
  onClick: handleCardClick,
8166
8719
  style: { userSelect: "none" },
8167
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2 pointer-events-none", children: [
8168
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
8169
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h4", { className: "font-medium text-sm text-foreground line-clamp-1", children: task.name }),
8170
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Badge, { className: `text-xs ${getPriorityColor(task.priority || "medium")}`, children: task.priority?.[0]?.toUpperCase() })
8720
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2 pointer-events-none", children: [
8721
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
8722
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h4", { className: "font-medium text-sm text-foreground line-clamp-1", children: task.name }),
8723
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Badge, { className: `text-xs ${getPriorityColor(task.priority || "medium")}`, children: task.priority?.[0]?.toUpperCase() })
8171
8724
  ] }),
8172
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
8173
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1", children: [
8174
- epic && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
8175
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-muted-foreground truncate", children: epic?.name })
8725
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
8726
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-1", children: [
8727
+ epic && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
8728
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-muted-foreground truncate", children: epic?.name })
8176
8729
  ] }),
8177
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-muted-foreground", children: getDisplayName(task.assignee?.value?.name) })
8730
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-muted-foreground", children: getDisplayName(task.assignee?.value?.name) })
8178
8731
  ] }),
8179
- showSprint && sprint && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
8180
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Calendar, { className: "h-3 w-3" }),
8181
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: sprint.name })
8732
+ showSprint && sprint && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
8733
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Calendar, { className: "h-3 w-3" }),
8734
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: sprint.name })
8182
8735
  ] })
8183
8736
  ] })
8184
8737
  }
8185
8738
  );
8186
8739
  };
8187
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { ref: containerRef, className: "h-full flex flex-col px-2 md:px-4 py-4", children: [
8188
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8740
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { ref: containerRef, className: "h-full flex flex-col px-2 md:px-4 py-4", children: [
8741
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8189
8742
  DashboardHero,
8190
8743
  {
8191
8744
  title: "Sprint Planning",
@@ -8197,7 +8750,7 @@ var PlanningView = ({
8197
8750
  }
8198
8751
  }
8199
8752
  ) }),
8200
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8753
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8201
8754
  "div",
8202
8755
  {
8203
8756
  className: "h-full",
@@ -8205,30 +8758,30 @@ var PlanningView = ({
8205
8758
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
8206
8759
  },
8207
8760
  children: [
8208
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "mb-4", children: [
8209
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between", children: [
8210
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-3", children: [
8211
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8212
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Sprint Board" }),
8213
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
8761
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "mb-4", children: [
8762
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center justify-between", children: [
8763
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-3", children: [
8764
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8765
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Sprint Board" }),
8766
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
8214
8767
  selectedSprintIds?.length,
8215
8768
  "/3 selected"
8216
8769
  ] })
8217
8770
  ] }),
8218
- selectedSprintIds?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2", children: [
8219
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
8220
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleSprints.map((sprint) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8771
+ selectedSprintIds?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2", children: [
8772
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
8773
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleSprints.map((sprint) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8221
8774
  "div",
8222
8775
  {
8223
8776
  className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
8224
8777
  children: [
8225
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "max-w-[80px] truncate", children: sprint.name }),
8226
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8778
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "max-w-[80px] truncate", children: sprint.name }),
8779
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8227
8780
  "button",
8228
8781
  {
8229
8782
  onClick: () => toggleSprintView(sprint.id.toString()),
8230
8783
  className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
8231
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.X, { className: "h-4 w-4" })
8784
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.X, { className: "h-4 w-4" })
8232
8785
  }
8233
8786
  )
8234
8787
  ]
@@ -8237,20 +8790,20 @@ var PlanningView = ({
8237
8790
  )) })
8238
8791
  ] })
8239
8792
  ] }),
8240
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2", children: [
8241
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8793
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2", children: [
8794
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8242
8795
  Button,
8243
8796
  {
8244
8797
  onClick: () => setIsAddSprintModalOpen(true),
8245
8798
  className: "bg-primary hover:bg-primary/90 text-primary-foreground gap-1",
8246
8799
  size: "sm",
8247
8800
  children: [
8248
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Plus, { className: "h-3 w-3" }),
8801
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Plus, { className: "h-3 w-3" }),
8249
8802
  "Add"
8250
8803
  ]
8251
8804
  }
8252
8805
  ),
8253
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8806
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8254
8807
  Button,
8255
8808
  {
8256
8809
  onClick: () => setIsSprintSelectorOpen(!isSprintSelectorOpen),
@@ -8258,43 +8811,43 @@ var PlanningView = ({
8258
8811
  size: "sm",
8259
8812
  className: "gap-1",
8260
8813
  children: [
8261
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Calendar, { className: "h-3 w-3" }),
8814
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Calendar, { className: "h-3 w-3" }),
8262
8815
  isSprintSelectorOpen ? "Close" : "Select"
8263
8816
  ]
8264
8817
  }
8265
8818
  )
8266
8819
  ] })
8267
8820
  ] }) }),
8268
- isSprintSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8821
+ isSprintSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8269
8822
  "div",
8270
8823
  {
8271
8824
  className: "fixed inset-0 bg-black/20 z-[5]",
8272
8825
  onClick: () => setIsSprintSelectorOpen(false)
8273
8826
  }
8274
8827
  ),
8275
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8828
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8276
8829
  "div",
8277
8830
  {
8278
8831
  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"}`,
8279
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
8280
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
8281
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between", children: [
8282
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Sprints" }),
8283
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8832
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
8833
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
8834
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center justify-between", children: [
8835
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Sprints" }),
8836
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8284
8837
  Button,
8285
8838
  {
8286
8839
  variant: "ghost",
8287
8840
  size: "sm",
8288
8841
  onClick: () => setIsSprintSelectorOpen(false),
8289
8842
  className: "h-8 w-8 p-0",
8290
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.X, { className: "h-4 w-4" })
8843
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.X, { className: "h-4 w-4" })
8291
8844
  }
8292
8845
  )
8293
8846
  ] }),
8294
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Choose up to 3 sprints to view in your planning board" })
8847
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Choose up to 3 sprints to view in your planning board" })
8295
8848
  ] }),
8296
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: [
8297
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex gap-1 mb-4 bg-muted p-1 rounded-lg", children: [
8849
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: [
8850
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex gap-1 mb-4 bg-muted p-1 rounded-lg", children: [
8298
8851
  { key: "all", label: "All", count: sprints.length },
8299
8852
  {
8300
8853
  key: "active",
@@ -8306,7 +8859,7 @@ var PlanningView = ({
8306
8859
  label: "Upcoming"
8307
8860
  // count: sprints.filter((s) => !s.isActive).length,
8308
8861
  }
8309
- ].map((filter) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8862
+ ].map((filter) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8310
8863
  Button,
8311
8864
  {
8312
8865
  variant: sprintFilter === filter.key ? "default" : "outline",
@@ -8322,18 +8875,18 @@ var PlanningView = ({
8322
8875
  },
8323
8876
  filter.key
8324
8877
  )) }),
8325
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto", children: displayedSprints.length > 0 ? displayedSprints.map((sprint) => {
8878
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto", children: displayedSprints.length > 0 ? displayedSprints.map((sprint) => {
8326
8879
  const isSelected = selectedSprintIds.includes(sprint.id.toString());
8327
8880
  const taskCount = tasks.filter(
8328
8881
  (task) => extractId(task.sprint) === sprint.id
8329
8882
  ).length;
8330
8883
  const canSelect = !isSelected && selectedSprintIds.length < 3;
8331
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8884
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8332
8885
  "div",
8333
8886
  {
8334
8887
  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"}`,
8335
- children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-3", children: [
8336
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8888
+ children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-3", children: [
8889
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8337
8890
  Input,
8338
8891
  {
8339
8892
  value: sprintEditForm.name,
@@ -8342,7 +8895,7 @@ var PlanningView = ({
8342
8895
  placeholder: "Sprint name"
8343
8896
  }
8344
8897
  ),
8345
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8898
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8346
8899
  Textarea,
8347
8900
  {
8348
8901
  value: sprintEditForm.description,
@@ -8354,10 +8907,10 @@ var PlanningView = ({
8354
8907
  placeholder: "Sprint description"
8355
8908
  }
8356
8909
  ),
8357
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
8358
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8359
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
8360
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8910
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
8911
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8912
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
8913
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8361
8914
  Input,
8362
8915
  {
8363
8916
  type: "date",
@@ -8370,9 +8923,9 @@ var PlanningView = ({
8370
8923
  }
8371
8924
  )
8372
8925
  ] }),
8373
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8374
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
8375
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8926
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8927
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
8928
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8376
8929
  Input,
8377
8930
  {
8378
8931
  type: "date",
@@ -8386,20 +8939,20 @@ var PlanningView = ({
8386
8939
  )
8387
8940
  ] })
8388
8941
  ] }),
8389
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex gap-2", children: [
8390
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8942
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex gap-2", children: [
8943
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8391
8944
  Button,
8392
8945
  {
8393
8946
  size: "sm",
8394
8947
  onClick: () => handleSprintEditSave(),
8395
8948
  className: "flex-1",
8396
8949
  children: [
8397
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Check, { className: "h-3 w-3 mr-1" }),
8950
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Check, { className: "h-3 w-3 mr-1" }),
8398
8951
  "Save"
8399
8952
  ]
8400
8953
  }
8401
8954
  ),
8402
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8955
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8403
8956
  Button,
8404
8957
  {
8405
8958
  size: "sm",
@@ -8407,18 +8960,18 @@ var PlanningView = ({
8407
8960
  onClick: handleSprintEditCancel,
8408
8961
  className: "flex-1",
8409
8962
  children: [
8410
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.X, { className: "h-3 w-3 mr-1" }),
8963
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.X, { className: "h-3 w-3 mr-1" }),
8411
8964
  "Cancel"
8412
8965
  ]
8413
8966
  }
8414
8967
  )
8415
8968
  ] })
8416
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8417
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-start justify-between", children: [
8418
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex-1 min-w-0", children: [
8419
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2 mb-1", children: [
8420
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h4", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
8421
- isSprintActive(sprint) && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8969
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8970
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-start justify-between", children: [
8971
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex-1 min-w-0", children: [
8972
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2 mb-1", children: [
8973
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h4", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
8974
+ isSprintActive(sprint) && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8422
8975
  Badge,
8423
8976
  {
8424
8977
  variant: "default",
@@ -8427,43 +8980,43 @@ var PlanningView = ({
8427
8980
  }
8428
8981
  )
8429
8982
  ] }),
8430
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: sprint.description }),
8431
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
8432
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "flex items-center gap-1", children: [
8433
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.CalendarDays, { className: "h-3 w-3" }),
8983
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: sprint.description }),
8984
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
8985
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "flex items-center gap-1", children: [
8986
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.CalendarDays, { className: "h-3 w-3" }),
8434
8987
  new Date(sprint.startDate).toLocaleDateString()
8435
8988
  ] }),
8436
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "flex items-center gap-1", children: [
8437
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.User, { className: "h-3 w-3" }),
8989
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "flex items-center gap-1", children: [
8990
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.User, { className: "h-3 w-3" }),
8438
8991
  taskCount,
8439
8992
  " tasks"
8440
8993
  ] })
8441
8994
  ] })
8442
8995
  ] }),
8443
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
8444
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8996
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
8997
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8445
8998
  Button,
8446
8999
  {
8447
9000
  size: "sm",
8448
9001
  variant: "ghost",
8449
9002
  onClick: () => handleSprintEditStart(sprint),
8450
9003
  className: "h-6 w-6 p-0",
8451
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Edit2, { className: "h-3 w-3" })
9004
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Edit2, { className: "h-3 w-3" })
8452
9005
  }
8453
9006
  ),
8454
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9007
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8455
9008
  Button,
8456
9009
  {
8457
9010
  size: "sm",
8458
9011
  variant: "ghost",
8459
9012
  onClick: () => onDeleteSprint(sprint.id.toString()),
8460
9013
  className: "h-6 w-6 p-0 text-destructive hover:text-destructive",
8461
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Trash2, { className: "h-3 w-3" })
9014
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Trash2, { className: "h-3 w-3" })
8462
9015
  }
8463
9016
  )
8464
9017
  ] })
8465
9018
  ] }),
8466
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex items-center justify-between mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9019
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex items-center justify-between mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8467
9020
  Button,
8468
9021
  {
8469
9022
  variant: isSelected ? "default" : "outline",
@@ -8471,21 +9024,21 @@ var PlanningView = ({
8471
9024
  className: "text-xs w-full h-8 flex items-center justify-center cursor-pointer",
8472
9025
  onClick: () => toggleSprintView(sprint.id.toString()),
8473
9026
  disabled: !isSelected && selectedSprintIds?.length >= 3,
8474
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pointer-events-none select-none", children: isSelected ? "Deselect" : selectedSprintIds?.length >= 3 ? "Limit Reached" : "Select" })
9027
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pointer-events-none select-none", children: isSelected ? "Deselect" : selectedSprintIds?.length >= 3 ? "Limit Reached" : "Select" })
8475
9028
  }
8476
9029
  ) })
8477
9030
  ] })
8478
9031
  },
8479
9032
  sprint.id
8480
9033
  );
8481
- }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "text-center py-8 text-muted-foreground", children: [
8482
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Calendar, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
8483
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("p", { className: "text-sm", children: [
9034
+ }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "text-center py-8 text-muted-foreground", children: [
9035
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Calendar, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
9036
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("p", { className: "text-sm", children: [
8484
9037
  'No sprints found for "',
8485
9038
  sprintFilter,
8486
9039
  '" filter'
8487
9040
  ] }),
8488
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9041
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8489
9042
  Button,
8490
9043
  {
8491
9044
  variant: "link",
@@ -8496,18 +9049,18 @@ var PlanningView = ({
8496
9049
  }
8497
9050
  )
8498
9051
  ] }) }),
8499
- selectedSprintIds?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "mt-4 p-4 bg-muted/50 rounded-lg border-2 border-dashed border-border", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "text-center", children: [
8500
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Calendar, { className: "h-6 w-6 mx-auto mb-2 text-muted-foreground" }),
8501
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-sm text-muted-foreground font-medium", children: "Select sprints to start planning" }),
8502
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-xs text-muted-foreground mt-1", children: "Choose up to 3 sprints to view alongside your backlog" })
9052
+ selectedSprintIds?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "mt-4 p-4 bg-muted/50 rounded-lg border-2 border-dashed border-border", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "text-center", children: [
9053
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Calendar, { className: "h-6 w-6 mx-auto mb-2 text-muted-foreground" }),
9054
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-sm text-muted-foreground font-medium", children: "Select sprints to start planning" }),
9055
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-xs text-muted-foreground mt-1", children: "Choose up to 3 sprints to view alongside your backlog" })
8503
9056
  ] }) })
8504
9057
  ] })
8505
9058
  ] })
8506
9059
  }
8507
9060
  )
8508
9061
  ] }),
8509
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-4 gap-6 h-full flex-1 min-h-0", children: [
8510
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "lg:col-span-1", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9062
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-4 gap-6 h-full flex-1 min-h-0", children: [
9063
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "lg:col-span-1", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8511
9064
  Card,
8512
9065
  {
8513
9066
  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",
@@ -8519,78 +9072,78 @@ var PlanningView = ({
8519
9072
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 16rem)"
8520
9073
  },
8521
9074
  children: [
8522
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
8523
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: "Backlog" }),
8524
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2", children: [
8525
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Badge, { variant: "secondary", className: "bg-muted text-muted-foreground", children: [
9075
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
9076
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: "Backlog" }),
9077
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2", children: [
9078
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Badge, { variant: "secondary", className: "bg-muted text-muted-foreground", children: [
8526
9079
  backlogTasks?.length,
8527
9080
  " tasks"
8528
9081
  ] }),
8529
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Badge, { variant: "outline", className: "bg-gray-50 text-gray-700 border-gray-200", children: [
9082
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Badge, { variant: "outline", className: "bg-gray-50 text-gray-700 border-gray-200", children: [
8530
9083
  backlogStoryPoints,
8531
9084
  " pts"
8532
9085
  ] })
8533
9086
  ] })
8534
9087
  ] }),
8535
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9088
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8536
9089
  "div",
8537
9090
  {
8538
9091
  className: `flex-1 overflow-y-auto space-y-3 min-h-0 p-3 rounded transition-colors ${dragOverTarget === "backlog" ? "bg-primary/10" : ""}`,
8539
9092
  children: (() => {
8540
9093
  const { tasksByEpic, unassignedTasks } = getTasksByEpic(backlogTasks);
8541
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
9094
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
8542
9095
  Object.entries(tasksByEpic).map(([epicId, epicTasks]) => {
8543
9096
  const epic = getEpicById(epicId);
8544
9097
  if (!epic) return null;
8545
9098
  const isCollapsed = collapsedEpics.has(epicId);
8546
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8547
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9099
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2", children: [
9100
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8548
9101
  "div",
8549
9102
  {
8550
9103
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
8551
9104
  onClick: () => toggleEpicCollapse(epicId),
8552
9105
  children: [
8553
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
8554
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
8555
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "text-muted-foreground", children: [
9106
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
9107
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
9108
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "text-muted-foreground", children: [
8556
9109
  "(",
8557
9110
  epicTasks?.length,
8558
9111
  ")"
8559
9112
  ] }),
8560
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
9113
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
8561
9114
  ]
8562
9115
  }
8563
9116
  ),
8564
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompactTaskCard, { task }, task.id)) })
9117
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompactTaskCard, { task }, task.id)) })
8565
9118
  ] }, epicId);
8566
9119
  }),
8567
9120
  unassignedTasks?.length > 0 && (() => {
8568
9121
  const isCollapsed = collapsedEpics.has("no-epic");
8569
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8570
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9122
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2", children: [
9123
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8571
9124
  "div",
8572
9125
  {
8573
9126
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
8574
9127
  onClick: () => toggleEpicCollapse("no-epic"),
8575
9128
  children: [
8576
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
8577
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
8578
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "text-muted-foreground", children: [
9129
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
9130
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
9131
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "text-muted-foreground", children: [
8579
9132
  "(",
8580
9133
  unassignedTasks?.length,
8581
9134
  ")"
8582
9135
  ] }),
8583
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
9136
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
8584
9137
  ]
8585
9138
  }
8586
9139
  ),
8587
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompactTaskCard, { task }, task.id)) })
9140
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompactTaskCard, { task }, task.id)) })
8588
9141
  ] });
8589
9142
  })(),
8590
- backlogTasks?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime47.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" }),
8591
- backlogTasks?.length > 0 && Object.keys(tasksByEpic).length === 0 && unassignedTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8592
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "text-xs text-muted-foreground mb-2", children: "Direct backlog tasks:" }),
8593
- backlogTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompactTaskCard, { task }, task.id))
9143
+ backlogTasks?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime48.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" }),
9144
+ backlogTasks?.length > 0 && Object.keys(tasksByEpic).length === 0 && unassignedTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2", children: [
9145
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-xs text-muted-foreground mb-2", children: "Direct backlog tasks:" }),
9146
+ backlogTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompactTaskCard, { task }, task.id))
8594
9147
  ] })
8595
9148
  ] });
8596
9149
  })()
@@ -8607,7 +9160,7 @@ var PlanningView = ({
8607
9160
  (sum, task) => sum + (task?.storyPoints || 0),
8608
9161
  0
8609
9162
  );
8610
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9163
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8611
9164
  Card,
8612
9165
  {
8613
9166
  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",
@@ -8619,10 +9172,10 @@ var PlanningView = ({
8619
9172
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 16rem)"
8620
9173
  },
8621
9174
  children: [
8622
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
8623
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: sprint.name }) }),
8624
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2", children: [
8625
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9175
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
9176
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: sprint.name }) }),
9177
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2", children: [
9178
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8626
9179
  Badge,
8627
9180
  {
8628
9181
  variant: "secondary",
@@ -8633,7 +9186,7 @@ var PlanningView = ({
8633
9186
  ]
8634
9187
  }
8635
9188
  ),
8636
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9189
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8637
9190
  Badge,
8638
9191
  {
8639
9192
  variant: "outline",
@@ -8644,7 +9197,7 @@ var PlanningView = ({
8644
9197
  ]
8645
9198
  }
8646
9199
  ),
8647
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9200
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8648
9201
  Button,
8649
9202
  {
8650
9203
  size: "sm",
@@ -8654,73 +9207,73 @@ var PlanningView = ({
8654
9207
  handleSprintEditStart(sprint);
8655
9208
  },
8656
9209
  className: "h-6 px-2",
8657
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Edit2, { className: "h-3 w-3" })
9210
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Edit2, { className: "h-3 w-3" })
8658
9211
  }
8659
9212
  ),
8660
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9213
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8661
9214
  Button,
8662
9215
  {
8663
9216
  size: "sm",
8664
9217
  variant: "ghost",
8665
9218
  onClick: () => onDeleteSprint(sprint.id.toString()),
8666
9219
  className: "h-6 px-2 text-destructive hover:text-destructive",
8667
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Trash2, { className: "h-3 w-3" })
9220
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Trash2, { className: "h-3 w-3" })
8668
9221
  }
8669
9222
  )
8670
9223
  ] })
8671
9224
  ] }),
8672
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex-1 overflow-y-auto space-y-3 min-h-0", children: (() => {
9225
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex-1 overflow-y-auto space-y-3 min-h-0", children: (() => {
8673
9226
  const { tasksByEpic, unassignedTasks } = getTasksByEpic(sprintTasksFiltered);
8674
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
9227
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
8675
9228
  Object.entries(tasksByEpic).map(([epicId, epicTasks]) => {
8676
9229
  const epic = getEpicById(epicId);
8677
9230
  if (!epic) return null;
8678
9231
  const isCollapsed = collapsedEpics.has(epicId);
8679
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8680
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9232
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2", children: [
9233
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8681
9234
  "div",
8682
9235
  {
8683
9236
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
8684
9237
  onClick: () => toggleEpicCollapse(epicId),
8685
9238
  children: [
8686
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
8687
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
8688
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "text-muted-foreground", children: [
9239
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
9240
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
9241
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "text-muted-foreground", children: [
8689
9242
  "(",
8690
9243
  epicTasks?.length,
8691
9244
  ")"
8692
9245
  ] }),
8693
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
9246
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
8694
9247
  ]
8695
9248
  }
8696
9249
  ),
8697
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompactTaskCard, { task }, task.id)) })
9250
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompactTaskCard, { task }, task.id)) })
8698
9251
  ] }, epicId);
8699
9252
  }),
8700
9253
  unassignedTasks?.length > 0 && (() => {
8701
9254
  const isCollapsed = collapsedEpics.has("no-epic");
8702
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
8703
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
9255
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2", children: [
9256
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
8704
9257
  "div",
8705
9258
  {
8706
9259
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
8707
9260
  onClick: () => toggleEpicCollapse("no-epic"),
8708
9261
  children: [
8709
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
8710
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
8711
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "text-muted-foreground", children: [
9262
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
9263
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
9264
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "text-muted-foreground", children: [
8712
9265
  "(",
8713
9266
  unassignedTasks?.length,
8714
9267
  ")"
8715
9268
  ] }),
8716
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
9269
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
8717
9270
  ]
8718
9271
  }
8719
9272
  ),
8720
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompactTaskCard, { task }, task.id)) })
9273
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CompactTaskCard, { task }, task.id)) })
8721
9274
  ] });
8722
9275
  })(),
8723
- sprintTasksFiltered?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here" })
9276
+ sprintTasksFiltered?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here" })
8724
9277
  ] });
8725
9278
  })() })
8726
9279
  ]
@@ -8729,7 +9282,7 @@ var PlanningView = ({
8729
9282
  );
8730
9283
  })
8731
9284
  ] }),
8732
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
9285
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8733
9286
  AddSprintModal,
8734
9287
  {
8735
9288
  isOpen: isAddSprintModalOpen,
@@ -8744,9 +9297,9 @@ var PlanningView = ({
8744
9297
  };
8745
9298
 
8746
9299
  // src/components/Projects/TasksView.tsx
8747
- var import_react25 = require("react");
8748
- var import_lucide_react19 = require("lucide-react");
8749
- var import_jsx_runtime48 = require("react/jsx-runtime");
9300
+ var import_react26 = require("react");
9301
+ var import_lucide_react20 = require("lucide-react");
9302
+ var import_jsx_runtime49 = require("react/jsx-runtime");
8750
9303
  var formatDate = (date) => {
8751
9304
  return date.toLocaleDateString("en-US", {
8752
9305
  weekday: "short",
@@ -8784,7 +9337,7 @@ var isTomorrow = (date) => {
8784
9337
  return date.toDateString() === tomorrow.toDateString();
8785
9338
  };
8786
9339
  var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8787
- const [formData, setFormData] = (0, import_react25.useState)({
9340
+ const [formData, setFormData] = (0, import_react26.useState)({
8788
9341
  title: "",
8789
9342
  description: "",
8790
9343
  dueDate: "",
@@ -8798,7 +9351,7 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8798
9351
  reminderMinutes: 15,
8799
9352
  tags: ""
8800
9353
  });
8801
- const [isColleagueError, setIsColleagueError] = (0, import_react25.useState)(false);
9354
+ const [isColleagueError, setIsColleagueError] = (0, import_react26.useState)(false);
8802
9355
  const handleSubmit = (e) => {
8803
9356
  e.preventDefault();
8804
9357
  const colleague = colleagues.find((c) => c?.id.toString() === formData.colleagueId.toString());
@@ -8843,18 +9396,18 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8843
9396
  tags: ""
8844
9397
  });
8845
9398
  };
8846
- (0, import_react25.useEffect)(() => {
9399
+ (0, import_react26.useEffect)(() => {
8847
9400
  if (formData.colleagueId) {
8848
9401
  setIsColleagueError(false);
8849
9402
  }
8850
9403
  }, [formData.colleagueId]);
8851
9404
  const validColleagues = colleagues.filter(Boolean);
8852
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(DialogContent, { className: "max-w-2xl", children: [
8853
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogTitle, { children: "Add New Reminder" }) }),
8854
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
8855
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8856
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "title", children: "Title" }),
8857
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9405
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogContent, { className: "max-w-2xl", children: [
9406
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogTitle, { children: "Add New Reminder" }) }),
9407
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
9408
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9409
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "title", children: "Title" }),
9410
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8858
9411
  Input,
8859
9412
  {
8860
9413
  id: "title",
@@ -8865,9 +9418,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8865
9418
  }
8866
9419
  )
8867
9420
  ] }) }),
8868
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8869
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "description", children: "Description" }),
8870
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9421
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9422
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "description", children: "Description" }),
9423
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8871
9424
  Textarea,
8872
9425
  {
8873
9426
  id: "description",
@@ -8878,10 +9431,10 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8878
9431
  }
8879
9432
  )
8880
9433
  ] }),
8881
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
8882
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8883
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "dueDate", children: "Due Date" }),
8884
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9434
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
9435
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9436
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "dueDate", children: "Due Date" }),
9437
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8885
9438
  Input,
8886
9439
  {
8887
9440
  id: "dueDate",
@@ -8892,9 +9445,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8892
9445
  }
8893
9446
  )
8894
9447
  ] }),
8895
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8896
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "dueTime", children: "Due Time (optional)" }),
8897
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9448
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9449
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "dueTime", children: "Due Time (optional)" }),
9450
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8898
9451
  Input,
8899
9452
  {
8900
9453
  id: "dueTime",
@@ -8905,9 +9458,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8905
9458
  )
8906
9459
  ] })
8907
9460
  ] }),
8908
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8909
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { className: `${isColleagueError ? "text-destructive" : ""}`, htmlFor: "colleague", children: "Assigned Colleague" }),
8910
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
9461
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9462
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { className: `${isColleagueError ? "text-destructive" : ""}`, htmlFor: "colleague", children: "Assigned Colleague" }),
9463
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
8911
9464
  Select,
8912
9465
  {
8913
9466
  value: formData.colleagueId,
@@ -8916,11 +9469,11 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8916
9469
  },
8917
9470
  required: true,
8918
9471
  children: [
8919
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9472
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8920
9473
  SelectTrigger,
8921
9474
  {
8922
9475
  className: `${isColleagueError ? "text-destructive border-red-500" : ""}`,
8923
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9476
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8924
9477
  SelectValue,
8925
9478
  {
8926
9479
  className: `${isColleagueError ? "text-destructive border-red-500" : ""}`,
@@ -8930,15 +9483,15 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8930
9483
  )
8931
9484
  }
8932
9485
  ),
8933
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectContent, { children: validColleagues.map((colleague) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: colleague.id.toString(), children: colleague.name }, colleague.id)) })
9486
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectContent, { children: validColleagues.map((colleague) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectItem, { value: colleague.id.toString(), children: colleague.name }, colleague.id)) })
8934
9487
  ]
8935
9488
  }
8936
9489
  ),
8937
- isColleagueError && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-destructive text-sm", children: "Please select a digital colleague" })
9490
+ isColleagueError && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-destructive text-sm", children: "Please select a digital colleague" })
8938
9491
  ] }),
8939
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-2", children: [
8940
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-2", children: [
8941
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9492
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "space-y-2", children: [
9493
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-2", children: [
9494
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8942
9495
  "input",
8943
9496
  {
8944
9497
  type: "checkbox",
@@ -8948,12 +9501,12 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8948
9501
  className: "rounded border-border"
8949
9502
  }
8950
9503
  ),
8951
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "isRecurring", children: "Make this a recurring reminder" })
9504
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "isRecurring", children: "Make this a recurring reminder" })
8952
9505
  ] }),
8953
- formData.isRecurring && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
8954
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8955
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "recurrencePattern", children: "Frequency" }),
8956
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
9506
+ formData.isRecurring && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
9507
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9508
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "recurrencePattern", children: "Frequency" }),
9509
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
8957
9510
  Select,
8958
9511
  {
8959
9512
  value: formData.recurrencePattern,
@@ -8962,20 +9515,20 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8962
9515
  recurrencePattern: value
8963
9516
  }),
8964
9517
  children: [
8965
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, {}) }),
8966
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(SelectContent, { children: [
8967
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: "daily", children: "Daily" }),
8968
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: "weekly", children: "Weekly" }),
8969
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: "monthly", children: "Monthly" }),
8970
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectItem, { value: "yearly", children: "Yearly" })
9518
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectValue, {}) }),
9519
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(SelectContent, { children: [
9520
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectItem, { value: "daily", children: "Daily" }),
9521
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectItem, { value: "weekly", children: "Weekly" }),
9522
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectItem, { value: "monthly", children: "Monthly" }),
9523
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectItem, { value: "yearly", children: "Yearly" })
8971
9524
  ] })
8972
9525
  ]
8973
9526
  }
8974
9527
  )
8975
9528
  ] }),
8976
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
8977
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "recurrenceInterval", children: "Every" }),
8978
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9529
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9530
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "recurrenceInterval", children: "Every" }),
9531
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8979
9532
  Input,
8980
9533
  {
8981
9534
  id: "recurrenceInterval",
@@ -8988,15 +9541,15 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
8988
9541
  ] })
8989
9542
  ] })
8990
9543
  ] }),
8991
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex justify-end space-x-2", children: [
8992
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" }),
8993
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, { type: "submit", children: "Add Reminder" })
9544
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex justify-end space-x-2", children: [
9545
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" }),
9546
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { type: "submit", children: "Add Reminder" })
8994
9547
  ] })
8995
9548
  ] })
8996
9549
  ] }) });
8997
9550
  };
8998
9551
  var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose }) => {
8999
- const [formData, setFormData] = (0, import_react25.useState)({
9552
+ const [formData, setFormData] = (0, import_react26.useState)({
9000
9553
  title: reminder.title,
9001
9554
  description: reminder.description,
9002
9555
  dueDate: reminder.dueDate?.toString().split("T")[0],
@@ -9030,12 +9583,12 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
9030
9583
  onClose();
9031
9584
  };
9032
9585
  const validColleagues = colleagues.filter(Boolean);
9033
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(DialogContent, { className: "max-w-2xl", children: [
9034
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DialogTitle, { children: "Edit Reminder" }) }),
9035
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
9036
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
9037
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "edit-title", children: "Title" }),
9038
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9586
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DialogContent, { className: "max-w-2xl", children: [
9587
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DialogTitle, { children: "Edit Reminder" }) }),
9588
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
9589
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9590
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "edit-title", children: "Title" }),
9591
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9039
9592
  Input,
9040
9593
  {
9041
9594
  id: "edit-title",
@@ -9046,9 +9599,9 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
9046
9599
  }
9047
9600
  )
9048
9601
  ] }) }),
9049
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
9050
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "edit-description", children: "Description" }),
9051
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9602
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9603
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "edit-description", children: "Description" }),
9604
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9052
9605
  Textarea,
9053
9606
  {
9054
9607
  id: "edit-description",
@@ -9059,10 +9612,10 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
9059
9612
  }
9060
9613
  )
9061
9614
  ] }),
9062
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
9063
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
9064
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "edit-dueDate", children: "Due Date" }),
9065
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9615
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
9616
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9617
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "edit-dueDate", children: "Due Date" }),
9618
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9066
9619
  Input,
9067
9620
  {
9068
9621
  id: "edit-dueDate",
@@ -9073,9 +9626,9 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
9073
9626
  }
9074
9627
  )
9075
9628
  ] }),
9076
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
9077
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "edit-dueTime", children: "Due Time (optional)" }),
9078
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9629
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9630
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "edit-dueTime", children: "Due Time (optional)" }),
9631
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9079
9632
  Input,
9080
9633
  {
9081
9634
  id: "edit-dueTime",
@@ -9086,8 +9639,8 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
9086
9639
  )
9087
9640
  ] })
9088
9641
  ] }),
9089
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-2", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-2", children: [
9090
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9642
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "space-y-2", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-2", children: [
9643
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9091
9644
  "input",
9092
9645
  {
9093
9646
  type: "checkbox",
@@ -9097,17 +9650,17 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
9097
9650
  className: "rounded border-border"
9098
9651
  }
9099
9652
  ),
9100
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label2, { htmlFor: "edit-isRecurring", children: "Make this a recurring reminder" })
9653
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label2, { htmlFor: "edit-isRecurring", children: "Make this a recurring reminder" })
9101
9654
  ] }) }),
9102
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex justify-end space-x-2", children: [
9103
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
9104
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, { type: "submit", children: "Save Changes" })
9655
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex justify-end space-x-2", children: [
9656
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
9657
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { type: "submit", children: "Save Changes" })
9105
9658
  ] })
9106
9659
  ] })
9107
9660
  ] }) });
9108
9661
  };
9109
9662
  var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }) => {
9110
- const [isEditing, setIsEditing] = (0, import_react25.useState)(false);
9663
+ const [isEditing, setIsEditing] = (0, import_react26.useState)(false);
9111
9664
  if (!reminder || !reminder.id) {
9112
9665
  return null;
9113
9666
  }
@@ -9125,8 +9678,8 @@ var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }
9125
9678
  if (tomorrow) return "Tomorrow";
9126
9679
  return formatDate(new Date(reminder.dueDate || ""));
9127
9680
  };
9128
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
9129
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9681
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
9682
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9130
9683
  EditReminderModal,
9131
9684
  {
9132
9685
  reminder,
@@ -9136,61 +9689,61 @@ var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }
9136
9689
  onClose: () => setIsEditing(false)
9137
9690
  }
9138
9691
  ),
9139
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9692
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9140
9693
  Card,
9141
9694
  {
9142
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CardContent, { className: "p-4", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-start justify-between", children: [
9143
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-start space-x-3 flex-1", children: [
9144
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9695
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CardContent, { className: "p-4", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-start justify-between", children: [
9696
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-start space-x-3 flex-1", children: [
9697
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9145
9698
  "button",
9146
9699
  {
9147
9700
  onClick: handleToggleComplete,
9148
9701
  className: "mt-1 text-primary hover:text-primary/80"
9149
9702
  }
9150
9703
  ),
9151
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex-1", children: [
9152
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex items-center space-x-2 mb-1", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9704
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex-1", children: [
9705
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex items-center space-x-2 mb-1", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9153
9706
  "h3",
9154
9707
  {
9155
9708
  children: reminder.title
9156
9709
  }
9157
9710
  ) }),
9158
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-sm text-muted-foreground mb-2", children: reminder.description }),
9159
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-4 text-sm text-muted-foreground", children: [
9160
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-1", children: [
9161
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Calendar, { className: "h-4 w-4" }),
9162
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: overdue ? "text-destructive font-medium" : "", children: getDateLabel() })
9711
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-sm text-muted-foreground mb-2", children: reminder.description }),
9712
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-4 text-sm text-muted-foreground", children: [
9713
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-1", children: [
9714
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Calendar, { className: "h-4 w-4" }),
9715
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: overdue ? "text-destructive font-medium" : "", children: getDateLabel() })
9163
9716
  ] }),
9164
- reminder.dueTime && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-1", children: [
9165
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Clock, { className: "h-4 w-4" }),
9166
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: formatTime(reminder.dueTime) })
9717
+ reminder.dueTime && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-1", children: [
9718
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Clock, { className: "h-4 w-4" }),
9719
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: formatTime(reminder.dueTime) })
9167
9720
  ] }),
9168
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-1", children: [
9169
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.User, { className: "h-4 w-4" }),
9170
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: typeof reminder.assignedColleague !== "number" ? reminder.assignedColleague.name : "Unknown Colleague" })
9721
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-1", children: [
9722
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.User, { className: "h-4 w-4" }),
9723
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: typeof reminder.assignedColleague !== "number" ? reminder.assignedColleague.name : "Unknown Colleague" })
9171
9724
  ] })
9172
9725
  ] })
9173
9726
  ] })
9174
9727
  ] }),
9175
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-1", children: [
9176
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9728
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-1", children: [
9729
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9177
9730
  Button,
9178
9731
  {
9179
9732
  variant: "ghost",
9180
9733
  size: "sm",
9181
9734
  onClick: () => setIsEditing(true),
9182
9735
  className: "h-8 w-8 p-0",
9183
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Edit2, { className: "h-4 w-4" })
9736
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Edit2, { className: "h-4 w-4" })
9184
9737
  }
9185
9738
  ),
9186
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9739
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9187
9740
  Button,
9188
9741
  {
9189
9742
  variant: "ghost",
9190
9743
  size: "sm",
9191
9744
  onClick: () => onDeleteReminder(reminder.id.toString()),
9192
9745
  className: "h-8 w-8 p-0 text-destructive hover:text-destructive/80",
9193
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Trash2, { className: "h-4 w-4" })
9746
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Trash2, { className: "h-4 w-4" })
9194
9747
  }
9195
9748
  )
9196
9749
  ] })
@@ -9206,15 +9759,15 @@ var TasksView = ({
9206
9759
  onUpdateReminder,
9207
9760
  onDeleteReminder
9208
9761
  }) => {
9209
- const [reminders, setReminders] = (0, import_react25.useState)(initialReminders.filter(Boolean));
9210
- const [colleagues, setColleagues] = (0, import_react25.useState)(initialColleagues.filter(Boolean));
9211
- const [filter, setFilter] = (0, import_react25.useState)("all");
9212
- const [searchTerm, setSearchTerm] = (0, import_react25.useState)("");
9213
- const [openAddReminderModal, setOpenAddReminderModal] = (0, import_react25.useState)(false);
9214
- (0, import_react25.useEffect)(() => {
9762
+ const [reminders, setReminders] = (0, import_react26.useState)(initialReminders.filter(Boolean));
9763
+ const [colleagues, setColleagues] = (0, import_react26.useState)(initialColleagues.filter(Boolean));
9764
+ const [filter, setFilter] = (0, import_react26.useState)("all");
9765
+ const [searchTerm, setSearchTerm] = (0, import_react26.useState)("");
9766
+ const [openAddReminderModal, setOpenAddReminderModal] = (0, import_react26.useState)(false);
9767
+ (0, import_react26.useEffect)(() => {
9215
9768
  setReminders(initialReminders.filter(Boolean));
9216
9769
  }, [initialReminders]);
9217
- (0, import_react25.useEffect)(() => {
9770
+ (0, import_react26.useEffect)(() => {
9218
9771
  setColleagues(initialColleagues.filter(Boolean));
9219
9772
  }, [initialColleagues]);
9220
9773
  const handleAddReminder = (newReminder) => {
@@ -9302,8 +9855,8 @@ var TasksView = ({
9302
9855
  // lastUpdated: new Date(),
9303
9856
  // isActive: true,
9304
9857
  };
9305
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
9306
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9858
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
9859
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9307
9860
  DashboardHero,
9308
9861
  {
9309
9862
  title: "Task Reminders",
@@ -9317,8 +9870,8 @@ var TasksView = ({
9317
9870
  }
9318
9871
  }
9319
9872
  ),
9320
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "h-full bg-background", children: [
9321
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9873
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "h-full bg-background", children: [
9874
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9322
9875
  AddReminderModal,
9323
9876
  {
9324
9877
  colleagues,
@@ -9327,48 +9880,48 @@ var TasksView = ({
9327
9880
  setOpen: setOpenAddReminderModal
9328
9881
  }
9329
9882
  ),
9330
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "p-6", children: [
9331
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [
9332
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { children: [
9333
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h1", { className: "text-2xl font-bold text-foreground", children: "Task Reminders" }),
9334
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-muted-foreground", children: "Manage your digital colleague task reminders" })
9883
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "p-6", children: [
9884
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [
9885
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9886
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h1", { className: "text-2xl font-bold text-foreground", children: "Task Reminders" }),
9887
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-muted-foreground", children: "Manage your digital colleague task reminders" })
9335
9888
  ] }),
9336
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
9889
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9337
9890
  Button,
9338
9891
  {
9339
9892
  className: "flex items-center space-x-2",
9340
9893
  onClick: () => setOpenAddReminderModal(true),
9341
9894
  children: [
9342
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react19.Plus, { className: "h-4 w-4" }),
9343
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: "Add Reminder" })
9895
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Plus, { className: "h-4 w-4" }),
9896
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: "Add Reminder" })
9344
9897
  ]
9345
9898
  }
9346
9899
  )
9347
9900
  ] }),
9348
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "grid grid-cols-5 gap-4 mb-6", children: [
9349
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "p-4", children: [
9350
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-2xl font-bold text-foreground", children: stats.total }),
9351
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-sm text-muted-foreground", children: "Total" })
9901
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid grid-cols-5 gap-4 mb-6", children: [
9902
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "p-4", children: [
9903
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-2xl font-bold text-foreground", children: stats.total }),
9904
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-sm text-muted-foreground", children: "Total" })
9352
9905
  ] }),
9353
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "p-4", children: [
9354
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-2xl font-bold text-primary", children: stats.overdue }),
9355
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-sm text-muted-foreground", children: "Pending" })
9906
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "p-4", children: [
9907
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-2xl font-bold text-primary", children: stats.overdue }),
9908
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-sm text-muted-foreground", children: "Pending" })
9356
9909
  ] }),
9357
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "p-4", children: [
9358
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-2xl font-bold text-success", children: stats.today }),
9359
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-sm text-muted-foreground", children: "Completed" })
9910
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "p-4", children: [
9911
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-2xl font-bold text-success", children: stats.today }),
9912
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-sm text-muted-foreground", children: "Completed" })
9360
9913
  ] }),
9361
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "p-4", children: [
9362
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-2xl font-bold text-destructive", children: stats.overdue }),
9363
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-sm text-muted-foreground", children: "Overdue" })
9914
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "p-4", children: [
9915
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-2xl font-bold text-destructive", children: stats.overdue }),
9916
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-sm text-muted-foreground", children: "Overdue" })
9364
9917
  ] }),
9365
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "p-4", children: [
9366
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-2xl font-bold text-warning", children: stats.today }),
9367
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-sm text-muted-foreground", children: "Today" })
9918
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "p-4", children: [
9919
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-2xl font-bold text-warning", children: stats.today }),
9920
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-sm text-muted-foreground", children: "Today" })
9368
9921
  ] })
9369
9922
  ] }),
9370
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center space-x-4 mb-6", children: [
9371
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9923
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center space-x-4 mb-6", children: [
9924
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9372
9925
  Input,
9373
9926
  {
9374
9927
  placeholder: "Search reminders...",
@@ -9377,25 +9930,25 @@ var TasksView = ({
9377
9930
  className: "max-w-md"
9378
9931
  }
9379
9932
  ) }),
9380
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Select, { value: filter, onValueChange: (value) => setFilter(value), children: [
9381
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SelectValue, {}) }),
9382
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(SelectContent, { children: [
9383
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(SelectItem, { value: "all", children: [
9933
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Select, { value: filter, onValueChange: (value) => setFilter(value), children: [
9934
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SelectValue, {}) }),
9935
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(SelectContent, { children: [
9936
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(SelectItem, { value: "all", children: [
9384
9937
  "All (",
9385
9938
  stats.total,
9386
9939
  ")"
9387
9940
  ] }),
9388
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(SelectItem, { value: "overdue", children: [
9941
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(SelectItem, { value: "overdue", children: [
9389
9942
  "Overdue (",
9390
9943
  stats.overdue,
9391
9944
  ")"
9392
9945
  ] }),
9393
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(SelectItem, { value: "overdue", children: [
9946
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(SelectItem, { value: "overdue", children: [
9394
9947
  "Overdue (",
9395
9948
  stats.overdue,
9396
9949
  ")"
9397
9950
  ] }),
9398
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(SelectItem, { value: "today", children: [
9951
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(SelectItem, { value: "today", children: [
9399
9952
  "Today (",
9400
9953
  stats.today,
9401
9954
  ")"
@@ -9403,11 +9956,11 @@ var TasksView = ({
9403
9956
  ] })
9404
9957
  ] })
9405
9958
  ] }),
9406
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "space-y-4", children: sortedReminders.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Card, { className: "p-8 text-center", children: [
9407
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-muted-foreground", children: searchTerm || filter !== "all" ? "No reminders match your filters" : "No reminders yet" }),
9408
- !searchTerm && filter === "all" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "text-sm text-muted-foreground/60 mt-2", children: "Create your first reminder to get started" })
9959
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "space-y-4", children: sortedReminders.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "p-8 text-center", children: [
9960
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-muted-foreground", children: searchTerm || filter !== "all" ? "No reminders match your filters" : "No reminders yet" }),
9961
+ !searchTerm && filter === "all" && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-sm text-muted-foreground/60 mt-2", children: "Create your first reminder to get started" })
9409
9962
  ] }) : sortedReminders.map(
9410
- (reminder) => reminder && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
9963
+ (reminder) => reminder && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9411
9964
  ReminderCard,
9412
9965
  {
9413
9966
  reminder,
@@ -9424,13 +9977,13 @@ var TasksView = ({
9424
9977
  };
9425
9978
 
9426
9979
  // src/components/Projects/FileView.tsx
9427
- var import_react27 = require("react");
9428
- var import_lucide_react21 = require("lucide-react");
9980
+ var import_react28 = require("react");
9981
+ var import_lucide_react22 = require("lucide-react");
9429
9982
 
9430
9983
  // src/components/AdvancedComponents/navigation-tabs.tsx
9431
- var import_react26 = require("motion/react");
9432
- var import_lucide_react20 = require("lucide-react");
9433
- var import_jsx_runtime49 = require("react/jsx-runtime");
9984
+ var import_react27 = require("motion/react");
9985
+ var import_lucide_react21 = require("lucide-react");
9986
+ var import_jsx_runtime50 = require("react/jsx-runtime");
9434
9987
  function NavigationTabs({
9435
9988
  activeTab,
9436
9989
  onTabChange,
@@ -9440,15 +9993,15 @@ function NavigationTabs({
9440
9993
  gridCols = 6
9441
9994
  }) {
9442
9995
  const currentTab = tabOptions.find((tab) => tab.value === activeTab);
9443
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9444
- import_react26.motion.div,
9996
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
9997
+ import_react27.motion.div,
9445
9998
  {
9446
9999
  className: `flex-1 flex justify-center ${className}`,
9447
10000
  initial: { opacity: 0, y: -20 },
9448
10001
  animate: { opacity: 1, y: 0 },
9449
10002
  transition: { duration: 0.3, ease: "easeOut" },
9450
10003
  children: [
9451
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "hidden lg:block", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Tabs, { value: activeTab, onValueChange: onTabChange, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10004
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "hidden lg:block", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Tabs, { value: activeTab, onValueChange: onTabChange, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
9452
10005
  TabsList,
9453
10006
  {
9454
10007
  className: "grid w-full rounded-2xl p-0 h-10",
@@ -9459,14 +10012,14 @@ function NavigationTabs({
9459
10012
  tabOptions.length
9460
10013
  )}, minmax(0, 1fr))`
9461
10014
  },
9462
- children: tabOptions.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9463
- import_react26.motion.div,
10015
+ children: tabOptions.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10016
+ import_react27.motion.div,
9464
10017
  {
9465
10018
  whileHover: { scale: 1.1 },
9466
10019
  whileTap: { scale: 0.98 },
9467
10020
  transition: { type: "spring", stiffness: 400, damping: 17 },
9468
10021
  className: "flex-1 px-2",
9469
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10022
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
9470
10023
  TabsTrigger,
9471
10024
  {
9472
10025
  value: tab.value,
@@ -9480,12 +10033,12 @@ function NavigationTabs({
9480
10033
  ))
9481
10034
  }
9482
10035
  ) }) }),
9483
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "lg:hidden", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(DropdownMenu, { children: [
9484
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Button, { variant: "outline", className: "rounded-2xl min-w-[140px] justify-between", children: [
10036
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "lg:hidden", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(DropdownMenu, { children: [
10037
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { variant: "outline", className: "rounded-2xl min-w-[140px] justify-between", children: [
9485
10038
  currentTab?.label || "Select",
9486
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.ChevronDown, { className: "h-4 w-4 ml-2" })
10039
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react21.ChevronDown, { className: "h-4 w-4 ml-2" })
9487
10040
  ] }) }),
9488
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DropdownMenuContent, { align: "center", className: "w-[180px]", children: tabOptions.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10041
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DropdownMenuContent, { align: "center", className: "w-[180px]", children: tabOptions.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
9489
10042
  DropdownMenuItem,
9490
10043
  {
9491
10044
  onClick: () => onTabChange?.(tab.value),
@@ -9501,8 +10054,8 @@ function NavigationTabs({
9501
10054
  }
9502
10055
 
9503
10056
  // src/components/Projects/FileView.tsx
9504
- var import_react28 = require("motion/react");
9505
- var import_jsx_runtime50 = require("react/jsx-runtime");
10057
+ var import_react29 = require("motion/react");
10058
+ var import_jsx_runtime51 = require("react/jsx-runtime");
9506
10059
  function FileView({
9507
10060
  initialFiles = [],
9508
10061
  onFileAdd,
@@ -9513,18 +10066,18 @@ function FileView({
9513
10066
  compactView = false,
9514
10067
  className
9515
10068
  }) {
9516
- const [files, setFiles] = (0, import_react27.useState)(initialFiles);
9517
- const [searchTerm, setSearchTerm] = (0, import_react27.useState)("");
9518
- const [appFilter, setAppFilter] = (0, import_react27.useState)("all");
9519
- const [activeTab, setActiveTab] = (0, import_react27.useState)("all");
9520
- const [isAddFileModalOpen, setIsAddFileModalOpen] = (0, import_react27.useState)(false);
9521
- const prevFilesHash = (0, import_react27.useRef)("");
10069
+ const [files, setFiles] = (0, import_react28.useState)(initialFiles);
10070
+ const [searchTerm, setSearchTerm] = (0, import_react28.useState)("");
10071
+ const [appFilter, setAppFilter] = (0, import_react28.useState)("all");
10072
+ const [activeTab, setActiveTab] = (0, import_react28.useState)("all");
10073
+ const [isAddFileModalOpen, setIsAddFileModalOpen] = (0, import_react28.useState)(false);
10074
+ const prevFilesHash = (0, import_react28.useRef)("");
9522
10075
  const getHash = (list) => {
9523
10076
  return list.map(
9524
10077
  (item) => `${item.id}-${new Date(item.createdAt).getTime()}-${new Date(item.updatedAt).getTime()}`
9525
10078
  ).join("-");
9526
10079
  };
9527
- (0, import_react27.useEffect)(() => {
10080
+ (0, import_react28.useEffect)(() => {
9528
10081
  const next = getHash(
9529
10082
  initialFiles.map((el) => ({
9530
10083
  ...el,
@@ -9561,16 +10114,16 @@ function FileView({
9561
10114
  setSearchTerm("");
9562
10115
  setAppFilter("all");
9563
10116
  };
9564
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
9565
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react28.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
9566
- import_react28.motion.div,
10117
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
10118
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react29.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10119
+ import_react29.motion.div,
9567
10120
  {
9568
10121
  initial: { opacity: 0, y: 10 },
9569
10122
  animate: { opacity: 1, y: 0 },
9570
10123
  exit: { opacity: 0, y: -10 },
9571
10124
  transition: { duration: 0.2 },
9572
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: `space-y-6 ${className || ""}`, children: [
9573
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10125
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: `space-y-6 ${className || ""}`, children: [
10126
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9574
10127
  DashboardHero,
9575
10128
  {
9576
10129
  title: "Files",
@@ -9586,10 +10139,10 @@ function FileView({
9586
10139
  }
9587
10140
  }
9588
10141
  ),
9589
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex flex-col md:flex-row gap-4", children: [
9590
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "relative", children: [
9591
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react21.Search, { className: "absolute left-3 top-3 h-4 w-4 text-muted-foreground" }),
9592
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10142
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "flex flex-col md:flex-row gap-4", children: [
10143
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "relative", children: [
10144
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react22.Search, { className: "absolute left-3 top-3 h-4 w-4 text-muted-foreground" }),
10145
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9593
10146
  Input,
9594
10147
  {
9595
10148
  placeholder: "Search files...",
@@ -9599,13 +10152,13 @@ function FileView({
9599
10152
  }
9600
10153
  )
9601
10154
  ] }) }),
9602
- (searchTerm || appFilter !== "all") && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { variant: "outline", onClick: clearFilters, className: "gap-2", children: [
9603
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react21.Filter, { className: "h-4 w-4" }),
10155
+ (searchTerm || appFilter !== "all") && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Button, { variant: "outline", onClick: clearFilters, className: "gap-2", children: [
10156
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react22.Filter, { className: "h-4 w-4" }),
9604
10157
  "Clear"
9605
10158
  ] })
9606
10159
  ] }) }) }),
9607
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "space-y-4", children: [
9608
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10160
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "space-y-4", children: [
10161
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9609
10162
  NavigationTabs,
9610
10163
  {
9611
10164
  activeTab,
@@ -9619,7 +10172,7 @@ function FileView({
9619
10172
  gridCols: 3
9620
10173
  }
9621
10174
  ),
9622
- activeTab === "all" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10175
+ activeTab === "all" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9623
10176
  FileList,
9624
10177
  {
9625
10178
  files: filteredFiles,
@@ -9629,7 +10182,7 @@ function FileView({
9629
10182
  showHeader: !compactView
9630
10183
  }
9631
10184
  ),
9632
- activeTab === "recent" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10185
+ activeTab === "recent" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9633
10186
  FileList,
9634
10187
  {
9635
10188
  files: recentFiles,
@@ -9639,7 +10192,7 @@ function FileView({
9639
10192
  showHeader: !compactView
9640
10193
  }
9641
10194
  ),
9642
- activeTab === "shared" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10195
+ activeTab === "shared" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9643
10196
  FileList,
9644
10197
  {
9645
10198
  files: sharedFiles,
@@ -9650,12 +10203,12 @@ function FileView({
9650
10203
  }
9651
10204
  )
9652
10205
  ] }),
9653
- filteredFiles.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "text-center py-8", children: [
9654
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react21.File, { className: "h-12 w-12 text-muted-foreground mx-auto mb-4" }),
9655
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h3", { className: "text-lg font-semibold mb-2", children: "No files found" }),
9656
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "text-muted-foreground mb-4", children: searchTerm || appFilter !== "all" ? "Try adjusting your filters to see more results." : "Get started by uploading your first file." }),
9657
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(Button, { onClick: handleAddFile, className: "gap-2", children: [
9658
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react21.Plus, { className: "h-4 w-4" }),
10206
+ filteredFiles.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "text-center py-8", children: [
10207
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react22.File, { className: "h-12 w-12 text-muted-foreground mx-auto mb-4" }),
10208
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h3", { className: "text-lg font-semibold mb-2", children: "No files found" }),
10209
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "text-muted-foreground mb-4", children: searchTerm || appFilter !== "all" ? "Try adjusting your filters to see more results." : "Get started by uploading your first file." }),
10210
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(Button, { onClick: handleAddFile, className: "gap-2", children: [
10211
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_lucide_react22.Plus, { className: "h-4 w-4" }),
9659
10212
  "Upload File"
9660
10213
  ] })
9661
10214
  ] }) }) })
@@ -9663,7 +10216,7 @@ function FileView({
9663
10216
  },
9664
10217
  "files-view"
9665
10218
  ) }),
9666
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
10219
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
9667
10220
  AddFileModal,
9668
10221
  {
9669
10222
  isOpen: isAddFileModalOpen,
@@ -9676,7 +10229,7 @@ function FileView({
9676
10229
 
9677
10230
  // src/components/Projects/ProjectView.tsx
9678
10231
  var import_navigation = require("next/navigation");
9679
- var import_jsx_runtime51 = require("react/jsx-runtime");
10232
+ var import_jsx_runtime52 = require("react/jsx-runtime");
9680
10233
  function ProjectView({
9681
10234
  title = "",
9682
10235
  initialTasks = [],
@@ -9724,47 +10277,47 @@ function ProjectView({
9724
10277
  onCopilotClick,
9725
10278
  handleAddComment
9726
10279
  }) {
9727
- const [tasks, setTasks] = (0, import_react29.useState)(initialTasks);
9728
- const [epics, setEpics] = (0, import_react29.useState)(initialEpics);
9729
- const [sprints, setSprints] = (0, import_react29.useState)(initialSprints);
9730
- const [projects, setProjects] = (0, import_react29.useState)(initialProjects);
9731
- const [reminders, setReminders] = (0, import_react29.useState)(initialReminders);
9732
- const [colleagues, setColleagues] = (0, import_react29.useState)(initialColleagues);
9733
- const [users, setUsers] = (0, import_react29.useState)(initialUsers);
9734
- const [files, setFiles] = (0, import_react29.useState)(initialFiles);
9735
- const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react29.useState)(false);
9736
- const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react29.useState)(false);
9737
- const [selectedTask, setSelectedTask] = (0, import_react29.useState)(null);
9738
- const [selectedEpicForTask, setSelectedEpicForTask] = (0, import_react29.useState)(null);
9739
- const [draggedTask, setDraggedTask] = (0, import_react29.useState)(null);
9740
- const [currentView, setCurrentView] = (0, import_react29.useState)(initialView || "kanban");
9741
- const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react29.useState)(false);
10280
+ const [tasks, setTasks] = (0, import_react30.useState)(initialTasks);
10281
+ const [epics, setEpics] = (0, import_react30.useState)(initialEpics);
10282
+ const [sprints, setSprints] = (0, import_react30.useState)(initialSprints);
10283
+ const [projects, setProjects] = (0, import_react30.useState)(initialProjects);
10284
+ const [reminders, setReminders] = (0, import_react30.useState)(initialReminders);
10285
+ const [colleagues, setColleagues] = (0, import_react30.useState)(initialColleagues);
10286
+ const [users, setUsers] = (0, import_react30.useState)(initialUsers);
10287
+ const [files, setFiles] = (0, import_react30.useState)(initialFiles);
10288
+ const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react30.useState)(false);
10289
+ const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react30.useState)(false);
10290
+ const [selectedTask, setSelectedTask] = (0, import_react30.useState)(null);
10291
+ const [selectedEpicForTask, setSelectedEpicForTask] = (0, import_react30.useState)(null);
10292
+ const [draggedTask, setDraggedTask] = (0, import_react30.useState)(null);
10293
+ const [currentView, setCurrentView] = (0, import_react30.useState)(initialView || "kanban");
10294
+ const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react30.useState)(false);
9742
10295
  const router = (0, import_navigation.useRouter)();
9743
- (0, import_react29.useEffect)(() => {
10296
+ (0, import_react30.useEffect)(() => {
9744
10297
  setTasks(initialTasks);
9745
10298
  }, [initialTasks]);
9746
- (0, import_react29.useEffect)(() => {
10299
+ (0, import_react30.useEffect)(() => {
9747
10300
  setSprints(initialSprints);
9748
10301
  }, [initialSprints]);
9749
- (0, import_react29.useEffect)(() => {
10302
+ (0, import_react30.useEffect)(() => {
9750
10303
  setEpics(initialEpics);
9751
10304
  }, [initialEpics]);
9752
- (0, import_react29.useEffect)(() => {
10305
+ (0, import_react30.useEffect)(() => {
9753
10306
  setProjects(initialProjects);
9754
10307
  }, [initialProjects]);
9755
- (0, import_react29.useEffect)(() => {
10308
+ (0, import_react30.useEffect)(() => {
9756
10309
  setFiles(initialFiles);
9757
10310
  }, [initialFiles]);
9758
- (0, import_react29.useEffect)(() => {
10311
+ (0, import_react30.useEffect)(() => {
9759
10312
  setUsers(initialUsers);
9760
10313
  }, [initialUsers]);
9761
- (0, import_react29.useEffect)(() => {
10314
+ (0, import_react30.useEffect)(() => {
9762
10315
  setColleagues(initialColleagues);
9763
10316
  }, [initialColleagues]);
9764
- (0, import_react29.useEffect)(() => {
10317
+ (0, import_react30.useEffect)(() => {
9765
10318
  setReminders(initialReminders);
9766
10319
  }, [initialReminders]);
9767
- (0, import_react29.useEffect)(() => {
10320
+ (0, import_react30.useEffect)(() => {
9768
10321
  setCurrentView(initialView);
9769
10322
  }, [initialView]);
9770
10323
  const filteredTasks = tasks.filter((task) => {
@@ -9970,6 +10523,8 @@ function ProjectView({
9970
10523
  return "Documentation";
9971
10524
  case "epics":
9972
10525
  return "Epic Planning";
10526
+ case "gantt":
10527
+ return "Gantt Chart";
9973
10528
  default:
9974
10529
  return "Project Board";
9975
10530
  }
@@ -9985,8 +10540,8 @@ function ProjectView({
9985
10540
  const recentTeams = mockTeams.sort((a, b) => b.lastUsed.getTime() - a.lastUsed.getTime()).slice(0, 3);
9986
10541
  const hasMoreTeams = mockTeams.length > 3;
9987
10542
  const additionalTeams = mockTeams.slice(3);
9988
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(ManagementSidebar, { currentView, onViewChange: handleViewChange, children: [
9989
- currentView === "kanban" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10543
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(ManagementSidebar, { currentView, onViewChange: handleViewChange, children: [
10544
+ currentView === "kanban" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "h-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
9990
10545
  KanbanBoardView,
9991
10546
  {
9992
10547
  initialProjects: projects,
@@ -10003,7 +10558,7 @@ function ProjectView({
10003
10558
  onAddComment: handleAddComment
10004
10559
  }
10005
10560
  ) }),
10006
- currentView === "planning" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10561
+ currentView === "planning" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10007
10562
  PlanningView,
10008
10563
  {
10009
10564
  tasks,
@@ -10016,7 +10571,7 @@ function ProjectView({
10016
10571
  onDeleteSprint: handleDeleteSprint
10017
10572
  }
10018
10573
  ) }),
10019
- currentView === "tasks" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10574
+ currentView === "tasks" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10020
10575
  TasksView,
10021
10576
  {
10022
10577
  initialReminders: reminders,
@@ -10026,7 +10581,7 @@ function ProjectView({
10026
10581
  onDeleteReminder: handleDeleteReminder
10027
10582
  }
10028
10583
  ) }),
10029
- currentView === "files" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10584
+ currentView === "files" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10030
10585
  FileView,
10031
10586
  {
10032
10587
  initialFiles: files,
@@ -10037,7 +10592,7 @@ function ProjectView({
10037
10592
  compactView: false
10038
10593
  }
10039
10594
  ) }),
10040
- currentView === "epics" && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10595
+ currentView === "epics" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10041
10596
  EpicsView,
10042
10597
  {
10043
10598
  tasks,
@@ -10051,7 +10606,17 @@ function ProjectView({
10051
10606
  onDeleteEpic: handleDeleteEpic
10052
10607
  }
10053
10608
  ) }),
10054
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10609
+ currentView === "gantt" && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10610
+ GanttView,
10611
+ {
10612
+ tasks,
10613
+ epics,
10614
+ sprints,
10615
+ onUpdateEpic: handleUpdateEpic,
10616
+ onTaskClick: handleTaskClick
10617
+ }
10618
+ ) }),
10619
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10055
10620
  AddTaskModal,
10056
10621
  {
10057
10622
  isOpen: isAddTaskModalOpen,
@@ -10063,7 +10628,7 @@ function ProjectView({
10063
10628
  defaultEpicId: selectedEpicForTask || void 0
10064
10629
  }
10065
10630
  ),
10066
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
10631
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
10067
10632
  AddEpicModal,
10068
10633
  {
10069
10634
  isOpen: isAddEpicModalOpen,