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,10 +38,10 @@ __export(ProjectPage_exports, {
38
38
  default: () => ProjectPage
39
39
  });
40
40
  module.exports = __toCommonJS(ProjectPage_exports);
41
- var import_react34 = require("react");
42
- var import_react35 = require("motion/react");
41
+ var import_react35 = require("react");
42
+ var import_react36 = require("motion/react");
43
43
 
44
- // src/components/DigitalColleagues/DigitalColleageusLayout.tsx
44
+ // src/components/Foundry/foundary-layout.tsx
45
45
  var import_react6 = require("react");
46
46
 
47
47
  // src/utils/cn.ts
@@ -2661,7 +2661,7 @@ var DialogContent = React4.forwardRef(({ className, children, ...props }, ref) =
2661
2661
  {
2662
2662
  ref,
2663
2663
  className: cn(
2664
- "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",
2664
+ "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",
2665
2665
  className
2666
2666
  ),
2667
2667
  ...props,
@@ -2724,15 +2724,9 @@ var Checkbox = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__
2724
2724
  ));
2725
2725
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
2726
2726
 
2727
- // src/components/DigitalColleagues/test-data.tsx
2727
+ // src/components/Foundry/test-data.tsx
2728
2728
  var import_lucide_react3 = require("lucide-react");
2729
2729
  var import_jsx_runtime7 = require("react/jsx-runtime");
2730
- var createKnowledgeDocument = (title) => ({
2731
- id: Math.random().toString(36).substr(2, 9),
2732
- title,
2733
- format: "markdown",
2734
- createdAt: /* @__PURE__ */ new Date()
2735
- });
2736
2730
  var mockSidebarItems = [
2737
2731
  {
2738
2732
  id: "home",
@@ -2987,289 +2981,392 @@ var businessUnits = [
2987
2981
  ];
2988
2982
  var mockProjects = [
2989
2983
  {
2990
- id: "1",
2984
+ id: 1,
2991
2985
  name: "E-commerce Platform",
2992
2986
  description: "Main customer-facing e-commerce application",
2993
- isSelected: true
2987
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
2988
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
2989
+ team: 1
2990
+ // isSelected: true,
2994
2991
  },
2995
2992
  {
2996
- id: "2",
2993
+ id: 2,
2997
2994
  name: "Admin Dashboard",
2998
2995
  description: "Internal administration and analytics dashboard",
2999
- isSelected: false
2996
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
2997
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
2998
+ team: 1
2999
+ // isSelected: false,
3000
3000
  },
3001
3001
  {
3002
- id: "3",
3002
+ id: 3,
3003
3003
  name: "Mobile App",
3004
3004
  description: "Native mobile application for iOS and Android",
3005
- isSelected: false
3005
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3006
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3007
+ team: 1
3008
+ // isSelected: false,
3006
3009
  }
3007
3010
  ];
3008
3011
  var mockEpics = [
3009
3012
  {
3010
- id: "1",
3013
+ id: 1,
3011
3014
  name: "User Authentication",
3012
3015
  color: "bg-blue-500",
3013
3016
  description: "Implement secure user authentication system",
3014
3017
  confidence: "high",
3015
3018
  phase: 2,
3016
3019
  // development
3017
- startDate: /* @__PURE__ */ new Date("2024-01-01"),
3018
- endDate: /* @__PURE__ */ new Date("2024-02-15"),
3019
- progress: 75,
3020
- isSelected: true
3020
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3021
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3022
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3023
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3024
+ // progress: 75,
3025
+ // isSelected: true,
3021
3026
  },
3022
3027
  {
3023
- id: "2",
3028
+ id: 2,
3024
3029
  name: "Dashboard Features",
3025
3030
  color: "bg-green-500",
3026
3031
  description: "Build comprehensive dashboard functionality",
3027
3032
  confidence: "medium",
3028
3033
  phase: 1,
3029
3034
  // planning
3030
- startDate: /* @__PURE__ */ new Date("2024-02-01"),
3031
- endDate: /* @__PURE__ */ new Date("2024-03-15"),
3032
- progress: 30,
3033
- isSelected: true
3035
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3036
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3037
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3038
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3039
+ // progress: 30,
3040
+ // isSelected: true,
3034
3041
  },
3035
3042
  {
3036
- id: "3",
3043
+ id: 3,
3037
3044
  name: "Mobile Optimization",
3038
3045
  color: "bg-purple-500",
3039
3046
  description: "Optimize application for mobile devices",
3040
3047
  confidence: "low",
3041
3048
  phase: 1,
3042
3049
  // planning
3043
- startDate: /* @__PURE__ */ new Date("2024-03-01"),
3044
- endDate: /* @__PURE__ */ new Date("2024-04-15"),
3045
- progress: 10,
3046
- isSelected: true
3050
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3051
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3052
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3053
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3054
+ // progress: 10,
3055
+ // isSelected: true,
3047
3056
  },
3048
3057
  {
3049
- id: "4",
3058
+ id: 4,
3050
3059
  name: "Performance Improvements",
3051
3060
  color: "bg-orange-500",
3052
3061
  description: "Enhance application performance and speed",
3053
3062
  confidence: "high",
3054
3063
  phase: 3,
3055
3064
  // testing
3056
- startDate: /* @__PURE__ */ new Date("2024-01-15"),
3057
- endDate: /* @__PURE__ */ new Date("2024-02-28"),
3058
- progress: 90,
3059
- isSelected: true
3065
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3066
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3067
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3068
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3069
+ // progress: 90,
3070
+ // isSelected: true,
3060
3071
  }
3061
3072
  ];
3062
3073
  var mockSprints = [
3063
3074
  {
3064
- id: "backlog",
3075
+ id: 1,
3065
3076
  name: "Backlog",
3066
3077
  description: "Tasks not yet assigned to a sprint",
3067
- startDate: /* @__PURE__ */ new Date("2024-01-01"),
3068
- endDate: /* @__PURE__ */ new Date("2024-12-31"),
3069
- isActive: false,
3070
- isSelected: false
3078
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3079
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3080
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3081
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3082
+ // isActive: false,
3083
+ // isSelected: false,
3071
3084
  },
3072
3085
  {
3073
- id: "all-tasks",
3086
+ id: 2,
3074
3087
  name: "All Tasks",
3075
3088
  description: "View all tasks across all sprints",
3076
- startDate: /* @__PURE__ */ new Date("2024-01-01"),
3077
- endDate: /* @__PURE__ */ new Date("2024-12-31"),
3078
- isActive: false,
3079
- isSelected: true
3089
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3090
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3091
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3092
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3093
+ // isActive: false,
3094
+ // isSelected: true,
3080
3095
  },
3081
3096
  {
3082
- id: "1",
3097
+ id: 3,
3083
3098
  name: "Sprint 1",
3084
3099
  description: "Initial development phase",
3085
- startDate: /* @__PURE__ */ new Date("2024-01-01"),
3086
- endDate: /* @__PURE__ */ new Date("2024-01-14"),
3087
- isActive: false,
3088
- isSelected: false
3100
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3101
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3102
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3103
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3104
+ // isActive: false,
3105
+ // isSelected: false,
3089
3106
  },
3090
3107
  {
3091
- id: "2",
3108
+ id: 4,
3092
3109
  name: "Sprint 2",
3093
3110
  description: "Feature development",
3094
- startDate: /* @__PURE__ */ new Date("2024-01-15"),
3095
- endDate: /* @__PURE__ */ new Date("2024-01-28"),
3096
- isActive: true,
3097
- isSelected: false
3111
+ startDate: (/* @__PURE__ */ new Date()).toString(),
3112
+ endDate: (/* @__PURE__ */ new Date()).toString(),
3113
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3114
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3115
+ // isActive: true,
3116
+ // isSelected: false,
3098
3117
  }
3099
3118
  ];
3100
3119
  var mockTasks = [
3101
3120
  {
3102
- id: "1",
3121
+ id: 1,
3103
3122
  name: "Design login page",
3104
3123
  description: "Create wireframes and mockups for the login interface",
3105
3124
  status: "todo",
3106
3125
  priority: "high",
3107
3126
  type: "story",
3108
- points: 5,
3109
- epicId: "1",
3110
- sprintId: "2",
3111
- assignee: "John Doe",
3112
- createdAt: /* @__PURE__ */ new Date("2024-01-15")
3127
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3128
+ index: 1,
3129
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3130
+ // points: 5,
3131
+ // epicId: '1',
3132
+ // sprintId: '2',
3133
+ assignee: {
3134
+ relationTo: "users",
3135
+ value: "John Doe"
3136
+ },
3137
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3113
3138
  },
3114
3139
  {
3115
- id: "2",
3140
+ id: 2,
3116
3141
  name: "Implement OAuth integration",
3117
3142
  description: "Add Google and GitHub OAuth authentication",
3118
3143
  status: "review",
3119
3144
  priority: "high",
3120
3145
  type: "task",
3121
- points: 8,
3122
- epicId: "1",
3123
- sprintId: "2",
3124
- assignee: "Jane Smith",
3125
- createdAt: /* @__PURE__ */ new Date("2024-01-16")
3146
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3147
+ index: 2,
3148
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3149
+ // points: 8,
3150
+ // epicId: '1',
3151
+ // sprintId: '2',
3152
+ assignee: {
3153
+ relationTo: "users",
3154
+ value: "Jane Smith"
3155
+ },
3156
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3126
3157
  },
3127
3158
  {
3128
- id: "3",
3159
+ id: 3,
3129
3160
  name: "Create dashboard widgets",
3130
3161
  description: "Build analytics and metrics widgets for the main dashboard",
3131
3162
  status: "todo",
3132
3163
  priority: "medium",
3133
3164
  type: "story",
3134
- points: 13,
3135
- epicId: "2",
3136
- sprintId: "2",
3137
- assignee: "Mike Johnson",
3138
- createdAt: /* @__PURE__ */ new Date("2024-01-17")
3165
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3166
+ index: 3,
3167
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3168
+ // points: 13,
3169
+ // epicId: '2',
3170
+ // sprintId: '2',
3171
+ assignee: {
3172
+ relationTo: "users",
3173
+ value: "Mike Johnson"
3174
+ },
3175
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3139
3176
  },
3140
3177
  {
3141
- id: "4",
3178
+ id: 4,
3142
3179
  name: "Fix login redirect bug",
3143
3180
  description: "Resolve issue where users are not redirected after login",
3144
3181
  status: "done",
3145
3182
  priority: "high",
3146
3183
  type: "bug",
3147
- points: 3,
3148
- epicId: "1",
3149
- sprintId: "1",
3150
- assignee: "Sarah Wilson",
3151
- createdAt: /* @__PURE__ */ new Date("2024-01-14")
3184
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3185
+ index: 4,
3186
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3187
+ // points: 3,
3188
+ // epicId: '1',
3189
+ // sprintId: '1',
3190
+ assignee: {
3191
+ relationTo: "users",
3192
+ value: "Sarah Wilson"
3193
+ },
3194
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3152
3195
  },
3153
3196
  {
3154
- id: "5",
3197
+ id: 5,
3155
3198
  name: "Research mobile frameworks",
3156
3199
  description: "Investigate best practices for mobile responsive design",
3157
3200
  status: "in-progress",
3158
3201
  priority: "medium",
3159
3202
  type: "spike",
3160
- points: 5,
3161
- epicId: "3",
3162
- assignee: "Alex Brown",
3163
- createdAt: /* @__PURE__ */ new Date("2024-01-18")
3203
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3204
+ index: 5,
3205
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3206
+ // points: 5,
3207
+ // epicId: '3',
3208
+ assignee: {
3209
+ relationTo: "users",
3210
+ value: "Alex Brown"
3211
+ },
3212
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3164
3213
  },
3165
3214
  {
3166
- id: "6",
3215
+ id: 6,
3167
3216
  name: "Update user profile page",
3168
3217
  description: "Enhance user profile with new settings and preferences",
3169
3218
  status: "review",
3170
3219
  priority: "medium",
3171
3220
  type: "story",
3172
- points: 8,
3173
- epicId: "2",
3174
- sprintId: "2",
3175
- assignee: "Emma Davis",
3176
- createdAt: /* @__PURE__ */ new Date("2024-01-19")
3221
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3222
+ index: 6,
3223
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3224
+ // points: 8,
3225
+ // epicId: '2',
3226
+ // sprintId: '2',
3227
+ assignee: {
3228
+ relationTo: "users",
3229
+ value: "Emma Davis"
3230
+ },
3231
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3177
3232
  },
3178
3233
  {
3179
- id: "7",
3234
+ id: 7,
3180
3235
  name: "Performance optimization",
3181
3236
  description: "Optimize database queries and improve page load times",
3182
3237
  status: "done",
3183
3238
  priority: "high",
3184
3239
  type: "task",
3185
- points: 13,
3186
- epicId: "4",
3187
- sprintId: "1",
3188
- assignee: "Tom Wilson",
3189
- createdAt: /* @__PURE__ */ new Date("2024-01-13")
3240
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3241
+ index: 7,
3242
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3243
+ // points: 13,
3244
+ // epicId: '4',
3245
+ // sprintId: '1',
3246
+ assignee: {
3247
+ relationTo: "users",
3248
+ value: "Tom Wilson"
3249
+ },
3250
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3190
3251
  }
3191
3252
  ];
3192
3253
  var highDensityTasks = [
3193
3254
  ...mockTasks,
3194
3255
  {
3195
- id: "8",
3256
+ id: 8,
3196
3257
  name: "Add search functionality",
3197
3258
  description: "Implement search across all dashboard widgets",
3198
3259
  status: "todo",
3199
3260
  priority: "medium",
3200
3261
  type: "story",
3201
- points: 8,
3202
- epicId: "2",
3203
- sprintId: "2",
3204
- assignee: "Chris Lee",
3205
- createdAt: /* @__PURE__ */ new Date("2024-01-20")
3262
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3263
+ index: 8,
3264
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3265
+ // points: 8,
3266
+ // epicId: '2',
3267
+ // sprintId: '2',
3268
+ assignee: {
3269
+ relationTo: "users",
3270
+ value: "1"
3271
+ },
3272
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3206
3273
  },
3207
3274
  {
3208
- id: "9",
3275
+ id: 9,
3209
3276
  name: "Fix mobile responsive issues",
3210
3277
  description: "Resolve layout problems on mobile devices",
3211
3278
  status: "in-progress",
3212
3279
  priority: "high",
3213
3280
  type: "bug",
3214
- points: 5,
3215
- epicId: "3",
3216
- sprintId: "2",
3217
- assignee: "Taylor Swift",
3218
- createdAt: /* @__PURE__ */ new Date("2024-01-21")
3281
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3282
+ index: 9,
3283
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3284
+ // points: 5,
3285
+ // epicId: '3',
3286
+ // sprintId: '2',
3287
+ assignee: {
3288
+ relationTo: "users",
3289
+ value: "Taylor Swift"
3290
+ },
3291
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3219
3292
  },
3220
3293
  {
3221
- id: "10",
3294
+ id: 10,
3222
3295
  name: "Implement dark mode",
3223
3296
  description: "Add dark theme support across the application",
3224
3297
  status: "review",
3225
3298
  priority: "low",
3226
3299
  type: "story",
3227
- points: 13,
3228
- epicId: "2",
3229
- sprintId: "2",
3230
- assignee: "Jordan Smith",
3231
- createdAt: /* @__PURE__ */ new Date("2024-01-22")
3300
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3301
+ index: 10,
3302
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3303
+ // points: 13,
3304
+ // epicId: '2',
3305
+ // sprintId: '2',
3306
+ assignee: {
3307
+ relationTo: "users",
3308
+ value: "Jordan Smith"
3309
+ },
3310
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3232
3311
  },
3233
3312
  {
3234
- id: "11",
3313
+ id: 11,
3235
3314
  name: "API rate limiting",
3236
3315
  description: "Implement rate limiting for API endpoints",
3237
3316
  status: "done",
3238
3317
  priority: "high",
3239
3318
  type: "task",
3240
- points: 8,
3241
- epicId: "4",
3242
- sprintId: "1",
3243
- assignee: "Morgan Davis",
3244
- createdAt: /* @__PURE__ */ new Date("2024-01-12")
3319
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3320
+ index: 11,
3321
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3322
+ // points: 8,
3323
+ // epicId: '4',
3324
+ // sprintId: '1',
3325
+ assignee: {
3326
+ relationTo: "users",
3327
+ value: "Morgan Davis"
3328
+ },
3329
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3245
3330
  },
3246
3331
  {
3247
- id: "12",
3332
+ id: 12,
3248
3333
  name: "User onboarding flow",
3249
3334
  description: "Create guided tour for new users",
3250
3335
  status: "todo",
3251
3336
  priority: "medium",
3252
3337
  type: "story",
3253
- points: 21,
3254
- epicId: "1",
3255
- sprintId: "2",
3256
- assignee: "Casey Johnson",
3257
- createdAt: /* @__PURE__ */ new Date("2024-01-23")
3338
+ dateLogged: (/* @__PURE__ */ new Date()).toString(),
3339
+ index: 12,
3340
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3341
+ // points: 21,
3342
+ // epicId: '1',
3343
+ // sprintId: '2',
3344
+ assignee: {
3345
+ relationTo: "users",
3346
+ value: "Casey Johnson"
3347
+ },
3348
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3258
3349
  }
3259
3350
  ];
3260
3351
  var extendedProjects = [
3261
- ...mockProjects,
3352
+ // ...mockProjects,
3262
3353
  {
3263
- id: "4",
3354
+ id: 4,
3264
3355
  name: "Analytics Platform",
3265
3356
  description: "Business intelligence and reporting system",
3266
- isSelected: false
3357
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3358
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3359
+ team: 1
3360
+ // isSelected: false,
3267
3361
  },
3268
3362
  {
3269
- id: "5",
3363
+ id: 5,
3270
3364
  name: "API Gateway",
3271
3365
  description: "Microservices API management layer",
3272
- isSelected: false
3366
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3367
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3368
+ // isSelected: false,
3369
+ team: 1
3273
3370
  }
3274
3371
  ];
3275
3372
  var emptyStateData = {
@@ -3310,7 +3407,9 @@ var singleEpicData = {
3310
3407
  isSelected: true
3311
3408
  }
3312
3409
  ],
3313
- tasks: mockTasks.filter((task) => task.epicId === "1")
3410
+ tasks: mockTasks.filter(
3411
+ (task) => typeof task.epic === "object" ? task.epic?.id === 1 : task.epic === 1
3412
+ )
3314
3413
  };
3315
3414
  var testScenarios = {
3316
3415
  empty: {
@@ -3350,243 +3449,322 @@ var mockColleagues = [
3350
3449
  type: "human",
3351
3450
  name: "Sarah Johnson",
3352
3451
  email: "sarah.johnson@company.com",
3353
- role: "Senior Designer",
3354
- department: "Design",
3355
- status: "active",
3356
- joinedDate: /* @__PURE__ */ new Date("2023-01-15"),
3357
- lastActive: /* @__PURE__ */ new Date(),
3358
- phone: "+1 (555) 123-4567",
3359
- location: "San Francisco, CA",
3360
- timezone: "PST",
3361
- skills: ["UI/UX Design", "Figma", "Adobe Creative Suite", "Prototyping", "User Research"],
3362
- bio: "Passionate designer with 8+ years of experience creating user-centered digital experiences."
3452
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3453
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3454
+ // role: 'Senior Designer',
3455
+ // department: 'Design',
3456
+ // status: 'active',
3457
+ // joinedDate: new Date('2023-01-15'),
3458
+ // lastActive: new Date(),
3459
+ // phone: '+1 (555) 123-4567',
3460
+ // location: 'San Francisco, CA',
3461
+ // timezone: 'PST',
3462
+ // skills: ['UI/UX Design', 'Figma', 'Adobe Creative Suite', 'Prototyping', 'User Research'],
3463
+ // bio: 'Passionate designer with 8+ years of experience creating user-centered digital experiences.',
3363
3464
  },
3364
3465
  {
3365
- id: "2",
3466
+ id: 2,
3366
3467
  type: "digital",
3367
3468
  name: "CodeAssist Pro",
3368
- status: "active",
3369
- joinedDate: /* @__PURE__ */ new Date("2024-01-01"),
3370
- lastActive: /* @__PURE__ */ new Date(),
3469
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3470
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3371
3471
  jobDescription: "AI-powered coding assistant that helps with code review, debugging, and documentation generation.",
3372
3472
  workInstructions: "Review pull requests for code quality and best practices. Generate comprehensive documentation for new features. Assist with debugging complex issues. Provide code suggestions and optimizations.",
3373
3473
  capabilities: [
3374
- "Code Review",
3375
- "Documentation Generation",
3376
- "Debugging",
3377
- "Code Optimization",
3378
- "Testing"
3474
+ {
3475
+ relationTo: "mcpTools",
3476
+ value: 1
3477
+ },
3478
+ {
3479
+ relationTo: "mcpTools",
3480
+ value: 2
3481
+ }
3379
3482
  ],
3380
- knowledge: ["JavaScript", "TypeScript", "React", "Node.js", "Python", "Git"].map(
3381
- createKnowledgeDocument
3382
- ),
3383
- coreKnowledge: ["Company coding standards", "Architecture patterns", "Security guidelines"].map(
3384
- createKnowledgeDocument
3385
- ),
3386
- version: "2",
3387
- lastUpdated: /* @__PURE__ */ new Date("2024-01-15"),
3388
- isActive: true
3483
+ knowledge: 1,
3484
+ coreKnowledge: 1,
3485
+ capabilityLevel: 1,
3486
+ // version: '2',
3487
+ // lastUpdated: new Date('2024-01-15').toString(),
3488
+ // isActive: true,
3489
+ identity: {
3490
+ id: 1,
3491
+ keycloakClientId: "123",
3492
+ keycloakUserId: "456",
3493
+ secretManagementMode: "manual",
3494
+ keycloakClientSecret: "new-secret",
3495
+ keycloakSecretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret",
3496
+ keycloakSecretLocation: "us-east-1",
3497
+ keycloakSecretLastUpdated: (/* @__PURE__ */ new Date()).toString(),
3498
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3499
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3500
+ }
3389
3501
  },
3390
3502
  {
3391
3503
  id: "3",
3392
3504
  type: "human",
3393
3505
  name: "Michael Chen",
3394
3506
  email: "michael.chen@company.com",
3395
- role: "Product Manager",
3396
- department: "Product",
3397
- status: "inactive",
3398
- joinedDate: /* @__PURE__ */ new Date("2022-08-20"),
3399
- lastActive: new Date(Date.now() - 2 * 60 * 60 * 1e3),
3400
- // 2 hours ago
3401
- phone: "+1 (555) 987-6543",
3402
- location: "New York, NY",
3403
- timezone: "EST",
3404
- skills: ["Product Strategy", "Agile", "Data Analysis", "User Stories", "Roadmapping"],
3405
- bio: "Strategic product manager focused on driving user engagement and business growth."
3507
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3508
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3509
+ // role: 'Product Manager',
3510
+ // department: 'Product',
3511
+ // status: 'inactive',
3512
+ // joinedDate: new Date('2022-08-20'),
3513
+ // lastActive: new Date(Date.now() - 2 * 60 * 60 * 1000), // 2 hours ago
3514
+ // phone: '+1 (555) 987-6543',
3515
+ // location: 'New York, NY',
3516
+ // timezone: 'EST',
3517
+ // skills: ['Product Strategy', 'Agile', 'Data Analysis', 'User Stories', 'Roadmapping'],
3518
+ // bio: 'Strategic product manager focused on driving user engagement and business growth.',
3406
3519
  },
3407
3520
  {
3408
- id: "4",
3521
+ id: 4,
3409
3522
  type: "digital",
3410
3523
  name: "MarketingBot",
3411
- status: "active",
3412
- joinedDate: /* @__PURE__ */ new Date("2024-02-01"),
3413
- lastActive: /* @__PURE__ */ new Date(),
3524
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3525
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3414
3526
  jobDescription: "Specialized AI assistant for marketing campaigns, content creation, and social media management.",
3415
3527
  workInstructions: "Create engaging social media content. Analyze campaign performance metrics. Generate marketing copy and headlines. Schedule and manage social media posts.",
3416
3528
  capabilities: [
3417
- "Content Creation",
3418
- "Social Media Management",
3419
- "Analytics",
3420
- "SEO Optimization",
3421
- "Campaign Management"
3529
+ {
3530
+ relationTo: "mcpTools",
3531
+ value: 1
3532
+ },
3533
+ {
3534
+ relationTo: "mcpTools",
3535
+ value: 2
3536
+ }
3422
3537
  ],
3423
- knowledge: [
3424
- "Digital Marketing",
3425
- "Social Media Platforms",
3426
- "Content Strategy",
3427
- "Analytics Tools"
3428
- ].map(createKnowledgeDocument),
3429
- coreKnowledge: ["Brand guidelines", "Target audience personas", "Marketing objectives"].map(
3430
- createKnowledgeDocument
3431
- ),
3432
- version: "52",
3433
- lastUpdated: /* @__PURE__ */ new Date("2024-02-10"),
3434
- isActive: true
3538
+ knowledge: 1,
3539
+ coreKnowledge: 1,
3540
+ capabilityLevel: 1,
3541
+ // version: '52',
3542
+ // lastUpdated: new Date('2024-02-10'),
3543
+ // isActive: true,
3544
+ identity: {
3545
+ id: 1,
3546
+ keycloakClientId: "123",
3547
+ keycloakUserId: "456",
3548
+ secretManagementMode: "manual",
3549
+ keycloakClientSecret: "new-secret",
3550
+ keycloakSecretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret",
3551
+ keycloakSecretLocation: "us-east-1",
3552
+ keycloakSecretLastUpdated: (/* @__PURE__ */ new Date()).toString(),
3553
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3554
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3555
+ }
3435
3556
  },
3436
3557
  {
3437
3558
  id: "5",
3438
3559
  type: "human",
3439
3560
  name: "Emily Rodriguez",
3440
3561
  email: "emily.rodriguez@company.com",
3441
- role: "UX Researcher",
3442
- department: "Design",
3443
- status: "inactive",
3444
- joinedDate: /* @__PURE__ */ new Date("2023-06-10"),
3445
- lastActive: new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3),
3446
- // 7 days ago
3447
- phone: "+1 (555) 456-7890",
3448
- location: "Austin, TX",
3449
- timezone: "CST",
3450
- skills: [
3451
- "User Research",
3452
- "Usability Testing",
3453
- "Data Analysis",
3454
- "Survey Design",
3455
- "Interview Techniques"
3456
- ],
3457
- bio: "User researcher dedicated to understanding user needs and improving product experiences."
3562
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3563
+ updatedAt: (/* @__PURE__ */ new Date()).toString()
3564
+ // role: 'UX Researcher',
3565
+ // department: 'Design',
3566
+ // status: 'inactive',
3567
+ // joinedDate: new Date('2023-06-10'),
3568
+ // lastActive: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // 7 days ago
3569
+ // phone: '+1 (555) 456-7890',
3570
+ // location: 'Austin, TX',
3571
+ // timezone: 'CST',
3572
+ // skills: [
3573
+ // 'User Research',
3574
+ // 'Usability Testing',
3575
+ // 'Data Analysis',
3576
+ // 'Survey Design',
3577
+ // 'Interview Techniques',
3578
+ // ],
3579
+ // bio: 'User researcher dedicated to understanding user needs and improving product experiences.',
3458
3580
  },
3459
3581
  {
3460
- id: "6",
3582
+ id: 6,
3461
3583
  type: "digital",
3462
3584
  name: "DataAnalyzer Pro",
3463
- status: "active",
3464
- joinedDate: /* @__PURE__ */ new Date("2024-01-10"),
3465
- lastActive: /* @__PURE__ */ new Date(),
3585
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3586
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3466
3587
  jobDescription: "Advanced AI assistant specializing in data analysis, reporting, and business intelligence.",
3467
3588
  workInstructions: "Analyze complex datasets, generate insightful reports, create data visualizations, and provide actionable business recommendations.",
3468
3589
  capabilities: [
3469
- "Data Analysis",
3470
- "Report Generation",
3471
- "Data Visualization",
3472
- "Business Intelligence",
3473
- "Statistical Analysis"
3590
+ {
3591
+ relationTo: "mcpTools",
3592
+ value: 1
3593
+ },
3594
+ {
3595
+ relationTo: "mcpTools",
3596
+ value: 2
3597
+ },
3598
+ {
3599
+ relationTo: "mcpTools",
3600
+ value: 3
3601
+ }
3474
3602
  ],
3475
- knowledge: ["Python", "SQL", "Tableau", "Excel", "R", "Statistics"].map(
3476
- createKnowledgeDocument
3477
- ),
3478
- coreKnowledge: ["Company data sources", "KPI definitions", "Reporting standards"].map(
3479
- createKnowledgeDocument
3480
- ),
3481
- version: "3.1",
3482
- lastUpdated: /* @__PURE__ */ new Date("2024-02-20"),
3483
- isActive: true
3603
+ knowledge: 1,
3604
+ coreKnowledge: 1,
3605
+ capabilityLevel: 1,
3606
+ // version: '3.1',
3607
+ // lastUpdated: new Date('2024-02-20'),
3608
+ // isActive: true,
3609
+ identity: {
3610
+ id: 1,
3611
+ keycloakClientId: "123",
3612
+ keycloakUserId: "456",
3613
+ secretManagementMode: "manual",
3614
+ keycloakClientSecret: "new-secret",
3615
+ keycloakSecretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret",
3616
+ keycloakSecretLocation: "us-east-1",
3617
+ keycloakSecretLastUpdated: (/* @__PURE__ */ new Date()).toString(),
3618
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3619
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3620
+ }
3484
3621
  },
3485
3622
  {
3486
- id: "7",
3623
+ id: 7,
3487
3624
  type: "digital",
3488
3625
  name: "ProjectManager AI",
3489
- status: "active",
3490
- joinedDate: /* @__PURE__ */ new Date("2024-01-05"),
3491
- lastActive: /* @__PURE__ */ new Date(),
3626
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3627
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3492
3628
  jobDescription: "Intelligent project management assistant that helps coordinate tasks, track progress, and manage timelines.",
3493
3629
  workInstructions: "Coordinate project activities, track milestones, manage resource allocation, and provide project status updates.",
3494
3630
  capabilities: [
3495
- "Project Planning",
3496
- "Task Coordination",
3497
- "Timeline Management",
3498
- "Resource Allocation",
3499
- "Progress Tracking"
3631
+ {
3632
+ relationTo: "mcpTools",
3633
+ value: 1
3634
+ },
3635
+ {
3636
+ relationTo: "mcpTools",
3637
+ value: 2
3638
+ },
3639
+ {
3640
+ relationTo: "mcpTools",
3641
+ value: 4
3642
+ },
3643
+ {
3644
+ relationTo: "mcpTools",
3645
+ value: 5
3646
+ }
3500
3647
  ],
3501
- knowledge: ["Agile", "Scrum", "Gantt Charts", "Risk Management", "Stakeholder Management"].map(
3502
- createKnowledgeDocument
3503
- ),
3504
- coreKnowledge: [
3505
- "Company project templates",
3506
- "Resource availability",
3507
- "Project methodologies"
3508
- ].map(createKnowledgeDocument),
3509
- version: "2.5",
3510
- lastUpdated: /* @__PURE__ */ new Date("2024-02-15"),
3511
- isActive: true
3648
+ knowledge: 1,
3649
+ coreKnowledge: 1,
3650
+ capabilityLevel: 1,
3651
+ // version: '2.5',
3652
+ // lastUpdated: new Date('2024-02-15'),
3653
+ // isActive: true,
3654
+ identity: {
3655
+ id: 1,
3656
+ keycloakClientId: "123",
3657
+ keycloakUserId: "456",
3658
+ secretManagementMode: "manual",
3659
+ keycloakClientSecret: "new-secret",
3660
+ keycloakSecretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret",
3661
+ keycloakSecretLocation: "us-east-1",
3662
+ keycloakSecretLastUpdated: (/* @__PURE__ */ new Date()).toString(),
3663
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3664
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3665
+ }
3512
3666
  },
3513
3667
  {
3514
- id: "8",
3668
+ id: 8,
3515
3669
  type: "digital",
3516
3670
  name: "CustomerSupport Bot",
3517
- status: "active",
3518
- joinedDate: /* @__PURE__ */ new Date("2024-02-01"),
3519
- lastActive: /* @__PURE__ */ new Date(),
3671
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3672
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3520
3673
  jobDescription: "AI-powered customer support assistant that handles inquiries, resolves issues, and escalates complex problems.",
3521
3674
  workInstructions: "Respond to customer inquiries, troubleshoot common issues, provide product information, and escalate complex cases to human agents.",
3522
3675
  capabilities: [
3523
- "Customer Support",
3524
- "Issue Resolution",
3525
- "Product Knowledge",
3526
- "Escalation Management",
3527
- "Chat Support"
3676
+ {
3677
+ relationTo: "mcpTools",
3678
+ value: 1
3679
+ },
3680
+ {
3681
+ relationTo: "mcpTools",
3682
+ value: 2
3683
+ },
3684
+ {
3685
+ relationTo: "mcpTools",
3686
+ value: 5
3687
+ }
3528
3688
  ],
3529
- knowledge: [
3530
- "Product Documentation",
3531
- "FAQ",
3532
- "Troubleshooting Guides",
3533
- "Customer Service Best Practices"
3534
- ].map(createKnowledgeDocument),
3535
- coreKnowledge: ["Product catalog", "Support processes", "Escalation procedures"].map(
3536
- createKnowledgeDocument
3537
- ),
3538
- version: "1.8",
3539
- lastUpdated: /* @__PURE__ */ new Date("2024-02-25"),
3540
- isActive: true
3689
+ knowledge: 1,
3690
+ coreKnowledge: 1,
3691
+ capabilityLevel: 1,
3692
+ // version: '1.8',
3693
+ // lastUpdated: new Date('2024-02-25'),
3694
+ // isActive: true,
3695
+ identity: {
3696
+ id: 1,
3697
+ keycloakClientId: "123",
3698
+ keycloakUserId: "456",
3699
+ secretManagementMode: "manual",
3700
+ keycloakClientSecret: "new-secret",
3701
+ keycloakSecretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret",
3702
+ keycloakSecretLocation: "us-east-1",
3703
+ keycloakSecretLastUpdated: (/* @__PURE__ */ new Date()).toString(),
3704
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3705
+ createdAt: (/* @__PURE__ */ new Date()).toString()
3706
+ }
3541
3707
  }
3542
3708
  ];
3543
3709
  var mockReminders = [
3544
3710
  {
3545
- id: "1",
3711
+ id: 1,
3546
3712
  title: "Review quarterly report",
3547
3713
  description: "Go through Q4 performance metrics and prepare summary for the team meeting",
3548
- dueDate: new Date(2024, 2, 15),
3714
+ dueDate: new Date(2024, 2, 15).toString(),
3549
3715
  dueTime: "14:30",
3550
- colleague: mockColleagues.find((c) => c.id === "2" && c.type === "digital"),
3551
- isCompleted: false,
3716
+ assignedColleague: mockColleagues.find(
3717
+ (c) => c.id === "2" && c.type === "digital"
3718
+ ),
3719
+ // isCompleted: false,
3552
3720
  isRecurring: false,
3553
- priority: "high",
3554
- reminderEnabled: true,
3555
- reminderMinutes: 30,
3556
- createdAt: new Date(2024, 2, 10),
3557
- tags: ["quarterly", "review", "urgent"]
3721
+ // priority: 'high',
3722
+ // reminderEnabled: true,
3723
+ // reminderMinutes: 30,
3724
+ createdAt: new Date(2024, 2, 10).toString(),
3725
+ updatedAt: new Date(2024, 2, 10).toString(),
3726
+ project: mockProjects[0]
3727
+ // tags: ['quarterly', 'review', 'urgent'],
3558
3728
  },
3559
3729
  {
3560
- id: "2",
3730
+ id: 2,
3561
3731
  title: "Weekly team standup",
3562
3732
  description: "Join the weekly team synchronization meeting",
3563
- dueDate: new Date(2024, 2, 18),
3733
+ dueDate: new Date(2024, 2, 18).toString(),
3564
3734
  dueTime: "10:00",
3565
- colleague: mockColleagues.find((c) => c.id === "4" && c.type === "digital"),
3566
- isCompleted: false,
3567
- isRecurring: true,
3568
- recurrencePattern: "weekly",
3569
- recurrenceInterval: 1,
3570
- priority: "medium",
3571
- reminderEnabled: true,
3572
- reminderMinutes: 15,
3573
- createdAt: new Date(2024, 2, 11),
3574
- tags: ["meeting", "standup", "weekly"]
3735
+ assignedColleague: mockColleagues.find(
3736
+ (c) => c.id === "4" && c.type === "digital"
3737
+ ),
3738
+ // isCompleted: false,
3739
+ // isRecurring: true,
3740
+ // recurrencePattern: 'weekly',
3741
+ // recurrenceInterval: 1,
3742
+ // priority: 'medium',
3743
+ // reminderEnabled: true,
3744
+ // reminderMinutes: 15,
3745
+ createdAt: new Date(2024, 2, 11).toString(),
3746
+ updatedAt: new Date(2024, 2, 11).toString(),
3747
+ project: mockProjects[0]
3748
+ // tags: ['meeting', 'standup', 'weekly'],
3575
3749
  },
3576
3750
  {
3577
- id: "3",
3751
+ id: 3,
3578
3752
  title: "Deploy to production",
3579
3753
  description: "Deploy the latest version to production environment",
3580
- dueDate: /* @__PURE__ */ new Date(),
3754
+ dueDate: (/* @__PURE__ */ new Date()).toString(),
3581
3755
  dueTime: "16:00",
3582
- colleague: mockColleagues.find((c) => c.id === "2" && c.type === "digital"),
3583
- isCompleted: false,
3584
- isRecurring: false,
3585
- priority: "high",
3586
- reminderEnabled: true,
3587
- reminderMinutes: 60,
3588
- createdAt: /* @__PURE__ */ new Date(),
3589
- tags: ["deploy", "production", "urgent"]
3756
+ assignedColleague: mockColleagues.find(
3757
+ (c) => c.id === "2" && c.type === "digital"
3758
+ ),
3759
+ // isCompleted: false,
3760
+ // isRecurring: false,
3761
+ // priority: 'high',
3762
+ // reminderEnabled: true,
3763
+ // reminderMinutes: 60,
3764
+ createdAt: (/* @__PURE__ */ new Date()).toString(),
3765
+ updatedAt: (/* @__PURE__ */ new Date()).toString(),
3766
+ project: mockProjects[0]
3767
+ // tags: ['deploy', 'production', 'urgent'],
3590
3768
  }
3591
3769
  ];
3592
3770
  var mockDigitalColleagues = mockColleagues.filter(
@@ -3605,15 +3783,16 @@ function useLocalStorage(key, initialValue) {
3605
3783
  return initialValue;
3606
3784
  }
3607
3785
  });
