@jmruthers/pace-core 0.5.76 → 0.5.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{RBACService-C4udt_Zp.d.ts → AuthService-SBHZQtCH.d.ts} +5 -118
  3. package/dist/{DataTable-ntgmhO2W.d.ts → DataTable-BE0OXZKQ.d.ts} +9 -2
  4. package/dist/{DataTable-4GAVPIEG.js → DataTable-QCNCV6IK.js} +50 -13
  5. package/dist/{PublicLoadingSpinner-BiNER8F5.d.ts → PublicLoadingSpinner-CnUaz0vG.d.ts} +5 -2
  6. package/dist/{UnifiedAuthProvider-Bj6YCf7c.d.ts → UnifiedAuthProvider-B391Aqum.d.ts} +42 -45
  7. package/dist/{UnifiedAuthProvider-3NKDOSOK.js → UnifiedAuthProvider-Z2FWNW7O.js} +4 -5
  8. package/dist/{api-DDMUKIUD.js → api-KG4A2X7P.js} +9 -3
  9. package/dist/{audit-6TOCAMKO.js → audit-65VNHEV2.js} +2 -2
  10. package/dist/{chunk-K34IM5CT.js → chunk-7PX43UYN.js} +196 -626
  11. package/dist/chunk-7PX43UYN.js.map +1 -0
  12. package/dist/{chunk-Y6TXWPJO.js → chunk-C4RQ3GQA.js} +105 -31
  13. package/dist/chunk-C4RQ3GQA.js.map +1 -0
  14. package/dist/{chunk-LW7MMEAQ.js → chunk-CRKP3HXI.js} +2 -2
  15. package/dist/{chunk-XLZ7U46Z.js → chunk-CVMVPYAL.js} +9 -60
  16. package/dist/chunk-CVMVPYAL.js.map +1 -0
  17. package/dist/{chunk-M5IWZRBT.js → chunk-DDPG7FCX.js} +2187 -981
  18. package/dist/chunk-DDPG7FCX.js.map +1 -0
  19. package/dist/{chunk-URUTVZ7N.js → chunk-DVHZ5L55.js} +2 -2
  20. package/dist/{chunk-5BSLGBYI.js → chunk-JCQZ6LA7.js} +2 -8
  21. package/dist/{chunk-5BSLGBYI.js.map → chunk-JCQZ6LA7.js.map} +1 -1
  22. package/dist/{chunk-WN6XJWOS.js → chunk-JDQ7T3QB.js} +256 -743
  23. package/dist/chunk-JDQ7T3QB.js.map +1 -0
  24. package/dist/{chunk-KK73ZB4E.js → chunk-LMYTEMUH.js} +153 -132
  25. package/dist/chunk-LMYTEMUH.js.map +1 -0
  26. package/dist/{chunk-AFGTSUAD.js → chunk-NKT2DLZI.js} +4 -4
  27. package/dist/{chunk-KHJS6VIA.js → chunk-PUKTJMRT.js} +157 -112
  28. package/dist/chunk-PUKTJMRT.js.map +1 -0
  29. package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
  30. package/dist/chunk-Q7APDV6H.js.map +1 -0
  31. package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
  32. package/dist/chunk-S63MFSY6.js.map +1 -0
  33. package/dist/{chunk-NTNILOBC.js → chunk-TLD5BEU6.js} +4 -4
  34. package/dist/chunk-WUXCWRL6.js +20 -0
  35. package/dist/chunk-WUXCWRL6.js.map +1 -0
  36. package/dist/{chunk-A4FUBC7B.js → chunk-Z3T6RK3K.js} +2 -4
  37. package/dist/{chunk-A4FUBC7B.js.map → chunk-Z3T6RK3K.js.map} +1 -1
  38. package/dist/components.d.ts +6 -6
  39. package/dist/components.js +14 -18
  40. package/dist/components.js.map +1 -1
  41. package/dist/{database-C3Szpi5J.d.ts → database-BXAfr2Y_.d.ts} +18 -0
  42. package/dist/hooks.d.ts +5 -5
  43. package/dist/hooks.js +8 -9
  44. package/dist/hooks.js.map +1 -1
  45. package/dist/index.d.ts +19 -27
  46. package/dist/index.js +21 -29
  47. package/dist/index.js.map +1 -1
  48. package/dist/{organisation-BtshODVF.d.ts → organisation-D6qRDtbF.d.ts} +1 -1
  49. package/dist/providers.d.ts +7 -21
  50. package/dist/providers.js +3 -10
  51. package/dist/rbac/index.d.ts +71 -221
  52. package/dist/rbac/index.js +15 -16
  53. package/dist/{types-CGX9Vyf5.d.ts → types-BDg1mAGG.d.ts} +36 -6
  54. package/dist/types.d.ts +3 -3
  55. package/dist/types.js +61 -18
  56. package/dist/types.js.map +1 -1
  57. package/dist/{unified-CM7T0aTK.d.ts → unified-DQ4VcT7H.d.ts} +1 -1
  58. package/dist/{usePublicRouteParams-B-CumWRc.d.ts → usePublicRouteParams-BlgwXweB.d.ts} +3 -3
  59. package/dist/utils.d.ts +2 -2
  60. package/dist/utils.js +52 -9
  61. package/dist/utils.js.map +1 -1
  62. package/docs/CONTENT_AUDIT_REPORT.md +253 -0
  63. package/docs/DOCUMENTATION_AUDIT.md +172 -0
  64. package/docs/README.md +142 -147
  65. package/docs/STYLE_GUIDE.md +37 -0
  66. package/docs/api/classes/ColumnFactory.md +17 -17
  67. package/docs/api/classes/ErrorBoundary.md +1 -1
  68. package/docs/api/classes/InvalidScopeError.md +4 -4
  69. package/docs/api/classes/MissingUserContextError.md +4 -4
  70. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  71. package/docs/api/classes/PermissionDeniedError.md +5 -5
  72. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  73. package/docs/api/classes/RBACAuditManager.md +8 -8
  74. package/docs/api/classes/RBACCache.md +35 -5
  75. package/docs/api/classes/RBACEngine.md +49 -20
  76. package/docs/api/classes/RBACError.md +4 -4
  77. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  78. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  79. package/docs/api/classes/StorageUtils.md +1 -1
  80. package/docs/api/enums/FileCategory.md +1 -1
  81. package/docs/api/interfaces/AggregateConfig.md +4 -4
  82. package/docs/api/interfaces/ButtonProps.md +1 -1
  83. package/docs/api/interfaces/CardProps.md +1 -1
  84. package/docs/api/interfaces/ColorPalette.md +1 -1
  85. package/docs/api/interfaces/ColorShade.md +1 -1
  86. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  87. package/docs/api/interfaces/DataRecord.md +11 -0
  88. package/docs/api/interfaces/DataTableAction.md +65 -29
  89. package/docs/api/interfaces/DataTableColumn.md +36 -23
  90. package/docs/api/interfaces/DataTableProps.md +80 -38
  91. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  92. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  93. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  94. package/docs/api/interfaces/EventLogoProps.md +1 -1
  95. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  96. package/docs/api/interfaces/FileMetadata.md +1 -1
  97. package/docs/api/interfaces/FileReference.md +1 -1
  98. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  99. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  100. package/docs/api/interfaces/FileUploadProps.md +1 -1
  101. package/docs/api/interfaces/FooterProps.md +1 -1
  102. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  103. package/docs/api/interfaces/InputProps.md +1 -1
  104. package/docs/api/interfaces/LabelProps.md +1 -1
  105. package/docs/api/interfaces/LoginFormProps.md +1 -1
  106. package/docs/api/interfaces/NavigationAccessRecord.md +11 -11
  107. package/docs/api/interfaces/NavigationContextType.md +9 -9
  108. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  109. package/docs/api/interfaces/NavigationItem.md +1 -1
  110. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  111. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  112. package/docs/api/interfaces/Organisation.md +1 -1
  113. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  114. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  115. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  116. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  117. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  118. package/docs/api/interfaces/PaceLoginPageProps.md +16 -3
  119. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  120. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  121. package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
  122. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  123. package/docs/api/interfaces/PaletteData.md +1 -1
  124. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  125. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  126. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  127. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  128. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  129. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  130. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  131. package/docs/api/interfaces/RBACConfig.md +1 -1
  132. package/docs/api/interfaces/RBACLogger.md +1 -1
  133. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  134. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  135. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  136. package/docs/api/interfaces/RouteConfig.md +2 -2
  137. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  138. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  139. package/docs/api/interfaces/StorageConfig.md +1 -1
  140. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  141. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  142. package/docs/api/interfaces/StorageListOptions.md +1 -1
  143. package/docs/api/interfaces/StorageListResult.md +1 -1
  144. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  145. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  146. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  147. package/docs/api/interfaces/StyleImport.md +1 -1
  148. package/docs/api/interfaces/SwitchProps.md +1 -1
  149. package/docs/api/interfaces/ToastActionElement.md +1 -1
  150. package/docs/api/interfaces/ToastProps.md +1 -1
  151. package/docs/api/interfaces/UnifiedAuthContextType.md +94 -521
  152. package/docs/api/interfaces/UnifiedAuthProviderProps.md +16 -16
  153. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  154. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  155. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  156. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  157. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  158. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  159. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  160. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  161. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  162. package/docs/api/interfaces/UserEventAccess.md +11 -11
  163. package/docs/api/interfaces/UserMenuProps.md +1 -1
  164. package/docs/api/interfaces/UserProfile.md +1 -1
  165. package/docs/api/modules.md +251 -269
  166. package/docs/api-reference/components.md +193 -0
  167. package/docs/api-reference/hooks.md +265 -0
  168. package/docs/api-reference/providers.md +6 -0
  169. package/docs/api-reference/types.md +6 -0
  170. package/docs/api-reference/utilities.md +207 -0
  171. package/docs/architecture/README.md +6 -0
  172. package/docs/{database-schema-requirements.md → architecture/database-schema-requirements.md} +6 -0
  173. package/docs/architecture/rbac-security-architecture.md +258 -0
  174. package/docs/architecture/services.md +9 -1
  175. package/docs/best-practices/README.md +6 -0
  176. package/docs/best-practices/accessibility.md +6 -0
  177. package/docs/{common-patterns.md → best-practices/common-patterns.md} +6 -0
  178. package/docs/best-practices/deployment.md +6 -0
  179. package/docs/best-practices/performance.md +475 -2
  180. package/docs/best-practices/security.md +6 -0
  181. package/docs/best-practices/testing.md +6 -0
  182. package/docs/core-concepts/authentication.md +6 -0
  183. package/docs/core-concepts/events.md +6 -0
  184. package/docs/core-concepts/organisations.md +6 -0
  185. package/docs/core-concepts/permissions.md +6 -0
  186. package/docs/core-concepts/rbac-system.md +6 -0
  187. package/docs/documentation-index.md +121 -182
  188. package/docs/{consuming-app-vite-config.md → getting-started/consuming-app-vite-config.md} +6 -0
  189. package/docs/getting-started/documentation-index.md +40 -0
  190. package/docs/getting-started/examples/README.md +878 -35
  191. package/docs/{faq.md → getting-started/faq.md} +7 -1
  192. package/docs/getting-started/installation-guide.md +6 -0
  193. package/docs/{quick-reference.md → getting-started/quick-reference.md} +6 -0
  194. package/docs/implementation-guides/app-layout.md +6 -0
  195. package/docs/implementation-guides/authentication.md +1021 -0
  196. package/docs/implementation-guides/component-styling.md +6 -0
  197. package/docs/implementation-guides/data-tables.md +1264 -2076
  198. package/docs/implementation-guides/dynamic-colors.md +6 -0
  199. package/docs/implementation-guides/event-theming-summary.md +6 -0
  200. package/docs/{file-reference-system.md → implementation-guides/file-reference-system.md} +6 -0
  201. package/docs/implementation-guides/file-upload-storage.md +6 -0
  202. package/docs/implementation-guides/forms.md +6 -0
  203. package/docs/implementation-guides/inactivity-tracking.md +6 -0
  204. package/docs/implementation-guides/navigation.md +6 -0
  205. package/docs/implementation-guides/organisation-security.md +6 -0
  206. package/docs/implementation-guides/permission-enforcement.md +6 -0
  207. package/docs/implementation-guides/public-pages-advanced.md +6 -0
  208. package/docs/implementation-guides/public-pages.md +6 -0
  209. package/docs/migration/MIGRATION_GUIDE.md +827 -351
  210. package/docs/migration/README.md +7 -1
  211. package/docs/migration/organisation-context-timing-fix.md +6 -0
  212. package/docs/migration/rbac-migration.md +44 -1
  213. package/docs/migration/service-architecture.md +6 -0
  214. package/docs/migration/v0.4.15-tailwind-scanning.md +6 -0
  215. package/docs/migration/v0.4.16-css-first-approach.md +6 -0
  216. package/docs/migration/v0.4.17-source-path-fix.md +6 -0
  217. package/docs/rbac/README-rbac-rls-integration.md +6 -0
  218. package/docs/rbac/README.md +6 -0
  219. package/docs/rbac/advanced-patterns.md +6 -0
  220. package/docs/rbac/api-reference.md +7 -1
  221. package/docs/rbac/breaking-changes-v3.md +222 -0
  222. package/docs/rbac/examples/rbac-rls-integration-example.md +6 -0
  223. package/docs/rbac/examples.md +6 -0
  224. package/docs/rbac/getting-started.md +6 -0
  225. package/docs/rbac/migration-guide.md +260 -0
  226. package/docs/rbac/quick-start.md +6 -0
  227. package/docs/rbac/rbac-rls-integration.md +6 -0
  228. package/docs/rbac/super-admin-guide.md +6 -0
  229. package/docs/rbac/troubleshooting.md +6 -0
  230. package/docs/security/README.md +6 -0
  231. package/docs/security/checklist.md +6 -0
  232. package/docs/styles/README.md +7 -1
  233. package/docs/{usage.md → styles/usage.md} +6 -0
  234. package/docs/testing/README.md +6 -0
  235. package/docs/{visual-testing.md → testing/visual-testing.md} +6 -0
  236. package/docs/troubleshooting/README.md +387 -5
  237. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +6 -0
  238. package/docs/troubleshooting/common-issues.md +6 -0
  239. package/docs/troubleshooting/database-view-compatibility.md +6 -0
  240. package/docs/troubleshooting/organisation-context-setup.md +6 -0
  241. package/docs/troubleshooting/react-hooks-issue-analysis.md +6 -0
  242. package/docs/troubleshooting/styling-issues.md +6 -0
  243. package/docs/troubleshooting/tailwind-content-scanning.md +6 -0
  244. package/package.json +1 -1
  245. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -1
  246. package/src/__tests__/helpers/test-providers.tsx +3 -53
  247. package/src/components/DataTable/DataTable.test.tsx +319 -0
  248. package/src/components/DataTable/DataTable.tsx +32 -11
  249. package/src/components/DataTable/__tests__/{DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx.skip} +6 -4
  250. package/src/components/DataTable/__tests__/{DataTable.test.tsx → DataTable.test.tsx.skip} +6 -4
  251. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +31 -9
  252. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +601 -0
  253. package/src/components/DataTable/__tests__/keyboard.test.tsx +615 -0
  254. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +639 -0
  255. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx.skip +330 -0
  256. package/src/components/DataTable/components/AccessDeniedPage.tsx +2 -2
  257. package/src/components/DataTable/components/ActionButtons.tsx +88 -104
  258. package/src/components/DataTable/components/DataTableCore.tsx +309 -337
  259. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +4 -2
  260. package/src/components/DataTable/components/DataTableModals.tsx +22 -1
  261. package/src/components/DataTable/components/EditableRow.tsx +69 -84
  262. package/src/components/DataTable/components/EmptyState.tsx +5 -1
  263. package/src/components/DataTable/components/ImportModal.tsx +65 -36
  264. package/src/components/DataTable/components/PaginationControls.tsx +40 -100
  265. package/src/components/DataTable/components/UnifiedTableBody.tsx +125 -148
  266. package/src/components/DataTable/context/DataTableContext.tsx +1 -1
  267. package/src/components/DataTable/core/ColumnFactory.ts +5 -0
  268. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +12 -10
  269. package/src/components/DataTable/examples/HierarchicalExample.tsx +1 -1
  270. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +1 -0
  271. package/src/components/DataTable/examples/PerformanceExample.tsx +1 -0
  272. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +1 -5
  273. package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +167 -0
  274. package/src/components/DataTable/hooks/index.ts +7 -0
  275. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +32 -15
  276. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +102 -0
  277. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +89 -0
  278. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +117 -0
  279. package/src/components/DataTable/hooks/useDataTablePermissions.ts +71 -27
  280. package/src/components/DataTable/hooks/useDataTableState.ts +39 -11
  281. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +33 -0
  282. package/src/components/DataTable/hooks/useHierarchicalState.ts +15 -1
  283. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +447 -0
  284. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +94 -0
  285. package/src/components/DataTable/hooks/useTableColumns.ts +10 -7
  286. package/src/components/DataTable/hooks/useTableHandlers.ts +174 -0
  287. package/src/components/DataTable/index.ts +12 -3
  288. package/src/components/DataTable/types.ts +129 -9
  289. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +159 -22
  290. package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +111 -0
  291. package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +15 -29
  292. package/src/components/DataTable/utils/a11yUtils.ts +244 -0
  293. package/src/components/DataTable/utils/debugTools.ts +609 -0
  294. package/src/components/DataTable/utils/exportUtils.ts +114 -16
  295. package/src/components/DataTable/utils/flexibleImport.ts +202 -32
  296. package/src/components/DataTable/utils/hierarchicalUtils.ts +1 -1
  297. package/src/components/DataTable/utils/index.ts +2 -0
  298. package/src/components/DataTable/utils/paginationUtils.ts +350 -0
  299. package/src/components/DataTable/utils/rowUtils.ts +6 -5
  300. package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -24
  301. package/src/components/NavigationMenu/NavigationMenu.tsx +19 -8
  302. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +1 -23
  303. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +56 -6
  304. package/src/components/PaceLoginPage/PaceLoginPage.tsx +137 -13
  305. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +1 -1
  306. package/src/components/Select/Select.tsx +1 -0
  307. package/src/components/examples/PermissionExample.tsx +173 -0
  308. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  309. package/src/examples/PublicEventPage.tsx +274 -0
  310. package/src/examples/PublicPageApp.tsx +308 -0
  311. package/src/examples/PublicPageUsageExample.tsx +216 -0
  312. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +12 -1
  313. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +129 -17
  314. package/src/hooks/__tests__/useRBAC.unit.test.ts +151 -846
  315. package/src/hooks/useOrganisationPermissions.test.ts +42 -18
  316. package/src/hooks/useOrganisationPermissions.ts +12 -6
  317. package/src/hooks/useOrganisationSecurity.test.ts +138 -85
  318. package/src/hooks/useOrganisationSecurity.ts +41 -10
  319. package/src/index.ts +0 -1
  320. package/src/providers/AuthProvider.simplified.tsx +880 -0
  321. package/src/providers/UnifiedAuthProvider.test.simple.tsx +8 -8
  322. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +29 -19
  323. package/src/providers/index.ts +0 -1
  324. package/src/providers/services/EventServiceProvider.tsx +19 -15
  325. package/src/providers/services/InactivityServiceProvider.tsx +19 -15
  326. package/src/providers/services/OrganisationServiceProvider.tsx +19 -15
  327. package/src/providers/services/UnifiedAuthProvider.tsx +156 -127
  328. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +1 -1
  329. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -3
  330. package/src/rbac/README.md +1 -1
  331. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +25 -27
  332. package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +313 -0
  333. package/src/rbac/__tests__/engine.comprehensive.test.ts +114 -348
  334. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +28 -110
  335. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +33 -85
  336. package/src/rbac/__tests__/scenarios.user-role.test.tsx +2 -2
  337. package/src/rbac/adapters.tsx +26 -69
  338. package/src/rbac/api.test.ts +90 -27
  339. package/src/rbac/api.ts +61 -10
  340. package/src/rbac/audit.test.ts +33 -38
  341. package/src/rbac/audit.ts +21 -6
  342. package/src/rbac/cache.ts +33 -1
  343. package/src/rbac/components/NavigationGuard.tsx +11 -11
  344. package/src/rbac/components/NavigationProvider.test.tsx +11 -5
  345. package/src/rbac/components/NavigationProvider.tsx +37 -13
  346. package/src/rbac/components/PagePermissionGuard.tsx +111 -50
  347. package/src/rbac/components/PagePermissionProvider.tsx +5 -5
  348. package/src/rbac/components/PermissionEnforcer.tsx +11 -11
  349. package/src/rbac/components/RoleBasedRouter.tsx +5 -5
  350. package/src/rbac/components/SecureDataProvider.tsx +5 -5
  351. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +8 -8
  352. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +14 -14
  353. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +12 -12
  354. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +6 -6
  355. package/src/rbac/engine.test.simple.ts +19 -13
  356. package/src/rbac/engine.test.ts +1 -0
  357. package/src/rbac/engine.ts +330 -766
  358. package/src/rbac/errors.ts +156 -0
  359. package/src/rbac/hooks/usePermissions.ts +32 -10
  360. package/src/rbac/hooks/useRBAC.test.ts +126 -512
  361. package/src/rbac/hooks/useRBAC.ts +147 -193
  362. package/src/rbac/hooks/useResolvedScope.ts +12 -0
  363. package/src/rbac/index.ts +7 -4
  364. package/src/rbac/security.ts +109 -18
  365. package/src/rbac/types.ts +12 -1
  366. package/src/services/AuthService.ts +2 -15
  367. package/src/services/EventService.ts +26 -46
  368. package/src/services/OrganisationService.ts +51 -31
  369. package/src/services/__tests__/AuthService.test.ts +1 -1
  370. package/src/services/__tests__/EventService.test.ts +1 -1
  371. package/src/services/__tests__/OrganisationService.test.ts +1 -1
  372. package/src/styles/base.css +208 -0
  373. package/src/styles/semantic.css +24 -0
  374. package/src/types/database.generated.ts +7347 -0
  375. package/src/types/database.ts +20 -0
  376. package/src/utils/logger.ts +179 -0
  377. package/src/utils/organisationContext.ts +11 -4
  378. package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
  379. package/dist/appNameResolver-UURKN7NF.js +0 -22
  380. package/dist/audit-6TOCAMKO.js.map +0 -1
  381. package/dist/chunk-B2WTCLCV.js.map +0 -1
  382. package/dist/chunk-FGMFQSHX.js.map +0 -1
  383. package/dist/chunk-K34IM5CT.js.map +0 -1
  384. package/dist/chunk-KHJS6VIA.js.map +0 -1
  385. package/dist/chunk-KK73ZB4E.js.map +0 -1
  386. package/dist/chunk-M5IWZRBT.js.map +0 -1
  387. package/dist/chunk-ULBI5JGB.js +0 -109
  388. package/dist/chunk-ULBI5JGB.js.map +0 -1
  389. package/dist/chunk-WN6XJWOS.js.map +0 -1
  390. package/dist/chunk-XLZ7U46Z.js.map +0 -1
  391. package/dist/chunk-Y6TXWPJO.js.map +0 -1
  392. package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
  393. package/docs/TERMINOLOGY.md +0 -231
  394. package/docs/api/interfaces/RBACContextType.md +0 -468
  395. package/docs/api/interfaces/RBACProviderProps.md +0 -107
  396. package/docs/best-practices/performance-expansion.md +0 -473
  397. package/docs/breaking-changes.md +0 -179
  398. package/docs/consuming-app-example.md +0 -290
  399. package/docs/documentation-templates.md +0 -539
  400. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  401. package/docs/getting-started/examples/basic-auth-app.md +0 -520
  402. package/docs/getting-started/examples/full-featured-app.md +0 -616
  403. package/docs/getting-started/quick-start.md +0 -376
  404. package/docs/implementation-guides/datatable-filtering.md +0 -313
  405. package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
  406. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  407. package/docs/implementation-guides/large-datasets.md +0 -281
  408. package/docs/implementation-guides/performance.md +0 -403
  409. package/docs/migration/quick-migration-guide.md +0 -320
  410. package/docs/migration-guide.md +0 -193
  411. package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
  412. package/docs/performance/README.md +0 -551
  413. package/docs/style-guide.md +0 -964
  414. package/docs/troubleshooting/authentication-issues.md +0 -334
  415. package/docs/troubleshooting/debugging.md +0 -1117
  416. package/docs/troubleshooting/migration.md +0 -918
  417. package/src/__tests__/hooks/usePermissions.test.ts +0 -261
  418. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
  419. package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
  420. package/src/hooks/services/__tests__/useServiceHooks.test.tsx +0 -137
  421. package/src/hooks/services/usePermissions.ts +0 -70
  422. package/src/hooks/services/useRBACService.ts +0 -30
  423. package/src/hooks/usePermissionCheck.ts +0 -150
  424. package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
  425. package/src/providers/services/RBACServiceProvider.tsx +0 -79
  426. package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
  427. package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
  428. package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
  429. package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
  430. package/src/rbac/providers/RBACProvider.tsx +0 -645
  431. package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
  432. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
  433. package/src/rbac/providers/index.ts +0 -11
  434. package/src/services/RBACService.ts +0 -522
  435. package/src/services/__tests__/RBACService.test.ts +0 -492
  436. package/src/services/interfaces/IRBACService.ts +0 -62
  437. package/src/utils/appNameResolver.test 2.ts +0 -494
  438. /package/dist/{DataTable-4GAVPIEG.js.map → DataTable-QCNCV6IK.js.map} +0 -0
  439. /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-Z2FWNW7O.js.map} +0 -0
  440. /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
  441. /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
  442. /package/dist/{chunk-LW7MMEAQ.js.map → chunk-CRKP3HXI.js.map} +0 -0
  443. /package/dist/{chunk-URUTVZ7N.js.map → chunk-DVHZ5L55.js.map} +0 -0
  444. /package/dist/{chunk-AFGTSUAD.js.map → chunk-NKT2DLZI.js.map} +0 -0
  445. /package/dist/{chunk-NTNILOBC.js.map → chunk-TLD5BEU6.js.map} +0 -0
  446. /package/docs/{app.css.example → styles/app.css.example} +0 -0
