@jmruthers/pace-core 0.5.68 → 0.5.69

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 (375) hide show
  1. package/dist/{DataTable-4IUY7BXB.js → DataTable-MPBSXUC6.js} +5 -6
  2. package/dist/{PublicLoadingSpinner-DdKXTkCZ.d.ts → PublicLoadingSpinner-BOdyU3u-.d.ts} +1 -1
  3. package/dist/{chunk-PXWEDX7Y.js → chunk-2ARQW6VX.js} +3 -3
  4. package/dist/{chunk-MOJXHWDE.js → chunk-6JILXFEA.js} +335 -5
  5. package/dist/chunk-6JILXFEA.js.map +1 -0
  6. package/dist/{chunk-D7ARGIA3.js → chunk-6RBH67W7.js} +23 -6
  7. package/dist/chunk-6RBH67W7.js.map +1 -0
  8. package/dist/{chunk-ZMS23NS5.js → chunk-FJTAWPAQ.js} +3 -5
  9. package/dist/{chunk-ZMS23NS5.js.map → chunk-FJTAWPAQ.js.map} +1 -1
  10. package/dist/{chunk-OPCWH3A4.js → chunk-NO5QHMDX.js} +7 -6
  11. package/dist/chunk-NO5QHMDX.js.map +1 -0
  12. package/dist/{chunk-ZPK5656W.js → chunk-O3NWNXDY.js} +4 -5
  13. package/dist/chunk-O3NWNXDY.js.map +1 -0
  14. package/dist/{chunk-UYA6U6H7.js → chunk-Q2UP3ZWQ.js} +4 -4
  15. package/dist/{chunk-KRCRNXPD.js → chunk-RVYGJPOD.js} +79 -18
  16. package/dist/chunk-RVYGJPOD.js.map +1 -0
  17. package/dist/{chunk-NN45OBIS.js → chunk-UCMHBF7Y.js} +3 -5
  18. package/dist/{chunk-NN45OBIS.js.map → chunk-UCMHBF7Y.js.map} +1 -1
  19. package/dist/{chunk-ZPG4XPV5.js → chunk-V3QO3LL7.js} +5 -7
  20. package/dist/chunk-V3QO3LL7.js.map +1 -0
  21. package/dist/{chunk-U6GPOF6J.js → chunk-ZXJGZLLO.js} +17 -17
  22. package/dist/{chunk-U6GPOF6J.js.map → chunk-ZXJGZLLO.js.map} +1 -1
  23. package/dist/components.d.ts +1 -1
  24. package/dist/components.js +8 -9
  25. package/dist/components.js.map +1 -1
  26. package/dist/hooks.d.ts +1 -1
  27. package/dist/hooks.js +9 -6
  28. package/dist/hooks.js.map +1 -1
  29. package/dist/index.d.ts +3 -3
  30. package/dist/index.js +16 -16
  31. package/dist/index.js.map +1 -1
  32. package/dist/providers.js +5 -7
  33. package/dist/rbac/index.js +5 -6
  34. package/dist/{usePublicRouteParams-CdoFxnJK.d.ts → usePublicRouteParams-Ua1Vz-HG.d.ts} +35 -1
  35. package/dist/utils.d.ts +4 -1
  36. package/dist/utils.js +3 -3
  37. package/docs/DOCUMENTATION_CHECKLIST.md +281 -0
  38. package/docs/README.md +22 -10
  39. package/docs/api/classes/ColumnFactory.md +1 -1
  40. package/docs/api/classes/ErrorBoundary.md +1 -1
  41. package/docs/api/classes/InvalidScopeError.md +1 -1
  42. package/docs/api/classes/MissingUserContextError.md +1 -1
  43. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  44. package/docs/api/classes/PermissionDeniedError.md +1 -1
  45. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  46. package/docs/api/classes/RBACAuditManager.md +1 -1
  47. package/docs/api/classes/RBACCache.md +1 -1
  48. package/docs/api/classes/RBACEngine.md +1 -1
  49. package/docs/api/classes/RBACError.md +1 -1
  50. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  51. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  52. package/docs/api/classes/StorageUtils.md +1 -1
  53. package/docs/api/interfaces/AggregateConfig.md +1 -1
  54. package/docs/api/interfaces/ButtonProps.md +1 -1
  55. package/docs/api/interfaces/CardProps.md +1 -1
  56. package/docs/api/interfaces/ColorPalette.md +1 -1
  57. package/docs/api/interfaces/ColorShade.md +1 -1
  58. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  59. package/docs/api/interfaces/DataTableAction.md +1 -1
  60. package/docs/api/interfaces/DataTableColumn.md +1 -1
  61. package/docs/api/interfaces/DataTableProps.md +1 -1
  62. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  63. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  64. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  65. package/docs/api/interfaces/EventContextType.md +1 -1
  66. package/docs/api/interfaces/EventLogoProps.md +1 -1
  67. package/docs/api/interfaces/EventProviderProps.md +1 -1
  68. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  69. package/docs/api/interfaces/FileUploadProps.md +1 -1
  70. package/docs/api/interfaces/FooterProps.md +1 -1
  71. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  72. package/docs/api/interfaces/InputProps.md +1 -1
  73. package/docs/api/interfaces/LabelProps.md +1 -1
  74. package/docs/api/interfaces/LoginFormProps.md +1 -1
  75. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  76. package/docs/api/interfaces/NavigationContextType.md +1 -1
  77. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  78. package/docs/api/interfaces/NavigationItem.md +1 -1
  79. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  80. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  81. package/docs/api/interfaces/Organisation.md +1 -1
  82. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  83. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  84. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  85. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  86. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  87. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  88. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  89. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  90. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  91. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  92. package/docs/api/interfaces/PaletteData.md +1 -1
  93. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  94. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  95. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  96. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  97. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  98. package/docs/api/interfaces/PublicPageHeaderProps.md +2 -2
  99. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  100. package/docs/api/interfaces/RBACConfig.md +1 -1
  101. package/docs/api/interfaces/RBACContextType.md +1 -1
  102. package/docs/api/interfaces/RBACLogger.md +1 -1
  103. package/docs/api/interfaces/RBACProviderProps.md +1 -1
  104. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  105. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  106. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  107. package/docs/api/interfaces/RouteConfig.md +1 -1
  108. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  109. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  110. package/docs/api/interfaces/StorageConfig.md +1 -1
  111. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  112. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  113. package/docs/api/interfaces/StorageListOptions.md +1 -1
  114. package/docs/api/interfaces/StorageListResult.md +1 -1
  115. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  116. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  117. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  118. package/docs/api/interfaces/StyleImport.md +1 -1
  119. package/docs/api/interfaces/SwitchProps.md +1 -1
  120. package/docs/api/interfaces/ToastActionElement.md +1 -1
  121. package/docs/api/interfaces/ToastProps.md +1 -1
  122. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  123. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  124. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  125. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  126. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  127. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  128. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  129. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  130. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  131. package/docs/api/interfaces/UserEventAccess.md +1 -1
  132. package/docs/api/interfaces/UserMenuProps.md +1 -1
  133. package/docs/api/interfaces/UserProfile.md +1 -1
  134. package/docs/api/modules.md +39 -14
  135. package/docs/architecture/services.md +374 -0
  136. package/docs/best-practices/README.md +1 -1
  137. package/docs/best-practices/testing.md +1 -1
  138. package/docs/breaking-changes.md +182 -0
  139. package/docs/common-patterns.md +445 -0
  140. package/docs/core-concepts/authentication.md +26 -11
  141. package/docs/core-concepts/events.md +2 -0
  142. package/docs/core-concepts/organisations.md +2 -0
  143. package/docs/core-concepts/permissions.md +2 -0
  144. package/docs/{INDEX.md → documentation-index.md} +26 -38
  145. package/docs/faq.md +286 -0
  146. package/docs/{FILE_REFERENCE_SYSTEM.md → file-reference-system.md} +1 -1
  147. package/docs/getting-started/installation-guide.md +284 -0
  148. package/docs/getting-started/quick-start.md +8 -1
  149. package/docs/implementation-guides/app-layout.md +3 -1
  150. package/docs/implementation-guides/data-tables.md +2 -0
  151. package/docs/implementation-guides/dynamic-colors.md +47 -2
  152. package/docs/implementation-guides/event-theming-summary.md +220 -0
  153. package/docs/implementation-guides/forms.md +9 -7
  154. package/docs/implementation-guides/navigation.md +2 -0
  155. package/docs/migration/service-architecture.md +351 -0
  156. package/docs/rbac/README-rbac-rls-integration.md +2 -2
  157. package/docs/rbac/README.md +1 -1
  158. package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
  159. package/docs/rbac/quick-start.md +2 -0
  160. package/docs/rbac/rbac-rls-integration.md +2 -2
  161. package/docs/style-guide.md +136 -1
  162. package/docs/testing/README.md +1 -1
  163. package/docs/troubleshooting/authentication-issues.md +334 -0
  164. package/docs/troubleshooting/common-issues.md +2 -0
  165. package/docs/troubleshooting/styling-issues.md +199 -144
  166. package/docs/usage.md +23 -2
  167. package/package.json +1 -1
  168. package/src/__tests__/{TESTING_GUIDELINES.md → TEST_GUIDE_CURSOR.md} +20 -0
  169. package/src/__tests__/TEST_GUIDE_HUMAN.md +103 -0
  170. package/src/__tests__/fixtures/test-data.ts +90 -0
  171. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +260 -0
  172. package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +224 -0
  173. package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +273 -0
  174. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +98 -0
  175. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +436 -0
  176. package/src/__tests__/helpers/__tests__/timer-utils.test.ts +371 -0
  177. package/src/__tests__/helpers/component-test-utils.tsx +14 -4
  178. package/src/__tests__/helpers/optimized-test-setup.ts +68 -0
  179. package/src/__tests__/helpers/test-providers.tsx +329 -0
  180. package/src/__tests__/helpers/test-utils.tsx +91 -45
  181. package/src/__tests__/helpers/timer-utils.ts +71 -0
  182. package/src/__tests__/hooks/usePermissions.test.ts +1 -5
  183. package/src/__tests__/integration/UserProfile.test.tsx +1 -5
  184. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +42 -12
  185. package/src/__tests__/setup.ts +34 -28
  186. package/src/components/Alert/Alert.test.tsx +1 -5
  187. package/src/components/Avatar/Avatar.test.tsx +1 -5
  188. package/src/components/Button/Button.test.tsx +4 -20
  189. package/src/components/Card/Card.test.tsx +1 -5
  190. package/src/components/Checkbox/Checkbox.test.tsx +1 -5
  191. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +1 -5
  192. package/src/components/DataTable/__tests__/DataTable.test.tsx +45 -49
  193. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +1 -5
  194. package/src/components/DataTable/__tests__/styles.test.ts +382 -0
  195. package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +409 -0
  196. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +634 -0
  197. package/src/components/DataTable/core/__tests__/DataManager.test.ts +519 -0
  198. package/src/components/DataTable/core/__tests__/StateManager.test.ts +714 -0
  199. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +592 -0
  200. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +354 -0
  201. package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +539 -0
  202. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +1 -5
  203. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +1 -8
  204. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +34 -38
  205. package/src/components/Footer/Footer.test.tsx +1 -5
  206. package/src/components/Form/Form.test.tsx +22 -35
  207. package/src/components/Header/Header.test.tsx +1 -9
  208. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +1 -5
  209. package/src/components/Input/Input.test.tsx +2 -10
  210. package/src/components/LoginForm/LoginForm.test.tsx +1 -5
  211. package/src/components/NavigationMenu/NavigationMenu.test.tsx +24 -24
  212. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +1 -6
  213. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +6 -16
  214. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +1 -5
  215. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +1 -5
  216. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +1 -7
  217. package/src/components/PasswordReset/PasswordChangeForm.test.tsx +1 -9
  218. package/src/components/PasswordReset/PasswordResetForm.test.tsx +1 -9
  219. package/src/components/PublicLayout/PublicErrorBoundary.tsx +4 -5
  220. package/src/components/PublicLayout/PublicPageHeader.tsx +13 -9
  221. package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +666 -0
  222. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +457 -0
  223. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +393 -0
  224. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +351 -0
  225. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +374 -0
  226. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +388 -0
  227. package/src/components/Select/Select.bug-test.tsx +69 -0
  228. package/src/components/Select/Select.refactored.tsx +497 -0
  229. package/src/components/Select/Select.test.tsx +42 -49
  230. package/src/components/Select/Select.tsx +5 -2
  231. package/src/components/Select/hooks.ts +254 -0
  232. package/src/components/Switch/Switch.test.tsx +1 -5
  233. package/src/components/Table/__tests__/Table.test.tsx +775 -0
  234. package/src/components/Toast/Toast.test.tsx +15 -8
  235. package/src/components/Tooltip/Tooltip.test.tsx +1 -5
  236. package/src/components/UserMenu/UserMenu.test.tsx +3 -15
  237. package/src/components/__tests__/FileDisplay.test.tsx +575 -0
  238. package/src/components/__tests__/FileUpload.test.tsx +446 -0
  239. package/src/components/__tests__/SuperAdminGuard.test.tsx +422 -354
  240. package/src/hooks/__tests__/ServiceHooks.test.tsx +613 -0
  241. package/src/hooks/__tests__/hooks.integration.test.tsx +1 -10
  242. package/src/hooks/__tests__/useApiFetch.unit.test.ts +10 -14
  243. package/src/hooks/__tests__/useAppConfig.unit.test.ts +307 -0
  244. package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +1 -6
  245. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +1 -5
  246. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +6 -9
  247. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +321 -0
  248. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +583 -0
  249. package/src/hooks/__tests__/usePublicEventLogo.unit.test.ts +640 -0
  250. package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +435 -0
  251. package/src/hooks/__tests__/useRBAC.unit.test.ts +10 -10
  252. package/src/hooks/__tests__/useStorage.unit.test.ts +751 -0
  253. package/src/hooks/index.ts +3 -0
  254. package/src/hooks/public/usePublicEvent.ts +30 -9
  255. package/src/hooks/public/usePublicRouteParams.ts +13 -3
  256. package/src/hooks/services/useAuth.ts +50 -0
  257. package/src/hooks/services/useAuthService.ts +30 -0
  258. package/src/hooks/services/useCurrentEvent.ts +36 -0
  259. package/src/hooks/services/useCurrentOrganisation.ts +52 -0
  260. package/src/hooks/services/useEventService.ts +30 -0
  261. package/src/hooks/services/useInactivityService.ts +30 -0
  262. package/src/hooks/services/useOrganisationService.ts +30 -0
  263. package/src/hooks/services/usePermissions.ts +70 -0
  264. package/src/hooks/services/useRBACService.ts +30 -0
  265. package/src/hooks/useCounter.test.ts +1 -5
  266. package/src/hooks/useEventTheme.ts +86 -0
  267. package/src/hooks/useOrganisationPermissions.test.ts +2 -5
  268. package/src/hooks/useOrganisationSecurity.test.ts +1 -5
  269. package/src/hooks/usePermissionCache.test.ts +1 -5
  270. package/src/hooks/usePermissionCheck.ts +150 -0
  271. package/src/hooks/useSecureDataAccess.test.ts +1 -5
  272. package/src/index.ts +1 -0
  273. package/src/providers/OrganisationProvider.test.tsx +1 -5
  274. package/src/providers/OrganisationProvider.tsx +56 -4
  275. package/src/providers/UnifiedAuthProvider.test.tsx +1 -5
  276. package/src/providers/__tests__/AuthProvider.test.tsx +105 -439
  277. package/src/providers/__tests__/AuthProvider.test.tsx.backup +771 -0
  278. package/src/providers/__tests__/EventProvider.test.tsx +211 -110
  279. package/src/providers/__tests__/EventProvider.test.tsx.backup +824 -0
  280. package/src/providers/__tests__/InactivityProvider.test.tsx +1 -5
  281. package/src/providers/__tests__/OrganisationProvider.test.tsx +97 -261
  282. package/src/providers/__tests__/OrganisationProvider.test.tsx.backup +820 -0
  283. package/src/providers/__tests__/ServiceProviders.test.tsx +477 -0
  284. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +72 -504
  285. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx.backup +911 -0
  286. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx.backup2 +166 -0
  287. package/src/providers/services/AuthServiceProvider.tsx +65 -0
  288. package/src/providers/services/EventServiceProvider.tsx +83 -0
  289. package/src/providers/services/InactivityServiceProvider.tsx +83 -0
  290. package/src/providers/services/OrganisationServiceProvider.tsx +77 -0
  291. package/src/providers/services/RBACServiceProvider.tsx +79 -0
  292. package/src/providers/services/UnifiedAuthProvider.tsx +368 -0
  293. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +210 -0
  294. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +269 -0
  295. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +892 -0
  296. package/src/rbac/__tests__/engine.comprehensive.test.ts +954 -0
  297. package/src/rbac/__tests__/integration.authflow.test.tsx +1 -5
  298. package/src/rbac/__tests__/integration.navigation.test.tsx +1 -4
  299. package/src/rbac/__tests__/rbac-core.test.tsx +2 -7
  300. package/src/rbac/__tests__/rbac-functions.test.ts +1 -9
  301. package/src/rbac/__tests__/rbac-integration.test.ts +1 -9
  302. package/src/rbac/api.test.ts +1 -9
  303. package/src/rbac/cache.test.ts +10 -8
  304. package/src/rbac/cli/__tests__/policy-manager.test.ts +339 -0
  305. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +1 -5
  306. package/src/rbac/components/NavigationProvider.test.tsx +1 -5
  307. package/src/rbac/components/PagePermissionProvider.test.tsx +1 -5
  308. package/src/rbac/components/SecureDataProvider.test.tsx +1 -5
  309. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +25 -29
  310. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +27 -30
  311. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +23 -27
  312. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +18 -22
  313. package/src/rbac/config.test.ts +1 -5
  314. package/src/rbac/hooks/useCan.test.ts +262 -9
  315. package/src/rbac/hooks/usePermissions.test.ts +246 -6
  316. package/src/rbac/hooks/useRBAC.simple.test.ts +1 -5
  317. package/src/rbac/hooks/useRBAC.test.ts +472 -198
  318. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +1 -9
  319. package/src/services/AuthService.ts +416 -0
  320. package/src/services/EventService.ts +366 -0
  321. package/src/services/InactivityService.ts +388 -0
  322. package/src/services/OrganisationService.ts +592 -0
  323. package/src/services/RBACService.ts +522 -0
  324. package/src/services/__tests__/AuthService.test.ts +356 -0
  325. package/src/services/__tests__/BaseService.test.ts +314 -0
  326. package/src/services/__tests__/EventService.test.ts +489 -0
  327. package/src/services/__tests__/InactivityService.test.ts +403 -0
  328. package/src/services/__tests__/OrganisationService.test.ts +660 -0
  329. package/src/services/__tests__/RBACService.test.ts +492 -0
  330. package/src/services/base/BaseService.ts +87 -0
  331. package/src/services/interfaces/IAuthService.ts +39 -0
  332. package/src/services/interfaces/IEventService.ts +30 -0
  333. package/src/services/interfaces/IInactivityService.ts +31 -0
  334. package/src/services/interfaces/IOrganisationService.ts +41 -0
  335. package/src/services/interfaces/IRBACService.ts +62 -0
  336. package/src/theming/__tests__/runtime.test.ts +540 -0
  337. package/src/types/__tests__/file-reference.test.ts +447 -0
  338. package/src/types/__tests__/organisation.test.ts +1133 -0
  339. package/src/types/__tests__/theme.test.ts +830 -0
  340. package/src/types/__tests__/type-validation.test.ts +527 -0
  341. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +1 -5
  342. package/src/utils/__tests__/debugLogger.test.ts +417 -0
  343. package/src/utils/__tests__/deviceFingerprint.unit.test.ts +1 -6
  344. package/src/utils/__tests__/dynamicUtils.unit.test.ts +1 -5
  345. package/src/utils/__tests__/lazyLoad.unit.test.tsx +35 -35
  346. package/src/utils/__tests__/organisationContext.unit.test.ts +1 -5
  347. package/src/utils/__tests__/performanceBudgets.unit.test.ts +5 -11
  348. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -6
  349. package/src/utils/__tests__/secureStorage.unit.test.ts +1 -5
  350. package/src/utils/__tests__/securityMonitor.unit.test.ts +1 -5
  351. package/src/utils/__tests__/sessionTracking.unit.test.ts +1 -5
  352. package/src/utils/appIdResolver.test.ts +6 -10
  353. package/src/utils/appNameResolver.simple.test.ts +142 -0
  354. package/src/utils/appNameResolver.test.ts +31 -458
  355. package/src/utils/appNameResolver.test.ts.backup +494 -0
  356. package/src/utils/debugLogger.ts +26 -5
  357. package/src/utils/formatDate.test.ts +1 -5
  358. package/src/utils/organisationContext.test.ts +1 -5
  359. package/src/utils/performanceBudgets.ts +3 -4
  360. package/src/utils/secureDataAccess.test.ts +1 -5
  361. package/src/utils/storage/__tests__/helpers.unit.test.ts +1 -5
  362. package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +1 -5
  363. package/dist/chunk-D7ARGIA3.js.map +0 -1
  364. package/dist/chunk-IPCH4YPT.js +0 -315
  365. package/dist/chunk-IPCH4YPT.js.map +0 -1
  366. package/dist/chunk-KRCRNXPD.js.map +0 -1
  367. package/dist/chunk-MOJXHWDE.js.map +0 -1
  368. package/dist/chunk-OPCWH3A4.js.map +0 -1
  369. package/dist/chunk-ZPG4XPV5.js.map +0 -1
  370. package/dist/chunk-ZPK5656W.js.map +0 -1
  371. package/docs/getting-started/installation.md +0 -269
  372. package/src/__tests__/REBUILD_PLAN.md +0 -223
  373. /package/dist/{DataTable-4IUY7BXB.js.map → DataTable-MPBSXUC6.js.map} +0 -0
  374. /package/dist/{chunk-PXWEDX7Y.js.map → chunk-2ARQW6VX.js.map} +0 -0
  375. /package/dist/{chunk-UYA6U6H7.js.map → chunk-Q2UP3ZWQ.js.map} +0 -0
