@atlashub/smartstack 3.11.0 → 3.14.0

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 (1016) hide show
  1. package/dist/AiDocPage-CM7j_50_.cjs.map +1 -1
  2. package/dist/AiDocPage-rnKBvVof.js.map +1 -1
  3. package/dist/ArchitecturePage-Cn_XCDAo.cjs.map +1 -1
  4. package/dist/ArchitecturePage-DNwzHKk0.js.map +1 -1
  5. package/dist/{AuthCallbackPage-Cu74zAX1.js → AuthCallbackPage-CoJi12d0.js} +2 -2
  6. package/dist/AuthCallbackPage-CoJi12d0.js.map +1 -0
  7. package/dist/{AuthCallbackPage-Bv2Cyn80.cjs → AuthCallbackPage-D_g2VCjj.cjs} +2 -2
  8. package/dist/AuthCallbackPage-D_g2VCjj.cjs.map +1 -0
  9. package/dist/{BaIndexPage-Dkp_Eixx.js → BaIndexPage-B5scAEin.js} +2 -2
  10. package/dist/BaIndexPage-B5scAEin.js.map +1 -0
  11. package/dist/BaIndexPage-C3osYS_6.cjs +2 -0
  12. package/dist/BaIndexPage-C3osYS_6.cjs.map +1 -0
  13. package/dist/BaViewerPage-BPucPOSy.cjs +2 -0
  14. package/dist/BaViewerPage-BPucPOSy.cjs.map +1 -0
  15. package/dist/{BaViewerPage-DxD0eZm-.js → BaViewerPage-TL6IHeQx.js} +26 -26
  16. package/dist/BaViewerPage-TL6IHeQx.js.map +1 -0
  17. package/dist/{ConfirmEmailPage-su3Fvl0e.cjs → ConfirmEmailPage-B3mrPUvg.cjs} +2 -2
  18. package/dist/ConfirmEmailPage-B3mrPUvg.cjs.map +1 -0
  19. package/dist/{ConfirmEmailPage-BTp8J0pw.js → ConfirmEmailPage-DDp2IPE_.js} +2 -2
  20. package/dist/ConfirmEmailPage-DDp2IPE_.js.map +1 -0
  21. package/dist/CrossSchemaFkPage-BchJFOmH.js.map +1 -1
  22. package/dist/CrossSchemaFkPage-DqFNORYd.cjs.map +1 -1
  23. package/dist/{DatabasePage-DFIK8cSM.js → DatabasePage-BnaX9sis.js} +44 -48
  24. package/dist/DatabasePage-BnaX9sis.js.map +1 -0
  25. package/dist/DatabasePage-DAzb3FnS.cjs +2 -0
  26. package/dist/DatabasePage-DAzb3FnS.cjs.map +1 -0
  27. package/dist/DeveloperIndexPage-CtBfD2JI.cjs.map +1 -1
  28. package/dist/DeveloperIndexPage-D4zD_pop.js.map +1 -1
  29. package/dist/{DocRenderer-CcEn1iaa.js → DocRenderer-C5pM9SWP.js} +99 -94
  30. package/dist/DocRenderer-C5pM9SWP.js.map +1 -0
  31. package/dist/DocRenderer-D7hi9Oa-.cjs +2 -0
  32. package/dist/DocRenderer-D7hi9Oa-.cjs.map +1 -0
  33. package/dist/DocsIndexPage-BD6OOCak.js.map +1 -1
  34. package/dist/DocsIndexPage-BPfi0FQD.cjs.map +1 -1
  35. package/dist/{DualDbContextPage-BujD_coN.js → DualDbContextPage-CVBjCvGp.js} +2 -2
  36. package/dist/DualDbContextPage-CVBjCvGp.js.map +1 -0
  37. package/dist/{DualDbContextPage--Qk-qEgD.cjs → DualDbContextPage-Dz8NAewk.cjs} +2 -2
  38. package/dist/DualDbContextPage-Dz8NAewk.cjs.map +1 -0
  39. package/dist/{ForceChangePasswordPage-kEFsb5Aq.cjs → ForceChangePasswordPage-BqNyswSy.cjs} +2 -2
  40. package/dist/ForceChangePasswordPage-BqNyswSy.cjs.map +1 -0
  41. package/dist/{ForceChangePasswordPage-ClENqzCH.js → ForceChangePasswordPage-DkpGGEn7.js} +2 -2
  42. package/dist/ForceChangePasswordPage-DkpGGEn7.js.map +1 -0
  43. package/dist/{ForgotPasswordPage--Wl0Vxbv.cjs → ForgotPasswordPage-C7mySa8O.cjs} +2 -2
  44. package/dist/ForgotPasswordPage-C7mySa8O.cjs.map +1 -0
  45. package/dist/{ForgotPasswordPage-BEgvV5f-.js → ForgotPasswordPage-Dmi6wpMM.js} +2 -2
  46. package/dist/ForgotPasswordPage-Dmi6wpMM.js.map +1 -0
  47. package/dist/InfrastructurePage-D4ZjLzI_.cjs.map +1 -1
  48. package/dist/InfrastructurePage-q_y1z8T_.js.map +1 -1
  49. package/dist/InstallationPage-BJ-GBVPp.cjs.map +1 -1
  50. package/dist/InstallationPage-CXKmzZuN.js.map +1 -1
  51. package/dist/ModulesPage-B3p8e07v.js.map +1 -1
  52. package/dist/ModulesPage-lz8DUm3X.cjs.map +1 -1
  53. package/dist/{OnboardingWizardPage-Bx1UlTbr.js → OnboardingWizardPage-BeCNpdPL.js} +2 -2
  54. package/dist/OnboardingWizardPage-BeCNpdPL.js.map +1 -0
  55. package/dist/{OnboardingWizardPage-C7vendrq.cjs → OnboardingWizardPage-CgEpUx9X.cjs} +2 -2
  56. package/dist/OnboardingWizardPage-CgEpUx9X.cjs.map +1 -0
  57. package/dist/{RegisterPage-DKr8quRk.cjs → RegisterPage-BejbbAl9.cjs} +2 -2
  58. package/dist/RegisterPage-BejbbAl9.cjs.map +1 -0
  59. package/dist/{RegisterPage-BzV0sCTe.js → RegisterPage-CcuYYRBS.js} +2 -2
  60. package/dist/RegisterPage-CcuYYRBS.js.map +1 -0
  61. package/dist/{ResetPasswordPage-x4do1o-j.cjs → ResetPasswordPage-7brP8dT7.cjs} +2 -2
  62. package/dist/ResetPasswordPage-7brP8dT7.cjs.map +1 -0
  63. package/dist/{ResetPasswordPage-DphmJrcJ.js → ResetPasswordPage-BX3wnSSM.js} +2 -2
  64. package/dist/ResetPasswordPage-BX3wnSSM.js.map +1 -0
  65. package/dist/SettingsDocPage-DYXvb3M-.js.map +1 -1
  66. package/dist/SettingsDocPage-Dqj8KzOa.cjs.map +1 -1
  67. package/dist/SlaDocPage-D44QWNY8.cjs.map +1 -1
  68. package/dist/SlaDocPage-hLFLqLVa.js.map +1 -1
  69. package/dist/SmartStackPresentationPage-52Nb7F0X.cjs.map +1 -1
  70. package/dist/SmartStackPresentationPage-D3ku9GtQ.js.map +1 -1
  71. package/dist/{SupportDashboardDocPage-CLotzEwA.js → SupportDashboardDocPage-CG_Ahacx.js} +2 -2
  72. package/dist/SupportDashboardDocPage-CG_Ahacx.js.map +1 -0
  73. package/dist/{SupportDashboardDocPage-DpgGq5Mm.cjs → SupportDashboardDocPage-DfV-9_8r.cjs} +2 -2
  74. package/dist/SupportDashboardDocPage-DfV-9_8r.cjs.map +1 -0
  75. package/dist/{SupportEscalationDocPage-B-_ChfdN.js → SupportEscalationDocPage-C481D7pF.js} +2 -2
  76. package/dist/SupportEscalationDocPage-C481D7pF.js.map +1 -0
  77. package/dist/{SupportEscalationDocPage-WXkAQr8k.cjs → SupportEscalationDocPage-C65oCDZL.cjs} +2 -2
  78. package/dist/SupportEscalationDocPage-C65oCDZL.cjs.map +1 -0
  79. package/dist/SupportIndexPage-Bb0giRKn.js.map +1 -1
  80. package/dist/SupportIndexPage-CsDQ35Cu.cjs.map +1 -1
  81. package/dist/{SupportMyTicketsDocPage-DeRUdAIi.js → SupportMyTicketsDocPage-D2f6DaKb.js} +2 -2
  82. package/dist/SupportMyTicketsDocPage-D2f6DaKb.js.map +1 -0
  83. package/dist/{SupportMyTicketsDocPage-jE1UMaIY.cjs → SupportMyTicketsDocPage-Dbp6XBnH.cjs} +2 -2
  84. package/dist/SupportMyTicketsDocPage-Dbp6XBnH.cjs.map +1 -0
  85. package/dist/{SupportTemplatesDocPage-ajO-cHmK.cjs → SupportTemplatesDocPage-BkeDpR-8.cjs} +2 -2
  86. package/dist/SupportTemplatesDocPage-BkeDpR-8.cjs.map +1 -0
  87. package/dist/{SupportTemplatesDocPage-C8ZLzFJc.js → SupportTemplatesDocPage-sCKQlZFJ.js} +2 -2
  88. package/dist/SupportTemplatesDocPage-sCKQlZFJ.js.map +1 -0
  89. package/dist/{SupportTicketsDocPage-C_ybDTjC.cjs → SupportTicketsDocPage-B_603CpY.cjs} +2 -2
  90. package/dist/SupportTicketsDocPage-B_603CpY.cjs.map +1 -0
  91. package/dist/{SupportTicketsDocPage-DQhHfa6J.js → SupportTicketsDocPage-ClBa3qeY.js} +2 -2
  92. package/dist/SupportTicketsDocPage-ClBa3qeY.js.map +1 -0
  93. package/dist/TeamsIntegrationPage-BwhBcPAK.js.map +1 -1
  94. package/dist/TeamsIntegrationPage-DXj5MDRS.cjs.map +1 -1
  95. package/dist/ThemeDocPage-B6x55uSE.cjs.map +1 -1
  96. package/dist/ThemeDocPage-xkMbvMJG.js.map +1 -1
  97. package/dist/UserIndexPage-DSDfRWFx.js.map +1 -1
  98. package/dist/UserIndexPage-DahU6wzK.cjs.map +1 -1
  99. package/dist/components/ThemeSync.d.ts +2 -1
  100. package/dist/components/ThemeSync.d.ts.map +1 -1
  101. package/dist/components/auth/PermissionSyncHandler.d.ts +2 -1
  102. package/dist/components/auth/PermissionSyncHandler.d.ts.map +1 -1
  103. package/dist/components/dashboard/ApplicationActivityPieChart.d.ts +1 -1
  104. package/dist/components/dashboard/ApplicationActivityPieChart.d.ts.map +1 -1
  105. package/dist/components/dashboard/ApplicationUsageChart.d.ts +3 -2
  106. package/dist/components/dashboard/ApplicationUsageChart.d.ts.map +1 -1
  107. package/dist/components/dashboard/CurrentSessionCard.d.ts +3 -2
  108. package/dist/components/dashboard/CurrentSessionCard.d.ts.map +1 -1
  109. package/dist/components/dashboard/DeviceBreakdownChart.d.ts +1 -1
  110. package/dist/components/dashboard/DeviceBreakdownChart.d.ts.map +1 -1
  111. package/dist/components/dashboard/DeviceStatsCard.d.ts +3 -2
  112. package/dist/components/dashboard/DeviceStatsCard.d.ts.map +1 -1
  113. package/dist/components/dashboard/EngagementMetricsCard.d.ts +1 -1
  114. package/dist/components/dashboard/EngagementMetricsCard.d.ts.map +1 -1
  115. package/dist/components/dashboard/HierarchyDrillDownChart.d.ts +2 -2
  116. package/dist/components/dashboard/HierarchyDrillDownChart.d.ts.map +1 -1
  117. package/dist/components/dashboard/HourlyUsageChart.d.ts +3 -2
  118. package/dist/components/dashboard/HourlyUsageChart.d.ts.map +1 -1
  119. package/dist/components/dashboard/LoginErrorsTable.d.ts +3 -2
  120. package/dist/components/dashboard/LoginErrorsTable.d.ts.map +1 -1
  121. package/dist/components/dashboard/ModulePopularityChart.d.ts +2 -2
  122. package/dist/components/dashboard/ModulePopularityChart.d.ts.map +1 -1
  123. package/dist/components/dashboard/SessionAnalyticsChart.d.ts +3 -2
  124. package/dist/components/dashboard/SessionAnalyticsChart.d.ts.map +1 -1
  125. package/dist/components/dashboard/TenantActivityPieChart.d.ts +2 -2
  126. package/dist/components/dashboard/TenantActivityPieChart.d.ts.map +1 -1
  127. package/dist/components/dashboard/TenantPopularityChart.d.ts +2 -2
  128. package/dist/components/dashboard/TenantPopularityChart.d.ts.map +1 -1
  129. package/dist/components/dashboard/TenantUsageTrendChart.d.ts +2 -2
  130. package/dist/components/dashboard/TenantUsageTrendChart.d.ts.map +1 -1
  131. package/dist/components/dashboard/UsageTrendChart.d.ts +2 -2
  132. package/dist/components/dashboard/UsageTrendChart.d.ts.map +1 -1
  133. package/dist/components/dashboard/WeeklyUsageChart.d.ts +3 -2
  134. package/dist/components/dashboard/WeeklyUsageChart.d.ts.map +1 -1
  135. package/dist/components/docs/DocRenderer.d.ts +6 -5
  136. package/dist/components/docs/DocRenderer.d.ts.map +1 -1
  137. package/dist/components/docs/DocsSearch.d.ts +5 -4
  138. package/dist/components/docs/DocsSearch.d.ts.map +1 -1
  139. package/dist/components/email/EmailEditor.d.ts +7 -6
  140. package/dist/components/email/EmailEditor.d.ts.map +1 -1
  141. package/dist/components/errors/AccessDenied.d.ts +8 -7
  142. package/dist/components/errors/AccessDenied.d.ts.map +1 -1
  143. package/dist/components/errors/ErrorFallback.d.ts +4 -3
  144. package/dist/components/errors/ErrorFallback.d.ts.map +1 -1
  145. package/dist/components/errors/GlobalErrorBoundary.d.ts +3 -2
  146. package/dist/components/errors/GlobalErrorBoundary.d.ts.map +1 -1
  147. package/dist/components/errors/NoActiveWorkspace.d.ts +2 -1
  148. package/dist/components/errors/NoActiveWorkspace.d.ts.map +1 -1
  149. package/dist/components/errors/RouteErrorBoundary.d.ts +3 -2
  150. package/dist/components/errors/RouteErrorBoundary.d.ts.map +1 -1
  151. package/dist/components/favorites/FavoritesBar.d.ts +3 -2
  152. package/dist/components/favorites/FavoritesBar.d.ts.map +1 -1
  153. package/dist/components/favorites/FavoritesModal.d.ts +4 -3
  154. package/dist/components/favorites/FavoritesModal.d.ts.map +1 -1
  155. package/dist/components/layout/AdminHeader.d.ts +3 -2
  156. package/dist/components/layout/AdminHeader.d.ts.map +1 -1
  157. package/dist/components/layout/AdminSidebar.d.ts +4 -3
  158. package/dist/components/layout/AdminSidebar.d.ts.map +1 -1
  159. package/dist/components/layout/AppHeader.d.ts +3 -2
  160. package/dist/components/layout/AppHeader.d.ts.map +1 -1
  161. package/dist/components/layout/BusinessHeader.d.ts +3 -2
  162. package/dist/components/layout/BusinessHeader.d.ts.map +1 -1
  163. package/dist/components/layout/Footer.d.ts +2 -1
  164. package/dist/components/layout/Footer.d.ts.map +1 -1
  165. package/dist/components/layout/Header.d.ts +2 -1
  166. package/dist/components/layout/Header.d.ts.map +1 -1
  167. package/dist/components/layout/ModuleSidebar.d.ts +4 -3
  168. package/dist/components/layout/ModuleSidebar.d.ts.map +1 -1
  169. package/dist/components/layout/ResizableMainContent.d.ts +3 -2
  170. package/dist/components/layout/ResizableMainContent.d.ts.map +1 -1
  171. package/dist/components/layout/UserHeader.d.ts +3 -2
  172. package/dist/components/layout/UserHeader.d.ts.map +1 -1
  173. package/dist/components/layout/UserSidebar.d.ts +4 -3
  174. package/dist/components/layout/UserSidebar.d.ts.map +1 -1
  175. package/dist/components/license/FeatureGate.d.ts +6 -6
  176. package/dist/components/license/FeatureGate.d.ts.map +1 -1
  177. package/dist/components/license/FeatureRouteGuard.d.ts +3 -2
  178. package/dist/components/license/FeatureRouteGuard.d.ts.map +1 -1
  179. package/dist/components/license/LicenseActivationDialog.d.ts +4 -3
  180. package/dist/components/license/LicenseActivationDialog.d.ts.map +1 -1
  181. package/dist/components/license/LicenseAlertBanner.d.ts +2 -1
  182. package/dist/components/license/LicenseAlertBanner.d.ts.map +1 -1
  183. package/dist/components/license/LicenseBlockOverlay.d.ts +2 -1
  184. package/dist/components/license/LicenseBlockOverlay.d.ts.map +1 -1
  185. package/dist/components/license/LicenseContentBanner.d.ts +2 -1
  186. package/dist/components/license/LicenseContentBanner.d.ts.map +1 -1
  187. package/dist/components/license/LicenseGuard.d.ts +2 -1
  188. package/dist/components/license/LicenseGuard.d.ts.map +1 -1
  189. package/dist/components/license/LicenseStatusBadge.d.ts +3 -2
  190. package/dist/components/license/LicenseStatusBadge.d.ts.map +1 -1
  191. package/dist/components/notifications/NotificationBell.d.ts +2 -1
  192. package/dist/components/notifications/NotificationBell.d.ts.map +1 -1
  193. package/dist/components/platform/administration/ApplicationAccessCustomizeDrawer.d.ts +9 -8
  194. package/dist/components/platform/administration/ApplicationAccessCustomizeDrawer.d.ts.map +1 -1
  195. package/dist/components/platform/administration/ApplicationCard.d.ts +8 -8
  196. package/dist/components/platform/administration/ApplicationCard.d.ts.map +1 -1
  197. package/dist/components/platform/administration/ConflictDiffView.d.ts +4 -3
  198. package/dist/components/platform/administration/ConflictDiffView.d.ts.map +1 -1
  199. package/dist/components/platform/administration/EntraGroupRoleAssignment.d.ts +8 -7
  200. package/dist/components/platform/administration/EntraGroupRoleAssignment.d.ts.map +1 -1
  201. package/dist/components/platform/administration/GroupApplicationsTab.d.ts +4 -3
  202. package/dist/components/platform/administration/GroupApplicationsTab.d.ts.map +1 -1
  203. package/dist/components/platform/administration/GroupMembersTab.d.ts +5 -4
  204. package/dist/components/platform/administration/GroupMembersTab.d.ts.map +1 -1
  205. package/dist/components/platform/administration/GroupPermissionsView.d.ts +3 -2
  206. package/dist/components/platform/administration/GroupPermissionsView.d.ts.map +1 -1
  207. package/dist/components/platform/administration/GroupRoleAssignment.d.ts +10 -9
  208. package/dist/components/platform/administration/GroupRoleAssignment.d.ts.map +1 -1
  209. package/dist/components/platform/administration/GroupTenantsTab.d.ts +4 -3
  210. package/dist/components/platform/administration/GroupTenantsTab.d.ts.map +1 -1
  211. package/dist/components/platform/administration/PermissionDrillDownBar.d.ts +8 -7
  212. package/dist/components/platform/administration/PermissionDrillDownBar.d.ts.map +1 -1
  213. package/dist/components/platform/administration/PermissionMatrixFilters.d.ts +10 -9
  214. package/dist/components/platform/administration/PermissionMatrixFilters.d.ts.map +1 -1
  215. package/dist/components/platform/administration/PermissionMatrixTable.d.ts +15 -14
  216. package/dist/components/platform/administration/PermissionMatrixTable.d.ts.map +1 -1
  217. package/dist/components/platform/administration/PermissionPopover.d.ts +12 -11
  218. package/dist/components/platform/administration/PermissionPopover.d.ts.map +1 -1
  219. package/dist/components/platform/administration/TenantAccessCustomizeDrawer.d.ts +8 -7
  220. package/dist/components/platform/administration/TenantAccessCustomizeDrawer.d.ts.map +1 -1
  221. package/dist/components/platform/administration/TenantEntraTab.d.ts +5 -4
  222. package/dist/components/platform/administration/TenantEntraTab.d.ts.map +1 -1
  223. package/dist/components/platform/administration/UserGroupsTab.d.ts +4 -3
  224. package/dist/components/platform/administration/UserGroupsTab.d.ts.map +1 -1
  225. package/dist/components/platform/administration/UserRoleAssignment.d.ts +13 -12
  226. package/dist/components/platform/administration/UserRoleAssignment.d.ts.map +1 -1
  227. package/dist/components/platform/administration/access-requests/AccessRequestApprovalModal.d.ts +8 -7
  228. package/dist/components/platform/administration/access-requests/AccessRequestApprovalModal.d.ts.map +1 -1
  229. package/dist/components/platform/administration/access-requests/AccessRequestStatusBadge.d.ts +3 -2
  230. package/dist/components/platform/administration/access-requests/AccessRequestStatusBadge.d.ts.map +1 -1
  231. package/dist/components/platform/administration/access-requests/AccessRequestsListTab.d.ts +6 -5
  232. package/dist/components/platform/administration/access-requests/AccessRequestsListTab.d.ts.map +1 -1
  233. package/dist/components/platform/administration/access-requests/RequestAccessButton.d.ts +6 -5
  234. package/dist/components/platform/administration/access-requests/RequestAccessButton.d.ts.map +1 -1
  235. package/dist/components/platform/administration/ai/AiModelsTab.d.ts +6 -5
  236. package/dist/components/platform/administration/ai/AiModelsTab.d.ts.map +1 -1
  237. package/dist/components/platform/administration/ai/AiProfilesTab.d.ts +18 -17
  238. package/dist/components/platform/administration/ai/AiProfilesTab.d.ts.map +1 -1
  239. package/dist/components/platform/administration/ai/AiProvidersTab.d.ts +3 -2
  240. package/dist/components/platform/administration/ai/AiProvidersTab.d.ts.map +1 -1
  241. package/dist/components/platform/administration/ai/PromptTestPanel.d.ts +4 -3
  242. package/dist/components/platform/administration/ai/PromptTestPanel.d.ts.map +1 -1
  243. package/dist/components/platform/administration/applications/ApplicationAccessTab.d.ts +4 -3
  244. package/dist/components/platform/administration/applications/ApplicationAccessTab.d.ts.map +1 -1
  245. package/dist/components/platform/administration/applications/ApplicationInfoTab.d.ts +16 -16
  246. package/dist/components/platform/administration/applications/ApplicationInfoTab.d.ts.map +1 -1
  247. package/dist/components/platform/administration/applications/ApplicationModulesTab.d.ts +30 -29
  248. package/dist/components/platform/administration/applications/ApplicationModulesTab.d.ts.map +1 -1
  249. package/dist/components/platform/administration/applications/ApplicationPermissionsTab.d.ts +5 -4
  250. package/dist/components/platform/administration/applications/ApplicationPermissionsTab.d.ts.map +1 -1
  251. package/dist/components/platform/administration/applications/ApplicationPublicationTab.d.ts +49 -49
  252. package/dist/components/platform/administration/applications/ApplicationPublicationTab.d.ts.map +1 -1
  253. package/dist/components/platform/administration/entra/ConflictCard.d.ts +5 -4
  254. package/dist/components/platform/administration/entra/ConflictCard.d.ts.map +1 -1
  255. package/dist/components/platform/administration/entra/ResolutionModal.d.ts +6 -5
  256. package/dist/components/platform/administration/entra/ResolutionModal.d.ts.map +1 -1
  257. package/dist/components/platform/administration/organisations/CreateOrganisationForm.d.ts +8 -7
  258. package/dist/components/platform/administration/organisations/CreateOrganisationForm.d.ts.map +1 -1
  259. package/dist/components/platform/administration/permissions/GroupPermissionMatrix.d.ts +6 -5
  260. package/dist/components/platform/administration/permissions/GroupPermissionMatrix.d.ts.map +1 -1
  261. package/dist/components/platform/administration/permissions/PermissionStatusIndicator.d.ts +6 -5
  262. package/dist/components/platform/administration/permissions/PermissionStatusIndicator.d.ts.map +1 -1
  263. package/dist/components/platform/administration/permissions/RolePermissionMatrix.d.ts +3 -2
  264. package/dist/components/platform/administration/permissions/RolePermissionMatrix.d.ts.map +1 -1
  265. package/dist/components/platform/administration/permissions/UserPermissionMatrix.d.ts +5 -4
  266. package/dist/components/platform/administration/permissions/UserPermissionMatrix.d.ts.map +1 -1
  267. package/dist/components/platform/administration/settings/SettingsHistoryModal.d.ts +2 -1
  268. package/dist/components/platform/administration/settings/SettingsHistoryModal.d.ts.map +1 -1
  269. package/dist/components/platform/administration/tenants/TenantApplicationsTab.d.ts +55 -54
  270. package/dist/components/platform/administration/tenants/TenantApplicationsTab.d.ts.map +1 -1
  271. package/dist/components/platform/administration/tenants/TenantGroupsTab.d.ts +8 -7
  272. package/dist/components/platform/administration/tenants/TenantGroupsTab.d.ts.map +1 -1
  273. package/dist/components/platform/administration/tenants/TenantMembersTab.d.ts +8 -7
  274. package/dist/components/platform/administration/tenants/TenantMembersTab.d.ts.map +1 -1
  275. package/dist/components/platform/administration/tenants/TenantOverviewTab.d.ts +12 -11
  276. package/dist/components/platform/administration/tenants/TenantOverviewTab.d.ts.map +1 -1
  277. package/dist/components/platform/administration/tenants/TenantRolesTab.d.ts +2 -1
  278. package/dist/components/platform/administration/tenants/TenantRolesTab.d.ts.map +1 -1
  279. package/dist/components/platform/administration/tenants/TenantSupportSettingsTab.d.ts +4 -3
  280. package/dist/components/platform/administration/tenants/TenantSupportSettingsTab.d.ts.map +1 -1
  281. package/dist/components/platform/administration/users/UserActivitySessionsTab.d.ts +8 -7
  282. package/dist/components/platform/administration/users/UserActivitySessionsTab.d.ts.map +1 -1
  283. package/dist/components/platform/administration/users/UserApplicationsTab.d.ts +4 -3
  284. package/dist/components/platform/administration/users/UserApplicationsTab.d.ts.map +1 -1
  285. package/dist/components/platform/administration/users/UserHistoryTab.d.ts +7 -6
  286. package/dist/components/platform/administration/users/UserHistoryTab.d.ts.map +1 -1
  287. package/dist/components/platform/administration/users/UserInfoTab.d.ts +15 -14
  288. package/dist/components/platform/administration/users/UserInfoTab.d.ts.map +1 -1
  289. package/dist/components/platform/administration/users/UserSecurityTab.d.ts +23 -22
  290. package/dist/components/platform/administration/users/UserSecurityTab.d.ts.map +1 -1
  291. package/dist/components/platform/administration/users/UserTenantsTab.d.ts +22 -21
  292. package/dist/components/platform/administration/users/UserTenantsTab.d.ts.map +1 -1
  293. package/dist/components/platform/administration/workflows/WorkflowStepsEditor.d.ts +6 -5
  294. package/dist/components/platform/administration/workflows/WorkflowStepsEditor.d.ts.map +1 -1
  295. package/dist/components/platform/api/external-apps/ExternalAppAuditTab.d.ts +1 -1
  296. package/dist/components/platform/api/external-apps/ExternalAppAuditTab.d.ts.map +1 -1
  297. package/dist/components/platform/api/external-apps/ExternalAppExportsTab.d.ts +6 -5
  298. package/dist/components/platform/api/external-apps/ExternalAppExportsTab.d.ts.map +1 -1
  299. package/dist/components/platform/api/external-apps/ExternalAppInfoTab.d.ts +6 -5
  300. package/dist/components/platform/api/external-apps/ExternalAppInfoTab.d.ts.map +1 -1
  301. package/dist/components/platform/api/external-apps/ExternalAppKeysTab.d.ts +6 -5
  302. package/dist/components/platform/api/external-apps/ExternalAppKeysTab.d.ts.map +1 -1
  303. package/dist/components/platform/api/external-apps/ExternalAppPromptTab.d.ts +3 -2
  304. package/dist/components/platform/api/external-apps/ExternalAppPromptTab.d.ts.map +1 -1
  305. package/dist/components/platform/api/external-apps/ExternalAppRolesTab.d.ts +6 -5
  306. package/dist/components/platform/api/external-apps/ExternalAppRolesTab.d.ts.map +1 -1
  307. package/dist/components/platform/support/ActivityTimeline.d.ts +5 -4
  308. package/dist/components/platform/support/ActivityTimeline.d.ts.map +1 -1
  309. package/dist/components/platform/support/AiClassificationBadge.d.ts +7 -6
  310. package/dist/components/platform/support/AiClassificationBadge.d.ts.map +1 -1
  311. package/dist/components/platform/support/AiRoutingSuggestionPanel.d.ts +9 -8
  312. package/dist/components/platform/support/AiRoutingSuggestionPanel.d.ts.map +1 -1
  313. package/dist/components/platform/support/AiTicketSummary.d.ts +8 -7
  314. package/dist/components/platform/support/AiTicketSummary.d.ts.map +1 -1
  315. package/dist/components/platform/support/FilePreviewModal.d.ts +6 -5
  316. package/dist/components/platform/support/FilePreviewModal.d.ts.map +1 -1
  317. package/dist/components/platform/support/ScreenshotAnnotator.d.ts +6 -5
  318. package/dist/components/platform/support/ScreenshotAnnotator.d.ts.map +1 -1
  319. package/dist/components/platform/support/SlaBadge.d.ts +12 -11
  320. package/dist/components/platform/support/SlaBadge.d.ts.map +1 -1
  321. package/dist/components/platform/support/TemplatePicker.d.ts +6 -5
  322. package/dist/components/platform/support/TemplatePicker.d.ts.map +1 -1
  323. package/dist/components/platform/support/TicketConversation.d.ts +31 -30
  324. package/dist/components/platform/support/TicketConversation.d.ts.map +1 -1
  325. package/dist/components/platform/support/TicketDetailView.d.ts +3 -2
  326. package/dist/components/platform/support/TicketDetailView.d.ts.map +1 -1
  327. package/dist/components/platform/support/TicketSidebar.d.ts +19 -18
  328. package/dist/components/platform/support/TicketSidebar.d.ts.map +1 -1
  329. package/dist/components/platform/support/TicketSolutionPanel.d.ts +10 -9
  330. package/dist/components/platform/support/TicketSolutionPanel.d.ts.map +1 -1
  331. package/dist/components/platform/support/TicketWorkflow.d.ts +10 -9
  332. package/dist/components/platform/support/TicketWorkflow.d.ts.map +1 -1
  333. package/dist/components/platform/support/TicketWorkflowHorizontal.d.ts +19 -18
  334. package/dist/components/platform/support/TicketWorkflowHorizontal.d.ts.map +1 -1
  335. package/dist/components/platform/support/TicketsListView.d.ts +8 -7
  336. package/dist/components/platform/support/TicketsListView.d.ts.map +1 -1
  337. package/dist/components/routing/DocRoutes.d.ts +1 -1
  338. package/dist/components/routing/DocRoutes.d.ts.map +1 -1
  339. package/dist/components/routing/DynamicRouter.d.ts +2 -1
  340. package/dist/components/routing/DynamicRouter.d.ts.map +1 -1
  341. package/dist/components/routing/ProtectedRoute.d.ts +2 -1
  342. package/dist/components/routing/ProtectedRoute.d.ts.map +1 -1
  343. package/dist/components/routing/TenantNavigate.d.ts +4 -3
  344. package/dist/components/routing/TenantNavigate.d.ts.map +1 -1
  345. package/dist/components/routing/TenantRouteWrapper.d.ts +2 -1
  346. package/dist/components/routing/TenantRouteWrapper.d.ts.map +1 -1
  347. package/dist/components/session/SessionProvider.d.ts +2 -1
  348. package/dist/components/session/SessionProvider.d.ts.map +1 -1
  349. package/dist/components/session/SessionWarningModal.d.ts +6 -5
  350. package/dist/components/session/SessionWarningModal.d.ts.map +1 -1
  351. package/dist/components/tenants/TenantCard.d.ts +13 -12
  352. package/dist/components/tenants/TenantCard.d.ts.map +1 -1
  353. package/dist/components/tickets/CreateTicketButton.d.ts +4 -3
  354. package/dist/components/tickets/CreateTicketButton.d.ts.map +1 -1
  355. package/dist/components/tracking/PageTracker.d.ts +2 -1
  356. package/dist/components/tracking/PageTracker.d.ts.map +1 -1
  357. package/dist/components/tracking/TenantTracker.d.ts +2 -1
  358. package/dist/components/tracking/TenantTracker.d.ts.map +1 -1
  359. package/dist/components/ui/AppSwitcher.d.ts +2 -1
  360. package/dist/components/ui/AppSwitcher.d.ts.map +1 -1
  361. package/dist/components/ui/AvatarMenu.d.ts +2 -1
  362. package/dist/components/ui/AvatarMenu.d.ts.map +1 -1
  363. package/dist/components/ui/Breadcrumb.d.ts +7 -6
  364. package/dist/components/ui/Breadcrumb.d.ts.map +1 -1
  365. package/dist/components/ui/ConfirmModal.d.ts +11 -11
  366. package/dist/components/ui/ConfirmModal.d.ts.map +1 -1
  367. package/dist/components/ui/DataTable.d.ts +2 -1
  368. package/dist/components/ui/DataTable.d.ts.map +1 -1
  369. package/dist/components/ui/DataView.d.ts +54 -53
  370. package/dist/components/ui/DataView.d.ts.map +1 -1
  371. package/dist/components/ui/DocEdgeButton.d.ts +2 -1
  372. package/dist/components/ui/DocEdgeButton.d.ts.map +1 -1
  373. package/dist/components/ui/DocPanel.d.ts +2 -1
  374. package/dist/components/ui/DocPanel.d.ts.map +1 -1
  375. package/dist/components/ui/DocToggleButton.d.ts +4 -3
  376. package/dist/components/ui/DocToggleButton.d.ts.map +1 -1
  377. package/dist/components/ui/Drawer.d.ts +9 -8
  378. package/dist/components/ui/Drawer.d.ts.map +1 -1
  379. package/dist/components/ui/EntityCard.d.ts +75 -74
  380. package/dist/components/ui/EntityCard.d.ts.map +1 -1
  381. package/dist/components/ui/KanbanBoard.d.ts +23 -22
  382. package/dist/components/ui/KanbanBoard.d.ts.map +1 -1
  383. package/dist/components/ui/LanguageSwitcher.d.ts +2 -1
  384. package/dist/components/ui/LanguageSwitcher.d.ts.map +1 -1
  385. package/dist/components/ui/PageHeader.d.ts +6 -6
  386. package/dist/components/ui/PageHeader.d.ts.map +1 -1
  387. package/dist/components/ui/PageLoader.d.ts +2 -1
  388. package/dist/components/ui/PageLoader.d.ts.map +1 -1
  389. package/dist/components/ui/PermissionMatrix.d.ts +2 -1
  390. package/dist/components/ui/PermissionMatrix.d.ts.map +1 -1
  391. package/dist/components/ui/ProtectedButton.d.ts +9 -8
  392. package/dist/components/ui/ProtectedButton.d.ts.map +1 -1
  393. package/dist/components/ui/RestrictedModuleBanner.d.ts +2 -1
  394. package/dist/components/ui/RestrictedModuleBanner.d.ts.map +1 -1
  395. package/dist/components/ui/ScopeBanner.d.ts +5 -4
  396. package/dist/components/ui/ScopeBanner.d.ts.map +1 -1
  397. package/dist/components/ui/SelectWithOther.d.ts +10 -9
  398. package/dist/components/ui/SelectWithOther.d.ts.map +1 -1
  399. package/dist/components/ui/SortableList.d.ts +6 -5
  400. package/dist/components/ui/SortableList.d.ts.map +1 -1
  401. package/dist/components/ui/TenantScopeFilter.d.ts +8 -7
  402. package/dist/components/ui/TenantScopeFilter.d.ts.map +1 -1
  403. package/dist/components/ui/TenantScopeSelector.d.ts +8 -7
  404. package/dist/components/ui/TenantScopeSelector.d.ts.map +1 -1
  405. package/dist/components/ui/TenantSelector.d.ts +2 -1
  406. package/dist/components/ui/TenantSelector.d.ts.map +1 -1
  407. package/dist/components/ui/ThemeCustomizer.d.ts +5 -4
  408. package/dist/components/ui/ThemeCustomizer.d.ts.map +1 -1
  409. package/dist/components/ui/ThemeScopeSelector.d.ts +3 -2
  410. package/dist/components/ui/ThemeScopeSelector.d.ts.map +1 -1
  411. package/dist/components/ui/ThemeSwitcher.d.ts +2 -1
  412. package/dist/components/ui/ThemeSwitcher.d.ts.map +1 -1
  413. package/dist/components/ui/Tooltip.d.ts +14 -13
  414. package/dist/components/ui/Tooltip.d.ts.map +1 -1
  415. package/dist/components/ui/UnderDevelopment.d.ts +8 -7
  416. package/dist/components/ui/UnderDevelopment.d.ts.map +1 -1
  417. package/dist/components/ui/UnlockAccountModal.d.ts +6 -5
  418. package/dist/components/ui/UnlockAccountModal.d.ts.map +1 -1
  419. package/dist/components/ui/ViewModeToggle.d.ts +4 -3
  420. package/dist/components/ui/ViewModeToggle.d.ts.map +1 -1
  421. package/dist/contexts/AuthContext.d.ts +2 -1
  422. package/dist/contexts/AuthContext.d.ts.map +1 -1
  423. package/dist/contexts/DocPanelContext.d.ts +2 -1
  424. package/dist/contexts/DocPanelContext.d.ts.map +1 -1
  425. package/dist/contexts/FavoritesContext.d.ts +2 -1
  426. package/dist/contexts/FavoritesContext.d.ts.map +1 -1
  427. package/dist/contexts/FeatureConfigContext.d.ts +3 -2
  428. package/dist/contexts/FeatureConfigContext.d.ts.map +1 -1
  429. package/dist/contexts/LicenseContext.d.ts +2 -1
  430. package/dist/contexts/LicenseContext.d.ts.map +1 -1
  431. package/dist/contexts/NavigationContext.d.ts +2 -1
  432. package/dist/contexts/NavigationContext.d.ts.map +1 -1
  433. package/dist/contexts/SidebarContext.d.ts +2 -1
  434. package/dist/contexts/SidebarContext.d.ts.map +1 -1
  435. package/dist/contexts/SignalRContext.d.ts +2 -1
  436. package/dist/contexts/SignalRContext.d.ts.map +1 -1
  437. package/dist/contexts/TenantContext.d.ts +2 -1
  438. package/dist/contexts/TenantContext.d.ts.map +1 -1
  439. package/dist/contexts/ThemeContext.d.ts +2 -1
  440. package/dist/contexts/ThemeContext.d.ts.map +1 -1
  441. package/dist/extensions/ExtensionContext.d.ts +4 -3
  442. package/dist/extensions/ExtensionContext.d.ts.map +1 -1
  443. package/dist/extensions/PageRegistry.d.ts +6 -5
  444. package/dist/extensions/PageRegistry.d.ts.map +1 -1
  445. package/dist/extensions/SlotFill.d.ts +13 -13
  446. package/dist/extensions/SlotFill.d.ts.map +1 -1
  447. package/dist/extensions/types.d.ts +10 -10
  448. package/dist/extensions/types.d.ts.map +1 -1
  449. package/dist/hooks/useAccessRequestActions.d.ts.map +1 -1
  450. package/dist/hooks/useAccessRequests.d.ts.map +1 -1
  451. package/dist/hooks/useAdminTenants.d.ts.map +1 -1
  452. package/dist/hooks/useClientContext.d.ts.map +1 -1
  453. package/dist/hooks/useCollapsibleState.d.ts.map +1 -1
  454. package/dist/hooks/useCreateSupportTicket.d.ts +23 -21
  455. package/dist/hooks/useCreateSupportTicket.d.ts.map +1 -1
  456. package/dist/hooks/useLocale.d.ts.map +1 -1
  457. package/dist/hooks/useLoginForm.d.ts +5 -4
  458. package/dist/hooks/useLoginForm.d.ts.map +1 -1
  459. package/dist/hooks/useNotifications.d.ts.map +1 -1
  460. package/dist/hooks/usePageTracking.d.ts.map +1 -1
  461. package/dist/hooks/usePagination.d.ts +1 -1
  462. package/dist/hooks/usePagination.d.ts.map +1 -1
  463. package/dist/hooks/usePermissionSync.d.ts +2 -1
  464. package/dist/hooks/usePermissionSync.d.ts.map +1 -1
  465. package/dist/hooks/useRestrictedModuleCheck.d.ts.map +1 -1
  466. package/dist/hooks/useSessionMonitor.d.ts +7 -5
  467. package/dist/hooks/useSessionMonitor.d.ts.map +1 -1
  468. package/dist/hooks/useSettingsSection.d.ts.map +1 -1
  469. package/dist/hooks/useSignalR.d.ts.map +1 -1
  470. package/dist/hooks/useTenantCreateForm.d.ts +24 -22
  471. package/dist/hooks/useTenantCreateForm.d.ts.map +1 -1
  472. package/dist/hooks/useTenantFavorites.d.ts.map +1 -1
  473. package/dist/hooks/useTenantFilters.d.ts.map +1 -1
  474. package/dist/hooks/useTenantTracking.d.ts.map +1 -1
  475. package/dist/hooks/useTicketSignalR.d.ts.map +1 -1
  476. package/dist/hooks/useUserAccessRequests.d.ts.map +1 -1
  477. package/dist/i18n/config.d.ts +1 -1
  478. package/dist/i18n/config.d.ts.map +1 -1
  479. package/dist/{index-DGeNdATi.js → index-3lcyR754.js} +2 -2
  480. package/dist/{index-DGeNdATi.js.map → index-3lcyR754.js.map} +1 -1
  481. package/dist/{index-DJXny6rD.cjs → index-AM9K908G.cjs} +2 -2
  482. package/dist/{index-DJXny6rD.cjs.map → index-AM9K908G.cjs.map} +1 -1
  483. package/dist/{index-ASxPhrgZ.cjs → index-BASU1QDx.cjs} +2 -2
  484. package/dist/index-BASU1QDx.cjs.map +1 -0
  485. package/dist/{index-ChVCBF4t.js → index-BBFFDXgT.js} +2 -2
  486. package/dist/{index-ChVCBF4t.js.map → index-BBFFDXgT.js.map} +1 -1
  487. package/dist/{index-C54HbULX.cjs → index-BBQMnq4P.cjs} +2 -2
  488. package/dist/index-BBQMnq4P.cjs.map +1 -0
  489. package/dist/{index-CUISVUMx.js → index-BEOtfRxa.js} +16 -16
  490. package/dist/index-BEOtfRxa.js.map +1 -0
  491. package/dist/{index-D4u23zHI.js → index-BEeLN5ui.js} +24 -24
  492. package/dist/index-BEeLN5ui.js.map +1 -0
  493. package/dist/{index-Du4fQfix.cjs → index-BEpBEF5G.cjs} +2 -2
  494. package/dist/index-BEpBEF5G.cjs.map +1 -0
  495. package/dist/{index-BlHDI4zj.js → index-BIB3FxMF.js} +14 -14
  496. package/dist/index-BIB3FxMF.js.map +1 -0
  497. package/dist/{index-Txfokhn3.cjs → index-BVUCDL0k.cjs} +2 -2
  498. package/dist/index-BVUCDL0k.cjs.map +1 -0
  499. package/dist/{index-jpSTOjXU.js → index-BYYgvEcO.js} +17 -17
  500. package/dist/index-BYYgvEcO.js.map +1 -0
  501. package/dist/{index-CU66n-zU.js → index-B_lFRwmY.js} +13 -13
  502. package/dist/index-B_lFRwmY.js.map +1 -0
  503. package/dist/{index-Blfc9wKG.js → index-Bbd3D6A4.js} +8 -8
  504. package/dist/index-Bbd3D6A4.js.map +1 -0
  505. package/dist/index-BfMaHuWh.cjs +48 -0
  506. package/dist/index-BfMaHuWh.cjs.map +1 -0
  507. package/dist/index-C0AgM8YN.cjs.map +1 -1
  508. package/dist/index-C0rFTzxZ.cjs +2 -0
  509. package/dist/index-C0rFTzxZ.cjs.map +1 -0
  510. package/dist/{index-By0u9UFY.js → index-CCS0saZk.js} +10 -10
  511. package/dist/index-CCS0saZk.js.map +1 -0
  512. package/dist/{index-C40Dlolq.js → index-CID51vRa.js} +28 -28
  513. package/dist/index-CID51vRa.js.map +1 -0
  514. package/dist/index-CO5QP9C1.cjs +2 -0
  515. package/dist/index-CO5QP9C1.cjs.map +1 -0
  516. package/dist/{index-CI1DJrFE.js → index-CaI6ZbEo.js} +12 -12
  517. package/dist/index-CaI6ZbEo.js.map +1 -0
  518. package/dist/{index-DKRiN1hJ.cjs → index-CaLDUVLs.cjs} +2 -2
  519. package/dist/{index-DKRiN1hJ.cjs.map → index-CaLDUVLs.cjs.map} +1 -1
  520. package/dist/index-CdORB0b4.cjs.map +1 -1
  521. package/dist/{index-Dxau-XnQ.cjs → index-Cdu0fSs8.cjs} +2 -2
  522. package/dist/index-Cdu0fSs8.cjs.map +1 -0
  523. package/dist/{index-Bup-dL1l.cjs → index-CiAIT31Y.cjs} +2 -2
  524. package/dist/{index-Bup-dL1l.cjs.map → index-CiAIT31Y.cjs.map} +1 -1
  525. package/dist/{index-ClIOix1g.js → index-ClrwWu9J.js} +2 -2
  526. package/dist/{index-ClIOix1g.js.map → index-ClrwWu9J.js.map} +1 -1
  527. package/dist/{index-DdsLBKHV.cjs → index-CtcTcQqt.cjs} +2 -2
  528. package/dist/{index-DdsLBKHV.cjs.map → index-CtcTcQqt.cjs.map} +1 -1
  529. package/dist/{index-DM5ogbum.js → index-CzCt3Aan.js} +2 -2
  530. package/dist/{index-DM5ogbum.js.map → index-CzCt3Aan.js.map} +1 -1
  531. package/dist/index-D1WPBG1_.cjs +2 -0
  532. package/dist/index-D1WPBG1_.cjs.map +1 -0
  533. package/dist/{index-Dsbkiw3B.js → index-DA3kbmS5.js} +2 -2
  534. package/dist/{index-Dsbkiw3B.js.map → index-DA3kbmS5.js.map} +1 -1
  535. package/dist/{index-D6zlXbv_.js → index-DE40yc39.js} +2 -2
  536. package/dist/{index-D6zlXbv_.js.map → index-DE40yc39.js.map} +1 -1
  537. package/dist/{index-DmuVa7Ye.cjs → index-DIuoVYFu.cjs} +2 -2
  538. package/dist/index-DIuoVYFu.cjs.map +1 -0
  539. package/dist/{index-DDJTWztK.cjs → index-DLSMVKFE.cjs} +2 -2
  540. package/dist/{index-DDJTWztK.cjs.map → index-DLSMVKFE.cjs.map} +1 -1
  541. package/dist/index-DQBVnnd6.cjs +2 -0
  542. package/dist/index-DQBVnnd6.cjs.map +1 -0
  543. package/dist/{index-BYhFG50Z.cjs → index-DRT2wvEs.cjs} +2 -2
  544. package/dist/index-DRT2wvEs.cjs.map +1 -0
  545. package/dist/{index-Cv7iWoG8.js → index-DRc5qb2I.js} +15 -15
  546. package/dist/index-DRc5qb2I.js.map +1 -0
  547. package/dist/index-DTAZtzQ6.js.map +1 -1
  548. package/dist/{index-BnWMDCRU.cjs → index-DYJbiXHU.cjs} +2 -2
  549. package/dist/index-DYJbiXHU.cjs.map +1 -0
  550. package/dist/{index-D8xuGyjU.js → index-DhVauF9E.js} +16 -16
  551. package/dist/index-DhVauF9E.js.map +1 -0
  552. package/dist/index-DiQ2SDvl.js.map +1 -1
  553. package/dist/{index-BcO3pBlL.js → index-Dm5ZLB9x.js} +14 -14
  554. package/dist/index-Dm5ZLB9x.js.map +1 -0
  555. package/dist/{index-CBOLnJkG.cjs → index-HWG-CG1i.cjs} +2 -2
  556. package/dist/index-HWG-CG1i.cjs.map +1 -0
  557. package/dist/{index-0Jhdcj59.js → index-Kn_ynW2m.js} +3298 -3200
  558. package/dist/index-Kn_ynW2m.js.map +1 -0
  559. package/dist/{index-B2rKKVDN.js → index-L994YeGJ.js} +7 -7
  560. package/dist/index-L994YeGJ.js.map +1 -0
  561. package/dist/{index-1tvWzIw0.cjs → index-OhzFdH9N.cjs} +2 -2
  562. package/dist/{index-1tvWzIw0.cjs.map → index-OhzFdH9N.cjs.map} +1 -1
  563. package/dist/{index-CnmIX2MY.js → index-Z6aHkjiA.js} +23 -20
  564. package/dist/index-Z6aHkjiA.js.map +1 -0
  565. package/dist/index-p2jNjCTo.cjs +2 -0
  566. package/dist/index-p2jNjCTo.cjs.map +1 -0
  567. package/dist/{index-DwATtWun.js → index-vUb_gIjC.js} +11 -11
  568. package/dist/index-vUb_gIjC.js.map +1 -0
  569. package/dist/{index-eAHjmtzn.cjs → index-xCGnOlox.cjs} +2 -2
  570. package/dist/index-xCGnOlox.cjs.map +1 -0
  571. package/dist/layouts/AdminLayout.d.ts +2 -1
  572. package/dist/layouts/AdminLayout.d.ts.map +1 -1
  573. package/dist/layouts/AppLayout.d.ts +2 -1
  574. package/dist/layouts/AppLayout.d.ts.map +1 -1
  575. package/dist/layouts/AuthLayout.d.ts +2 -1
  576. package/dist/layouts/AuthLayout.d.ts.map +1 -1
  577. package/dist/layouts/BusinessLayout.d.ts +2 -1
  578. package/dist/layouts/BusinessLayout.d.ts.map +1 -1
  579. package/dist/layouts/DocsLayout.d.ts +2 -1
  580. package/dist/layouts/DocsLayout.d.ts.map +1 -1
  581. package/dist/layouts/PublicLayout.d.ts +2 -1
  582. package/dist/layouts/PublicLayout.d.ts.map +1 -1
  583. package/dist/layouts/UserLayout.d.ts +2 -1
  584. package/dist/layouts/UserLayout.d.ts.map +1 -1
  585. package/dist/pages/ApplicationsPage.d.ts +2 -1
  586. package/dist/pages/ApplicationsPage.d.ts.map +1 -1
  587. package/dist/pages/HomePage.d.ts +2 -1
  588. package/dist/pages/HomePage.d.ts.map +1 -1
  589. package/dist/pages/LoginPage.d.ts +2 -1
  590. package/dist/pages/LoginPage.d.ts.map +1 -1
  591. package/dist/pages/NotFoundPage.d.ts +2 -1
  592. package/dist/pages/NotFoundPage.d.ts.map +1 -1
  593. package/dist/pages/auth/AuthCallbackPage.d.ts +2 -1
  594. package/dist/pages/auth/AuthCallbackPage.d.ts.map +1 -1
  595. package/dist/pages/auth/ConfirmEmailPage.d.ts +2 -1
  596. package/dist/pages/auth/ConfirmEmailPage.d.ts.map +1 -1
  597. package/dist/pages/auth/ForceChangePasswordPage.d.ts +2 -1
  598. package/dist/pages/auth/ForceChangePasswordPage.d.ts.map +1 -1
  599. package/dist/pages/auth/ForgotPasswordPage.d.ts +2 -1
  600. package/dist/pages/auth/ForgotPasswordPage.d.ts.map +1 -1
  601. package/dist/pages/auth/OnboardingWizardPage.d.ts +2 -1
  602. package/dist/pages/auth/OnboardingWizardPage.d.ts.map +1 -1
  603. package/dist/pages/auth/RegisterPage.d.ts +2 -1
  604. package/dist/pages/auth/RegisterPage.d.ts.map +1 -1
  605. package/dist/pages/auth/ResetPasswordPage.d.ts +2 -1
  606. package/dist/pages/auth/ResetPasswordPage.d.ts.map +1 -1
  607. package/dist/pages/business/BusinessApplicationsGridPage.d.ts +2 -1
  608. package/dist/pages/business/BusinessApplicationsGridPage.d.ts.map +1 -1
  609. package/dist/pages/docs/business/platform/administration/ai/index.d.ts +2 -1
  610. package/dist/pages/docs/business/platform/administration/ai/index.d.ts.map +1 -1
  611. package/dist/pages/docs/business/platform/administration/applications/index.d.ts +2 -1
  612. package/dist/pages/docs/business/platform/administration/applications/index.d.ts.map +1 -1
  613. package/dist/pages/docs/business/platform/administration/configuration/index.d.ts +2 -1
  614. package/dist/pages/docs/business/platform/administration/configuration/index.d.ts.map +1 -1
  615. package/dist/pages/docs/business/platform/administration/configuration/license/index.d.ts +2 -1
  616. package/dist/pages/docs/business/platform/administration/configuration/license/index.d.ts.map +1 -1
  617. package/dist/pages/docs/business/platform/administration/entra/index.d.ts +2 -1
  618. package/dist/pages/docs/business/platform/administration/entra/index.d.ts.map +1 -1
  619. package/dist/pages/docs/business/platform/administration/permissions/assignments/index.d.ts +2 -1
  620. package/dist/pages/docs/business/platform/administration/permissions/assignments/index.d.ts.map +1 -1
  621. package/dist/pages/docs/business/platform/administration/permissions/index.d.ts +2 -1
  622. package/dist/pages/docs/business/platform/administration/permissions/index.d.ts.map +1 -1
  623. package/dist/pages/docs/business/platform/administration/tenants/access-requests/index.d.ts +2 -1
  624. package/dist/pages/docs/business/platform/administration/tenants/access-requests/index.d.ts.map +1 -1
  625. package/dist/pages/docs/business/platform/administration/tenants/applications/index.d.ts +2 -1
  626. package/dist/pages/docs/business/platform/administration/tenants/applications/index.d.ts.map +1 -1
  627. package/dist/pages/docs/business/platform/administration/tenants/business/index.d.ts +2 -1
  628. package/dist/pages/docs/business/platform/administration/tenants/business/index.d.ts.map +1 -1
  629. package/dist/pages/docs/business/platform/administration/tenants/index.d.ts +2 -1
  630. package/dist/pages/docs/business/platform/administration/tenants/index.d.ts.map +1 -1
  631. package/dist/pages/docs/business/platform/administration/tenants/organisations/index.d.ts +2 -1
  632. package/dist/pages/docs/business/platform/administration/tenants/organisations/index.d.ts.map +1 -1
  633. package/dist/pages/docs/business/platform/administration/tenants/other/index.d.ts +2 -1
  634. package/dist/pages/docs/business/platform/administration/tenants/other/index.d.ts.map +1 -1
  635. package/dist/pages/docs/business/platform/administration/tenants/personal/index.d.ts +2 -1
  636. package/dist/pages/docs/business/platform/administration/tenants/personal/index.d.ts.map +1 -1
  637. package/dist/pages/docs/business/platform/administration/tenants/template/index.d.ts +2 -1
  638. package/dist/pages/docs/business/platform/administration/tenants/template/index.d.ts.map +1 -1
  639. package/dist/pages/docs/business/platform/administration/users/dashboard/index.d.ts +2 -1
  640. package/dist/pages/docs/business/platform/administration/users/dashboard/index.d.ts.map +1 -1
  641. package/dist/pages/docs/business/platform/administration/users/groups/index.d.ts +2 -1
  642. package/dist/pages/docs/business/platform/administration/users/groups/index.d.ts.map +1 -1
  643. package/dist/pages/docs/business/platform/administration/users/index.d.ts +2 -1
  644. package/dist/pages/docs/business/platform/administration/users/index.d.ts.map +1 -1
  645. package/dist/pages/docs/business/platform/administration/users/references/index.d.ts +2 -1
  646. package/dist/pages/docs/business/platform/administration/users/references/index.d.ts.map +1 -1
  647. package/dist/pages/docs/business/platform/administration/workflows/index.d.ts +2 -1
  648. package/dist/pages/docs/business/platform/administration/workflows/index.d.ts.map +1 -1
  649. package/dist/pages/docs/business/platform/support/tickets/index.d.ts +2 -1
  650. package/dist/pages/docs/business/platform/support/tickets/index.d.ts.map +1 -1
  651. package/dist/pages/notifications/NotificationsPage.d.ts +2 -1
  652. package/dist/pages/notifications/NotificationsPage.d.ts.map +1 -1
  653. package/dist/pages/personal/myspace/MyAccessRequestsPage.d.ts +2 -1
  654. package/dist/pages/personal/myspace/MyAccessRequestsPage.d.ts.map +1 -1
  655. package/dist/pages/personal/myspace/MyTenantsPage.d.ts +2 -1
  656. package/dist/pages/personal/myspace/MyTenantsPage.d.ts.map +1 -1
  657. package/dist/pages/personal/myspace/PortalDashboardPage.d.ts +2 -1
  658. package/dist/pages/personal/myspace/PortalDashboardPage.d.ts.map +1 -1
  659. package/dist/pages/personal/myspace/PreferencesPage.d.ts +2 -1
  660. package/dist/pages/personal/myspace/PreferencesPage.d.ts.map +1 -1
  661. package/dist/pages/personal/myspace/ProfilePage.d.ts +2 -1
  662. package/dist/pages/personal/myspace/ProfilePage.d.ts.map +1 -1
  663. package/dist/pages/personal/myspace/UserDashboardPage.d.ts +2 -1
  664. package/dist/pages/personal/myspace/UserDashboardPage.d.ts.map +1 -1
  665. package/dist/pages/platform/administration/DashboardPage.d.ts +2 -1
  666. package/dist/pages/platform/administration/DashboardPage.d.ts.map +1 -1
  667. package/dist/pages/platform/administration/ai/AiAgentDetailPage.d.ts +2 -1
  668. package/dist/pages/platform/administration/ai/AiAgentDetailPage.d.ts.map +1 -1
  669. package/dist/pages/platform/administration/ai/AiAgentEditPage.d.ts +2 -1
  670. package/dist/pages/platform/administration/ai/AiAgentEditPage.d.ts.map +1 -1
  671. package/dist/pages/platform/administration/ai/AiAgentsPage.d.ts +2 -1
  672. package/dist/pages/platform/administration/ai/AiAgentsPage.d.ts.map +1 -1
  673. package/dist/pages/platform/administration/ai/AiBlockDefinitionDetailPage.d.ts +2 -1
  674. package/dist/pages/platform/administration/ai/AiBlockDefinitionDetailPage.d.ts.map +1 -1
  675. package/dist/pages/platform/administration/ai/AiBlockDefinitionEditPage.d.ts +2 -1
  676. package/dist/pages/platform/administration/ai/AiBlockDefinitionEditPage.d.ts.map +1 -1
  677. package/dist/pages/platform/administration/ai/AiBlockDefinitionsListPage.d.ts +2 -1
  678. package/dist/pages/platform/administration/ai/AiBlockDefinitionsListPage.d.ts.map +1 -1
  679. package/dist/pages/platform/administration/ai/AiDashboardPage.d.ts +2 -1
  680. package/dist/pages/platform/administration/ai/AiDashboardPage.d.ts.map +1 -1
  681. package/dist/pages/platform/administration/ai/AiMonitoringPage.d.ts +2 -1
  682. package/dist/pages/platform/administration/ai/AiMonitoringPage.d.ts.map +1 -1
  683. package/dist/pages/platform/administration/ai/AiPromptsListPage.d.ts +2 -1
  684. package/dist/pages/platform/administration/ai/AiPromptsListPage.d.ts.map +1 -1
  685. package/dist/pages/platform/administration/ai/AiPromptsPage.d.ts +2 -1
  686. package/dist/pages/platform/administration/ai/AiPromptsPage.d.ts.map +1 -1
  687. package/dist/pages/platform/administration/ai/AiSettingsPage.d.ts +2 -1
  688. package/dist/pages/platform/administration/ai/AiSettingsPage.d.ts.map +1 -1
  689. package/dist/pages/platform/administration/ai/AiSkillsDetailPage.d.ts +2 -1
  690. package/dist/pages/platform/administration/ai/AiSkillsDetailPage.d.ts.map +1 -1
  691. package/dist/pages/platform/administration/ai/AiSkillsEditPage.d.ts +2 -1
  692. package/dist/pages/platform/administration/ai/AiSkillsEditPage.d.ts.map +1 -1
  693. package/dist/pages/platform/administration/applications/ApplicationDetailPage.d.ts +2 -1
  694. package/dist/pages/platform/administration/applications/ApplicationDetailPage.d.ts.map +1 -1
  695. package/dist/pages/platform/administration/applications/ApplicationsGridPage.d.ts +2 -1
  696. package/dist/pages/platform/administration/applications/ApplicationsGridPage.d.ts.map +1 -1
  697. package/dist/pages/platform/administration/applications/ApplicationsListPage.d.ts.map +1 -1
  698. package/dist/pages/platform/administration/applications/NavigationAppsPage.d.ts +2 -1
  699. package/dist/pages/platform/administration/applications/NavigationAppsPage.d.ts.map +1 -1
  700. package/dist/pages/platform/administration/configuration/appsettings/AppSettingsPage.d.ts +2 -1
  701. package/dist/pages/platform/administration/configuration/appsettings/AppSettingsPage.d.ts.map +1 -1
  702. package/dist/pages/platform/administration/configuration/appsettings/AuthenticationSection.d.ts +2 -1
  703. package/dist/pages/platform/administration/configuration/appsettings/AuthenticationSection.d.ts.map +1 -1
  704. package/dist/pages/platform/administration/configuration/appsettings/EmailSection.d.ts +2 -1
  705. package/dist/pages/platform/administration/configuration/appsettings/EmailSection.d.ts.map +1 -1
  706. package/dist/pages/platform/administration/configuration/appsettings/EntraSection.d.ts +2 -1
  707. package/dist/pages/platform/administration/configuration/appsettings/EntraSection.d.ts.map +1 -1
  708. package/dist/pages/platform/administration/configuration/appsettings/InfrastructureSection.d.ts +2 -1
  709. package/dist/pages/platform/administration/configuration/appsettings/InfrastructureSection.d.ts.map +1 -1
  710. package/dist/pages/platform/administration/configuration/appsettings/LoggingSection.d.ts +2 -1
  711. package/dist/pages/platform/administration/configuration/appsettings/LoggingSection.d.ts.map +1 -1
  712. package/dist/pages/platform/administration/configuration/license/LicenseManagementPage.d.ts +2 -1
  713. package/dist/pages/platform/administration/configuration/license/LicenseManagementPage.d.ts.map +1 -1
  714. package/dist/pages/platform/administration/configuration/settings/FileUploadSettingsSection.d.ts +2 -1
  715. package/dist/pages/platform/administration/configuration/settings/FileUploadSettingsSection.d.ts.map +1 -1
  716. package/dist/pages/platform/administration/configuration/settings/GeneralSettingsSection.d.ts +2 -1
  717. package/dist/pages/platform/administration/configuration/settings/GeneralSettingsSection.d.ts.map +1 -1
  718. package/dist/pages/platform/administration/configuration/settings/LegalFileSettingsSection.d.ts +2 -1
  719. package/dist/pages/platform/administration/configuration/settings/LegalFileSettingsSection.d.ts.map +1 -1
  720. package/dist/pages/platform/administration/configuration/settings/SettingsPage.d.ts +2 -1
  721. package/dist/pages/platform/administration/configuration/settings/SettingsPage.d.ts.map +1 -1
  722. package/dist/pages/platform/administration/configuration/settings/StorageInfoSection.d.ts +2 -1
  723. package/dist/pages/platform/administration/configuration/settings/StorageInfoSection.d.ts.map +1 -1
  724. package/dist/pages/platform/administration/entra/EntraConflictsPage.d.ts +2 -1
  725. package/dist/pages/platform/administration/entra/EntraConflictsPage.d.ts.map +1 -1
  726. package/dist/pages/platform/administration/entra/EntraDashboardPage.d.ts +2 -1
  727. package/dist/pages/platform/administration/entra/EntraDashboardPage.d.ts.map +1 -1
  728. package/dist/pages/platform/administration/entra/EntraGroupsPage.d.ts +2 -1
  729. package/dist/pages/platform/administration/entra/EntraGroupsPage.d.ts.map +1 -1
  730. package/dist/pages/platform/administration/entra/EntraSettingsPage.d.ts +2 -1
  731. package/dist/pages/platform/administration/entra/EntraSettingsPage.d.ts.map +1 -1
  732. package/dist/pages/platform/administration/entra/EntraUsersPage.d.ts +2 -1
  733. package/dist/pages/platform/administration/entra/EntraUsersPage.d.ts.map +1 -1
  734. package/dist/pages/platform/administration/permissions/AssignmentsPage.d.ts +2 -1
  735. package/dist/pages/platform/administration/permissions/AssignmentsPage.d.ts.map +1 -1
  736. package/dist/pages/platform/administration/permissions/PermissionDetailPage.d.ts +2 -1
  737. package/dist/pages/platform/administration/permissions/PermissionDetailPage.d.ts.map +1 -1
  738. package/dist/pages/platform/administration/permissions/PermissionsPage.d.ts +2 -1
  739. package/dist/pages/platform/administration/permissions/PermissionsPage.d.ts.map +1 -1
  740. package/dist/pages/platform/administration/permissions/RoleDetailPage.d.ts +2 -1
  741. package/dist/pages/platform/administration/permissions/RoleDetailPage.d.ts.map +1 -1
  742. package/dist/pages/platform/administration/permissions/RolesPage.d.ts +2 -1
  743. package/dist/pages/platform/administration/permissions/RolesPage.d.ts.map +1 -1
  744. package/dist/pages/platform/administration/tenants/OrganisationCreatePage.d.ts +2 -1
  745. package/dist/pages/platform/administration/tenants/OrganisationCreatePage.d.ts.map +1 -1
  746. package/dist/pages/platform/administration/tenants/OrganisationDetailPage.d.ts +2 -1
  747. package/dist/pages/platform/administration/tenants/OrganisationDetailPage.d.ts.map +1 -1
  748. package/dist/pages/platform/administration/tenants/OrganisationsListPage.d.ts +2 -1
  749. package/dist/pages/platform/administration/tenants/OrganisationsListPage.d.ts.map +1 -1
  750. package/dist/pages/platform/administration/tenants/TenantAccessRequestsPage.d.ts +2 -1
  751. package/dist/pages/platform/administration/tenants/TenantAccessRequestsPage.d.ts.map +1 -1
  752. package/dist/pages/platform/administration/tenants/TenantCreatePage.d.ts +2 -1
  753. package/dist/pages/platform/administration/tenants/TenantCreatePage.d.ts.map +1 -1
  754. package/dist/pages/platform/administration/tenants/TenantDetailPage.d.ts +2 -1
  755. package/dist/pages/platform/administration/tenants/TenantDetailPage.d.ts.map +1 -1
  756. package/dist/pages/platform/administration/tenants/TenantSettingsPage.d.ts +2 -1
  757. package/dist/pages/platform/administration/tenants/TenantSettingsPage.d.ts.map +1 -1
  758. package/dist/pages/platform/administration/tenants/TenantTemplateCreatePage.d.ts +2 -1
  759. package/dist/pages/platform/administration/tenants/TenantTemplateCreatePage.d.ts.map +1 -1
  760. package/dist/pages/platform/administration/tenants/TenantTemplateDetailPage.d.ts +2 -1
  761. package/dist/pages/platform/administration/tenants/TenantTemplateDetailPage.d.ts.map +1 -1
  762. package/dist/pages/platform/administration/tenants/TenantsBusinessPage.d.ts +2 -1
  763. package/dist/pages/platform/administration/tenants/TenantsBusinessPage.d.ts.map +1 -1
  764. package/dist/pages/platform/administration/tenants/TenantsDashboardPage.d.ts +2 -1
  765. package/dist/pages/platform/administration/tenants/TenantsDashboardPage.d.ts.map +1 -1
  766. package/dist/pages/platform/administration/tenants/TenantsOtherPage.d.ts +2 -1
  767. package/dist/pages/platform/administration/tenants/TenantsOtherPage.d.ts.map +1 -1
  768. package/dist/pages/platform/administration/tenants/TenantsPage.d.ts +4 -3
  769. package/dist/pages/platform/administration/tenants/TenantsPage.d.ts.map +1 -1
  770. package/dist/pages/platform/administration/tenants/TenantsPersonalPage.d.ts +2 -1
  771. package/dist/pages/platform/administration/tenants/TenantsPersonalPage.d.ts.map +1 -1
  772. package/dist/pages/platform/administration/tenants/TenantsSystemPage.d.ts +2 -1
  773. package/dist/pages/platform/administration/tenants/TenantsSystemPage.d.ts.map +1 -1
  774. package/dist/pages/platform/administration/tenants/TenantsTemplatePage.d.ts +2 -1
  775. package/dist/pages/platform/administration/tenants/TenantsTemplatePage.d.ts.map +1 -1
  776. package/dist/pages/platform/administration/users/GroupDetailPage.d.ts +2 -1
  777. package/dist/pages/platform/administration/users/GroupDetailPage.d.ts.map +1 -1
  778. package/dist/pages/platform/administration/users/ReferencesManagementPage.d.ts +2 -1
  779. package/dist/pages/platform/administration/users/ReferencesManagementPage.d.ts.map +1 -1
  780. package/dist/pages/platform/administration/users/ReferencesPage.d.ts +2 -1
  781. package/dist/pages/platform/administration/users/ReferencesPage.d.ts.map +1 -1
  782. package/dist/pages/platform/administration/users/UserDetailPage.d.ts +2 -1
  783. package/dist/pages/platform/administration/users/UserDetailPage.d.ts.map +1 -1
  784. package/dist/pages/platform/administration/users/UsersGroupsPage.d.ts +2 -1
  785. package/dist/pages/platform/administration/users/UsersGroupsPage.d.ts.map +1 -1
  786. package/dist/pages/platform/administration/users/UsersPage.d.ts +2 -1
  787. package/dist/pages/platform/administration/users/UsersPage.d.ts.map +1 -1
  788. package/dist/pages/platform/administration/workflows/EmailTemplateCreatePage.d.ts +2 -1
  789. package/dist/pages/platform/administration/workflows/EmailTemplateCreatePage.d.ts.map +1 -1
  790. package/dist/pages/platform/administration/workflows/EmailTemplateDetailPage.d.ts +2 -1
  791. package/dist/pages/platform/administration/workflows/EmailTemplateDetailPage.d.ts.map +1 -1
  792. package/dist/pages/platform/administration/workflows/EmailTemplateEditPage.d.ts +2 -1
  793. package/dist/pages/platform/administration/workflows/EmailTemplateEditPage.d.ts.map +1 -1
  794. package/dist/pages/platform/administration/workflows/EmailTemplatesListPage.d.ts +2 -1
  795. package/dist/pages/platform/administration/workflows/EmailTemplatesListPage.d.ts.map +1 -1
  796. package/dist/pages/platform/administration/workflows/SmsTemplatesListPage.d.ts +2 -1
  797. package/dist/pages/platform/administration/workflows/SmsTemplatesListPage.d.ts.map +1 -1
  798. package/dist/pages/platform/administration/workflows/WorkflowCreatePage.d.ts +2 -1
  799. package/dist/pages/platform/administration/workflows/WorkflowCreatePage.d.ts.map +1 -1
  800. package/dist/pages/platform/administration/workflows/WorkflowDetailPage.d.ts +2 -1
  801. package/dist/pages/platform/administration/workflows/WorkflowDetailPage.d.ts.map +1 -1
  802. package/dist/pages/platform/administration/workflows/WorkflowEditPage.d.ts +2 -1
  803. package/dist/pages/platform/administration/workflows/WorkflowEditPage.d.ts.map +1 -1
  804. package/dist/pages/platform/administration/workflows/WorkflowHistoryPage.d.ts +2 -1
  805. package/dist/pages/platform/administration/workflows/WorkflowHistoryPage.d.ts.map +1 -1
  806. package/dist/pages/platform/administration/workflows/WorkflowsListPage.d.ts +2 -1
  807. package/dist/pages/platform/administration/workflows/WorkflowsListPage.d.ts.map +1 -1
  808. package/dist/pages/platform/administration/workflows/WorkflowsTriggersPage.d.ts +2 -1
  809. package/dist/pages/platform/administration/workflows/WorkflowsTriggersPage.d.ts.map +1 -1
  810. package/dist/pages/platform/api/apis/ApiCatalogDetailPage.d.ts +2 -1
  811. package/dist/pages/platform/api/apis/ApiCatalogDetailPage.d.ts.map +1 -1
  812. package/dist/pages/platform/api/apis/ApiCatalogPage.d.ts +2 -1
  813. package/dist/pages/platform/api/apis/ApiCatalogPage.d.ts.map +1 -1
  814. package/dist/pages/platform/api/external-apps/ExternalAppDetailPage.d.ts +2 -1
  815. package/dist/pages/platform/api/external-apps/ExternalAppDetailPage.d.ts.map +1 -1
  816. package/dist/pages/platform/api/external-apps/ExternalAppsListPage.d.ts.map +1 -1
  817. package/dist/pages/platform/support/AgentSkillsPage.d.ts +2 -1
  818. package/dist/pages/platform/support/AgentSkillsPage.d.ts.map +1 -1
  819. package/dist/pages/platform/support/AgentWorkloadPage.d.ts +2 -1
  820. package/dist/pages/platform/support/AgentWorkloadPage.d.ts.map +1 -1
  821. package/dist/pages/platform/support/AssignmentRulesPage.d.ts +2 -1
  822. package/dist/pages/platform/support/AssignmentRulesPage.d.ts.map +1 -1
  823. package/dist/pages/platform/support/CreateSupportTicketPage.d.ts +2 -1
  824. package/dist/pages/platform/support/CreateSupportTicketPage.d.ts.map +1 -1
  825. package/dist/pages/platform/support/DashboardPage.d.ts +2 -1
  826. package/dist/pages/platform/support/DashboardPage.d.ts.map +1 -1
  827. package/dist/pages/platform/support/EscalationConfigPage.d.ts +2 -1
  828. package/dist/pages/platform/support/EscalationConfigPage.d.ts.map +1 -1
  829. package/dist/pages/platform/support/MyAgentTicketsPage.d.ts +2 -1
  830. package/dist/pages/platform/support/MyAgentTicketsPage.d.ts.map +1 -1
  831. package/dist/pages/platform/support/MyTicketsPage.d.ts +2 -1
  832. package/dist/pages/platform/support/MyTicketsPage.d.ts.map +1 -1
  833. package/dist/pages/platform/support/SlaConfigPage.d.ts +2 -1
  834. package/dist/pages/platform/support/SlaConfigPage.d.ts.map +1 -1
  835. package/dist/pages/platform/support/SupportPermissionsPage.d.ts +2 -1
  836. package/dist/pages/platform/support/SupportPermissionsPage.d.ts.map +1 -1
  837. package/dist/pages/platform/support/TemplatesPage.d.ts +2 -1
  838. package/dist/pages/platform/support/TemplatesPage.d.ts.map +1 -1
  839. package/dist/pages/platform/support/TestBugPage.d.ts +2 -1
  840. package/dist/pages/platform/support/TestBugPage.d.ts.map +1 -1
  841. package/dist/pages/platform/support/TicketDetailPage.d.ts +2 -1
  842. package/dist/pages/platform/support/TicketDetailPage.d.ts.map +1 -1
  843. package/dist/pages/platform/support/TicketsPage.d.ts +2 -1
  844. package/dist/pages/platform/support/TicketsPage.d.ts.map +1 -1
  845. package/dist/pages/platform/support/UserCreateTicketPage.d.ts +2 -1
  846. package/dist/pages/platform/support/UserCreateTicketPage.d.ts.map +1 -1
  847. package/dist/pages/platform/support/UserTicketDetailPage.d.ts +2 -1
  848. package/dist/pages/platform/support/UserTicketDetailPage.d.ts.map +1 -1
  849. package/dist/pages/system/docs/DocsIndexPage.d.ts +2 -1
  850. package/dist/pages/system/docs/DocsIndexPage.d.ts.map +1 -1
  851. package/dist/pages/system/docs/SmartStackPresentationPage.d.ts +2 -1
  852. package/dist/pages/system/docs/SmartStackPresentationPage.d.ts.map +1 -1
  853. package/dist/pages/system/docs/ba/BaIndexPage.d.ts +2 -1
  854. package/dist/pages/system/docs/ba/BaIndexPage.d.ts.map +1 -1
  855. package/dist/pages/system/docs/ba/BaViewerPage.d.ts +2 -1
  856. package/dist/pages/system/docs/ba/BaViewerPage.d.ts.map +1 -1
  857. package/dist/pages/system/docs/ba/components/CadrageTab.d.ts +3 -2
  858. package/dist/pages/system/docs/ba/components/CadrageTab.d.ts.map +1 -1
  859. package/dist/pages/system/docs/ba/components/SpecificationTab.d.ts +4 -3
  860. package/dist/pages/system/docs/ba/components/SpecificationTab.d.ts.map +1 -1
  861. package/dist/pages/system/docs/ba/components/SyntheseTab.d.ts +3 -2
  862. package/dist/pages/system/docs/ba/components/SyntheseTab.d.ts.map +1 -1
  863. package/dist/pages/system/docs/developer/CrossSchemaFkPage.d.ts +2 -1
  864. package/dist/pages/system/docs/developer/CrossSchemaFkPage.d.ts.map +1 -1
  865. package/dist/pages/system/docs/developer/DatabasePage.d.ts +2 -1
  866. package/dist/pages/system/docs/developer/DatabasePage.d.ts.map +1 -1
  867. package/dist/pages/system/docs/developer/DeveloperIndexPage.d.ts +2 -1
  868. package/dist/pages/system/docs/developer/DeveloperIndexPage.d.ts.map +1 -1
  869. package/dist/pages/system/docs/developer/DualDbContextPage.d.ts +2 -1
  870. package/dist/pages/system/docs/developer/DualDbContextPage.d.ts.map +1 -1
  871. package/dist/pages/system/docs/developer/InfrastructurePage.d.ts +2 -1
  872. package/dist/pages/system/docs/developer/InfrastructurePage.d.ts.map +1 -1
  873. package/dist/pages/system/docs/developer/InstallationPage.d.ts +2 -1
  874. package/dist/pages/system/docs/developer/InstallationPage.d.ts.map +1 -1
  875. package/dist/pages/system/docs/developer/TeamsIntegrationPage.d.ts +2 -1
  876. package/dist/pages/system/docs/developer/TeamsIntegrationPage.d.ts.map +1 -1
  877. package/dist/pages/system/docs/developer/tenants/MultiTenantModePage.d.ts +2 -1
  878. package/dist/pages/system/docs/developer/tenants/MultiTenantModePage.d.ts.map +1 -1
  879. package/dist/pages/system/docs/developer/tenants/TenantB2CPage.d.ts +2 -1
  880. package/dist/pages/system/docs/developer/tenants/TenantB2CPage.d.ts.map +1 -1
  881. package/dist/pages/system/docs/developer/tenants/TenantIndexPage.d.ts +2 -1
  882. package/dist/pages/system/docs/developer/tenants/TenantIndexPage.d.ts.map +1 -1
  883. package/dist/pages/system/docs/developer/testing/SecurityTestingPage.d.ts +2 -1
  884. package/dist/pages/system/docs/developer/testing/SecurityTestingPage.d.ts.map +1 -1
  885. package/dist/pages/system/docs/user/AiDocPage.d.ts +2 -1
  886. package/dist/pages/system/docs/user/AiDocPage.d.ts.map +1 -1
  887. package/dist/pages/system/docs/user/ArchitecturePage.d.ts +2 -1
  888. package/dist/pages/system/docs/user/ArchitecturePage.d.ts.map +1 -1
  889. package/dist/pages/system/docs/user/ModulesPage.d.ts +2 -1
  890. package/dist/pages/system/docs/user/ModulesPage.d.ts.map +1 -1
  891. package/dist/pages/system/docs/user/SettingsDocPage.d.ts +2 -1
  892. package/dist/pages/system/docs/user/SettingsDocPage.d.ts.map +1 -1
  893. package/dist/pages/system/docs/user/SlaDocPage.d.ts +2 -1
  894. package/dist/pages/system/docs/user/SlaDocPage.d.ts.map +1 -1
  895. package/dist/pages/system/docs/user/SupportDashboardDocPage.d.ts +2 -1
  896. package/dist/pages/system/docs/user/SupportDashboardDocPage.d.ts.map +1 -1
  897. package/dist/pages/system/docs/user/SupportEscalationDocPage.d.ts +2 -1
  898. package/dist/pages/system/docs/user/SupportEscalationDocPage.d.ts.map +1 -1
  899. package/dist/pages/system/docs/user/SupportIndexPage.d.ts +2 -1
  900. package/dist/pages/system/docs/user/SupportIndexPage.d.ts.map +1 -1
  901. package/dist/pages/system/docs/user/SupportMyTicketsDocPage.d.ts +2 -1
  902. package/dist/pages/system/docs/user/SupportMyTicketsDocPage.d.ts.map +1 -1
  903. package/dist/pages/system/docs/user/SupportTemplatesDocPage.d.ts +2 -1
  904. package/dist/pages/system/docs/user/SupportTemplatesDocPage.d.ts.map +1 -1
  905. package/dist/pages/system/docs/user/SupportTicketsDocPage.d.ts +2 -1
  906. package/dist/pages/system/docs/user/SupportTicketsDocPage.d.ts.map +1 -1
  907. package/dist/pages/system/docs/user/ThemeDocPage.d.ts +2 -1
  908. package/dist/pages/system/docs/user/ThemeDocPage.d.ts.map +1 -1
  909. package/dist/pages/system/docs/user/UserIndexPage.d.ts +2 -1
  910. package/dist/pages/system/docs/user/UserIndexPage.d.ts.map +1 -1
  911. package/dist/provider/SmartStackProvider.d.ts +4 -3
  912. package/dist/provider/SmartStackProvider.d.ts.map +1 -1
  913. package/dist/services/api/adminApi/applications.d.ts +4 -1
  914. package/dist/services/api/adminApi/applications.d.ts.map +1 -1
  915. package/dist/services/api/adminApi/dashboard.d.ts +4 -1
  916. package/dist/services/api/adminApi/dashboard.d.ts.map +1 -1
  917. package/dist/services/api/adminApi/externalApps.d.ts +7 -2
  918. package/dist/services/api/adminApi/externalApps.d.ts.map +1 -1
  919. package/dist/services/api/adminApi/index.d.ts.map +1 -1
  920. package/dist/services/api/adminApi/roles.d.ts +7 -2
  921. package/dist/services/api/adminApi/roles.d.ts.map +1 -1
  922. package/dist/services/api/adminApi/settings.d.ts +7 -2
  923. package/dist/services/api/adminApi/settings.d.ts.map +1 -1
  924. package/dist/services/api/adminApi/tenants.d.ts +13 -4
  925. package/dist/services/api/adminApi/tenants.d.ts.map +1 -1
  926. package/dist/services/api/adminApi/users.d.ts +3 -1
  927. package/dist/services/api/adminApi/users.d.ts.map +1 -1
  928. package/dist/services/api/groupsApi.d.ts +4 -1
  929. package/dist/services/api/groupsApi.d.ts.map +1 -1
  930. package/dist/services/api/referencesApi.d.ts +4 -1
  931. package/dist/services/api/referencesApi.d.ts.map +1 -1
  932. package/dist/services/logging/logService.d.ts.map +1 -1
  933. package/dist/smartstack.cjs +1 -1
  934. package/dist/smartstack.js +1 -1
  935. package/dist/styles.css +1 -1
  936. package/dist/utils/deviceDetection.d.ts.map +1 -1
  937. package/dist/utils/renderLucideIcon.d.ts +2 -1
  938. package/dist/utils/renderLucideIcon.d.ts.map +1 -1
  939. package/dist/utils/tenantUrl.d.ts.map +1 -1
  940. package/package.json +1 -1
  941. package/dist/AuthCallbackPage-Bv2Cyn80.cjs.map +0 -1
  942. package/dist/AuthCallbackPage-Cu74zAX1.js.map +0 -1
  943. package/dist/BaIndexPage-BhdOX87v.cjs +0 -2
  944. package/dist/BaIndexPage-BhdOX87v.cjs.map +0 -1
  945. package/dist/BaIndexPage-Dkp_Eixx.js.map +0 -1
  946. package/dist/BaViewerPage-DxD0eZm-.js.map +0 -1
  947. package/dist/BaViewerPage-SYgjCF7x.cjs +0 -2
  948. package/dist/BaViewerPage-SYgjCF7x.cjs.map +0 -1
  949. package/dist/ConfirmEmailPage-BTp8J0pw.js.map +0 -1
  950. package/dist/ConfirmEmailPage-su3Fvl0e.cjs.map +0 -1
  951. package/dist/DatabasePage-CRq_-Yo2.cjs +0 -2
  952. package/dist/DatabasePage-CRq_-Yo2.cjs.map +0 -1
  953. package/dist/DatabasePage-DFIK8cSM.js.map +0 -1
  954. package/dist/DocRenderer-B-1NdDfC.cjs +0 -2
  955. package/dist/DocRenderer-B-1NdDfC.cjs.map +0 -1
  956. package/dist/DocRenderer-CcEn1iaa.js.map +0 -1
  957. package/dist/DualDbContextPage--Qk-qEgD.cjs.map +0 -1
  958. package/dist/DualDbContextPage-BujD_coN.js.map +0 -1
  959. package/dist/ForceChangePasswordPage-ClENqzCH.js.map +0 -1
  960. package/dist/ForceChangePasswordPage-kEFsb5Aq.cjs.map +0 -1
  961. package/dist/ForgotPasswordPage--Wl0Vxbv.cjs.map +0 -1
  962. package/dist/ForgotPasswordPage-BEgvV5f-.js.map +0 -1
  963. package/dist/OnboardingWizardPage-Bx1UlTbr.js.map +0 -1
  964. package/dist/OnboardingWizardPage-C7vendrq.cjs.map +0 -1
  965. package/dist/RegisterPage-BzV0sCTe.js.map +0 -1
  966. package/dist/RegisterPage-DKr8quRk.cjs.map +0 -1
  967. package/dist/ResetPasswordPage-DphmJrcJ.js.map +0 -1
  968. package/dist/ResetPasswordPage-x4do1o-j.cjs.map +0 -1
  969. package/dist/SupportDashboardDocPage-CLotzEwA.js.map +0 -1
  970. package/dist/SupportDashboardDocPage-DpgGq5Mm.cjs.map +0 -1
  971. package/dist/SupportEscalationDocPage-B-_ChfdN.js.map +0 -1
  972. package/dist/SupportEscalationDocPage-WXkAQr8k.cjs.map +0 -1
  973. package/dist/SupportMyTicketsDocPage-DeRUdAIi.js.map +0 -1
  974. package/dist/SupportMyTicketsDocPage-jE1UMaIY.cjs.map +0 -1
  975. package/dist/SupportTemplatesDocPage-C8ZLzFJc.js.map +0 -1
  976. package/dist/SupportTemplatesDocPage-ajO-cHmK.cjs.map +0 -1
  977. package/dist/SupportTicketsDocPage-C_ybDTjC.cjs.map +0 -1
  978. package/dist/SupportTicketsDocPage-DQhHfa6J.js.map +0 -1
  979. package/dist/index-0Jhdcj59.js.map +0 -1
  980. package/dist/index-ASxPhrgZ.cjs.map +0 -1
  981. package/dist/index-B2rKKVDN.js.map +0 -1
  982. package/dist/index-BP5i2CQo.cjs +0 -2
  983. package/dist/index-BP5i2CQo.cjs.map +0 -1
  984. package/dist/index-BYhFG50Z.cjs.map +0 -1
  985. package/dist/index-BcO3pBlL.js.map +0 -1
  986. package/dist/index-BlHDI4zj.js.map +0 -1
  987. package/dist/index-Blfc9wKG.js.map +0 -1
  988. package/dist/index-BnWMDCRU.cjs.map +0 -1
  989. package/dist/index-By0u9UFY.js.map +0 -1
  990. package/dist/index-C40Dlolq.js.map +0 -1
  991. package/dist/index-C54HbULX.cjs.map +0 -1
  992. package/dist/index-C6C5XmVj.cjs +0 -48
  993. package/dist/index-C6C5XmVj.cjs.map +0 -1
  994. package/dist/index-C9BaizLE.cjs +0 -2
  995. package/dist/index-C9BaizLE.cjs.map +0 -1
  996. package/dist/index-CBOLnJkG.cjs.map +0 -1
  997. package/dist/index-CI1DJrFE.js.map +0 -1
  998. package/dist/index-CU66n-zU.js.map +0 -1
  999. package/dist/index-CUISVUMx.js.map +0 -1
  1000. package/dist/index-CnmIX2MY.js.map +0 -1
  1001. package/dist/index-CtcdHE_9.cjs +0 -2
  1002. package/dist/index-CtcdHE_9.cjs.map +0 -1
  1003. package/dist/index-Cv7iWoG8.js.map +0 -1
  1004. package/dist/index-D4u23zHI.js.map +0 -1
  1005. package/dist/index-D8xuGyjU.js.map +0 -1
  1006. package/dist/index-DKK07NF1.cjs +0 -2
  1007. package/dist/index-DKK07NF1.cjs.map +0 -1
  1008. package/dist/index-DmuVa7Ye.cjs.map +0 -1
  1009. package/dist/index-Du4fQfix.cjs.map +0 -1
  1010. package/dist/index-DwATtWun.js.map +0 -1
  1011. package/dist/index-Dxau-XnQ.cjs.map +0 -1
  1012. package/dist/index-Txfokhn3.cjs.map +0 -1
  1013. package/dist/index-ZVUUUZmv.cjs +0 -2
  1014. package/dist/index-ZVUUUZmv.cjs.map +0 -1
  1015. package/dist/index-eAHjmtzn.cjs.map +0 -1
  1016. package/dist/index-jpSTOjXU.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"deviceDetection.d.ts","sourceRoot":"","sources":["../../src/utils/deviceDetection.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAmHD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CA6BpF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAM/E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA0BzC"}
