@jmruthers/pace-core 0.5.76 → 0.5.77

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 (446) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{RBACService-C4udt_Zp.d.ts → AuthService-SBHZQtCH.d.ts} +5 -118
  3. package/dist/{DataTable-ntgmhO2W.d.ts → DataTable-BE0OXZKQ.d.ts} +9 -2
  4. package/dist/{DataTable-4GAVPIEG.js → DataTable-QCNCV6IK.js} +50 -13
  5. package/dist/{PublicLoadingSpinner-BiNER8F5.d.ts → PublicLoadingSpinner-CnUaz0vG.d.ts} +5 -2
  6. package/dist/{UnifiedAuthProvider-Bj6YCf7c.d.ts → UnifiedAuthProvider-B391Aqum.d.ts} +42 -45
  7. package/dist/{UnifiedAuthProvider-3NKDOSOK.js → UnifiedAuthProvider-Z2FWNW7O.js} +4 -5
  8. package/dist/{api-DDMUKIUD.js → api-KG4A2X7P.js} +9 -3
  9. package/dist/{audit-6TOCAMKO.js → audit-65VNHEV2.js} +2 -2
  10. package/dist/{chunk-K34IM5CT.js → chunk-7PX43UYN.js} +196 -626
  11. package/dist/chunk-7PX43UYN.js.map +1 -0
  12. package/dist/{chunk-Y6TXWPJO.js → chunk-C4RQ3GQA.js} +105 -31
  13. package/dist/chunk-C4RQ3GQA.js.map +1 -0
  14. package/dist/{chunk-LW7MMEAQ.js → chunk-CRKP3HXI.js} +2 -2
  15. package/dist/{chunk-XLZ7U46Z.js → chunk-CVMVPYAL.js} +9 -60
  16. package/dist/chunk-CVMVPYAL.js.map +1 -0
  17. package/dist/{chunk-M5IWZRBT.js → chunk-DDPG7FCX.js} +2187 -981
  18. package/dist/chunk-DDPG7FCX.js.map +1 -0
  19. package/dist/{chunk-URUTVZ7N.js → chunk-DVHZ5L55.js} +2 -2
  20. package/dist/{chunk-5BSLGBYI.js → chunk-JCQZ6LA7.js} +2 -8
  21. package/dist/{chunk-5BSLGBYI.js.map → chunk-JCQZ6LA7.js.map} +1 -1
  22. package/dist/{chunk-WN6XJWOS.js → chunk-JDQ7T3QB.js} +256 -743
  23. package/dist/chunk-JDQ7T3QB.js.map +1 -0
  24. package/dist/{chunk-KK73ZB4E.js → chunk-LMYTEMUH.js} +153 -132
  25. package/dist/chunk-LMYTEMUH.js.map +1 -0
  26. package/dist/{chunk-AFGTSUAD.js → chunk-NKT2DLZI.js} +4 -4
  27. package/dist/{chunk-KHJS6VIA.js → chunk-PUKTJMRT.js} +157 -112
  28. package/dist/chunk-PUKTJMRT.js.map +1 -0
  29. package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
  30. package/dist/chunk-Q7APDV6H.js.map +1 -0
  31. package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
  32. package/dist/chunk-S63MFSY6.js.map +1 -0
  33. package/dist/{chunk-NTNILOBC.js → chunk-TLD5BEU6.js} +4 -4
  34. package/dist/chunk-WUXCWRL6.js +20 -0
  35. package/dist/chunk-WUXCWRL6.js.map +1 -0
  36. package/dist/{chunk-A4FUBC7B.js → chunk-Z3T6RK3K.js} +2 -4
  37. package/dist/{chunk-A4FUBC7B.js.map → chunk-Z3T6RK3K.js.map} +1 -1
  38. package/dist/components.d.ts +6 -6
  39. package/dist/components.js +14 -18
  40. package/dist/components.js.map +1 -1
  41. package/dist/{database-C3Szpi5J.d.ts → database-BXAfr2Y_.d.ts} +18 -0
  42. package/dist/hooks.d.ts +5 -5
  43. package/dist/hooks.js +8 -9
  44. package/dist/hooks.js.map +1 -1
  45. package/dist/index.d.ts +19 -27
  46. package/dist/index.js +21 -29
  47. package/dist/index.js.map +1 -1
  48. package/dist/{organisation-BtshODVF.d.ts → organisation-D6qRDtbF.d.ts} +1 -1
  49. package/dist/providers.d.ts +7 -21
  50. package/dist/providers.js +3 -10
  51. package/dist/rbac/index.d.ts +71 -221
  52. package/dist/rbac/index.js +15 -16
  53. package/dist/{types-CGX9Vyf5.d.ts → types-BDg1mAGG.d.ts} +36 -6
  54. package/dist/types.d.ts +3 -3
  55. package/dist/types.js +61 -18
  56. package/dist/types.js.map +1 -1
  57. package/dist/{unified-CM7T0aTK.d.ts → unified-DQ4VcT7H.d.ts} +1 -1
  58. package/dist/{usePublicRouteParams-B-CumWRc.d.ts → usePublicRouteParams-BlgwXweB.d.ts} +3 -3
  59. package/dist/utils.d.ts +2 -2
  60. package/dist/utils.js +52 -9
  61. package/dist/utils.js.map +1 -1
  62. package/docs/CONTENT_AUDIT_REPORT.md +253 -0
  63. package/docs/DOCUMENTATION_AUDIT.md +172 -0
  64. package/docs/README.md +142 -147
  65. package/docs/STYLE_GUIDE.md +37 -0
  66. package/docs/api/classes/ColumnFactory.md +17 -17
  67. package/docs/api/classes/ErrorBoundary.md +1 -1
  68. package/docs/api/classes/InvalidScopeError.md +4 -4
  69. package/docs/api/classes/MissingUserContextError.md +4 -4
  70. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  71. package/docs/api/classes/PermissionDeniedError.md +5 -5
  72. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  73. package/docs/api/classes/RBACAuditManager.md +8 -8
  74. package/docs/api/classes/RBACCache.md +35 -5
  75. package/docs/api/classes/RBACEngine.md +49 -20
  76. package/docs/api/classes/RBACError.md +4 -4
  77. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  78. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  79. package/docs/api/classes/StorageUtils.md +1 -1
  80. package/docs/api/enums/FileCategory.md +1 -1
  81. package/docs/api/interfaces/AggregateConfig.md +4 -4
  82. package/docs/api/interfaces/ButtonProps.md +1 -1
  83. package/docs/api/interfaces/CardProps.md +1 -1
  84. package/docs/api/interfaces/ColorPalette.md +1 -1
  85. package/docs/api/interfaces/ColorShade.md +1 -1
  86. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  87. package/docs/api/interfaces/DataRecord.md +11 -0
  88. package/docs/api/interfaces/DataTableAction.md +65 -29
  89. package/docs/api/interfaces/DataTableColumn.md +36 -23
  90. package/docs/api/interfaces/DataTableProps.md +80 -38
  91. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  92. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  93. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  94. package/docs/api/interfaces/EventLogoProps.md +1 -1
  95. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  96. package/docs/api/interfaces/FileMetadata.md +1 -1
  97. package/docs/api/interfaces/FileReference.md +1 -1
  98. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  99. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  100. package/docs/api/interfaces/FileUploadProps.md +1 -1
  101. package/docs/api/interfaces/FooterProps.md +1 -1
  102. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  103. package/docs/api/interfaces/InputProps.md +1 -1
  104. package/docs/api/interfaces/LabelProps.md +1 -1
  105. package/docs/api/interfaces/LoginFormProps.md +1 -1
  106. package/docs/api/interfaces/NavigationAccessRecord.md +11 -11
  107. package/docs/api/interfaces/NavigationContextType.md +9 -9
  108. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  109. package/docs/api/interfaces/NavigationItem.md +1 -1
  110. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  111. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  112. package/docs/api/interfaces/Organisation.md +1 -1
  113. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  114. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  115. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  116. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  117. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  118. package/docs/api/interfaces/PaceLoginPageProps.md +16 -3
  119. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  120. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  121. package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
  122. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  123. package/docs/api/interfaces/PaletteData.md +1 -1
  124. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  125. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  126. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  127. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  128. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  129. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  130. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  131. package/docs/api/interfaces/RBACConfig.md +1 -1
  132. package/docs/api/interfaces/RBACLogger.md +1 -1
  133. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  134. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  135. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  136. package/docs/api/interfaces/RouteConfig.md +2 -2
  137. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  138. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  139. package/docs/api/interfaces/StorageConfig.md +1 -1
  140. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  141. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  142. package/docs/api/interfaces/StorageListOptions.md +1 -1
  143. package/docs/api/interfaces/StorageListResult.md +1 -1
  144. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  145. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  146. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  147. package/docs/api/interfaces/StyleImport.md +1 -1
  148. package/docs/api/interfaces/SwitchProps.md +1 -1
  149. package/docs/api/interfaces/ToastActionElement.md +1 -1
  150. package/docs/api/interfaces/ToastProps.md +1 -1
  151. package/docs/api/interfaces/UnifiedAuthContextType.md +94 -521
  152. package/docs/api/interfaces/UnifiedAuthProviderProps.md +16 -16
  153. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  154. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  155. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  156. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  157. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  158. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  159. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  160. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  161. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  162. package/docs/api/interfaces/UserEventAccess.md +11 -11
  163. package/docs/api/interfaces/UserMenuProps.md +1 -1
  164. package/docs/api/interfaces/UserProfile.md +1 -1
  165. package/docs/api/modules.md +251 -269
  166. package/docs/api-reference/components.md +193 -0
  167. package/docs/api-reference/hooks.md +265 -0
  168. package/docs/api-reference/providers.md +6 -0
  169. package/docs/api-reference/types.md +6 -0
  170. package/docs/api-reference/utilities.md +207 -0
  171. package/docs/architecture/README.md +6 -0
  172. package/docs/{database-schema-requirements.md → architecture/database-schema-requirements.md} +6 -0
  173. package/docs/architecture/rbac-security-architecture.md +258 -0
  174. package/docs/architecture/services.md +9 -1
  175. package/docs/best-practices/README.md +6 -0
  176. package/docs/best-practices/accessibility.md +6 -0
  177. package/docs/{common-patterns.md → best-practices/common-patterns.md} +6 -0
  178. package/docs/best-practices/deployment.md +6 -0
  179. package/docs/best-practices/performance.md +475 -2
  180. package/docs/best-practices/security.md +6 -0
  181. package/docs/best-practices/testing.md +6 -0
  182. package/docs/core-concepts/authentication.md +6 -0
  183. package/docs/core-concepts/events.md +6 -0
  184. package/docs/core-concepts/organisations.md +6 -0
  185. package/docs/core-concepts/permissions.md +6 -0
  186. package/docs/core-concepts/rbac-system.md +6 -0
  187. package/docs/documentation-index.md +121 -182
  188. package/docs/{consuming-app-vite-config.md → getting-started/consuming-app-vite-config.md} +6 -0
  189. package/docs/getting-started/documentation-index.md +40 -0
  190. package/docs/getting-started/examples/README.md +878 -35
  191. package/docs/{faq.md → getting-started/faq.md} +7 -1
  192. package/docs/getting-started/installation-guide.md +6 -0
  193. package/docs/{quick-reference.md → getting-started/quick-reference.md} +6 -0
  194. package/docs/implementation-guides/app-layout.md +6 -0
  195. package/docs/implementation-guides/authentication.md +1021 -0
  196. package/docs/implementation-guides/component-styling.md +6 -0
  197. package/docs/implementation-guides/data-tables.md +1264 -2076
  198. package/docs/implementation-guides/dynamic-colors.md +6 -0
  199. package/docs/implementation-guides/event-theming-summary.md +6 -0
  200. package/docs/{file-reference-system.md → implementation-guides/file-reference-system.md} +6 -0
  201. package/docs/implementation-guides/file-upload-storage.md +6 -0
  202. package/docs/implementation-guides/forms.md +6 -0
  203. package/docs/implementation-guides/inactivity-tracking.md +6 -0
  204. package/docs/implementation-guides/navigation.md +6 -0
  205. package/docs/implementation-guides/organisation-security.md +6 -0
  206. package/docs/implementation-guides/permission-enforcement.md +6 -0
  207. package/docs/implementation-guides/public-pages-advanced.md +6 -0
  208. package/docs/implementation-guides/public-pages.md +6 -0
  209. package/docs/migration/MIGRATION_GUIDE.md +827 -351
  210. package/docs/migration/README.md +7 -1
  211. package/docs/migration/organisation-context-timing-fix.md +6 -0
  212. package/docs/migration/rbac-migration.md +44 -1
  213. package/docs/migration/service-architecture.md +6 -0
  214. package/docs/migration/v0.4.15-tailwind-scanning.md +6 -0
  215. package/docs/migration/v0.4.16-css-first-approach.md +6 -0
  216. package/docs/migration/v0.4.17-source-path-fix.md +6 -0
  217. package/docs/rbac/README-rbac-rls-integration.md +6 -0
  218. package/docs/rbac/README.md +6 -0
  219. package/docs/rbac/advanced-patterns.md +6 -0
  220. package/docs/rbac/api-reference.md +7 -1
  221. package/docs/rbac/breaking-changes-v3.md +222 -0
  222. package/docs/rbac/examples/rbac-rls-integration-example.md +6 -0
  223. package/docs/rbac/examples.md +6 -0
  224. package/docs/rbac/getting-started.md +6 -0
  225. package/docs/rbac/migration-guide.md +260 -0
  226. package/docs/rbac/quick-start.md +6 -0
  227. package/docs/rbac/rbac-rls-integration.md +6 -0
  228. package/docs/rbac/super-admin-guide.md +6 -0
  229. package/docs/rbac/troubleshooting.md +6 -0
  230. package/docs/security/README.md +6 -0
  231. package/docs/security/checklist.md +6 -0
  232. package/docs/styles/README.md +7 -1
  233. package/docs/{usage.md → styles/usage.md} +6 -0
  234. package/docs/testing/README.md +6 -0
  235. package/docs/{visual-testing.md → testing/visual-testing.md} +6 -0
  236. package/docs/troubleshooting/README.md +387 -5
  237. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +6 -0
  238. package/docs/troubleshooting/common-issues.md +6 -0
  239. package/docs/troubleshooting/database-view-compatibility.md +6 -0
  240. package/docs/troubleshooting/organisation-context-setup.md +6 -0
  241. package/docs/troubleshooting/react-hooks-issue-analysis.md +6 -0
  242. package/docs/troubleshooting/styling-issues.md +6 -0
  243. package/docs/troubleshooting/tailwind-content-scanning.md +6 -0
  244. package/package.json +1 -1
  245. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -1
  246. package/src/__tests__/helpers/test-providers.tsx +3 -53
  247. package/src/components/DataTable/DataTable.test.tsx +319 -0
  248. package/src/components/DataTable/DataTable.tsx +32 -11
  249. package/src/components/DataTable/__tests__/{DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx.skip} +6 -4
  250. package/src/components/DataTable/__tests__/{DataTable.test.tsx → DataTable.test.tsx.skip} +6 -4
  251. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +31 -9
  252. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +601 -0
  253. package/src/components/DataTable/__tests__/keyboard.test.tsx +615 -0
  254. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +639 -0
  255. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx.skip +330 -0
  256. package/src/components/DataTable/components/AccessDeniedPage.tsx +2 -2
  257. package/src/components/DataTable/components/ActionButtons.tsx +88 -104
  258. package/src/components/DataTable/components/DataTableCore.tsx +309 -337
  259. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +4 -2
  260. package/src/components/DataTable/components/DataTableModals.tsx +22 -1
  261. package/src/components/DataTable/components/EditableRow.tsx +69 -84
  262. package/src/components/DataTable/components/EmptyState.tsx +5 -1
  263. package/src/components/DataTable/components/ImportModal.tsx +65 -36
  264. package/src/components/DataTable/components/PaginationControls.tsx +40 -100
  265. package/src/components/DataTable/components/UnifiedTableBody.tsx +125 -148
  266. package/src/components/DataTable/context/DataTableContext.tsx +1 -1
  267. package/src/components/DataTable/core/ColumnFactory.ts +5 -0
  268. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +12 -10
  269. package/src/components/DataTable/examples/HierarchicalExample.tsx +1 -1
  270. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +1 -0
  271. package/src/components/DataTable/examples/PerformanceExample.tsx +1 -0
  272. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +1 -5
  273. package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +167 -0
  274. package/src/components/DataTable/hooks/index.ts +7 -0
  275. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +32 -15
  276. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +102 -0
  277. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +89 -0
  278. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +117 -0
  279. package/src/components/DataTable/hooks/useDataTablePermissions.ts +71 -27
  280. package/src/components/DataTable/hooks/useDataTableState.ts +39 -11
  281. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +33 -0
  282. package/src/components/DataTable/hooks/useHierarchicalState.ts +15 -1
  283. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +447 -0
  284. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +94 -0
  285. package/src/components/DataTable/hooks/useTableColumns.ts +10 -7
  286. package/src/components/DataTable/hooks/useTableHandlers.ts +174 -0
  287. package/src/components/DataTable/index.ts +12 -3
  288. package/src/components/DataTable/types.ts +129 -9
  289. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +159 -22
  290. package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +111 -0
  291. package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +15 -29
  292. package/src/components/DataTable/utils/a11yUtils.ts +244 -0
  293. package/src/components/DataTable/utils/debugTools.ts +609 -0
  294. package/src/components/DataTable/utils/exportUtils.ts +114 -16
  295. package/src/components/DataTable/utils/flexibleImport.ts +202 -32
  296. package/src/components/DataTable/utils/hierarchicalUtils.ts +1 -1
  297. package/src/components/DataTable/utils/index.ts +2 -0
  298. package/src/components/DataTable/utils/paginationUtils.ts +350 -0
  299. package/src/components/DataTable/utils/rowUtils.ts +6 -5
  300. package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -24
  301. package/src/components/NavigationMenu/NavigationMenu.tsx +19 -8
  302. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +1 -23
  303. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +56 -6
  304. package/src/components/PaceLoginPage/PaceLoginPage.tsx +137 -13
  305. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +1 -1
  306. package/src/components/Select/Select.tsx +1 -0
  307. package/src/components/examples/PermissionExample.tsx +173 -0
  308. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  309. package/src/examples/PublicEventPage.tsx +274 -0
  310. package/src/examples/PublicPageApp.tsx +308 -0
  311. package/src/examples/PublicPageUsageExample.tsx +216 -0
  312. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +12 -1
  313. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +129 -17
  314. package/src/hooks/__tests__/useRBAC.unit.test.ts +151 -846
  315. package/src/hooks/useOrganisationPermissions.test.ts +42 -18
  316. package/src/hooks/useOrganisationPermissions.ts +12 -6
  317. package/src/hooks/useOrganisationSecurity.test.ts +138 -85
  318. package/src/hooks/useOrganisationSecurity.ts +41 -10
  319. package/src/index.ts +0 -1
  320. package/src/providers/AuthProvider.simplified.tsx +880 -0
  321. package/src/providers/UnifiedAuthProvider.test.simple.tsx +8 -8
  322. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +29 -19
  323. package/src/providers/index.ts +0 -1
  324. package/src/providers/services/EventServiceProvider.tsx +19 -15
  325. package/src/providers/services/InactivityServiceProvider.tsx +19 -15
  326. package/src/providers/services/OrganisationServiceProvider.tsx +19 -15
  327. package/src/providers/services/UnifiedAuthProvider.tsx +156 -127
  328. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +1 -1
  329. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -3
  330. package/src/rbac/README.md +1 -1
  331. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +25 -27
  332. package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +313 -0
  333. package/src/rbac/__tests__/engine.comprehensive.test.ts +114 -348
  334. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +28 -110
  335. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +33 -85
  336. package/src/rbac/__tests__/scenarios.user-role.test.tsx +2 -2
  337. package/src/rbac/adapters.tsx +26 -69
  338. package/src/rbac/api.test.ts +90 -27
  339. package/src/rbac/api.ts +61 -10
  340. package/src/rbac/audit.test.ts +33 -38
  341. package/src/rbac/audit.ts +21 -6
  342. package/src/rbac/cache.ts +33 -1
  343. package/src/rbac/components/NavigationGuard.tsx +11 -11
  344. package/src/rbac/components/NavigationProvider.test.tsx +11 -5
  345. package/src/rbac/components/NavigationProvider.tsx +37 -13
  346. package/src/rbac/components/PagePermissionGuard.tsx +111 -50
  347. package/src/rbac/components/PagePermissionProvider.tsx +5 -5
  348. package/src/rbac/components/PermissionEnforcer.tsx +11 -11
  349. package/src/rbac/components/RoleBasedRouter.tsx +5 -5
  350. package/src/rbac/components/SecureDataProvider.tsx +5 -5
  351. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +8 -8
  352. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +14 -14
  353. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +12 -12
  354. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +6 -6
  355. package/src/rbac/engine.test.simple.ts +19 -13
  356. package/src/rbac/engine.test.ts +1 -0
  357. package/src/rbac/engine.ts +330 -766
  358. package/src/rbac/errors.ts +156 -0
  359. package/src/rbac/hooks/usePermissions.ts +32 -10
  360. package/src/rbac/hooks/useRBAC.test.ts +126 -512
  361. package/src/rbac/hooks/useRBAC.ts +147 -193
  362. package/src/rbac/hooks/useResolvedScope.ts +12 -0
  363. package/src/rbac/index.ts +7 -4
  364. package/src/rbac/security.ts +109 -18
  365. package/src/rbac/types.ts +12 -1
  366. package/src/services/AuthService.ts +2 -15
  367. package/src/services/EventService.ts +26 -46
  368. package/src/services/OrganisationService.ts +51 -31
  369. package/src/services/__tests__/AuthService.test.ts +1 -1
  370. package/src/services/__tests__/EventService.test.ts +1 -1
  371. package/src/services/__tests__/OrganisationService.test.ts +1 -1
  372. package/src/styles/base.css +208 -0
  373. package/src/styles/semantic.css +24 -0
  374. package/src/types/database.generated.ts +7347 -0
  375. package/src/types/database.ts +20 -0
  376. package/src/utils/logger.ts +179 -0
  377. package/src/utils/organisationContext.ts +11 -4
  378. package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
  379. package/dist/appNameResolver-UURKN7NF.js +0 -22
  380. package/dist/audit-6TOCAMKO.js.map +0 -1
  381. package/dist/chunk-B2WTCLCV.js.map +0 -1
  382. package/dist/chunk-FGMFQSHX.js.map +0 -1
  383. package/dist/chunk-K34IM5CT.js.map +0 -1
  384. package/dist/chunk-KHJS6VIA.js.map +0 -1
  385. package/dist/chunk-KK73ZB4E.js.map +0 -1
  386. package/dist/chunk-M5IWZRBT.js.map +0 -1
  387. package/dist/chunk-ULBI5JGB.js +0 -109
  388. package/dist/chunk-ULBI5JGB.js.map +0 -1
  389. package/dist/chunk-WN6XJWOS.js.map +0 -1
  390. package/dist/chunk-XLZ7U46Z.js.map +0 -1
  391. package/dist/chunk-Y6TXWPJO.js.map +0 -1
  392. package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
  393. package/docs/TERMINOLOGY.md +0 -231
  394. package/docs/api/interfaces/RBACContextType.md +0 -468
  395. package/docs/api/interfaces/RBACProviderProps.md +0 -107
  396. package/docs/best-practices/performance-expansion.md +0 -473
  397. package/docs/breaking-changes.md +0 -179
  398. package/docs/consuming-app-example.md +0 -290
  399. package/docs/documentation-templates.md +0 -539
  400. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  401. package/docs/getting-started/examples/basic-auth-app.md +0 -520
  402. package/docs/getting-started/examples/full-featured-app.md +0 -616
  403. package/docs/getting-started/quick-start.md +0 -376
  404. package/docs/implementation-guides/datatable-filtering.md +0 -313
  405. package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
  406. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  407. package/docs/implementation-guides/large-datasets.md +0 -281
  408. package/docs/implementation-guides/performance.md +0 -403
  409. package/docs/migration/quick-migration-guide.md +0 -320
  410. package/docs/migration-guide.md +0 -193
  411. package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
  412. package/docs/performance/README.md +0 -551
  413. package/docs/style-guide.md +0 -964
  414. package/docs/troubleshooting/authentication-issues.md +0 -334
  415. package/docs/troubleshooting/debugging.md +0 -1117
  416. package/docs/troubleshooting/migration.md +0 -918
  417. package/src/__tests__/hooks/usePermissions.test.ts +0 -261
  418. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
  419. package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
  420. package/src/hooks/services/__tests__/useServiceHooks.test.tsx +0 -137
  421. package/src/hooks/services/usePermissions.ts +0 -70
  422. package/src/hooks/services/useRBACService.ts +0 -30
  423. package/src/hooks/usePermissionCheck.ts +0 -150
  424. package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
  425. package/src/providers/services/RBACServiceProvider.tsx +0 -79
  426. package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
  427. package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
  428. package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
  429. package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
  430. package/src/rbac/providers/RBACProvider.tsx +0 -645
  431. package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
  432. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
  433. package/src/rbac/providers/index.ts +0 -11
  434. package/src/services/RBACService.ts +0 -522
  435. package/src/services/__tests__/RBACService.test.ts +0 -492
  436. package/src/services/interfaces/IRBACService.ts +0 -62
  437. package/src/utils/appNameResolver.test 2.ts +0 -494
  438. /package/dist/{DataTable-4GAVPIEG.js.map → DataTable-QCNCV6IK.js.map} +0 -0
  439. /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-Z2FWNW7O.js.map} +0 -0
  440. /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
  441. /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
  442. /package/dist/{chunk-LW7MMEAQ.js.map → chunk-CRKP3HXI.js.map} +0 -0
  443. /package/dist/{chunk-URUTVZ7N.js.map → chunk-DVHZ5L55.js.map} +0 -0
  444. /package/dist/{chunk-AFGTSUAD.js.map → chunk-NKT2DLZI.js.map} +0 -0
  445. /package/dist/{chunk-NTNILOBC.js.map → chunk-TLD5BEU6.js.map} +0 -0
  446. /package/docs/{app.css.example → styles/app.css.example} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed - RBAC Refactoring