@@ -1,344 +0,0 @@
1
- # NavigationMenu Authentication Fix Example
2
-
3
- This example shows how to fix the NavigationMenu authentication context issue reported in the bug report.
4
-
5
- ## Problem
6
-
7
- The consuming app was getting `permissions: undefined`, `roles: undefined`, `accessLevel: undefined` in console logs from the NavigationMenu component.
8
-
9
- ## Root Cause
10
-
11
- The NavigationMenu component was not properly connected to the authentication context from `useUnifiedAuth`.
12
-
13
- ## Solution
14
-
15
- ### 1. Updated NavigationMenu Component
16
-
17
- The NavigationMenu component now properly uses the authentication context:
18
-
19
- ```tsx
20
- // packages/core/src/components/NavigationMenu/NavigationMenu.tsx
21
- import { useUnifiedAuth } from "../../providers/UnifiedAuthProvider";
22
-
23
- export const NavigationMenu = React.forwardRef<HTMLDivElement, NavigationMenuProps>(({
24
- items,
25
- filterByPermissions = true,
26
- auditLog = true,
27
- ...props
28
- }, ref) => {
29
- // Get authentication context
30
- const authContext = React.useMemo(() => {
31
- try {
32
- return useUnifiedAuth();
33
- } catch (error) {
34
- console.warn('[NavigationMenu] useUnifiedAuth not available, running in unauthenticated mode');
35
- return null;
36
- }
37
- }, []);
38
-
39
- // Filter navigation items based on permissions
40
- const filteredItems = React.useMemo(() => {
41
- if (!filterByPermissions || !authContext) return items;
42
-
43
- return items.filter(item => {
44
- // Check permissions if available
45
- if (item.permissions && item.permissions.length > 0) {
46
- const hasPermission = item.permissions.some(permission =>
47
- authContext.hasPermission(permission)
48
- );
49
- if (!hasPermission) return false;
50
- }
51
-
52
- // Check roles if available
53
- if (item.roles && item.roles.length > 0) {
54
- const hasRole = item.roles.some(role =>
55
- authContext.hasRole(role)
56
- );
57
- if (!hasRole) return false;
58
- }
59
-
60
- return true;
61
- });
62
- }, [items, filterByPermissions, authContext]);
63
-
64
- // Log navigation access attempts for debugging
65
- React.useEffect(() => {
66
- if (auditLog && authContext) {
67
- console.log('[NavigationMenu] Navigation access attempt:', {
68
- itemId: 'navigation-menu',
69
- label: 'Navigation Menu',
70
- href: currentPath,
71
- permissions: authContext.permissions,
72
- roles: authContext.roles,
73
- accessLevel: authContext.accessLevel,
74
- timestamp: new Date().toISOString()
75
- });
76
- }
77
- }, [auditLog, authContext, currentPath]);
78
-
79
- // ... rest of component
80
- });
81
- ```
82
-
83
- ### 2. Updated NavigationItem Type
84
-
85
- Navigation items now support permission requirements:
86
-
87
- ```typescript
88
- interface NavigationItem {
89
- id: string;
90
- label: string;
91
- href?: string;
92
- icon?: string;
93
- children?: NavigationItem[];
94
- isActive?: boolean;
95
- permissions?: string[];
96
- roles?: string[];
97
- accessLevel?: string;
98
- pageId?: string;
99
- strictMode?: boolean;
100
- meta?: {
101
- title?: string;
102
- description?: string;
103
- hidden?: boolean;
104
- order?: number;
105
- };
106
- }
107
- ```
108
-
109
- ### 3. Correct App Structure
110
-
111
- The consuming app should use this structure:
112
-
113
- ```tsx
114
- // App.tsx
115
- import React from 'react';
116
- import { BrowserRouter, Routes, Route } from 'react-router-dom';
117
- import {
118
- UnifiedAuthProvider,
119
- OrganisationProvider,
120
- EventProvider,
121
- PaceAppLayout
122
- } from '@jmruthers/pace-core';
123
- import { supabase } from './integrations/supabase/client';
124
- import { AuthenticatedApp } from './AuthenticatedApp';
125
-
126
- function App() {
127
- return (
128
- <BrowserRouter>
129
- <Routes>
130
- <Route path="/*" element={
131
- <UnifiedAuthProvider supabaseClient={supabase} appName="CAKE">
132
- <OrganisationProvider>
133
- <EventProvider>
134
- <AuthenticatedApp />
135
- </EventProvider>
136
- </OrganisationProvider>
137
- </UnifiedAuthProvider>
138
- } />
139
- </Routes>
140
- </BrowserRouter>
141
- );
142
- }
143
-
144
- export default App;
145
- ```
146
-
147
- ### 4. Updated AuthenticatedApp
148
-
149
- ```tsx
150
- // AuthenticatedApp.tsx
151
- import React from 'react';
152
- import { Routes, Route } from 'react-router-dom';
153
- import {
154
- useUnifiedAuth,
155
- PaceAppLayout,
156
- NavigationItem,
157
- PaceLoginPage
158
- } from "@jmruthers/pace-core";
159
-
160
- export function AuthenticatedApp() {
161
- const { isAuthenticated, user, isLoading, accessLevel, roles } = useUnifiedAuth();
162
-
163
- if (!isAuthenticated) {
164
- return <PaceLoginPage appName="CAKE" />;
165
- }
166
-
167
- // Define navigation items with permission requirements
168
- const navItems: NavigationItem[] = [
169
- {
170
- id: 'meals',
171
- label: 'Meals',
172
- href: '/meals',
173
- permissions: ['meals:read']
174
- },
175
- {
176
- id: 'dishes',
177
- label: 'Dishes',
178
- href: '/dishes',
179
- permissions: ['dishes:read']
180
- },
181
- {
182
- id: 'items',
183
- label: 'Items',
184
- href: '/items',
185
- permissions: ['items:read']
186
- },
187
- {
188
- id: 'diners',
189
- label: 'Diners',
190
- href: '/diners',
191
- permissions: ['diners:read']
192
- },
193
- {
194
- id: 'menus',
195
- label: 'Menus',
196
- href: '/menus',
197
- permissions: ['menus:read']
198
- },
199
- {
200
- id: 'distribution',
201
- label: 'Distribution',
202
- href: '/distribution',
203
- permissions: ['distribution:read']
204
- },
205
- {
206
- id: 'suppliers',
207
- label: 'Suppliers',
208
- href: '/suppliers',
209
- permissions: ['suppliers:read']
210
- },
211
- ];
212
-
213
- return (
214
- <PaceAppLayout
215
- key="main-layout"
216
- appName="CAKE"
217
- navItems={navItems}
218
- showEventSelector={true}
219
- >
220
- <Routes>
221
- <Route index element={<div>Meals Page</div>} />
222
- <Route path="meals" element={<div>Meals Page</div>} />
223
- <Route path="dishes" element={<div>Dishes Page</div>} />
224
- <Route path="items" element={<div>Items Page</div>} />
225
- <Route path="diners" element={<div>Diners Page</div>} />
226
- <Route path="menus" element={<div>Menus Page</div>} />
227
- <Route path="distribution" element={<div>Distribution Page</div>} />
228
- <Route path="suppliers" element={<div>Suppliers Page</div>} />
229
- <Route path="*" element={<div>Not Found</div>} />
230
- </Routes>
231
- </PaceAppLayout>
232
- );
233
- }
234
- ```
235
-
236
- ### 5. Alternative: Direct NavigationMenu Usage
237
-
238
- If you want to use NavigationMenu directly without PaceAppLayout:
239
-
240
- ```tsx
241
- import { NavigationMenu } from '@jmruthers/pace-core';
242
- import { useUnifiedAuth } from '@jmruthers/pace-core/providers';
243
-
244
- function CustomNavigation() {
245
- const { hasPermission, hasRole } = useUnifiedAuth();
246
-
247
- const navItems: NavigationItem[] = [
248
- {
249
- id: 'meals',
250
- label: 'Meals',
251
- href: '/meals',
252
- permissions: ['meals:read']
253
- },
254
- {
255
- id: 'admin',
256
- label: 'Admin Panel',
257
- href: '/admin',
258
- roles: ['admin', 'super_admin']
259
- }
260
- ];
261
-
262
- return (
263
- <NavigationMenu
264
- items={navItems}
265
- currentPath={location.pathname}
266
- onNavigate={(item) => navigate(item.href)}
267
- buttonText="Menu"
268
- filterByPermissions={true}
269
- auditLog={true}
270
- />
271
- );
272
- }
273
- ```
274
-
275
- ## Expected Results
276
-
277
- After implementing this fix:
278
-
279
- 1. **Console logs will show proper authentication context**:
280
- ```javascript
281
- [NavigationMenu] Navigation access attempt: {
282
- itemId: "navigation-menu",
283
- label: "Navigation Menu",
284
- href: "/meals",
285
- permissions: { "meals:read": true, "dishes:read": true },
286
- roles: ["user", "admin"],
287
- accessLevel: "super",
288
- timestamp: "2025-10-06T04:38:15.2012"
289
- }
290
- ```
291
-
292
- 2. **Navigation items will be filtered based on permissions**:
293
- - Items with `permissions: ['meals:read']` will only show if user has that permission
294
- - Items with `roles: ['admin']` will only show if user has that role
295
-
296
- 3. **No more "useUnifiedAuth not available" warnings**
297
-
298
- ## Testing
299
-
300
- To test the fix:
301
-
302
- 1. **Check console logs**: Should show proper authentication context
303
- 2. **Test permission filtering**: Remove permissions from user and verify items are hidden
304
- 3. **Test role filtering**: Change user roles and verify admin items show/hide
305
- 4. **Test audit logging**: Enable `auditLog={true}` and verify logs are generated
306
-
307
- ## Migration Guide
308
-
309
- If you're updating from the old NavigationMenu:
310
-
311
- 1. **Add permission requirements to navigation items**:
312
- ```tsx
313
- // Old way
314
- const navItems = [
315
- { id: 'meals', label: 'Meals', href: '/meals' }
316
- ];
317
-
318
- // New way
319
- const navItems = [
320
- { id: 'meals', label: 'Meals', href: '/meals', permissions: ['meals:read'] }
321
- ];
322
- ```
323
-
324
- 2. **Enable permission filtering**:
325
- ```tsx
326
- <NavigationMenu
327
- items={navItems}
328
- filterByPermissions={true}
329
- auditLog={true}
330
- />
331
- ```
332
-
333
- 3. **Ensure proper provider hierarchy**:
334
- ```tsx
335
- <UnifiedAuthProvider>
336
- <OrganisationProvider>
337
- <EventProvider>
338
- <NavigationMenu items={navItems} />
339
- </EventProvider>
340
- </OrganisationProvider>
341
- </UnifiedAuthProvider>
342
- ```
343
-
344
- This fix resolves the authentication context issue and provides proper permission-based navigation filtering.