@@ -91,11 +91,7 @@ describe('ErrorBoundary Component', () => {
91
91
  });
92
92
  });
93
93
 
94
- afterEach(() => {
95
- vi.restoreAllMocks();
96
- });
97
-
98
- describe('Normal Rendering', () => {
94
+ describe('Normal Rendering', () => {
99
95
  it('renders children when no error occurs', () => {
100
96
  renderWithProviders(
101
97
  <ErrorBoundary>
@@ -145,7 +141,7 @@ describe('ErrorBoundary Component', () => {
145
141
  await waitFor(() => {
146
142
  expect(screen.getByText('Error in TestComponent')).toBeInTheDocument();
147
143
  expect(screen.getByText('Test error')).toBeInTheDocument();
148
- });
144
+ }, { interval: 10 });
149
145
 
150
146
  consoleSpy.mockRestore();
151
147
  });
@@ -161,7 +157,7 @@ describe('ErrorBoundary Component', () => {
161
157
 
162
158
  await waitFor(() => {
163
159
  expect(screen.getByText('An unexpected error occurred.')).toBeInTheDocument();
164
- });
160
+ }, { interval: 10 });
165
161
 
166
162
  consoleSpy.mockRestore();
167
163
  });
@@ -181,7 +177,7 @@ describe('ErrorBoundary Component', () => {
181
177
  await waitFor(() => {
182
178
  expect(screen.getByText('Custom error message')).toBeInTheDocument();
183
179
  expect(screen.queryByRole('alert')).not.toBeInTheDocument();
184
- });
180
+ }, { interval: 10 });
185
181
 
186
182
  consoleSpy.mockRestore();
187
183
  });
@@ -199,7 +195,7 @@ describe('ErrorBoundary Component', () => {
199
195
  const errorElement = screen.getByText('Error in Component').closest('[data-error-boundary]');
200
196
  const firstErrorId = errorElement?.getAttribute('data-error-boundary');
201
197
  expect(firstErrorId).toBeTruthy();
202
- });
198
+ }, { interval: 10 });
203
199
 
