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
@@ -2900,7 +2900,7 @@ var DialogContent = React4.forwardRef(({ className, children, ...props }, ref) =
2900
2900
  {
2901
2901
  ref,
2902
2902
  className: cn(
2903
- "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",
2903
+ "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",
2904
2904
  className
2905
2905
  ),
2906
2906
  ...props,
@@ -6893,15 +6893,16 @@ function useLocalStorage(key, initialValue) {
6893
6893
  return initialValue;
6894
6894
  }
6895
6895
  });
6896
- const setValue = (value) => {
6896
+ const setValue = (0, import_react19.useCallback)((value) => {
6897
6897
  try {
6898
- setStoredValue(value);
6898
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
6899
+ setStoredValue(valueToStore);
6899
6900
  if (typeof window !== "undefined") {
6900
- window.localStorage.setItem(key, JSON.stringify(value));
6901
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
6901
6902
  }
6902
6903
  } catch (error) {
6903
6904
  }
6904
- };
6905
+ }, [key, storedValue]);
6905
6906
  (0, import_react19.useEffect)(() => {
6906
6907
  setValue(storedValue);
6907
6908
  }, []);
@@ -8317,6 +8318,7 @@ var import_react25 = __toESM(require("react"));
8317
8318
  var import_lucide_react18 = require("lucide-react");
8318
8319
  var import_jsx_runtime47 = require("react/jsx-runtime");