11
+ - **Breaking**: Renamed provider hook `useRBAC()` to `useRBACContext()` to avoid naming collision
12
+ - **Removed**: Non-functional `usePermissionCheck` hook
13
+ - **Deprecated**: `RBACService`, `useRBACService` - use new RBAC system instead
14
+ - Consolidated permission checking logic into single source of truth
15
+ - Established consistent fail-secure error handling across RBAC components
16
+ - Removed 100+ lines of duplicate code
17
+
10
18
  ### Added
11
19
  - **DataTable Initial Page Size**: Added `initialPageSize` prop to DataTable component for customizing the initial page size
12
20
  - **Page Size Validation**: Automatic validation of initial page size against available options with fallback to closest valid option
@@ -1,62 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
3
  import { SupabaseClient, User, Session, AuthError } from '@supabase/supabase-js';
4
- import { c as AccessLevel, r as Event } from './unified-CM7T0aTK.js';
5
- import { b as Organisation, c as OrganisationMembership, d as OrganisationHierarchy } from './organisation-BtshODVF.js';
6
-
7
- /**
8
- * @file RBAC Service Interface
9
- * @package @jmruthers/pace-core
10
- * @module Services/Interfaces
11
- * @since 0.1.0
12
- *
13
- * Interface for RBAC service operations.
14
- * Defines the contract for role-based access control functionality.
15
- */
16
-
17
- interface UserEventAccess {
18
- event_id: string;
19
- event_name: string;
20
- event_description?: string | null;
21
- start_date: string;
22
- end_date: string;
23
- event_status: string;
24
- app_id: string;
25
- access_level: string;
26
- granted_at: string;
27
- organisation_id: string;
28
- }
29
- interface AppConfig {
30
- supports_direct_access: boolean;
31
- requires_event: boolean;
32
- }
33
- interface IRBACService {
34
- getPermissions(): Record<string, boolean>;
35
- getRoles(): string[];
36
- getAccessLevel(): AccessLevel;
37
- isLoading(): boolean;
38
- getError(): Error | null;
39
- getSelectedEventId(): string | null;
40
- getAppConfig(): AppConfig | null;
41
- getUserEventAccess(): UserEventAccess[];
42
- isEventAccessLoading(): boolean;
43
- getSelectedOrganisationId(): string | null;
44
- hasPermission(permission: string, orgId?: string): boolean;
45
- hasAnyPermission(permissions: string[], orgId?: string): boolean;
46
- hasAllPermissions(permissions: string[], orgId?: string): boolean;
47
- hasRole(role: string): boolean;
48
- hasAccessLevel(level: AccessLevel): boolean;
49
- canAccess(resource: string, action: string, orgId?: string): boolean;
50
- validatePermission(permission: string, orgId?: string): Promise<boolean>;
51
- validateAccess(resource: string, action: string, orgId?: string): Promise<boolean>;
52
- refreshPermissions(eventId?: string, orgId?: string): Promise<void>;
53
- setSelectedEventId(eventId: string | null): void;
54
- loadUserEventAccess(orgId?: string): Promise<void>;
55
- getUserEventAccessById(eventId: string): UserEventAccess | undefined;
56
- requireOrganisationContext(): string;
57
- initialize(): Promise<void>;
58
- cleanup(): void;
59
- }
4
+ import { E as Event } from './unified-DQ4VcT7H.js';
5
+ import { O as Organisation, a as OrganisationMembership, d as OrganisationHierarchy } from './organisation-D6qRDtbF.js';
60
6
 