204
200
  // Trigger another error
205
201
  rerender(
@@ -212,7 +208,7 @@ describe('ErrorBoundary Component', () => {
212
208
  const errorElement = screen.getByText('Error in Component').closest('[data-error-boundary]');
213
209
  const secondErrorId = errorElement?.getAttribute('data-error-boundary');
214
210
  expect(secondErrorId).toBeTruthy();
215
- });
211
+ }, { interval: 10 });
216
212
 
217
213
  consoleSpy.mockRestore();
218
214
  });
@@ -230,7 +226,7 @@ describe('ErrorBoundary Component', () => {
230
226
 
231
227
  await waitFor(() => {
232
228
  expect(screen.getByText('Retry (1/3)')).toBeInTheDocument();
233
- });
229
+ }, { interval: 10 });
234
230
 
235
231
  consoleSpy.mockRestore();
236
232
  });
@@ -246,7 +242,7 @@ describe('ErrorBoundary Component', () => {
246
242
 
247
243
  await waitFor(() => {
248
244
  expect(screen.queryByText(/retry/i)).not.toBeInTheDocument();
249
- });
245
+ }, { interval: 10 });
250
246
 
251
247
  consoleSpy.mockRestore();
252
248
  });
@@ -262,14 +258,14 @@ describe('ErrorBoundary Component', () => {
262
258
 
263
259
  await waitFor(() => {
264
260
  expect(screen.getByText('Retry (1/3)')).toBeInTheDocument();
265
- });
261
+ }, { interval: 10 });
266
262
 