3608
- const setValue = (value) => {
3786
+ const setValue = (0, import_react.useCallback)((value) => {
3609
3787
  try {
3610
- setStoredValue(value);
3788
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
3789
+ setStoredValue(valueToStore);
3611
3790
  if (typeof window !== "undefined") {
3612
- window.localStorage.setItem(key, JSON.stringify(value));
3791
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
3613
3792
  }
3614
3793
  } catch (error) {
3615
3794
  }
3616
- };
3795
+ }, [key, storedValue]);
3617
3796
  (0, import_react.useEffect)(() => {
3618
3797
  setValue(storedValue);
3619
3798
  }, []);
@@ -4485,7 +4664,7 @@ function AppHeader({
4485
4664
  ] });
4486
4665
  }
4487
4666
 
4488
- // src/components/DigitalColleagues/DigitalColleageusLayout.tsx
4667
+ // src/components/Foundry/foundary-layout.tsx
4489
4668
  var import_lucide_react9 = require("lucide-react");
4490
4669
  var import_jsx_runtime17 = require("react/jsx-runtime");
4491
4670
  var businessUnits2 = [
@@ -4498,7 +4677,7 @@ var businessUnits2 = [
4498
4677
  accentColor: "text-orange-600"
4499
4678
  }
4500
4679
  ];