8319
8320
  var SprintBoardView = ({
8321
+ projectId,
8320
8322
  initialTasks = [],
8321
8323
  initialEpics = [],
8322
8324
  initialSprints = [],
@@ -8332,6 +8334,8 @@ var SprintBoardView = ({
8332
8334
  onAddEpic,
8333
8335
  // Sprint handlers
8334
8336
  onAddSprint,
8337
+ onUpdateSprint,
8338
+ onDeleteSprint,
8335
8339
  onAddComment,
8336
8340
  onUploadFile,
8337
8341
  onDeleteFile,
@@ -8343,9 +8347,16 @@ var SprintBoardView = ({
8343
8347
  const [colleagues, setColleagues] = (0, import_react25.useState)([]);
8344
8348
  const [users, setUsers] = (0, import_react25.useState)([]);
8345
8349
  const [selectedSprintIds, setSelectedSprintIds] = useLocalStorage(
8346
- "sprintBoardView_selectedSprints",
8350
+ `sprintBoardView_selectedSprints${projectId ? `_${projectId}` : ""}`,
8347
8351
  []
8348
8352
  );
8353
+ const [editingSprintId, setEditingSprintId] = (0, import_react25.useState)(null);
8354
+ const [sprintEditForm, setSprintEditForm] = (0, import_react25.useState)({
8355
+ name: "",
8356
+ description: "",
8357
+ startDate: "",
8358
+ endDate: ""
8359
+ });
8349
8360
  const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react25.useState)(false);
8350
8361
  const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react25.useState)(false);
8351
8362
  const [isAddSprintModalOpen, setIsAddSprintModalOpen] = (0, import_react25.useState)(false);
@@ -8392,6 +8403,8 @@ var SprintBoardView = ({
8392
8403
  const next = getHash(initialSprints);
8393
8404
  if (next !== prevSprintHash.current) {
8394
8405
  setSprints(initialSprints);
8406
+ const validIds = new Set(initialSprints.map((s) => s.id.toString()));
8407
+ setSelectedSprintIds(selectedSprintIds.filter((id) => validIds.has(id)));
8395
8408
  prevSprintHash.current = next;
8396
8409
  }
8397
8410
  }, [initialSprints]);
@@ -8536,6 +8549,34 @@ var SprintBoardView = ({
8536
8549
  onAddSprint?.(sprintData);
8537
8550
  setIsAddSprintModalOpen(false);
8538
8551
  };
8552
+ const handleSprintEditStart = (sprint) => {
8553
+ setEditingSprintId(sprint.id.toString());
8554
+ setSprintEditForm({
8555
+ name: sprint.name,
8556
+ description: sprint.description || "",
8557
+ startDate: sprint.startDate ? new Date(sprint.startDate).toISOString().split("T")[0] : "",
8558
+ endDate: sprint.endDate ? new Date(sprint.endDate).toISOString().split("T")[0] : ""
8559
+ });
8560
+ };
8561
+ const handleSprintEditSave = () => {
8562
+ if (!editingSprintId) return;
8563
+ onUpdateSprint?.(editingSprintId, sprintEditForm);
8564
+ setSprints(
8565
+ (prev) => prev.map(
8566
+ (s) => s.id.toString() === editingSprintId ? { ...s, ...sprintEditForm } : s
8567
+ )
8568
+ );
8569
+ setEditingSprintId(null);
8570
+ };
8571
+ const handleSprintEditCancel = () => {
8572
+ setEditingSprintId(null);
8573
+ setSprintEditForm({ name: "", description: "", startDate: "", endDate: "" });
8574
+ };
8575
+ const handleDeleteSprint = (sprintId) => {
8576
+ onDeleteSprint?.(sprintId);
8577
+ setSprints((prev) => prev.filter((s) => s.id.toString() !== sprintId));
8578
+ setSelectedSprintIds(selectedSprintIds.filter((id) => id !== sprintId));
8579
+ };
8539
8580
  const handleTaskClick = (task) => {
8540
8581
  setSelectedTask(task);
8541
8582
  onTaskClick?.(task);
@@ -8666,37 +8707,138 @@ var SprintBoardView = ({
8666
8707
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8667
8708
  "div",
8668
8709
  {
8669
- className: `p-3 rounded-lg border cursor-pointer transition-all ${isSelected ? "bg-primary/10 border-primary/30 ring-1 ring-primary/20" : canSelect ? "bg-card border-border hover:border-primary/50 hover:bg-muted/50" : "bg-muted/30 border-border/30 opacity-60"}`,
8670
- onClick: () => {
8671
- if (canSelect) {
8672
- toggleSprintView(sprint.id.toString());
8673
- } else if (isSelected) {
8674
- toggleSprintView(sprint.id.toString());
8675
- }
8676
- },
8677
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-start justify-between", children: [
8678
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex-1 min-w-0", children: [
8679
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
8680
- sprint.description && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mt-1", children: sprint.description }),
8681
- sprint.startDate && sprint.endDate && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1 mt-2 text-xs text-muted-foreground", children: [
8682
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Calendar, { className: "h-3 w-3" }),
8683
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
8684
- new Date(sprint.startDate).toLocaleDateString(),
8685
- " -",
8686
- " ",
8687
- new Date(sprint.endDate).toLocaleDateString()
8688
- ] })
8710
+ className: `p-3 rounded-lg border transition-all ${isSelected ? "bg-primary/10 border-primary/30 ring-1 ring-primary/20" : canSelect ? "bg-card border-border" : "bg-muted/30 border-border/30 opacity-60"}`,
8711
+ children: editingSprintId === sprint.id.toString() ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-3", children: [
8712
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8713
+ Input,
8714
+ {
8715
+ value: sprintEditForm.name,
8716
+ onChange: (e) => setSprintEditForm((prev) => ({ ...prev, name: e.target.value })),
8717
+ className: "text-sm",
8718
+ placeholder: "Sprint name"
8719
+ }
8720
+ ),
8721
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8722
+ Textarea,
8723
+ {
8724
+ value: sprintEditForm.description,
8725
+ onChange: (e) => setSprintEditForm((prev) => ({
8726
+ ...prev,
8727
+ description: e.target.value
8728
+ })),
8729
+ className: "text-sm min-h-[60px]",
8730
+ placeholder: "Sprint description"
8731
+ }
8732
+ ),
8733
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
8734
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8735
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "Start Date" }),
8736
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8737
+ Input,
8738
+ {
8739
+ type: "date",
8740
+ value: sprintEditForm.startDate,
8741
+ onChange: (e) => setSprintEditForm((prev) => ({
8742
+ ...prev,
8743
+ startDate: e.target.value
8744
+ })),
8745
+ className: "text-sm"
8746
+ }
8747
+ )
8748
+ ] }),
8749
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8750
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("label", { className: "text-xs text-muted-foreground block mb-1", children: "End Date" }),
8751
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8752
+ Input,
8753
+ {
8754
+ type: "date",
8755
+ value: sprintEditForm.endDate,
8756
+ onChange: (e) => setSprintEditForm((prev) => ({
8757
+ ...prev,
8758
+ endDate: e.target.value
8759
+ })),
8760
+ className: "text-sm"
8761
+ }
8762
+ )
8689
8763
  ] })
8690
8764
  ] }),
8691
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ml-2 flex items-center gap-2", children: [
8692
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Badge, { variant: "secondary", className: "text-xs", children: taskCount }),
8693
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8694
- "div",
8765
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex gap-2", children: [
8766
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8767
+ Button,
8768
+ {
8769
+ size: "sm",
8770
+ onClick: handleSprintEditSave,
8771
+ className: "flex-1",
8772
+ children: [
8773
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Check, { className: "h-3 w-3 mr-1" }),
8774
+ "Save"
8775
+ ]
8776
+ }
8777
+ ),
8778
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
8779
+ Button,
8695
8780
  {
8696
- className: `h-4 w-4 rounded border-2 transition-all ${isSelected ? "bg-primary border-primary" : "border-muted-foreground hover:border-foreground"}`
8781
+ size: "sm",
8782
+ variant: "outline",
8783
+ onClick: handleSprintEditCancel,
8784
+ className: "flex-1",
8785
+ children: [
8786
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.X, { className: "h-3 w-3 mr-1" }),
8787
+ "Cancel"
8788
+ ]
8697
8789
  }
8698
8790
  )
8699
8791
  ] })