1
+ {"version":3,"file":"deviceDetection.d.ts","sourceRoot":"","sources":["../../src/utils/deviceDetection.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAmHD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAgCpF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAM/E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA0BzC"}
@@ -1,7 +1,8 @@
1
+ import type { ReactElement } from 'react';
1
2
  import type { LucideIcon } from 'lucide-react';
2
3
  /**
3
4
  * Renders a Lucide icon by name string or LucideIcon component.
4
5
  * Returns null if the icon name is invalid or null.
5
6
  */
6
- export declare function renderLucideIcon(icon: LucideIcon | string | null | undefined, className?: string): React.ReactElement | null;
7
+ export declare function renderLucideIcon(icon: LucideIcon | string | null | undefined, className?: string): ReactElement | null;
7
8
  //# sourceMappingURL=renderLucideIcon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderLucideIcon.d.ts","sourceRoot":"","sources":["../../src/utils/renderLucideIcon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,SAAS,SAAY,GACpB,KAAK,CAAC,YAAY,GAAG,IAAI,CAY3B"}
1
+ {"version":3,"file":"renderLucideIcon.d.ts","sourceRoot":"","sources":["../../src/utils/renderLucideIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,SAAS,SAAY,GACpB,YAAY,GAAG,IAAI,CAYrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"tenantUrl.d.ts","sourceRoot":"","sources":["../../src/utils/tenantUrl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB,GACA,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,WAKjB,MAAM,YAQhB;AAED;;GAEG;AACH,wBAAgB,mBAAmB;qBAbxB,MAAM;;;;EAwBhB"}
1
+ {"version":3,"file":"tenantUrl.d.ts","sourceRoot":"","sources":["../../src/utils/tenantUrl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB,GACA,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAavD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAWA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlashub/smartstack",
3
- "version": "3.11.0",
3
+ "version": "3.14.0",
4
4
  "description": "SmartStack React components, navigation system and admin UI",
5
5
  "type": "module",
6
6
  "main": "./dist/smartstack.cjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthCallbackPage-Bv2Cyn80.cjs","sources":["../src/pages/auth/AuthCallbackPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport { useSearchParams, useNavigate } from 'react-router-dom';\r\nimport { Loader2, CheckCircle, XCircle, AlertCircle } from 'lucide-react';\r\nimport { userApi } from '@/services/api/userApi';\r\nimport { getClientIpAddress } from '@/utils/ipDetection';\r\nimport { detectDeviceType } from '@/utils/deviceDetection';\r\n\r\ntype CallbackStatus = 'processing' | 'success' | 'error';\r\n\r\nconst errorMessages: Record<string, string> = {\r\n auth_failed: 'L\\'authentification a échoué. Veuillez réessayer.',\r\n no_email: 'Impossible de récupérer votre adresse email depuis le fournisseur.',\r\n account_disabled: 'Votre compte est désactivé. Contactez l\\'administrateur.',\r\n account_locked: 'Votre compte est verrouillé. Contactez l\\'administrateur.',\r\n internal_error: 'Une erreur interne est survenue. Veuillez réessayer.',\r\n};\r\n\r\nexport function AuthCallbackPage() {\r\n const [searchParams] = useSearchParams();\r\n const navigate = useNavigate();\r\n const [status, setStatus] = useState<CallbackStatus>('processing');\r\n const [errorMessage, setErrorMessage] = useState<string>('');\r\n\r\n useEffect(() => {\r\n const token = searchParams.get('token');\r\n const refreshToken = searchParams.get('refreshToken');\r\n const error = searchParams.get('error');\r\n\r\n if (error) {\r\n setStatus('error');\r\n setErrorMessage(errorMessages[error] || 'Une erreur est survenue lors de l\\'authentification.');\r\n return;\r\n }\r\n\r\n if (token && refreshToken) {\r\n handleSuccessfulAuth(token, refreshToken);\r\n } else {\r\n setStatus('error');\r\n setErrorMessage('Paramètres d\\'authentification manquants.');\r\n }\r\n }, [searchParams]);\r\n\r\n const handleSuccessfulAuth = async (token: string, refreshToken: string) => {\r\n try {\r\n localStorage.setItem('token', token);\r\n localStorage.setItem('refreshToken', refreshToken);\r\n\r\n // Update session with client-side IP address (retrieved via external service like ipify.org)\r\n // This is important for OAuth flows where the server can't reliably get the client IP\r\n try {\r\n const clientIp = await getClientIpAddress();\r\n const deviceType = detectDeviceType();\r\n\r\n if (clientIp || deviceType) {\r\n await fetch(`/api/auth/update-session-client-info`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify({ clientIp, deviceType }),\r\n });\r\n }\r\n } catch (ipError) {\r\n // Non-critical - continue with the flow even if IP update fails\r\n }\r\n\r\n // Fetch user info\r\n const userResponse = await fetch(`/api/auth/me`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (!userResponse.ok) {\r\n throw new Error('Failed to fetch user info');\r\n }\r\n\r\n const user = await userResponse.json();\r\n localStorage.setItem('user', JSON.stringify(user));\r\n\r\n // Check if user needs onboarding\r\n try {\r\n const onboardingResponse = await fetch(`/api/onboarding/status`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (onboardingResponse.ok) {\r\n const onboardingData = await onboardingResponse.json();\r\n if (!onboardingData.hasCompletedOnboarding) {\r\n // Redirect to onboarding wizard\r\n setStatus('success');\r\n setTimeout(() => {\r\n window.location.href = '/auth/onboarding';\r\n }, 1500);\r\n return;\r\n }\r\n }\r\n } catch {\r\n // Non-critical - continue with normal flow\r\n }\r\n\r\n // Fetch user preferences\r\n try {\r\n const prefs = await userApi.preferences.get();\r\n const themeConfig = {\r\n mode: prefs.theme || 'dark',\r\n accentColorKey: prefs.accentColorKey || 'indigo',\r\n borderRadius: prefs.borderRadius || {},\r\n itemPaletteKey: prefs.itemPaletteKey || 'neutral',\r\n };\r\n localStorage.setItem('smartstack-theme-config', JSON.stringify(themeConfig));\r\n if (prefs.language) {\r\n localStorage.setItem('i18nextLng', prefs.language);\r\n }\r\n } catch {\r\n // Non-critical - continue with defaults\r\n }\r\n\r\n setStatus('success');\r\n\r\n // Clear stale tenant state so TenantContext uses the user's configured default tenant (Priority 3: isDefault)\r\n localStorage.removeItem('currentTenantId');\r\n localStorage.removeItem('currentTenantSlug');\r\n localStorage.removeItem('isGlobalView');\r\n\r\n // Redirect after showing success\r\n setTimeout(() => {\r\n window.location.href = '/myspace';\r\n }, 1500);\r\n } catch (err) {\r\n console.error('Auth callback error:', err);\r\n setStatus('error');\r\n setErrorMessage('Erreur lors de la finalisation de l\\'authentification.');\r\n }\r\n };\r\n\r\n const handleRetry = () => {\r\n navigate('/login');\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-[var(--bg-primary)]\">\r\n <div className=\"max-w-md w-full mx-4\">\r\n <div className=\"bg-[var(--bg-secondary)] rounded-2xl p-8 shadow-lg border border-[var(--border-color)]\">\r\n {status === 'processing' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 mx-auto text-[var(--color-accent-500)] animate-spin mb-4\" />\r\n <h2 className=\"text-xl font-semibold mb-2\">Authentification en cours...</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Veuillez patienter pendant que nous finalisons votre connexion.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <CheckCircle className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Connexion réussie !</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Vous allez être redirigé vers votre espace personnel...\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'error' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-red-100 dark:bg-red-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Échec de l'authentification</h2>\r\n <div className=\"bg-red-50 dark:bg-red-900/20 rounded-lg p-4 mb-6\">\r\n <div className=\"flex items-start gap-3\">\r\n <AlertCircle className=\"w-5 h-5 text-red-600 dark:text-red-400 flex-shrink-0 mt-0.5\" />\r\n <p className=\"text-sm text-red-700 dark:text-red-300\">{errorMessage}</p>\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleRetry}\r\n className=\"btn btn-primary w-full\"\r\n >\r\n Retourner à la connexion\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["errorMessages","AuthCallbackPage","searchParams","useSearchParams","navigate","useNavigate","status","setStatus","useState","errorMessage","setErrorMessage","useEffect","token","refreshToken","error","handleSuccessfulAuth","clientIp","getClientIpAddress","deviceType","detectDeviceType","userResponse","user","onboardingResponse","prefs","userApi","themeConfig","err","handleRetry","jsx","jsxs","Loader2","CheckCircle","XCircle","AlertCircle"],"mappings":"kOASMA,EAAwC,CAC5C,YAAa,mDACb,SAAU,qEACV,iBAAkB,0DAClB,eAAgB,2DAChB,eAAgB,sDAClB,EAEO,SAASC,GAAmB,CACjC,KAAM,CAACC,CAAY,EAAIC,kBAAA,EACjBC,EAAWC,EAAAA,YAAA,EACX,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAyB,YAAY,EAC3D,CAACC,EAAcC,CAAe,EAAIF,EAAAA,SAAiB,EAAE,EAE3DG,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAQV,EAAa,IAAI,OAAO,EAChCW,EAAeX,EAAa,IAAI,cAAc,EAC9CY,EAAQZ,EAAa,IAAI,OAAO,EAEtC,GAAIY,EAAO,CACTP,EAAU,OAAO,EACjBG,EAAgBV,EAAcc,CAAK,GAAK,qDAAsD,EAC9F,MACF,CAEIF,GAASC,EACXE,EAAqBH,EAAOC,CAAY,GAExCN,EAAU,OAAO,EACjBG,EAAgB,0CAA2C,EAE/D,EAAG,CAACR,CAAY,CAAC,EAEjB,MAAMa,EAAuB,MAAOH,EAAeC,IAAyB,CAC1E,GAAI,CACF,aAAa,QAAQ,QAASD,CAAK,EACnC,aAAa,QAAQ,eAAgBC,CAAY,EAIjD,GAAI,CACF,MAAMG,EAAW,MAAMC,qBAAA,EACjBC,EAAaC,EAAAA,iBAAA,GAEfH,GAAYE,IACd,MAAM,MAAM,uCAAwC,CAClD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAUN,CAAK,EAAA,EAEhC,KAAM,KAAK,UAAU,CAAE,SAAAI,EAAU,WAAAE,EAAY,CAAA,CAC9C,CAEL,MAAkB,CAElB,CAGA,MAAME,EAAe,MAAM,MAAM,eAAgB,CAC/C,QAAS,CACP,cAAe,UAAUR,CAAK,EAAA,CAChC,CACD,EAED,GAAI,CAACQ,EAAa,GAChB,MAAM,IAAI,MAAM,2BAA2B,EAG7C,MAAMC,EAAO,MAAMD,EAAa,KAAA,EAChC,aAAa,QAAQ,OAAQ,KAAK,UAAUC,CAAI,CAAC,EAGjD,GAAI,CACF,MAAMC,EAAqB,MAAM,MAAM,yBAA0B,CAC/D,QAAS,CACP,cAAe,UAAUV,CAAK,EAAA,CAChC,CACD,EAED,GAAIU,EAAmB,IAEjB,EADmB,MAAMA,EAAmB,KAAA,GAC5B,uBAAwB,CAE1Cf,EAAU,SAAS,EACnB,WAAW,IAAM,CACf,OAAO,SAAS,KAAO,kBACzB,EAAG,IAAI,EACP,MACF,CAEJ,MAAQ,CAER,CAGA,GAAI,CACF,MAAMgB,EAAQ,MAAMC,UAAQ,YAAY,IAAA,EAClCC,EAAc,CAClB,KAAMF,EAAM,OAAS,OACrB,eAAgBA,EAAM,gBAAkB,SACxC,aAAcA,EAAM,cAAgB,CAAA,EACpC,eAAgBA,EAAM,gBAAkB,SAAA,EAE1C,aAAa,QAAQ,0BAA2B,KAAK,UAAUE,CAAW,CAAC,EACvEF,EAAM,UACR,aAAa,QAAQ,aAAcA,EAAM,QAAQ,CAErD,MAAQ,CAER,CAEAhB,EAAU,SAAS,EAGnB,aAAa,WAAW,iBAAiB,EACzC,aAAa,WAAW,mBAAmB,EAC3C,aAAa,WAAW,cAAc,EAGtC,WAAW,IAAM,CACf,OAAO,SAAS,KAAO,UACzB,EAAG,IAAI,CACT,OAASmB,EAAK,CACZ,QAAQ,MAAM,uBAAwBA,CAAG,EACzCnB,EAAU,OAAO,EACjBG,EAAgB,uDAAwD,CAC1E,CACF,EAEMiB,EAAc,IAAM,CACxBvB,EAAS,QAAQ,CACnB,EAEA,OACEwB,EAAAA,IAAC,MAAA,CAAI,UAAU,uEACb,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACb,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,yFACZ,SAAA,CAAAvB,IAAW,cACVuB,OAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAD,EAAAA,IAACE,EAAAA,QAAA,CAAQ,UAAU,oEAAA,CAAqE,EACxFF,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,+BAA4B,EACvEA,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,SAAA,iEAAA,CAE5C,CAAA,EACF,EAGDtB,IAAW,WACVuB,OAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAD,EAAAA,IAAC,OAAI,UAAU,yGACb,eAACG,EAAAA,YAAA,CAAY,UAAU,+CAA+C,CAAA,CACxE,EACAH,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,sBAAmB,EAC9DA,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,SAAA,yDAAA,CAE5C,CAAA,EACF,EAGDtB,IAAW,SACVuB,OAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAD,EAAAA,IAAC,OAAI,UAAU,qGACb,eAACI,EAAAA,QAAA,CAAQ,UAAU,2CAA2C,CAAA,CAChE,EACAJ,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,8BAA2B,QACrE,MAAA,CAAI,UAAU,mDACb,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAD,EAAAA,IAACK,EAAAA,YAAA,CAAY,UAAU,6DAAA,CAA8D,EACrFL,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,SAAAnB,CAAA,CAAa,CAAA,CAAA,CACtE,CAAA,CACF,EACAmB,EAAAA,IAAC,SAAA,CACC,QAASD,EACT,UAAU,yBACX,SAAA,0BAAA,CAAA,CAED,CAAA,CACF,CAAA,CAAA,CAEJ,EACF,EACF,CAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthCallbackPage-Cu74zAX1.js","sources":["../src/pages/auth/AuthCallbackPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport { useSearchParams, useNavigate } from 'react-router-dom';\r\nimport { Loader2, CheckCircle, XCircle, AlertCircle } from 'lucide-react';\r\nimport { userApi } from '@/services/api/userApi';\r\nimport { getClientIpAddress } from '@/utils/ipDetection';\r\nimport { detectDeviceType } from '@/utils/deviceDetection';\r\n\r\ntype CallbackStatus = 'processing' | 'success' | 'error';\r\n\r\nconst errorMessages: Record<string, string> = {\r\n auth_failed: 'L\\'authentification a échoué. Veuillez réessayer.',\r\n no_email: 'Impossible de récupérer votre adresse email depuis le fournisseur.',\r\n account_disabled: 'Votre compte est désactivé. Contactez l\\'administrateur.',\r\n account_locked: 'Votre compte est verrouillé. Contactez l\\'administrateur.',\r\n internal_error: 'Une erreur interne est survenue. Veuillez réessayer.',\r\n};\r\n\r\nexport function AuthCallbackPage() {\r\n const [searchParams] = useSearchParams();\r\n const navigate = useNavigate();\r\n const [status, setStatus] = useState<CallbackStatus>('processing');\r\n const [errorMessage, setErrorMessage] = useState<string>('');\r\n\r\n useEffect(() => {\r\n const token = searchParams.get('token');\r\n const refreshToken = searchParams.get('refreshToken');\r\n const error = searchParams.get('error');\r\n\r\n if (error) {\r\n setStatus('error');\r\n setErrorMessage(errorMessages[error] || 'Une erreur est survenue lors de l\\'authentification.');\r\n return;\r\n }\r\n\r\n if (token && refreshToken) {\r\n handleSuccessfulAuth(token, refreshToken);\r\n } else {\r\n setStatus('error');\r\n setErrorMessage('Paramètres d\\'authentification manquants.');\r\n }\r\n }, [searchParams]);\r\n\r\n const handleSuccessfulAuth = async (token: string, refreshToken: string) => {\r\n try {\r\n localStorage.setItem('token', token);\r\n localStorage.setItem('refreshToken', refreshToken);\r\n\r\n // Update session with client-side IP address (retrieved via external service like ipify.org)\r\n // This is important for OAuth flows where the server can't reliably get the client IP\r\n try {\r\n const clientIp = await getClientIpAddress();\r\n const deviceType = detectDeviceType();\r\n\r\n if (clientIp || deviceType) {\r\n await fetch(`/api/auth/update-session-client-info`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify({ clientIp, deviceType }),\r\n });\r\n }\r\n } catch (ipError) {\r\n // Non-critical - continue with the flow even if IP update fails\r\n }\r\n\r\n // Fetch user info\r\n const userResponse = await fetch(`/api/auth/me`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (!userResponse.ok) {\r\n throw new Error('Failed to fetch user info');\r\n }\r\n\r\n const user = await userResponse.json();\r\n localStorage.setItem('user', JSON.stringify(user));\r\n\r\n // Check if user needs onboarding\r\n try {\r\n const onboardingResponse = await fetch(`/api/onboarding/status`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (onboardingResponse.ok) {\r\n const onboardingData = await onboardingResponse.json();\r\n if (!onboardingData.hasCompletedOnboarding) {\r\n // Redirect to onboarding wizard\r\n setStatus('success');\r\n setTimeout(() => {\r\n window.location.href = '/auth/onboarding';\r\n }, 1500);\r\n return;\r\n }\r\n }\r\n } catch {\r\n // Non-critical - continue with normal flow\r\n }\r\n\r\n // Fetch user preferences\r\n try {\r\n const prefs = await userApi.preferences.get();\r\n const themeConfig = {\r\n mode: prefs.theme || 'dark',\r\n accentColorKey: prefs.accentColorKey || 'indigo',\r\n borderRadius: prefs.borderRadius || {},\r\n itemPaletteKey: prefs.itemPaletteKey || 'neutral',\r\n };\r\n localStorage.setItem('smartstack-theme-config', JSON.stringify(themeConfig));\r\n if (prefs.language) {\r\n localStorage.setItem('i18nextLng', prefs.language);\r\n }\r\n } catch {\r\n // Non-critical - continue with defaults\r\n }\r\n\r\n setStatus('success');\r\n\r\n // Clear stale tenant state so TenantContext uses the user's configured default tenant (Priority 3: isDefault)\r\n localStorage.removeItem('currentTenantId');\r\n localStorage.removeItem('currentTenantSlug');\r\n localStorage.removeItem('isGlobalView');\r\n\r\n // Redirect after showing success\r\n setTimeout(() => {\r\n window.location.href = '/myspace';\r\n }, 1500);\r\n } catch (err) {\r\n console.error('Auth callback error:', err);\r\n setStatus('error');\r\n setErrorMessage('Erreur lors de la finalisation de l\\'authentification.');\r\n }\r\n };\r\n\r\n const handleRetry = () => {\r\n navigate('/login');\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-[var(--bg-primary)]\">\r\n <div className=\"max-w-md w-full mx-4\">\r\n <div className=\"bg-[var(--bg-secondary)] rounded-2xl p-8 shadow-lg border border-[var(--border-color)]\">\r\n {status === 'processing' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 mx-auto text-[var(--color-accent-500)] animate-spin mb-4\" />\r\n <h2 className=\"text-xl font-semibold mb-2\">Authentification en cours...</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Veuillez patienter pendant que nous finalisons votre connexion.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <CheckCircle className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Connexion réussie !</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Vous allez être redirigé vers votre espace personnel...\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'error' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-red-100 dark:bg-red-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Échec de l'authentification</h2>\r\n <div className=\"bg-red-50 dark:bg-red-900/20 rounded-lg p-4 mb-6\">\r\n <div className=\"flex items-start gap-3\">\r\n <AlertCircle className=\"w-5 h-5 text-red-600 dark:text-red-400 flex-shrink-0 mt-0.5\" />\r\n <p className=\"text-sm text-red-700 dark:text-red-300\">{errorMessage}</p>\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleRetry}\r\n className=\"btn btn-primary w-full\"\r\n >\r\n Retourner à la connexion\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["errorMessages","AuthCallbackPage","searchParams","useSearchParams","navigate","useNavigate","status","setStatus","useState","errorMessage","setErrorMessage","useEffect","token","refreshToken","error","handleSuccessfulAuth","clientIp","getClientIpAddress","deviceType","detectDeviceType","userResponse","user","onboardingResponse","prefs","userApi","themeConfig","err","jsx","jsxs","Loader2","CheckCircle","XCircle","AlertCircle"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),x=require("react-router-dom"),m=require("react-i18next"),l=require("lucide-react"),v=require("./businessAnalysisApi-PHrk-59S.cjs");function p({status:r}){const{t:n}=m.useTranslation("ba"),o={draft:"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300",analysed:"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300",specified:"bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300",consolidated:"bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300","handed-off":"bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300"};return e.jsx("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${o[r]||o.draft}`,children:n(`status.${r}`,r)})}function f(){const{t:r}=m.useTranslation("ba"),[n,o]=d.useState(null),[u,g]=d.useState(!0),[h,b]=d.useState(null);d.useEffect(()=>{v.businessAnalysisApi.getManifest().then(o).catch(()=>b("manifest")).finally(()=>g(!1)).catch(()=>{})},[]);const c=d.useMemo(()=>{if(!n?.analyses)return[];const s=new Map;for(const t of n.analyses){const i=s.get(t.appCode);i?(i.entries.push(t),t.updatedAt>i.latestUpdate&&(i.latestUpdate=t.updatedAt)):s.set(t.appCode,{appCode:t.appCode,appName:t.appName,entries:[t],latestUpdate:t.updatedAt})}return Array.from(s.values()).sort((t,i)=>i.latestUpdate.localeCompare(t.latestUpdate))},[n]);return u?e.jsxs("div",{className:"space-y-4 animate-pulse",children:[e.jsx("div",{className:"h-8 bg-[var(--bg-tertiary)] rounded w-64"}),e.jsx("div",{className:"h-4 bg-[var(--bg-tertiary)] rounded w-96"}),e.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6 mt-8",children:[1,2].map(s=>e.jsx("div",{className:"h-48 bg-[var(--bg-tertiary)] rounded-xl"},s))})]}):e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-3xl font-bold mb-4 flex items-center gap-3",children:[e.jsx(l.BarChart3,{className:"w-8 h-8 text-[var(--color-primary-600)]"}),r("index.title")]}),e.jsx("p",{className:"text-lg text-[var(--text-secondary)]",children:r("index.subtitle")})]}),h||c.length===0?e.jsxs("div",{className:"text-center py-16",children:[e.jsx(l.AlertCircle,{className:"w-12 h-12 text-[var(--text-tertiary)] mx-auto mb-4"}),e.jsx("p",{className:"text-lg text-[var(--text-secondary)] mb-2",children:r("index.noData")}),e.jsx("p",{className:"text-sm text-[var(--text-tertiary)]",children:r("index.noDataHint")})]}):e.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:c.map(s=>{const t=s.entries.find(a=>!a.moduleCode),i=s.entries.filter(a=>a.moduleCode);return e.jsxs("div",{className:"card p-6 hover:shadow-lg transition-shadow",children:[e.jsxs("div",{className:"flex items-start gap-4 mb-4",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-violet-500 to-purple-600 flex items-center justify-center",children:e.jsx(l.BarChart3,{className:"w-6 h-6 text-white"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)] truncate",children:s.appName}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t?.featureDescription})]}),t&&e.jsx(p,{status:t.status})]}),i.length>0&&e.jsx("div",{className:"space-y-2 mb-4",children:i.map(a=>e.jsxs(x.Link,{to:`/system/docs/ba/${a.appCode}/${a.moduleCode}`,className:"flex items-center gap-2 px-3 py-2 rounded-lg hover:bg-[var(--bg-hover)] transition-colors group",children:[e.jsx(l.FileText,{className:"w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("span",{className:"text-sm text-[var(--text-primary)] flex-1",children:a.moduleName||a.moduleCode}),e.jsx(p,{status:a.status}),e.jsx(l.ArrowRight,{className:"w-3 h-3 text-[var(--text-tertiary)] opacity-0 group-hover:opacity-100 transition-opacity"})]},`${a.appCode}-${a.moduleCode}`))}),e.jsxs("div",{className:"flex items-center justify-between pt-3 border-t border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-[var(--text-tertiary)]",children:[e.jsx(l.Clock,{className:"w-3 h-3"}),new Date(s.latestUpdate).toLocaleDateString()]}),t&&e.jsxs(x.Link,{to:`/system/docs/ba/${s.appCode}`,className:"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1",children:[r("index.version")," ",t.version,e.jsx(l.ArrowRight,{className:"w-3 h-3"})]})]})]},s.appCode)})})]})}exports.BaIndexPage=f;
2
- //# sourceMappingURL=BaIndexPage-BhdOX87v.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaIndexPage-BhdOX87v.cjs","sources":["../src/pages/system/docs/ba/BaIndexPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { BarChart3, ArrowRight, FileText, Clock, AlertCircle } from 'lucide-react';\r\nimport { businessAnalysisApi } from '@/services/api/businessAnalysisApi';\r\nimport type { BaManifest, BaManifestEntry } from '@/types/featureJson';\r\n\r\ninterface AppGroup {\r\n appCode: string;\r\n appName: string;\r\n entries: BaManifestEntry[];\r\n latestUpdate: string;\r\n}\r\n\r\nfunction StatusBadge({ status }: { status: string }) {\r\n const { t } = useTranslation('ba');\r\n const colors: Record<string, string> = {\r\n 'draft': 'bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300',\r\n 'analysed': 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300',\r\n 'specified': 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300',\r\n 'consolidated': 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300',\r\n 'handed-off': 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300',\r\n };\r\n return (\r\n <span className={`px-2 py-0.5 rounded-full text-xs font-medium ${colors[status] || colors.draft}`}>\r\n {t(`status.${status}`, status)}\r\n </span>\r\n );\r\n}\r\n\r\nexport function BaIndexPage() {\r\n const { t } = useTranslation('ba');\r\n const [manifest, setManifest] = useState<BaManifest | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n businessAnalysisApi.getManifest()\r\n .then(setManifest)\r\n .catch(() => setError('manifest'))\r\n .finally(() => setLoading(false))\r\n .catch(() => {});\r\n }, []);\r\n\r\n const appGroups = useMemo<AppGroup[]>(() => {\r\n if (!manifest?.analyses) return [];\r\n const grouped = new Map<string, AppGroup>();\r\n for (const entry of manifest.analyses) {\r\n const existing = grouped.get(entry.appCode);\r\n if (existing) {\r\n existing.entries.push(entry);\r\n if (entry.updatedAt > existing.latestUpdate) {\r\n existing.latestUpdate = entry.updatedAt;\r\n }\r\n } else {\r\n grouped.set(entry.appCode, {\r\n appCode: entry.appCode,\r\n appName: entry.appName,\r\n entries: [entry],\r\n latestUpdate: entry.updatedAt,\r\n });\r\n }\r\n }\r\n return Array.from(grouped.values()).sort((a, b) => b.latestUpdate.localeCompare(a.latestUpdate));\r\n }, [manifest]);\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"space-y-4 animate-pulse\">\r\n <div className=\"h-8 bg-[var(--bg-tertiary)] rounded w-64\" />\r\n <div className=\"h-4 bg-[var(--bg-tertiary)] rounded w-96\" />\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mt-8\">\r\n {[1, 2].map(i => <div key={i} className=\"h-48 bg-[var(--bg-tertiary)] rounded-xl\" />)}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n {/* Header */}\r\n <div>\r\n <h1 className=\"text-3xl font-bold mb-4 flex items-center gap-3\">\r\n <BarChart3 className=\"w-8 h-8 text-[var(--color-primary-600)]\" />\r\n {t('index.title')}\r\n </h1>\r\n <p className=\"text-lg text-[var(--text-secondary)]\">\r\n {t('index.subtitle')}\r\n </p>\r\n </div>\r\n\r\n {/* Content */}\r\n {error || appGroups.length === 0 ? (\r\n <div className=\"text-center py-16\">\r\n <AlertCircle className=\"w-12 h-12 text-[var(--text-tertiary)] mx-auto mb-4\" />\r\n <p className=\"text-lg text-[var(--text-secondary)] mb-2\">{t('index.noData')}</p>\r\n <p className=\"text-sm text-[var(--text-tertiary)]\">{t('index.noDataHint')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\r\n {appGroups.map(group => {\r\n const appEntry = group.entries.find(e => !e.moduleCode);\r\n const moduleEntries = group.entries.filter(e => e.moduleCode);\r\n\r\n return (\r\n <div key={group.appCode} className=\"card p-6 hover:shadow-lg transition-shadow\">\r\n <div className=\"flex items-start gap-4 mb-4\">\r\n <div className=\"w-12 h-12 rounded-xl bg-gradient-to-br from-violet-500 to-purple-600 flex items-center justify-center\">\r\n <BarChart3 className=\"w-6 h-6 text-white\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"text-lg font-semibold text-[var(--text-primary)] truncate\">\r\n {group.appName}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">\r\n {appEntry?.featureDescription}\r\n </p>\r\n </div>\r\n {appEntry && <StatusBadge status={appEntry.status} />}\r\n </div>\r\n\r\n {/* Module list */}\r\n {moduleEntries.length > 0 && (\r\n <div className=\"space-y-2 mb-4\">\r\n {moduleEntries.map(entry => (\r\n <Link\r\n key={`${entry.appCode}-${entry.moduleCode}`}\r\n to={`/system/docs/ba/${entry.appCode}/${entry.moduleCode}`}\r\n className=\"flex items-center gap-2 px-3 py-2 rounded-lg hover:bg-[var(--bg-hover)] transition-colors group\"\r\n >\r\n <FileText className=\"w-4 h-4 text-[var(--text-tertiary)]\" />\r\n <span className=\"text-sm text-[var(--text-primary)] flex-1\">\r\n {entry.moduleName || entry.moduleCode}\r\n </span>\r\n <StatusBadge status={entry.status} />\r\n <ArrowRight className=\"w-3 h-3 text-[var(--text-tertiary)] opacity-0 group-hover:opacity-100 transition-opacity\" />\r\n </Link>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Footer */}\r\n <div className=\"flex items-center justify-between pt-3 border-t border-[var(--border-color)]\">\r\n <div className=\"flex items-center gap-2 text-xs text-[var(--text-tertiary)]\">\r\n <Clock className=\"w-3 h-3\" />\r\n {new Date(group.latestUpdate).toLocaleDateString()}\r\n </div>\r\n {appEntry && (\r\n <Link\r\n to={`/system/docs/ba/${group.appCode}`}\r\n className=\"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1\"\r\n >\r\n {t('index.version')} {appEntry.version}\r\n <ArrowRight className=\"w-3 h-3\" />\r\n </Link>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["StatusBadge","status","t","useTranslation","colors","jsx","BaIndexPage","manifest","setManifest","useState","loading","setLoading","error","setError","useEffect","businessAnalysisApi","appGroups","useMemo","grouped","entry","existing","a","b","jsxs","i","BarChart3","AlertCircle","group","appEntry","e","moduleEntries","Link","FileText","ArrowRight","Clock"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaIndexPage-Dkp_Eixx.js","sources":["../src/pages/system/docs/ba/BaIndexPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { BarChart3, ArrowRight, FileText, Clock, AlertCircle } from 'lucide-react';\r\nimport { businessAnalysisApi } from '@/services/api/businessAnalysisApi';\r\nimport type { BaManifest, BaManifestEntry } from '@/types/featureJson';\r\n\r\ninterface AppGroup {\r\n appCode: string;\r\n appName: string;\r\n entries: BaManifestEntry[];\r\n latestUpdate: string;\r\n}\r\n\r\nfunction StatusBadge({ status }: { status: string }) {\r\n const { t } = useTranslation('ba');\r\n const colors: Record<string, string> = {\r\n 'draft': 'bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300',\r\n 'analysed': 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300',\r\n 'specified': 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300',\r\n 'consolidated': 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300',\r\n 'handed-off': 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300',\r\n };\r\n return (\r\n <span className={`px-2 py-0.5 rounded-full text-xs font-medium ${colors[status] || colors.draft}`}>\r\n {t(`status.${status}`, status)}\r\n </span>\r\n );\r\n}\r\n\r\nexport function BaIndexPage() {\r\n const { t } = useTranslation('ba');\r\n const [manifest, setManifest] = useState<BaManifest | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n businessAnalysisApi.getManifest()\r\n .then(setManifest)\r\n .catch(() => setError('manifest'))\r\n .finally(() => setLoading(false))\r\n .catch(() => {});\r\n }, []);\r\n\r\n const appGroups = useMemo<AppGroup[]>(() => {\r\n if (!manifest?.analyses) return [];\r\n const grouped = new Map<string, AppGroup>();\r\n for (const entry of manifest.analyses) {\r\n const existing = grouped.get(entry.appCode);\r\n if (existing) {\r\n existing.entries.push(entry);\r\n if (entry.updatedAt > existing.latestUpdate) {\r\n existing.latestUpdate = entry.updatedAt;\r\n }\r\n } else {\r\n grouped.set(entry.appCode, {\r\n appCode: entry.appCode,\r\n appName: entry.appName,\r\n entries: [entry],\r\n latestUpdate: entry.updatedAt,\r\n });\r\n }\r\n }\r\n return Array.from(grouped.values()).sort((a, b) => b.latestUpdate.localeCompare(a.latestUpdate));\r\n }, [manifest]);\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"space-y-4 animate-pulse\">\r\n <div className=\"h-8 bg-[var(--bg-tertiary)] rounded w-64\" />\r\n <div className=\"h-4 bg-[var(--bg-tertiary)] rounded w-96\" />\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mt-8\">\r\n {[1, 2].map(i => <div key={i} className=\"h-48 bg-[var(--bg-tertiary)] rounded-xl\" />)}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n {/* Header */}\r\n <div>\r\n <h1 className=\"text-3xl font-bold mb-4 flex items-center gap-3\">\r\n <BarChart3 className=\"w-8 h-8 text-[var(--color-primary-600)]\" />\r\n {t('index.title')}\r\n </h1>\r\n <p className=\"text-lg text-[var(--text-secondary)]\">\r\n {t('index.subtitle')}\r\n </p>\r\n </div>\r\n\r\n {/* Content */}\r\n {error || appGroups.length === 0 ? (\r\n <div className=\"text-center py-16\">\r\n <AlertCircle className=\"w-12 h-12 text-[var(--text-tertiary)] mx-auto mb-4\" />\r\n <p className=\"text-lg text-[var(--text-secondary)] mb-2\">{t('index.noData')}</p>\r\n <p className=\"text-sm text-[var(--text-tertiary)]\">{t('index.noDataHint')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\r\n {appGroups.map(group => {\r\n const appEntry = group.entries.find(e => !e.moduleCode);\r\n const moduleEntries = group.entries.filter(e => e.moduleCode);\r\n\r\n return (\r\n <div key={group.appCode} className=\"card p-6 hover:shadow-lg transition-shadow\">\r\n <div className=\"flex items-start gap-4 mb-4\">\r\n <div className=\"w-12 h-12 rounded-xl bg-gradient-to-br from-violet-500 to-purple-600 flex items-center justify-center\">\r\n <BarChart3 className=\"w-6 h-6 text-white\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <h3 className=\"text-lg font-semibold text-[var(--text-primary)] truncate\">\r\n {group.appName}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">\r\n {appEntry?.featureDescription}\r\n </p>\r\n </div>\r\n {appEntry && <StatusBadge status={appEntry.status} />}\r\n </div>\r\n\r\n {/* Module list */}\r\n {moduleEntries.length > 0 && (\r\n <div className=\"space-y-2 mb-4\">\r\n {moduleEntries.map(entry => (\r\n <Link\r\n key={`${entry.appCode}-${entry.moduleCode}`}\r\n to={`/system/docs/ba/${entry.appCode}/${entry.moduleCode}`}\r\n className=\"flex items-center gap-2 px-3 py-2 rounded-lg hover:bg-[var(--bg-hover)] transition-colors group\"\r\n >\r\n <FileText className=\"w-4 h-4 text-[var(--text-tertiary)]\" />\r\n <span className=\"text-sm text-[var(--text-primary)] flex-1\">\r\n {entry.moduleName || entry.moduleCode}\r\n </span>\r\n <StatusBadge status={entry.status} />\r\n <ArrowRight className=\"w-3 h-3 text-[var(--text-tertiary)] opacity-0 group-hover:opacity-100 transition-opacity\" />\r\n </Link>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Footer */}\r\n <div className=\"flex items-center justify-between pt-3 border-t border-[var(--border-color)]\">\r\n <div className=\"flex items-center gap-2 text-xs text-[var(--text-tertiary)]\">\r\n <Clock className=\"w-3 h-3\" />\r\n {new Date(group.latestUpdate).toLocaleDateString()}\r\n </div>\r\n {appEntry && (\r\n <Link\r\n to={`/system/docs/ba/${group.appCode}`}\r\n className=\"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1\"\r\n >\r\n {t('index.version')} {appEntry.version}\r\n <ArrowRight className=\"w-3 h-3\" />\r\n </Link>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["StatusBadge","status","t","useTranslation","colors","jsx","BaIndexPage","manifest","setManifest","useState","loading","setLoading","error","setError","useEffect","businessAnalysisApi","appGroups","useMemo","grouped","entry","existing","a","b","jsxs","i","BarChart3","AlertCircle","group","appEntry","e","moduleEntries","Link","FileText","ArrowRight","Clock"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaViewerPage-DxD0eZm-.js","sources":["../src/pages/system/docs/ba/components/CadrageTab.tsx","../src/pages/system/docs/ba/components/SpecificationTab.tsx","../src/pages/system/docs/ba/components/SyntheseTab.tsx","../src/pages/system/docs/ba/BaViewerPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\r\nimport { AlertTriangle, Users, Target, ArrowRight, CheckCircle } from 'lucide-react';\r\nimport type { Discovery, Stakeholder } from '@/types/featureJson';\r\n\r\ninterface CadrageTabProps {\r\n discovery?: Discovery;\r\n}\r\n\r\nfunction ScopeColumn({ title, items, color }: { title: string; items?: string[]; color: string }) {\r\n if (!items?.length) return null;\r\n return (\r\n <div className={`rounded-lg border-l-4 ${color} p-4 bg-[var(--bg-secondary)]`}>\r\n <h4 className=\"text-sm font-semibold mb-2\">{title}</h4>\r\n <ul className=\"space-y-1\">\r\n {items.map((item) => (\r\n <li key={item} className=\"text-sm text-[var(--text-secondary)] flex items-start gap-2\">\r\n <span className=\"mt-1.5 w-1.5 h-1.5 rounded-full bg-current flex-shrink-0\" />\r\n {item}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n\r\nfunction StakeholderCard({ stakeholder }: { stakeholder: Stakeholder }) {\r\n const { t } = useTranslation('ba');\r\n return (\r\n <div className=\"card p-4\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <Users className=\"w-4 h-4 text-[var(--color-primary-600)]\" />\r\n <h4 className=\"font-medium text-[var(--text-primary)]\">{stakeholder.role}</h4>\r\n </div>\r\n {stakeholder.function && (\r\n <p className=\"text-sm text-[var(--text-secondary)] mb-2\">{stakeholder.function}</p>\r\n )}\r\n {stakeholder.tasks && stakeholder.tasks.length > 0 && (\r\n <div className=\"mb-2\">\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('stakeholder.tasks')}</p>\r\n <ul className=\"space-y-0.5\">\r\n {stakeholder.tasks.map((task) => (\r\n <li key={task} className=\"text-sm text-[var(--text-secondary)] flex items-center gap-1.5\">\r\n <ArrowRight className=\"w-3 h-3 text-[var(--text-tertiary)]\" />\r\n {task}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n {stakeholder.painPoints && stakeholder.painPoints.length > 0 && (\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('stakeholder.painPoints')}</p>\r\n <ul className=\"space-y-0.5\">\r\n {stakeholder.painPoints.map((pain) => (\r\n <li key={pain} className=\"text-sm text-red-600 dark:text-red-400 flex items-center gap-1.5\">\r\n <AlertTriangle className=\"w-3 h-3\" />\r\n {pain}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport function CadrageTab({ discovery }: CadrageTabProps) {\r\n const { t } = useTranslation('ba');\r\n\r\n if (!discovery) {\r\n return (\r\n <div className=\"text-center py-12\">\r\n <Target className=\"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3\" />\r\n <p className=\"text-[var(--text-secondary)]\">{t('discovery.noData')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n {/* Problem + AsIs + ToBe */}\r\n {(discovery.problem || discovery.asIs || discovery.toBe) && (\r\n <div className=\"space-y-4\">\r\n {discovery.problem && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-2 flex items-center gap-2\">\r\n <Target className=\"w-5 h-5 text-red-500\" />\r\n {t('discovery.problem')}\r\n </h3>\r\n <p className=\"text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-lg p-4 whitespace-pre-wrap\">\r\n {discovery.problem}\r\n </p>\r\n </div>\r\n )}\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {discovery.asIs && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold mb-2 text-orange-600 dark:text-orange-400\">\r\n {t('discovery.asIs')}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] bg-orange-50 dark:bg-orange-950/30 rounded-lg p-4 whitespace-pre-wrap\">\r\n {discovery.asIs}\r\n </p>\r\n </div>\r\n )}\r\n {discovery.toBe && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold mb-2 text-green-600 dark:text-green-400\">\r\n {t('discovery.toBe')}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] bg-green-50 dark:bg-green-950/30 rounded-lg p-4 whitespace-pre-wrap\">\r\n {discovery.toBe}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Stakeholders */}\r\n {discovery.stakeholders && discovery.stakeholders.length > 0 && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <Users className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('discovery.stakeholders')}\r\n </h3>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {discovery.stakeholders.map((s) => (\r\n <StakeholderCard key={s.role} stakeholder={s} />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* MoSCoW Scope */}\r\n {discovery.scope && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <CheckCircle className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('discovery.scope')}\r\n </h3>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\r\n <ScopeColumn title={t('scope.mustHave')} items={discovery.scope.mustHave} color=\"border-red-500\" />\r\n <ScopeColumn title={t('scope.shouldHave')} items={discovery.scope.shouldHave} color=\"border-yellow-500\" />\r\n <ScopeColumn title={t('scope.couldHave')} items={discovery.scope.couldHave} color=\"border-blue-500\" />\r\n <ScopeColumn title={t('scope.outOfScope')} items={discovery.scope.outOfScope} color=\"border-gray-400\" />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FileText, ChevronDown, ChevronRight, Shield, Database, BookOpen } from 'lucide-react';\r\nimport type { Analysis, Specification, BrCategory, Priority } from '@/types/featureJson';\r\n\r\ninterface SpecificationTabProps {\r\n specification?: Specification;\r\n analysis?: Analysis;\r\n}\r\n\r\nconst BR_COLORS: Record<BrCategory, string> = {\r\n VAL: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300',\r\n CALC: 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300',\r\n WF: 'bg-orange-100 text-orange-700 dark:bg-orange-900 dark:text-orange-300',\r\n SEC: 'bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300',\r\n DATA: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-900 dark:text-cyan-300',\r\n};\r\n\r\nconst PRIORITY_COLORS: Record<Priority, string> = {\r\n must: 'bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300',\r\n should: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900 dark:text-yellow-300',\r\n could: 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300',\r\n};\r\n\r\nfunction UseCaseCard({ uc }: { uc: NonNullable<Specification['useCases']>[number] }) {\r\n const { t } = useTranslation('ba');\r\n const [expanded, setExpanded] = useState(false);\r\n\r\n return (\r\n <div className=\"card p-4\">\r\n <button\r\n onClick={() => setExpanded(!expanded)}\r\n className=\"w-full flex items-start gap-2 text-left\"\r\n >\r\n {expanded\r\n ? <ChevronDown className=\"w-4 h-4 mt-0.5 flex-shrink-0\" />\r\n : <ChevronRight className=\"w-4 h-4 mt-0.5 flex-shrink-0\" />\r\n }\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n <span className=\"text-xs font-mono text-[var(--color-primary-600)]\">{uc.id}</span>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{uc.name}</span>\r\n </div>\r\n {uc.description && !expanded && (\r\n <p className=\"text-sm text-[var(--text-tertiary)] truncate mt-0.5\">{uc.description}</p>\r\n )}\r\n </div>\r\n </button>\r\n\r\n {expanded && (\r\n <div className=\"mt-3 ml-6 space-y-3 text-sm\">\r\n {uc.description && (\r\n <p className=\"text-[var(--text-secondary)]\">{uc.description}</p>\r\n )}\r\n <div className=\"flex gap-4 text-xs\">\r\n <span className=\"text-[var(--text-tertiary)]\">{t('useCase.actor')}: <strong>{uc.primaryActor}</strong></span>\r\n <span className=\"text-[var(--text-tertiary)]\">{t('useCase.permission')}: <code className=\"bg-[var(--bg-tertiary)] px-1 rounded\">{uc.permission}</code></span>\r\n </div>\r\n\r\n {uc.preconditions && uc.preconditions.length > 0 && (\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('useCase.preconditions')}</p>\r\n <ul className=\"list-disc list-inside text-[var(--text-secondary)]\">\r\n {uc.preconditions.map((p) => <li key={p}>{p}</li>)}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('useCase.mainScenario')}</p>\r\n <ol className=\"list-decimal list-inside text-[var(--text-secondary)] space-y-0.5\">\r\n {uc.mainScenario.map((step) => <li key={step}>{step}</li>)}\r\n </ol>\r\n </div>\r\n\r\n {uc.alternativeScenarios && uc.alternativeScenarios.length > 0 && (\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('useCase.alternatives')}</p>\r\n {uc.alternativeScenarios.map((alt) => (\r\n <div key={alt.name} className=\"mb-2\">\r\n <p className=\"text-xs font-medium text-[var(--text-secondary)]\">{alt.name}</p>\r\n <ol className=\"list-decimal list-inside text-[var(--text-secondary)] text-xs\">\r\n {alt.steps.map((step) => <li key={step}>{step}</li>)}\r\n </ol>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {uc.linkedRules && uc.linkedRules.length > 0 && (\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n <span className=\"text-xs text-[var(--text-tertiary)]\">{t('useCase.linkedRules')}:</span>\r\n {uc.linkedRules.map(rule => (\r\n <span key={rule} className=\"text-xs font-mono bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded\">{rule}</span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport function SpecificationTab({ specification, analysis }: SpecificationTabProps) {\r\n const { t } = useTranslation('ba');\r\n const [section, setSection] = useState<'uc' | 'br' | 'entities' | 'permissions'>('uc');\r\n\r\n const hasUC = specification?.useCases && specification.useCases.length > 0;\r\n const hasBR = analysis?.businessRules && analysis.businessRules.length > 0;\r\n const hasEntities = analysis?.entities && analysis.entities.length > 0;\r\n const hasPerms = specification?.permissionMatrix?.permissions && specification.permissionMatrix.permissions.length > 0;\r\n\r\n if (!hasUC && !hasBR && !hasEntities && !hasPerms) {\r\n return <div className=\"text-center py-12\">\r\n <FileText className=\"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3\" />\r\n <p className=\"text-[var(--text-secondary)]\">{t('specification.noData')}</p>\r\n </div>;\r\n }\r\n\r\n const tabs = [\r\n { id: 'uc' as const, label: t('specification.useCases'), count: specification?.useCases?.length || 0, icon: BookOpen, show: hasUC },\r\n { id: 'br' as const, label: t('specification.businessRules'), count: analysis?.businessRules?.length || 0, icon: Shield, show: hasBR },\r\n { id: 'entities' as const, label: t('specification.entities'), count: analysis?.entities?.length || 0, icon: Database, show: hasEntities },\r\n { id: 'permissions' as const, label: t('specification.permissions'), count: specification?.permissionMatrix?.permissions?.length || 0, icon: Shield, show: hasPerms },\r\n ].filter(tab => tab.show);\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {/* Sub-tabs */}\r\n <div className=\"flex gap-1 border-b border-[var(--border-color)]\">\r\n {tabs.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setSection(tab.id)}\r\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors flex items-center gap-2 ${\r\n section === tab.id\r\n ? 'border-[var(--color-primary-600)] text-[var(--color-primary-600)]'\r\n : 'border-transparent text-[var(--text-tertiary)] hover:text-[var(--text-primary)]'\r\n }`}\r\n >\r\n <tab.icon className=\"w-4 h-4\" />\r\n {tab.label}\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded-full\">{tab.count}</span>\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Use Cases */}\r\n {section === 'uc' && specification?.useCases && (\r\n <div className=\"space-y-3\">\r\n {specification.useCases.map(uc => (\r\n <UseCaseCard key={uc.id} uc={uc} />\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Business Rules */}\r\n {section === 'br' && analysis?.businessRules && (\r\n <div className=\"space-y-2\">\r\n {analysis.businessRules.map(rule => (\r\n <div key={rule.id} className=\"card p-4 flex items-start gap-3\">\r\n <div className=\"flex-shrink-0 flex flex-col items-center gap-1\">\r\n <span className={`text-xs font-medium px-2 py-0.5 rounded ${BR_COLORS[rule.category]}`}>\r\n {t(`brCategory.${rule.category}`)}\r\n </span>\r\n <span className={`text-xs px-2 py-0.5 rounded ${PRIORITY_COLORS[rule.priority]}`}>\r\n {t(`priority.${rule.priority}`)}\r\n </span>\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <span className=\"text-xs font-mono text-[var(--color-primary-600)]\">{rule.id}</span>\r\n <span className=\"font-medium text-sm text-[var(--text-primary)]\">{rule.name}</span>\r\n </div>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{rule.statement}</p>\r\n {rule.entity && (\r\n <span className=\"text-xs text-[var(--text-tertiary)] mt-1 inline-block\">\r\n {t('businessRule.entity')}: {rule.entity}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Entities */}\r\n {section === 'entities' && analysis?.entities && (\r\n <div className=\"space-y-4\">\r\n {analysis.entities.map(entity => (\r\n <div key={entity.name} className=\"card p-4\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <Database className=\"w-4 h-4 text-[var(--color-primary-600)]\" />\r\n <h4 className=\"font-medium text-[var(--text-primary)]\">{entity.name}</h4>\r\n {entity.type && (\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-2 py-0.5 rounded\">{entity.type}</span>\r\n )}\r\n </div>\r\n {entity.description && (\r\n <p className=\"text-sm text-[var(--text-secondary)] mb-3\">{entity.description}</p>\r\n )}\r\n\r\n {entity.attributes && entity.attributes.length > 0 && (\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.name')}</th>\r\n <th className=\"text-left py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.type')}</th>\r\n <th className=\"text-center py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.required')}</th>\r\n <th className=\"text-center py-1 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.unique')}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {entity.attributes.map(attr => (\r\n <tr key={attr.name} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-1.5 pr-4 font-mono text-xs\">{attr.name}</td>\r\n <td className=\"py-1.5 pr-4 text-[var(--text-secondary)]\">{attr.type}</td>\r\n <td className=\"py-1.5 pr-4 text-center\">{attr.required ? '✓' : ''}</td>\r\n <td className=\"py-1.5 text-center\">{attr.unique ? '✓' : ''}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n\r\n {entity.relationships && entity.relationships.length > 0 && (\r\n <div className=\"mt-3 pt-3 border-t border-[var(--border-color)]\">\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('entity.relationships')}</p>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {entity.relationships.map((rel) => (\r\n <span key={`${rel.target}-${rel.type}`} className=\"text-xs bg-[var(--bg-tertiary)] px-2 py-1 rounded\">\r\n → {rel.target} <span className=\"text-[var(--text-tertiary)]\">({rel.type})</span>\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Permissions */}\r\n {section === 'permissions' && specification?.permissionMatrix && (\r\n <div className=\"space-y-4\">\r\n {specification.permissionMatrix.permissions && (\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Permission</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {specification.permissionMatrix.permissions.map(perm => (\r\n <tr key={perm.path} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-2 pr-4 font-mono text-xs text-[var(--color-primary-600)]\">{perm.path}</td>\r\n <td className=\"py-2 text-[var(--text-secondary)]\">{perm.description}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n\r\n {specification.permissionMatrix.roleAssignments && specification.permissionMatrix.roleAssignments.length > 0 && (\r\n <div>\r\n <h4 className=\"text-sm font-medium mb-2\">Role Assignments</h4>\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Role</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Level</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Permissions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {specification.permissionMatrix.roleAssignments.map(ra => (\r\n <tr key={ra.role} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-2 pr-4 font-medium\">{ra.role}</td>\r\n <td className=\"py-2 pr-4\">\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-2 py-0.5 rounded\">{ra.level}</span>\r\n </td>\r\n <td className=\"py-2\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {ra.permissions.map(p => (\r\n <span key={p} className=\"text-xs font-mono bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded\">{p}</span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useTranslation } from 'react-i18next';\r\nimport { Rocket, FolderTree, Globe, GitBranch } from 'lucide-react';\r\nimport type { Handoff, FilesToCreate } from '@/types/featureJson';\r\n\r\ninterface SyntheseTabProps {\r\n handoff?: Handoff;\r\n}\r\n\r\nconst CATEGORY_ICONS: Record<string, string> = {\r\n domain: '🏗️',\r\n application: '⚙️',\r\n infrastructure: '🔧',\r\n api: '🌐',\r\n frontend: '🖥️',\r\n seedData: '🌱',\r\n tests: '🧪',\r\n};\r\n\r\nfunction FileCategory({ category, files, t }: { category: keyof FilesToCreate; files: NonNullable<FilesToCreate[keyof FilesToCreate]>; t: (key: string) => string }) {\r\n if (!files.length) return null;\r\n return (\r\n <div className=\"card p-4\">\r\n <h4 className=\"text-sm font-semibold mb-2 flex items-center gap-2\">\r\n <span>{CATEGORY_ICONS[category] || '📁'}</span>\r\n {t(`fileCategory.${category}`)}\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded-full\">{files.length}</span>\r\n </h4>\r\n <div className=\"space-y-1\">\r\n {files.map((file) => (\r\n <div key={file.path} className=\"flex items-start gap-2 text-sm\">\r\n <code className=\"text-xs font-mono text-[var(--color-primary-600)] bg-[var(--bg-secondary)] px-1.5 py-0.5 rounded break-all\">\r\n {file.path}\r\n </code>\r\n {file.description && (\r\n <span className=\"text-[var(--text-tertiary)] text-xs flex-shrink-0\">{file.description}</span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function SyntheseTab({ handoff }: SyntheseTabProps) {\r\n const { t } = useTranslation('ba');\r\n\r\n if (!handoff) {\r\n return <div className=\"text-center py-12\">\r\n <Rocket className=\"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3\" />\r\n <p className=\"text-[var(--text-secondary)]\">{t('handoff.noData')}</p>\r\n </div>;\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n {/* Summary cards */}\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n {handoff.complexity && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.complexity')}</p>\r\n <p className=\"text-lg font-bold text-[var(--text-primary)]\">{handoff.complexity}</p>\r\n </div>\r\n )}\r\n {handoff.implementationStrategy && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.strategy')}</p>\r\n <p className=\"text-lg font-bold text-[var(--text-primary)]\">{handoff.implementationStrategy}</p>\r\n </div>\r\n )}\r\n {handoff.totalFiles != null && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.totalFiles')}</p>\r\n <p className=\"text-lg font-bold text-[var(--color-primary-600)]\">{handoff.totalFiles}</p>\r\n </div>\r\n )}\r\n {handoff.totalTasks != null && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.totalTasks')}</p>\r\n <p className=\"text-lg font-bold text-[var(--color-primary-600)]\">{handoff.totalTasks}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Files to create */}\r\n {handoff.filesToCreate && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <FolderTree className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('handoff.filesToCreate')}\r\n </h3>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {(Object.entries(handoff.filesToCreate) as [keyof FilesToCreate, FilesToCreate[keyof FilesToCreate]][]).map(\r\n ([category, files]) => files && files.length > 0 && (\r\n <FileCategory key={category} category={category} files={files} t={t} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* API Endpoints */}\r\n {handoff.apiEndpointSummary && handoff.apiEndpointSummary.length > 0 && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <Globe className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('handoff.apiEndpoints')}\r\n </h3>\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Method</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Route</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Operation</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Permission</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {handoff.apiEndpointSummary.map((ep) => {\r\n const methodColors: Record<string, string> = {\r\n GET: 'text-green-600',\r\n POST: 'text-blue-600',\r\n PUT: 'text-orange-600',\r\n PATCH: 'text-yellow-600',\r\n DELETE: 'text-red-600',\r\n };\r\n return (\r\n <tr key={`${ep.method}-${ep.route}`} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className={`py-2 pr-4 font-mono text-xs font-bold ${methodColors[ep.method] || ''}`}>{ep.method}</td>\r\n <td className=\"py-2 pr-4 font-mono text-xs\">{ep.route}</td>\r\n <td className=\"py-2 pr-4 text-[var(--text-secondary)]\">{ep.operation}</td>\r\n <td className=\"py-2 font-mono text-xs text-[var(--text-tertiary)]\">{ep.permission}</td>\r\n </tr>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* BR to Code mapping */}\r\n {handoff.brToCodeMapping && handoff.brToCodeMapping.length > 0 && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <GitBranch className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('handoff.brMapping')}\r\n </h3>\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Rule</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">File</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Method</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {handoff.brToCodeMapping.map((mapping) => (\r\n <tr key={`${mapping.ruleId}-${mapping.targetFile}`} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-2 pr-4\">\r\n <span className=\"font-mono text-xs text-[var(--color-primary-600)]\">{mapping.ruleId}</span>\r\n {mapping.ruleName && <span className=\"text-xs text-[var(--text-tertiary)] ml-2\">{mapping.ruleName}</span>}\r\n </td>\r\n <td className=\"py-2 pr-4 font-mono text-xs break-all\">{mapping.targetFile}</td>\r\n <td className=\"py-2 font-mono text-xs text-[var(--text-secondary)]\">{mapping.targetMethod}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useEffect } from 'react';\r\nimport { useParams, Link } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ArrowLeft, Target, FileText, Rocket, Loader2 } from 'lucide-react';\r\nimport { businessAnalysisApi } from '@/services/api/businessAnalysisApi';\r\nimport type { ModuleFeatureJson } from '@/types/featureJson';\r\nimport { CadrageTab } from './components/CadrageTab';\r\nimport { SpecificationTab } from './components/SpecificationTab';\r\nimport { SyntheseTab } from './components/SyntheseTab';\r\n\r\ntype TabId = 'cadrage' | 'specification' | 'synthese';\r\n\r\nconst TABS: { id: TabId; icon: typeof Target; labelKey: string }[] = [\r\n { id: 'cadrage', icon: Target, labelKey: 'tabs.cadrage' },\r\n { id: 'specification', icon: FileText, labelKey: 'tabs.specification' },\r\n { id: 'synthese', icon: Rocket, labelKey: 'tabs.synthese' },\r\n];\r\n\r\nconst STATUS_COLORS: Record<string, string> = {\r\n 'draft': 'bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300',\r\n 'analysed': 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300',\r\n 'specified': 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300',\r\n 'consolidated': 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300',\r\n 'handed-off': 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300',\r\n};\r\n\r\nexport function BaViewerPage() {\r\n const { appCode, moduleCode } = useParams<{ appCode: string; moduleCode?: string }>();\r\n const { t } = useTranslation('ba');\r\n const [feature, setFeature] = useState<ModuleFeatureJson | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [activeTab, setActiveTab] = useState<TabId>('cadrage');\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n businessAnalysisApi.getManifest()\r\n .then(m => {\r\n // Find path from manifest\r\n const entry = m.analyses.find(\r\n e => e.appCode === appCode && (moduleCode ? e.moduleCode === moduleCode : !e.moduleCode)\r\n );\r\n if (entry) {\r\n return businessAnalysisApi.getFeature(entry.path);\r\n }\r\n throw new Error('Entry not found in manifest');\r\n })\r\n .then(setFeature)\r\n .catch(err => setError(err.message))\r\n .finally(() => setLoading(false))\r\n .catch(() => {});\r\n }, [appCode, moduleCode]);\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center py-20\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[var(--color-primary-600)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !feature) {\r\n return (\r\n <div className=\"space-y-4\">\r\n <Link to=\"/system/docs/ba\" className=\"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1\">\r\n <ArrowLeft className=\"w-4 h-4\" />\r\n {t('viewer.backToList')}\r\n </Link>\r\n <div className=\"text-center py-12\">\r\n <p className=\"text-[var(--text-secondary)]\">Feature not found: {appCode}{moduleCode ? `/${moduleCode}` : ''}</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {/* Back link */}\r\n <Link to=\"/system/docs/ba\" className=\"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1\">\r\n <ArrowLeft className=\"w-4 h-4\" />\r\n {t('viewer.backToList')}\r\n </Link>\r\n\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {feature.metadata.application}\r\n {feature.metadata.module && feature.metadata.module !== feature.metadata.application && (\r\n <span className=\"text-[var(--text-tertiary)]\"> / {feature.metadata.module}</span>\r\n )}\r\n </h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{feature.metadata.featureDescription}</p>\r\n </div>\r\n <div className=\"flex items-center gap-3 flex-shrink-0\">\r\n <span className=\"text-sm text-[var(--text-tertiary)]\">v{feature.version}</span>\r\n <span className={`px-2.5 py-1 rounded-full text-xs font-medium ${STATUS_COLORS[feature.status] || STATUS_COLORS.draft}`}>\r\n {t(`status.${feature.status}`, feature.status)}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Tab bar */}\r\n <div className=\"flex gap-1 border-b border-[var(--border-color)]\">\r\n {TABS.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`px-5 py-3 text-sm font-medium border-b-2 transition-colors flex items-center gap-2 ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-primary-600)] text-[var(--color-primary-600)]'\r\n : 'border-transparent text-[var(--text-tertiary)] hover:text-[var(--text-primary)]'\r\n }`}\r\n >\r\n <tab.icon className=\"w-4 h-4\" />\r\n {t(tab.labelKey)}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Tab content */}\r\n <div>\r\n {activeTab === 'cadrage' && <CadrageTab discovery={feature.discovery} />}\r\n {activeTab === 'specification' && <SpecificationTab specification={feature.specification} analysis={feature.analysis} />}\r\n {activeTab === 'synthese' && <SyntheseTab handoff={feature.handoff} />}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ScopeColumn","title","items","color","jsxs","jsx","item","StakeholderCard","stakeholder","t","useTranslation","Users","task","ArrowRight","pain","AlertTriangle","CadrageTab","discovery","Target","s","CheckCircle","BR_COLORS","PRIORITY_COLORS","UseCaseCard","uc","expanded","setExpanded","useState","ChevronDown","ChevronRight","p","step","alt","rule","SpecificationTab","specification","analysis","section","setSection","hasUC","hasBR","hasEntities","hasPerms","FileText","tabs","BookOpen","Shield","Database","tab","entity","attr","rel","perm","ra","CATEGORY_ICONS","FileCategory","category","files","file","SyntheseTab","handoff","FolderTree","Globe","ep","GitBranch","mapping","Rocket","TABS","STATUS_COLORS","BaViewerPage","appCode","moduleCode","useParams","feature","setFeature","loading","setLoading","error","setError","activeTab","setActiveTab","useEffect","businessAnalysisApi","m","entry","e","err","Loader2","Link","ArrowLeft"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),y=require("react-router-dom"),m=require("react-i18next"),i=require("lucide-react"),N=require("./businessAnalysisApi-PHrk-59S.cjs");function b({title:t,items:r,color:s}){return r?.length?e.jsxs("div",{className:`rounded-lg border-l-4 ${s} p-4 bg-[var(--bg-secondary)]`,children:[e.jsx("h4",{className:"text-sm font-semibold mb-2",children:t}),e.jsx("ul",{className:"space-y-1",children:r.map(l=>e.jsxs("li",{className:"text-sm text-[var(--text-secondary)] flex items-start gap-2",children:[e.jsx("span",{className:"mt-1.5 w-1.5 h-1.5 rounded-full bg-current flex-shrink-0"}),l]},l))})]}):null}function f({stakeholder:t}){const{t:r}=m.useTranslation("ba");return e.jsxs("div",{className:"card p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(i.Users,{className:"w-4 h-4 text-[var(--color-primary-600)]"}),e.jsx("h4",{className:"font-medium text-[var(--text-primary)]",children:t.role})]}),t.function&&e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mb-2",children:t.function}),t.tasks&&t.tasks.length>0&&e.jsxs("div",{className:"mb-2",children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-tertiary)] mb-1",children:r("stakeholder.tasks")}),e.jsx("ul",{className:"space-y-0.5",children:t.tasks.map(s=>e.jsxs("li",{className:"text-sm text-[var(--text-secondary)] flex items-center gap-1.5",children:[e.jsx(i.ArrowRight,{className:"w-3 h-3 text-[var(--text-tertiary)]"}),s]},s))})]}),t.painPoints&&t.painPoints.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-tertiary)] mb-1",children:r("stakeholder.painPoints")}),e.jsx("ul",{className:"space-y-0.5",children:t.painPoints.map(s=>e.jsxs("li",{className:"text-sm text-red-600 dark:text-red-400 flex items-center gap-1.5",children:[e.jsx(i.AlertTriangle,{className:"w-3 h-3"}),s]},s))})]})]})}function w({discovery:t}){const{t:r}=m.useTranslation("ba");return t?e.jsxs("div",{className:"space-y-8",children:[(t.problem||t.asIs||t.toBe)&&e.jsxs("div",{className:"space-y-4",children:[t.problem&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold mb-2 flex items-center gap-2",children:[e.jsx(i.Target,{className:"w-5 h-5 text-red-500"}),r("discovery.problem")]}),e.jsx("p",{className:"text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-lg p-4 whitespace-pre-wrap",children:t.problem})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[t.asIs&&e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-2 text-orange-600 dark:text-orange-400",children:r("discovery.asIs")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] bg-orange-50 dark:bg-orange-950/30 rounded-lg p-4 whitespace-pre-wrap",children:t.asIs})]}),t.toBe&&e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-2 text-green-600 dark:text-green-400",children:r("discovery.toBe")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] bg-green-50 dark:bg-green-950/30 rounded-lg p-4 whitespace-pre-wrap",children:t.toBe})]})]})]}),t.stakeholders&&t.stakeholders.length>0&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold mb-3 flex items-center gap-2",children:[e.jsx(i.Users,{className:"w-5 h-5 text-[var(--color-primary-600)]"}),r("discovery.stakeholders")]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:t.stakeholders.map(s=>e.jsx(f,{stakeholder:s},s.role))})]}),t.scope&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold mb-3 flex items-center gap-2",children:[e.jsx(i.CheckCircle,{className:"w-5 h-5 text-[var(--color-primary-600)]"}),r("discovery.scope")]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4",children:[e.jsx(b,{title:r("scope.mustHave"),items:t.scope.mustHave,color:"border-red-500"}),e.jsx(b,{title:r("scope.shouldHave"),items:t.scope.shouldHave,color:"border-yellow-500"}),e.jsx(b,{title:r("scope.couldHave"),items:t.scope.couldHave,color:"border-blue-500"}),e.jsx(b,{title:r("scope.outOfScope"),items:t.scope.outOfScope,color:"border-gray-400"})]})]})]}):e.jsxs("div",{className:"text-center py-12",children:[e.jsx(i.Target,{className:"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:r("discovery.noData")})]})}const k={VAL:"bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300",CALC:"bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300",WF:"bg-orange-100 text-orange-700 dark:bg-orange-900 dark:text-orange-300",SEC:"bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300",DATA:"bg-cyan-100 text-cyan-700 dark:bg-cyan-900 dark:text-cyan-300"},C={must:"bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300",should:"bg-yellow-100 text-yellow-700 dark:bg-yellow-900 dark:text-yellow-300",could:"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300"};function T({uc:t}){const{t:r}=m.useTranslation("ba"),[s,l]=d.useState(!1);return e.jsxs("div",{className:"card p-4",children:[e.jsxs("button",{onClick:()=>l(!s),className:"w-full flex items-start gap-2 text-left",children:[s?e.jsx(i.ChevronDown,{className:"w-4 h-4 mt-0.5 flex-shrink-0"}):e.jsx(i.ChevronRight,{className:"w-4 h-4 mt-0.5 flex-shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-mono text-[var(--color-primary-600)]",children:t.id}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.name})]}),t.description&&!s&&e.jsx("p",{className:"text-sm text-[var(--text-tertiary)] truncate mt-0.5",children:t.description})]})]}),s&&e.jsxs("div",{className:"mt-3 ml-6 space-y-3 text-sm",children:[t.description&&e.jsx("p",{className:"text-[var(--text-secondary)]",children:t.description}),e.jsxs("div",{className:"flex gap-4 text-xs",children:[e.jsxs("span",{className:"text-[var(--text-tertiary)]",children:[r("useCase.actor"),": ",e.jsx("strong",{children:t.primaryActor})]}),e.jsxs("span",{className:"text-[var(--text-tertiary)]",children:[r("useCase.permission"),": ",e.jsx("code",{className:"bg-[var(--bg-tertiary)] px-1 rounded",children:t.permission})]})]}),t.preconditions&&t.preconditions.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-tertiary)] mb-1",children:r("useCase.preconditions")}),e.jsx("ul",{className:"list-disc list-inside text-[var(--text-secondary)]",children:t.preconditions.map(x=>e.jsx("li",{children:x},x))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-tertiary)] mb-1",children:r("useCase.mainScenario")}),e.jsx("ol",{className:"list-decimal list-inside text-[var(--text-secondary)] space-y-0.5",children:t.mainScenario.map(x=>e.jsx("li",{children:x},x))})]}),t.alternativeScenarios&&t.alternativeScenarios.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-tertiary)] mb-1",children:r("useCase.alternatives")}),t.alternativeScenarios.map(x=>e.jsxs("div",{className:"mb-2",children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-secondary)]",children:x.name}),e.jsx("ol",{className:"list-decimal list-inside text-[var(--text-secondary)] text-xs",children:x.steps.map(c=>e.jsx("li",{children:c},c))})]},x.name))]}),t.linkedRules&&t.linkedRules.length>0&&e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)]",children:[r("useCase.linkedRules"),":"]}),t.linkedRules.map(x=>e.jsx("span",{className:"text-xs font-mono bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded",children:x},x))]})]})]})}function S({specification:t,analysis:r}){const{t:s}=m.useTranslation("ba"),[l,x]=d.useState("uc"),c=t?.useCases&&t.useCases.length>0,p=r?.businessRules&&r.businessRules.length>0,j=r?.entities&&r.entities.length>0,h=t?.permissionMatrix?.permissions&&t.permissionMatrix.permissions.length>0;if(!c&&!p&&!j&&!h)return e.jsxs("div",{className:"text-center py-12",children:[e.jsx(i.FileText,{className:"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:s("specification.noData")})]});const o=[{id:"uc",label:s("specification.useCases"),count:t?.useCases?.length||0,icon:i.BookOpen,show:c},{id:"br",label:s("specification.businessRules"),count:r?.businessRules?.length||0,icon:i.Shield,show:p},{id:"entities",label:s("specification.entities"),count:r?.entities?.length||0,icon:i.Database,show:j},{id:"permissions",label:s("specification.permissions"),count:t?.permissionMatrix?.permissions?.length||0,icon:i.Shield,show:h}].filter(a=>a.show);return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex gap-1 border-b border-[var(--border-color)]",children:o.map(a=>e.jsxs("button",{onClick:()=>x(a.id),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors flex items-center gap-2 ${l===a.id?"border-[var(--color-primary-600)] text-[var(--color-primary-600)]":"border-transparent text-[var(--text-tertiary)] hover:text-[var(--text-primary)]"}`,children:[e.jsx(a.icon,{className:"w-4 h-4"}),a.label,e.jsx("span",{className:"text-xs bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded-full",children:a.count})]},a.id))}),l==="uc"&&t?.useCases&&e.jsx("div",{className:"space-y-3",children:t.useCases.map(a=>e.jsx(T,{uc:a},a.id))}),l==="br"&&r?.businessRules&&e.jsx("div",{className:"space-y-2",children:r.businessRules.map(a=>e.jsxs("div",{className:"card p-4 flex items-start gap-3",children:[e.jsxs("div",{className:"flex-shrink-0 flex flex-col items-center gap-1",children:[e.jsx("span",{className:`text-xs font-medium px-2 py-0.5 rounded ${k[a.category]}`,children:s(`brCategory.${a.category}`)}),e.jsx("span",{className:`text-xs px-2 py-0.5 rounded ${C[a.priority]}`,children:s(`priority.${a.priority}`)})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:"text-xs font-mono text-[var(--color-primary-600)]",children:a.id}),e.jsx("span",{className:"font-medium text-sm text-[var(--text-primary)]",children:a.name})]}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:a.statement}),a.entity&&e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)] mt-1 inline-block",children:[s("businessRule.entity"),": ",a.entity]})]})]},a.id))}),l==="entities"&&r?.entities&&e.jsx("div",{className:"space-y-4",children:r.entities.map(a=>e.jsxs("div",{className:"card p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(i.Database,{className:"w-4 h-4 text-[var(--color-primary-600)]"}),e.jsx("h4",{className:"font-medium text-[var(--text-primary)]",children:a.name}),a.type&&e.jsx("span",{className:"text-xs bg-[var(--bg-tertiary)] px-2 py-0.5 rounded",children:a.type})]}),a.description&&e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mb-3",children:a.description}),a.attributes&&a.attributes.length>0&&e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:s("entity.name")}),e.jsx("th",{className:"text-left py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:s("entity.type")}),e.jsx("th",{className:"text-center py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:s("entity.required")}),e.jsx("th",{className:"text-center py-1 text-xs font-medium text-[var(--text-tertiary)]",children:s("entity.unique")})]})}),e.jsx("tbody",{children:a.attributes.map(n=>e.jsxs("tr",{className:"border-b border-[var(--border-color)] last:border-0",children:[e.jsx("td",{className:"py-1.5 pr-4 font-mono text-xs",children:n.name}),e.jsx("td",{className:"py-1.5 pr-4 text-[var(--text-secondary)]",children:n.type}),e.jsx("td",{className:"py-1.5 pr-4 text-center",children:n.required?"✓":""}),e.jsx("td",{className:"py-1.5 text-center",children:n.unique?"✓":""})]},n.name))})]})}),a.relationships&&a.relationships.length>0&&e.jsxs("div",{className:"mt-3 pt-3 border-t border-[var(--border-color)]",children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-tertiary)] mb-1",children:s("entity.relationships")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:a.relationships.map(n=>e.jsxs("span",{className:"text-xs bg-[var(--bg-tertiary)] px-2 py-1 rounded",children:["→ ",n.target," ",e.jsxs("span",{className:"text-[var(--text-tertiary)]",children:["(",n.type,")"]})]},`${n.target}-${n.type}`))})]})]},a.name))}),l==="permissions"&&t?.permissionMatrix&&e.jsxs("div",{className:"space-y-4",children:[t.permissionMatrix.permissions&&e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Permission"}),e.jsx("th",{className:"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]",children:"Description"})]})}),e.jsx("tbody",{children:t.permissionMatrix.permissions.map(a=>e.jsxs("tr",{className:"border-b border-[var(--border-color)] last:border-0",children:[e.jsx("td",{className:"py-2 pr-4 font-mono text-xs text-[var(--color-primary-600)]",children:a.path}),e.jsx("td",{className:"py-2 text-[var(--text-secondary)]",children:a.description})]},a.path))})]})}),t.permissionMatrix.roleAssignments&&t.permissionMatrix.roleAssignments.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-sm font-medium mb-2",children:"Role Assignments"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Role"}),e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Level"}),e.jsx("th",{className:"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]",children:"Permissions"})]})}),e.jsx("tbody",{children:t.permissionMatrix.roleAssignments.map(a=>e.jsxs("tr",{className:"border-b border-[var(--border-color)] last:border-0",children:[e.jsx("td",{className:"py-2 pr-4 font-medium",children:a.role}),e.jsx("td",{className:"py-2 pr-4",children:e.jsx("span",{className:"text-xs bg-[var(--bg-tertiary)] px-2 py-0.5 rounded",children:a.level})}),e.jsx("td",{className:"py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:a.permissions.map(n=>e.jsx("span",{className:"text-xs font-mono bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded",children:n},n))})})]},a.role))})]})})]})]})]})}const R={domain:"🏗️",application:"⚙️",infrastructure:"🔧",api:"🌐",frontend:"🖥️",seedData:"🌱",tests:"🧪"};function A({category:t,files:r,t:s}){return r.length?e.jsxs("div",{className:"card p-4",children:[e.jsxs("h4",{className:"text-sm font-semibold mb-2 flex items-center gap-2",children:[e.jsx("span",{children:R[t]||"📁"}),s(`fileCategory.${t}`),e.jsx("span",{className:"text-xs bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded-full",children:r.length})]}),e.jsx("div",{className:"space-y-1",children:r.map(l=>e.jsxs("div",{className:"flex items-start gap-2 text-sm",children:[e.jsx("code",{className:"text-xs font-mono text-[var(--color-primary-600)] bg-[var(--bg-secondary)] px-1.5 py-0.5 rounded break-all",children:l.path}),l.description&&e.jsx("span",{className:"text-[var(--text-tertiary)] text-xs flex-shrink-0",children:l.description})]},l.path))})]}):null}function M({handoff:t}){const{t:r}=m.useTranslation("ba");return t?e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[t.complexity&&e.jsxs("div",{className:"card p-4 text-center",children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mb-1",children:r("handoff.complexity")}),e.jsx("p",{className:"text-lg font-bold text-[var(--text-primary)]",children:t.complexity})]}),t.implementationStrategy&&e.jsxs("div",{className:"card p-4 text-center",children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mb-1",children:r("handoff.strategy")}),e.jsx("p",{className:"text-lg font-bold text-[var(--text-primary)]",children:t.implementationStrategy})]}),t.totalFiles!=null&&e.jsxs("div",{className:"card p-4 text-center",children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mb-1",children:r("handoff.totalFiles")}),e.jsx("p",{className:"text-lg font-bold text-[var(--color-primary-600)]",children:t.totalFiles})]}),t.totalTasks!=null&&e.jsxs("div",{className:"card p-4 text-center",children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mb-1",children:r("handoff.totalTasks")}),e.jsx("p",{className:"text-lg font-bold text-[var(--color-primary-600)]",children:t.totalTasks})]})]}),t.filesToCreate&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold mb-3 flex items-center gap-2",children:[e.jsx(i.FolderTree,{className:"w-5 h-5 text-[var(--color-primary-600)]"}),r("handoff.filesToCreate")]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:Object.entries(t.filesToCreate).map(([s,l])=>l&&l.length>0&&e.jsx(A,{category:s,files:l,t:r},s))})]}),t.apiEndpointSummary&&t.apiEndpointSummary.length>0&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold mb-3 flex items-center gap-2",children:[e.jsx(i.Globe,{className:"w-5 h-5 text-[var(--color-primary-600)]"}),r("handoff.apiEndpoints")]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Method"}),e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Route"}),e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Operation"}),e.jsx("th",{className:"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]",children:"Permission"})]})}),e.jsx("tbody",{children:t.apiEndpointSummary.map(s=>{const l={GET:"text-green-600",POST:"text-blue-600",PUT:"text-orange-600",PATCH:"text-yellow-600",DELETE:"text-red-600"};return e.jsxs("tr",{className:"border-b border-[var(--border-color)] last:border-0",children:[e.jsx("td",{className:`py-2 pr-4 font-mono text-xs font-bold ${l[s.method]||""}`,children:s.method}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs",children:s.route}),e.jsx("td",{className:"py-2 pr-4 text-[var(--text-secondary)]",children:s.operation}),e.jsx("td",{className:"py-2 font-mono text-xs text-[var(--text-tertiary)]",children:s.permission})]},`${s.method}-${s.route}`)})})]})})]}),t.brToCodeMapping&&t.brToCodeMapping.length>0&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold mb-3 flex items-center gap-2",children:[e.jsx(i.GitBranch,{className:"w-5 h-5 text-[var(--color-primary-600)]"}),r("handoff.brMapping")]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"Rule"}),e.jsx("th",{className:"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]",children:"File"}),e.jsx("th",{className:"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]",children:"Method"})]})}),e.jsx("tbody",{children:t.brToCodeMapping.map(s=>e.jsxs("tr",{className:"border-b border-[var(--border-color)] last:border-0",children:[e.jsxs("td",{className:"py-2 pr-4",children:[e.jsx("span",{className:"font-mono text-xs text-[var(--color-primary-600)]",children:s.ruleId}),s.ruleName&&e.jsx("span",{className:"text-xs text-[var(--text-tertiary)] ml-2",children:s.ruleName})]}),e.jsx("td",{className:"py-2 pr-4 font-mono text-xs break-all",children:s.targetFile}),e.jsx("td",{className:"py-2 font-mono text-xs text-[var(--text-secondary)]",children:s.targetMethod})]},`${s.ruleId}-${s.targetFile}`))})]})})]})]}):e.jsxs("div",{className:"text-center py-12",children:[e.jsx(i.Rocket,{className:"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:r("handoff.noData")})]})}const $=[{id:"cadrage",icon:i.Target,labelKey:"tabs.cadrage"},{id:"specification",icon:i.FileText,labelKey:"tabs.specification"},{id:"synthese",icon:i.Rocket,labelKey:"tabs.synthese"}],g={draft:"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300",analysed:"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300",specified:"bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300",consolidated:"bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300","handed-off":"bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300"};function E(){const{appCode:t,moduleCode:r}=y.useParams(),{t:s}=m.useTranslation("ba"),[l,x]=d.useState(null),[c,p]=d.useState(!0),[j,h]=d.useState(null),[o,a]=d.useState("cadrage");return d.useEffect(()=>{p(!0),h(null),N.businessAnalysisApi.getManifest().then(n=>{const v=n.analyses.find(u=>u.appCode===t&&(r?u.moduleCode===r:!u.moduleCode));if(v)return N.businessAnalysisApi.getFeature(v.path);throw new Error("Entry not found in manifest")}).then(x).catch(n=>h(n.message)).finally(()=>p(!1)).catch(()=>{})},[t,r]),c?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(i.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-primary-600)]"})}):j||!l?e.jsxs("div",{className:"space-y-4",children:[e.jsxs(y.Link,{to:"/system/docs/ba",className:"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1",children:[e.jsx(i.ArrowLeft,{className:"w-4 h-4"}),s("viewer.backToList")]}),e.jsx("div",{className:"text-center py-12",children:e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["Feature not found: ",t,r?`/${r}`:""]})})]}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs(y.Link,{to:"/system/docs/ba",className:"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1",children:[e.jsx(i.ArrowLeft,{className:"w-4 h-4"}),s("viewer.backToList")]}),e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:[l.metadata.application,l.metadata.module&&l.metadata.module!==l.metadata.application&&e.jsxs("span",{className:"text-[var(--text-tertiary)]",children:[" / ",l.metadata.module]})]}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:l.metadata.featureDescription})]}),e.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[e.jsxs("span",{className:"text-sm text-[var(--text-tertiary)]",children:["v",l.version]}),e.jsx("span",{className:`px-2.5 py-1 rounded-full text-xs font-medium ${g[l.status]||g.draft}`,children:s(`status.${l.status}`,l.status)})]})]}),e.jsx("div",{className:"flex gap-1 border-b border-[var(--border-color)]",children:$.map(n=>e.jsxs("button",{onClick:()=>a(n.id),className:`px-5 py-3 text-sm font-medium border-b-2 transition-colors flex items-center gap-2 ${o===n.id?"border-[var(--color-primary-600)] text-[var(--color-primary-600)]":"border-transparent text-[var(--text-tertiary)] hover:text-[var(--text-primary)]"}`,children:[e.jsx(n.icon,{className:"w-4 h-4"}),s(n.labelKey)]},n.id))}),e.jsxs("div",{children:[o==="cadrage"&&e.jsx(w,{discovery:l.discovery}),o==="specification"&&e.jsx(S,{specification:l.specification,analysis:l.analysis}),o==="synthese"&&e.jsx(M,{handoff:l.handoff})]})]})}exports.BaViewerPage=E;
2
- //# sourceMappingURL=BaViewerPage-SYgjCF7x.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaViewerPage-SYgjCF7x.cjs","sources":["../src/pages/system/docs/ba/components/CadrageTab.tsx","../src/pages/system/docs/ba/components/SpecificationTab.tsx","../src/pages/system/docs/ba/components/SyntheseTab.tsx","../src/pages/system/docs/ba/BaViewerPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\r\nimport { AlertTriangle, Users, Target, ArrowRight, CheckCircle } from 'lucide-react';\r\nimport type { Discovery, Stakeholder } from '@/types/featureJson';\r\n\r\ninterface CadrageTabProps {\r\n discovery?: Discovery;\r\n}\r\n\r\nfunction ScopeColumn({ title, items, color }: { title: string; items?: string[]; color: string }) {\r\n if (!items?.length) return null;\r\n return (\r\n <div className={`rounded-lg border-l-4 ${color} p-4 bg-[var(--bg-secondary)]`}>\r\n <h4 className=\"text-sm font-semibold mb-2\">{title}</h4>\r\n <ul className=\"space-y-1\">\r\n {items.map((item) => (\r\n <li key={item} className=\"text-sm text-[var(--text-secondary)] flex items-start gap-2\">\r\n <span className=\"mt-1.5 w-1.5 h-1.5 rounded-full bg-current flex-shrink-0\" />\r\n {item}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n\r\nfunction StakeholderCard({ stakeholder }: { stakeholder: Stakeholder }) {\r\n const { t } = useTranslation('ba');\r\n return (\r\n <div className=\"card p-4\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <Users className=\"w-4 h-4 text-[var(--color-primary-600)]\" />\r\n <h4 className=\"font-medium text-[var(--text-primary)]\">{stakeholder.role}</h4>\r\n </div>\r\n {stakeholder.function && (\r\n <p className=\"text-sm text-[var(--text-secondary)] mb-2\">{stakeholder.function}</p>\r\n )}\r\n {stakeholder.tasks && stakeholder.tasks.length > 0 && (\r\n <div className=\"mb-2\">\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('stakeholder.tasks')}</p>\r\n <ul className=\"space-y-0.5\">\r\n {stakeholder.tasks.map((task) => (\r\n <li key={task} className=\"text-sm text-[var(--text-secondary)] flex items-center gap-1.5\">\r\n <ArrowRight className=\"w-3 h-3 text-[var(--text-tertiary)]\" />\r\n {task}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n {stakeholder.painPoints && stakeholder.painPoints.length > 0 && (\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('stakeholder.painPoints')}</p>\r\n <ul className=\"space-y-0.5\">\r\n {stakeholder.painPoints.map((pain) => (\r\n <li key={pain} className=\"text-sm text-red-600 dark:text-red-400 flex items-center gap-1.5\">\r\n <AlertTriangle className=\"w-3 h-3\" />\r\n {pain}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport function CadrageTab({ discovery }: CadrageTabProps) {\r\n const { t } = useTranslation('ba');\r\n\r\n if (!discovery) {\r\n return (\r\n <div className=\"text-center py-12\">\r\n <Target className=\"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3\" />\r\n <p className=\"text-[var(--text-secondary)]\">{t('discovery.noData')}</p>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n {/* Problem + AsIs + ToBe */}\r\n {(discovery.problem || discovery.asIs || discovery.toBe) && (\r\n <div className=\"space-y-4\">\r\n {discovery.problem && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-2 flex items-center gap-2\">\r\n <Target className=\"w-5 h-5 text-red-500\" />\r\n {t('discovery.problem')}\r\n </h3>\r\n <p className=\"text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-lg p-4 whitespace-pre-wrap\">\r\n {discovery.problem}\r\n </p>\r\n </div>\r\n )}\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {discovery.asIs && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold mb-2 text-orange-600 dark:text-orange-400\">\r\n {t('discovery.asIs')}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] bg-orange-50 dark:bg-orange-950/30 rounded-lg p-4 whitespace-pre-wrap\">\r\n {discovery.asIs}\r\n </p>\r\n </div>\r\n )}\r\n {discovery.toBe && (\r\n <div>\r\n <h3 className=\"text-sm font-semibold mb-2 text-green-600 dark:text-green-400\">\r\n {t('discovery.toBe')}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] bg-green-50 dark:bg-green-950/30 rounded-lg p-4 whitespace-pre-wrap\">\r\n {discovery.toBe}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Stakeholders */}\r\n {discovery.stakeholders && discovery.stakeholders.length > 0 && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <Users className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('discovery.stakeholders')}\r\n </h3>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {discovery.stakeholders.map((s) => (\r\n <StakeholderCard key={s.role} stakeholder={s} />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* MoSCoW Scope */}\r\n {discovery.scope && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <CheckCircle className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('discovery.scope')}\r\n </h3>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\r\n <ScopeColumn title={t('scope.mustHave')} items={discovery.scope.mustHave} color=\"border-red-500\" />\r\n <ScopeColumn title={t('scope.shouldHave')} items={discovery.scope.shouldHave} color=\"border-yellow-500\" />\r\n <ScopeColumn title={t('scope.couldHave')} items={discovery.scope.couldHave} color=\"border-blue-500\" />\r\n <ScopeColumn title={t('scope.outOfScope')} items={discovery.scope.outOfScope} color=\"border-gray-400\" />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FileText, ChevronDown, ChevronRight, Shield, Database, BookOpen } from 'lucide-react';\r\nimport type { Analysis, Specification, BrCategory, Priority } from '@/types/featureJson';\r\n\r\ninterface SpecificationTabProps {\r\n specification?: Specification;\r\n analysis?: Analysis;\r\n}\r\n\r\nconst BR_COLORS: Record<BrCategory, string> = {\r\n VAL: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300',\r\n CALC: 'bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-300',\r\n WF: 'bg-orange-100 text-orange-700 dark:bg-orange-900 dark:text-orange-300',\r\n SEC: 'bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300',\r\n DATA: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-900 dark:text-cyan-300',\r\n};\r\n\r\nconst PRIORITY_COLORS: Record<Priority, string> = {\r\n must: 'bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-300',\r\n should: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900 dark:text-yellow-300',\r\n could: 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300',\r\n};\r\n\r\nfunction UseCaseCard({ uc }: { uc: NonNullable<Specification['useCases']>[number] }) {\r\n const { t } = useTranslation('ba');\r\n const [expanded, setExpanded] = useState(false);\r\n\r\n return (\r\n <div className=\"card p-4\">\r\n <button\r\n onClick={() => setExpanded(!expanded)}\r\n className=\"w-full flex items-start gap-2 text-left\"\r\n >\r\n {expanded\r\n ? <ChevronDown className=\"w-4 h-4 mt-0.5 flex-shrink-0\" />\r\n : <ChevronRight className=\"w-4 h-4 mt-0.5 flex-shrink-0\" />\r\n }\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n <span className=\"text-xs font-mono text-[var(--color-primary-600)]\">{uc.id}</span>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{uc.name}</span>\r\n </div>\r\n {uc.description && !expanded && (\r\n <p className=\"text-sm text-[var(--text-tertiary)] truncate mt-0.5\">{uc.description}</p>\r\n )}\r\n </div>\r\n </button>\r\n\r\n {expanded && (\r\n <div className=\"mt-3 ml-6 space-y-3 text-sm\">\r\n {uc.description && (\r\n <p className=\"text-[var(--text-secondary)]\">{uc.description}</p>\r\n )}\r\n <div className=\"flex gap-4 text-xs\">\r\n <span className=\"text-[var(--text-tertiary)]\">{t('useCase.actor')}: <strong>{uc.primaryActor}</strong></span>\r\n <span className=\"text-[var(--text-tertiary)]\">{t('useCase.permission')}: <code className=\"bg-[var(--bg-tertiary)] px-1 rounded\">{uc.permission}</code></span>\r\n </div>\r\n\r\n {uc.preconditions && uc.preconditions.length > 0 && (\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('useCase.preconditions')}</p>\r\n <ul className=\"list-disc list-inside text-[var(--text-secondary)]\">\r\n {uc.preconditions.map((p) => <li key={p}>{p}</li>)}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('useCase.mainScenario')}</p>\r\n <ol className=\"list-decimal list-inside text-[var(--text-secondary)] space-y-0.5\">\r\n {uc.mainScenario.map((step) => <li key={step}>{step}</li>)}\r\n </ol>\r\n </div>\r\n\r\n {uc.alternativeScenarios && uc.alternativeScenarios.length > 0 && (\r\n <div>\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('useCase.alternatives')}</p>\r\n {uc.alternativeScenarios.map((alt) => (\r\n <div key={alt.name} className=\"mb-2\">\r\n <p className=\"text-xs font-medium text-[var(--text-secondary)]\">{alt.name}</p>\r\n <ol className=\"list-decimal list-inside text-[var(--text-secondary)] text-xs\">\r\n {alt.steps.map((step) => <li key={step}>{step}</li>)}\r\n </ol>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {uc.linkedRules && uc.linkedRules.length > 0 && (\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n <span className=\"text-xs text-[var(--text-tertiary)]\">{t('useCase.linkedRules')}:</span>\r\n {uc.linkedRules.map(rule => (\r\n <span key={rule} className=\"text-xs font-mono bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded\">{rule}</span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport function SpecificationTab({ specification, analysis }: SpecificationTabProps) {\r\n const { t } = useTranslation('ba');\r\n const [section, setSection] = useState<'uc' | 'br' | 'entities' | 'permissions'>('uc');\r\n\r\n const hasUC = specification?.useCases && specification.useCases.length > 0;\r\n const hasBR = analysis?.businessRules && analysis.businessRules.length > 0;\r\n const hasEntities = analysis?.entities && analysis.entities.length > 0;\r\n const hasPerms = specification?.permissionMatrix?.permissions && specification.permissionMatrix.permissions.length > 0;\r\n\r\n if (!hasUC && !hasBR && !hasEntities && !hasPerms) {\r\n return <div className=\"text-center py-12\">\r\n <FileText className=\"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3\" />\r\n <p className=\"text-[var(--text-secondary)]\">{t('specification.noData')}</p>\r\n </div>;\r\n }\r\n\r\n const tabs = [\r\n { id: 'uc' as const, label: t('specification.useCases'), count: specification?.useCases?.length || 0, icon: BookOpen, show: hasUC },\r\n { id: 'br' as const, label: t('specification.businessRules'), count: analysis?.businessRules?.length || 0, icon: Shield, show: hasBR },\r\n { id: 'entities' as const, label: t('specification.entities'), count: analysis?.entities?.length || 0, icon: Database, show: hasEntities },\r\n { id: 'permissions' as const, label: t('specification.permissions'), count: specification?.permissionMatrix?.permissions?.length || 0, icon: Shield, show: hasPerms },\r\n ].filter(tab => tab.show);\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {/* Sub-tabs */}\r\n <div className=\"flex gap-1 border-b border-[var(--border-color)]\">\r\n {tabs.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setSection(tab.id)}\r\n className={`px-4 py-2 text-sm font-medium border-b-2 transition-colors flex items-center gap-2 ${\r\n section === tab.id\r\n ? 'border-[var(--color-primary-600)] text-[var(--color-primary-600)]'\r\n : 'border-transparent text-[var(--text-tertiary)] hover:text-[var(--text-primary)]'\r\n }`}\r\n >\r\n <tab.icon className=\"w-4 h-4\" />\r\n {tab.label}\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded-full\">{tab.count}</span>\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Use Cases */}\r\n {section === 'uc' && specification?.useCases && (\r\n <div className=\"space-y-3\">\r\n {specification.useCases.map(uc => (\r\n <UseCaseCard key={uc.id} uc={uc} />\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Business Rules */}\r\n {section === 'br' && analysis?.businessRules && (\r\n <div className=\"space-y-2\">\r\n {analysis.businessRules.map(rule => (\r\n <div key={rule.id} className=\"card p-4 flex items-start gap-3\">\r\n <div className=\"flex-shrink-0 flex flex-col items-center gap-1\">\r\n <span className={`text-xs font-medium px-2 py-0.5 rounded ${BR_COLORS[rule.category]}`}>\r\n {t(`brCategory.${rule.category}`)}\r\n </span>\r\n <span className={`text-xs px-2 py-0.5 rounded ${PRIORITY_COLORS[rule.priority]}`}>\r\n {t(`priority.${rule.priority}`)}\r\n </span>\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <span className=\"text-xs font-mono text-[var(--color-primary-600)]\">{rule.id}</span>\r\n <span className=\"font-medium text-sm text-[var(--text-primary)]\">{rule.name}</span>\r\n </div>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{rule.statement}</p>\r\n {rule.entity && (\r\n <span className=\"text-xs text-[var(--text-tertiary)] mt-1 inline-block\">\r\n {t('businessRule.entity')}: {rule.entity}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Entities */}\r\n {section === 'entities' && analysis?.entities && (\r\n <div className=\"space-y-4\">\r\n {analysis.entities.map(entity => (\r\n <div key={entity.name} className=\"card p-4\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <Database className=\"w-4 h-4 text-[var(--color-primary-600)]\" />\r\n <h4 className=\"font-medium text-[var(--text-primary)]\">{entity.name}</h4>\r\n {entity.type && (\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-2 py-0.5 rounded\">{entity.type}</span>\r\n )}\r\n </div>\r\n {entity.description && (\r\n <p className=\"text-sm text-[var(--text-secondary)] mb-3\">{entity.description}</p>\r\n )}\r\n\r\n {entity.attributes && entity.attributes.length > 0 && (\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.name')}</th>\r\n <th className=\"text-left py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.type')}</th>\r\n <th className=\"text-center py-1 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.required')}</th>\r\n <th className=\"text-center py-1 text-xs font-medium text-[var(--text-tertiary)]\">{t('entity.unique')}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {entity.attributes.map(attr => (\r\n <tr key={attr.name} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-1.5 pr-4 font-mono text-xs\">{attr.name}</td>\r\n <td className=\"py-1.5 pr-4 text-[var(--text-secondary)]\">{attr.type}</td>\r\n <td className=\"py-1.5 pr-4 text-center\">{attr.required ? '✓' : ''}</td>\r\n <td className=\"py-1.5 text-center\">{attr.unique ? '✓' : ''}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n\r\n {entity.relationships && entity.relationships.length > 0 && (\r\n <div className=\"mt-3 pt-3 border-t border-[var(--border-color)]\">\r\n <p className=\"text-xs font-medium text-[var(--text-tertiary)] mb-1\">{t('entity.relationships')}</p>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {entity.relationships.map((rel) => (\r\n <span key={`${rel.target}-${rel.type}`} className=\"text-xs bg-[var(--bg-tertiary)] px-2 py-1 rounded\">\r\n → {rel.target} <span className=\"text-[var(--text-tertiary)]\">({rel.type})</span>\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Permissions */}\r\n {section === 'permissions' && specification?.permissionMatrix && (\r\n <div className=\"space-y-4\">\r\n {specification.permissionMatrix.permissions && (\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Permission</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {specification.permissionMatrix.permissions.map(perm => (\r\n <tr key={perm.path} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-2 pr-4 font-mono text-xs text-[var(--color-primary-600)]\">{perm.path}</td>\r\n <td className=\"py-2 text-[var(--text-secondary)]\">{perm.description}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n\r\n {specification.permissionMatrix.roleAssignments && specification.permissionMatrix.roleAssignments.length > 0 && (\r\n <div>\r\n <h4 className=\"text-sm font-medium mb-2\">Role Assignments</h4>\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Role</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Level</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Permissions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {specification.permissionMatrix.roleAssignments.map(ra => (\r\n <tr key={ra.role} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-2 pr-4 font-medium\">{ra.role}</td>\r\n <td className=\"py-2 pr-4\">\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-2 py-0.5 rounded\">{ra.level}</span>\r\n </td>\r\n <td className=\"py-2\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {ra.permissions.map(p => (\r\n <span key={p} className=\"text-xs font-mono bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded\">{p}</span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useTranslation } from 'react-i18next';\r\nimport { Rocket, FolderTree, Globe, GitBranch } from 'lucide-react';\r\nimport type { Handoff, FilesToCreate } from '@/types/featureJson';\r\n\r\ninterface SyntheseTabProps {\r\n handoff?: Handoff;\r\n}\r\n\r\nconst CATEGORY_ICONS: Record<string, string> = {\r\n domain: '🏗️',\r\n application: '⚙️',\r\n infrastructure: '🔧',\r\n api: '🌐',\r\n frontend: '🖥️',\r\n seedData: '🌱',\r\n tests: '🧪',\r\n};\r\n\r\nfunction FileCategory({ category, files, t }: { category: keyof FilesToCreate; files: NonNullable<FilesToCreate[keyof FilesToCreate]>; t: (key: string) => string }) {\r\n if (!files.length) return null;\r\n return (\r\n <div className=\"card p-4\">\r\n <h4 className=\"text-sm font-semibold mb-2 flex items-center gap-2\">\r\n <span>{CATEGORY_ICONS[category] || '📁'}</span>\r\n {t(`fileCategory.${category}`)}\r\n <span className=\"text-xs bg-[var(--bg-tertiary)] px-1.5 py-0.5 rounded-full\">{files.length}</span>\r\n </h4>\r\n <div className=\"space-y-1\">\r\n {files.map((file) => (\r\n <div key={file.path} className=\"flex items-start gap-2 text-sm\">\r\n <code className=\"text-xs font-mono text-[var(--color-primary-600)] bg-[var(--bg-secondary)] px-1.5 py-0.5 rounded break-all\">\r\n {file.path}\r\n </code>\r\n {file.description && (\r\n <span className=\"text-[var(--text-tertiary)] text-xs flex-shrink-0\">{file.description}</span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function SyntheseTab({ handoff }: SyntheseTabProps) {\r\n const { t } = useTranslation('ba');\r\n\r\n if (!handoff) {\r\n return <div className=\"text-center py-12\">\r\n <Rocket className=\"w-10 h-10 text-[var(--text-tertiary)] mx-auto mb-3\" />\r\n <p className=\"text-[var(--text-secondary)]\">{t('handoff.noData')}</p>\r\n </div>;\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n {/* Summary cards */}\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n {handoff.complexity && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.complexity')}</p>\r\n <p className=\"text-lg font-bold text-[var(--text-primary)]\">{handoff.complexity}</p>\r\n </div>\r\n )}\r\n {handoff.implementationStrategy && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.strategy')}</p>\r\n <p className=\"text-lg font-bold text-[var(--text-primary)]\">{handoff.implementationStrategy}</p>\r\n </div>\r\n )}\r\n {handoff.totalFiles != null && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.totalFiles')}</p>\r\n <p className=\"text-lg font-bold text-[var(--color-primary-600)]\">{handoff.totalFiles}</p>\r\n </div>\r\n )}\r\n {handoff.totalTasks != null && (\r\n <div className=\"card p-4 text-center\">\r\n <p className=\"text-xs text-[var(--text-tertiary)] mb-1\">{t('handoff.totalTasks')}</p>\r\n <p className=\"text-lg font-bold text-[var(--color-primary-600)]\">{handoff.totalTasks}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Files to create */}\r\n {handoff.filesToCreate && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <FolderTree className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('handoff.filesToCreate')}\r\n </h3>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {(Object.entries(handoff.filesToCreate) as [keyof FilesToCreate, FilesToCreate[keyof FilesToCreate]][]).map(\r\n ([category, files]) => files && files.length > 0 && (\r\n <FileCategory key={category} category={category} files={files} t={t} />\r\n )\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* API Endpoints */}\r\n {handoff.apiEndpointSummary && handoff.apiEndpointSummary.length > 0 && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <Globe className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('handoff.apiEndpoints')}\r\n </h3>\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Method</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Route</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Operation</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Permission</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {handoff.apiEndpointSummary.map((ep) => {\r\n const methodColors: Record<string, string> = {\r\n GET: 'text-green-600',\r\n POST: 'text-blue-600',\r\n PUT: 'text-orange-600',\r\n PATCH: 'text-yellow-600',\r\n DELETE: 'text-red-600',\r\n };\r\n return (\r\n <tr key={`${ep.method}-${ep.route}`} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className={`py-2 pr-4 font-mono text-xs font-bold ${methodColors[ep.method] || ''}`}>{ep.method}</td>\r\n <td className=\"py-2 pr-4 font-mono text-xs\">{ep.route}</td>\r\n <td className=\"py-2 pr-4 text-[var(--text-secondary)]\">{ep.operation}</td>\r\n <td className=\"py-2 font-mono text-xs text-[var(--text-tertiary)]\">{ep.permission}</td>\r\n </tr>\r\n );\r\n })}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* BR to Code mapping */}\r\n {handoff.brToCodeMapping && handoff.brToCodeMapping.length > 0 && (\r\n <div>\r\n <h3 className=\"text-lg font-semibold mb-3 flex items-center gap-2\">\r\n <GitBranch className=\"w-5 h-5 text-[var(--color-primary-600)]\" />\r\n {t('handoff.brMapping')}\r\n </h3>\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full text-sm\">\r\n <thead>\r\n <tr className=\"border-b border-[var(--border-color)]\">\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">Rule</th>\r\n <th className=\"text-left py-2 pr-4 text-xs font-medium text-[var(--text-tertiary)]\">File</th>\r\n <th className=\"text-left py-2 text-xs font-medium text-[var(--text-tertiary)]\">Method</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {handoff.brToCodeMapping.map((mapping) => (\r\n <tr key={`${mapping.ruleId}-${mapping.targetFile}`} className=\"border-b border-[var(--border-color)] last:border-0\">\r\n <td className=\"py-2 pr-4\">\r\n <span className=\"font-mono text-xs text-[var(--color-primary-600)]\">{mapping.ruleId}</span>\r\n {mapping.ruleName && <span className=\"text-xs text-[var(--text-tertiary)] ml-2\">{mapping.ruleName}</span>}\r\n </td>\r\n <td className=\"py-2 pr-4 font-mono text-xs break-all\">{mapping.targetFile}</td>\r\n <td className=\"py-2 font-mono text-xs text-[var(--text-secondary)]\">{mapping.targetMethod}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useEffect } from 'react';\r\nimport { useParams, Link } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ArrowLeft, Target, FileText, Rocket, Loader2 } from 'lucide-react';\r\nimport { businessAnalysisApi } from '@/services/api/businessAnalysisApi';\r\nimport type { ModuleFeatureJson } from '@/types/featureJson';\r\nimport { CadrageTab } from './components/CadrageTab';\r\nimport { SpecificationTab } from './components/SpecificationTab';\r\nimport { SyntheseTab } from './components/SyntheseTab';\r\n\r\ntype TabId = 'cadrage' | 'specification' | 'synthese';\r\n\r\nconst TABS: { id: TabId; icon: typeof Target; labelKey: string }[] = [\r\n { id: 'cadrage', icon: Target, labelKey: 'tabs.cadrage' },\r\n { id: 'specification', icon: FileText, labelKey: 'tabs.specification' },\r\n { id: 'synthese', icon: Rocket, labelKey: 'tabs.synthese' },\r\n];\r\n\r\nconst STATUS_COLORS: Record<string, string> = {\r\n 'draft': 'bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300',\r\n 'analysed': 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300',\r\n 'specified': 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900 dark:text-indigo-300',\r\n 'consolidated': 'bg-purple-100 text-purple-700 dark:bg-purple-900 dark:text-purple-300',\r\n 'handed-off': 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-300',\r\n};\r\n\r\nexport function BaViewerPage() {\r\n const { appCode, moduleCode } = useParams<{ appCode: string; moduleCode?: string }>();\r\n const { t } = useTranslation('ba');\r\n const [feature, setFeature] = useState<ModuleFeatureJson | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [activeTab, setActiveTab] = useState<TabId>('cadrage');\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n businessAnalysisApi.getManifest()\r\n .then(m => {\r\n // Find path from manifest\r\n const entry = m.analyses.find(\r\n e => e.appCode === appCode && (moduleCode ? e.moduleCode === moduleCode : !e.moduleCode)\r\n );\r\n if (entry) {\r\n return businessAnalysisApi.getFeature(entry.path);\r\n }\r\n throw new Error('Entry not found in manifest');\r\n })\r\n .then(setFeature)\r\n .catch(err => setError(err.message))\r\n .finally(() => setLoading(false))\r\n .catch(() => {});\r\n }, [appCode, moduleCode]);\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center py-20\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[var(--color-primary-600)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !feature) {\r\n return (\r\n <div className=\"space-y-4\">\r\n <Link to=\"/system/docs/ba\" className=\"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1\">\r\n <ArrowLeft className=\"w-4 h-4\" />\r\n {t('viewer.backToList')}\r\n </Link>\r\n <div className=\"text-center py-12\">\r\n <p className=\"text-[var(--text-secondary)]\">Feature not found: {appCode}{moduleCode ? `/${moduleCode}` : ''}</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n {/* Back link */}\r\n <Link to=\"/system/docs/ba\" className=\"text-sm text-[var(--color-primary-600)] hover:underline flex items-center gap-1\">\r\n <ArrowLeft className=\"w-4 h-4\" />\r\n {t('viewer.backToList')}\r\n </Link>\r\n\r\n {/* Header */}\r\n <div className=\"flex items-start justify-between\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {feature.metadata.application}\r\n {feature.metadata.module && feature.metadata.module !== feature.metadata.application && (\r\n <span className=\"text-[var(--text-tertiary)]\"> / {feature.metadata.module}</span>\r\n )}\r\n </h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{feature.metadata.featureDescription}</p>\r\n </div>\r\n <div className=\"flex items-center gap-3 flex-shrink-0\">\r\n <span className=\"text-sm text-[var(--text-tertiary)]\">v{feature.version}</span>\r\n <span className={`px-2.5 py-1 rounded-full text-xs font-medium ${STATUS_COLORS[feature.status] || STATUS_COLORS.draft}`}>\r\n {t(`status.${feature.status}`, feature.status)}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Tab bar */}\r\n <div className=\"flex gap-1 border-b border-[var(--border-color)]\">\r\n {TABS.map(tab => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`px-5 py-3 text-sm font-medium border-b-2 transition-colors flex items-center gap-2 ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-primary-600)] text-[var(--color-primary-600)]'\r\n : 'border-transparent text-[var(--text-tertiary)] hover:text-[var(--text-primary)]'\r\n }`}\r\n >\r\n <tab.icon className=\"w-4 h-4\" />\r\n {t(tab.labelKey)}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Tab content */}\r\n <div>\r\n {activeTab === 'cadrage' && <CadrageTab discovery={feature.discovery} />}\r\n {activeTab === 'specification' && <SpecificationTab specification={feature.specification} analysis={feature.analysis} />}\r\n {activeTab === 'synthese' && <SyntheseTab handoff={feature.handoff} />}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ScopeColumn","title","items","color","jsxs","jsx","item","StakeholderCard","stakeholder","t","useTranslation","Users","task","ArrowRight","pain","AlertTriangle","CadrageTab","discovery","Target","CheckCircle","BR_COLORS","PRIORITY_COLORS","UseCaseCard","uc","expanded","setExpanded","useState","ChevronDown","ChevronRight","p","step","alt","rule","SpecificationTab","specification","analysis","section","setSection","hasUC","hasBR","hasEntities","hasPerms","FileText","tabs","BookOpen","Shield","Database","tab","entity","attr","rel","perm","ra","CATEGORY_ICONS","FileCategory","category","files","file","SyntheseTab","handoff","FolderTree","Globe","ep","methodColors","GitBranch","mapping","Rocket","TABS","STATUS_COLORS","BaViewerPage","appCode","moduleCode","useParams","feature","setFeature","loading","setLoading","error","setError","activeTab","setActiveTab","useEffect","businessAnalysisApi","m","entry","e","err","Loader2","Link","ArrowLeft"],"mappings":"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"}