267
263
  const retryButton = screen.getByText('Retry (1/3)');
268
264
  fireEvent.click(retryButton);
269
265
 
270
266
  await waitFor(() => {
271
267
  expect(screen.getByText('Retry (2/3)')).toBeInTheDocument();
272
- });
268
+ }, { interval: 10 });
273
269
 
274
270
  consoleSpy.mockRestore();
275
271
  });
@@ -286,14 +282,14 @@ describe('ErrorBoundary Component', () => {
286
282
  // Click retry twice to reach max retries
287
283
  await waitFor(() => {
288
284
  expect(screen.getByText('Retry (1/2)')).toBeInTheDocument();
289
- });
285
+ }, { interval: 10 });
290
286
 
291
287
  const firstRetryButton = screen.getByText('Retry (1/2)');
292
288
  fireEvent.click(firstRetryButton);
293
289
 
294
290
  await waitFor(() => {
295
291
  expect(screen.getByText('Retry (2/2)')).toBeInTheDocument();
296
- });
292
+ }, { interval: 10 });
297
293
 
298
294
  const secondRetryButton = screen.getByText('Retry (2/2)');
299
295
  fireEvent.click(secondRetryButton);
@@ -301,7 +297,7 @@ describe('ErrorBoundary Component', () => {
301
297
  await waitFor(() => {
302
298
  expect(screen.getByText('Maximum retry attempts reached. Please reload the page or contact support.')).toBeInTheDocument();
303
299
  expect(screen.queryByText(/Retry \(/)).not.toBeInTheDocument();
304
- });
300
+ }, { interval: 10 });
305
301
 
306
302
  consoleSpy.mockRestore();
307
303
  });