8792
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { children: [
8793
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-start justify-between", children: [
8794
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex-1 min-w-0", children: [
8795
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "font-medium text-sm text-foreground truncate", children: sprint.name }),
8796
+ sprint.description && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-2 mt-1", children: sprint.description }),
8797
+ sprint.startDate && sprint.endDate && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1 mt-2 text-xs text-muted-foreground", children: [
8798
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Calendar, { className: "h-3 w-3" }),
8799
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { children: [
8800
+ new Date(sprint.startDate).toLocaleDateString(),
8801
+ " -",
8802
+ " ",
8803
+ new Date(sprint.endDate).toLocaleDateString()
8804
+ ] })
8805
+ ] })
8806
+ ] }),
8807
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "ml-2 flex items-center gap-1", children: [
8808
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Badge, { variant: "secondary", className: "text-xs", children: taskCount }),
8809
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8810
+ Button,
8811
+ {
8812
+ size: "sm",
8813
+ variant: "ghost",
8814
+ onClick: () => handleSprintEditStart(sprint),
8815
+ className: "h-6 w-6 p-0",
8816
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Edit2, { className: "h-3 w-3" })
8817
+ }
8818
+ ),
8819
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8820
+ Button,
8821
+ {
8822
+ size: "sm",
8823
+ variant: "ghost",
8824
+ onClick: () => handleDeleteSprint(sprint.id.toString()),
8825
+ className: "h-6 w-6 p-0 text-destructive hover:text-destructive",
8826
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react18.Trash2, { className: "h-3 w-3" })
8827
+ }
8828
+ )
8829
+ ] })
8830
+ ] }),
8831
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
8832
+ Button,
8833
+ {
8834
+ variant: isSelected ? "default" : "outline",
8835
+ size: "sm",
8836
+ className: "w-full mt-2 text-xs h-7",
8837
+ onClick: () => toggleSprintView(sprint.id.toString()),
8838
+ disabled: !isSelected && selectedSprintIds.length >= 3,
8839
+ children: isSelected ? "Deselect" : selectedSprintIds.length >= 3 ? "Limit reached" : "Select"
8840
+ }
8841
+ )
8700
8842
  ] })
8701
8843
  },
8702
8844
  sprint.id
@@ -9612,17 +9754,25 @@ var import_react27 = require("react");
9612
9754
  var import_lucide_react20 = require("lucide-react");
9613
9755
  var import_jsx_runtime49 = require("react/jsx-runtime");
