@jmruthers/pace-core 0.5.76 → 0.5.78

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 (447) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{RBACService-C4udt_Zp.d.ts → AuthService-Df3IozMG.d.ts} +10 -118
  3. package/dist/{DataTable-ntgmhO2W.d.ts → DataTable-BE0OXZKQ.d.ts} +9 -2
  4. package/dist/{DataTable-4GAVPIEG.js → DataTable-ETGVF4Y5.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-P5SOJAQ6.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-2OGV6IRV.js} +196 -626
  11. package/dist/chunk-2OGV6IRV.js.map +1 -0
  12. package/dist/{chunk-NTNILOBC.js → chunk-5BO3MI5Y.js} +4 -4
  13. package/dist/{chunk-XLZ7U46Z.js → chunk-CVMVPYAL.js} +9 -60
  14. package/dist/chunk-CVMVPYAL.js.map +1 -0
  15. package/dist/{chunk-URUTVZ7N.js → chunk-FL4ZCQLD.js} +2 -2
  16. package/dist/{chunk-LW7MMEAQ.js → chunk-FT2M4R4F.js} +2 -2
  17. package/dist/{chunk-5BSLGBYI.js → chunk-JCQZ6LA7.js} +2 -8
  18. package/dist/{chunk-5BSLGBYI.js.map → chunk-JCQZ6LA7.js.map} +1 -1
  19. package/dist/{chunk-KHJS6VIA.js → chunk-LRQ6RBJC.js} +157 -112
  20. package/dist/chunk-LRQ6RBJC.js.map +1 -0
  21. package/dist/{chunk-WN6XJWOS.js → chunk-MNJXXD6C.js} +274 -743
  22. package/dist/chunk-MNJXXD6C.js.map +1 -0
  23. package/dist/{chunk-KK73ZB4E.js → chunk-PTR5PMPE.js} +153 -132
  24. package/dist/chunk-PTR5PMPE.js.map +1 -0
  25. package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
  26. package/dist/chunk-Q7APDV6H.js.map +1 -0
  27. package/dist/{chunk-A4FUBC7B.js → chunk-QGVSOUJ2.js} +2 -4
  28. package/dist/{chunk-A4FUBC7B.js.map → chunk-QGVSOUJ2.js.map} +1 -1
  29. package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
  30. package/dist/chunk-S63MFSY6.js.map +1 -0
  31. package/dist/{chunk-AFGTSUAD.js → chunk-VSOKOFRF.js} +4 -4
  32. package/dist/chunk-WUXCWRL6.js +20 -0
  33. package/dist/chunk-WUXCWRL6.js.map +1 -0
  34. package/dist/{chunk-Y6TXWPJO.js → chunk-YVVGHRGI.js} +105 -31
  35. package/dist/chunk-YVVGHRGI.js.map +1 -0
  36. package/dist/{chunk-M5IWZRBT.js → chunk-ZMNXIJP4.js} +2187 -981
  37. package/dist/chunk-ZMNXIJP4.js.map +1 -0
  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 +8 -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 +70 -13
  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 +43 -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/services/base/BaseService.ts +8 -0
  373. package/src/styles/base.css +208 -0
  374. package/src/styles/semantic.css +24 -0
  375. package/src/types/database.generated.ts +7347 -0
  376. package/src/types/database.ts +20 -0
  377. package/src/utils/logger.ts +179 -0
  378. package/src/utils/organisationContext.ts +11 -4
  379. package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
  380. package/dist/appNameResolver-UURKN7NF.js +0 -22
  381. package/dist/audit-6TOCAMKO.js.map +0 -1
  382. package/dist/chunk-B2WTCLCV.js.map +0 -1
  383. package/dist/chunk-FGMFQSHX.js.map +0 -1
  384. package/dist/chunk-K34IM5CT.js.map +0 -1
  385. package/dist/chunk-KHJS6VIA.js.map +0 -1
  386. package/dist/chunk-KK73ZB4E.js.map +0 -1
  387. package/dist/chunk-M5IWZRBT.js.map +0 -1
  388. package/dist/chunk-ULBI5JGB.js +0 -109
  389. package/dist/chunk-ULBI5JGB.js.map +0 -1
  390. package/dist/chunk-WN6XJWOS.js.map +0 -1
  391. package/dist/chunk-XLZ7U46Z.js.map +0 -1
  392. package/dist/chunk-Y6TXWPJO.js.map +0 -1
  393. package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
  394. package/docs/TERMINOLOGY.md +0 -231
  395. package/docs/api/interfaces/RBACContextType.md +0 -468
  396. package/docs/api/interfaces/RBACProviderProps.md +0 -107
  397. package/docs/best-practices/performance-expansion.md +0 -473
  398. package/docs/breaking-changes.md +0 -179
  399. package/docs/consuming-app-example.md +0 -290
  400. package/docs/documentation-templates.md +0 -539
  401. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  402. package/docs/getting-started/examples/basic-auth-app.md +0 -520
  403. package/docs/getting-started/examples/full-featured-app.md +0 -616
  404. package/docs/getting-started/quick-start.md +0 -376
  405. package/docs/implementation-guides/datatable-filtering.md +0 -313
  406. package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
  407. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  408. package/docs/implementation-guides/large-datasets.md +0 -281
  409. package/docs/implementation-guides/performance.md +0 -403
  410. package/docs/migration/quick-migration-guide.md +0 -320
  411. package/docs/migration-guide.md +0 -193
  412. package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
  413. package/docs/performance/README.md +0 -551
  414. package/docs/style-guide.md +0 -964
  415. package/docs/troubleshooting/authentication-issues.md +0 -334
  416. package/docs/troubleshooting/debugging.md +0 -1117
  417. package/docs/troubleshooting/migration.md +0 -918
  418. package/src/__tests__/hooks/usePermissions.test.ts +0 -261
  419. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
  420. package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
  421. package/src/hooks/services/__tests__/useServiceHooks.test.tsx +0 -137
  422. package/src/hooks/services/usePermissions.ts +0 -70
  423. package/src/hooks/services/useRBACService.ts +0 -30
  424. package/src/hooks/usePermissionCheck.ts +0 -150
  425. package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
  426. package/src/providers/services/RBACServiceProvider.tsx +0 -79
  427. package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
  428. package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
  429. package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
  430. package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
  431. package/src/rbac/providers/RBACProvider.tsx +0 -645
  432. package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
  433. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
  434. package/src/rbac/providers/index.ts +0 -11
  435. package/src/services/RBACService.ts +0 -522
  436. package/src/services/__tests__/RBACService.test.ts +0 -492
  437. package/src/services/interfaces/IRBACService.ts +0 -62
  438. package/src/utils/appNameResolver.test 2.ts +0 -494
  439. /package/dist/{DataTable-4GAVPIEG.js.map → DataTable-ETGVF4Y5.js.map} +0 -0
  440. /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-P5SOJAQ6.js.map} +0 -0
  441. /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
  442. /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
  443. /package/dist/{chunk-NTNILOBC.js.map → chunk-5BO3MI5Y.js.map} +0 -0
  444. /package/dist/{chunk-URUTVZ7N.js.map → chunk-FL4ZCQLD.js.map} +0 -0
  445. /package/dist/{chunk-LW7MMEAQ.js.map → chunk-FT2M4R4F.js.map} +0 -0
  446. /package/dist/{chunk-AFGTSUAD.js.map → chunk-VSOKOFRF.js.map} +0 -0
  447. /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