@@ -318,7 +314,7 @@ describe('ErrorBoundary Component', () => {
318
314
  // Wait for error to be caught
319
315
  await waitFor(() => {
320
316
  expect(screen.getByText('Error in Component')).toBeInTheDocument();
321
- });
317
+ }, { interval: 10 });
322
318
 
323
319
  // Click retry - this should reset the error state
324
320
  const retryButton = screen.getByText(/retry/i);
@@ -327,7 +323,7 @@ describe('ErrorBoundary Component', () => {
327
323
  // Should show retry count increased
328
324
  await waitFor(() => {
329
325
  expect(screen.getByText('Retry (2/3)')).toBeInTheDocument();
330
- });
326
+ }, { interval: 10 });
331
327
 
332
328
  consoleSpy.mockRestore();
333
329
  });
@@ -351,7 +347,7 @@ describe('ErrorBoundary Component', () => {
351
347
  expect.any(Object), // errorInfo
352
348
  expect.any(String) // errorId
353
349
  );
354
- });
350
+ }, { interval: 10 });
355
351
 
356
352
  consoleSpy.mockRestore();
357
353
  });
@@ -396,7 +392,7 @@ describe('ErrorBoundary Component', () => {
396
392
  expect.any(Error),
397
393
  expect.any(Object)
398
394
  );
399
- });
395
+ }, { interval: 10 });
400
396
 