9614
9756
  var EpicsView = ({
9757
+ projectId,
9615
9758
  tasks,
9616
9759
  epics,
9617
9760
  sprints,
9761
+ colleagues = [],
9618
9762
  onUpdateTask,
9619
9763
  onTaskClick,
9620
9764
  onAddTaskToEpic,
9621
9765
  onAddEpic,
9622
9766
  onUpdateEpic,
9623
- onDeleteEpic
9767
+ onDeleteEpic,
9768
+ onDeleteTask,
9769
+ onAddComment,
9770
+ onUploadFile,
9771
+ onDeleteFile,
9772
+ onFileUpdate
9624
9773
  }) => {
9625
9774
  const [availableEpics, setAvailableEpics] = (0, import_react27.useState)(epics);
9775
+ const [availableTasks, setAvailableTasks] = (0, import_react27.useState)(tasks);
9626
9776
  const [draggedTask, setDraggedTask] = (0, import_react27.useState)(null);
9627
9777
  const [editingEpic, setEditingEpic] = (0, import_react27.useState)(null);
9628
9778
  const [editForm, setEditForm] = (0, import_react27.useState)({});
@@ -9630,16 +9780,29 @@ var EpicsView = ({
9630
9780
  const [isAddEpicModalOpen, setIsAddEpicModalOpen] = (0, import_react27.useState)(false);
9631
9781
  const [isAddTaskModalOpen, setIsAddTaskModalOpen] = (0, import_react27.useState)(false);
9632
9782
  const [addTaskEpic, setAddTaskEpic] = (0, import_react27.useState)(null);
9783
+ const [selectedTask, setSelectedTask] = (0, import_react27.useState)(null);
9784
+ const [selectedEpicIds, setSelectedEpicIds] = useLocalStorage(
9785
+ `epicsView_selectedEpics${projectId ? `_${projectId}` : ""}`,
9786
+ []
9787
+ );
9788
+ const [isEpicSelectorOpen, setIsEpicSelectorOpen] = (0, import_react27.useState)(false);
9633
9789
  const heroRef = (0, import_react27.useRef)(null);
9634
9790
  const containerRef = (0, import_react27.useRef)(null);
9635
9791
  (0, import_react27.useEffect)(() => {
9636
9792
  setAvailableEpics(epics);
9793
+ const validIds = new Set(epics.map((e) => e.id.toString()));
9794
+ setSelectedEpicIds((prev) => prev.filter((id) => validIds.has(id)));
9637
9795
  }, [epics]);
9796
+ (0, import_react27.useEffect)(() => {
9797
+ setAvailableTasks(tasks);
9798
+ if (selectedTask) {
9799
+ setSelectedTask(tasks.find((t) => t.id === selectedTask.id) || null);
9800
+ }
9801
+ }, [tasks]);
9638
9802
  (0, import_react27.useEffect)(() => {
9639
9803
  const measureHeroHeight = () => {
9640
9804
  if (heroRef.current) {
9641
- const height = heroRef.current.offsetHeight;
9642
- setHeroHeight(height);
9805
+ setHeroHeight(heroRef.current.offsetHeight);
9643
9806
  }
9644
9807
  };
9645
9808
  measureHeroHeight();
@@ -9664,6 +9827,12 @@ var EpicsView = ({
9664
9827
  }, 300);
9665
9828
  return () => clearTimeout(timer);
9666
9829
  }, [editingEpic]);
9830
+ const visibleEpics = selectedEpicIds.length === 0 ? availableEpics : availableEpics.filter((e) => selectedEpicIds.includes(e.id.toString()));
9831
+ const toggleEpicView = (epicId) => {
9832
+ setSelectedEpicIds(
9833
+ (prev) => prev.includes(epicId) ? prev.filter((id) => id !== epicId) : [...prev, epicId]
9834
+ );
9835
+ };
9667
9836
  const handleDragStart = (task) => {
9668
9837
  setDraggedTask(task);
9669
9838
  };
@@ -9673,14 +9842,41 @@ var EpicsView = ({
9673
9842
  const handleDrop = (e, epicId) => {
9674
9843
  e.preventDefault();
9675
9844
  if (draggedTask && extractId(draggedTask.epic).toString() !== epicId) {
9676
- onUpdateTask(draggedTask.id.toString(), {
9677
- epic: Number(epicId)
9678
- });
9845
+ onUpdateTask(draggedTask.id.toString(), { epic: Number(epicId) });
9846
+ setAvailableTasks(
9847
+ (prev) => prev.map((t) => t.id === draggedTask.id ? { ...t, epic: Number(epicId) } : t)
9848
+ );
9679
9849
  setDraggedTask(null);
9680
9850
  }
9681
9851
  };
9682
9852
  const getTasksByEpic = (epicId) => {
9683
- return tasks.filter((task) => extractId(task.epic).toString() === epicId);
9853
+ return availableTasks.filter((task) => extractId(task.epic).toString() === epicId);
9854
+ };
9855
+ const handleTaskClick = (task) => {
9856
+ setSelectedTask(task);
9857
+ onTaskClick?.(task);
9858
+ };
9859
+ const handleUpdateTask = async (taskId, updates) => {
9860
+ setAvailableTasks(
9861
+ (prev) => prev.map((t) => t.id === Number(taskId) ? { ...t, ...updates } : t)
9862
+ );
9863
+ if (selectedTask?.id === Number(taskId)) {
9864
+ setSelectedTask((prev) => prev ? { ...prev, ...updates } : null);
9865
+ }
9866
+ await onUpdateTask(taskId, updates);
9867
+ };
9868
+ const handleDeleteTask = async (taskId) => {
9869
+ setAvailableTasks((prev) => prev.filter((t) => t.id !== Number(taskId)));
9870
+ if (selectedTask?.id === Number(taskId)) {
9871
+ setSelectedTask(null);
9872
+ }
9873
+ await onDeleteTask?.(taskId);
9874
+ };
9875
+ const handleRemoveFromEpic = (task) => {
9876
+ onUpdateTask(task.id.toString(), { epic: null });
9877
+ setAvailableTasks(
9878
+ (prev) => prev.map((t) => t.id === task.id ? { ...t, epic: null } : t)
9879
+ );
9684
9880
  };
9685
9881
  const handleEditEpic = (epic) => {
9686
9882
  setEditingEpic(epic.id.toString());
@@ -9689,19 +9885,15 @@ var EpicsView = ({
9689
9885
  description: epic.description,
9690
9886
  confidence: epic.confidence,
9691
9887
  phase: epic.phase
9692
- // progress: epic.progress || 0, // This is a number, not a string
9693
9888
  });
9694
9889
  };
9695
9890
  const handleSaveEdit = async () => {
9696
9891
  if (editingEpic && editForm.name) {
9697
9892
  await onUpdateEpic(editingEpic.toString(), editForm);
9698
9893
  setAvailableEpics(
9699
- (prev) => prev.map((epic) => {
9700
- if (epic.id.toString() === editingEpic) {
9701
- return { ...epic, ...editForm };
9702
- }
9703
- return epic;
9704
- })
9894
+ (prev) => prev.map(
9895
+ (epic) => epic.id.toString() === editingEpic ? { ...epic, ...editForm } : epic
9896
+ )
9705
9897
  );
9706
9898
  setEditingEpic(null);
9707
9899
  setEditForm({});
@@ -9717,6 +9909,7 @@ var EpicsView = ({
9717
9909
  )) {
9718
9910
  await onDeleteEpic(epicId);
9719
9911
  setAvailableEpics((prev) => prev.filter((epic) => epic.id.toString() !== epicId));
9912
+ setSelectedEpicIds((prev) => prev.filter((id) => id !== epicId));
9720
9913
  }
9721
9914
  };
9722
9915
  const getPhaseLabel = (phase) => {
@@ -9759,218 +9952,315 @@ var EpicsView = ({
9759
9952
  }
9760
9953
  }
9761
9954
  ) }),
9762
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9955
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex-1 min-h-0 mt-8", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9763
9956
  "div",
9764
9957
  {
9765
- className: "h-full overflow-y-auto",
9958
+ className: "h-full overflow-y-auto no-scrollbar",
9766
9959
  style: {
9767
9960
  height: heroHeight > 0 ? `calc(100vh - ${heroHeight + 120}px)` : "calc(100vh - 12rem)"
9768
9961
  },
9769
- children: /* @__PURE__ */ (0, import_jsx_runtime49.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) => {
9770
- const epicTasks = getTasksByEpic(epic.id.toString());
9771
- const totalPoints = epicTasks.reduce(
9772
- (sum, task) => sum + (task.storyPoints || 0),
9773
- 0
9774
- );
9775
- const availableHeight = heroHeight > 0 ? `calc(100vh - ${heroHeight + 200}px)` : "calc(100vh - 14rem)";
9776
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9777
- Card,
9778
- {
9779
- className: `flex flex-col ${editingEpic === epic.id.toString() ? "h-auto" : ""} bg-card shadow-sm`,
9780
- style: {
9781
- height: editingEpic === epic.id.toString() ? "auto" : availableHeight,
9782
- minHeight: "400px"
9783
- },
9784
- onDragOver: handleDragOver,
9785
- onDrop: (e) => handleDrop(e, epic.id.toString()),
9786
- children: [
9787
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "p-4 border-b border-border", children: editingEpic === epic.id.toString() ? (
9788
- /* Edit Mode */
9789
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "space-y-4", children: [
9790
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center justify-between", children: [
9791
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9792
- Input,
9793
- {
9794
- value: editForm.name || "",
9795
- onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
9796
- placeholder: "Epic name",
9797
- className: "font-semibold"
9798
- }
9799
- ),
9800
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex gap-2 ml-2", children: [
9801
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9802
- Button,
9803
- {
9804
- size: "sm",
9805
- variant: "ghost",
9806
- onClick: handleSaveEdit,
9807
- className: "p-1 h-8 w-8",
9808
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Check, { className: "h-4 w-4" })
9809
- }
9810
- ),
9962
+ children: [
9963
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "mb-4", children: [
9964
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Card, { className: "p-3 bg-card shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center justify-between", children: [
9965
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-3", children: [
9966
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9967
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "font-semibold text-foreground text-sm", children: "Epics" }),
9968
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-xs text-muted-foreground", children: selectedEpicIds.length === 0 ? "All showing" : `${selectedEpicIds.length}/${availableEpics.length} selected` })
9969
+ ] }),
9970
+ selectedEpicIds.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2", children: [
9971
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-xs text-muted-foreground", children: "Viewing:" }),
9972
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex flex-wrap gap-1", children: visibleEpics.map((epic) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9973
+ "div",
9974
+ {
9975
+ className: "flex items-center gap-1 bg-primary/10 text-primary px-2 py-0.5 rounded text-xs",
9976
+ children: [
9977
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: `w-2 h-2 rounded-full ${epic.color}` }),
9978
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "max-w-[80px] truncate", children: epic.name }),
9811
9979
  /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9812
- Button,
9980
+ "button",
9813
9981
  {
9814
- size: "sm",
9815
- variant: "ghost",
9816
- onClick: handleCancelEdit,
9817
- className: "p-1 h-8 w-8",
9982
+ onClick: () => toggleEpicView(epic.id.toString()),
9983
+ className: "ml-0.5 hover:bg-primary/20 h-8 rounded p-0.5",
9818
9984
  children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.X, { className: "h-4 w-4" })
9819
9985
  }
9820
9986
  )
9821
- ] })
9987
+ ]
9988
+ },
9989
+ epic.id
9990
+ )) })
9991
+ ] })
9992
+ ] }),
9993
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9994
+ Button,
9995
+ {
9996
+ onClick: () => setIsEpicSelectorOpen(!isEpicSelectorOpen),
9997
+ variant: "outline",
9998
+ size: "sm",
9999
+ className: "gap-1",
10000
+ children: [
10001
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Layers, { className: "h-3 w-3" }),
10002
+ isEpicSelectorOpen ? "Close" : "Select"
10003
+ ]
10004
+ }
10005
+ )
10006
+ ] }) }),
10007
+ isEpicSelectorOpen && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10008
+ "div",
10009
+ {
10010
+ className: "fixed inset-0 bg-black/20 z-[5]",
10011
+ onClick: () => setIsEpicSelectorOpen(false)
10012
+ }
10013
+ ),
10014
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10015
+ "div",
10016
+ {
10017
+ 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"}`,
10018
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Card, { className: "h-full rounded-none border-0 flex flex-col", children: [
10019
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "p-4 border-b bg-muted/30 flex-shrink-0", children: [
10020
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center justify-between", children: [
10021
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "font-semibold text-foreground text-base", children: "Select Epics" }),
10022
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10023
+ Button,
10024
+ {
10025
+ variant: "ghost",
10026
+ size: "sm",
10027
+ onClick: () => setIsEpicSelectorOpen(false),
10028
+ className: "h-8 w-8 p-0",
10029
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.X, { className: "h-4 w-4" })
10030
+ }
10031
+ )
9822
10032
  ] }),