61
7
  /**
62
8
  * @file Base Service Class
@@ -155,8 +101,8 @@ declare class EventService extends BaseService implements IEventService {
155
101
  private isFetchingRef;
156
102
  private hasAutoSelectedRef;
157
103
  private userClearedEventRef;
158
- constructor(supabaseClient: any, user: any, session: any, appName: string, selectedOrganisation: any, setSelectedEventId: (eventId: string | null) => void);
159
- updateDependencies(supabaseClient: any, user: any, session: any, appName: string, selectedOrganisation: any, setSelectedEventId: (eventId: string | null) => void): void;
104
+ constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void);
105
+ updateDependencies(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void): void;
160
106
  getEvents(): Event[];
161
107
  getSelectedEvent(): Event | null;
162
108
  isLoading(): boolean;
@@ -466,63 +412,4 @@ declare class AuthService extends BaseService implements IAuthService {
466
412
  private removeErrorHandlers;
467
413
  }
468
414
 
469
- /**
470
- * @file RBAC Service
471
- * @package @jmruthers/pace-core
472
- * @module Services
473
- * @since 0.1.0
474
- *
475
- * RBAC service implementation.
476
- * Handles role-based access control, permissions, and event access management.
477
- */
478
-
479
- declare class RBACService extends BaseService implements IRBACService {
480
- private permissions;
481
- private roles;
482
- private accessLevel;
483
- private rbacLoading;
484
- private rbacError;
485
- private selectedEventId;
486
- private appConfig;
487
- private userEventAccess;
488
- private eventAccessLoading;
489
- private selectedOrganisationId;
490
- private supabaseClient;
491
- private user;
492
- private session;
493
- private appName;
494
- constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string);
495
- updateDependencies(user: User | null, session: Session | null, appName: string): void;
496
- getPermissions(): Record<string, boolean>;
497
- getRoles(): string[];
498
- getAccessLevel(): AccessLevel;
499
- isLoading(): boolean;
500
- getError(): Error | null;
501
- getSelectedEventId(): string | null;
502
- getAppConfig(): AppConfig | null;
503
- getUserEventAccess(): UserEventAccess[];
504
- isEventAccessLoading(): boolean;
505
- getSelectedOrganisationId(): string | null;
506
- hasPermission(permission: string, orgId?: string): boolean;
507
- hasAnyPermission(permissions: string[], orgId?: string): boolean;
508
- hasAllPermissions(permissions: string[], orgId?: string): boolean;
509
- hasRole(role: string): boolean;
510
- hasAccessLevel(level: AccessLevel): boolean;
511
- canAccess(resource: string, action: string, orgId?: string): boolean;
512
- validatePermission(permission: string, orgId?: string): Promise<boolean>;
513
- validateAccess(resource: string, action: string, orgId?: string): Promise<boolean>;
514
- refreshPermissions(eventId?: string, orgId?: string): Promise<void>;
515
- setSelectedEventId(eventId: string | null): void;
516
- loadUserEventAccess(orgId?: string): Promise<void>;
517
- getUserEventAccessById(eventId: string): UserEventAccess | undefined;
518
- requireOrganisationContext(): string;
519
- initialize(): Promise<void>;
520
- cleanup(): void;
521
- protected doInitialize(): Promise<void>;
522
- protected doCleanup(): void;
523
- private loadAppConfig;
524
- private loadPersistedState;
525
- private transformRBACPermissions;
526
- }
527
-
528
- export { AuthService as A, type EventServiceContextType as E, type InactivityServiceContextType as I, type OrganisationServiceContextType as O, RBACService as R, type UserEventAccess as U, type EventContextType as a, EventServiceContext as b, type EventServiceProviderProps as c, EventServiceProvider as d, OrganisationServiceContext as e, type OrganisationServiceProviderProps as f, OrganisationServiceProvider as g, useOrganisationService as h, InactivityServiceContext as i, type InactivityServiceProviderProps as j, InactivityServiceProvider as k, useInactivityService as l, InactivityService as m, EventService as n, OrganisationService as o, useEventService as u };
415
+ export { AuthService as A, type EventServiceContextType as E, type InactivityServiceContextType as I, type OrganisationServiceContextType as O, type EventContextType as a, EventServiceContext as b, type EventServiceProviderProps as c, EventServiceProvider as d, OrganisationServiceContext as e, type OrganisationServiceProviderProps as f, OrganisationServiceProvider as g, useOrganisationService as h, InactivityServiceContext as i, type InactivityServiceProviderProps as j, InactivityServiceProvider as k, useInactivityService as l, InactivityService as m, EventService as n, OrganisationService as o, useEventService as u };
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
- import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-CGX9Vyf5.js';
3
+ import { D as DataRecord, a as DataTableColumn, b as DataTableRBACConfig, c as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, d as PaginationMode, C as ChunkingConfig, e as SearchIndexConfig, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, f as DataTableAction } from './types-BDg1mAGG.js';
4
4
 