4501
- function DigitalColleageusLayout({
4680
+ function FoundryLayout({
4502
4681
  sidebarItems,
4503
4682
  children,
4504
4683
  title = "Digital Colleagues",
@@ -4517,6 +4696,7 @@ function DigitalColleageusLayout({
4517
4696
  onNotificationRemove,
4518
4697
  onRemoveAll,
4519
4698
  logo = "/headerlogo.png",
4699
+ logoLink = "/teams",
4520
4700
  appName = "Nuvia",
4521
4701
  tagline = "Collaboration Platform",
4522
4702
  sidebarInitiallyClosed = false
@@ -4529,7 +4709,13 @@ function DigitalColleageusLayout({
4529
4709
  onBusinessUnitChange?.(unit);
4530
4710
  };
4531
4711
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex h-full flex-col overflow-hidden rounded-xl bg-background w-[]", children: [
4532
- mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "fixed inset-0 z-40 bg-black/50 md:hidden", onClick: () => setMobileMenuOpen(false) }),
4712
+ mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4713
+ "div",
4714
+ {
4715
+ className: "fixed inset-0 z-40 bg-black/50 md:hidden",
4716
+ onClick: () => setMobileMenuOpen(false)
4717
+ }
4718
+ ),
4533
4719
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "md:hidden", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4534
4720
  AppSidebar,
4535
4721
  {
@@ -4541,6 +4727,7 @@ function DigitalColleageusLayout({
4541
4727
  onBusinessUnitChange: handleBusinessUnitChange,
4542
4728
  onSearch,
4543
4729
  logo,
4730
+ logoLink,
4544
4731
  appName,
4545
4732
  tagline
4546
4733
  }
@@ -4555,41 +4742,51 @@ function DigitalColleageusLayout({
4555
4742
  onBusinessUnitChange: handleBusinessUnitChange,
4556
4743
  onSearch,
4557
4744
  logo,
4745
+ logoLink,
4558
4746
  appName,
4559
4747
  tagline
4560
4748
  }
4561
4749
  ) }),
4562
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cn("min-h-screen fixed w-full transition-all duration-300 ease-in-out", sidebarOpen ? "md:pl-64" : "md:pl-0"), children: [
4563
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4564
- AppHeader,
4565
- {
4566
- title,
4567
- notifications,
4568
- onToggleSidebar: () => setSidebarOpen(!sidebarOpen),
4569
- onToggleMobileMenu: () => setMobileMenuOpen(true),
4570
- sidebarOpen,
4571
- activeTab,
4572
- onTabChange,
4573
- showTabs,
4574
- onActionClick,
4575
- actionIcon,
4576
- actionText,
4577
- onNotificationRemove,
4578
- onRemoveAll,
4579
- logo,
4580
- appName,
4581
- tagline
4582
- }
4583
- ),
4584
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("main", { className: "flex-1 p-0 flex flex-col h-[calc(100vh-4rem)] overflow-hidden", children })
4585
- ] })
4750
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
4751
+ "div",
4752
+ {
4753
+ className: cn(
4754
+ "min-h-screen fixed w-full transition-all duration-300 ease-in-out",
4755
+ sidebarOpen ? "md:pl-64" : "md:pl-0"
4756
+ ),
4757
+ children: [
4758
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4759
+ AppHeader,
4760
+ {
4761
+ title,
4762
+ notifications,
4763
+ onToggleSidebar: () => setSidebarOpen(!sidebarOpen),
4764
+ onToggleMobileMenu: () => setMobileMenuOpen(true),
4765
+ sidebarOpen,
4766
+ activeTab,
4767
+ onTabChange,
4768
+ showTabs,
4769
+ onActionClick,
4770
+ actionIcon,
4771
+ actionText,
4772
+ onNotificationRemove,
4773
+ onRemoveAll,
4774
+ logo,
4775
+ appName,
4776
+ tagline
4777
+ }
4778
+ ),
4779
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("main", { className: "flex-1 p-0 flex flex-col h-[calc(100vh-4rem)] overflow-y-scroll", children })
4780
+ ]
4781
+ }
4782
+ )
4586
4783
  ] });
4587
4784
  }
4588
4785
 
4589
4786
  // src/components/Projects/ProjectView.tsx
4590
- var import_react33 = require("react");
4787
+ var import_react34 = require("react");
4591
4788
 
4592
- // src/components/DigitalColleagues/ManagementSidebar.tsx
4789
+ // src/components/Foundry/ManagementSidebar.tsx
4593
4790
  var import_lucide_react10 = require("lucide-react");
4594
4791
  var import_jsx_runtime18 = require("react/jsx-runtime");
4595
4792
  var viewConfig = [
@@ -4628,6 +4825,14 @@ var viewConfig = [
4628
4825
  label: "Tasks",
4629
4826
  color: "bg-brand-cyan",
4630
4827
  title: "Tasks"
4828
+ },
4829
+ {
4830
+ key: "gantt",
4831
+ icon: import_lucide_react10.BarChart2,
4832
+ label: "Gantt",
4833
+ color: "bg-brand-blue",
4834
+ title: "Gantt Chart",
4835
+ hiddenOnMobile: true
4631
4836
  }
4632
4837
  ];
4633
4838
  var ManagementSidebar = ({
@@ -4635,15 +4840,15 @@ var ManagementSidebar = ({
4635
4840
  onViewChange,
4636
4841
  children
4637
4842
  }) => {
4638
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex w-full h-screen", children: [
4639
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "w-12 h-full bg-sidebar-background flex flex-col flex-shrink-0", children: viewConfig.map((view) => {
4843
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex w-full h-full", children: [
4844
+ /* @__PURE__ */ (0, import_jsx_runtime18.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) => {
4640
4845
  const Icon2 = view.icon;
4641
4846
  const isActive = currentView === view.key;
4642
4847
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4643
4848
  "button",
4644
4849
  {
4645
4850
  onClick: () => onViewChange(view.key),
4646
- 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`,
4851
+ 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" : ""}`,
4647
4852
  title: view.title,
4648
4853
  children: [
4649
4854
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon2, { className: "h-4 w-4 flex-shrink-0" }),
@@ -4653,7 +4858,7 @@ var ManagementSidebar = ({
4653
4858
  view.key
4654
4859
  );
4655
4860
  }) }),
4656
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex-1 min-w-0 px-4 md:px-6 h-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "w-full h-full", children }) })
4861
+ /* @__PURE__ */ (0, import_jsx_runtime18.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_runtime18.jsx)("div", { className: "w-full h-full", children }) })
4657
4862
  ] });
4658
4863
  };
4659
4864
 
@@ -6687,8 +6892,8 @@ function ToolbarPlugin() {
6687
6892
  blockNode = curr;
6688
6893
  }
6689
6894
  if (blockNode) {
6690
- const format2 = blockNode.getFormatType();
6691
- setAlignment(format2 || "left");
6895
+ const format3 = blockNode.getFormatType();
6896
+ setAlignment(format3 || "left");
6692
6897
  }
6693
6898
  const tag = anchorNode.getTopLevelElement()?.__tag;
6694
6899
  setBlockType(tag || "p");
@@ -7688,7 +7893,7 @@ var markdownToLexical = (markdown) => {
7688
7893
  var convertFileTypeToKnowledgeDocument = async (file) => {
7689
7894
  let content = "";
7690
7895
  let richTextContent = void 0;
7691
- let format2 = "text";
7896
+ let format3 = "text";
7692
7897
  if (file.url) {
7693
7898
  try {
7694
7899
  let url = file.url;
@@ -7709,18 +7914,18 @@ var convertFileTypeToKnowledgeDocument = async (file) => {
7709
7914
  console.warn("No URL provided for file:", file.name);
7710
7915
  }
7711
7916
  if (file.mimeType === "text/markdown") {
7712
- format2 = "richText";
7917
+ format3 = "richText";
7713
7918
  richTextContent = markdownToLexical(content);
7714
7919
  } else if (file.mimeType?.startsWith("text/")) {
7715
- format2 = "text";
7920
+ format3 = "text";
7716
7921
  }
7717
7922
  return {
7718
7923
  id: file.id.toString(),
7719
7924
  title: file.name,
7720
7925
  description: void 0,
7721
- content: format2 === "richText" ? void 0 : content,
7722
- richTextContent: format2 === "richText" ? richTextContent : void 0,
7723
- format: format2,
7926
+ content: format3 === "richText" ? void 0 : content,
7927
+ richTextContent: format3 === "richText" ? richTextContent : void 0,
7928
+ format: format3,
7724
7929
  metadata: {},
7725
7930
  createdAt: typeof file.createdAt === "string" ? new Date(file.createdAt) : file.createdAt,
7726
7931
  updatedAt: /* @__PURE__ */ new Date()
@@ -7770,8 +7975,8 @@ function FileEdit({ document: document2, onCancel, onSave, onFileUpdate }) {
7770
7975
  setRichTextContent(document2.richTextContent);
7771
7976
  }
7772
7977
  }, [document2]);
7773
- const formatIcon = (format2) => {
7774
- switch (format2) {
7978
+ const formatIcon = (format3) => {
7979
+ switch (format3) {
7775
7980
  case "markdown":
7776
7981
  case "mdx":
7777
7982
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react19.FileText, { className: "h-6 w-6 text-primary" });
@@ -7783,8 +7988,8 @@ function FileEdit({ document: document2, onCancel, onSave, onFileUpdate }) {
7783
7988
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react19.File, { className: "h-6 w-6 text-muted-foreground" });
7784
7989
  }
7785
7990
  };
7786
- const formatBadgeColor = (format2) => {
7787
- switch (format2) {
7991
+ const formatBadgeColor = (format3) => {
7992
+ switch (format3) {
7788
7993
  case "markdown":
7789
7994
  return "bg-primary/10 text-primary border-primary/20";
7790
7995
  case "mdx":
@@ -9056,17 +9261,25 @@ var import_react27 = require("react");
9056
9261
  var import_lucide_react24 = require("lucide-react");
9057
9262
  var import_jsx_runtime54 = require("react/jsx-runtime");
9058
9263
  var EpicsView = ({
9264
+ projectId,
9059
9265
  tasks,
9060
9266
  epics,
9061
9267
  sprints,
9268
+ colleagues = [],
9062
9269
  onUpdateTask,
9063
9270
  onTaskClick,
9064
9271
  onAddTaskToEpic,
9065
9272
  onAddEpic,
9066
9273
  onUpdateEpic,
9067
- onDeleteEpic
9274
+ onDeleteEpic,
9275
+ onDeleteTask,
9276
+ onAddComment,
9277
+ onUploadFile,
9278
+ onDeleteFile,
9279
+ onFileUpdate
9068
9280
  }) => {
9069
9281
  const [availableEpics, setAvailableEpics] = (0, import_react27.useState)(epics);
9282
+ const [availableTasks, setAvailableTasks] = (0, import_react27.useState)(tasks);
9070
9283
  const [draggedTask, setDraggedTask] = (0, import_react27.useState)(null);
9071
9284
  const [editingEpic, setEditingEpic] = (0, import_react27.useState)(null);
9072
9285
  const [editForm, setEditForm] = (0, import_react27.useState)({});
@@ -9074,16 +9287,29 @@ var EpicsView = ({
9074
9287
  const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react27.useState)(false);
9075
9288
  const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react27.useState)(false);
9076
9289
  const [addTaskEpic, setAddTaskEpic] = (0, import_react27.useState)(null);
9290
+ const [selectedTask, setSelectedTask] = (0, import_react27.useState)(null);
9291
+ const [selectedEpicIds, setSelectedEpicIds] = useLocalStorage(
9292
+ `epicsView_selectedEpics${projectId ? `_${projectId}` : ""}`,
9293
+ []
9294
+ );
9295
+ const [isEpicSelectorOpen, setIsEpicSelectorOpen] = (0, import_react27.useState)(false);
9077
9296
  const heroRef = (0, import_react27.useRef)(null);
9078
9297
  const containerRef = (0, import_react27.useRef)(null);
9079
9298
  (0, import_react27.useEffect)(() => {
9080
9299
  setAvailableEpics(epics);
9300
+ const validIds = new Set(epics.map((e) => e.id.toString()));
9301
+ setSelectedEpicIds((prev) => prev.filter((id) => validIds.has(id)));
9081
9302
  }, [epics]);
9303
+ (0, import_react27.useEffect)(() => {
9304
+ setAvailableTasks(tasks);
9305
+ if (selectedTask) {
9306
+ setSelectedTask(tasks.find((t) => t.id === selectedTask.id) || null);
9307
+ }
9308
+ }, [tasks]);
9082
9309
  (0, import_react27.useEffect)(() => {
9083
9310
  const measureHeroHeight = () => {
9084
9311
  if (heroRef.current) {
9085
- const height = heroRef.current.offsetHeight;
9086
- setHeroHeight(height);
9312
+ setHeroHeight(heroRef.current.offsetHeight);
9087
9313
  }
9088
9314
  };
9089
9315
  measureHeroHeight();
@@ -9108,6 +9334,12 @@ var EpicsView = ({
9108
9334
  }, 300);
9109
9335
  return () => clearTimeout(timer);
9110
9336
  }, [editingEpic]);
9337
+ const visibleEpics = selectedEpicIds.length === 0 ? availableEpics : availableEpics.filter((e) => selectedEpicIds.includes(e.id.toString()));
9338
+ const toggleEpicView = (epicId) => {
9339
+ setSelectedEpicIds(
9340
+ (prev) => prev.includes(epicId) ? prev.filter((id) => id !== epicId) : [...prev, epicId]
9341
+ );
9342
+ };
9111
9343
  const handleDragStart = (task) => {
9112
9344
  setDraggedTask(task);
9113
9345
  };
@@ -9117,14 +9349,41 @@ var EpicsView = ({
9117
9349
  const handleDrop = (e, epicId) => {
9118
9350
  e.preventDefault();
9119
9351
  if (draggedTask && extractId(draggedTask.epic).toString() !== epicId) {
9120
- onUpdateTask(draggedTask.id.toString(), {
9121
- epic: Number(epicId)
9122
- });
9352
+ onUpdateTask(draggedTask.id.toString(), { epic: Number(epicId) });
9353
+ setAvailableTasks(
9354
+ (prev) => prev.map((t) => t.id === draggedTask.id ? { ...t, epic: Number(epicId) } : t)
9355
+ );
9123
9356
  setDraggedTask(null);
9124
9357
  }
9125
9358
  };
9126
9359
  const getTasksByEpic = (epicId) => {
9127
- return tasks.filter((task) => extractId(task.epic).toString() === epicId);
9360
+ return availableTasks.filter((task) => extractId(task.epic).toString() === epicId);
9361
+ };
9362
+ const handleTaskClick = (task) => {
9363
+ setSelectedTask(task);
9364
+ onTaskClick?.(task);
9365
+ };
9366
+ const handleUpdateTask = async (taskId, updates) => {
9367
+ setAvailableTasks(
9368
+ (prev) => prev.map((t) => t.id === Number(taskId) ? { ...t, ...updates } : t)
9369
+ );
9370
+ if (selectedTask?.id === Number(taskId)) {
9371
+ setSelectedTask((prev) => prev ? { ...prev, ...updates } : null);
9372
+ }
9373
+ await onUpdateTask(taskId, updates);
9374
+ };
9375
+ const handleDeleteTask = async (taskId) => {
9376
+ setAvailableTasks((prev) => prev.filter((t) => t.id !== Number(taskId)));
9377
+ if (selectedTask?.id === Number(taskId)) {
9378
+ setSelectedTask(null);
9379
+ }
9380
+ await onDeleteTask?.(taskId);
9381
+ };
9382
+ const handleRemoveFromEpic = (task) => {
9383
+ onUpdateTask(task.id.toString(), { epic: null });
9384
+ setAvailableTasks(
9385
+ (prev) => prev.map((t) => t.id === task.id ? { ...t, epic: null } : t)
9386
+ );
9128
9387
  };
9129
9388
  const handleEditEpic = (epic) => {
9130
9389
  setEditingEpic(epic.id.toString());
@@ -9133,19 +9392,15 @@ var EpicsView = ({
9133
9392
  description: epic.description,
9134
9393
  confidence: epic.confidence,
9135
9394
  phase: epic.phase
9136
- // progress: epic.progress || 0, // This is a number, not a string
9137
9395
  });
9138
9396
  };
9139
9397
  const handleSaveEdit = async () => {
9140
9398
  if (editingEpic && editForm.name) {
9141
9399
  await onUpdateEpic(editingEpic.toString(), editForm);
9142
9400
  setAvailableEpics(
9143
- (prev) => prev.map((epic) => {
9144
- if (epic.id.toString() === editingEpic) {
9145
- return { ...epic, ...editForm };
9146
- }
9147
- return epic;
9148
- })
9401
+ (prev) => prev.map(
9402
+ (epic) => epic.id.toString() === editingEpic ? { ...epic, ...editForm } : epic
9403
+ )
9149
9404
  );
9150
9405
  setEditingEpic(null);
9151
9406
  setEditForm({});
@@ -9161,6 +9416,7 @@ var EpicsView = ({
9161
9416
  )) {
9162
9417
  await onDeleteEpic(epicId);
9163
9418
  setAvailableEpics((prev) => prev.filter((epic) => epic.id.toString() !== epicId));
9419
+ setSelectedEpicIds((prev) => prev.filter((id) => id !== epicId));
9164
9420
  }
9165
9421
  };
9166
9422
  const getPhaseLabel = (phase) => {
@@ -9203,218 +9459,315 @@ var EpicsView = ({
9203
9459
  }
9204
9460
  }
9205
9461
  ) }),
9206
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9462
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9207
9463
  "div",
9208
9464
  {
9209
- className: "h-full overflow-y-auto",
9465
+ className: "h-full overflow-y-auto no-scrollbar",
9210
9466
  style: {
9211
9467
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
9212
9468
  },
9213
- children: /* @__PURE__ */ (0, import_jsx_runtime54.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) => {
9214
- const epicTasks = getTasksByEpic(epic.id.toString());
9215
- const totalPoints = epicTasks.reduce(
9216
- (sum, task) => sum + (task.storyPoints || 0),
9217
- 0
9218
- );
9219
- const availableHeight = heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 14rem)";
9220
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9221
- Card,
9222
- {
9223
- className: `flex flex-col ${editingEpic === epic.id.toString() ? "h-auto" : ""} bg-card shadow-sm`,
9224
- style: {
9225
- height: editingEpic === epic.id.toString() ? "auto" : availableHeight,
9226
- minHeight: "400px"
9227
- },
9228
- onDragOver: handleDragOver,
9229
- onDrop: (e) => handleDrop(e, epic.id.toString()),
9230
- children: [
9231
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "p-4 border-b border-border", children: editingEpic === epic.id.toString() ? (
9232
- /* Edit Mode */
9233
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "space-y-4", children: [
9234
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between", children: [
9235
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9236
- Input,
9237
- {
9238
- value: editForm.name || "",
9239
- onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
9240
- placeholder: "Epic name",
9241
- className: "font-semibold"
9242
- }
9243
- ),
9244
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex gap-2 ml-2", children: [
9245
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9246
- Button,
9247
- {
9248
- size: "sm",
9249
- variant: "ghost",
9250
- onClick: handleSaveEdit,
9251
- className: "p-1 h-8 w-8",
9252
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Check, { className: "h-4 w-4" })
9253
- }
9254
- ),
9469
+ children: [
9470
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "mb-4", children: [
9471
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between", children: [
9472
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-3", children: [
9473
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { children: [
9474
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Epics" }),
9475
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "text-xs text-muted-foreground", children: selectedEpicIds.length === 0 ? "All showing" : `${selectedEpicIds.length}/${availableEpics.length} selected` })
9476
+ ] }),
9477
+ selectedEpicIds.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-2", children: [
9478
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
9479
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleEpics.map((epic) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9480
+ "div",
9481
+ {
9482
+ className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
9483
+ children: [
9484
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
9485
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "max-w-[80px] truncate", children: epic.name }),
9255
9486
  /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9256
- Button,
9487
+ "button",
9257
9488
  {
9258
- size: "sm",
9259
- variant: "ghost",
9260
- onClick: handleCancelEdit,
9261
- className: "p-1 h-8 w-8",
9489
+ onClick: () => toggleEpicView(epic.id.toString()),
9490
+ className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
9262
9491
  children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.X, { className: "h-4 w-4" })
9263
9492
  }
9264
9493
  )
9265
- ] })
9494
+ ]
9495
+ },
9496
+ epic.id
9497
+ )) })
9498
+ ] })
9499
+ ] }),
9500
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9501
+ Button,
9502
+ {
9503
+ onClick: () => setIsEpicSelectorOpen(!isEpicSelectorOpen),
9504
+ variant: "outline",
9505
+ size: "sm",
9506
+ className: "gap-1",
9507
+ children: [
9508
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Layers, { className: "h-3 w-3" }),
9509
+ isEpicSelectorOpen ? "Close" : "Select"
9510
+ ]
9511
+ }
9512
+ )
9513
+ ] }) }),
9514
+ isEpicSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9515
+ "div",
9516
+ {
9517
+ className: "fixed inset-0 bg-black/20 z-[5]",
9518
+ onClick: () => setIsEpicSelectorOpen(false)
9519
+ }
9520
+ ),
9521
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9522
+ "div",
9523
+ {
9524
+ 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"}`,
9525
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
9526
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
9527
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between", children: [
9528
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Epics" }),
9529
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9530
+ Button,
9531
+ {
9532
+ variant: "ghost",
9533
+ size: "sm",
9534
+ onClick: () => setIsEpicSelectorOpen(false),
9535
+ className: "h-8 w-8 p-0",
9536
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.X, { className: "h-4 w-4" })
9537
+ }
9538
+ )
9266
9539
  ] }),