9823
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9824
- Textarea,
10033
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: "Filter which epics to display. Select none to show all." })
10034
+ ] }),
10035
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex flex-col flex-1 p-4 min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "space-y-2 flex-1 overflow-y-auto no-scrollbar", children: availableEpics.length > 0 ? availableEpics.map((epic) => {
10036
+ const isSelected = selectedEpicIds.includes(epic.id.toString());
10037
+ const taskCount = availableTasks.filter(
10038
+ (t) => extractId(t.epic) === epic.id
10039
+ ).length;
10040
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
10041
+ "div",
9825
10042
  {
9826
- value: editForm.description || "",
9827
- onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
9828
- placeholder: "Epic description",
9829
- className: "text-sm min-h-[60px]"
9830
- }
9831
- ),
9832
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
9833
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9834
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
9835
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9836
- "select",
9837
- {
9838
- value: editForm.confidence || epic.confidence,
9839
- onChange: (e) => setEditForm({
9840
- ...editForm,
9841
- confidence: e.target.value
9842
- }),
9843
- 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",
9844
- children: [
9845
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: "low", children: "Low" }),
9846
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: "medium", children: "Medium" }),
9847
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: "high", children: "High" })
9848
- ]
9849
- }
9850
- )
9851
- ] }),
9852
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
9853
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
9854
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9855
- "select",
9856
- {
9857
- value: editForm.phase?.toString() || epic.phase.toString(),
9858
- onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
9859
- 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",
9860
- children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("option", { value: phase.toString(), children: [
9861
- "Phase ",
9862
- phase
9863
- ] }, phase))
9864
- }
9865
- )
9866
- ] })
9867
- ] })
9868
- ] })
9869
- ) : (
9870
- /* Display Mode */
9871
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
9872
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
9873
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: `w-4 h-4 rounded-full ${epic.color}` }),
9874
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "font-semibold text-foreground select-none flex-1", children: epic.name }),
9875
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex gap-1", children: [
10043
+ className: `p-3 rounded-lg border transition-all ${isSelected ? "bg-primary/10 border-primary/30 ring-1 ring-primary/20" : "bg-card border-border"}`,
10044
+ children: [
10045
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center justify-between", children: [
10046
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2 flex-1 min-w-0", children: [
10047
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
10048
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "font-medium text-sm text-foreground truncate", children: epic.name })
10049
+ ] }),
10050
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "ml-2 flex items-center gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { variant: "secondary", className: "text-xs", children: taskCount }) })
10051
+ ] }),
10052
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10053
+ Button,
10054
+ {
10055
+ variant: isSelected ? "default" : "outline",
10056
+ size: "sm",
10057
+ className: "w-full mt-2 text-xs h-7",
10058
+ onClick: () => toggleEpicView(epic.id.toString()),
10059
+ children: isSelected ? "Deselect" : "Select"
10060
+ }
10061
+ )
10062
+ ]
10063
+ },
10064
+ epic.id
10065
+ );
10066
+ }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-sm text-muted-foreground text-center py-8", children: "No epics yet. Add one to get started." }) }) })
10067
+ ] })
10068
+ }
10069
+ )
10070
+ ] }),
10071
+ /* @__PURE__ */ (0, import_jsx_runtime49.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) => {
10072
+ const epicTasks = getTasksByEpic(epic.id.toString());
10073
+ const totalPoints = epicTasks.reduce(
10074
+ (sum, task) => sum + (task.storyPoints || 0),
10075
+ 0
10076
+ );
10077
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
10078
+ Card,
10079
+ {
10080
+ className: "flex flex-col bg-card shadow-sm",
10081
+ style: { maxHeight: "420px" },
10082
+ onDragOver: handleDragOver,
10083
+ onDrop: (e) => handleDrop(e, epic.id.toString()),
10084
+ children: [
10085
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "p-3 border-b border-border flex-shrink-0", children: editingEpic === epic.id.toString() ? (
10086
+ /* Edit Mode */
10087
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "space-y-3", children: [
10088
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center justify-between", children: [
9876
10089
  /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9877
- Button,
10090
+ Input,
9878
10091
  {
9879
- size: "sm",
9880
- variant: "ghost",
9881
- onClick: () => handleEditEpic(epic),
9882
- className: "p-1 h-8 w-8",
9883
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Edit2, { className: "h-3 w-3" })
10092
+ value: editForm.name || "",
10093
+ onChange: (e) => setEditForm({ ...editForm, name: e.target.value }),
10094
+ placeholder: "Epic name",
10095
+ className: "font-semibold text-sm"
9884
10096
  }
9885
10097
  ),
9886
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9887
- Button,
9888
- {
9889
- size: "sm",
9890
- variant: "ghost",
9891
- onClick: () => handleDeleteEpic(epic.id.toString()),
9892
- className: "p-1 h-8 w-8 hover:bg-destructive/10 hover:text-destructive",
9893
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Trash2, { className: "h-3 w-3" })
9894
- }
9895
- )
9896
- ] })
9897
- ] }),
9898
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex flex-wrap gap-2 mb-3", children: [
9899
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Badge, { className: `text-xs ${getConfidenceColor(epic.confidence)}`, children: [
9900
- epic.confidence,
9901
- " confidence"
9902
- ] }),
9903
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Badge, { variant: "outline", className: "text-xs", children: [
9904
- "Phase ",
9905
- epic.phase
10098
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex gap-1 ml-2", children: [
10099
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10100
+ Button,
10101
+ {
10102
+ size: "sm",
10103
+ variant: "ghost",
10104
+ onClick: handleSaveEdit,
10105
+ className: "p-1 h-7 w-7",
10106
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Check, { className: "h-3 w-3" })
10107
+ }
10108
+ ),
10109
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10110
+ Button,
10111
+ {
10112
+ size: "sm",
10113
+ variant: "ghost",
10114
+ onClick: handleCancelEdit,
10115
+ className: "p-1 h-7 w-7",
10116
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.X, { className: "h-3 w-3" })
10117
+ }
10118
+ )
10119
+ ] })
9906
10120
  ] }),