5
5
  /**
6
6
  * Configuration interface for customizing ImportModal text content
@@ -47,7 +47,7 @@ interface DataTableProps<TData extends DataRecord> {
47
47
  /** Additional CSS classes for the table container */
48
48
  className?: string;
49
49
  /** Feature configuration - all features are disabled by default */
50
- features: DataTableFeatureConfig;
50
+ features?: DataTableFeatureConfig;
51
51
  /** Hierarchical parent/child row configuration */
52
52
  hierarchical?: HierarchicalConfig;
53
53
  /** Performance optimization configuration */
@@ -108,6 +108,13 @@ interface DataTableProps<TData extends DataRecord> {
108
108
  actions?: DataTableAction<TData>[];
109
109
  /** Column order configuration - array of column IDs in desired order */
110
110
  columnOrder?: string[];
111
+ /** Unique storage key for persisting table layout state across sessions */
112
+ storageKey?: string;
113
+ /** Callback when table layout changes (column order, visibility, etc.) */
114
+ onLayoutChange?: (layout: {
115
+ columnOrder: string[];
116
+ columnVisibility: Record<string, boolean>;
117
+ }) => void;
111
118
  }
112
119
  /**
113
120
  * Enhanced DataTable with comprehensive performance optimizations
@@ -17,27 +17,46 @@ import {
17
17
  LoadingState,
18
18
  PaginationControls,
19
19
  UnifiedTableBody,
20
+ announce,
21
+ announceBulkOperation,
22
+ announceFilterChange,
23
+ announceLoadingState,
24
+ announcePaginationChange,
25
+ announceSearchResults,
26
+ announceSelectionChange,
27
+ announceSortChange,
20
28
  calculateAllDepths,
21
29
  calculateAllIndentation,
22
30
  calculateIndentation,
31
+ calculateOptimalPageSize,
32
+ cleanupLiveRegion,
23
33
  createHierarchicalStructure,
34
+ defaultDataTableFeatures,
24
35
  exportToCSV,
25
36
  generateCSVContent,
37
+ getAriaSortValue,
26
38
  getCellRenderer,
27
39
  getHierarchicalSortConfig,
40
+ getPageSizeOptions,
41
+ getPaginationBinding,
28
42
  getRowDepth,
43
+ getRowDescription,
29
44
  getRowIdSafe,
45
+ getSortButtonLabel,
30
46
  groupHierarchicalData,
31
47
  hasValidRowId,
48
+ initializeLiveRegion,
32
49
  isHierarchicalSortableColumn,
50
+ normalizeDataTableFeatures,
33
51
  shouldShowColumnForRow,
34
52
  sortHierarchicalDataByStructure,
35
53
  sortHierarchicalDataWithSorting,
36
- validateHierarchicalData
37
- } from "./chunk-M5IWZRBT.js";
38
- import "./chunk-KHJS6VIA.js";
39
- import "./chunk-FGMFQSHX.js";
40
- import "./chunk-B2WTCLCV.js";
54
+ validateHierarchicalData,
55
+ validatePaginationConfig
56
+ } from "./chunk-DDPG7FCX.js";
57
+ import "./chunk-PUKTJMRT.js";
58
+ import "./chunk-S63MFSY6.js";
59
+ import "./chunk-Q7APDV6H.js";
41
60
  import {
42
61
  CircuitBreaker,
43
62
  DEFAULT_FALLBACK_CONFIG,
@@ -56,13 +75,12 @@ import {
56
75
  throttle,
57
76
  useDataTablePerformance
58
77
  } from "./chunk-YCKPEMJA.js";
59
- import "./chunk-LW7MMEAQ.js";
60
- import "./chunk-URUTVZ7N.js";
61
- import "./chunk-WN6XJWOS.js";
62
- import "./chunk-ULBI5JGB.js";
78
+ import "./chunk-CRKP3HXI.js";
79
+ import "./chunk-DVHZ5L55.js";
80
+ import "./chunk-JDQ7T3QB.js";
63
81
  import "./chunk-PYUXFQJ3.js";
64
- import "./chunk-5BSLGBYI.js";
65
- import "./chunk-XLZ7U46Z.js";
82
+ import "./chunk-JCQZ6LA7.js";
83
+ import "./chunk-CVMVPYAL.js";
66
84
  import "./chunk-PLDDJCW6.js";
67
85
  export {
68
86
  ActionButtons,
@@ -92,29 +110,48 @@ export {
92
110
  SearchIndex,
93
111
  UnifiedTableBody,
94
112
  VisibilityTracker,
113
+ announce,
114
+ announceBulkOperation,
115
+ announceFilterChange,
116
+ announceLoadingState,
117
+ announcePaginationChange,
118
+ announceSearchResults,
119
+ announceSelectionChange,
120
+ announceSortChange,
95
121
  calculateAllDepths,
96
122
  calculateAllIndentation,
97
123
  calculateIndentation,
124
+ calculateOptimalPageSize,
98
125
  chunkData,
126
+ cleanupLiveRegion,
99
127
  createHierarchicalStructure,
100
128
  debounce,
129
+ defaultDataTableFeatures,
101
130
  determinePaginationMode,
102
131
  exportToCSV,
103
132
  generateCSVContent,
133
+ getAriaSortValue,
104
134
  getCellRenderer,
105
135
  getHierarchicalSortConfig,
106
136
  getOptimalPageSizeOptions,
137
+ getPageSizeOptions,
138
+ getPaginationBinding,
107
139
  getRowDepth,
140
+ getRowDescription,
108
141
  getRowIdSafe,
142
+ getSortButtonLabel,
109
143
  groupHierarchicalData,
110
144
  hasValidRowId,
145
+ initializeLiveRegion,
111
146
  isHierarchicalSortableColumn,
147
+ normalizeDataTableFeatures,
112
148
  safeExecute,
113
149
  shouldShowColumnForRow,
114
150
  sortHierarchicalDataByStructure,
115
151
  sortHierarchicalDataWithSorting,
116
152
  throttle,
117
153
  useDataTablePerformance,
118
- validateHierarchicalData
154
+ validateHierarchicalData,
155
+ validatePaginationConfig
119
156
  };
120
- //# sourceMappingURL=DataTable-4GAVPIEG.js.map
157
+ //# sourceMappingURL=DataTable-QCNCV6IK.js.map
@@ -12,8 +12,8 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
12
12
  import { FieldValues, DefaultValues, SubmitHandler, SubmitErrorHandler, UseFormReturn } from 'react-hook-form';
13
13
  import { z } from 'zod';
14
14
  import { User, SupabaseClient, createClient } from '@supabase/supabase-js';
15
- import { r as Event } from './unified-CM7T0aTK.js';
16
- import { b as Organisation } from './organisation-BtshODVF.js';
15
+ import { E as Event } from './unified-DQ4VcT7H.js';
16
+ import { O as Organisation } from './organisation-D6qRDtbF.js';
17
17
  import { b as FileCategory, c as FileUploadOptions, e as FileUploadResult, F as FileReference } from './file-reference-9xUOnwyt.js';
18
18
 
19
19
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -2529,6 +2529,8 @@ interface PaceLoginPageProps {
2529
2529
  appName: string;
2530
2530
  /** The path to redirect to upon successful login. Defaults to `/`. */