9267
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9268
- Textarea,
9540
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Filter which epics to display. Select none to show all." })
9541
+ ] }),
9542
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto no-scrollbar", children: availableEpics.length > 0 ? availableEpics.map((epic) => {
9543
+ const isSelected = selectedEpicIds.includes(epic.id.toString());
9544
+ const taskCount = availableTasks.filter(
9545
+ (t) => extractId(t.epic) === epic.id
9546
+ ).length;
9547
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9548
+ "div",
9269
9549
  {
9270
- value: editForm.description || "",
9271
- onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
9272
- placeholder: "Epic description",
9273
- className: "text-sm min-h-[60px]"
9274
- }
9275
- ),
9276
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
9277
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { children: [
9278
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
9279
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9280
- "select",
9281
- {
9282
- value: editForm.confidence || epic.confidence,
9283
- onChange: (e) => setEditForm({
9284
- ...editForm,
9285
- confidence: e.target.value
9286
- }),
9287
- 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",
9288
- children: [
9289
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("option", { value: "low", children: "Low" }),
9290
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("option", { value: "medium", children: "Medium" }),
9291
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("option", { value: "high", children: "High" })
9292
- ]
9293
- }
9294
- )
9295
- ] }),
9296
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { children: [
9297
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
9298
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9299
- "select",
9300
- {
9301
- value: editForm.phase?.toString() || epic.phase.toString(),
9302
- onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
9303
- 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",
9304
- children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("option", { value: phase.toString(), children: [
9305
- "Phase ",
9306
- phase
9307
- ] }, phase))
9308
- }
9309
- )
9310
- ] })
9311
- ] })
9312
- ] })
9313
- ) : (
9314
- /* Display Mode */
9315
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
9316
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
9317
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: `w-4 h-4 rounded-full ${epic.color}` }),
9318
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("h3", { className: "font-semibold text-foreground select-none flex-1", children: epic.name }),
9319
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex gap-1", children: [
9550
+ className: `p-3 rounded-lg border transition-all ${isSelected ? "bg-primary/10 border-primary/30 ring-1 ring-primary/20" : "bg-card border-border"}`,
9551
+ children: [
9552
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between", children: [
9553
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [
9554
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
9555
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "font-medium text-sm text-foreground truncate", children: epic.name })
9556
+ ] }),
9557
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "ml-2 flex items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Badge, { variant: "secondary", className: "text-xs", children: taskCount }) })
9558
+ ] }),
9559
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9560
+ Button,
9561
+ {
9562
+ variant: isSelected ? "default" : "outline",
9563
+ size: "sm",
9564
+ className: "w-full mt-2 text-xs h-7",
9565
+ onClick: () => toggleEpicView(epic.id.toString()),
9566
+ children: isSelected ? "Deselect" : "Select"
9567
+ }
9568
+ )
9569
+ ]
9570
+ },
9571
+ epic.id
9572
+ );
9573
+ }) : /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "text-sm text-muted-foreground text-center py-8", children: "No epics yet. Add one to get started." }) }) })
9574
+ ] })
9575
+ }
9576
+ )
9577
+ ] }),
9578
+ /* @__PURE__ */ (0, import_jsx_runtime54.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) => {
9579
+ const epicTasks = getTasksByEpic(epic.id.toString());
9580
+ const totalPoints = epicTasks.reduce(
9581
+ (sum, task) => sum + (task.storyPoints || 0),
9582
+ 0
9583
+ );
9584
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9585
+ Card,
9586
+ {
9587
+ className: "flex flex-col bg-card shadow-sm",
9588
+ style: { maxHeight: "420px" },
9589
+ onDragOver: handleDragOver,
9590
+ onDrop: (e) => handleDrop(e, epic.id.toString()),
9591
+ children: [
9592
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "p-3 border-b border-border flex-shrink-0", children: editingEpic === epic.id.toString() ? (
9593
+ /* Edit Mode */
9594
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "space-y-3", children: [
9595
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center justify-between", children: [
9320
9596
  /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9321
- Button,
9597
+ Input,
9322
9598
  {
9323
- size: "sm",
9324
- variant: "ghost",
9325
- onClick: () => handleEditEpic(epic),
9326
- className: "p-1 h-8 w-8",
9327
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Edit2, { className: "h-3 w-3" })
9599
+ value: editForm.name || "",
9600
+ onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
9601
+ placeholder: "Epic name",
9602
+ className: "font-semibold text-sm"
9328
9603
  }
9329
9604
  ),
9330
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9331
- Button,
9332
- {
9333
- size: "sm",
9334
- variant: "ghost",
9335
- onClick: () => handleDeleteEpic(epic.id.toString()),
9336
- className: "p-1 h-8 w-8 hover:bg-destructive/10 hover:text-destructive",
9337
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Trash2, { className: "h-3 w-3" })
9338
- }
9339
- )
9340
- ] })
9341
- ] }),
9342
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-wrap gap-2 mb-3", children: [
9343
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Badge, { className: `text-xs ${getConfidenceColor(epic.confidence)}`, children: [
9344
- epic.confidence,
9345
- " confidence"
9346
- ] }),
9347
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Badge, { variant: "outline", className: "text-xs", children: [
9348
- "Phase ",
9349
- epic.phase
9605
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex gap-1 ml-2", children: [
9606
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9607
+ Button,
9608
+ {
9609
+ size: "sm",
9610
+ variant: "ghost",
9611
+ onClick: handleSaveEdit,
9612
+ className: "p-1 h-7 w-7",
9613
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Check, { className: "h-3 w-3" })
9614
+ }
9615
+ ),
9616
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9617
+ Button,
9618
+ {
9619
+ size: "sm",
9620
+ variant: "ghost",
9621
+ onClick: handleCancelEdit,
9622
+ className: "p-1 h-7 w-7",
9623
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.X, { className: "h-3 w-3" })
9624
+ }
9625
+ )
9626
+ ] })
9350
9627
  ] }),
9351
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9352
- Badge,
9628
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9629
+ Textarea,
9353
9630
  {
9354
- variant: "secondary",
9355
- className: "text-xs bg-muted text-muted-foreground",
9356
- children: [
9357
- epicTasks.length,
9358
- " tasks"
9359
- ]
9631
+ value: editForm.description || "",
9632
+ onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
9633
+ placeholder: "Epic description",
9634
+ className: "text-xs min-h-[50px]"
9360
9635
  }
9361
9636
  ),
9637
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
9638
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { children: [
9639
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
9640
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9641
+ "select",
9642
+ {
9643
+ value: editForm.confidence || epic.confidence,
9644
+ onChange: (e) => setEditForm({
9645
+ ...editForm,
9646
+ confidence: e.target.value
9647
+ }),
9648
+ 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",
9649
+ children: [
9650
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("option", { value: "low", children: "Low" }),
9651
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("option", { value: "medium", children: "Medium" }),
9652
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("option", { value: "high", children: "High" })
9653
+ ]
9654
+ }
9655
+ )
9656
+ ] }),
9657
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { children: [
9658
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
9659
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9660
+ "select",
9661
+ {
9662
+ value: editForm.phase?.toString() || epic.phase.toString(),
9663
+ onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
9664
+ 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",
9665
+ children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("option", { value: phase.toString(), children: [
9666
+ "Phase ",
9667
+ phase
9668
+ ] }, phase))
9669
+ }
9670
+ )
9671
+ ] })
9672
+ ] })
9673
+ ] })
9674
+ ) : (
9675
+ /* Display Mode */
9676
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
9677
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-center gap-1.5 mb-1.5", children: [
9678
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
9679
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("h3", { className: "font-semibold text-foreground text-sm select-none flex-1 truncate", children: epic.name }),
9680
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex gap-0.5", children: [
9681
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9682
+ Button,
9683
+ {
9684
+ size: "sm",
9685
+ variant: "ghost",
9686
+ onClick: () => handleEditEpic(epic),
9687
+ className: "p-1 h-6 w-6",
9688
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Edit2, { className: "h-3 w-3" })
9689
+ }
9690
+ ),
9691
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9692
+ Button,
9693
+ {
9694
+ size: "sm",
9695
+ variant: "ghost",
9696
+ onClick: () => handleDeleteEpic(epic.id.toString()),
9697
+ className: "p-1 h-6 w-6 hover:bg-destructive/10 hover:text-destructive",
9698
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Trash2, { className: "h-3 w-3" })
9699
+ }
9700
+ )
9701
+ ] })
9702
+ ] }),
9703
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-wrap gap-1 mb-2", children: [
9704
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Badge, { className: `text-xs px-1.5 py-0 ${getConfidenceColor(epic.confidence)}`, children: epic.confidence }),
9705
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Badge, { variant: "outline", className: "text-xs px-1.5 py-0", children: getPhaseLabel(epic.phase) }),
9706
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Badge, { variant: "secondary", className: "text-xs px-1.5 py-0 bg-muted text-muted-foreground", children: [
9707
+ epicTasks.length,
9708
+ "t \xB7 ",
9709
+ totalPoints,
9710
+ "pt"
9711
+ ] })
9712
+ ] }),
9713
+ epic.description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "text-xs text-muted-foreground mb-2 select-none line-clamp-2", children: epic.description }),
9362
9714
  /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9363
- Badge,
9715
+ Button,
9364
9716
  {
9365
- variant: "secondary",
9366
- className: "text-xs bg-muted text-muted-foreground",
9717
+ onClick: () => {
9718
+ setIsAddTaskModalOpen(true);
9719
+ setAddTaskEpic(epic);
9720
+ },
9721
+ variant: "outline",
9722
+ size: "sm",
9723
+ className: "w-full gap-1 h-7 text-xs",
9367
9724
  children: [
9368
- totalPoints,
9369
- " pts"
9725
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Plus, { className: "h-3 w-3" }),
9726
+ "Add Task"
9370
9727
  ]
9371
9728
  }
9372
9729
  )
9373
- ] }),
9374
- epic.description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "text-sm text-muted-foreground mb-3 select-none", children: epic.description }),
9375
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9376
- Button,
9377
- {
9378
- onClick: () => {
9379
- setIsAddTaskModalOpen(true);
9380
- setAddTaskEpic(epic);
9381
- },
9382
- variant: "outline",
9383
- size: "sm",
9384
- className: "w-full gap-2",
9385
- children: [
9386
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Plus, { className: "h-4 w-4" }),
9387
- "Add Task"
9388
- ]
9389
- }
9390
- )
9391
- ] })
9392
- ) }),
9393
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex-1 p-4 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9394
- "div",
9395
- {
9396
- className: `space-y-3 min-h-[200px] border-2 border-dashed rounded p-3 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
9397
- children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center justify-center h-32 text-muted-foreground border-2 border-dashed border-border rounded-lg", children: [
9398
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Move, { className: "h-8 w-8 mb-2" }),
9399
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-sm select-none", children: "Drop tasks here" })
9400
- ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9401
- TaskCard,
9402
- {
9403
- task,
9404
- epic,
9405
- onDragStart: handleDragStart,
9406
- onTaskClick,
9407
- isCompact: true
9408
- },
9409
- task.id
9410
- ))
9411
- }
9412
- ) })
9413
- ]
9414
- },
9415
- epic.id
9416
- );
9417
- }) })
9730
+ ] })
9731
+ ) }),
9732
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex-1 p-2 overflow-y-auto no-scrollbar min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9733
+ "div",
9734
+ {
9735
+ className: `space-y-2 min-h-[80px] border-2 border-dashed rounded p-2 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
9736
+ children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center justify-center h-16 text-muted-foreground", children: [
9737
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.Move, { className: "h-5 w-5 mb-1" }),
9738
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-xs select-none", children: "Drop tasks here" })
9739
+ ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "relative group", children: [
9740
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9741
+ TaskCard,
9742
+ {
9743
+ task,
9744
+ epic,
9745
+ onDragStart: handleDragStart,
9746
+ onTaskClick: handleTaskClick,
9747
+ isCompact: true
9748
+ }
9749
+ ),
9750
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9751
+ "button",
9752
+ {
9753
+ onClick: (e) => {
9754
+ e.stopPropagation();
9755
+ handleRemoveFromEpic(task);
9756
+ },
9757
+ title: "Remove from epic",
9758
+ 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",
9759
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react24.X, { className: "h-3 w-3" })
9760
+ }
9761
+ )
9762
+ ] }, task.id))
9763
+ }
9764
+ ) })
9765
+ ]
9766
+ },
9767
+ epic.id
9768
+ );
9769
+ }) })
9770
+ ]
9418
9771
  }
9419
9772
  ) })
9420
9773
  ] }),
@@ -9437,21 +9790,417 @@ var EpicsView = ({
9437
9790
  defaultEpicId: addTaskEpic?.id.toString() || "",
9438
9791
  sprints
9439
9792
  }
9793
+ ),
9794
+ selectedTask && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9795
+ TaskDetailsModal,
9796
+ {
9797
+ isOpen: !!selectedTask,
9798
+ onClose: () => setSelectedTask(null),
9799
+ initialTask: selectedTask,
9800
+ epics: availableEpics,
9801
+ sprints,
9802
+ onUpdateTask: handleUpdateTask,
9803
+ onDeleteTask: handleDeleteTask,
9804
+ onAddComment,
9805
+ colleagues,
9806
+ onUploadFile,
9807
+ onDeleteFile,
9808
+ onFileUpdate
9809
+ }
9440
9810
  )
9441
9811
  ] });
9442
9812
  };
9443
9813
 
9444
- // src/components/Projects/PlanningView.tsx
9445
- var import_react29 = require("react");
9446
- var import_lucide_react26 = require("lucide-react");
9447
-
9448
- // src/components/Projects/AddSprintModal.tsx
9814
+ // src/components/Projects/GanttView.tsx
9449
9815
  var import_react28 = require("react");
9450
- var import_lucide_react25 = require("lucide-react");
9451
9816
  var import_date_fns = require("date-fns");
9817
+ var import_lucide_react25 = require("lucide-react");
9452
9818
  var import_jsx_runtime55 = require("react/jsx-runtime");
