@jmruthers/pace-core 0.5.191 → 0.6.1

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 (380) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +7 -1
  3. package/cursor-rules/00-pace-core-compliance.mdc +372 -0
  4. package/cursor-rules/01-standards-compliance.mdc +275 -0
  5. package/cursor-rules/02-project-structure.mdc +200 -0
  6. package/cursor-rules/03-solid-principles.mdc +341 -0
  7. package/cursor-rules/04-testing-standards.mdc +315 -0
  8. package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
  9. package/cursor-rules/06-code-quality.mdc +392 -0
  10. package/cursor-rules/07-tech-stack-compliance.mdc +309 -0
  11. package/cursor-rules/CHANGELOG.md +101 -0
  12. package/cursor-rules/README.md +191 -0
  13. package/dist/{AuthService-CbP_utw2.d.ts → AuthService-DjnJHDtC.d.ts} +1 -0
  14. package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-CH1U5Tpy.d.ts} +1 -1
  15. package/dist/{DataTable-WKRZD47S.js → DataTable-DQ7RSOHE.js} +8 -7
  16. package/dist/{PublicPageProvider-ULXC_u6U.d.ts → PublicPageProvider-ce4xlHYA.d.ts} +37 -156
  17. package/dist/{UnifiedAuthProvider-BYA9qB-o.d.ts → UnifiedAuthProvider-185Ih4dj.d.ts} +2 -0
  18. package/dist/{UnifiedAuthProvider-FTSG5XH7.js → UnifiedAuthProvider-ATAP5UTR.js} +3 -3
  19. package/dist/{api-IHKALJZD.js → api-N774RPUA.js} +2 -2
  20. package/dist/{chunk-6C4YBBJM.js → chunk-3QRJFVBR.js} +1 -1
  21. package/dist/chunk-3QRJFVBR.js.map +1 -0
  22. package/dist/{chunk-OETXORNB.js → chunk-3XTALGJF.js} +211 -136
  23. package/dist/chunk-3XTALGJF.js.map +1 -0
  24. package/dist/{chunk-6TQDD426.js → chunk-4N5C5XZU.js} +47 -228
  25. package/dist/chunk-4N5C5XZU.js.map +1 -0
  26. package/dist/{chunk-LOMZXPSN.js → chunk-4ZC4GX36.js} +47 -74
  27. package/dist/chunk-4ZC4GX36.js.map +1 -0
  28. package/dist/{chunk-6LTQQAT6.js → chunk-BYFSK72L.js} +357 -158
  29. package/dist/chunk-BYFSK72L.js.map +1 -0
  30. package/dist/{chunk-XYXSXPUK.js → chunk-EXUD6RNJ.js} +50 -10
  31. package/dist/chunk-EXUD6RNJ.js.map +1 -0
  32. package/dist/{chunk-VKB2CO4Z.js → chunk-GLK6VM3F.js} +244 -249
  33. package/dist/chunk-GLK6VM3F.js.map +1 -0
  34. package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
  35. package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
  36. package/dist/{chunk-XNYQOL3Z.js → chunk-JBKQ3SAO.js} +9 -18
  37. package/dist/chunk-JBKQ3SAO.js.map +1 -0
  38. package/dist/{chunk-ROXMHMY2.js → chunk-KNC55RTG.js} +13 -3
  39. package/dist/{chunk-ROXMHMY2.js.map → chunk-KNC55RTG.js.map} +1 -1
  40. package/dist/{chunk-QWWZ5CAQ.js → chunk-LXQLPRQ2.js} +2 -2
  41. package/dist/{chunk-ULHIJK66.js → chunk-T33XF5ZC.js} +255 -140
  42. package/dist/chunk-T33XF5ZC.js.map +1 -0
  43. package/dist/{chunk-VRGWKHDB.js → chunk-XM25TVIE.js} +100 -33
  44. package/dist/chunk-XM25TVIE.js.map +1 -0
  45. package/dist/components.d.ts +4 -4
  46. package/dist/components.js +9 -9
  47. package/dist/hooks.d.ts +6 -6
  48. package/dist/hooks.js +20 -25
  49. package/dist/hooks.js.map +1 -1
  50. package/dist/index.d.ts +11 -11
  51. package/dist/index.js +18 -21
  52. package/dist/index.js.map +1 -1
  53. package/dist/providers.d.ts +3 -3
  54. package/dist/providers.js +2 -2
  55. package/dist/rbac/index.d.ts +2 -20
  56. package/dist/rbac/index.js +7 -9
  57. package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-BJAlWfuJ.d.ts} +3 -3
  58. package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
  59. package/dist/utils.d.ts +1 -1
  60. package/dist/utils.js +3 -3
  61. package/docs/api/classes/ColumnFactory.md +1 -1
  62. package/docs/api/classes/ErrorBoundary.md +1 -1
  63. package/docs/api/classes/InvalidScopeError.md +1 -1
  64. package/docs/api/classes/Logger.md +1 -1
  65. package/docs/api/classes/MissingUserContextError.md +1 -1
  66. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  67. package/docs/api/classes/PermissionDeniedError.md +2 -2
  68. package/docs/api/classes/RBACAuditManager.md +2 -2
  69. package/docs/api/classes/RBACCache.md +1 -1
  70. package/docs/api/classes/RBACEngine.md +2 -2
  71. package/docs/api/classes/RBACError.md +1 -1
  72. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  73. package/docs/api/classes/SecureSupabaseClient.md +10 -10
  74. package/docs/api/classes/StorageUtils.md +1 -1
  75. package/docs/api/enums/FileCategory.md +1 -1
  76. package/docs/api/enums/LogLevel.md +1 -1
  77. package/docs/api/enums/RBACErrorCode.md +1 -1
  78. package/docs/api/enums/RPCFunction.md +1 -1
  79. package/docs/api/interfaces/AddressFieldProps.md +1 -1
  80. package/docs/api/interfaces/AddressFieldRef.md +1 -1
  81. package/docs/api/interfaces/AggregateConfig.md +1 -1
  82. package/docs/api/interfaces/AutocompleteOptions.md +1 -1
  83. package/docs/api/interfaces/AvatarProps.md +1 -1
  84. package/docs/api/interfaces/BadgeProps.md +1 -1
  85. package/docs/api/interfaces/ButtonProps.md +1 -1
  86. package/docs/api/interfaces/CalendarProps.md +1 -1
  87. package/docs/api/interfaces/CardProps.md +1 -1
  88. package/docs/api/interfaces/ColorPalette.md +1 -1
  89. package/docs/api/interfaces/ColorShade.md +1 -1
  90. package/docs/api/interfaces/ComplianceResult.md +1 -1
  91. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  92. package/docs/api/interfaces/DataRecord.md +1 -1
  93. package/docs/api/interfaces/DataTableAction.md +1 -1
  94. package/docs/api/interfaces/DataTableColumn.md +1 -1
  95. package/docs/api/interfaces/DataTableProps.md +1 -1
  96. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  97. package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
  98. package/docs/api/interfaces/DatabaseIssue.md +1 -1
  99. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  100. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  101. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  102. package/docs/api/interfaces/ExportColumn.md +1 -1
  103. package/docs/api/interfaces/ExportOptions.md +1 -1
  104. package/docs/api/interfaces/FileDisplayProps.md +24 -11
  105. package/docs/api/interfaces/FileMetadata.md +1 -1
  106. package/docs/api/interfaces/FileReference.md +1 -1
  107. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  108. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  109. package/docs/api/interfaces/FileUploadProps.md +1 -1
  110. package/docs/api/interfaces/FooterProps.md +1 -1
  111. package/docs/api/interfaces/FormFieldProps.md +1 -1
  112. package/docs/api/interfaces/FormProps.md +1 -1
  113. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  114. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  115. package/docs/api/interfaces/InputProps.md +1 -1
  116. package/docs/api/interfaces/LabelProps.md +1 -1
  117. package/docs/api/interfaces/LoggerConfig.md +1 -1
  118. package/docs/api/interfaces/LoginFormProps.md +1 -1
  119. package/docs/api/interfaces/NavigationAccessRecord.md +2 -2
  120. package/docs/api/interfaces/NavigationContextType.md +1 -1
  121. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  122. package/docs/api/interfaces/NavigationItem.md +1 -1
  123. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  124. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  125. package/docs/api/interfaces/Organisation.md +1 -1
  126. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  127. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  128. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  129. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  130. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  131. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  132. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  133. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  134. package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
  135. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  136. package/docs/api/interfaces/PaletteData.md +1 -1
  137. package/docs/api/interfaces/ParsedAddress.md +1 -1
  138. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  139. package/docs/api/interfaces/ProgressProps.md +1 -1
  140. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  141. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  142. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  143. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  144. package/docs/api/interfaces/QuickFix.md +1 -1
  145. package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
  146. package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
  147. package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
  148. package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
  149. package/docs/api/interfaces/RBACConfig.md +2 -2
  150. package/docs/api/interfaces/RBACContext.md +1 -1
  151. package/docs/api/interfaces/RBACLogger.md +1 -1
  152. package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
  153. package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
  154. package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
  155. package/docs/api/interfaces/RBACPermissionCheckResult.md +2 -2
  156. package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
  157. package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
  158. package/docs/api/interfaces/RBACResult.md +1 -1
  159. package/docs/api/interfaces/RBACRoleGrantParams.md +2 -2
  160. package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
  161. package/docs/api/interfaces/RBACRoleRevokeParams.md +2 -2
  162. package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
  163. package/docs/api/interfaces/RBACRoleValidateParams.md +2 -2
  164. package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
  165. package/docs/api/interfaces/RBACRolesListParams.md +1 -1
  166. package/docs/api/interfaces/RBACRolesListResult.md +2 -2
  167. package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
  168. package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
  169. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  170. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  171. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  172. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  173. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  174. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  175. package/docs/api/interfaces/RouteConfig.md +2 -2
  176. package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
  177. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  178. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  179. package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
  180. package/docs/api/interfaces/SetupIssue.md +1 -1
  181. package/docs/api/interfaces/StorageConfig.md +1 -1
  182. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  183. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  184. package/docs/api/interfaces/StorageListOptions.md +1 -1
  185. package/docs/api/interfaces/StorageListResult.md +1 -1
  186. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  187. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  188. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  189. package/docs/api/interfaces/StyleImport.md +1 -1
  190. package/docs/api/interfaces/SwitchProps.md +1 -1
  191. package/docs/api/interfaces/TabsContentProps.md +1 -1
  192. package/docs/api/interfaces/TabsListProps.md +1 -1
  193. package/docs/api/interfaces/TabsProps.md +1 -1
  194. package/docs/api/interfaces/TabsTriggerProps.md +1 -1
  195. package/docs/api/interfaces/TextareaProps.md +1 -1
  196. package/docs/api/interfaces/ToastActionElement.md +1 -1
  197. package/docs/api/interfaces/ToastProps.md +1 -1
  198. package/docs/api/interfaces/UnifiedAuthContextType.md +60 -38
  199. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  200. package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
  201. package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
  202. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  203. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  204. package/docs/api/interfaces/UsePublicEventLogoOptions.md +2 -2
  205. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  206. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  207. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  208. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
  209. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  210. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  211. package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
  212. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  213. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  214. package/docs/api/interfaces/UserEventAccess.md +1 -1
  215. package/docs/api/interfaces/UserMenuProps.md +1 -1
  216. package/docs/api/interfaces/UserProfile.md +1 -1
  217. package/docs/api/modules.md +194 -209
  218. package/docs/getting-started/cursor-rules.md +262 -0
  219. package/docs/getting-started/installation-guide.md +6 -1
  220. package/docs/getting-started/quick-start.md +6 -1
  221. package/docs/migration/MIGRATION_GUIDE.md +4 -4
  222. package/docs/migration/REACT_19_MIGRATION.md +227 -0
  223. package/docs/migration/database-changes-december-2025.md +2 -1
  224. package/docs/rbac/event-based-apps.md +124 -6
  225. package/docs/standards/README.md +39 -0
  226. package/docs/troubleshooting/migration.md +4 -4
  227. package/examples/PublicPages/PublicEventPage.tsx +1 -1
  228. package/package.json +11 -6
  229. package/scripts/audit-consuming-app.cjs +961 -0
  230. package/scripts/check-pace-core-compliance.cjs +315 -61
  231. package/scripts/install-cursor-rules.cjs +236 -0
  232. package/src/__tests__/helpers/test-providers.tsx +1 -1
  233. package/src/__tests__/helpers/test-utils.tsx +1 -1
  234. package/src/__tests__/rls-policies.test.ts +3 -1
  235. package/src/components/Badge/Badge.tsx +2 -4
  236. package/src/components/Button/Button.tsx +5 -4
  237. package/src/components/Calendar/Calendar.tsx +1 -1
  238. package/src/components/DataTable/DataTable.test.tsx +57 -93
  239. package/src/components/DataTable/DataTable.tsx +2 -2
  240. package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +172 -45
  241. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +121 -28
  242. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +9 -8
  243. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +20 -52
  244. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +170 -34
  245. package/src/components/DataTable/__tests__/keyboard.test.tsx +75 -12
  246. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +88 -16
  247. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
  248. package/src/components/DataTable/components/AccessDeniedPage.tsx +1 -1
  249. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +1 -1
  250. package/src/components/DataTable/components/DataTableCore.tsx +4 -7
  251. package/src/components/DataTable/components/DataTableModals.tsx +1 -1
  252. package/src/components/DataTable/components/EditableRow.tsx +1 -1
  253. package/src/components/DataTable/components/UnifiedTableBody.tsx +86 -17
  254. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
  255. package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
  256. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
  257. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
  258. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
  259. package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
  260. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
  261. package/src/components/DataTable/hooks/useColumnReordering.ts +2 -2
  262. package/src/components/DataTable/hooks/useDataTablePermissions.ts +75 -10
  263. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
  264. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
  265. package/src/components/Dialog/Dialog.tsx +6 -5
  266. package/src/components/ErrorBoundary/ErrorBoundary.tsx +1 -1
  267. package/src/components/EventSelector/EventSelector.tsx +1 -1
  268. package/src/components/FileDisplay/FileDisplay.test.tsx +4 -3
  269. package/src/components/FileDisplay/FileDisplay.tsx +16 -4
  270. package/src/components/Footer/Footer.tsx +1 -1
  271. package/src/components/Form/Form.test.tsx +36 -15
  272. package/src/components/Form/Form.tsx +30 -26
  273. package/src/components/Header/Header.tsx +1 -1
  274. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
  275. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
  276. package/src/components/Input/Input.tsx +28 -30
  277. package/src/components/Label/Label.tsx +1 -1
  278. package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
  279. package/src/components/LoginForm/LoginForm.test.tsx +42 -42
  280. package/src/components/LoginForm/LoginForm.tsx +8 -8
  281. package/src/components/NavigationMenu/NavigationMenu.test.tsx +6 -4
  282. package/src/components/NavigationMenu/NavigationMenu.tsx +2 -11
  283. package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -1
  284. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
  285. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +75 -52
  286. package/src/components/PaceAppLayout/PaceAppLayout.tsx +98 -69
  287. package/src/components/PaceAppLayout/README.md +1 -1
  288. package/src/components/PaceLoginPage/PaceLoginPage.tsx +1 -8
  289. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
  290. package/src/components/PasswordChange/PasswordChangeForm.tsx +1 -1
  291. package/src/components/Progress/Progress.tsx +1 -1
  292. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +5 -9
  293. package/src/components/ProtectedRoute/ProtectedRoute.tsx +0 -1
  294. package/src/components/PublicLayout/PublicPageLayout.tsx +1 -1
  295. package/src/components/PublicLayout/PublicPageProvider.tsx +0 -1
  296. package/src/components/Select/Select.tsx +33 -22
  297. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +1 -1
  298. package/src/components/Table/Table.tsx +1 -1
  299. package/src/components/Textarea/Textarea.tsx +27 -29
  300. package/src/components/Toast/Toast.tsx +1 -1
  301. package/src/components/Tooltip/Tooltip.tsx +1 -1
  302. package/src/components/UserMenu/UserMenu.tsx +1 -1
  303. package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
  304. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +14 -7
  305. package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
  306. package/src/hooks/public/usePublicEvent.ts +1 -1
  307. package/src/hooks/public/usePublicEventLogo.ts +1 -1
  308. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  309. package/src/hooks/services/useAuthService.ts +21 -3
  310. package/src/hooks/services/useEventService.ts +21 -3
  311. package/src/hooks/services/useInactivityService.ts +21 -3
  312. package/src/hooks/services/useOrganisationService.ts +21 -3
  313. package/src/hooks/useDataTableState.ts +8 -18
  314. package/src/hooks/useFileDisplay.ts +10 -17
  315. package/src/hooks/useFocusManagement.ts +2 -2
  316. package/src/hooks/useFocusTrap.ts +4 -4
  317. package/src/hooks/useFormDialog.ts +8 -7
  318. package/src/hooks/useInactivityTracker.ts +1 -1
  319. package/src/hooks/usePermissionCache.ts +1 -1
  320. package/src/hooks/useSecureDataAccess.test.ts +16 -9
  321. package/src/hooks/useSecureDataAccess.ts +22 -6
  322. package/src/hooks/useToast.ts +2 -2
  323. package/src/providers/__tests__/OrganisationProvider.test.tsx +57 -13
  324. package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
  325. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
  326. package/src/providers/services/EventServiceProvider.tsx +0 -8
  327. package/src/providers/services/UnifiedAuthProvider.tsx +196 -46
  328. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +13 -3
  329. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +34 -40
  330. package/src/rbac/__tests__/isSuperAdmin.real.test.ts +82 -0
  331. package/src/rbac/adapters.tsx +3 -22
  332. package/src/rbac/api.test.ts +2 -2
  333. package/src/rbac/api.ts +7 -1
  334. package/src/rbac/components/EnhancedNavigationMenu.tsx +3 -16
  335. package/src/rbac/components/NavigationGuard.tsx +2 -11
  336. package/src/rbac/components/NavigationProvider.tsx +1 -2
  337. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  338. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  339. package/src/rbac/components/PermissionEnforcer.tsx +46 -13
  340. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  341. package/src/rbac/components/SecureDataProvider.tsx +1 -2
  342. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +7 -43
  343. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +4 -11
  344. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +3 -3
  345. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +1 -1
  346. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +1 -1
  347. package/src/rbac/engine.ts +14 -2
  348. package/src/rbac/hooks/index.ts +0 -3
  349. package/src/rbac/hooks/usePermissions.ts +51 -11
  350. package/src/rbac/hooks/useRBAC.ts +3 -13
  351. package/src/rbac/hooks/useResolvedScope.test.ts +75 -54
  352. package/src/rbac/hooks/useResolvedScope.ts +58 -33
  353. package/src/rbac/hooks/useSecureSupabase.ts +4 -9
  354. package/src/rbac/secureClient.ts +43 -0
  355. package/src/services/EventService.ts +4 -57
  356. package/src/services/InactivityService.ts +127 -34
  357. package/src/services/OrganisationService.ts +68 -10
  358. package/src/utils/security/secureDataAccess.test.ts +31 -20
  359. package/src/utils/security/secureDataAccess.ts +4 -3
  360. package/dist/chunk-6C4YBBJM.js.map +0 -1
  361. package/dist/chunk-6LTQQAT6.js.map +0 -1
  362. package/dist/chunk-6TQDD426.js.map +0 -1
  363. package/dist/chunk-LOMZXPSN.js.map +0 -1
  364. package/dist/chunk-OETXORNB.js.map +0 -1
  365. package/dist/chunk-ULHIJK66.js.map +0 -1
  366. package/dist/chunk-VKB2CO4Z.js.map +0 -1
  367. package/dist/chunk-VRGWKHDB.js.map +0 -1
  368. package/dist/chunk-XNYQOL3Z.js.map +0 -1
  369. package/dist/chunk-XYXSXPUK.js.map +0 -1
  370. package/scripts/check-pace-core-compliance.js +0 -512
  371. package/src/rbac/hooks/useSuperAdminBypass.ts +0 -126
  372. package/src/utils/context/superAdminOverride.ts +0 -58
  373. /package/dist/{DataTable-WKRZD47S.js.map → DataTable-DQ7RSOHE.js.map} +0 -0
  374. /package/dist/{UnifiedAuthProvider-FTSG5XH7.js.map → UnifiedAuthProvider-ATAP5UTR.js.map} +0 -0
  375. /package/dist/{api-IHKALJZD.js.map → api-N774RPUA.js.map} +0 -0
  376. /package/dist/{chunk-QWWZ5CAQ.js.map → chunk-LXQLPRQ2.js.map} +0 -0
  377. /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
  378. /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
  379. /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
  380. /package/examples/{rbac → RBAC}/index.ts +0 -0
