@jmruthers/pace-core 0.5.75 → 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 (507) 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-QCNCV6IK.js +157 -0
  5. package/dist/{PublicLoadingSpinner-BKNBT6b6.d.ts → PublicLoadingSpinner-CnUaz0vG.d.ts} +33 -19
  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-2DFZ432F.js → chunk-7PX43UYN.js} +197 -629
  11. package/dist/chunk-7PX43UYN.js.map +1 -0
  12. package/dist/{chunk-DAXLNIDY.js → chunk-C4RQ3GQA.js} +108 -32
  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-CY3AHGO4.js → chunk-DDPG7FCX.js} +3395 -3254
  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-ZTT2AXMX.js → chunk-LMYTEMUH.js} +153 -132
  25. package/dist/chunk-LMYTEMUH.js.map +1 -0
  26. package/dist/{chunk-33PHABLB.js → chunk-NKT2DLZI.js} +13 -130
  27. package/dist/chunk-NKT2DLZI.js.map +1 -0
  28. package/dist/chunk-PUKTJMRT.js +732 -0
  29. package/dist/chunk-PUKTJMRT.js.map +1 -0
  30. package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
  31. package/dist/chunk-Q7APDV6H.js.map +1 -0
  32. package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
  33. package/dist/chunk-S63MFSY6.js.map +1 -0
  34. package/dist/{chunk-NTNILOBC.js → chunk-TLD5BEU6.js} +4 -4
  35. package/dist/chunk-WUXCWRL6.js +20 -0
  36. package/dist/chunk-WUXCWRL6.js.map +1 -0
  37. package/dist/{chunk-YNUBMSMV.js → chunk-YCKPEMJA.js} +186 -263
  38. package/dist/chunk-YCKPEMJA.js.map +1 -0
  39. package/dist/{chunk-A4FUBC7B.js → chunk-Z3T6RK3K.js} +2 -4
  40. package/dist/{chunk-A4FUBC7B.js.map → chunk-Z3T6RK3K.js.map} +1 -1
  41. package/dist/components.d.ts +6 -6
  42. package/dist/components.js +17 -20
  43. package/dist/components.js.map +1 -1
  44. package/dist/{database-C3Szpi5J.d.ts → database-BXAfr2Y_.d.ts} +18 -0
  45. package/dist/hooks.d.ts +21 -44
  46. package/dist/hooks.js +12 -13
  47. package/dist/hooks.js.map +1 -1
  48. package/dist/index.d.ts +19 -27
  49. package/dist/index.js +27 -33
  50. package/dist/index.js.map +1 -1
  51. package/dist/{organisation-BtshODVF.d.ts → organisation-D6qRDtbF.d.ts} +1 -1
  52. package/dist/providers.d.ts +7 -21
  53. package/dist/providers.js +3 -10
  54. package/dist/rbac/index.d.ts +118 -215
  55. package/dist/rbac/index.js +18 -18
  56. package/dist/{types-CGX9Vyf5.d.ts → types-BDg1mAGG.d.ts} +36 -6
  57. package/dist/types.d.ts +3 -3
  58. package/dist/types.js +61 -18
  59. package/dist/types.js.map +1 -1
  60. package/dist/{unified-CM7T0aTK.d.ts → unified-DQ4VcT7H.d.ts} +1 -1
  61. package/dist/{usePublicRouteParams-B-CumWRc.d.ts → usePublicRouteParams-BlgwXweB.d.ts} +3 -3
  62. package/dist/utils.d.ts +2 -2
  63. package/dist/utils.js +52 -9
  64. package/dist/utils.js.map +1 -1
  65. package/docs/CONTENT_AUDIT_REPORT.md +253 -0
  66. package/docs/DOCUMENTATION_AUDIT.md +172 -0
  67. package/docs/README.md +142 -147
  68. package/docs/STYLE_GUIDE.md +37 -0
  69. package/docs/api/classes/ColumnFactory.md +17 -17
  70. package/docs/api/classes/ErrorBoundary.md +1 -1
  71. package/docs/api/classes/InvalidScopeError.md +4 -4
  72. package/docs/api/classes/MissingUserContextError.md +4 -4
  73. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  74. package/docs/api/classes/PermissionDeniedError.md +5 -5
  75. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  76. package/docs/api/classes/RBACAuditManager.md +8 -8
  77. package/docs/api/classes/RBACCache.md +35 -5
  78. package/docs/api/classes/RBACEngine.md +49 -20
  79. package/docs/api/classes/RBACError.md +4 -4
  80. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  81. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  82. package/docs/api/classes/StorageUtils.md +1 -1
  83. package/docs/api/enums/FileCategory.md +1 -1
  84. package/docs/api/interfaces/AggregateConfig.md +4 -4
  85. package/docs/api/interfaces/ButtonProps.md +1 -1
  86. package/docs/api/interfaces/CardProps.md +1 -1
  87. package/docs/api/interfaces/ColorPalette.md +1 -1
  88. package/docs/api/interfaces/ColorShade.md +1 -1
  89. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  90. package/docs/api/interfaces/DataRecord.md +11 -0
  91. package/docs/api/interfaces/DataTableAction.md +65 -29
  92. package/docs/api/interfaces/DataTableColumn.md +36 -23
  93. package/docs/api/interfaces/DataTableProps.md +80 -38
  94. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  95. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  96. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  97. package/docs/api/interfaces/EventLogoProps.md +1 -1
  98. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  99. package/docs/api/interfaces/FileMetadata.md +1 -1
  100. package/docs/api/interfaces/FileReference.md +1 -1
  101. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  102. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  103. package/docs/api/interfaces/FileUploadProps.md +1 -1
  104. package/docs/api/interfaces/FooterProps.md +1 -1
  105. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  106. package/docs/api/interfaces/InputProps.md +1 -1
  107. package/docs/api/interfaces/LabelProps.md +1 -1
  108. package/docs/api/interfaces/LoginFormProps.md +1 -1
  109. package/docs/api/interfaces/NavigationAccessRecord.md +11 -11
  110. package/docs/api/interfaces/NavigationContextType.md +9 -9
  111. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  112. package/docs/api/interfaces/NavigationItem.md +1 -1
  113. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  114. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  115. package/docs/api/interfaces/Organisation.md +1 -1
  116. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  117. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  118. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  119. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  120. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  121. package/docs/api/interfaces/PaceLoginPageProps.md +16 -3
  122. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  123. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  124. package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
  125. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  126. package/docs/api/interfaces/PaletteData.md +1 -1
  127. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  128. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  129. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  130. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  131. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  132. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  133. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  134. package/docs/api/interfaces/RBACConfig.md +1 -1
  135. package/docs/api/interfaces/RBACLogger.md +1 -1
  136. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  137. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  138. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  139. package/docs/api/interfaces/RouteConfig.md +2 -2
  140. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  141. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  142. package/docs/api/interfaces/StorageConfig.md +1 -1
  143. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  144. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  145. package/docs/api/interfaces/StorageListOptions.md +1 -1
  146. package/docs/api/interfaces/StorageListResult.md +1 -1
  147. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  148. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  149. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  150. package/docs/api/interfaces/StyleImport.md +1 -1
  151. package/docs/api/interfaces/SwitchProps.md +1 -1
  152. package/docs/api/interfaces/ToastActionElement.md +1 -1
  153. package/docs/api/interfaces/ToastProps.md +1 -1
  154. package/docs/api/interfaces/UnifiedAuthContextType.md +94 -521
  155. package/docs/api/interfaces/UnifiedAuthProviderProps.md +16 -16
  156. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  157. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  158. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  159. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  160. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  161. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  162. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  163. package/docs/api/interfaces/UseResolvedScopeOptions.md +47 -0
  164. package/docs/api/interfaces/UseResolvedScopeReturn.md +47 -0
  165. package/docs/api/interfaces/UserEventAccess.md +11 -11
  166. package/docs/api/interfaces/UserMenuProps.md +1 -1
  167. package/docs/api/interfaces/UserProfile.md +1 -1
  168. package/docs/api/modules.md +303 -275
  169. package/docs/api-reference/components.md +193 -0
  170. package/docs/api-reference/hooks.md +265 -0
  171. package/docs/api-reference/providers.md +32 -7
  172. package/docs/api-reference/types.md +6 -0
  173. package/docs/api-reference/utilities.md +207 -0
  174. package/docs/architecture/README.md +6 -0
  175. package/docs/{database-schema-requirements.md → architecture/database-schema-requirements.md} +6 -0
  176. package/docs/architecture/rbac-security-architecture.md +258 -0
  177. package/docs/architecture/services.md +9 -1
  178. package/docs/best-practices/README.md +26 -0
  179. package/docs/best-practices/accessibility.md +572 -0
  180. package/docs/{common-patterns.md → best-practices/common-patterns.md} +6 -0
  181. package/docs/best-practices/deployment.md +6 -0
  182. package/docs/best-practices/performance.md +475 -2
  183. package/docs/best-practices/security.md +6 -0
  184. package/docs/best-practices/testing.md +6 -0
  185. package/docs/core-concepts/authentication.md +21 -7
  186. package/docs/core-concepts/events.md +6 -0
  187. package/docs/core-concepts/organisations.md +6 -0
  188. package/docs/core-concepts/permissions.md +6 -0
  189. package/docs/core-concepts/rbac-system.md +6 -0
  190. package/docs/documentation-index.md +121 -182
  191. package/docs/{consuming-app-vite-config.md → getting-started/consuming-app-vite-config.md} +6 -0
  192. package/docs/getting-started/documentation-index.md +40 -0
  193. package/docs/getting-started/examples/README.md +878 -35
  194. package/docs/{faq.md → getting-started/faq.md} +7 -1
  195. package/docs/getting-started/installation-guide.md +6 -0
  196. package/docs/{quick-reference.md → getting-started/quick-reference.md} +6 -0
  197. package/docs/implementation-guides/app-layout.md +6 -0
  198. package/docs/implementation-guides/authentication.md +1021 -0
  199. package/docs/implementation-guides/component-styling.md +416 -0
  200. package/docs/implementation-guides/data-tables.md +1264 -2076
  201. package/docs/implementation-guides/dynamic-colors.md +6 -0
  202. package/docs/implementation-guides/event-theming-summary.md +6 -0
  203. package/docs/{file-reference-system.md → implementation-guides/file-reference-system.md} +6 -0
  204. package/docs/implementation-guides/file-upload-storage.md +6 -0
  205. package/docs/implementation-guides/forms.md +6 -0
  206. package/docs/implementation-guides/inactivity-tracking.md +6 -0
  207. package/docs/implementation-guides/navigation.md +6 -0
  208. package/docs/implementation-guides/organisation-security.md +6 -0
  209. package/docs/implementation-guides/permission-enforcement.md +6 -0
  210. package/docs/implementation-guides/public-pages-advanced.md +6 -0
  211. package/docs/implementation-guides/public-pages.md +6 -0
  212. package/docs/migration/MIGRATION_GUIDE.md +827 -351
  213. package/docs/migration/README.md +7 -1
  214. package/docs/migration/organisation-context-timing-fix.md +6 -0
  215. package/docs/migration/rbac-migration.md +44 -1
  216. package/docs/migration/service-architecture.md +6 -0
  217. package/docs/migration/v0.4.15-tailwind-scanning.md +6 -0
  218. package/docs/migration/v0.4.16-css-first-approach.md +6 -0
  219. package/docs/migration/v0.4.17-source-path-fix.md +6 -0
  220. package/docs/rbac/README-rbac-rls-integration.md +6 -0
  221. package/docs/rbac/README.md +6 -0
  222. package/docs/rbac/advanced-patterns.md +6 -0
  223. package/docs/rbac/api-reference.md +7 -1
  224. package/docs/rbac/breaking-changes-v3.md +222 -0
  225. package/docs/rbac/examples/rbac-rls-integration-example.md +6 -0
  226. package/docs/rbac/examples.md +6 -0
  227. package/docs/rbac/getting-started.md +6 -0
  228. package/docs/rbac/migration-guide.md +260 -0
  229. package/docs/rbac/quick-start.md +6 -0
  230. package/docs/rbac/rbac-rls-integration.md +6 -0
  231. package/docs/rbac/super-admin-guide.md +6 -0
  232. package/docs/rbac/troubleshooting.md +6 -0
  233. package/docs/security/README.md +6 -0
  234. package/docs/security/checklist.md +6 -0
  235. package/docs/styles/README.md +7 -1
  236. package/docs/{usage.md → styles/usage.md} +6 -0
  237. package/docs/testing/README.md +6 -0
  238. package/docs/{visual-testing.md → testing/visual-testing.md} +6 -0
  239. package/docs/troubleshooting/README.md +387 -5
  240. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +6 -0
  241. package/docs/troubleshooting/common-issues.md +6 -0
  242. package/docs/troubleshooting/database-view-compatibility.md +6 -0
  243. package/docs/troubleshooting/organisation-context-setup.md +6 -0
  244. package/docs/troubleshooting/react-hooks-issue-analysis.md +6 -0
  245. package/docs/troubleshooting/styling-issues.md +6 -0
  246. package/docs/troubleshooting/tailwind-content-scanning.md +6 -0
  247. package/package.json +1 -1
  248. package/src/__tests__/TEST_GUIDE_CURSOR.md +290 -0
  249. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -1
  250. package/src/__tests__/helpers/supabaseMock.ts +48 -2
  251. package/src/__tests__/helpers/test-providers.tsx +3 -53
  252. package/src/components/DataTable/DataTable.test.tsx +319 -0
  253. package/src/components/DataTable/DataTable.tsx +32 -11
  254. package/src/components/DataTable/__tests__/{DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx.skip} +6 -4
  255. package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +17 -6
  256. package/src/components/DataTable/__tests__/{DataTable.test.tsx → DataTable.test.tsx.skip} +6 -4
  257. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +96 -10
  258. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +601 -0
  259. package/src/components/DataTable/__tests__/keyboard.test.tsx +615 -0
  260. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +639 -0
  261. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx.skip +330 -0
  262. package/src/components/DataTable/components/AccessDeniedPage.tsx +2 -2
  263. package/src/components/DataTable/components/ActionButtons.tsx +88 -104
  264. package/src/components/DataTable/components/DataTableCore.tsx +442 -665
  265. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +4 -2
  266. package/src/components/DataTable/components/DataTableModals.tsx +22 -1
  267. package/src/components/DataTable/components/EditableRow.tsx +69 -84
  268. package/src/components/DataTable/components/EmptyState.tsx +5 -1
  269. package/src/components/DataTable/components/ImportModal.tsx +65 -36
  270. package/src/components/DataTable/components/PaginationControls.tsx +40 -100
  271. package/src/components/DataTable/components/UnifiedTableBody.tsx +222 -278
  272. package/src/components/DataTable/components/index.ts +1 -2
  273. package/src/components/DataTable/context/DataTableContext.tsx +1 -1
  274. package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +208 -275
  275. package/src/components/DataTable/core/ColumnFactory.ts +5 -0
  276. package/src/components/DataTable/core/index.ts +1 -8
  277. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +12 -10
  278. package/src/components/DataTable/examples/HierarchicalExample.tsx +1 -1
  279. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +1 -0
  280. package/src/components/DataTable/examples/PerformanceExample.tsx +1 -0
  281. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +521 -0
  282. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +570 -0
  283. package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +167 -0
  284. package/src/components/DataTable/hooks/__tests__/useHierarchicalState.test.ts +214 -0
  285. package/src/components/DataTable/hooks/__tests__/useTableColumns.test.ts +224 -0
  286. package/src/components/DataTable/hooks/index.ts +13 -0
  287. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +32 -15
  288. package/src/components/DataTable/hooks/useColumnReordering.ts +1 -0
  289. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +102 -0
  290. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +89 -0
  291. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +117 -0
  292. package/src/components/DataTable/hooks/useDataTablePermissions.ts +193 -0
  293. package/src/components/DataTable/hooks/useDataTableState.ts +51 -17
  294. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +33 -0
  295. package/src/components/DataTable/hooks/useHierarchicalState.ts +41 -9
  296. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +447 -0
  297. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +94 -0
  298. package/src/components/DataTable/hooks/useTableColumns.ts +156 -0
  299. package/src/components/DataTable/hooks/useTableHandlers.ts +174 -0
  300. package/src/components/DataTable/index.ts +13 -12
  301. package/src/components/DataTable/types.ts +129 -9
  302. package/src/components/DataTable/utils/__tests__/COVERAGE_NOTE.md +89 -0
  303. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +162 -28
  304. package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +573 -0
  305. package/src/components/DataTable/utils/__tests__/hierarchicalSorting.test.ts +247 -0
  306. package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +8 -6
  307. package/src/components/DataTable/utils/__tests__/performanceUtils.test.ts +466 -0
  308. package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +251 -0
  309. package/src/components/DataTable/utils/a11yUtils.ts +244 -0
  310. package/src/components/DataTable/utils/debugTools.ts +47 -21
  311. package/src/components/DataTable/utils/errorHandling.ts +52 -460
  312. package/src/components/DataTable/utils/exportUtils.ts +157 -28
  313. package/src/components/DataTable/utils/flexibleImport.ts +202 -32
  314. package/src/components/DataTable/utils/hierarchicalSorting.ts +50 -3
  315. package/src/components/DataTable/utils/hierarchicalUtils.ts +167 -34
  316. package/src/components/DataTable/utils/index.ts +7 -0
  317. package/src/components/DataTable/utils/paginationUtils.ts +350 -0
  318. package/src/components/DataTable/utils/rowUtils.ts +69 -0
  319. package/src/components/EventSelector/EventSelector.test.tsx +672 -0
  320. package/src/components/Label/__tests__/Label.test.tsx +434 -0
  321. package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -24
  322. package/src/components/NavigationMenu/NavigationMenu.tsx +19 -8
  323. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +1 -23
  324. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +56 -6
  325. package/src/components/PaceLoginPage/PaceLoginPage.tsx +137 -13
  326. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +190 -0
  327. package/src/components/PublicLayout/__tests__/PublicPageDebugger.test.tsx +185 -0
  328. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +1 -1
  329. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +313 -0
  330. package/src/components/Select/Select.test.tsx +143 -120
  331. package/src/components/Select/Select.tsx +48 -212
  332. package/src/components/Select/hooks.ts +36 -1
  333. package/src/components/Select/index.ts +2 -1
  334. package/src/components/examples/PermissionExample.tsx +173 -0
  335. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  336. package/src/examples/PublicEventPage.tsx +274 -0
  337. package/src/examples/PublicPageApp.tsx +308 -0
  338. package/src/examples/PublicPageUsageExample.tsx +216 -0
  339. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +12 -1
  340. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +129 -17
  341. package/src/hooks/__tests__/useRBAC.unit.test.ts +151 -846
  342. package/src/hooks/useOrganisationPermissions.test.ts +42 -18
  343. package/src/hooks/useOrganisationPermissions.ts +12 -6
  344. package/src/hooks/useOrganisationSecurity.test.ts +138 -85
  345. package/src/hooks/useOrganisationSecurity.ts +41 -10
  346. package/src/hooks/useSecureDataAccess.test.ts +32 -29
  347. package/src/index.ts +0 -1
  348. package/src/providers/AuthProvider.simplified.tsx +880 -0
  349. package/src/providers/UnifiedAuthProvider.test.simple.tsx +8 -8
  350. package/src/providers/__tests__/ProviderLifecycle.test.tsx +341 -0
  351. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +29 -19
  352. package/src/providers/index.ts +0 -1
  353. package/src/providers/services/EventServiceProvider.tsx +19 -15
  354. package/src/providers/services/InactivityServiceProvider.tsx +19 -15
  355. package/src/providers/services/OrganisationServiceProvider.tsx +19 -15
  356. package/src/providers/services/UnifiedAuthProvider.tsx +156 -127
  357. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +1 -1
  358. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -3
  359. package/src/rbac/README.md +1 -1
  360. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +25 -27
  361. package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +313 -0
  362. package/src/rbac/__tests__/engine.comprehensive.test.ts +114 -348
  363. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +28 -110
  364. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +33 -85
  365. package/src/rbac/__tests__/scenarios.user-role.test.tsx +2 -2
  366. package/src/rbac/adapters.tsx +26 -69
  367. package/src/rbac/api.test.ts +90 -27
  368. package/src/rbac/api.ts +61 -10
  369. package/src/rbac/audit.test.ts +33 -38
  370. package/src/rbac/audit.ts +21 -6
  371. package/src/rbac/cache.ts +33 -1
  372. package/src/rbac/components/NavigationGuard.tsx +11 -11
  373. package/src/rbac/components/NavigationProvider.test.tsx +11 -5
  374. package/src/rbac/components/NavigationProvider.tsx +37 -13
  375. package/src/rbac/components/PagePermissionGuard.tsx +111 -50
  376. package/src/rbac/components/PagePermissionProvider.tsx +5 -5
  377. package/src/rbac/components/PermissionEnforcer.tsx +11 -11
  378. package/src/rbac/components/RoleBasedRouter.tsx +5 -5
  379. package/src/rbac/components/SecureDataProvider.tsx +5 -5
  380. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +8 -8
  381. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +14 -14
  382. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +12 -12
  383. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +6 -6
  384. package/src/rbac/engine.test.simple.ts +19 -13
  385. package/src/rbac/engine.test.ts +1 -0
  386. package/src/rbac/engine.ts +330 -766
  387. package/src/rbac/errors.ts +156 -0
  388. package/src/rbac/hooks/__tests__/usePermissions.integration.test.ts +437 -0
  389. package/src/rbac/hooks/index.ts +2 -0
  390. package/src/rbac/hooks/usePermissions.ts +32 -10
  391. package/src/rbac/hooks/useRBAC.test.ts +126 -512
  392. package/src/rbac/hooks/useRBAC.ts +147 -193
  393. package/src/rbac/hooks/useResolvedScope.ts +244 -0
  394. package/src/rbac/index.ts +7 -4
  395. package/src/rbac/security.ts +109 -18
  396. package/src/rbac/types.ts +12 -1
  397. package/src/services/AuthService.ts +2 -15
  398. package/src/services/EventService.ts +26 -46
  399. package/src/services/OrganisationService.ts +51 -31
  400. package/src/services/__tests__/AuthService.test.ts +1 -1
  401. package/src/services/__tests__/EventService.test.ts +1 -1
  402. package/src/services/__tests__/InactivityService.lifecycle.test.ts +411 -0
  403. package/src/services/__tests__/OrganisationService.pagination.test.ts +375 -0
  404. package/src/services/__tests__/OrganisationService.test.ts +1 -1
  405. package/src/styles/base.css +208 -0
  406. package/src/styles/semantic.css +24 -0
  407. package/src/types/__tests__/README.md +114 -0
  408. package/src/types/__tests__/validation.test.ts +731 -0
  409. package/src/types/database.generated.ts +7347 -0
  410. package/src/types/database.ts +20 -0
  411. package/src/utils/__tests__/file-reference.test.ts +383 -0
  412. package/src/utils/__tests__/performanceBenchmark.test.ts +175 -0
  413. package/src/utils/appNameResolver.test.ts +54 -0
  414. package/src/utils/logger.ts +179 -0
  415. package/src/utils/organisationContext.ts +11 -4
  416. package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
  417. package/src/validation/__tests__/csrf.unit.test.ts +63 -0
  418. package/src/validation/__tests__/passwordSchema.unit.test.ts +105 -0
  419. package/dist/DataTable-HWZQGASI.js +0 -102
  420. package/dist/appNameResolver-UURKN7NF.js +0 -22
  421. package/dist/audit-6TOCAMKO.js.map +0 -1
  422. package/dist/chunk-2CHATWBF.js +0 -523
  423. package/dist/chunk-2CHATWBF.js.map +0 -1
  424. package/dist/chunk-2DFZ432F.js.map +0 -1
  425. package/dist/chunk-33PHABLB.js.map +0 -1
  426. package/dist/chunk-B2WTCLCV.js.map +0 -1
  427. package/dist/chunk-CY3AHGO4.js.map +0 -1
  428. package/dist/chunk-DAXLNIDY.js.map +0 -1
  429. package/dist/chunk-FGMFQSHX.js.map +0 -1
  430. package/dist/chunk-TYHR5X4W.js +0 -33
  431. package/dist/chunk-TYHR5X4W.js.map +0 -1
  432. package/dist/chunk-ULBI5JGB.js +0 -109
  433. package/dist/chunk-ULBI5JGB.js.map +0 -1
  434. package/dist/chunk-WN6XJWOS.js.map +0 -1
  435. package/dist/chunk-XLZ7U46Z.js.map +0 -1
  436. package/dist/chunk-YNUBMSMV.js.map +0 -1
  437. package/dist/chunk-ZTT2AXMX.js.map +0 -1
  438. package/dist/eventContext-BBA42P6G.js +0 -14
  439. package/dist/eventContext-BBA42P6G.js.map +0 -1
  440. package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
  441. package/docs/api/interfaces/RBACContextType.md +0 -468
  442. package/docs/api/interfaces/RBACProviderProps.md +0 -107
  443. package/docs/breaking-changes.md +0 -179
  444. package/docs/consuming-app-example.md +0 -290
  445. package/docs/documentation-style-checklist.md +0 -294
  446. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  447. package/docs/getting-started/examples/basic-auth-app.md +0 -520
  448. package/docs/getting-started/examples/full-featured-app.md +0 -616
  449. package/docs/getting-started/quick-start.md +0 -426
  450. package/docs/implementation-guides/datatable-filtering.md +0 -313
  451. package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
  452. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  453. package/docs/implementation-guides/large-datasets.md +0 -281
  454. package/docs/implementation-guides/performance.md +0 -403
  455. package/docs/migration/quick-migration-guide.md +0 -320
  456. package/docs/migration-guide.md +0 -193
  457. package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
  458. package/docs/performance/README.md +0 -551
  459. package/docs/style-guide.md +0 -925
  460. package/docs/troubleshooting/authentication-issues.md +0 -334
  461. package/docs/troubleshooting/debugging.md +0 -1117
  462. package/docs/troubleshooting/migration.md +0 -918
  463. package/src/__tests__/hooks/usePermissions.test.ts +0 -261
  464. package/src/components/DataTable/components/DataTableBody.tsx +0 -488
  465. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -144
  466. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -515
  467. package/src/components/DataTable/core/ActionManager.ts +0 -235
  468. package/src/components/DataTable/core/ColumnManager.ts +0 -215
  469. package/src/components/DataTable/core/DataManager.ts +0 -188
  470. package/src/components/DataTable/core/DataTableContext.tsx +0 -181
  471. package/src/components/DataTable/core/LocalDataAdapter.ts +0 -264
  472. package/src/components/DataTable/core/PluginRegistry.ts +0 -229
  473. package/src/components/DataTable/core/StateManager.ts +0 -311
  474. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +0 -634
  475. package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +0 -193
  476. package/src/components/DataTable/core/__tests__/DataManager.test.ts +0 -519
  477. package/src/components/DataTable/core/__tests__/StateManager.test.ts +0 -714
  478. package/src/components/DataTable/core/interfaces.ts +0 -338
  479. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
  480. package/src/components/Select/Select.bug-test.tsx +0 -69
  481. package/src/components/Select/Select.refactored.tsx +0 -497
  482. package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
  483. package/src/hooks/services/usePermissions.ts +0 -70
  484. package/src/hooks/services/useRBACService.ts +0 -30
  485. package/src/hooks/usePermissionCheck.ts +0 -150
  486. package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
  487. package/src/providers/services/RBACServiceProvider.tsx +0 -79
  488. package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
  489. package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
  490. package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
  491. package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
  492. package/src/rbac/providers/RBACProvider.tsx +0 -645
  493. package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
  494. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
  495. package/src/rbac/providers/index.ts +0 -11
  496. package/src/services/RBACService.ts +0 -522
  497. package/src/services/__tests__/RBACService.test.ts +0 -492
  498. package/src/services/interfaces/IRBACService.ts +0 -62
  499. package/src/utils/appNameResolver.test 2.ts +0 -494
  500. /package/dist/{DataTable-HWZQGASI.js.map → DataTable-QCNCV6IK.js.map} +0 -0
  501. /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-Z2FWNW7O.js.map} +0 -0
  502. /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
  503. /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
  504. /package/dist/{chunk-LW7MMEAQ.js.map → chunk-CRKP3HXI.js.map} +0 -0
  505. /package/dist/{chunk-URUTVZ7N.js.map → chunk-DVHZ5L55.js.map} +0 -0
  506. /package/dist/{chunk-NTNILOBC.js.map → chunk-TLD5BEU6.js.map} +0 -0
  507. /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