9819
+ var PHASE_LABELS = {
9820
+ 1: "Plan",
9821
+ 2: "Dev",
9822
+ 3: "Test",
9823
+ 4: "Deploy",
9824
+ 5: "Review",
9825
+ 6: "Maint.",
9826
+ 7: "Complete",
9827
+ 8: "Archive",
9828
+ 9: "Legacy"
9829
+ };
9830
+ var ZOOM_LEVELS = [
9831
+ { label: "Quarter", dayWidth: 3 },
9832
+ { label: "Month", dayWidth: 7 },
9833
+ { label: "Week", dayWidth: 14 },
9834
+ { label: "Day", dayWidth: 40 }
9835
+ ];
9836
+ var ROW_HEIGHT = 48;
9837
+ var TIME_HEADER_HEIGHT = 60;
9838
+ var GanttView = ({
9839
+ tasks,
9840
+ epics,
9841
+ sprints,
9842
+ onTaskClick
9843
+ }) => {
9844
+ const [dayWidth, setDayWidth] = (0, import_react28.useState)(7);
9845
+ const [isFullscreen, setIsFullscreen] = (0, import_react28.useState)(false);
9846
+ const scrollRef = (0, import_react28.useRef)(null);
9847
+ const heroRef = (0, import_react28.useRef)(null);
9848
+ const [heroHeight, setHeroHeight] = (0, import_react28.useState)(0);
9849
+ (0, import_react28.useEffect)(() => {
9850
+ const measure = () => {
9851
+ if (heroRef.current) setHeroHeight(heroRef.current.offsetHeight);
9852
+ };
9853
+ const observer = new ResizeObserver(measure);
9854
+ if (heroRef.current) observer.observe(heroRef.current);
9855
+ return () => observer.disconnect();
9856
+ }, []);
9857
+ const { timelineStart, timelineEnd, totalDays } = (0, import_react28.useMemo)(() => {
9858
+ if (epics.length === 0) {
9859
+ const today = /* @__PURE__ */ new Date();
9860
+ const start = (0, import_date_fns.addDays)(today, -14);
9861
+ const end = (0, import_date_fns.addDays)(today, 76);
9862
+ return { timelineStart: start, timelineEnd: end, totalDays: 90 };
9863
+ }
9864
+ const allDates = epics.flatMap((e) => [new Date(e.startDate), new Date(e.endDate)]);
9865
+ const minTime = Math.min(...allDates.map((d) => d.getTime()));
9866
+ const maxTime = Math.max(...allDates.map((d) => d.getTime()));
9867
+ const paddedStart = (0, import_date_fns.addDays)(new Date(minTime), -14);
9868
+ const paddedEnd = (0, import_date_fns.addDays)(new Date(maxTime), 14);
9869
+ return {
9870
+ timelineStart: paddedStart,
9871
+ timelineEnd: paddedEnd,
9872
+ totalDays: (0, import_date_fns.differenceInDays)(paddedEnd, paddedStart)
9873
+ };
9874
+ }, [epics]);
9875
+ const { groups, sortedKeys } = (0, import_react28.useMemo)(() => {
9876
+ const groups2 = {};
9877
+ epics.forEach((epic) => {
9878
+ if (!groups2[epic.name]) groups2[epic.name] = [];
9879
+ groups2[epic.name].push(epic);
9880
+ });
9881
+ Object.values(groups2).forEach((list) => list.sort((a, b) => a.phase - b.phase));
9882
+ const sortedKeys2 = Object.keys(groups2).sort((a, b) => {
9883
+ const aMin = Math.min(...groups2[a].map((e) => new Date(e.startDate).getTime()));
9884
+ const bMin = Math.min(...groups2[b].map((e) => new Date(e.startDate).getTime()));
9885
+ return aMin - bMin;
9886
+ });
9887
+ return { groups: groups2, sortedKeys: sortedKeys2 };
9888
+ }, [epics]);
9889
+ const realSprints = (0, import_react28.useMemo)(
9890
+ () => sprints.filter((s) => {
9891
+ const name = s.name.toLowerCase();
9892
+ return name !== "backlog" && name !== "all tasks";
9893
+ }),
9894
+ [sprints]
9895
+ );
9896
+ const monthHeaders = (0, import_react28.useMemo)(
9897
+ () => (0, import_date_fns.eachMonthOfInterval)({ start: timelineStart, end: timelineEnd }).map((month) => ({
9898
+ month,
9899
+ left: (0, import_date_fns.differenceInDays)(month, timelineStart) * dayWidth
9900
+ })),
9901
+ [timelineStart, timelineEnd, dayWidth]
9902
+ );
9903
+ const totalWidth = Math.max(totalDays * dayWidth, 600);
9904
+ const scrollToToday = (0, import_react28.useCallback)(() => {
9905
+ if (scrollRef.current) {
9906
+ const todayOffset = (0, import_date_fns.differenceInDays)(/* @__PURE__ */ new Date(), timelineStart) * dayWidth;
9907
+ scrollRef.current.scrollLeft = Math.max(0, todayOffset - 200);
9908
+ }
9909
+ }, [timelineStart, dayWidth]);
9910
+ const todayLeft = (0, import_date_fns.differenceInDays)(/* @__PURE__ */ new Date(), timelineStart) * dayWidth;
9911
+ const getEpicStats = (epic) => {
9912
+ const epicTasks = tasks.filter((t) => extractId(t.epic) === epic.id);
9913
+ const done = epicTasks.filter((t) => t.status === "done").length;
9914
+ const pct = epicTasks.length > 0 ? Math.round(done / epicTasks.length * 100) : 0;
9915
+ return { total: epicTasks.length, done, pct };
9916
+ };
9917
+ const getGroupStats = (epicList) => {
9918
+ const allTasks = epicList.flatMap(
9919
+ (e) => tasks.filter((t) => extractId(t.epic) === e.id)
9920
+ );
9921
+ const done = allTasks.filter((t) => t.status === "done").length;
9922
+ const pct = allTasks.length > 0 ? Math.round(done / allTasks.length * 100) : 0;
9923
+ return { total: allTasks.length, done, pct };
9924
+ };
9925
+ const isSprintActive = (sprint) => {
9926
+ const today = /* @__PURE__ */ new Date();
9927
+ try {
9928
+ return (0, import_date_fns.isWithinInterval)(today, {
9929
+ start: new Date(sprint.startDate),
9930
+ end: new Date(sprint.endDate)
9931
+ });
9932
+ } catch {
9933
+ return false;
9934
+ }
9935
+ };
9936
+ const chartContent = /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
9937
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "w-52 flex-shrink-0 border-r bg-background z-10 flex flex-col", children: [
9938
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
9939
+ "div",
9940
+ {
9941
+ className: "border-b flex items-end pb-2 px-3 flex-shrink-0 bg-muted/20",
9942
+ style: { height: TIME_HEADER_HEIGHT },
9943
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-xs font-semibold text-muted-foreground tracking-wider uppercase", children: "Epic" })
9944
+ }
9945
+ ),
9946
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "overflow-y-auto flex-1", children: [
9947
+ sortedKeys.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "flex items-center justify-center h-24 text-sm text-muted-foreground", children: "No epics" }),
9948
+ sortedKeys.map((name) => {
9949
+ const stats = getGroupStats(groups[name]);
9950
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
9951
+ "div",
9952
+ {
9953
+ className: "flex flex-col justify-center px-3 border-b",
9954
+ style: { height: ROW_HEIGHT },
9955
+ children: [
9956
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-sm font-medium truncate", title: name, children: name }),
9957
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
9958
+ stats.total,
9959
+ " task",
9960
+ stats.total !== 1 ? "s" : "",
9961
+ " \xB7 ",
9962
+ stats.pct,
9963
+ "%"
9964
+ ] })
9965
+ ]
9966
+ },
9967
+ name
9968
+ );
9969
+ })
9970
+ ] })
9971
+ ] }),
9972
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "flex-1 overflow-x-auto overflow-y-auto", ref: scrollRef, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { style: { width: totalWidth, position: "relative" }, children: [
9973
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
9974
+ "div",
9975
+ {
9976
+ className: "sticky top-0 border-b bg-muted/20 z-20 flex-shrink-0",
9977
+ style: { height: TIME_HEADER_HEIGHT, width: totalWidth },
9978
+ children: [
9979
+ monthHeaders.map(({ month, left }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
9980
+ "div",
9981
+ {
9982
+ className: "absolute top-2 text-xs font-semibold text-muted-foreground select-none",
9983
+ style: { left: left + 4 },
9984
+ children: (0, import_date_fns.format)(month, "MMM yyyy")
9985
+ },
9986
+ month.toISOString()
9987
+ )),
9988
+ realSprints.map((sprint) => {
9989
+ const start = new Date(sprint.startDate);
9990
+ const end = new Date(sprint.endDate);
9991
+ if (start > timelineEnd || end < timelineStart) return null;
9992
+ const left = Math.max(0, (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth);
9993
+ const right = Math.min(
9994
+ totalWidth,
9995
+ (0, import_date_fns.differenceInDays)(end, timelineStart) * dayWidth
9996
+ );
9997
+ const width = right - left;
9998
+ if (width <= 0) return null;
9999
+ const active = isSprintActive(sprint);
10000
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10001
+ "div",
10002
+ {
10003
+ 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"}`,
10004
+ style: { left, width, height: 22 },
10005
+ title: sprint.name,
10006
+ children: sprint.name
10007
+ },
10008
+ `header-sprint-${sprint.id}`
10009
+ );
10010
+ })
10011
+ ]
10012
+ }
10013
+ ),
10014
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { style: { position: "relative", width: totalWidth }, children: [
10015
+ realSprints.map((sprint) => {
10016
+ const start = new Date(sprint.startDate);
10017
+ const end = new Date(sprint.endDate);
10018
+ if (start > timelineEnd || end < timelineStart) return null;
10019
+ const left = Math.max(0, (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth);
10020
+ const right = Math.min(
10021
+ totalWidth,
10022
+ (0, import_date_fns.differenceInDays)(end, timelineStart) * dayWidth
10023
+ );
10024
+ const width = right - left;
10025
+ if (width <= 0 || !isSprintActive(sprint)) return null;
10026
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10027
+ "div",
10028
+ {
10029
+ className: "absolute inset-y-0 bg-primary/5 pointer-events-none",
10030
+ style: { left, width }
10031
+ },
10032
+ `bg-${sprint.id}`
10033
+ );
10034
+ }),
10035
+ realSprints.map((sprint) => {
10036
+ const left = (0, import_date_fns.differenceInDays)(new Date(sprint.startDate), timelineStart) * dayWidth;
10037
+ if (left < 0 || left > totalWidth) return null;
10038
+ const active = isSprintActive(sprint);
10039
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10040
+ "div",
10041
+ {
10042
+ className: `absolute inset-y-0 pointer-events-none ${active ? "border-l border-primary/40" : "border-l border-dashed border-border/60"}`,
10043
+ style: { left }
10044
+ },
10045
+ `line-${sprint.id}`
10046
+ );
10047
+ }),
10048
+ todayLeft >= 0 && todayLeft <= totalWidth && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
10049
+ "div",
10050
+ {
10051
+ className: "absolute inset-y-0 pointer-events-none z-10",
10052
+ style: { left: todayLeft },
10053
+ children: [
10054
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "absolute inset-y-0 w-0.5 bg-destructive/50" }),
10055
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "absolute top-1 -translate-x-1/2 w-2 h-2 rounded-full bg-destructive" })
10056
+ ]
10057
+ }
10058
+ ),
10059
+ monthHeaders.map(({ month, left }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10060
+ "div",
10061
+ {
10062
+ className: "absolute inset-y-0 border-l border-border/30 pointer-events-none",
10063
+ style: { left }
10064
+ },
10065
+ `grid-${month.toISOString()}`
10066
+ )),
10067
+ sortedKeys.map((name) => {
10068
+ const epicList = groups[name];
10069
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10070
+ "div",
10071
+ {
10072
+ className: "border-b relative flex items-center",
10073
+ style: { height: ROW_HEIGHT },
10074
+ children: epicList.map((epic) => {
10075
+ const start = new Date(epic.startDate);
10076
+ const end = new Date(epic.endDate);
10077
+ const left = (0, import_date_fns.differenceInDays)(start, timelineStart) * dayWidth;
10078
+ const width = Math.max(8, (0, import_date_fns.differenceInDays)(end, start) * dayWidth);
10079
+ const stats = getEpicStats(epic);
10080
+ const phaseLabel = PHASE_LABELS[epic.phase] ?? `Phase ${epic.phase}`;
10081
+ const showLabel = width >= 50;
10082
+ const tooltip = [
10083
+ `${epic.name} \xB7 ${phaseLabel}`,
10084
+ epic.description ? epic.description : null,
10085
+ `${(0, import_date_fns.format)(start, "dd MMM yyyy")} \u2192 ${(0, import_date_fns.format)(end, "dd MMM yyyy")}`,
10086
+ `${stats.total} tasks \xB7 ${stats.pct}% complete`
10087
+ ].filter(Boolean).join("\n");
10088
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
10089
+ "div",
10090
+ {
10091
+ className: "absolute rounded overflow-hidden cursor-pointer hover:ring-2 hover:ring-white/40 transition-all",
10092
+ style: { left, width, height: 32, top: 8 },
10093
+ title: tooltip,
10094
+ children: [
10095
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10096
+ "div",
10097
+ {
10098
+ className: `absolute inset-0 ${epic.color}`,
10099
+ style: { opacity: 0.2 }
10100
+ }
10101
+ ),
10102
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10103
+ "div",
10104
+ {
10105
+ className: `absolute inset-y-0 left-0 ${epic.color} transition-all`,
10106
+ style: { width: `${stats.pct}%`, opacity: 0.85 }
10107
+ }
10108
+ ),
10109
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "absolute inset-0 flex items-center px-2 gap-1.5 z-10", children: [
10110
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-xs font-semibold text-white drop-shadow truncate", children: phaseLabel }),
10111
+ stats.total > 0 && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "text-xs text-white/80 drop-shadow shrink-0", children: [
10112
+ stats.pct,
10113
+ "%"
10114
+ ] })
10115
+ ] })
10116
+ ]
10117
+ },
10118
+ epic.id
10119
+ );
10120
+ })
10121
+ },
10122
+ name
10123
+ );
10124
+ }),
10125
+ sortedKeys.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10126
+ "div",
10127
+ {
10128
+ className: "flex items-center justify-center text-sm text-muted-foreground",
10129
+ style: { height: 200 },
10130
+ children: "No epics to display on the timeline"
10131
+ }
10132
+ )
10133
+ ] })
10134
+ ] }) })
10135
+ ] });
10136
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: `flex flex-col ${isFullscreen ? "h-screen" : "h-full"} overflow-hidden`, children: [
10137
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10138
+ DashboardHero,
10139
+ {
10140
+ title: "Gantt Chart",
10141
+ description: "Epic timeline with sprint alignment and phase-based grouping.",
10142
+ gradient: "bg-gradient-to-r from-indigo-600 via-blue-600 to-cyan-600",
10143
+ badge: `${sortedKeys.length} epic${sortedKeys.length !== 1 ? "s" : ""}`
10144
+ }
10145
+ ) }),
10146
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-center gap-2 px-4 py-2 border-b bg-background flex-shrink-0", children: [
10147
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react25.BarChart2, { className: "h-4 w-4 text-muted-foreground" }),
10148
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "flex items-center gap-1", children: ZOOM_LEVELS.map((z) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10149
+ Button,
10150
+ {
10151
+ variant: dayWidth === z.dayWidth ? "default" : "outline",
10152
+ size: "sm",
10153
+ className: "h-7 px-2 text-xs",
10154
+ onClick: () => setDayWidth(z.dayWidth),
10155
+ children: z.label
10156
+ },
10157
+ z.label
10158
+ )) }),
10159
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "flex-1" }),
10160
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
10161
+ Button,
10162
+ {
10163
+ variant: "outline",
10164
+ size: "sm",
10165
+ className: "h-7 px-2 text-xs",
10166
+ onClick: scrollToToday,
10167
+ children: [
10168
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react25.Calendar, { className: "h-3 w-3 mr-1" }),
10169
+ "Today"
10170
+ ]
10171
+ }
10172
+ ),
10173
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10174
+ Button,
10175
+ {
10176
+ variant: "outline",
10177
+ size: "sm",
10178
+ className: "h-7 w-7 p-0",
10179
+ onClick: () => setIsFullscreen((v) => !v),
10180
+ title: isFullscreen ? "Exit fullscreen" : "Fullscreen",
10181
+ children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react25.Minimize2, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react25.Maximize2, { className: "h-3.5 w-3.5" })
10182
+ }
10183
+ )
10184
+ ] }),
10185
+ chartContent
10186
+ ] });
10187
+ if (isFullscreen) {
10188
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "fixed inset-0 z-50 bg-background overflow-hidden", children: inner });
10189
+ }
10190
+ return inner;
10191
+ };
10192
+
10193
+ // src/components/Projects/PlanningView.tsx
10194
+ var import_react30 = require("react");
10195
+ var import_lucide_react27 = require("lucide-react");
10196
+
10197
+ // src/components/Projects/AddSprintModal.tsx
10198
+ var import_react29 = require("react");
10199
+ var import_lucide_react26 = require("lucide-react");
10200
+ var import_date_fns2 = require("date-fns");
10201
+ var import_jsx_runtime56 = require("react/jsx-runtime");
9453
10202
  var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9454
- const [formData, setFormData] = (0, import_react28.useState)({
10203
+ const [formData, setFormData] = (0, import_react29.useState)({
9455
10204
  name: "",
9456
10205
  description: "",
9457
10206
  startDate: void 0,
@@ -9492,12 +10241,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9492
10241
  });
9493
10242
  onClose();
9494
10243
  };
9495
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(DialogContent, { className: "sm:max-w-md", children: [
9496
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(DialogTitle, { children: "Add New Sprint" }) }),
9497
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
9498
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "space-y-2", children: [
9499
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Label3, { htmlFor: "name", children: "Sprint Name *" }),
9500
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10244
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Dialog, { open: isOpen, onOpenChange: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(DialogContent, { className: "sm:max-w-md", children: [
10245
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DialogTitle, { children: "Add New Sprint" }) }),
10246
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
10247
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10248
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Label3, { htmlFor: "name", children: "Sprint Name *" }),
10249
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
9501
10250
  Input,
9502
10251
  {
9503
10252
  id: "name",
@@ -9508,9 +10257,9 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9508
10257
  }
9509
10258
  )
9510
10259
  ] }),
9511
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "space-y-2", children: [
9512
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Label3, { htmlFor: "description", children: "Description" }),
9513
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10260
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10261
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Label3, { htmlFor: "description", children: "Description" }),
10262
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
9514
10263
  Textarea,
9515
10264
  {
9516
10265
  id: "description",
@@ -9521,11 +10270,11 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9521
10270
  }
9522
10271
  )
9523
10272
  ] }),
9524
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
9525
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "space-y-2", children: [
9526
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Label3, { children: "Start Date *" }),
9527
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Popover, { children: [
9528
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
10273
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
10274
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10275
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Label3, { children: "Start Date *" }),
10276
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Popover, { children: [
10277
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
9529
10278
  Button,
9530
10279
  {
9531
10280
  variant: "outline",
@@ -9534,12 +10283,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9534
10283
  !formData.startDate && "text-muted-foreground"
9535
10284
  ),
9536
10285
  children: [
9537
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react25.CalendarIcon, { className: "mr-2 h-4 w-4" }),
9538
- formData.startDate ? (0, import_date_fns.format)(formData.startDate, "PPP") : "Pick a date"
10286
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.CalendarIcon, { className: "mr-2 h-4 w-4" }),
10287
+ formData.startDate ? (0, import_date_fns2.format)(formData.startDate, "PPP") : "Pick a date"
9539
10288
  ]
9540
10289
  }
9541
10290
  ) }),
9542
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10291
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
9543
10292
  Calendar4,
9544
10293
  {
9545
10294
  mode: "single",
@@ -9550,10 +10299,10 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9550
10299
  ) })
9551
10300
  ] })
9552
10301
  ] }),
9553
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "space-y-2", children: [
9554
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Label3, { children: "End Date *" }),
9555
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Popover, { children: [
9556
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
10302
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10303
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Label3, { children: "End Date *" }),
10304
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Popover, { children: [
10305
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
9557
10306
  Button,
9558
10307
  {
9559
10308
  variant: "outline",
@@ -9562,12 +10311,12 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9562
10311
  !formData.endDate && "text-muted-foreground"
9563
10312
  ),
9564
10313
  children: [
9565
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_lucide_react25.CalendarIcon, { className: "mr-2 h-4 w-4" }),
9566
- formData.endDate ? (0, import_date_fns.format)(formData.endDate, "PPP") : "Pick a date"
10314
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.CalendarIcon, { className: "mr-2 h-4 w-4" }),
10315
+ formData.endDate ? (0, import_date_fns2.format)(formData.endDate, "PPP") : "Pick a date"
9567
10316
  ]
9568
10317
  }
9569
10318
  ) }),
9570
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10319
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverContent, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
9571
10320
  Calendar4,
9572
10321
  {
9573
10322
  mode: "single",
@@ -9580,9 +10329,9 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9580
10329
  ] })
9581
10330
  ] })
9582
10331
  ] }),
9583
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex justify-end gap-3 pt-4", children: [
9584
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, children: "Cancel" }),
9585
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
10332
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex justify-end gap-3 pt-4", children: [
10333
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Button, { type: "button", variant: "outline", onClick: handleClose, children: "Cancel" }),
10334
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
9586
10335
  Button,
9587
10336
  {
9588
10337
  type: "submit",
@@ -9596,7 +10345,7 @@ var AddSprintModal = ({ isOpen, onClose, onAddSprint }) => {
9596
10345
  };
9597
10346
 
9598
10347
  // src/components/Projects/PlanningView.tsx
9599
- var import_jsx_runtime56 = require("react/jsx-runtime");
10348
+ var import_jsx_runtime57 = require("react/jsx-runtime");
9600
10349
  var PlanningView = ({
9601
10350
  tasks,
9602
10351
  epics,
@@ -9607,25 +10356,25 @@ var PlanningView = ({
9607
10356
  onUpdateSprint,
9608
10357
  onDeleteSprint
9609
10358
  }) => {
9610
- const [selectedSprintIds, setSelectedSprintIds] = (0, import_react29.useState)([]);
9611
- const [collapsedEpics, setCollapsedEpics] = (0, import_react29.useState)(/* @__PURE__ */ new Set());
9612
- const [draggedTask, setDraggedTask] = (0, import_react29.useState)(null);
9613
- const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react29.useState)(false);
9614
- const [dragOverTarget, setDragOverTarget] = (0, import_react29.useState)(null);
9615
- const [editingSprintId, setEditingSprintId] = (0, import_react29.useState)(null);
9616
- const [sprintEditForm, setSprintEditForm] = (0, import_react29.useState)({
10359
+ const [selectedSprintIds, setSelectedSprintIds] = (0, import_react30.useState)([]);
10360
+ const [collapsedEpics, setCollapsedEpics] = (0, import_react30.useState)(/* @__PURE__ */ new Set());
10361
+ const [draggedTask, setDraggedTask] = (0, import_react30.useState)(null);
10362
+ const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react30.useState)(false);
10363
+ const [dragOverTarget, setDragOverTarget] = (0, import_react30.useState)(null);
10364
+ const [editingSprintId, setEditingSprintId] = (0, import_react30.useState)(null);
10365
+ const [sprintEditForm, setSprintEditForm] = (0, import_react30.useState)({
9617
10366
  name: "",
9618
10367
  description: "",
9619
10368
  startDate: "",
9620
10369
  endDate: ""
9621
10370
  });
9622
- const [availableSprints, setAvailableSprints] = (0, import_react29.useState)([]);
9623
- const [sprintFilter, setSprintFilter] = (0, import_react29.useState)("upcoming");
9624
- const [isSprintSelectorOpen, setIsSprintSelectorOpen] = (0, import_react29.useState)(false);
9625
- const [heroHeight, setHeroHeight] = (0, import_react29.useState)(0);
9626
- const heroRef = (0, import_react29.useRef)(null);
9627
- const containerRef = (0, import_react29.useRef)(null);
9628
- (0, import_react29.useEffect)(() => {
10371
+ const [availableSprints, setAvailableSprints] = (0, import_react30.useState)([]);
10372
+ const [sprintFilter, setSprintFilter] = (0, import_react30.useState)("upcoming");
10373
+ const [isSprintSelectorOpen, setIsSprintSelectorOpen] = (0, import_react30.useState)(false);
10374
+ const [heroHeight, setHeroHeight] = (0, import_react30.useState)(0);
10375
+ const heroRef = (0, import_react30.useRef)(null);
10376
+ const containerRef = (0, import_react30.useRef)(null);
10377
+ (0, import_react30.useEffect)(() => {
9629
10378
  const savedSprintIds = localStorage.getItem("planningView_selectedSprints");
9630
10379
  if (savedSprintIds) {
9631
10380
  try {
@@ -9638,10 +10387,10 @@ var PlanningView = ({
9638
10387
  }
9639
10388
  }
9640
10389
  }, []);
9641
- (0, import_react29.useEffect)(() => {
10390
+ (0, import_react30.useEffect)(() => {
9642
10391
  localStorage.setItem("planningView_selectedSprints", JSON.stringify(selectedSprintIds));
9643
10392
  }, [selectedSprintIds]);
9644
- (0, import_react29.useEffect)(() => {
10393
+ (0, import_react30.useEffect)(() => {
9645
10394
  const updateHeroHeight = () => {
9646
10395
  if (heroRef.current) {
9647
10396
  setHeroHeight(heroRef.current.offsetHeight);
@@ -9702,7 +10451,7 @@ var PlanningView = ({
9702
10451
  });
9703
10452
  return { tasksByEpic, unassignedTasks };
9704
10453
  };
9705
- (0, import_react29.useEffect)(() => {
10454
+ (0, import_react30.useEffect)(() => {
9706
10455
  setAvailableSprints(sprints);
9707
10456
  }, [sprints]);
9708
10457
  const displayedSprints = availableSprints.filter((sprint) => {
@@ -9825,7 +10574,7 @@ var PlanningView = ({
9825
10574
  e.dataTransfer.setData("text/plain", task.id.toString());
9826
10575
  handleDragStart(e, task);
9827
10576
  };
9828
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10577
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
9829
10578
  Card,
9830
10579
  {
9831
10580
  className: "p-3 cursor-grab active:cursor-grabbing hover:shadow-md transition-all duration-200 border border-border bg-card hover:bg-accent/50",
@@ -9833,28 +10582,28 @@ var PlanningView = ({
9833
10582
  onDragStart: handleCardDragStart,
9834
10583
  onClick: handleCardClick,
9835
10584
  style: { userSelect: "none" },
9836
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2 pointer-events-none", children: [
9837
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
9838
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("h4", { className: "font-medium text-sm text-foreground line-clamp-1", children: task.name }),
9839
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Badge, { className: `text-xs ${getPriorityColor(task.priority || "medium")}`, children: task.priority?.[0]?.toUpperCase() })
10585
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2 pointer-events-none", children: [
10586
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
10587
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h4", { className: "font-medium text-sm text-foreground line-clamp-1", children: task.name }),
10588
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Badge, { className: `text-xs ${getPriorityColor(task.priority || "medium")}`, children: task.priority?.[0]?.toUpperCase() })
9840
10589
  ] }),
9841
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
9842
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-1", children: [
9843
- epic && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
9844
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-muted-foreground truncate", children: epic?.name })
10590
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
10591
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-1", children: [
10592
+ epic && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
10593
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-muted-foreground truncate", children: epic?.name })
9845
10594
  ] }),
9846
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-muted-foreground", children: getDisplayName(task.assignee?.value?.name) })
10595
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-muted-foreground", children: getDisplayName(task.assignee?.value?.name) })
9847
10596
  ] }),
9848
- showSprint && sprint && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
9849
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Calendar, { className: "h-3 w-3" }),
9850
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { children: sprint.name })
10597
+ showSprint && sprint && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
10598
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Calendar, { className: "h-3 w-3" }),
10599
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: sprint.name })
9851
10600
  ] })
9852
10601
  ] })
9853
10602
  }
9854
10603
  );
9855
10604
  };
9856
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { ref: containerRef, className: "h-full flex flex-col px-2 md:px-4 py-4", children: [
9857
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10605
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { ref: containerRef, className: "h-full flex flex-col px-2 md:px-4 py-4", children: [
10606
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { ref: heroRef, className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
9858
10607
  DashboardHero,
9859
10608
  {
9860
10609
  title: "Sprint Planning",
@@ -9866,7 +10615,7 @@ var PlanningView = ({
9866
10615
  }
9867
10616
  }
9868
10617
  ) }),
9869
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10618
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
9870
10619
  "div",
9871
10620
  {
9872
10621
  className: "h-full",
@@ -9874,30 +10623,30 @@ var PlanningView = ({
9874
10623
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
9875
10624
  },
9876
10625
  children: [
9877
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "mb-4", children: [
9878
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center justify-between", children: [
9879
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-3", children: [
9880
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { children: [
9881
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Sprint Board" }),
9882
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
10626
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "mb-4", children: [
10627
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between", children: [
10628
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-3", children: [
10629
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10630
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Sprint Board" }),
10631
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
9883
10632
  selectedSprintIds?.length,
9884
10633
  "/3 selected"
9885
10634
  ] })
9886
10635
  ] }),
9887
- selectedSprintIds?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
9888
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
9889
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleSprints.map((sprint) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10636
+ selectedSprintIds?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-2", children: [
10637
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
10638
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleSprints.map((sprint) => /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
9890
10639
  "div",
9891
10640
  {
9892
10641
  className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
9893
10642
  children: [
9894
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "max-w-[80px] truncate", children: sprint.name }),
9895
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10643
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "max-w-[80px] truncate", children: sprint.name }),
10644
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
9896
10645
  "button",
9897
10646
  {
9898
10647
  onClick: () => toggleSprintView(sprint.id.toString()),
9899
10648
  className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
9900
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.X, { className: "h-4 w-4" })
10649
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.X, { className: "h-4 w-4" })
9901
10650
  }
9902
10651
  )
9903
10652
  ]