@@ -273,7 +273,7 @@ const TestWrapper = ({ children }: { children: React.ReactNode }) => (
273
273
  );
274
274
 
275
275
  describe('PaceAppLayout Component', () => {
276
- const defaultProps = {
276
+ const baseProps = {
277
277
  appName: 'Test App',
278
278
  };
279
279
 
@@ -296,7 +296,7 @@ describe('PaceAppLayout Component', () => {
296
296
  it('renders with default props', () => {
297
297
  renderWithProviders(
298
298
  <TestWrapper>
299
- <PaceAppLayout {...defaultProps} />
299
+ <PaceAppLayout {...baseProps} />
300
300
  </TestWrapper>,
301
301
  { withRouter: false }
302
302
  );
@@ -309,7 +309,7 @@ describe('PaceAppLayout Component', () => {
309
309
  it('renders with custom app name', () => {
310
310
  renderWithProviders(
311
311
  <TestWrapper>
312
- <PaceAppLayout {...defaultProps} appName="Custom App" />
312
+ <PaceAppLayout {...baseProps} appName="Custom App" />
313
313
  </TestWrapper>,
314
314
  { withRouter: false }
315
315
  );
@@ -325,7 +325,7 @@ describe('PaceAppLayout Component', () => {
325
325
 
326
326
  renderWithProviders(
327
327
  <TestWrapper>
328
- <PaceAppLayout {...defaultProps} navItems={customNavItems} />
328
+ <PaceAppLayout {...baseProps} navItems={customNavItems} />
329
329
  </TestWrapper>,
330
330
  { withRouter: false }
331
331
  );
@@ -337,7 +337,7 @@ describe('PaceAppLayout Component', () => {
337
337
  it('renders with default navigation items when none provided', () => {
338
338
  renderWithProviders(
339
339
  <TestWrapper>
340
- <PaceAppLayout {...defaultProps} />
340
+ <PaceAppLayout {...baseProps} />
341
341
  </TestWrapper>,
342
342
  { withRouter: false }
343
343
  );
@@ -352,7 +352,7 @@ describe('PaceAppLayout Component', () => {
352
352
 
353
353
  renderWithProviders(
354
354
  <TestWrapper>
355
- <PaceAppLayout {...defaultProps} headerActions={headerActions} />
355
+ <PaceAppLayout {...baseProps} headerActions={headerActions} />
356
356
  </TestWrapper>,
357
357
  { withRouter: false }
358
358
  );
@@ -365,7 +365,7 @@ describe('PaceAppLayout Component', () => {
365
365
 
366
366
  renderWithProviders(
367
367
  <TestWrapper>
368
- <PaceAppLayout {...defaultProps} customLogo={customLogo} />
368
+ <PaceAppLayout {...baseProps} customLogo={customLogo} />
369
369
  </TestWrapper>,
370
370
  { withRouter: false }
371
371
  );
@@ -378,7 +378,7 @@ describe('PaceAppLayout Component', () => {
378
378
 
379
379
  renderWithProviders(
380
380
  <TestWrapper>
381
- <PaceAppLayout {...defaultProps} customUserMenu={customUserMenu} />
381
+ <PaceAppLayout {...baseProps} customUserMenu={customUserMenu} />
382
382
  </TestWrapper>,
383
383
  { withRouter: false }
384
384
  );
@@ -389,7 +389,7 @@ describe('PaceAppLayout Component', () => {
389
389
  it('renders with custom header className', () => {
390
390
  renderWithProviders(
391
391
  <TestWrapper>
392
- <PaceAppLayout {...defaultProps} headerClassName="custom-header" />
392
+ <PaceAppLayout {...baseProps} headerClassName="custom-header" />
393
393
  </TestWrapper>,
394
394
  { withRouter: false }
395
395
  );
@@ -402,7 +402,7 @@ describe('PaceAppLayout Component', () => {
402
402
  it('uses default header className when not provided', () => {
403
403
  renderWithProviders(
404
404
  <TestWrapper>
405
- <PaceAppLayout {...defaultProps} />
405
+ <PaceAppLayout {...baseProps} />
406
406
  </TestWrapper>,
407
407
  { withRouter: false }
408
408
  );
@@ -416,7 +416,7 @@ describe('PaceAppLayout Component', () => {
416
416
  it('shows event selector by default', () => {
417
417
  renderWithProviders(
418
418
  <TestWrapper>
419
- <PaceAppLayout {...defaultProps} />
419
+ <PaceAppLayout {...baseProps} />
420
420
  </TestWrapper>,
421
421
  { withRouter: false }
422
422
  );
@@ -427,7 +427,7 @@ describe('PaceAppLayout Component', () => {
427
427
  it('hides event selector when showEventSelector is false', () => {
428
428
  renderWithProviders(
429
429
  <TestWrapper>
430
- <PaceAppLayout {...defaultProps} showEventSelector={false} />
430
+ <PaceAppLayout {...baseProps} showEventSelector={false} />
431
431
  </TestWrapper>,
432
432
  { withRouter: false }
433
433
  );
@@ -438,7 +438,7 @@ describe('PaceAppLayout Component', () => {
438
438
  it('shows event selector when showEventSelector is explicitly true', () => {
439
439
  renderWithProviders(
440
440
  <TestWrapper>
441
- <PaceAppLayout {...defaultProps} showEventSelector={true} />
441
+ <PaceAppLayout {...baseProps} showEventSelector={true} />
442
442
  </TestWrapper>,
443
443
  { withRouter: false }
444
444
  );
@@ -451,7 +451,7 @@ describe('PaceAppLayout Component', () => {
451
451
  it('shows user menu by default', () => {
452
452
  renderWithProviders(
453
453
  <TestWrapper>
454
- <PaceAppLayout {...defaultProps} />
454
+ <PaceAppLayout {...baseProps} />
455
455
  </TestWrapper>,
456
456
  { withRouter: false }
457
457
  );
@@ -462,7 +462,7 @@ describe('PaceAppLayout Component', () => {
462
462
  it('hides user menu when showUserMenu is false', () => {
463
463
  renderWithProviders(
464
464
  <TestWrapper>
465
- <PaceAppLayout {...defaultProps} showUserMenu={false} />
465
+ <PaceAppLayout {...baseProps} showUserMenu={false} />
466
466
  </TestWrapper>,
467
467
  { withRouter: false }
468
468
  );
@@ -476,7 +476,7 @@ describe('PaceAppLayout Component', () => {
476
476
  const user = userEvent.setup();
477
477
  renderWithProviders(
478
478
  <TestWrapper>
479
- <PaceAppLayout {...defaultProps} />
479
+ <PaceAppLayout {...baseProps} />
480
480
  </TestWrapper>,
481
481
  { withRouter: false }
482
482
  );
@@ -489,7 +489,7 @@ describe('PaceAppLayout Component', () => {
489
489
  const user = userEvent.setup();
490
490
  renderWithProviders(
491
491
  <TestWrapper>
492
- <PaceAppLayout {...defaultProps} />
492
+ <PaceAppLayout {...baseProps} />
493
493
  </TestWrapper>,
494
494
  { withRouter: false }
495
495
  );
@@ -507,7 +507,7 @@ describe('PaceAppLayout Component', () => {
507
507
 
508
508
  renderWithProviders(
509
509
  <TestWrapper>
510
- <PaceAppLayout {...defaultProps} navItems={customNavItems} />
510
+ <PaceAppLayout {...baseProps} navItems={customNavItems} />
511
511
  </TestWrapper>,
512
512
  { withRouter: false }
513
513
  );
@@ -522,7 +522,7 @@ describe('PaceAppLayout Component', () => {
522
522
  it('passes current path to header', () => {
523
523
  renderWithProviders(
524
524
  <TestWrapper>
525
- <PaceAppLayout {...defaultProps} />
525
+ <PaceAppLayout {...baseProps} />
526
526
  </TestWrapper>,
527
527
  { withRouter: false }
528
528
  );
@@ -536,7 +536,7 @@ describe('PaceAppLayout Component', () => {
536
536
  it('renders normally when enforcePermissions is false', () => {
537
537
  renderWithProviders(
538
538
  <TestWrapper>
539
- <PaceAppLayout {...defaultProps} enforcePermissions={false} />
539
+ <PaceAppLayout {...baseProps} enforcePermissions={false} />
540
540
  </TestWrapper>,
541
541
  { withRouter: false }
542
542
  );
@@ -547,7 +547,26 @@ describe('PaceAppLayout Component', () => {
547
547
 
548
548
  it('shows loading state when checking permissions', async () => {
549
549
  // Mock useCan to return loading state
550
- mockUseCan.mockReturnValueOnce({
550
+ // Need to ensure currentPageId is set so permission checking happens
551
+ // Use a path that will result in a valid pageId (e.g., '/dashboard' -> 'dashboard')
552
+ mockLocation.pathname = '/dashboard';
553
+
554
+ // Mock useRBAC to return non-super-admin so permission check isn't bypassed
555
+ // Also ensure isSuperAdminDirect check returns false
556
+ mockIsSuperAdminAPI.mockResolvedValue(false);
557
+ mockUseRBAC.mockReturnValue({
558
+ isSuperAdmin: false,
559
+ isLoading: false,
560
+ hasPermission: vi.fn(),
561
+ hasAnyPermission: vi.fn(),
562
+ hasRole: vi.fn(),
563
+ hasAnyRole: vi.fn(),
564
+ permissionMap: {},
565
+ roleMap: {},
566
+ });
567
+
568
+ // Mock useCan to return loading state - use mockReturnValue to ensure it persists
569
+ mockUseCan.mockReturnValue({
551
570
  can: false,
552
571
  isLoading: true,
553
572
  error: null,
@@ -556,12 +575,16 @@ describe('PaceAppLayout Component', () => {
556
575
 
557
576
  renderWithProviders(
558
577
  <TestWrapper>
559
- <PaceAppLayout {...defaultProps} enforcePermissions={true} />
578
+ <PaceAppLayout {...baseProps} enforcePermissions={true} />
560
579
  </TestWrapper>,
561
580
  { withRouter: false }
562
581
  );
563
582
 
564
- expect(screen.getByText('Checking permissions...')).toBeInTheDocument();
583
+ // Wait for loading state to appear
584
+ // The component should show loading state when isCheckingPermission is true
585
+ await waitFor(() => {
586
+ expect(screen.getByText('Checking permissions...')).toBeInTheDocument();
587
+ }, { timeout: 2000 });
565
588
  expect(screen.queryByTestId('header')).not.toBeInTheDocument();
566
589
  });
567
590
 
@@ -579,7 +602,7 @@ describe('PaceAppLayout Component', () => {
579
602
 
580
603
  renderWithProviders(
581
604
  <TestWrapper>
582
- <PaceAppLayout {...defaultProps} enforcePermissions={true} />
605
+ <PaceAppLayout {...baseProps} enforcePermissions={true} />
583
606
  </TestWrapper>,
584
607
  { withRouter: false }
585
608
  );
@@ -612,7 +635,7 @@ describe('PaceAppLayout Component', () => {
612
635
 
613
636
  renderWithProviders(
614
637
  <TestWrapper>
615
- <PaceAppLayout {...defaultProps} enforcePermissions={true} />
638
+ <PaceAppLayout {...baseProps} enforcePermissions={true} />
616
639
  </TestWrapper>,
617
640
  { withRouter: false }
618
641
  );
@@ -644,7 +667,7 @@ describe('PaceAppLayout Component', () => {
644
667
 
645
668
  renderWithProviders(
646
669
  <TestWrapper>
647
- <PaceAppLayout {...defaultProps} enforcePermissions={true} />
670
+ <PaceAppLayout {...baseProps} enforcePermissions={true} />
648
671
  </TestWrapper>,
649
672
  { withRouter: false }
650
673
  );
@@ -681,7 +704,7 @@ describe('PaceAppLayout Component', () => {
681
704
 
682
705
  renderWithProviders(
683
706
  <TestWrapper>
684
- <PaceAppLayout {...defaultProps} enforcePermissions={true} />
707
+ <PaceAppLayout {...baseProps} enforcePermissions={true} />
685
708
  </TestWrapper>,
686
709
  { withRouter: false }
687
710
  );
@@ -719,7 +742,7 @@ describe('PaceAppLayout Component', () => {
719
742
  renderWithProviders(
720
743
  <TestWrapper>
721
744
  <PaceAppLayout
722
- {...defaultProps}
745
+ {...baseProps}
723
746
  enforcePermissions={true}
724
747
  permissionFallback={customFallback}
725
748
  />
@@ -755,7 +778,7 @@ describe('PaceAppLayout Component', () => {
755
778
  renderWithProviders(
756
779
  <TestWrapper>
757
780
  <PaceAppLayout
758
- {...defaultProps}
781
+ {...baseProps}
759
782
  enforcePermissions={true}
760
783
  enforcePagePermissions={true}
761
784
  pagePermissionFallback={pageFallback}
@@ -791,7 +814,7 @@ describe('PaceAppLayout Component', () => {
791
814
  renderWithProviders(
792
815
  <TestWrapper>
793
816
  <PaceAppLayout
794
- {...defaultProps}
817
+ {...baseProps}
795
818
  navItems={customNavItems}
796
819
  enforcePermissions={true}
797
820
  routePermissions={{
@@ -827,7 +850,7 @@ describe('PaceAppLayout Component', () => {
827
850
  renderWithProviders(
828
851
  <TestWrapper>
829
852
  <PaceAppLayout
830
- {...defaultProps}
853
+ {...baseProps}
831
854
  navItems={customNavItems}
832
855
  enforcePermissions={false}
833
856
  routePermissions={{
@@ -852,7 +875,7 @@ describe('PaceAppLayout Component', () => {
852
875
  renderWithProviders(
853
876
  <TestWrapper>
854
877
  <PaceAppLayout
855
- {...defaultProps}
878
+ {...baseProps}
856
879
  enforcePermissions={true}
857
880
  routePermissions={{
858
881
  '/dashboard': 'update',
@@ -886,7 +909,7 @@ describe('PaceAppLayout Component', () => {
886
909
  renderWithProviders(
887
910
  <TestWrapper>
888
911
  <PaceAppLayout
889
- {...defaultProps}
912
+ {...baseProps}
890
913
  enforcePermissions={true}
891
914
  defaultPermission="create"
892
915
  routePermissions={{
@@ -924,7 +947,7 @@ describe('PaceAppLayout Component', () => {
924
947
  renderWithProviders(
925
948
  <TestWrapper>
926
949
  <PaceAppLayout
927
- {...defaultProps}
950
+ {...baseProps}
928
951
  enforcePermissions={true}
929
952
  />
930
953
  </TestWrapper>,
@@ -953,7 +976,7 @@ describe('PaceAppLayout Component', () => {
953
976
  renderWithProviders(
954
977
  <TestWrapper>
955
978
  <PaceAppLayout
956
- {...defaultProps}
979
+ {...baseProps}
957
980
  enforcePermissions={true}
958
981
  onPageAccessDenied={onPageAccessDenied}
959
982
  />
@@ -981,7 +1004,7 @@ describe('PaceAppLayout Component', () => {
981
1004
  renderWithProviders(
982
1005
  <TestWrapper>
983
1006
  <PaceAppLayout
984
- {...defaultProps}
1007
+ {...baseProps}
985
1008
  enforcePermissions={true}
986
1009
  strictMode={true}
987
1010
  onStrictModeViolation={onStrictModeViolation}
@@ -1013,7 +1036,7 @@ describe('PaceAppLayout Component', () => {
1013
1036
  renderWithProviders(
1014
1037
  <TestWrapper>
1015
1038
  <PaceAppLayout
1016
- {...defaultProps}
1039
+ {...baseProps}
1017
1040
  roleBasedRouting={true}
1018
1041
  routeConfig={routeConfig}
1019
1042
  onRouteAccessDenied={onRouteAccessDenied}
@@ -1042,7 +1065,7 @@ describe('PaceAppLayout Component', () => {
1042
1065
  renderWithProviders(
1043
1066
  <TestWrapper>
1044
1067
  <PaceAppLayout
1045
- {...defaultProps}
1068
+ {...baseProps}
1046
1069
  roleBasedRouting={true}
1047
1070
  routeConfig={routeConfig}
1048
1071
  strictMode={true}
@@ -1084,7 +1107,7 @@ describe('PaceAppLayout Component', () => {
1084
1107
  renderWithProviders(
1085
1108
  <FallbackWrapper>
1086
1109
  <PaceAppLayout
1087
- {...defaultProps}
1110
+ {...baseProps}
1088
1111
  roleBasedRouting={true}
1089
1112
  strictMode={true}
1090
1113
  fallbackRoute="/no-access"
@@ -1128,7 +1151,7 @@ describe('PaceAppLayout Component', () => {
1128
1151
  renderWithProviders(
1129
1152
  <TestWrapper>
1130
1153
  <PaceAppLayout
1131
- {...defaultProps}
1154
+ {...baseProps}
1132
1155
  enforcePermissions={true}
1133
1156
  />
1134
1157
  </TestWrapper>,
@@ -1170,7 +1193,7 @@ describe('PaceAppLayout Component', () => {
1170
1193
  renderWithProviders(
1171
1194
  <TestWrapper>
1172
1195
  <PaceAppLayout
1173
- {...defaultProps}
1196
+ {...baseProps}
1174
1197
  enforcePermissions={true}
1175
1198
  />
1176
1199
  </TestWrapper>,
@@ -1194,7 +1217,7 @@ describe('PaceAppLayout Component', () => {
1194
1217
  it('renders with proper semantic HTML elements', () => {
1195
1218
  renderWithProviders(
1196
1219
  <TestWrapper>
1197
- <PaceAppLayout {...defaultProps} />
1220
+ <PaceAppLayout {...baseProps} />
1198
1221
  </TestWrapper>,
1199
1222
  { withRouter: false }
1200
1223
  );
@@ -1207,7 +1230,7 @@ describe('PaceAppLayout Component', () => {
1207
1230
  it('provides proper main content area', () => {
1208
1231
  renderWithProviders(
1209
1232
  <TestWrapper>
1210
- <PaceAppLayout {...defaultProps} />
1233
+ <PaceAppLayout {...baseProps} />
1211
1234
  </TestWrapper>,
1212
1235
  { withRouter: false }
1213
1236
  );
@@ -1220,7 +1243,7 @@ describe('PaceAppLayout Component', () => {
1220
1243
  it('renders main content area with proper styling', () => {
1221
1244
  renderWithProviders(
1222
1245
  <TestWrapper>
1223
- <PaceAppLayout {...defaultProps} />
1246
+ <PaceAppLayout {...baseProps} />
1224
1247
  </TestWrapper>,
1225
1248
  { withRouter: false }
1226
1249
  );
@@ -1234,7 +1257,7 @@ describe('PaceAppLayout Component', () => {
1234
1257
  it('has accessible navigation', () => {
1235
1258
  renderWithProviders(
1236
1259
  <TestWrapper>
1237
- <PaceAppLayout {...defaultProps} />
1260
+ <PaceAppLayout {...baseProps} />
1238
1261
  </TestWrapper>,
1239
1262
  { withRouter: false }
1240
1263
  );
@@ -1246,7 +1269,7 @@ describe('PaceAppLayout Component', () => {
1246
1269
  it('has accessible user menu', () => {
1247
1270
  renderWithProviders(
1248
1271
  <TestWrapper>
1249
- <PaceAppLayout {...defaultProps} />
1272
+ <PaceAppLayout {...baseProps} />
1250
1273
  </TestWrapper>,
1251
1274
  { withRouter: false }
1252
1275
  );
@@ -1260,7 +1283,7 @@ describe('PaceAppLayout Component', () => {
1260
1283
  it('provides meaningful text for screen readers', () => {
1261
1284
  renderWithProviders(
1262
1285
  <TestWrapper>
1263
- <PaceAppLayout {...defaultProps} />
1286
+ <PaceAppLayout {...baseProps} />
1264
1287
  </TestWrapper>,
1265
1288
  { withRouter: false }
1266
1289
  );
@@ -1275,7 +1298,7 @@ describe('PaceAppLayout Component', () => {
1275
1298
  const user = userEvent.setup();
1276
1299
  renderWithProviders(
1277
1300
  <TestWrapper>
1278
- <PaceAppLayout {...defaultProps} />
1301
+ <PaceAppLayout {...baseProps} />
1279
1302
  </TestWrapper>,
1280
1303
  { withRouter: false }
1281
1304
  );
@@ -1291,7 +1314,7 @@ describe('PaceAppLayout Component', () => {
1291
1314
  it('handles empty navigation items array', () => {
1292
1315
  renderWithProviders(
1293
1316
  <TestWrapper>
1294
- <PaceAppLayout {...defaultProps} navItems={[]} />
1317
+ <PaceAppLayout {...baseProps} navItems={[]} />
1295
1318
  </TestWrapper>,
1296
1319
  { withRouter: false }
1297
1320
  );
@@ -1309,7 +1332,7 @@ describe('PaceAppLayout Component', () => {
1309
1332
  renderWithProviders(
1310
1333
  <TestWrapper>
1311
1334
  <PaceAppLayout
1312
- {...defaultProps}
1335
+ {...baseProps}
1313
1336
  navItems={navItemsWithoutHref}
1314
1337
  enforcePermissions={false}
1315
1338
  />
@@ -1326,7 +1349,7 @@ describe('PaceAppLayout Component', () => {
1326
1349
  // without breaking. We don't enforce permissions to simplify the test.
1327
1350
  const { rerender } = renderWithProviders(
1328
1351
  <TestWrapper>
1329
- <PaceAppLayout {...defaultProps} enforcePermissions={false} />
1352
+ <PaceAppLayout {...baseProps} enforcePermissions={false} />
1330
1353
  </TestWrapper>,
1331
1354
  { withRouter: false }
1332
1355
  );
@@ -1340,7 +1363,7 @@ describe('PaceAppLayout Component', () => {
1340
1363
  mockLocation.pathname = '/settings';
1341
1364
  rerender(
1342
1365
  <TestWrapper>
1343
- <PaceAppLayout {...defaultProps} enforcePermissions={false} />
1366
+ <PaceAppLayout {...baseProps} enforcePermissions={false} />
1344
1367
  </TestWrapper>
1345
1368
  );
1346
1369