@@ -96,6 +42,11 @@ declare abstract class BaseService {
96
42
  * Check if service is initialized
97
43
  */
98
44
  protected getInitialized(): boolean;
45
+ /**
46
+ * Reset initialization state (allows re-initialization)
47
+ * Use when dependencies change and service needs to re-initialize
48
+ */
49
+ protected resetInitialization(): void;
99
50
  /**
100
51
  * Override in subclasses to implement initialization logic
101
52
  */
@@ -155,8 +106,8 @@ declare class EventService extends BaseService implements IEventService {
155
106
  private isFetchingRef;
156
107
  private hasAutoSelectedRef;
157
108
  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;
109
+ constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void);
110
+ updateDependencies(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void): void;
160
111
  getEvents(): Event[];
161
112
  getSelectedEvent(): Event | null;
162
113
  isLoading(): boolean;
@@ -466,63 +417,4 @@ declare class AuthService extends BaseService implements IAuthService {
466
417
  private removeErrorHandlers;
467
418
  }
468
419
 
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 };
420
+ 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-ZMNXIJP4.js";
57
+ import "./chunk-LRQ6RBJC.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-FT2M4R4F.js";
79
+ import "./chunk-FL4ZCQLD.js";
80
+ import "./chunk-MNJXXD6C.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-ETGVF4Y5.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-FL4ZCQLD.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-MNJXXD6C.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-P5SOJAQ6.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