@@ -9906,20 +10655,20 @@ var PlanningView = ({
9906
10655
  )) })
9907
10656
  ] })
9908
10657
  ] }),
9909
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
9910
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10658
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-2", children: [
10659
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
9911
10660
  Button,
9912
10661
  {
9913
10662
  onClick: () => setIsAddSprintModalOpen(true),
9914
10663
  className: "bg-primary hover:bg-primary/90 text-primary-foreground gap-1",
9915
10664
  size: "sm",
9916
10665
  children: [
9917
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Plus, { className: "h-3 w-3" }),
10666
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Plus, { className: "h-3 w-3" }),
9918
10667
  "Add"
9919
10668
  ]
9920
10669
  }
9921
10670
  ),
9922
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10671
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
9923
10672
  Button,
9924
10673
  {
9925
10674
  onClick: () => setIsSprintSelectorOpen(!isSprintSelectorOpen),
@@ -9927,43 +10676,43 @@ var PlanningView = ({
9927
10676
  size: "sm",
9928
10677
  className: "gap-1",
9929
10678
  children: [
9930
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Calendar, { className: "h-3 w-3" }),
10679
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Calendar, { className: "h-3 w-3" }),
9931
10680
  isSprintSelectorOpen ? "Close" : "Select"
9932
10681
  ]
9933
10682
  }
9934
10683
  )
9935
10684
  ] })
9936
10685
  ] }) }),
9937
- isSprintSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10686
+ isSprintSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
9938
10687
  "div",
9939
10688
  {
9940
10689
  className: "fixed inset-0 bg-black/20 z-[5]",
9941
10690
  onClick: () => setIsSprintSelectorOpen(false)
9942
10691
  }
9943
10692
  ),
9944
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10693
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
9945
10694
  "div",
9946
10695
  {
9947
10696
  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"}`,
9948
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
9949
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
9950
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center justify-between", children: [
9951
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Sprints" }),
9952
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10697
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
10698
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
10699
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between", children: [
10700
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Sprints" }),
10701
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
9953
10702
  Button,
9954
10703
  {
9955
10704
  variant: "ghost",
9956
10705
  size: "sm",
9957
10706
  onClick: () => setIsSprintSelectorOpen(false),
9958
10707
  className: "h-8 w-8 p-0",
9959
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.X, { className: "h-4 w-4" })
10708
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.X, { className: "h-4 w-4" })
9960
10709
  }
9961
10710
  )
9962
10711
  ] }),
9963
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Choose up to 3 sprints to view in your planning board" })
10712
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Choose up to 3 sprints to view in your planning board" })
9964
10713
  ] }),
9965
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: [
9966
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex gap-1 mb-4 bg-muted p-1 rounded-lg", children: [
10714
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: [
10715
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex gap-1 mb-4 bg-muted p-1 rounded-lg", children: [
9967
10716
  { key: "all", label: "All", count: sprints.length },
9968
10717
  {
9969
10718
  key: "active",
@@ -9975,7 +10724,7 @@ var PlanningView = ({
9975
10724
  label: "Upcoming"
9976
10725
  // count: sprints.filter((s) => !s.isActive).length,
9977
10726
  }
9978
- ].map((filter) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10727
+ ].map((filter) => /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
9979
10728
  Button,
9980
10729
  {
9981
10730
  variant: sprintFilter === filter.key ? "default" : "outline",
@@ -9991,18 +10740,18 @@ var PlanningView = ({
9991
10740
  },
9992
10741
  filter.key
9993
10742
  )) }),
9994
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto", children: displayedSprints.length > 0 ? displayedSprints.map((sprint) => {
10743
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto", children: displayedSprints.length > 0 ? displayedSprints.map((sprint) => {
9995
10744
  const isSelected = selectedSprintIds.includes(sprint.id.toString());
9996
10745
  const taskCount = tasks.filter(
9997
10746
  (task) => extractId(task.sprint) === sprint.id
9998
10747
  ).length;
9999
10748
  const canSelect = !isSelected && selectedSprintIds.length < 3;
10000
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10749
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10001
10750
  "div",
10002
10751
  {
10003
10752
  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"}`,
10004
- children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-3", children: [
10005
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10753
+ children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-3", children: [
10754
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10006
10755
  Input,
10007
10756
  {
10008
10757
  value: sprintEditForm.name,
@@ -10011,7 +10760,7 @@ var PlanningView = ({
10011
10760
  placeholder: "Sprint name"
10012
10761
  }
10013
10762
  ),
10014
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10763
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10015
10764
  Textarea,
10016
10765
  {
10017
10766
  value: sprintEditForm.description,
@@ -10023,10 +10772,10 @@ var PlanningView = ({
10023
10772
  placeholder: "Sprint description"
10024
10773
  }
10025
10774
  ),
10026
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
10027
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { children: [
10028
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
10029
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10775
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
10776
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10777
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
10778
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10030
10779
  Input,
10031
10780
  {
10032
10781
  type: "date",
@@ -10039,9 +10788,9 @@ var PlanningView = ({
10039
10788
  }
10040
10789
  )
10041
10790
  ] }),
10042
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { children: [
10043
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
10044
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10791
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10792
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
10793
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10045
10794
  Input,
10046
10795
  {
10047
10796
  type: "date",
@@ -10055,20 +10804,20 @@ var PlanningView = ({
10055
10804
  )
10056
10805
  ] })
10057
10806
  ] }),
10058
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex gap-2", children: [
10059
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10807
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex gap-2", children: [
10808
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10060
10809
  Button,
10061
10810
  {
10062
10811
  size: "sm",
10063
10812
  onClick: () => handleSprintEditSave(),
10064
10813
  className: "flex-1",
10065
10814
  children: [
10066
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Check, { className: "h-3 w-3 mr-1" }),
10815
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Check, { className: "h-3 w-3 mr-1" }),
10067
10816
  "Save"
10068
10817
  ]
10069
10818
  }
10070
10819
  ),
10071
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10820
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10072
10821
  Button,
10073
10822
  {
10074
10823
  size: "sm",
@@ -10076,18 +10825,18 @@ var PlanningView = ({
10076
10825
  onClick: handleSprintEditCancel,
10077
10826
  className: "flex-1",
10078
10827
  children: [
10079
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.X, { className: "h-3 w-3 mr-1" }),
10828
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.X, { className: "h-3 w-3 mr-1" }),
10080
10829
  "Cancel"
10081
10830
  ]
10082
10831
  }
10083
10832
  )
10084
10833
  ] })
10085
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { children: [
10086
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-start justify-between", children: [
10087
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex-1 min-w-0", children: [
10088
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2 mb-1", children: [
10089
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("h4", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
10090
- isSprintActive(sprint) && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10834
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10835
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-start justify-between", children: [
10836
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex-1 min-w-0", children: [
10837
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-2 mb-1", children: [
10838
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h4", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
10839
+ isSprintActive(sprint) && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10091
10840
  Badge,
10092
10841
  {
10093
10842
  variant: "default",
@@ -10096,43 +10845,43 @@ var PlanningView = ({
10096
10845
  }
10097
10846
  )
10098
10847
  ] }),
10099
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: sprint.description }),
10100
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
10101
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "flex items-center gap-1", children: [
10102
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.CalendarDays, { className: "h-3 w-3" }),
10848
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: sprint.description }),
10849
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [
10850
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "flex items-center gap-1", children: [
10851
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.CalendarDays, { className: "h-3 w-3" }),
10103
10852
  new Date(sprint.startDate).toLocaleDateString()
10104
10853
  ] }),
10105
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "flex items-center gap-1", children: [
10106
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.User, { className: "h-3 w-3" }),
10854
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "flex items-center gap-1", children: [
10855
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.User, { className: "h-3 w-3" }),
10107
10856
  taskCount,
10108
10857
  " tasks"
10109
10858
  ] })
10110
10859
  ] })
10111
10860
  ] }),
10112
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
10113
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10861
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
10862
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10114
10863
  Button,
10115
10864
  {
10116
10865
  size: "sm",
10117
10866
  variant: "ghost",
10118
10867
  onClick: () => handleSprintEditStart(sprint),
10119
10868
  className: "h-6 w-6 p-0",
10120
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Edit2, { className: "h-3 w-3" })
10869
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Edit2, { className: "h-3 w-3" })
10121
10870
  }
10122
10871
  ),
10123
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10872
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10124
10873
  Button,
10125
10874
  {
10126
10875
  size: "sm",
10127
10876
  variant: "ghost",
10128
10877
  onClick: () => onDeleteSprint(sprint.id.toString()),
10129
10878
  className: "h-6 w-6 p-0 text-destructive hover:text-destructive",
10130
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Trash2, { className: "h-3 w-3" })
10879
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Trash2, { className: "h-3 w-3" })
10131
10880
  }
10132
10881
  )
10133
10882
  ] })
10134
10883
  ] }),
10135
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex items-center justify-between mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10884
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex items-center justify-between mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10136
10885
  Button,
10137
10886
  {
10138
10887
  variant: isSelected ? "default" : "outline",
@@ -10140,21 +10889,21 @@ var PlanningView = ({
10140
10889
  className: "text-xs w-full h-8 flex items-center justify-center cursor-pointer",
10141
10890
  onClick: () => toggleSprintView(sprint.id.toString()),
10142
10891
  disabled: !isSelected && selectedSprintIds?.length >= 3,
10143
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pointer-events-none select-none", children: isSelected ? "Deselect" : selectedSprintIds?.length >= 3 ? "Limit Reached" : "Select" })
10892
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "pointer-events-none select-none", children: isSelected ? "Deselect" : selectedSprintIds?.length >= 3 ? "Limit Reached" : "Select" })
10144
10893
  }
10145
10894
  ) })
10146
10895
  ] })
10147
10896
  },
10148
10897
  sprint.id
10149
10898
  );
10150
- }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "text-center py-8 text-muted-foreground", children: [
10151
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Calendar, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
10152
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("p", { className: "text-sm", children: [
10899
+ }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "text-center py-8 text-muted-foreground", children: [
10900
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Calendar, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
10901
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("p", { className: "text-sm", children: [
10153
10902
  'No sprints found for "',
10154
10903
  sprintFilter,
10155
10904
  '" filter'
10156
10905
  ] }),
10157
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10906
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10158
10907
  Button,
10159
10908
  {
10160
10909
  variant: "link",
@@ -10165,18 +10914,18 @@ var PlanningView = ({
10165
10914
  }
10166
10915
  )
10167
10916
  ] }) }),
10168
- selectedSprintIds?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "mt-4 p-4 bg-muted/50 rounded-lg border-2 border-dashed border-border", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "text-center", children: [
10169
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Calendar, { className: "h-6 w-6 mx-auto mb-2 text-muted-foreground" }),
10170
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-sm text-muted-foreground font-medium", children: "Select sprints to start planning" }),
10171
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-xs text-muted-foreground mt-1", children: "Choose up to 3 sprints to view alongside your backlog" })
10917
+ selectedSprintIds?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "mt-4 p-4 bg-muted/50 rounded-lg border-2 border-dashed border-border", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "text-center", children: [
10918
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Calendar, { className: "h-6 w-6 mx-auto mb-2 text-muted-foreground" }),
10919
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-sm text-muted-foreground font-medium", children: "Select sprints to start planning" }),
10920
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-xs text-muted-foreground mt-1", children: "Choose up to 3 sprints to view alongside your backlog" })
10172
10921
  ] }) })
10173
10922
  ] })
10174
10923
  ] })
10175
10924
  }
10176
10925
  )
10177
10926
  ] }),
10178
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-4 gap-6 h-full flex-1 min-h-0", children: [
10179
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "lg:col-span-1", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10927
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-4 gap-6 h-full flex-1 min-h-0", children: [
10928
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "lg:col-span-1", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10180
10929
  Card,
10181
10930
  {
10182
10931
  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",
@@ -10188,78 +10937,78 @@ var PlanningView = ({
10188
10937
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 16rem)"
10189
10938
  },
10190
10939
  children: [
10191
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
10192
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: "Backlog" }),
10193
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10194
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Badge, { variant: "secondary", className: "bg-muted text-muted-foreground", children: [
10940
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
10941
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: "Backlog" }),
10942
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-2", children: [
10943
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Badge, { variant: "secondary", className: "bg-muted text-muted-foreground", children: [
10195
10944
  backlogTasks?.length,
10196
10945
  " tasks"
10197
10946
  ] }),
10198
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Badge, { variant: "outline", className: "bg-gray-50 text-gray-700 border-gray-200", children: [
10947
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Badge, { variant: "outline", className: "bg-gray-50 text-gray-700 border-gray-200", children: [
10199
10948
  backlogStoryPoints,
10200
10949
  " pts"
10201
10950
  ] })
10202
10951
  ] })
10203
10952
  ] }),
10204
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
10953
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10205
10954
  "div",
10206
10955
  {
10207
10956
  className: `flex-1 overflow-y-auto space-y-3 min-h-0 p-3 rounded transition-colors ${dragOverTarget === "backlog" ? "bg-primary/10" : ""}`,
10208
10957
  children: (() => {
10209
10958
  const { tasksByEpic, unassignedTasks } = getTasksByEpic(backlogTasks);
10210
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
10959
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
10211
10960
  Object.entries(tasksByEpic).map(([epicId, epicTasks]) => {
10212
10961
  const epic = getEpicById(epicId);
10213
10962
  if (!epic) return null;
10214
10963
  const isCollapsed = collapsedEpics.has(epicId);
10215
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10216
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10964
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2", children: [
10965
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10217
10966
  "div",
10218
10967
  {
10219
10968
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
10220
10969
  onClick: () => toggleEpicCollapse(epicId),
10221
10970
  children: [
10222
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
10223
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
10224
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "text-muted-foreground", children: [
10971
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
10972
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
10973
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "text-muted-foreground", children: [
10225
10974
  "(",
10226
10975
  epicTasks?.length,
10227
10976
  ")"
10228
10977
  ] }),
10229
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
10978
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
10230
10979
  ]
10231
10980
  }
10232
10981
  ),
10233
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CompactTaskCard, { task }, task.id)) })
10982
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CompactTaskCard, { task }, task.id)) })
10234
10983
  ] }, epicId);
10235
10984
  }),
10236
10985
  unassignedTasks?.length > 0 && (() => {
10237
10986
  const isCollapsed = collapsedEpics.has("no-epic");
10238
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10239
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
10987
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2", children: [
10988
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10240
10989
  "div",
10241
10990
  {
10242
10991
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
10243
10992
  onClick: () => toggleEpicCollapse("no-epic"),
10244
10993
  children: [
10245
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
10246
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
10247
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "text-muted-foreground", children: [
10994
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
10995
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
10996
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "text-muted-foreground", children: [
10248
10997
  "(",
10249
10998
  unassignedTasks?.length,
10250
10999
  ")"
10251
11000
  ] }),
10252
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
11001
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
10253
11002
  ]
10254
11003
  }
10255
11004
  ),
10256
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CompactTaskCard, { task }, task.id)) })
11005
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CompactTaskCard, { task }, task.id)) })
10257
11006
  ] });
10258
11007
  })(),
10259
- backlogTasks?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime56.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" }),
10260
- backlogTasks?.length > 0 && Object.keys(tasksByEpic).length === 0 && unassignedTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10261
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "text-xs text-muted-foreground mb-2", children: "Direct backlog tasks:" }),
10262
- backlogTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CompactTaskCard, { task }, task.id))
11008
+ backlogTasks?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime57.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" }),
11009
+ backlogTasks?.length > 0 && Object.keys(tasksByEpic).length === 0 && unassignedTasks.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2", children: [
11010
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-xs text-muted-foreground mb-2", children: "Direct backlog tasks:" }),
11011
+ backlogTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CompactTaskCard, { task }, task.id))
10263
11012
  ] })
10264
11013
  ] });
10265
11014
  })()
@@ -10276,7 +11025,7 @@ var PlanningView = ({
10276
11025
  (sum, task) => sum + (task?.storyPoints || 0),
10277
11026
  0
10278
11027
  );
10279
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
11028
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10280
11029
  Card,
10281
11030
  {
10282
11031
  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",
@@ -10288,10 +11037,10 @@ var PlanningView = ({
10288
11037
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 16rem)"
10289
11038
  },
10290
11039
  children: [
10291
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
10292
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: sprint.name }) }),
10293
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
10294
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
11040
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between mb-4 flex-shrink-0", children: [
11041
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h3", { className: "font-semibold text-foreground select-none text-lg", children: sprint.name }) }),
11042
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-2", children: [
11043
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10295
11044
  Badge,
10296
11045
  {
10297
11046
  variant: "secondary",
@@ -10302,7 +11051,7 @@ var PlanningView = ({
10302
11051
  ]
10303
11052
  }
10304
11053
  ),
10305
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
11054
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10306
11055
  Badge,
10307
11056
  {
10308
11057
  variant: "outline",
@@ -10313,7 +11062,7 @@ var PlanningView = ({
10313
11062
  ]
10314
11063
  }
10315
11064
  ),
10316
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
11065
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10317
11066
  Button,
10318
11067
  {
10319
11068
  size: "sm",
@@ -10323,73 +11072,73 @@ var PlanningView = ({
10323
11072
  handleSprintEditStart(sprint);
10324
11073
  },
10325
11074
  className: "h-6 px-2",
10326
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Edit2, { className: "h-3 w-3" })
11075
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Edit2, { className: "h-3 w-3" })
10327
11076
  }
10328
11077
  ),
10329
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
11078
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10330
11079
  Button,
10331
11080
  {
10332
11081
  size: "sm",
10333
11082
  variant: "ghost",
10334
11083
  onClick: () => onDeleteSprint(sprint.id.toString()),
10335
11084
  className: "h-6 px-2 text-destructive hover:text-destructive",
10336
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.Trash2, { className: "h-3 w-3" })
11085
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Trash2, { className: "h-3 w-3" })
10337
11086
  }
10338
11087
  )
10339
11088
  ] })
10340
11089
  ] }),
10341
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex-1 overflow-y-auto space-y-3 min-h-0", children: (() => {
11090
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex-1 overflow-y-auto space-y-3 min-h-0", children: (() => {
10342
11091
  const { tasksByEpic, unassignedTasks } = getTasksByEpic(sprintTasksFiltered);
10343
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment, { children: [
11092
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
10344
11093
  Object.entries(tasksByEpic).map(([epicId, epicTasks]) => {
10345
11094
  const epic = getEpicById(epicId);
10346
11095
  if (!epic) return null;
10347
11096
  const isCollapsed = collapsedEpics.has(epicId);
10348
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10349
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
11097
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2", children: [
11098
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10350
11099
  "div",
10351
11100
  {
10352
11101
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
10353
11102
  onClick: () => toggleEpicCollapse(epicId),
10354
11103
  children: [
10355
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
10356
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
10357
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "text-muted-foreground", children: [
11104
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: `w-3 h-3 rounded-full ${epic.color}` }),
11105
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "font-medium text-muted-foreground", children: epic.name }),
11106
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "text-muted-foreground", children: [
10358
11107
  "(",
10359
11108
  epicTasks?.length,
10360
11109
  ")"
10361
11110
  ] }),
10362
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
11111
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
10363
11112
  ]
10364
11113
  }
10365
11114
  ),
10366
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CompactTaskCard, { task }, task.id)) })
11115
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-2 pl-2", children: epicTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CompactTaskCard, { task }, task.id)) })
10367
11116
  ] }, epicId);
10368
11117
  }),
10369
11118
  unassignedTasks?.length > 0 && (() => {
10370
11119
  const isCollapsed = collapsedEpics.has("no-epic");
10371
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "space-y-2", children: [
10372
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
11120
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2", children: [
11121
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10373
11122
  "div",
10374
11123
  {
10375
11124
  className: "flex items-center gap-2 px-2 py-1 bg-muted/50 rounded text-xs cursor-pointer hover:bg-muted/70 transition-colors",
10376
11125
  onClick: () => toggleEpicCollapse("no-epic"),
10377
11126
  children: [
10378
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
10379
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
10380
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "text-muted-foreground", children: [
11127
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "w-3 h-3 rounded-full bg-gray-400" }),
11128
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "font-medium text-muted-foreground", children: "No Epic" }),
11129
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("span", { className: "text-muted-foreground", children: [
10381
11130
  "(",
10382
11131
  unassignedTasks?.length,
10383
11132
  ")"
10384
11133
  ] }),
10385
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react26.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
11134
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "ml-auto", children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronDown, { className: "h-3 w-3 text-muted-foreground" }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.ChevronUp, { className: "h-3 w-3 text-muted-foreground" }) })
10386
11135
  ]