9907
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9908
- Badge,
10121
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10122
+ Textarea,
9909
10123
  {
9910
- variant: "secondary",
9911
- className: "text-xs bg-muted text-muted-foreground",
9912
- children: [
9913
- epicTasks.length,
9914
- " tasks"
9915
- ]
10124
+ value: editForm.description || "",
10125
+ onChange: (e) => setEditForm({ ...editForm, description: e.target.value }),
10126
+ placeholder: "Epic description",
10127
+ className: "text-xs min-h-[50px]"
9916
10128
  }
9917
10129
  ),
10130
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid grid-cols-2 gap-2", children: [
10131
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
10132
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("label", { className: "text-xs text-muted-foreground", children: "Confidence" }),
10133
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
10134
+ "select",
10135
+ {
10136
+ value: editForm.confidence || epic.confidence,
10137
+ onChange: (e) => setEditForm({
10138
+ ...editForm,
10139
+ confidence: e.target.value
10140
+ }),
10141
+ 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",
10142
+ children: [
10143
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: "low", children: "Low" }),
10144
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: "medium", children: "Medium" }),
10145
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: "high", children: "High" })
10146
+ ]
10147
+ }
10148
+ )
10149
+ ] }),
10150
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { children: [
10151
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("label", { className: "text-xs text-muted-foreground", children: "Phase" }),
10152
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10153
+ "select",
10154
+ {
10155
+ value: editForm.phase?.toString() || epic.phase.toString(),
10156
+ onChange: (e) => setEditForm({ ...editForm, phase: parseInt(e.target.value) }),
10157
+ 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",
10158
+ children: [1, 2, 3, 4, 5, 6, 7, 8, 9].map((phase) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("option", { value: phase.toString(), children: [
10159
+ "Phase ",
10160
+ phase
10161
+ ] }, phase))
10162
+ }
10163
+ )
10164
+ ] })
10165
+ ] })
10166
+ ] })
10167
+ ) : (
10168
+ /* Display Mode */
10169
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
10170
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-1.5 mb-1.5", children: [
10171
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: `w-3 h-3 rounded-full flex-shrink-0 ${epic.color}` }),
10172
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "font-semibold text-foreground text-sm select-none flex-1 truncate", children: epic.name }),
10173
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex gap-0.5", children: [
10174
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10175
+ Button,
10176
+ {
10177
+ size: "sm",
10178
+ variant: "ghost",
10179
+ onClick: () => handleEditEpic(epic),
10180
+ className: "p-1 h-6 w-6",
10181
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Edit2, { className: "h-3 w-3" })
10182
+ }
10183
+ ),
10184
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10185
+ Button,
10186
+ {
10187
+ size: "sm",
10188
+ variant: "ghost",
10189
+ onClick: () => handleDeleteEpic(epic.id.toString()),
10190
+ className: "p-1 h-6 w-6 hover:bg-destructive/10 hover:text-destructive",
10191
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Trash2, { className: "h-3 w-3" })
10192
+ }
10193
+ )
10194
+ ] })
10195
+ ] }),
10196
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex flex-wrap gap-1 mb-2", children: [
10197
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { className: `text-xs px-1.5 py-0 ${getConfidenceColor(epic.confidence)}`, children: epic.confidence }),
10198
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Badge, { variant: "outline", className: "text-xs px-1.5 py-0", children: getPhaseLabel(epic.phase) }),
10199
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Badge, { variant: "secondary", className: "text-xs px-1.5 py-0 bg-muted text-muted-foreground", children: [
10200
+ epicTasks.length,
10201
+ "t \xB7 ",
10202
+ totalPoints,
10203
+ "pt"
10204
+ ] })
10205
+ ] }),
10206
+ epic.description && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-xs text-muted-foreground mb-2 select-none line-clamp-2", children: epic.description }),
9918
10207
  /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9919