@@ -0,0 +1,157 @@
1
+ import {
2
+ ActionButtons,
3
+ BulkOperationsDropdown,
4
+ ColumnFactory,
5
+ ColumnVisibilityDropdown,
6
+ DataTable,
7
+ DataTableCore,
8
+ DataTableErrorBoundary,
9
+ DataTableModals,
10
+ DataTableToolbar,
11
+ EditableRow,
12
+ EmptyState,
13
+ EnhancedPaginationControls,
14
+ GroupHeader,
15
+ GroupingDropdown,
16
+ ImportModal,
17
+ LoadingState,
18
+ PaginationControls,
19
+ UnifiedTableBody,
20
+ announce,
21
+ announceBulkOperation,
22
+ announceFilterChange,
23
+ announceLoadingState,
24
+ announcePaginationChange,
25
+ announceSearchResults,
26
+ announceSelectionChange,
27
+ announceSortChange,
28
+ calculateAllDepths,
29
+ calculateAllIndentation,
30
+ calculateIndentation,
31
+ calculateOptimalPageSize,
32
+ cleanupLiveRegion,
33
+ createHierarchicalStructure,
34
+ defaultDataTableFeatures,
35
+ exportToCSV,
36
+ generateCSVContent,
37
+ getAriaSortValue,
38
+ getCellRenderer,
39
+ getHierarchicalSortConfig,
40
+ getPageSizeOptions,
41
+ getPaginationBinding,
42
+ getRowDepth,
43
+ getRowDescription,
44
+ getRowIdSafe,
45
+ getSortButtonLabel,
46
+ groupHierarchicalData,
47
+ hasValidRowId,
48
+ initializeLiveRegion,
49
+ isHierarchicalSortableColumn,
50
+ normalizeDataTableFeatures,
51
+ shouldShowColumnForRow,
52
+ sortHierarchicalDataByStructure,
53
+ sortHierarchicalDataWithSorting,
54
+ validateHierarchicalData,
55
+ validatePaginationConfig
56
+ } from "./chunk-DDPG7FCX.js";
57
+ import "./chunk-PUKTJMRT.js";
58
+ import "./chunk-S63MFSY6.js";
59
+ import "./chunk-Q7APDV6H.js";
60
+ import {
61
+ CircuitBreaker,
62
+ DEFAULT_FALLBACK_CONFIG,
63
+ DataChunkManager,
64
+ DataTableError,
65
+ DataTableErrorType,
66
+ ErrorRecoveryManager,
67
+ MemoryMonitor,
68
+ SearchIndex,
69
+ VisibilityTracker,
70
+ chunkData,
71
+ debounce,
72
+ determinePaginationMode,
73
+ getOptimalPageSizeOptions,
74
+ safeExecute,
75
+ throttle,
76
+ useDataTablePerformance
77
+ } from "./chunk-YCKPEMJA.js";
78
+ import "./chunk-CRKP3HXI.js";
79
+ import "./chunk-DVHZ5L55.js";
80
+ import "./chunk-JDQ7T3QB.js";
81
+ import "./chunk-PYUXFQJ3.js";
82
+ import "./chunk-JCQZ6LA7.js";
83
+ import "./chunk-CVMVPYAL.js";
84
+ import "./chunk-PLDDJCW6.js";
85
+ export {
86
+ ActionButtons,
87
+ BulkOperationsDropdown,
88
+ CircuitBreaker,
89
+ ColumnFactory,
90
+ ColumnVisibilityDropdown,
91
+ DEFAULT_FALLBACK_CONFIG,
92
+ DataChunkManager,
93
+ DataTable,
94
+ DataTableCore,
95
+ DataTableError,
96
+ DataTableErrorBoundary,
97
+ DataTableErrorType,
98
+ DataTableModals,
99
+ DataTableToolbar,
100
+ EditableRow,
101
+ EmptyState,
102
+ EnhancedPaginationControls,
103
+ ErrorRecoveryManager,
104
+ GroupHeader,
105
+ GroupingDropdown,
106
+ ImportModal,
107
+ LoadingState,
108
+ MemoryMonitor,
109
+ PaginationControls,
110
+ SearchIndex,
111
+ UnifiedTableBody,
112
+ VisibilityTracker,
113
+ announce,
114
+ announceBulkOperation,
115
+ announceFilterChange,
116
+ announceLoadingState,
117
+ announcePaginationChange,
118
+ announceSearchResults,
119
+ announceSelectionChange,
120
+ announceSortChange,
121
+ calculateAllDepths,
122
+ calculateAllIndentation,
123
+ calculateIndentation,
124
+ calculateOptimalPageSize,
125
+ chunkData,
126
+ cleanupLiveRegion,
127
+ createHierarchicalStructure,
128
+ debounce,
129
+ defaultDataTableFeatures,
130
+ determinePaginationMode,
131
+ exportToCSV,
132
+ generateCSVContent,
133
+ getAriaSortValue,
134
+ getCellRenderer,
135
+ getHierarchicalSortConfig,
136
+ getOptimalPageSizeOptions,
137
+ getPageSizeOptions,
138
+ getPaginationBinding,
139
+ getRowDepth,
140
+ getRowDescription,
141
+ getRowIdSafe,
142
+ getSortButtonLabel,
143
+ groupHierarchicalData,
144
+ hasValidRowId,
145
+ initializeLiveRegion,
146
+ isHierarchicalSortableColumn,
147
+ normalizeDataTableFeatures,
148
+ safeExecute,
149
+ shouldShowColumnForRow,
150
+ sortHierarchicalDataByStructure,
151
+ sortHierarchicalDataWithSorting,
152
+ throttle,
153
+ useDataTablePerformance,
154
+ validateHierarchicalData,
155
+ validatePaginationConfig
156
+ };
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> {
@@ -856,32 +856,43 @@ declare const DialogTitle: React.ForwardRefExoticComponent<DialogTitleProps & Re
856
856
  declare const DialogDescription: React.ForwardRefExoticComponent<DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
857
857
 
858
858
  /**
859
- * @file Select Component - Simple HTML Structure
859
+ * @file Select Hooks - Custom hooks for Select component state management
860
860
  * @package @jmruthers/pace-core
861
- * @module Components/Select
862
- * @since 0.3.0
863
- *
864
- * A simple select component using semantic HTML structure
865
- * with proper DOM nesting and accessibility.
861
+ * @module Components/Select/Hooks
862
+ * @since 0.4.0
866
863
  *
867
- * Features:
868
- * - Semantic HTML with <form> + <button> + <ul> + <li>
869
- * - Proper DOM nesting (no button inside select)
870
- * - Built on pace-core Button component for consistency
871
- * - Simple positioning and styling
872
- * - Better accessibility and SEO
873
- * - Backward compatible API
864
+ * Custom hooks for Select component following SOLID principles:
865
+ * - Single Responsibility: Each hook handles one concern
866
+ * - Open/Closed: Easy to extend without modification
867
+ * - Dependency Inversion: Abstractions over concrete implementations
874
868
  */
875
869
 
876
- interface SelectProps extends Omit<React.HTMLAttributes<HTMLFormElement>, 'onChange' | 'onKeyDown' | 'onFocus' | 'onBlur'> {
870
+ interface UseSelectStateProps {
877
871
  value?: string;
878
872
  defaultValue?: string;
879
873
  selectedText?: string;
880
- onValueChange?: (value: string) => void;
881
874
  open?: boolean;
882
875
  defaultOpen?: boolean;
883
- onOpenChange?: (open: boolean) => void;
884
876
  disabled?: boolean;
877
+ onValueChange?: (value: string) => void;
878
+ onOpenChange?: (open: boolean) => void;
879
+ }
880
+
881
+ /**
882
+ * @file Select Component - Refactored SOLID Implementation
883
+ * @package @jmruthers/pace-core
884
+ * @module Components/Select
885
+ * @since 0.4.0
886
+ *
887
+ * Refactored Select component following SOLID principles:
888
+ * - Single Responsibility: Each component has one clear purpose
889
+ * - Open/Closed: Easy to extend without modification
890
+ * - Liskov Substitution: Components can be substituted
891
+ * - Interface Segregation: Small, focused interfaces
892
+ * - Dependency Inversion: Depends on abstractions, not concretions
893
+ */
894
+
895
+ interface SelectProps extends Omit<React.HTMLAttributes<HTMLFormElement>, 'onChange' | 'onKeyDown' | 'onFocus' | 'onBlur'> {
885
896
  children: React.ReactNode;
886
897
  className?: string;
887
898
  }
@@ -908,7 +919,7 @@ interface SelectItemProps {
908
919
  className?: string;
909
920
  onClick?: (e: React.MouseEvent) => void;
910
921
  }
911
- declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLFormElement>>;
922
+ declare const Select: React.ForwardRefExoticComponent<SelectProps & UseSelectStateProps & React.RefAttributes<HTMLFormElement>>;
912
923
  declare const SelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<HTMLButtonElement>>;
913
924
  declare const SelectValue: React.ForwardRefExoticComponent<SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
914
925
  declare const SelectContent: React.ForwardRefExoticComponent<SelectContentProps & React.RefAttributes<HTMLUListElement>>;
@@ -2518,6 +2529,8 @@ interface PaceLoginPageProps {
2518
2529
  appName: string;
2519
2530
  /** The path to redirect to upon successful login. Defaults to `/`. */
2520
2531
  onSuccessRedirectPath?: string;
2532
+ /** Whether to check app access using RBAC. Defaults to false. */
2533
+ requireAppAccess?: boolean;
2521
2534
  }
2522
2535
  /**
2523
2536
  * A consistent, reusable login page for all PACE suite applications.
@@ -2526,6 +2539,7 @@ interface PaceLoginPageProps {
2526
2539
  *
2527
2540
  * Recent enhancements:
2528
2541
  * - Role-based redirection: Admin users are automatically redirected
2542
+ * - RBAC-based app access control: Checks if user has permission to access the app
2529
2543
  * - Enhanced error handling with navigation error recovery
2530
2544
  * - Dual loading states: auth loading + form submission loading
2531
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