10387
11136
  }
10388
11137
  ),
10389
- !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CompactTaskCard, { task }, task.id)) })
11138
+ !isCollapsed && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-2 pl-2", children: unassignedTasks?.map((task) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CompactTaskCard, { task }, task.id)) })
10390
11139
  ] });
10391
11140
  })(),
10392
- sprintTasksFiltered?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here" })
11141
+ sprintTasksFiltered?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex items-center justify-center h-32 text-muted-foreground text-sm select-none", children: "Drop tasks here" })
10393
11142
  ] });
10394
11143
  })() })
10395
11144
  ]
@@ -10398,7 +11147,7 @@ var PlanningView = ({
10398
11147
  );
10399
11148
  })
10400
11149
  ] }),
10401
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
11150
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10402
11151
  AddSprintModal,
10403
11152
  {
10404
11153
  isOpen: isAddSprintModalOpen,
@@ -10413,9 +11162,9 @@ var PlanningView = ({
10413
11162
  };
10414
11163
 
10415
11164
  // src/components/Projects/TasksView.tsx
10416
- var import_react30 = require("react");
10417
- var import_lucide_react27 = require("lucide-react");
10418
- var import_jsx_runtime57 = require("react/jsx-runtime");
11165
+ var import_react31 = require("react");
11166
+ var import_lucide_react28 = require("lucide-react");
11167
+ var import_jsx_runtime58 = require("react/jsx-runtime");
10419
11168
  var formatDate = (date) => {
10420
11169
  return date.toLocaleDateString("en-US", {
10421
11170
  weekday: "short",
@@ -10453,7 +11202,7 @@ var isTomorrow = (date) => {
10453
11202
  return date.toDateString() === tomorrow.toDateString();
10454
11203
  };
10455
11204
  var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10456
- const [formData, setFormData] = (0, import_react30.useState)({
11205
+ const [formData, setFormData] = (0, import_react31.useState)({
10457
11206
  title: "",
10458
11207
  description: "",
10459
11208
  dueDate: "",
@@ -10467,7 +11216,7 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10467
11216
  reminderMinutes: 15,
10468
11217
  tags: ""
10469
11218
  });
10470
- const [isColleagueError, setIsColleagueError] = (0, import_react30.useState)(false);
11219
+ const [isColleagueError, setIsColleagueError] = (0, import_react31.useState)(false);
10471
11220
  const handleSubmit = (e) => {
10472
11221
  e.preventDefault();
10473
11222
  const colleague = colleagues.find((c) => c?.id.toString() === formData.colleagueId.toString());
@@ -10512,18 +11261,18 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10512
11261
  tags: ""
10513
11262
  });
10514
11263
  };
10515
- (0, import_react30.useEffect)(() => {
11264
+ (0, import_react31.useEffect)(() => {
10516
11265
  if (formData.colleagueId) {
10517
11266
  setIsColleagueError(false);
10518
11267
  }
10519
11268
  }, [formData.colleagueId]);
10520
11269
  const validColleagues = colleagues.filter(Boolean);
10521
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(DialogContent, { className: "max-w-2xl", children: [
10522
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DialogTitle, { children: "Add New Reminder" }) }),
10523
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
10524
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10525
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "title", children: "Title" }),
10526
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11270
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(DialogContent, { className: "max-w-2xl", children: [
11271
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(DialogTitle, { children: "Add New Reminder" }) }),
11272
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
11273
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11274
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "title", children: "Title" }),
11275
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10527
11276
  Input,
10528
11277
  {
10529
11278
  id: "title",
@@ -10534,9 +11283,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10534
11283
  }
10535
11284
  )
10536
11285
  ] }) }),
10537
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10538
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "description", children: "Description" }),
10539
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11286
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11287
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "description", children: "Description" }),
11288
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10540
11289
  Textarea,
10541
11290
  {
10542
11291
  id: "description",
@@ -10547,10 +11296,10 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10547
11296
  }
10548
11297
  )
10549
11298
  ] }),
10550
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
10551
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10552
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "dueDate", children: "Due Date" }),
10553
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11299
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
11300
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11301
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "dueDate", children: "Due Date" }),
11302
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10554
11303
  Input,
10555
11304
  {
10556
11305
  id: "dueDate",
@@ -10561,9 +11310,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10561
11310
  }
10562
11311
  )
10563
11312
  ] }),
10564
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10565
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "dueTime", children: "Due Time (optional)" }),
10566
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11313
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11314
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "dueTime", children: "Due Time (optional)" }),
11315
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10567
11316
  Input,
10568
11317
  {
10569
11318
  id: "dueTime",
@@ -10574,9 +11323,9 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10574
11323
  )
10575
11324
  ] })
10576
11325
  ] }),
10577
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10578
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { className: `${isColleagueError ? "text-destructive" : ""}`, htmlFor: "colleague", children: "Assigned Colleague" }),
10579
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
11326
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11327
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { className: `${isColleagueError ? "text-destructive" : ""}`, htmlFor: "colleague", children: "Assigned Colleague" }),
11328
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
10580
11329
  Select,
10581
11330
  {
10582
11331
  value: formData.colleagueId,
@@ -10585,11 +11334,11 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10585
11334
  },
10586
11335
  required: true,
10587
11336
  children: [
10588
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11337
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10589
11338
  SelectTrigger,
10590
11339
  {
10591
11340
  className: `${isColleagueError ? "text-destructive border-red-500" : ""}`,
10592
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11341
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10593
11342
  SelectValue,
10594
11343
  {
10595
11344
  className: `${isColleagueError ? "text-destructive border-red-500" : ""}`,
@@ -10599,15 +11348,15 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10599
11348
  )
10600
11349
  }
10601
11350
  ),
10602
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectContent, { children: validColleagues.map((colleague) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectItem, { value: colleague.id.toString(), children: colleague.name }, colleague.id)) })
11351
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectContent, { children: validColleagues.map((colleague) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectItem, { value: colleague.id.toString(), children: colleague.name }, colleague.id)) })
10603
11352
  ]
10604
11353
  }
10605
11354
  ),
10606
- isColleagueError && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-destructive text-sm", children: "Please select a digital colleague" })
11355
+ isColleagueError && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: "text-destructive text-sm", children: "Please select a digital colleague" })
10607
11356
  ] }),
10608
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "space-y-2", children: [
10609
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-2", children: [
10610
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11357
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "space-y-2", children: [
11358
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-2", children: [
11359
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10611
11360
  "input",
10612
11361
  {
10613
11362
  type: "checkbox",
@@ -10617,12 +11366,12 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10617
11366
  className: "rounded border-border"
10618
11367
  }
10619
11368
  ),
10620
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "isRecurring", children: "Make this a recurring reminder" })
11369
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "isRecurring", children: "Make this a recurring reminder" })
10621
11370
  ] }),
10622
- formData.isRecurring && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
10623
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10624
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "recurrencePattern", children: "Frequency" }),
10625
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
11371
+ formData.isRecurring && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "grid grid-cols-2 gap-4 pl-6", children: [
11372
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11373
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "recurrencePattern", children: "Frequency" }),
11374
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
10626
11375
  Select,
10627
11376
  {
10628
11377
  value: formData.recurrencePattern,
@@ -10631,20 +11380,20 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10631
11380
  recurrencePattern: value
10632
11381
  }),
10633
11382
  children: [
10634
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectValue, {}) }),
10635
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(SelectContent, { children: [
10636
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectItem, { value: "daily", children: "Daily" }),
10637
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectItem, { value: "weekly", children: "Weekly" }),
10638
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectItem, { value: "monthly", children: "Monthly" }),
10639
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectItem, { value: "yearly", children: "Yearly" })
11383
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectValue, {}) }),
11384
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(SelectContent, { children: [
11385
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectItem, { value: "daily", children: "Daily" }),
11386
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectItem, { value: "weekly", children: "Weekly" }),
11387
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectItem, { value: "monthly", children: "Monthly" }),
11388
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectItem, { value: "yearly", children: "Yearly" })
10640
11389
  ] })
10641
11390
  ]
10642
11391
  }
10643
11392
  )
10644
11393
  ] }),
10645
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10646
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "recurrenceInterval", children: "Every" }),
10647
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11394
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11395
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "recurrenceInterval", children: "Every" }),
11396
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10648
11397
  Input,
10649
11398
  {
10650
11399
  id: "recurrenceInterval",
@@ -10657,15 +11406,15 @@ var AddReminderModal = ({ colleagues, onAddReminder, open, setOpen }) => {
10657
11406
  ] })
10658
11407
  ] })
10659
11408
  ] }),
10660
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex justify-end space-x-2", children: [
10661
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" }),
10662
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { type: "submit", children: "Add Reminder" })
11409
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex justify-end space-x-2", children: [
11410
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button, { type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" }),
11411
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button, { type: "submit", children: "Add Reminder" })
10663
11412
  ] })
10664
11413
  ] })
10665
11414
  ] }) });
10666
11415
  };
10667
11416
  var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose }) => {
10668
- const [formData, setFormData] = (0, import_react30.useState)({
11417
+ const [formData, setFormData] = (0, import_react31.useState)({
10669
11418
  title: reminder.title,
10670
11419
  description: reminder.description,
10671
11420
  dueDate: reminder.dueDate?.toString().split("T")[0],
@@ -10699,12 +11448,12 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
10699
11448
  onClose();
10700
11449
  };
10701
11450
  const validColleagues = colleagues.filter(Boolean);
10702
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(DialogContent, { className: "max-w-2xl", children: [
10703
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DialogTitle, { children: "Edit Reminder" }) }),
10704
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
10705
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10706
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "edit-title", children: "Title" }),
10707
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11451
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(DialogContent, { className: "max-w-2xl", children: [
11452
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(DialogHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(DialogTitle, { children: "Edit Reminder" }) }),
11453
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
11454
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11455
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "edit-title", children: "Title" }),
11456
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10708
11457
  Input,
10709
11458
  {
10710
11459
  id: "edit-title",
@@ -10715,9 +11464,9 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
10715
11464
  }
10716
11465
  )
10717
11466
  ] }) }),
10718
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10719
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "edit-description", children: "Description" }),
10720
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11467
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11468
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "edit-description", children: "Description" }),
11469
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10721
11470
  Textarea,
10722
11471
  {
10723
11472
  id: "edit-description",
@@ -10728,10 +11477,10 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
10728
11477
  }
10729
11478
  )
10730
11479
  ] }),
10731
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
10732
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10733
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "edit-dueDate", children: "Due Date" }),
10734
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11480
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
11481
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11482
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "edit-dueDate", children: "Due Date" }),
11483
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10735
11484
  Input,
10736
11485
  {
10737
11486
  id: "edit-dueDate",
@@ -10742,9 +11491,9 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
10742
11491
  }
10743
11492
  )
10744
11493
  ] }),
10745
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
10746
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "edit-dueTime", children: "Due Time (optional)" }),
10747
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11494
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11495
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "edit-dueTime", children: "Due Time (optional)" }),
11496
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10748
11497
  Input,
10749
11498
  {
10750
11499
  id: "edit-dueTime",
@@ -10755,8 +11504,8 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
10755
11504
  )
10756
11505
  ] })
10757
11506
  ] }),
10758
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-2", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-2", children: [
10759
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11507
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "space-y-2", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-2", children: [
11508
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10760
11509
  "input",
10761
11510
  {
10762
11511
  type: "checkbox",
@@ -10766,17 +11515,17 @@ var EditReminderModal = ({ reminder, colleagues, onUpdateReminder, open, onClose
10766
11515
  className: "rounded border-border"
10767
11516
  }
10768
11517
  ),
10769
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Label3, { htmlFor: "edit-isRecurring", children: "Make this a recurring reminder" })
11518
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Label3, { htmlFor: "edit-isRecurring", children: "Make this a recurring reminder" })
10770
11519
  ] }) }),
10771
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex justify-end space-x-2", children: [
10772
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
10773
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { type: "submit", children: "Save Changes" })
11520
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex justify-end space-x-2", children: [
11521
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button, { type: "button", variant: "outline", onClick: onClose, children: "Cancel" }),
11522
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button, { type: "submit", children: "Save Changes" })
10774
11523
  ] })
10775
11524
  ] })
10776
11525
  ] }) });
10777
11526
  };
10778
11527
  var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }) => {
10779
- const [isEditing, setIsEditing] = (0, import_react30.useState)(false);
11528
+ const [isEditing, setIsEditing] = (0, import_react31.useState)(false);
10780
11529
  if (!reminder || !reminder.id) {
10781
11530
  return null;
10782
11531
  }
@@ -10794,8 +11543,8 @@ var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }
10794
11543
  if (tomorrow) return "Tomorrow";
10795
11544
  return formatDate(new Date(reminder.dueDate || ""));
10796
11545
  };
10797
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
10798
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11546
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [
11547
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10799
11548
  EditReminderModal,
10800
11549
  {
10801
11550
  reminder,
@@ -10805,61 +11554,61 @@ var ReminderCard = ({ reminder, colleagues, onUpdateReminder, onDeleteReminder }
10805
11554
  onClose: () => setIsEditing(false)
10806
11555
  }
10807
11556
  ),
10808
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11557
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10809
11558
  Card,
10810
11559
  {
10811
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CardContent, { className: "p-4", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-start justify-between", children: [
10812
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-start space-x-3 flex-1", children: [
10813
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11560
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CardContent, { className: "p-4", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-start justify-between", children: [
11561
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-start space-x-3 flex-1", children: [
11562
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10814
11563
  "button",
10815
11564
  {
10816
11565
  onClick: handleToggleComplete,
10817
11566
  className: "mt-1 text-primary hover:text-primary/80"
10818
11567
  }
10819
11568
  ),
10820
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex-1", children: [
10821
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex items-center space-x-2 mb-1", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11569
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex-1", children: [
11570
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "flex items-center space-x-2 mb-1", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10822
11571
  "h3",
10823
11572
  {
10824
11573
  children: reminder.title
10825
11574
  }
10826
11575
  ) }),
10827
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-sm text-muted-foreground mb-2", children: reminder.description }),
10828
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-4 text-sm text-muted-foreground", children: [
10829
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-1", children: [
10830
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Calendar, { className: "h-4 w-4" }),
10831
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: overdue ? "text-destructive font-medium" : "", children: getDateLabel() })
11576
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: "text-sm text-muted-foreground mb-2", children: reminder.description }),
11577
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-4 text-sm text-muted-foreground", children: [
11578
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-1", children: [
11579
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Calendar, { className: "h-4 w-4" }),
11580
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: overdue ? "text-destructive font-medium" : "", children: getDateLabel() })
10832
11581
  ] }),
10833
- reminder.dueTime && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-1", children: [
10834
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Clock, { className: "h-4 w-4" }),
10835
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: formatTime(reminder.dueTime) })
11582
+ reminder.dueTime && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-1", children: [
11583
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Clock, { className: "h-4 w-4" }),
11584
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { children: formatTime(reminder.dueTime) })
10836
11585
  ] }),
10837
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-1", children: [
10838
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.User, { className: "h-4 w-4" }),
10839
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: typeof reminder.assignedColleague !== "number" ? reminder.assignedColleague.name : "Unknown Colleague" })
11586
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-1", children: [
11587
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.User, { className: "h-4 w-4" }),
11588
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { children: typeof reminder.assignedColleague !== "number" ? reminder.assignedColleague.name : "Unknown Colleague" })
10840
11589
  ] })
10841
11590
  ] })
10842
11591
  ] })
10843
11592
  ] }),
10844
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-1", children: [
10845
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11593
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-1", children: [
11594
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10846
11595
  Button,
10847
11596
  {
10848
11597
  variant: "ghost",
10849
11598
  size: "sm",
10850
11599
  onClick: () => setIsEditing(true),
10851
11600
  className: "h-8 w-8 p-0",
10852
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Edit2, { className: "h-4 w-4" })
11601
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Edit2, { className: "h-4 w-4" })
10853
11602
  }
10854
11603
  ),
10855
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11604
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10856
11605
  Button,
10857
11606
  {
10858
11607
  variant: "ghost",
10859
11608
  size: "sm",
10860
11609
  onClick: () => onDeleteReminder(reminder.id.toString()),
10861
11610
  className: "h-8 w-8 p-0 text-destructive hover:text-destructive/80",
10862
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Trash2, { className: "h-4 w-4" })
11611
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Trash2, { className: "h-4 w-4" })
10863
11612
  }
10864
11613
  )
10865
11614
  ] })