- Badge,
10208
+ Button,
9920
10209
  {
9921
- variant: "secondary",
9922
- className: "text-xs bg-muted text-muted-foreground",
10210
+ onClick: () => {
10211
+ setIsAddTaskModalOpen(true);
10212
+ setAddTaskEpic(epic);
10213
+ },
10214
+ variant: "outline",
10215
+ size: "sm",
10216
+ className: "w-full gap-1 h-7 text-xs",
9923
10217
  children: [
9924
- totalPoints,
9925
- " pts"
10218
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Plus, { className: "h-3 w-3" }),
10219
+ "Add Task"
9926
10220
  ]
9927
10221
  }
9928
10222
  )
9929
- ] }),
9930
- epic.description && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-sm text-muted-foreground mb-3 select-none", children: epic.description }),
9931
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
9932
- Button,
9933
- {
9934
- onClick: () => {
9935
- setIsAddTaskModalOpen(true);
9936
- setAddTaskEpic(epic);
9937
- },
9938
- variant: "outline",
9939
- size: "sm",
9940
- className: "w-full gap-2",
9941
- children: [
9942
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Plus, { className: "h-4 w-4" }),
9943
- "Add Task"
9944
- ]
9945
- }
9946
- )
9947
- ] })
9948
- ) }),
9949
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex-1 p-4 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9950
- "div",
9951
- {
9952
- className: `space-y-3 min-h-[200px] border-2 border-dashed rounded p-3 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
9953
- children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex flex-col items-center justify-center h-32 text-muted-foreground border-2 border-dashed border-border rounded-lg", children: [
9954
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Move, { className: "h-8 w-8 mb-2" }),
9955
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-sm select-none", children: "Drop tasks here" })
9956
- ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
9957
- TaskCard,
9958
- {
9959
- task,
9960
- epic,
9961
- onDragStart: handleDragStart,
9962
- onTaskClick,
9963
- isCompact: true
9964
- },
9965
- task.id
9966
- ))
9967
- }
9968
- ) })
9969
- ]
9970
- },
9971
- epic.id
9972
- );
9973
- }) })
10223
+ ] })
10224
+ ) }),
10225
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex-1 p-2 overflow-y-auto no-scrollbar min-h-0", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10226
+ "div",
10227
+ {
10228
+ className: `space-y-2 min-h-[80px] border-2 border-dashed rounded p-2 transition-colors ${draggedTask ? "border-primary bg-primary/10" : "border-border"}`,
10229
+ children: epicTasks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex flex-col items-center justify-center h-16 text-muted-foreground", children: [
10230
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.Move, { className: "h-5 w-5 mb-1" }),
10231
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-xs select-none", children: "Drop tasks here" })
10232
+ ] }) : epicTasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "relative group", children: [
10233
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10234
+ TaskCard,
10235
+ {
10236
+ task,
10237
+ epic,
10238
+ onDragStart: handleDragStart,
10239
+ onTaskClick: handleTaskClick,
10240
+ isCompact: true
10241
+ }
10242
+ ),
10243
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10244
+ "button",
10245
+ {
10246
+ onClick: (e) => {
10247
+ e.stopPropagation();
10248
+ handleRemoveFromEpic(task);
10249
+ },
10250
+ title: "Remove from epic",
10251
+ 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",
10252
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react20.X, { className: "h-3 w-3" })
10253
+ }
10254
+ )
10255
+ ] }, task.id))
10256
+ }
10257
+ ) })
10258
+ ]
10259
+ },
10260
+ epic.id
10261
+ );
10262
+ }) })
10263
+ ]
9974
10264
  }
9975
10265
  ) })
9976
10266
  ] }),
@@ -9993,6 +10283,23 @@ var EpicsView = ({
9993
10283
  defaultEpicId: addTaskEpic?.id.toString() || "",
9994
10284
  sprints
9995
10285
  }
10286
+ ),
10287
+ selectedTask && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
10288
+ TaskDetailsModal,
10289
+ {
10290
+ isOpen: !!selectedTask,
10291
+ onClose: () => setSelectedTask(null),
10292
+ initialTask: selectedTask,
10293
+ epics: availableEpics,
10294
+ sprints,
10295
+ onUpdateTask: handleUpdateTask,
10296
+ onDeleteTask: handleDeleteTask,
10297
+ onAddComment,
10298
+ colleagues,
10299
+ onUploadFile,
10300
+ onDeleteFile,
10301
+ onFileUpdate
10302
+ }
9996
10303
  )
9997
10304
  ] });
9998
10305
  };