401
397
  consoleSpy.mockRestore();
402
398
  });
@@ -416,7 +412,7 @@ describe('ErrorBoundary Component', () => {
416
412
  const errorElement = screen.getByText('Error in Component').closest('[role="alert"]');
417
413
  expect(errorElement).toBeInTheDocument();
418
414
  expect(errorElement).toHaveAttribute('role', 'alert');
419
- });
415
+ }, { interval: 10 });
420
416
 
421
417
  consoleSpy.mockRestore();
422
418
  });
@@ -434,7 +430,7 @@ describe('ErrorBoundary Component', () => {
434
430
  const retryButton = screen.getByText(/retry/i);
435
431
  expect(retryButton).toBeInTheDocument();
436
432
  expect(retryButton.tagName).toBe('BUTTON');
437
- });
433
+ }, { interval: 10 });
438
434
 
439
435
  consoleSpy.mockRestore();
440
436
  });
@@ -452,7 +448,7 @@ describe('ErrorBoundary Component', () => {
452
448
  const reloadButton = screen.getByText('Reload Page');
453
449
  expect(reloadButton).toBeInTheDocument();
454
450
  expect(reloadButton.tagName).toBe('BUTTON');
455
- });
451
+ }, { interval: 10 });
456
452
 
457
453
  consoleSpy.mockRestore();
458
454
  });
@@ -470,7 +466,7 @@ describe('ErrorBoundary Component', () => {
470
466
  const heading = screen.getByText('Error in TestComponent');
471
467
  expect(heading).toBeInTheDocument();
472
468
  expect(heading.tagName).toBe('H3');
473
- });
469
+ }, { interval: 10 });
474
470
 
475
471
  consoleSpy.mockRestore();
476
472
  });
@@ -492,7 +488,7 @@ describe('ErrorBoundary Component', () => {
492
488
  await waitFor(() => {
493
489
  expect(screen.getByText('Error Details (Development)')).toBeInTheDocument();
494
490
  expect(screen.getByText(/Error ID:/)).toBeInTheDocument();
495
- });
491
+ }, { interval: 10 });
496
492
 
497
493
  vi.unstubAllEnvs();
498
494
  consoleSpy.mockRestore();
@@ -513,7 +509,7 @@ describe('ErrorBoundary Component', () => {
513
509
  await waitFor(() => {
514
510
  expect(screen.queryByText('Error Details (Development)')).not.toBeInTheDocument();
515
511
  expect(screen.queryByText(/Error ID:/)).not.toBeInTheDocument();
516
- });
512
+ }, { interval: 10 });
517
513
 
518
514
  vi.unstubAllEnvs();
519
515
  consoleSpy.mockRestore();
@@ -532,7 +528,7 @@ describe('ErrorBoundary Component', () => {
532
528
 
533
529
  await waitFor(() => {
534
530
  expect(screen.getByText('Reload Page')).toBeInTheDocument();
535
- });
531
+ }, { interval: 10 });
536
532
 
537
533
  fireEvent.click(screen.getByText('Reload Page'));
538
534
 
@@ -553,13 +549,13 @@ describe('ErrorBoundary Component', () => {
553
549
  // Click retry to reach max retries
554
550
  await waitFor(() => {
555
551
  expect(screen.getByText('Retry (1/1)')).toBeInTheDocument();
556
- });
552
+ }, { interval: 10 });
557
553
 
558
554
  fireEvent.click(screen.getByText(/retry/i));
559
555
 
560
556
  await waitFor(() => {
561
557
  expect(screen.getByText(/Maximum retry attempts reached/)).toBeInTheDocument();
562
- });
558
+ }, { interval: 10 });
563
559
 
564
560
  fireEvent.click(screen.getByText('Reload Page'));
565
561
 
@@ -581,7 +577,7 @@ describe('ErrorBoundary Component', () => {
581
577
 
582
578
  await waitFor(() => {
583
579
  expect(screen.getByText('Error in Component')).toBeInTheDocument();
584
- });
580
+ }, { interval: 10 });
585
581
 