2531
2531
  onSuccessRedirectPath?: string;
2532
+ /** Whether to check app access using RBAC. Defaults to false. */
2533
+ requireAppAccess?: boolean;
2532
2534
  }
2533
2535
  /**
2534
2536
  * A consistent, reusable login page for all PACE suite applications.
@@ -2537,6 +2539,7 @@ interface PaceLoginPageProps {
2537
2539
  *
2538
2540
  * Recent enhancements:
2539
2541
  * - Role-based redirection: Admin users are automatically redirected
2542
+ * - RBAC-based app access control: Checks if user has permission to access the app
2540
2543
  * - Enhanced error handling with navigation error recovery
2541
2544
  * - Dual loading states: auth loading + form submission loading
2542
2545
  * - Error persistence: Auth errors are displayed below the form
@@ -1,59 +1,50 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
- import { SupabaseClient } from '@supabase/supabase-js';
3
+ import { SupabaseClient, User, Session, AuthError } from '@supabase/supabase-js';
4
+ import { O as Organisation, a as OrganisationMembership } from './organisation-D6qRDtbF.js';
5
+ import { E as Event } from './unified-DQ4VcT7H.js';
4
6
 
7
+ interface UserEventAccess {
8
+ event_id: string;
9
+ event_name: string;
10
+ event_description?: string | null;
11
+ start_date: string;
12
+ end_date: string;
13
+ event_status: string;
14
+ app_id: string;
15
+ access_level: string;
16
+ granted_at: string;
17
+ organisation_id: string;
18
+ }
5
19
  interface UnifiedAuthContextType {
6
- user: any | null;
7
- session: any | null;
20
+ user: User | null;
21
+ session: Session | null;
8
22
  isAuthenticated: boolean;
9
23
  authLoading: boolean;
10
- authError: any | null;
11
- error: any | null;
24
+ authError: AuthError | null;
25
+ error: AuthError | null;
12
26
  supabase: SupabaseClient | null;
13
27
  signIn: (email: string, password?: string) => Promise<{
14
- error: any | null;
28
+ error: AuthError | null;
15
29
  }>;
16
30
  signUp: (email: string, password: string) => Promise<{
17
- error: any | null;
31
+ error: AuthError | null;
18
32
  }>;
19
33
  signOut: () => Promise<{
20
- error: any | null;
34
+ error: AuthError | null;
21
35
  }>;
22
36
  resetPassword: (email: string) => Promise<{
23
- error: any | null;
37
+ error: AuthError | null;
24
38
  }>;
25
39
  updatePassword: (password: string) => Promise<{
26
- error: any | null;
40
+ error: AuthError | null;
27
41
  }>;
28
42
  refreshSession: () => Promise<{
29
- error: any | null;
43
+ error: AuthError | null;
30
44
  }>;
31
- permissions: Record<string, boolean>;
32
- roles: string[];
33
- accessLevel: any;
34
- rbacLoading: boolean;
35
- rbacError: Error | null;
36
- selectedEventId: string | null;
37
- appConfig: any | null;
38
- userEventAccess: any[];
39
- eventAccessLoading: boolean;
40
- selectedOrganisationId: string | null;
41
- hasPermission: (permission: string, orgId?: string) => boolean;
42
- hasAnyPermission: (permissions: string[], orgId?: string) => boolean;
43
- hasAllPermissions: (permissions: string[], orgId?: string) => boolean;
44
- hasRole: (role: string) => boolean;
45
- hasAccessLevel: (level: any) => boolean;
46
- canAccess: (resource: string, action: string, orgId?: string) => boolean;
47
- validatePermission: (permission: string, orgId?: string) => Promise<boolean>;
48
- validateAccess: (resource: string, action: string, orgId?: string) => Promise<boolean>;
49
- refreshPermissions: (eventId?: string, orgId?: string) => Promise<void>;
50
- setSelectedEventId: (eventId: string | null) => void;
51
- loadUserEventAccess: (orgId?: string) => Promise<void>;
52
- getUserEventAccess: (eventId: string) => any | undefined;
53
- requireOrganisationContext: () => string;
54
- selectedOrganisation: any | null;
55
- organisations: any[];
56
- userMemberships: any[];
45
+ selectedOrganisation: Organisation | null;
46
+ organisations: Organisation[];
47
+ userMemberships: OrganisationMembership[];
57
48
  organisationLoading: boolean;
58
49
  organisationError: Error | null;
59
50
  hasValidOrganisationContext: boolean;
@@ -62,14 +53,14 @@ interface UnifiedAuthContextType {
62
53
  getUserRole: (orgId?: string) => string;
63
54
  validateOrganisationAccess: (orgId: string) => boolean;
64
55
  refreshOrganisations: () => Promise<void>;
65
- ensureOrganisationContext: () => any;
56
+ ensureOrganisationContext: () => Organisation;
66
57
  isOrganisationSecure: () => boolean;
67
- getPrimaryOrganisation: () => any | null;
68
- events: any[];
69
- selectedEvent: any | null;
58
+ getPrimaryOrganisation: () => Organisation | null;
59
+ events: Event[];
60
+ selectedEvent: Event | null;
70
61
  eventLoading: boolean;
71
62
  eventError: Error | null;
72
- setSelectedEvent: (event: any | null) => void;
63
+ setSelectedEvent: (event: Event | null) => void;
73
64
  refreshEvents: () => Promise<void>;
74
65
  showInactivityWarning: boolean;
75
66
  inactivityTimeRemaining: number;
@@ -84,6 +75,9 @@ interface UnifiedAuthContextType {
84
75
  handleStaySignedIn: () => void;
85
76
  handleSignOutNow: () => Promise<void>;
86
77
  appName: string;
78
+ appConfig: {
79
+ requires_event: boolean;
80
+ } | null;
87
81
  isLoading: boolean;
88
82
  hasErrors: boolean;
89
83
  }
@@ -95,7 +89,9 @@ interface UnifiedAuthProviderProps {
95
89
  persistState?: boolean;
96
90
  enablePersistence?: boolean;
97
91
  requireOrganisationContext?: boolean;
98
- enableRBAC?: boolean;
92
+ appConfig?: {
93
+ requires_event: boolean;
94
+ } | null;
99
95
  idleTimeoutMs: number;
100
96
  warnBeforeMs: number;
101
97
  onIdleLogout: (reason: 'inactivity') => void;
@@ -106,8 +102,9 @@ interface UnifiedAuthProviderProps {
106
102
  }) => React__default.ReactNode;
107
103
  dangerouslyDisableInactivity?: boolean;
108
104
  }
109
- declare function UnifiedAuthProvider({ children, supabaseClient, appName, persistState, enablePersistence, requireOrganisationContext, enableRBAC, idleTimeoutMs, // 30 minutes
105
+ declare function UnifiedAuthProvider({ children, supabaseClient, appName, appConfig, // Default to requiring events
106
+ persistState, enablePersistence, requireOrganisationContext, idleTimeoutMs, // 30 minutes
110
107
  warnBeforeMs, // 60 seconds
111
108
  onIdleLogout, renderInactivityWarning, dangerouslyDisableInactivity }: UnifiedAuthProviderProps): react_jsx_runtime.JSX.Element;
112
109
 
113
- export { type UnifiedAuthContextType as U, type UnifiedAuthProviderProps as a, UnifiedAuthProvider as b, useUnifiedAuth as u };
110
+ export { type UserEventAccess as U, type UnifiedAuthContextType as a, type UnifiedAuthProviderProps as b, UnifiedAuthProvider as c, useUnifiedAuth as u };
@@ -1,16 +1,15 @@
1
1
  import {
2
2
  init_UnifiedAuthProvider
3
- } from "./chunk-URUTVZ7N.js";
3
+ } from "./chunk-DVHZ5L55.js";
4
4
  import {
5
5
  UnifiedAuthProvider,
6
6
  useUnifiedAuth
7
- } from "./chunk-WN6XJWOS.js";
8
- import "./chunk-ULBI5JGB.js";
9
- import "./chunk-XLZ7U46Z.js";
7
+ } from "./chunk-JDQ7T3QB.js";
8
+ import "./chunk-CVMVPYAL.js";
10
9
  import "./chunk-PLDDJCW6.js";
11
10
  init_UnifiedAuthProvider();
12
11
  export {
13
12
  UnifiedAuthProvider,
14
13
  useUnifiedAuth
15
14
  };
16
- //# sourceMappingURL=UnifiedAuthProvider-3NKDOSOK.js.map
15
+ //# sourceMappingURL=UnifiedAuthProvider-Z2FWNW7O.js.map
@@ -2,7 +2,9 @@ import {
2
2
  clearCache,
3
3
  getAccessLevel,
4
4
  getAppConfig,
5
+ getAppConfigWithClient,
5
6
  getPermissionMap,
7
+ getRoleContext,
6
8
  hasAllPermissions,
7
9
  hasAnyPermission,
8
10
  hasPermission,
@@ -15,15 +17,18 @@ import {
15
17
  isPermitted,
16
18
  isPermittedCached,
17
19
  isSuperAdmin,
20
+ resolveAppContext,
18
21
  setupRBAC
19
- } from "./chunk-FGMFQSHX.js";
20
- import "./chunk-B2WTCLCV.js";
22
+ } from "./chunk-S63MFSY6.js";
23
+ import "./chunk-Q7APDV6H.js";
21
24
  import "./chunk-PLDDJCW6.js";
22
25
  export {
23
26
  clearCache,
24
27
  getAccessLevel,
25
28
  getAppConfig,
29
+ getAppConfigWithClient,
26
30
  getPermissionMap,
31
+ getRoleContext,
27
32
  hasAllPermissions,
28
33
  hasAnyPermission,
29
34
  hasPermission,
@@ -36,6 +41,7 @@ export {
36
41
  isPermitted,
37
42
  isPermittedCached,
38
43
  isSuperAdmin,
44
+ resolveAppContext,
39
45
  setupRBAC
40
46
  };
41
- //# sourceMappingURL=api-DDMUKIUD.js.map
47
+ //# sourceMappingURL=api-KG4A2X7P.js.map
@@ -4,7 +4,7 @@ import {
4
4
  emitAuditEvent,
5
5
  getGlobalAuditManager,
6
6
  setGlobalAuditManager
7
- } from "./chunk-B2WTCLCV.js";
7
+ } from "./chunk-Q7APDV6H.js";
8
8
  import "./chunk-PLDDJCW6.js";
9
9
  export {
10
10
  RBACAuditManager,
@@ -13,4 +13,4 @@ export {
13
13
  getGlobalAuditManager,
14
14
  setGlobalAuditManager
15
15
  };
16
- //# sourceMappingURL=audit-6TOCAMKO.js.map
16
+ //# sourceMappingURL=audit-65VNHEV2.js.map