@@ -10875,15 +11624,15 @@ var TasksView = ({
10875
11624
  onUpdateReminder,
10876
11625
  onDeleteReminder
10877
11626
  }) => {
10878
- const [reminders, setReminders] = (0, import_react30.useState)(initialReminders.filter(Boolean));
10879
- const [colleagues, setColleagues] = (0, import_react30.useState)(initialColleagues.filter(Boolean));
10880
- const [filter, setFilter] = (0, import_react30.useState)("all");
10881
- const [searchTerm, setSearchTerm] = (0, import_react30.useState)("");
10882
- const [openAddReminderModal, setOpenAddReminderModal] = (0, import_react30.useState)(false);
10883
- (0, import_react30.useEffect)(() => {
11627
+ const [reminders, setReminders] = (0, import_react31.useState)(initialReminders.filter(Boolean));
11628
+ const [colleagues, setColleagues] = (0, import_react31.useState)(initialColleagues.filter(Boolean));
11629
+ const [filter, setFilter] = (0, import_react31.useState)("all");
11630
+ const [searchTerm, setSearchTerm] = (0, import_react31.useState)("");
11631
+ const [openAddReminderModal, setOpenAddReminderModal] = (0, import_react31.useState)(false);
11632
+ (0, import_react31.useEffect)(() => {
10884
11633
  setReminders(initialReminders.filter(Boolean));
10885
11634
  }, [initialReminders]);
10886
- (0, import_react30.useEffect)(() => {
11635
+ (0, import_react31.useEffect)(() => {
10887
11636
  setColleagues(initialColleagues.filter(Boolean));
10888
11637
  }, [initialColleagues]);
10889
11638
  const handleAddReminder = (newReminder) => {
@@ -10971,8 +11720,8 @@ var TasksView = ({
10971
11720
  // lastUpdated: new Date(),
10972
11721
  // isActive: true,
10973
11722
  };
10974
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
10975
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11723
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
11724
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10976
11725
  DashboardHero,
10977
11726
  {
10978
11727
  title: "Task Reminders",
@@ -10986,8 +11735,8 @@ var TasksView = ({
10986
11735
  }
10987
11736
  }
10988
11737
  ),
10989
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "h-full bg-background", children: [
10990
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11738
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "h-full bg-background", children: [
11739
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10991
11740
  AddReminderModal,
10992
11741
  {
10993
11742
  colleagues,
@@ -10996,48 +11745,48 @@ var TasksView = ({
10996
11745
  setOpen: setOpenAddReminderModal
10997
11746
  }
10998
11747
  ),
10999
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "p-6", children: [
11000
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [
11001
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { children: [
11002
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("h1", { className: "text-2xl font-bold text-foreground", children: "Task Reminders" }),
11003
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-muted-foreground", children: "Manage your digital colleague task reminders" })
11748
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "p-6", children: [
11749
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [
11750
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { children: [
11751
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("h1", { className: "text-2xl font-bold text-foreground", children: "Task Reminders" }),
11752
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: "text-muted-foreground", children: "Manage your digital colleague task reminders" })
11004
11753
  ] }),
11005
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
11754
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
11006
11755
  Button,
11007
11756
  {
11008
11757
  className: "flex items-center space-x-2",
11009
11758
  onClick: () => setOpenAddReminderModal(true),
11010
11759
  children: [
11011
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react27.Plus, { className: "h-4 w-4" }),
11012
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { children: "Add Reminder" })
11760
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Plus, { className: "h-4 w-4" }),
11761
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { children: "Add Reminder" })
11013
11762
  ]
11014
11763
  }
11015
11764
  )
11016
11765
  ] }),
11017
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "grid grid-cols-5 gap-4 mb-6", children: [
11018
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "p-4", children: [
11019
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-2xl font-bold text-foreground", children: stats.total }),
11020
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-sm text-muted-foreground", children: "Total" })
11766
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "grid grid-cols-5 gap-4 mb-6", children: [
11767
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Card, { className: "p-4", children: [
11768
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-2xl font-bold text-foreground", children: stats.total }),
11769
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-sm text-muted-foreground", children: "Total" })
11021
11770
  ] }),
11022
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "p-4", children: [
11023
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-2xl font-bold text-primary", children: stats.overdue }),
11024
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-sm text-muted-foreground", children: "Pending" })
11771
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Card, { className: "p-4", children: [
11772
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-2xl font-bold text-primary", children: stats.overdue }),
11773
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-sm text-muted-foreground", children: "Pending" })
11025
11774
  ] }),
11026
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "p-4", children: [
11027
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-2xl font-bold text-success", children: stats.today }),
11028
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-sm text-muted-foreground", children: "Completed" })
11775
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Card, { className: "p-4", children: [
11776
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-2xl font-bold text-success", children: stats.today }),
11777
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-sm text-muted-foreground", children: "Completed" })
11029
11778
  ] }),
11030
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "p-4", children: [
11031
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-2xl font-bold text-destructive", children: stats.overdue }),
11032
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-sm text-muted-foreground", children: "Overdue" })
11779
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Card, { className: "p-4", children: [
11780
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-2xl font-bold text-destructive", children: stats.overdue }),
11781
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-sm text-muted-foreground", children: "Overdue" })
11033
11782
  ] }),
11034
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "p-4", children: [
11035
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-2xl font-bold text-warning", children: stats.today }),
11036
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-sm text-muted-foreground", children: "Today" })
11783
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Card, { className: "p-4", children: [
11784
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-2xl font-bold text-warning", children: stats.today }),
11785
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-sm text-muted-foreground", children: "Today" })
11037
11786
  ] })
11038
11787
  ] }),
11039
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center space-x-4 mb-6", children: [
11040
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11788
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex items-center space-x-4 mb-6", children: [
11789
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11041
11790
  Input,
11042
11791
  {
11043
11792
  placeholder: "Search reminders...",
@@ -11046,25 +11795,25 @@ var TasksView = ({
11046
11795
  className: "max-w-md"
11047
11796
  }
11048
11797
  ) }),
11049
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Select, { value: filter, onValueChange: (value) => setFilter(value), children: [
11050
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectValue, {}) }),
11051
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(SelectContent, { children: [
11052
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(SelectItem, { value: "all", children: [
11798
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Select, { value: filter, onValueChange: (value) => setFilter(value), children: [
11799
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectTrigger, { className: "w-40", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectValue, {}) }),
11800
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(SelectContent, { children: [
11801
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(SelectItem, { value: "all", children: [
11053
11802
  "All (",
11054
11803
  stats.total,
11055
11804
  ")"
11056
11805
  ] }),
11057
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(SelectItem, { value: "overdue", children: [
11806
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(SelectItem, { value: "overdue", children: [
11058
11807
  "Overdue (",
11059
11808
  stats.overdue,
11060
11809
  ")"
11061
11810
  ] }),
11062
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(SelectItem, { value: "overdue", children: [
11811
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(SelectItem, { value: "overdue", children: [
11063
11812
  "Overdue (",
11064
11813
  stats.overdue,
11065
11814
  ")"
11066
11815
  ] }),
11067
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(SelectItem, { value: "today", children: [
11816
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(SelectItem, { value: "today", children: [
11068
11817
  "Today (",
11069
11818
  stats.today,
11070
11819
  ")"
@@ -11072,11 +11821,11 @@ var TasksView = ({
11072
11821
  ] })
11073
11822
  ] })
11074
11823
  ] }),
11075
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "space-y-4", children: sortedReminders.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Card, { className: "p-8 text-center", children: [
11076
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "text-muted-foreground", children: searchTerm || filter !== "all" ? "No reminders match your filters" : "No reminders yet" }),
11077
- !searchTerm && filter === "all" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-sm text-muted-foreground/60 mt-2", children: "Create your first reminder to get started" })
11824
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "space-y-4", children: sortedReminders.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Card, { className: "p-8 text-center", children: [
11825
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-muted-foreground", children: searchTerm || filter !== "all" ? "No reminders match your filters" : "No reminders yet" }),
11826
+ !searchTerm && filter === "all" && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: "text-sm text-muted-foreground/60 mt-2", children: "Create your first reminder to get started" })
11078
11827
  ] }) : sortedReminders.map(
11079
- (reminder) => reminder && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
11828
+ (reminder) => reminder && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11080
11829
  ReminderCard,
11081
11830
  {
11082
11831
  reminder,
@@ -11093,10 +11842,10 @@ var TasksView = ({
11093
11842
  };
11094
11843
 
11095
11844
  // src/components/Projects/FileView.tsx
11096
- var import_react31 = require("react");
11097
- var import_lucide_react28 = require("lucide-react");
11098
- var import_react32 = require("motion/react");
11099
- var import_jsx_runtime58 = require("react/jsx-runtime");
11845
+ var import_react32 = require("react");
11846
+ var import_lucide_react29 = require("lucide-react");
11847
+ var import_react33 = require("motion/react");
11848
+ var import_jsx_runtime59 = require("react/jsx-runtime");
11100
11849
  function FileView({
11101
11850
  initialFiles = [],
11102
11851
  onFileAdd,
@@ -11107,18 +11856,18 @@ function FileView({
11107
11856
  compactView = false,
11108
11857
  className
11109
11858
  }) {
11110
- const [files, setFiles] = (0, import_react31.useState)(initialFiles);
11111
- const [searchTerm, setSearchTerm] = (0, import_react31.useState)("");
11112
- const [appFilter, setAppFilter] = (0, import_react31.useState)("all");
11113
- const [activeTab, setActiveTab] = (0, import_react31.useState)("all");
11114
- const [isAddFileModalOpen, setIsAddFileModalOpen] = (0, import_react31.useState)(false);
11115
- const prevFilesHash = (0, import_react31.useRef)("");
11859
+ const [files, setFiles] = (0, import_react32.useState)(initialFiles);
11860
+ const [searchTerm, setSearchTerm] = (0, import_react32.useState)("");
11861
+ const [appFilter, setAppFilter] = (0, import_react32.useState)("all");
11862
+ const [activeTab, setActiveTab] = (0, import_react32.useState)("all");
11863
+ const [isAddFileModalOpen, setIsAddFileModalOpen] = (0, import_react32.useState)(false);
11864
+ const prevFilesHash = (0, import_react32.useRef)("");
11116
11865
  const getHash = (list) => {
11117
11866
  return list.map(
11118
11867
  (item) => `${item.id}-${new Date(item.createdAt).getTime()}-${new Date(item.updatedAt).getTime()}`
11119
11868
  ).join("-");
11120
11869
  };
11121
- (0, import_react31.useEffect)(() => {
11870
+ (0, import_react32.useEffect)(() => {
11122
11871
  const next = getHash(
11123
11872
  initialFiles.map((el) => ({
11124
11873
  ...el,
@@ -11155,16 +11904,16 @@ function FileView({
11155
11904
  setSearchTerm("");
11156
11905
  setAppFilter("all");
11157
11906
  };
11158
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
11159
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react32.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11160
- import_react32.motion.div,
11907
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "px-2 md:px-4 py-4 space-y-8", children: [
11908
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react33.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11909
+ import_react33.motion.div,
11161
11910
  {
11162
11911
  initial: { opacity: 0, y: 10 },
11163
11912
  animate: { opacity: 1, y: 0 },
11164
11913
  exit: { opacity: 0, y: -10 },
11165
11914
  transition: { duration: 0.2 },
11166
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: `space-y-6 ${className || ""}`, children: [
11167
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11915
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: `space-y-6 ${className || ""}`, children: [
11916
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11168
11917
  DashboardHero,
11169
11918
  {
11170
11919
  title: "Files",
@@ -11180,10 +11929,10 @@ function FileView({
11180
11929
  }
11181
11930
  }
11182
11931
  ),
11183
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex flex-col md:flex-row gap-4", children: [
11184
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "relative", children: [
11185
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Search, { className: "absolute left-3 top-3 h-4 w-4 text-muted-foreground" }),
11186
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11932
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "flex flex-col md:flex-row gap-4", children: [
11933
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "relative", children: [
11934
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react29.Search, { className: "absolute left-3 top-3 h-4 w-4 text-muted-foreground" }),
11935
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11187
11936
  Input,
11188
11937
  {
11189
11938
  placeholder: "Search files...",
@@ -11193,13 +11942,13 @@ function FileView({
11193
11942
  }
11194
11943
  )
11195
11944
  ] }) }),
11196
- (searchTerm || appFilter !== "all") && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Button, { variant: "outline", onClick: clearFilters, className: "gap-2", children: [
11197
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Filter, { className: "h-4 w-4" }),
11945
+ (searchTerm || appFilter !== "all") && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Button, { variant: "outline", onClick: clearFilters, className: "gap-2", children: [
11946
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react29.Filter, { className: "h-4 w-4" }),
11198
11947
  "Clear"
11199
11948
  ] })
11200
11949
  ] }) }) }),
11201
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "space-y-4", children: [
11202
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11950
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "space-y-4", children: [
11951
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11203
11952
  NavigationTabs,
11204
11953
  {
11205
11954
  activeTab,
@@ -11213,7 +11962,7 @@ function FileView({
11213
11962
  gridCols: 3
11214
11963
  }
11215
11964
  ),
11216
- activeTab === "all" && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11965
+ activeTab === "all" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11217
11966
  FileList,
11218
11967
  {
11219
11968
  files: filteredFiles,
@@ -11223,7 +11972,7 @@ function FileView({
11223
11972
  showHeader: !compactView
11224
11973
  }
11225
11974
  ),
11226
- activeTab === "recent" && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11975
+ activeTab === "recent" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11227
11976
  FileList,
11228
11977
  {
11229
11978
  files: recentFiles,
@@ -11233,7 +11982,7 @@ function FileView({
11233
11982
  showHeader: !compactView
11234
11983
  }
11235
11984
  ),
11236
- activeTab === "shared" && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
11985
+ activeTab === "shared" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11237
11986
  FileList,
11238
11987
  {
11239
11988
  files: sharedFiles,
@@ -11244,12 +11993,12 @@ function FileView({
11244
11993
  }
11245
11994
  )
11246
11995
  ] }),
11247
- filteredFiles.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "text-center py-8", children: [
11248
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.File, { className: "h-12 w-12 text-muted-foreground mx-auto mb-4" }),
11249
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("h3", { className: "text-lg font-semibold mb-2", children: "No files found" }),
11250
- /* @__PURE__ */ (0, import_jsx_runtime58.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." }),
11251
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Button, { onClick: handleAddFile, className: "gap-2", children: [
11252
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react28.Plus, { className: "h-4 w-4" }),
11996
+ filteredFiles.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CardContent, { className: "pt-6", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "text-center py-8", children: [
11997
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react29.File, { className: "h-12 w-12 text-muted-foreground mx-auto mb-4" }),
11998
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h3", { className: "text-lg font-semibold mb-2", children: "No files found" }),
11999
+ /* @__PURE__ */ (0, import_jsx_runtime59.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." }),
12000
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Button, { onClick: handleAddFile, className: "gap-2", children: [
12001
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react29.Plus, { className: "h-4 w-4" }),
11253
12002
  "Upload File"
11254
12003
  ] })
11255
12004
  ] }) }) })
@@ -11257,7 +12006,7 @@ function FileView({
11257
12006
  },
11258
12007
  "files-view"
11259
12008
  ) }),
11260
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
12009
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
11261
12010
  AddFileModal,
11262
12011
  {
11263
12012
  isOpen: isAddFileModalOpen,
@@ -11270,7 +12019,7 @@ function FileView({
11270
12019
 
11271
12020
  // src/components/Projects/ProjectView.tsx
11272
12021
  var import_navigation = require("next/navigation");
11273
- var import_jsx_runtime59 = require("react/jsx-runtime");
12022
+ var import_jsx_runtime60 = require("react/jsx-runtime");
11274
12023
  function ProjectView({
11275
12024
  title = "",
11276
12025
  initialTasks = [],
@@ -11318,47 +12067,47 @@ function ProjectView({
11318
12067
  onCopilotClick,
11319
12068
  handleAddComment
11320
12069
  }) {
11321
- const [tasks, setTasks] = (0, import_react33.useState)(initialTasks);
11322
- const [epics, setEpics] = (0, import_react33.useState)(initialEpics);
11323
- const [sprints, setSprints] = (0, import_react33.useState)(initialSprints);
11324
- const [projects, setProjects] = (0, import_react33.useState)(initialProjects);
11325
- const [reminders, setReminders] = (0, import_react33.useState)(initialReminders);
11326
- const [colleagues, setColleagues] = (0, import_react33.useState)(initialColleagues);
11327
- const [users, setUsers] = (0, import_react33.useState)(initialUsers);
11328
- const [files, setFiles] = (0, import_react33.useState)(initialFiles);
11329
- const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react33.useState)(false);
11330
- const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react33.useState)(false);
11331
- const [selectedTask, setSelectedTask] = (0, import_react33.useState)(null);
11332
- const [selectedEpicForTask, setSelectedEpicForTask] = (0, import_react33.useState)(null);
11333
- const [draggedTask, setDraggedTask] = (0, import_react33.useState)(null);
11334
- const [currentView, setCurrentView] = (0, import_react33.useState)(initialView || "kanban");
11335
- const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react33.useState)(false);
12070
+ const [tasks, setTasks] = (0, import_react34.useState)(initialTasks);
12071
+ const [epics, setEpics] = (0, import_react34.useState)(initialEpics);
12072
+ const [sprints, setSprints] = (0, import_react34.useState)(initialSprints);
12073
+ const [projects, setProjects] = (0, import_react34.useState)(initialProjects);
12074
+ const [reminders, setReminders] = (0, import_react34.useState)(initialReminders);
12075
+ const [colleagues, setColleagues] = (0, import_react34.useState)(initialColleagues);
12076
+ const [users, setUsers] = (0, import_react34.useState)(initialUsers);
12077
+ const [files, setFiles] = (0, import_react34.useState)(initialFiles);
12078
+ const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react34.useState)(false);
12079
+ const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react34.useState)(false);
12080
+ const [selectedTask, setSelectedTask] = (0, import_react34.useState)(null);
12081
+ const [selectedEpicForTask, setSelectedEpicForTask] = (0, import_react34.useState)(null);
12082
+ const [draggedTask, setDraggedTask] = (0, import_react34.useState)(null);
12083
+ const [currentView, setCurrentView] = (0, import_react34.useState)(initialView || "kanban");
12084
+ const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react34.useState)(false);
11336
12085
  const router = (0, import_navigation.useRouter)();
11337
- (0, import_react33.useEffect)(() => {
12086
+ (0, import_react34.useEffect)(() => {
11338
12087
  setTasks(initialTasks);
11339
12088
  }, [initialTasks]);
11340
- (0, import_react33.useEffect)(() => {
12089
+ (0, import_react34.useEffect)(() => {
11341
12090
  setSprints(initialSprints);
11342
12091
  }, [initialSprints]);
11343
- (0, import_react33.useEffect)(() => {
12092
+ (0, import_react34.useEffect)(() => {
11344
12093
  setEpics(initialEpics);
11345
12094
  }, [initialEpics]);
11346
- (0, import_react33.useEffect)(() => {
12095
+ (0, import_react34.useEffect)(() => {
11347
12096
  setProjects(initialProjects);
11348
12097
  }, [initialProjects]);
11349
- (0, import_react33.useEffect)(() => {
12098
+ (0, import_react34.useEffect)(() => {
11350
12099
  setFiles(initialFiles);
11351
12100
  }, [initialFiles]);
11352
- (0, import_react33.useEffect)(() => {
12101
+ (0, import_react34.useEffect)(() => {
11353
12102
  setUsers(initialUsers);
11354
12103
  }, [initialUsers]);
11355
- (0, import_react33.useEffect)(() => {
12104
+ (0, import_react34.useEffect)(() => {
11356
12105
  setColleagues(initialColleagues);
11357
12106
  }, [initialColleagues]);
11358
- (0, import_react33.useEffect)(() => {
12107
+ (0, import_react34.useEffect)(() => {
11359
12108
  setReminders(initialReminders);
11360
12109
  }, [initialReminders]);
11361
- (0, import_react33.useEffect)(() => {
12110
+ (0, import_react34.useEffect)(() => {
11362
12111
  setCurrentView(initialView);
11363
12112
  }, [initialView]);
11364
12113
  const filteredTasks = tasks.filter((task) => {
@@ -11564,6 +12313,8 @@ function ProjectView({
11564
12313
  return "Documentation";
11565
12314
  case "epics":
11566
12315
  return "Epic Planning";
12316
+ case "gantt":
12317
+ return "Gantt Chart";
11567
12318
  default:
11568
12319
  return "Project Board";
11569
12320
  }
@@ -11579,8 +12330,8 @@ function ProjectView({
11579
12330
  const recentTeams = mockTeams.sort((a, b) => b.lastUsed.getTime() - a.lastUsed.getTime()).slice(0, 3);
11580
12331
  const hasMoreTeams = mockTeams.length > 3;
11581
12332
  const additionalTeams = mockTeams.slice(3);
11582
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(ManagementSidebar, { currentView, onViewChange: handleViewChange, children: [
11583
- currentView === "kanban" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "h-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12333
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(ManagementSidebar, { currentView, onViewChange: handleViewChange, children: [
12334
+ currentView === "kanban" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "h-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11584
12335
  KanbanBoardView,
11585
12336
  {
11586
12337
  initialProjects: projects,
@@ -11597,7 +12348,7 @@ function ProjectView({
11597
12348
  onAddComment: handleAddComment
11598
12349
  }
11599
12350
  ) }),
11600
- currentView === "planning" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12351
+ currentView === "planning" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11601
12352
  PlanningView,
11602
12353
  {
11603
12354
  tasks,
@@ -11610,7 +12361,7 @@ function ProjectView({
11610
12361
  onDeleteSprint: handleDeleteSprint
11611
12362
  }
11612
12363
  ) }),
11613
- currentView === "tasks" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12364
+ currentView === "tasks" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11614
12365
  TasksView,
11615
12366
  {
11616
12367
  initialReminders: reminders,
@@ -11620,7 +12371,7 @@ function ProjectView({
11620
12371
  onDeleteReminder: handleDeleteReminder
11621
12372
  }
11622
12373
  ) }),
11623
- currentView === "files" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12374
+ currentView === "files" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11624
12375
  FileView,
11625
12376
  {
11626
12377
  initialFiles: files,
@@ -11631,7 +12382,7 @@ function ProjectView({
11631
12382
  compactView: false
11632
12383
  }
11633
12384
  ) }),
11634
- currentView === "epics" && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12385
+ currentView === "epics" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "h-full", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11635
12386
  EpicsView,
11636
12387
  {
11637
12388
  tasks,
@@ -11645,7 +12396,17 @@ function ProjectView({
11645
12396
  onDeleteEpic: handleDeleteEpic
11646
12397
  }
11647
12398
  ) }),
11648
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12399
+ currentView === "gantt" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "hidden md:block h-full", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
12400
+ GanttView,
12401
+ {
12402
+ tasks,
12403
+ epics,
12404
+ sprints,
12405
+ onUpdateEpic: handleUpdateEpic,
12406
+ onTaskClick: handleTaskClick
12407
+ }
12408
+ ) }),
12409
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11649
12410
  AddTaskModal,
11650
12411
  {
11651
12412
  isOpen: isAddTaskModalOpen,
@@ -11657,7 +12418,7 @@ function ProjectView({
11657
12418
  defaultEpicId: selectedEpicForTask || void 0
11658
12419
  }
11659
12420
  ),
11660
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
12421
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11661
12422
  AddEpicModal,
11662
12423
  {
11663
12424
  isOpen: isAddEpicModalOpen,
@@ -11669,7 +12430,7 @@ function ProjectView({
11669
12430
  }
11670
12431
 
11671
12432
  // src/components/Projects/ProjectPage.tsx
11672
- var import_jsx_runtime60 = require("react/jsx-runtime");
12433
+ var import_jsx_runtime61 = require("react/jsx-runtime");
11673
12434
  function ProjectPage({
11674
12435
  title = "",
11675
12436
  projects,
@@ -11705,8 +12466,8 @@ function ProjectPage({
11705
12466
  onTeamChange,
11706
12467
  onCopilotClick
11707
12468
  }) {
11708
- const [activeTab, setActiveTab] = (0, import_react34.useState)("projects");
11709
- const [currentBusinessUnit, setCurrentBusinessUnit] = (0, import_react34.useState)(businessUnits3[0]);
12469
+ const [activeTab, setActiveTab] = (0, import_react35.useState)("projects");
12470
+ const [currentBusinessUnit, setCurrentBusinessUnit] = (0, import_react35.useState)(businessUnits3[0]);
11710
12471
  const handleAppOpen = (app) => {
11711
12472
  console.log("Opening app:", app.name);
11712
12473
  };
@@ -11731,7 +12492,7 @@ function ProjectPage({
11731
12492
  const renderTabContent = () => {
11732
12493
  switch (activeTab) {
11733
12494
  case "projects":
11734
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
12495
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
11735
12496
  ProjectView,
11736
12497
  {
11737
12498
  initialProjects: projects,
@@ -11763,8 +12524,8 @@ function ProjectPage({
11763
12524
  return null;
11764
12525
  }
11765
12526
  };
11766
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11767
- DigitalColleageusLayout,
12527
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
12528
+ FoundryLayout,
11768
12529
  {
11769
12530
  sidebarItems: mockSidebarItems,
11770
12531
  title,
@@ -11775,8 +12536,8 @@ function ProjectPage({
11775
12536
  activeTab,
11776
12537
  onTabChange: setActiveTab,
11777
12538
  showTabs: true,
11778
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react35.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
11779
- import_react35.motion.div,
12539
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react36.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
12540
+ import_react36.motion.div,
11780
12541
  {
11781
12542
  initial: { opacity: 0, y: 10 },
11782
12543
  animate: { opacity: 1, y: 0 },