586
582
  // Re-render with same props
587
583
  rerender(
@@ -607,7 +603,7 @@ describe('ErrorBoundary Component', () => {
607
603
 
608
604
  await waitFor(() => {
609
605
  expect(screen.getByText('Error in Component')).toBeInTheDocument();
610
- });
606
+ }, { interval: 10 });
611
607
 
612
608
  // Change to non-throwing component - error boundary should maintain error state
613
609
  rerender(
@@ -640,7 +636,7 @@ describe('ErrorBoundary Component', () => {
640
636
 
641
637
  await waitFor(() => {
642
638
  expect(screen.getByText('Error in Parent')).toBeInTheDocument();
643
- });
639
+ }, { interval: 10 });
644
640
 
645
641
  consoleSpy.mockRestore();
646
642
  });
@@ -660,7 +656,7 @@ describe('ErrorBoundary Component', () => {
660
656
  await waitFor(() => {
661
657
  expect(screen.getByText('Outer content')).toBeInTheDocument();
662
658
  expect(screen.getByText('Error in Inner')).toBeInTheDocument();
663
- });
659
+ }, { interval: 10 });
664
660
 
665
661
  consoleSpy.mockRestore();
666
662
  });
@@ -676,7 +672,7 @@ describe('ErrorBoundary Component', () => {
676
672
 
677
673
  await waitFor(() => {
678
674
  expect(screen.getByText('Error in Component')).toBeInTheDocument();
679
- });
675
+ }, { interval: 10 });
680
676
 
681
677
  consoleSpy.mockRestore();
682
678
  });
@@ -692,7 +688,7 @@ describe('ErrorBoundary Component', () => {
692
688
 
693
689
  await waitFor(() => {
694
690
  expect(screen.getByText('An unexpected error occurred.')).toBeInTheDocument();
695
- });
691
+ }, { interval: 10 });
696
692
 
697
693
  consoleSpy.mockRestore();
698
694
  });
@@ -721,7 +717,7 @@ describe('ErrorBoundary Component', () => {
721
717
 
722
718
  await waitFor(() => {
723
719
  expect(screen.getByText('Error in Component')).toBeInTheDocument();
724
- });
720
+ }, { interval: 10 });
725
721
 
726
722
  // Rapidly change between error and non-error states
727
723
  // Note: Error boundaries maintain error state once triggered
@@ -744,7 +740,7 @@ describe('ErrorBoundary Component', () => {
744
740
 
745
741
  await waitFor(() => {
746
742
  expect(screen.getByText('Error in Component')).toBeInTheDocument();
747
- });
743
+ }, { interval: 10 });
748
744
 
749
745
  consoleSpy.mockRestore();
750
746
  });
@@ -24,11 +24,7 @@ const mockDate = new Date('2024-01-01');
24
24
  vi.spyOn(global, 'Date').mockImplementation(() => mockDate as any);
25
25
 
26
26
  describe('Footer Component', () => {
27
- beforeEach(() => {
28
- vi.clearAllMocks();
29
- });
30
-
31
- describe('Rendering', () => {
27
+ describe('Rendering', () => {
32
28
  it('renders with default props', () => {
33
29
  renderWithProviders(<Footer />);
34
30
 
@@ -41,11 +41,7 @@ vi.mock('../Alert', () => ({
41
41
  describe('Form Component', () => {
42
42
  const user = userEvent.setup();
43
43
 
44
- beforeEach(() => {
45
- vi.clearAllMocks();
46
- });
47
-
48
- describe('Rendering', () => {
44
+ describe('Rendering', () => {
49
45
  it('renders with basic props', () => {
50
46
  const onSubmit = vi.fn();
51
47
 
@@ -356,11 +352,7 @@ describe('Form Component', () => {
356
352
  describe('FormField Component', () => {
357
353
  const user = userEvent.setup();
358
354
 
359
- beforeEach(() => {
360
- vi.clearAllMocks();
361
- });
362
-
363
- describe('Rendering', () => {
355
+ describe('Rendering', () => {
364
356
  it('renders with basic props', () => {
365
357
  const onSubmit = vi.fn();
366
358
 
@@ -575,11 +567,7 @@ describe('FormField Component', () => {
575
567
  });
576
568
 
577
569
  describe('FormFieldset Component', () => {
578
- beforeEach(() => {
579
- vi.clearAllMocks();
580
- });
581
-
582
- describe('Rendering', () => {
570
+ describe('Rendering', () => {
583
571
  it('renders with legend', () => {
584
572
  renderWithProviders(
585
573
  <FormFieldset legend="Personal Information">
@@ -675,11 +663,7 @@ describe('FormFieldset Component', () => {
675
663
  });
676
664
 
677
665
  describe('FormErrorSummary Component', () => {
678
- beforeEach(() => {
679
- vi.clearAllMocks();
680
- });
681
-
682
- describe('Rendering', () => {
666
+ describe('Rendering', () => {
683
667
  it('renders nothing when no errors', () => {
684
668
  renderWithProviders(
685
669
  <FormErrorSummary errors={{}} />
@@ -780,16 +764,7 @@ describe('FormErrorSummary Component', () => {
780
764
  });
781
765
 
782
766
  describe('FormLiveRegion Component', () => {
783
- beforeEach(() => {
784
- vi.clearAllMocks();
785
- vi.useFakeTimers();
786
- });
787
-
788
- afterEach(() => {
789
- vi.useRealTimers();
790
- });
791
-
792
- describe('Rendering', () => {
767
+ describe('Rendering', () => {
793
768
  it('renders nothing when no message', () => {
794
769
  const mockForm = {
795
770
  formState: {
@@ -867,6 +842,8 @@ describe('FormLiveRegion Component', () => {
867
842
  });
868
843
 
869
844
  it('announces successful submission', async () => {
845
+ vi.useFakeTimers();
846
+
870
847
  const mockForm = {
871
848
  formState: {
872
849
  isSubmitting: false,
@@ -888,9 +865,13 @@ describe('FormLiveRegion Component', () => {
888
865
 
889
866
  // The message should be set after the timeout
890
867
  expect(screen.getByRole('status')).toHaveTextContent('Form submitted successfully');
868
+
869
+ vi.useRealTimers();
891
870
  });
892
871
 
893
872
  it('announces custom success message', async () => {
873
+ vi.useFakeTimers();
874
+
894
875
  const mockForm = {
895
876
  formState: {
896
877
  isSubmitting: false,
@@ -913,6 +894,8 @@ describe('FormLiveRegion Component', () => {
913
894
  });
914
895
 
915
896
  expect(screen.getByRole('status')).toHaveTextContent('Your data was saved successfully!');
897
+
898
+ vi.useRealTimers();
916
899
  });
917
900
 
918
901
  it('announces form errors', async () => {
@@ -981,6 +964,8 @@ describe('FormLiveRegion Component', () => {
981
964
 
982
965
  describe('Field-Level Announcements', () => {
983
966
  it('announces field errors when enabled', async () => {
967
+ vi.useFakeTimers();
968
+
984
969
  const mockForm = {
985
970
  formState: {
986
971
  isSubmitting: false,
@@ -1003,9 +988,13 @@ describe('FormLiveRegion Component', () => {
1003
988
  });
1004
989
 
1005
990
  expect(screen.getByRole('status')).toHaveTextContent('name: Name is required');
991
+
992
+ vi.useRealTimers();
1006
993
  });
1007
994
 
1008
995
  it('does not announce field errors when disabled', () => {
996
+ vi.useFakeTimers();
997
+
1009
998
  const mockForm = {
1010
999
  formState: {
1011
1000
  isSubmitting: false,
@@ -1025,6 +1014,8 @@ describe('FormLiveRegion Component', () => {
1025
1014
 
1026
1015
  vi.advanceTimersByTime(500);
1027
1016
 
1017
+ vi.useRealTimers();
1018
+
1028
1019
  expect(screen.queryByText('name: Name is required')).not.toBeInTheDocument();
1029
1020
  });
1030
1021
  });
@@ -1079,11 +1070,7 @@ describe('FormLiveRegion Component', () => {
1079
1070
  describe('Integration', () => {
1080
1071
  const user = userEvent.setup();
1081
1072
 
1082
- beforeEach(() => {
1083
- vi.clearAllMocks();
1084
- });
1085
-
1086
- it('works with complete form setup', async () => {
1073
+ it('works with complete form setup', async () => {
1087
1074
  const onSubmit = vi.fn();
1088
1075
  const onError = vi.fn();
1089
1076
  const schema = z.object({
@@ -89,15 +89,7 @@ const mockProps: HeaderProps = {
89
89
  };
90
90
 
91
91
  describe('Header Component', () => {
92
- beforeEach(() => {
93
- vi.clearAllMocks();
94
- });
95
-
96
- afterEach(() => {
97
- vi.clearAllMocks();
98
- });
99
-
100
- // Basic rendering tests
92
+ // Basic rendering tests
101
93
  describe('Rendering', () => {
102
94
  it('renders with default props', () => {
103
95
  renderWithProviders(<Header />);
@@ -72,11 +72,7 @@ describe('InactivityWarningModal Component', () => {
72
72
  onSignOutNow: vi.fn(),
73
73
  };
74
74
 
75
- beforeEach(() => {
76
- vi.clearAllMocks();
77
- });
78
-
79
- describe('Rendering', () => {
75
+ describe('Rendering', () => {
80
76
  it('renders when isOpen is true', () => {
81
77
  renderWithProviders(<InactivityWarningModal {...defaultProps} />);
82
78
 
@@ -11,11 +11,7 @@ import { Input, InputGroup } from './Input';
11
11
  import { renderWithProviders } from '../../__tests__/helpers/test-utils';
12
12
 
13
13
  describe('Input Component', () => {
14
- beforeEach(() => {
15
- vi.clearAllMocks();
16
- });
17
-
18
- // Basic rendering tests
14
+ // Basic rendering tests
19
15
  describe('Rendering', () => {
20
16
  it('renders with default props', () => {
21
17
  renderWithProviders(<Input />);
@@ -268,11 +264,7 @@ describe('Input Component', () => {
268
264
  });
269
265
 
270
266
  describe('InputGroup Component', () => {
271
- beforeEach(() => {
272
- vi.clearAllMocks();
273
- });
274
-
275
- // Basic rendering tests
267
+ // Basic rendering tests
276
268
  describe('Rendering', () => {
277
269
  it('renders with default props', () => {
278
270
  renderWithProviders(
@@ -109,11 +109,7 @@ describe('LoginForm Component', () => {
109
109
  onSignIn: vi.fn(),
110
110
  };
111
111
 
112
- beforeEach(() => {
113
- vi.clearAllMocks();
114
- });
115
-
116
- describe('Rendering', () => {
112
+ describe('Rendering', () => {
117
113
  it('renders with default props', () => {
118
114
  renderWithProviders(<LoginForm {...defaultProps} />);
119
115