@jmruthers/pace-core 0.5.76 → 0.5.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{RBACService-C4udt_Zp.d.ts → AuthService-Df3IozMG.d.ts} +10 -118
  3. package/dist/{DataTable-ntgmhO2W.d.ts → DataTable-BE0OXZKQ.d.ts} +9 -2
  4. package/dist/{DataTable-4GAVPIEG.js → DataTable-ETGVF4Y5.js} +50 -13
  5. package/dist/{PublicLoadingSpinner-BiNER8F5.d.ts → PublicLoadingSpinner-CnUaz0vG.d.ts} +5 -2
  6. package/dist/{UnifiedAuthProvider-Bj6YCf7c.d.ts → UnifiedAuthProvider-B391Aqum.d.ts} +42 -45
  7. package/dist/{UnifiedAuthProvider-3NKDOSOK.js → UnifiedAuthProvider-P5SOJAQ6.js} +4 -5
  8. package/dist/{api-DDMUKIUD.js → api-KG4A2X7P.js} +9 -3
  9. package/dist/{audit-6TOCAMKO.js → audit-65VNHEV2.js} +2 -2
  10. package/dist/{chunk-K34IM5CT.js → chunk-2OGV6IRV.js} +196 -626
  11. package/dist/chunk-2OGV6IRV.js.map +1 -0
  12. package/dist/{chunk-NTNILOBC.js → chunk-5BO3MI5Y.js} +4 -4
  13. package/dist/{chunk-XLZ7U46Z.js → chunk-CVMVPYAL.js} +9 -60
  14. package/dist/chunk-CVMVPYAL.js.map +1 -0
  15. package/dist/{chunk-URUTVZ7N.js → chunk-FL4ZCQLD.js} +2 -2
  16. package/dist/{chunk-LW7MMEAQ.js → chunk-FT2M4R4F.js} +2 -2
  17. package/dist/{chunk-5BSLGBYI.js → chunk-JCQZ6LA7.js} +2 -8
  18. package/dist/{chunk-5BSLGBYI.js.map → chunk-JCQZ6LA7.js.map} +1 -1
  19. package/dist/{chunk-KHJS6VIA.js → chunk-LRQ6RBJC.js} +157 -112
  20. package/dist/chunk-LRQ6RBJC.js.map +1 -0
  21. package/dist/{chunk-WN6XJWOS.js → chunk-MNJXXD6C.js} +274 -743
  22. package/dist/chunk-MNJXXD6C.js.map +1 -0
  23. package/dist/{chunk-KK73ZB4E.js → chunk-PTR5PMPE.js} +153 -132
  24. package/dist/chunk-PTR5PMPE.js.map +1 -0
  25. package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
  26. package/dist/chunk-Q7APDV6H.js.map +1 -0
  27. package/dist/{chunk-A4FUBC7B.js → chunk-QGVSOUJ2.js} +2 -4
  28. package/dist/{chunk-A4FUBC7B.js.map → chunk-QGVSOUJ2.js.map} +1 -1
  29. package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
  30. package/dist/chunk-S63MFSY6.js.map +1 -0
  31. package/dist/{chunk-AFGTSUAD.js → chunk-VSOKOFRF.js} +4 -4
  32. package/dist/chunk-WUXCWRL6.js +20 -0
  33. package/dist/chunk-WUXCWRL6.js.map +1 -0
  34. package/dist/{chunk-Y6TXWPJO.js → chunk-YVVGHRGI.js} +105 -31
  35. package/dist/chunk-YVVGHRGI.js.map +1 -0
  36. package/dist/{chunk-M5IWZRBT.js → chunk-ZMNXIJP4.js} +2187 -981
  37. package/dist/chunk-ZMNXIJP4.js.map +1 -0
  38. package/dist/components.d.ts +6 -6
  39. package/dist/components.js +14 -18
  40. package/dist/components.js.map +1 -1
  41. package/dist/{database-C3Szpi5J.d.ts → database-BXAfr2Y_.d.ts} +18 -0
  42. package/dist/hooks.d.ts +5 -5
  43. package/dist/hooks.js +8 -9
  44. package/dist/hooks.js.map +1 -1
  45. package/dist/index.d.ts +19 -27
  46. package/dist/index.js +21 -29
  47. package/dist/index.js.map +1 -1
  48. package/dist/{organisation-BtshODVF.d.ts → organisation-D6qRDtbF.d.ts} +1 -1
  49. package/dist/providers.d.ts +7 -21
  50. package/dist/providers.js +3 -10
  51. package/dist/rbac/index.d.ts +71 -221
  52. package/dist/rbac/index.js +15 -16
  53. package/dist/{types-CGX9Vyf5.d.ts → types-BDg1mAGG.d.ts} +36 -6
  54. package/dist/types.d.ts +3 -3
  55. package/dist/types.js +61 -18
  56. package/dist/types.js.map +1 -1
  57. package/dist/{unified-CM7T0aTK.d.ts → unified-DQ4VcT7H.d.ts} +1 -1
  58. package/dist/{usePublicRouteParams-B-CumWRc.d.ts → usePublicRouteParams-BlgwXweB.d.ts} +3 -3
  59. package/dist/utils.d.ts +2 -2
  60. package/dist/utils.js +52 -9
  61. package/dist/utils.js.map +1 -1
  62. package/docs/CONTENT_AUDIT_REPORT.md +253 -0
  63. package/docs/DOCUMENTATION_AUDIT.md +172 -0
  64. package/docs/README.md +142 -147
  65. package/docs/STYLE_GUIDE.md +37 -0
  66. package/docs/api/classes/ColumnFactory.md +17 -17
  67. package/docs/api/classes/ErrorBoundary.md +1 -1
  68. package/docs/api/classes/InvalidScopeError.md +4 -4
  69. package/docs/api/classes/MissingUserContextError.md +4 -4
  70. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  71. package/docs/api/classes/PermissionDeniedError.md +5 -5
  72. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  73. package/docs/api/classes/RBACAuditManager.md +8 -8
  74. package/docs/api/classes/RBACCache.md +35 -5
  75. package/docs/api/classes/RBACEngine.md +49 -20
  76. package/docs/api/classes/RBACError.md +4 -4
  77. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  78. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  79. package/docs/api/classes/StorageUtils.md +1 -1
  80. package/docs/api/enums/FileCategory.md +1 -1
  81. package/docs/api/interfaces/AggregateConfig.md +4 -4
  82. package/docs/api/interfaces/ButtonProps.md +1 -1
  83. package/docs/api/interfaces/CardProps.md +1 -1
  84. package/docs/api/interfaces/ColorPalette.md +1 -1
  85. package/docs/api/interfaces/ColorShade.md +1 -1
  86. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  87. package/docs/api/interfaces/DataRecord.md +11 -0
  88. package/docs/api/interfaces/DataTableAction.md +65 -29
  89. package/docs/api/interfaces/DataTableColumn.md +36 -23
  90. package/docs/api/interfaces/DataTableProps.md +80 -38
  91. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  92. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  93. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  94. package/docs/api/interfaces/EventLogoProps.md +1 -1
  95. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  96. package/docs/api/interfaces/FileMetadata.md +1 -1
  97. package/docs/api/interfaces/FileReference.md +1 -1
  98. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  99. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  100. package/docs/api/interfaces/FileUploadProps.md +1 -1
  101. package/docs/api/interfaces/FooterProps.md +1 -1
  102. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  103. package/docs/api/interfaces/InputProps.md +1 -1
  104. package/docs/api/interfaces/LabelProps.md +1 -1
  105. package/docs/api/interfaces/LoginFormProps.md +1 -1
  106. package/docs/api/interfaces/NavigationAccessRecord.md +11 -11
  107. package/docs/api/interfaces/NavigationContextType.md +9 -9
  108. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  109. package/docs/api/interfaces/NavigationItem.md +1 -1
  110. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  111. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  112. package/docs/api/interfaces/Organisation.md +1 -1
  113. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  114. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  115. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  116. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  117. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  118. package/docs/api/interfaces/PaceLoginPageProps.md +16 -3
  119. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  120. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  121. package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
  122. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  123. package/docs/api/interfaces/PaletteData.md +1 -1
  124. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  125. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  126. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  127. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  128. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  129. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  130. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  131. package/docs/api/interfaces/RBACConfig.md +1 -1
  132. package/docs/api/interfaces/RBACLogger.md +1 -1
  133. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  134. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  135. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  136. package/docs/api/interfaces/RouteConfig.md +2 -2
  137. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  138. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  139. package/docs/api/interfaces/StorageConfig.md +1 -1
  140. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  141. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  142. package/docs/api/interfaces/StorageListOptions.md +1 -1
  143. package/docs/api/interfaces/StorageListResult.md +1 -1
  144. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  145. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  146. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  147. package/docs/api/interfaces/StyleImport.md +1 -1
  148. package/docs/api/interfaces/SwitchProps.md +1 -1
  149. package/docs/api/interfaces/ToastActionElement.md +1 -1
  150. package/docs/api/interfaces/ToastProps.md +1 -1
  151. package/docs/api/interfaces/UnifiedAuthContextType.md +94 -521
  152. package/docs/api/interfaces/UnifiedAuthProviderProps.md +16 -16
  153. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  154. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  155. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  156. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  157. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  158. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  159. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  160. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  161. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  162. package/docs/api/interfaces/UserEventAccess.md +11 -11
  163. package/docs/api/interfaces/UserMenuProps.md +1 -1
  164. package/docs/api/interfaces/UserProfile.md +1 -1
  165. package/docs/api/modules.md +251 -269
  166. package/docs/api-reference/components.md +193 -0
  167. package/docs/api-reference/hooks.md +265 -0
  168. package/docs/api-reference/providers.md +6 -0
  169. package/docs/api-reference/types.md +6 -0
  170. package/docs/api-reference/utilities.md +207 -0
  171. package/docs/architecture/README.md +6 -0
  172. package/docs/{database-schema-requirements.md → architecture/database-schema-requirements.md} +6 -0
  173. package/docs/architecture/rbac-security-architecture.md +258 -0
  174. package/docs/architecture/services.md +9 -1
  175. package/docs/best-practices/README.md +6 -0
  176. package/docs/best-practices/accessibility.md +6 -0
  177. package/docs/{common-patterns.md → best-practices/common-patterns.md} +6 -0
  178. package/docs/best-practices/deployment.md +6 -0
  179. package/docs/best-practices/performance.md +475 -2
  180. package/docs/best-practices/security.md +6 -0
  181. package/docs/best-practices/testing.md +6 -0
  182. package/docs/core-concepts/authentication.md +6 -0
  183. package/docs/core-concepts/events.md +6 -0
  184. package/docs/core-concepts/organisations.md +6 -0
  185. package/docs/core-concepts/permissions.md +6 -0
  186. package/docs/core-concepts/rbac-system.md +8 -0
  187. package/docs/documentation-index.md +121 -182
  188. package/docs/{consuming-app-vite-config.md → getting-started/consuming-app-vite-config.md} +6 -0
  189. package/docs/getting-started/documentation-index.md +40 -0
  190. package/docs/getting-started/examples/README.md +878 -35
  191. package/docs/{faq.md → getting-started/faq.md} +7 -1
  192. package/docs/getting-started/installation-guide.md +6 -0
  193. package/docs/{quick-reference.md → getting-started/quick-reference.md} +6 -0
  194. package/docs/implementation-guides/app-layout.md +6 -0
  195. package/docs/implementation-guides/authentication.md +1021 -0
  196. package/docs/implementation-guides/component-styling.md +6 -0
  197. package/docs/implementation-guides/data-tables.md +1264 -2076
  198. package/docs/implementation-guides/dynamic-colors.md +6 -0
  199. package/docs/implementation-guides/event-theming-summary.md +6 -0
  200. package/docs/{file-reference-system.md → implementation-guides/file-reference-system.md} +6 -0
  201. package/docs/implementation-guides/file-upload-storage.md +6 -0
  202. package/docs/implementation-guides/forms.md +6 -0
  203. package/docs/implementation-guides/inactivity-tracking.md +6 -0
  204. package/docs/implementation-guides/navigation.md +6 -0
  205. package/docs/implementation-guides/organisation-security.md +6 -0
  206. package/docs/implementation-guides/permission-enforcement.md +6 -0
  207. package/docs/implementation-guides/public-pages-advanced.md +6 -0
  208. package/docs/implementation-guides/public-pages.md +6 -0
  209. package/docs/migration/MIGRATION_GUIDE.md +827 -351
  210. package/docs/migration/README.md +7 -1
  211. package/docs/migration/organisation-context-timing-fix.md +6 -0
  212. package/docs/migration/rbac-migration.md +44 -1
  213. package/docs/migration/service-architecture.md +6 -0
  214. package/docs/migration/v0.4.15-tailwind-scanning.md +6 -0
  215. package/docs/migration/v0.4.16-css-first-approach.md +6 -0
  216. package/docs/migration/v0.4.17-source-path-fix.md +6 -0
  217. package/docs/rbac/README-rbac-rls-integration.md +6 -0
  218. package/docs/rbac/README.md +6 -0
  219. package/docs/rbac/advanced-patterns.md +6 -0
  220. package/docs/rbac/api-reference.md +7 -1
  221. package/docs/rbac/breaking-changes-v3.md +222 -0
  222. package/docs/rbac/examples/rbac-rls-integration-example.md +6 -0
  223. package/docs/rbac/examples.md +6 -0
  224. package/docs/rbac/getting-started.md +6 -0
  225. package/docs/rbac/migration-guide.md +260 -0
  226. package/docs/rbac/quick-start.md +70 -13
  227. package/docs/rbac/rbac-rls-integration.md +6 -0
  228. package/docs/rbac/super-admin-guide.md +6 -0
  229. package/docs/rbac/troubleshooting.md +6 -0
  230. package/docs/security/README.md +6 -0
  231. package/docs/security/checklist.md +6 -0
  232. package/docs/styles/README.md +7 -1
  233. package/docs/{usage.md → styles/usage.md} +6 -0
  234. package/docs/testing/README.md +6 -0
  235. package/docs/{visual-testing.md → testing/visual-testing.md} +6 -0
  236. package/docs/troubleshooting/README.md +387 -5
  237. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +6 -0
  238. package/docs/troubleshooting/common-issues.md +6 -0
  239. package/docs/troubleshooting/database-view-compatibility.md +6 -0
  240. package/docs/troubleshooting/organisation-context-setup.md +6 -0
  241. package/docs/troubleshooting/react-hooks-issue-analysis.md +6 -0
  242. package/docs/troubleshooting/styling-issues.md +6 -0
  243. package/docs/troubleshooting/tailwind-content-scanning.md +6 -0
  244. package/package.json +1 -1
  245. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -1
  246. package/src/__tests__/helpers/test-providers.tsx +3 -53
  247. package/src/components/DataTable/DataTable.test.tsx +319 -0
  248. package/src/components/DataTable/DataTable.tsx +32 -11
  249. package/src/components/DataTable/__tests__/{DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx.skip} +6 -4
  250. package/src/components/DataTable/__tests__/{DataTable.test.tsx → DataTable.test.tsx.skip} +6 -4
  251. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +31 -9
  252. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +601 -0
  253. package/src/components/DataTable/__tests__/keyboard.test.tsx +615 -0
  254. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +639 -0
  255. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx.skip +330 -0
  256. package/src/components/DataTable/components/AccessDeniedPage.tsx +2 -2
  257. package/src/components/DataTable/components/ActionButtons.tsx +88 -104
  258. package/src/components/DataTable/components/DataTableCore.tsx +309 -337
  259. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +4 -2
  260. package/src/components/DataTable/components/DataTableModals.tsx +22 -1
  261. package/src/components/DataTable/components/EditableRow.tsx +69 -84
  262. package/src/components/DataTable/components/EmptyState.tsx +5 -1
  263. package/src/components/DataTable/components/ImportModal.tsx +65 -36
  264. package/src/components/DataTable/components/PaginationControls.tsx +40 -100
  265. package/src/components/DataTable/components/UnifiedTableBody.tsx +125 -148
  266. package/src/components/DataTable/context/DataTableContext.tsx +1 -1
  267. package/src/components/DataTable/core/ColumnFactory.ts +5 -0
  268. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +12 -10
  269. package/src/components/DataTable/examples/HierarchicalExample.tsx +1 -1
  270. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +1 -0
  271. package/src/components/DataTable/examples/PerformanceExample.tsx +1 -0
  272. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +1 -5
  273. package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +167 -0
  274. package/src/components/DataTable/hooks/index.ts +7 -0
  275. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +32 -15
  276. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +102 -0
  277. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +89 -0
  278. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +117 -0
  279. package/src/components/DataTable/hooks/useDataTablePermissions.ts +71 -27
  280. package/src/components/DataTable/hooks/useDataTableState.ts +39 -11
  281. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +33 -0
  282. package/src/components/DataTable/hooks/useHierarchicalState.ts +15 -1
  283. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +447 -0
  284. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +94 -0
  285. package/src/components/DataTable/hooks/useTableColumns.ts +10 -7
  286. package/src/components/DataTable/hooks/useTableHandlers.ts +174 -0
  287. package/src/components/DataTable/index.ts +12 -3
  288. package/src/components/DataTable/types.ts +129 -9
  289. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +159 -22
  290. package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +111 -0
  291. package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +15 -29
  292. package/src/components/DataTable/utils/a11yUtils.ts +244 -0
  293. package/src/components/DataTable/utils/debugTools.ts +609 -0
  294. package/src/components/DataTable/utils/exportUtils.ts +114 -16
  295. package/src/components/DataTable/utils/flexibleImport.ts +202 -32
  296. package/src/components/DataTable/utils/hierarchicalUtils.ts +1 -1
  297. package/src/components/DataTable/utils/index.ts +2 -0
  298. package/src/components/DataTable/utils/paginationUtils.ts +350 -0
  299. package/src/components/DataTable/utils/rowUtils.ts +6 -5
  300. package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -24
  301. package/src/components/NavigationMenu/NavigationMenu.tsx +19 -8
  302. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +1 -23
  303. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +56 -6
  304. package/src/components/PaceLoginPage/PaceLoginPage.tsx +137 -13
  305. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +1 -1
  306. package/src/components/Select/Select.tsx +1 -0
  307. package/src/components/examples/PermissionExample.tsx +173 -0
  308. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  309. package/src/examples/PublicEventPage.tsx +274 -0
  310. package/src/examples/PublicPageApp.tsx +308 -0
  311. package/src/examples/PublicPageUsageExample.tsx +216 -0
  312. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +12 -1
  313. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +129 -17
  314. package/src/hooks/__tests__/useRBAC.unit.test.ts +151 -846
  315. package/src/hooks/useOrganisationPermissions.test.ts +42 -18
  316. package/src/hooks/useOrganisationPermissions.ts +12 -6
  317. package/src/hooks/useOrganisationSecurity.test.ts +138 -85
  318. package/src/hooks/useOrganisationSecurity.ts +41 -10
  319. package/src/index.ts +0 -1
  320. package/src/providers/AuthProvider.simplified.tsx +880 -0
  321. package/src/providers/UnifiedAuthProvider.test.simple.tsx +8 -8
  322. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +29 -19
  323. package/src/providers/index.ts +0 -1
  324. package/src/providers/services/EventServiceProvider.tsx +19 -15
  325. package/src/providers/services/InactivityServiceProvider.tsx +19 -15
  326. package/src/providers/services/OrganisationServiceProvider.tsx +19 -15
  327. package/src/providers/services/UnifiedAuthProvider.tsx +156 -127
  328. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +1 -1
  329. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -3
  330. package/src/rbac/README.md +1 -1
  331. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +25 -27
  332. package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +313 -0
  333. package/src/rbac/__tests__/engine.comprehensive.test.ts +114 -348
  334. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +28 -110
  335. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +33 -85
  336. package/src/rbac/__tests__/scenarios.user-role.test.tsx +2 -2
  337. package/src/rbac/adapters.tsx +26 -69
  338. package/src/rbac/api.test.ts +90 -27
  339. package/src/rbac/api.ts +61 -10
  340. package/src/rbac/audit.test.ts +33 -38
  341. package/src/rbac/audit.ts +21 -6
  342. package/src/rbac/cache.ts +33 -1
  343. package/src/rbac/components/NavigationGuard.tsx +11 -11
  344. package/src/rbac/components/NavigationProvider.test.tsx +11 -5
  345. package/src/rbac/components/NavigationProvider.tsx +37 -13
  346. package/src/rbac/components/PagePermissionGuard.tsx +111 -50
  347. package/src/rbac/components/PagePermissionProvider.tsx +5 -5
  348. package/src/rbac/components/PermissionEnforcer.tsx +11 -11
  349. package/src/rbac/components/RoleBasedRouter.tsx +5 -5
  350. package/src/rbac/components/SecureDataProvider.tsx +5 -5
  351. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +8 -8
  352. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +14 -14
  353. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +12 -12
  354. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +6 -6
  355. package/src/rbac/engine.test.simple.ts +19 -13
  356. package/src/rbac/engine.test.ts +1 -0
  357. package/src/rbac/engine.ts +330 -766
  358. package/src/rbac/errors.ts +156 -0
  359. package/src/rbac/hooks/usePermissions.ts +32 -10
  360. package/src/rbac/hooks/useRBAC.test.ts +126 -512
  361. package/src/rbac/hooks/useRBAC.ts +147 -193
  362. package/src/rbac/hooks/useResolvedScope.ts +12 -0
  363. package/src/rbac/index.ts +7 -4
  364. package/src/rbac/security.ts +109 -18
  365. package/src/rbac/types.ts +12 -1
  366. package/src/services/AuthService.ts +2 -15
  367. package/src/services/EventService.ts +43 -46
  368. package/src/services/OrganisationService.ts +51 -31
  369. package/src/services/__tests__/AuthService.test.ts +1 -1
  370. package/src/services/__tests__/EventService.test.ts +1 -1
  371. package/src/services/__tests__/OrganisationService.test.ts +1 -1
  372. package/src/services/base/BaseService.ts +8 -0
  373. package/src/styles/base.css +208 -0
  374. package/src/styles/semantic.css +24 -0
  375. package/src/types/database.generated.ts +7347 -0
  376. package/src/types/database.ts +20 -0
  377. package/src/utils/logger.ts +179 -0
  378. package/src/utils/organisationContext.ts +11 -4
  379. package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
  380. package/dist/appNameResolver-UURKN7NF.js +0 -22
  381. package/dist/audit-6TOCAMKO.js.map +0 -1
  382. package/dist/chunk-B2WTCLCV.js.map +0 -1
  383. package/dist/chunk-FGMFQSHX.js.map +0 -1
  384. package/dist/chunk-K34IM5CT.js.map +0 -1
  385. package/dist/chunk-KHJS6VIA.js.map +0 -1
  386. package/dist/chunk-KK73ZB4E.js.map +0 -1
  387. package/dist/chunk-M5IWZRBT.js.map +0 -1
  388. package/dist/chunk-ULBI5JGB.js +0 -109
  389. package/dist/chunk-ULBI5JGB.js.map +0 -1
  390. package/dist/chunk-WN6XJWOS.js.map +0 -1
  391. package/dist/chunk-XLZ7U46Z.js.map +0 -1
  392. package/dist/chunk-Y6TXWPJO.js.map +0 -1
  393. package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
  394. package/docs/TERMINOLOGY.md +0 -231
  395. package/docs/api/interfaces/RBACContextType.md +0 -468
  396. package/docs/api/interfaces/RBACProviderProps.md +0 -107
  397. package/docs/best-practices/performance-expansion.md +0 -473
  398. package/docs/breaking-changes.md +0 -179
  399. package/docs/consuming-app-example.md +0 -290
  400. package/docs/documentation-templates.md +0 -539
  401. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  402. package/docs/getting-started/examples/basic-auth-app.md +0 -520
  403. package/docs/getting-started/examples/full-featured-app.md +0 -616
  404. package/docs/getting-started/quick-start.md +0 -376
  405. package/docs/implementation-guides/datatable-filtering.md +0 -313
  406. package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
  407. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  408. package/docs/implementation-guides/large-datasets.md +0 -281
  409. package/docs/implementation-guides/performance.md +0 -403
  410. package/docs/migration/quick-migration-guide.md +0 -320
  411. package/docs/migration-guide.md +0 -193
  412. package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
  413. package/docs/performance/README.md +0 -551
  414. package/docs/style-guide.md +0 -964
  415. package/docs/troubleshooting/authentication-issues.md +0 -334
  416. package/docs/troubleshooting/debugging.md +0 -1117
  417. package/docs/troubleshooting/migration.md +0 -918
  418. package/src/__tests__/hooks/usePermissions.test.ts +0 -261
  419. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
  420. package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
  421. package/src/hooks/services/__tests__/useServiceHooks.test.tsx +0 -137
  422. package/src/hooks/services/usePermissions.ts +0 -70
  423. package/src/hooks/services/useRBACService.ts +0 -30
  424. package/src/hooks/usePermissionCheck.ts +0 -150
  425. package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
  426. package/src/providers/services/RBACServiceProvider.tsx +0 -79
  427. package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
  428. package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
  429. package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
  430. package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
  431. package/src/rbac/providers/RBACProvider.tsx +0 -645
  432. package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
  433. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
  434. package/src/rbac/providers/index.ts +0 -11
  435. package/src/services/RBACService.ts +0 -522
  436. package/src/services/__tests__/RBACService.test.ts +0 -492
  437. package/src/services/interfaces/IRBACService.ts +0 -62
  438. package/src/utils/appNameResolver.test 2.ts +0 -494
  439. /package/dist/{DataTable-4GAVPIEG.js.map → DataTable-ETGVF4Y5.js.map} +0 -0
  440. /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-P5SOJAQ6.js.map} +0 -0
  441. /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
  442. /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
  443. /package/dist/{chunk-NTNILOBC.js.map → chunk-5BO3MI5Y.js.map} +0 -0
  444. /package/dist/{chunk-URUTVZ7N.js.map → chunk-FL4ZCQLD.js.map} +0 -0
  445. /package/dist/{chunk-LW7MMEAQ.js.map → chunk-FT2M4R4F.js.map} +0 -0
  446. /package/dist/{chunk-AFGTSUAD.js.map → chunk-VSOKOFRF.js.map} +0 -0
  447. /package/docs/{app.css.example → styles/app.css.example} +0 -0
@@ -1,520 +0,0 @@
1
- # Basic Authentication App
2
-
3
- > **🎯 Perfect for**: Learning the basics, simple apps, prototypes
4
- > **⏱️ Build Time**: ~15 minutes
5
- > **Prerequisites**: Node.js 18+, basic React knowledge
6
-
7
- A minimal PACE Core application demonstrating authentication, basic UI components, and responsive design.
8
-
9
- ## 🎯 What You'll Build
10
-
11
- A simple dashboard app with:
12
- - User login/logout functionality
13
- - Basic dashboard with user info
14
- - Simple navigation
15
- - Responsive design
16
- - Permission-based content
17
-
18
- ## 🚀 Step-by-Step Implementation
19
-
20
- ### 1. Project Setup
21
-
22
- ```bash
23
- # Create new React app
24
- npx create-react-app basic-auth-app --template typescript
25
- cd basic-auth-app
26
-
27
- # Install PACE Core
28
- npm install @jmruthers/pace-core
29
-
30
- # Install additional dependencies
31
- npm install @supabase/supabase-js react-router-dom
32
- ```
33
-
34
- ### 2. Environment Configuration
35
-
36
- Create `.env.local`:
37
- ```env
38
- VITE_SUPABASE_URL=your_supabase_url
39
- VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
40
- VITE_APP_NAME=Basic Auth App
41
- ```
42
-
43
- ### 3. Supabase Setup
44
-
45
- Create a new Supabase project and set up the database:
46
-
47
- ```sql
48
- -- Create users table
49
- CREATE TABLE users (
50
- id UUID REFERENCES auth.users(id) PRIMARY KEY,
51
- email TEXT UNIQUE NOT NULL,
52
- name TEXT,
53
- role TEXT DEFAULT 'user',
54
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
55
- );
56
-
57
- -- Enable RLS
58
- ALTER TABLE users ENABLE ROW LEVEL SECURITY;
59
-
60
- -- Create policy
61
- CREATE POLICY "Users can view their own data" ON users
62
- FOR SELECT USING (auth.uid() = id);
63
- ```
64
-
65
- ### 4. App Structure
66
-
67
- ```
68
- src/
69
- ├── components/
70
- │ ├── Dashboard.tsx
71
- │ ├── LoginForm.tsx
72
- │ └── Navigation.tsx
73
- ├── hooks/
74
- │ └── useSupabase.ts
75
- ├── types/
76
- │ └── index.ts
77
- ├── App.tsx
78
- ├── main.tsx
79
- └── index.css
80
- ```
81
-
82
- ### 5. Supabase Client Setup
83
-
84
- `src/hooks/useSupabase.ts`:
85
- ```tsx
86
- import { createClient } from '@supabase/supabase-js';
87
-
88
- const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
89
- const supabaseKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
90
-
91
- export const supabase = createClient(supabaseUrl, supabaseKey);
92
- ```
93
-
94
- ### 6. Types Definition
95
-
96
- `src/types/index.ts`:
97
- ```tsx
98
- export interface User {
99
- id: string;
100
- email: string;
101
- name: string;
102
- role: 'admin' | 'user';
103
- }
104
-
105
- export interface AuthState {
106
- user: User | null;
107
- loading: boolean;
108
- error: string | null;
109
- }
110
- ```
111
-
112
- ### 7. Main App Component
113
-
114
- `src/App.tsx`:
115
- ```tsx
116
- import React from 'react';
117
- import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
118
- import { UnifiedAuthProvider } from '@jmruthers/pace-core';
119
- import { supabase } from './hooks/useSupabase';
120
- import LoginForm from './components/LoginForm';
121
- import Dashboard from './components/Dashboard';
122
- import '@jmruthers/pace-core/src/styles/core.css';
123
-
124
- function App() {
125
- return (
126
- <UnifiedAuthProvider
127
- supabaseClient={supabase}
128
- appName="Basic Auth App"
129
- >
130
- <Router>
131
- <div className="min-h-screen bg-gray-50">
132
- <Routes>
133
- <Route path="/login" element={<LoginForm />} />
134
- <Route path="/" element={<Dashboard />} />
135
- <Route path="/dashboard" element={<Dashboard />} />
136
- </Routes>
137
- </div>
138
- </Router>
139
- </UnifiedAuthProvider>
140
- );
141
- }
142
-
143
- export default App;
144
- ```
145
-
146
- ### 8. Login Form Component
147
-
148
- `src/components/LoginForm.tsx`:
149
- ```tsx
150
- import React, { useState } from 'react';
151
- import { useNavigate } from 'react-router-dom';
152
- import { Button, Card, Input, Alert } from '@jmruthers/pace-core';
153
- import { useUnifiedAuth } from '@jmruthers/pace-core';
154
-
155
- const LoginForm: React.FC = () => {
156
- const [email, setEmail] = useState('');
157
- const [password, setPassword] = useState('');
158
- const [loading, setLoading] = useState(false);
159
- const [error, setError] = useState('');
160
- const navigate = useNavigate();
161
- const { signIn } = useUnifiedAuth();
162
-
163
- const handleSubmit = async (e: React.FormEvent) => {
164
- e.preventDefault();
165
- setLoading(true);
166
- setError('');
167
-
168
- try {
169
- await signIn({ email, password });
170
- navigate('/dashboard');
171
- } catch (err) {
172
- setError(err instanceof Error ? err.message : 'Login failed');
173
- } finally {
174
- setLoading(false);
175
- }
176
- };
177
-
178
- return (
179
- <div className="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
180
- <div className="max-w-md w-full space-y-8">
181
- <div>
182
- <h2 className="mt-6 text-center text-3xl font-extrabold text-gray-900">
183
- Sign in to your account
184
- </h2>
185
- </div>
186
-
187
- <Card className="mt-8 space-y-6 p-8">
188
- <form onSubmit={handleSubmit} className="space-y-6">
189
- {error && (
190
- <Alert variant="destructive">
191
- {error}
192
- </Alert>
193
- )}
194
-
195
- <div>
196
- <Input
197
- label="Email address"
198
- type="email"
199
- value={email}
200
- onChange={(e) => setEmail(e.target.value)}
201
- required
202
- placeholder="Enter your email"
203
- />
204
- </div>
205
-
206
- <div>
207
- <Input
208
- label="Password"
209
- type="password"
210
- value={password}
211
- onChange={(e) => setPassword(e.target.value)}
212
- required
213
- placeholder="Enter your password"
214
- />
215
- </div>
216
-
217
- <Button
218
- type="submit"
219
- className="w-full"
220
- disabled={loading}
221
- >
222
- {loading ? 'Signing in...' : 'Sign in'}
223
- </Button>
224
- </form>
225
- </Card>
226
- </div>
227
- </div>
228
- );
229
- };
230
-
231
- export default LoginForm;
232
- ```
233
-
234
- ### 9. Dashboard Component
235
-
236
- `src/components/Dashboard.tsx`:
237
- ```tsx
238
- import React from 'react';
239
- import { useNavigate } from 'react-router-dom';
240
- import {
241
- Card,
242
- Button,
243
- Alert,
244
- PaceAppLayout,
245
- Header,
246
- UserMenu
247
- } from '@jmruthers/pace-core';
248
- import { useUnifiedAuth } from '@jmruthers/pace-core';
249
-
250
- const Dashboard: React.FC = () => {
251
- const { user, signOut, loading } = useUnifiedAuth();
252
- const navigate = useNavigate();
253
-
254
- if (loading) {
255
- return (
256
- <div className="min-h-screen flex items-center justify-center">
257
- <div className="text-center">
258
- <div className="animate-spin rounded-full h-32 w-32 border-b-2 border-blue-600 mx-auto"></div>
259
- <p className="mt-4 text-gray-600">Loading...</p>
260
- </div>
261
- </div>
262
- );
263
- }
264
-
265
- if (!user) {
266
- navigate('/login');
267
- return null;
268
- }
269
-
270
- const handleLogout = async () => {
271
- await signOut();
272
- navigate('/login');
273
- };
274
-
275
- const navigationItems = [
276
- { label: 'Dashboard', href: '/dashboard', icon: 'Home' },
277
- { label: 'Profile', href: '/profile', icon: 'User' },
278
- { label: 'Settings', href: '/settings', icon: 'Settings' }
279
- ];
280
-
281
- return (
282
- <PaceAppLayout
283
- title="Basic Auth App"
284
- user={user}
285
- onLogout={handleLogout}
286
- navigation={navigationItems}
287
- >
288
- <div className="p-6">
289
- <div className="mb-6">
290
- <h1 className="text-3xl font-bold text-gray-900">Welcome, {user.name || user.email}!</h1>
291
- <p className="text-gray-600">This is your basic dashboard.</p>
292
- </div>
293
-
294
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
295
- <Card>
296
- <div className="p-6">
297
- <h3 className="text-lg font-semibold text-gray-900 mb-2">User Info</h3>
298
- <p className="text-gray-600 mb-4">Your account details</p>
299
- <div className="space-y-2">
300
- <p><strong>Email:</strong> {user.email}</p>
301
- <p><strong>Role:</strong> {user.role}</p>
302
- <p><strong>ID:</strong> {user.id}</p>
303
- </div>
304
- </div>
305
- </Card>
306
-
307
- <Card>
308
- <div className="p-6">
309
- <h3 className="text-lg font-semibold text-gray-900 mb-2">Quick Actions</h3>
310
- <p className="text-gray-600 mb-4">Common tasks</p>
311
- <div className="space-y-2">
312
- <Button variant="outline" className="w-full justify-start">
313
- Edit Profile
314
- </Button>
315
- <Button variant="outline" className="w-full justify-start">
316
- Change Password
317
- </Button>
318
- <Button variant="outline" className="w-full justify-start">
319
- View Settings
320
- </Button>
321
- </div>
322
- </div>
323
- </Card>
324
-
325
- <Card>
326
- <div className="p-6">
327
- <h3 className="text-lg font-semibold text-gray-900 mb-2">System Status</h3>
328
- <p className="text-gray-600 mb-4">Application health</p>
329
- <Alert>
330
- <div className="flex items-center">
331
- <div className="w-2 h-2 bg-green-500 rounded-full mr-2"></div>
332
- All systems operational
333
- </div>
334
- </Alert>
335
- </div>
336
- </Card>
337
- </div>
338
-
339
- <div className="mt-8">
340
- <Card>
341
- <div className="p-6">
342
- <h3 className="text-lg font-semibold text-gray-900 mb-4">Recent Activity</h3>
343
- <div className="space-y-3">
344
- <div className="flex items-center justify-between py-2 border-b border-gray-200">
345
- <span className="text-gray-600">Logged in successfully</span>
346
- <span className="text-sm text-gray-500">Just now</span>
347
- </div>
348
- <div className="flex items-center justify-between py-2 border-b border-gray-200">
349
- <span className="text-gray-600">Account created</span>
350
- <span className="text-sm text-gray-500">2 days ago</span>
351
- </div>
352
- </div>
353
- </div>
354
- </Card>
355
- </div>
356
- </div>
357
- </PaceAppLayout>
358
- );
359
- };
360
-
361
- export default Dashboard;
362
- ```
363
-
364
- ### 10. Navigation Component
365
-
366
- `src/components/Navigation.tsx`:
367
- ```tsx
368
- import React from 'react';
369
- import { Link, useLocation } from 'react-router-dom';
370
- import { NavigationMenu } from '@jmruthers/pace-core';
371
-
372
- const Navigation: React.FC = () => {
373
- const location = useLocation();
374
-
375
- const navigationItems = [
376
- { label: 'Dashboard', href: '/dashboard', icon: 'Home' },
377
- { label: 'Profile', href: '/profile', icon: 'User' },
378
- { label: 'Settings', href: '/settings', icon: 'Settings' }
379
- ];
380
-
381
- return (
382
- <NavigationMenu
383
- items={navigationItems}
384
- currentPath={location.pathname}
385
- onNavigate={(href) => {
386
- // Navigation is handled by React Router
387
- window.location.href = href;
388
- }}
389
- />
390
- );
391
- };
392
-
393
- export default Navigation;
394
- ```
395
-
396
- ### 11. Vite Configuration
397
-
398
- `vite.config.ts`:
399
- ```ts
400
- import { defineConfig } from 'vite';
401
- import react from '@vitejs/plugin-react';
402
- import tailwindcss from '@tailwindcss/vite';
403
-
404
- export default defineConfig({
405
- plugins: [
406
- react(),
407
- tailwindcss({
408
- content: [
409
- './src/**/*.{js,ts,jsx,tsx}',
410
- './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
411
- ]
412
- })
413
- ],
414
- server: {
415
- port: 3000,
416
- open: true
417
- }
418
- });
419
- ```
420
-
421
- ### 12. Package.json Scripts
422
-
423
- ```json
424
- {
425
- "scripts": {
426
- "dev": "vite",
427
- "build": "tsc && vite build",
428
- "preview": "vite preview",
429
- "type-check": "tsc --noEmit"
430
- }
431
- }
432
- ```
433
-
434
- ## 🚀 Running the App
435
-
436
- ```bash
437
- # Start development server
438
- npm run dev
439
-
440
- # Build for production
441
- npm run build
442
-
443
- # Preview production build
444
- npm run preview
445
- ```
446
-
447
- ## 🎯 Features Demonstrated
448
-
449
- ### Authentication
450
- - ✅ User login with email/password
451
- - ✅ Session management
452
- - ✅ Automatic redirects
453
- - ✅ Loading states
454
- - ✅ Error handling
455
-
456
- ### UI Components
457
- - ✅ Card layouts
458
- - ✅ Form inputs
459
- - ✅ Buttons with variants
460
- - ✅ Alerts and notifications
461
- - ✅ Responsive design
462
-
463
- ### Layout
464
- - ✅ App layout with header
465
- - ✅ Navigation menu
466
- - ✅ User menu
467
- - ✅ Responsive sidebar
468
-
469
- ### State Management
470
- - ✅ Authentication state
471
- - ✅ User data
472
- - ✅ Loading states
473
- - ✅ Error states
474
-
475
- ## 🔧 Customization
476
-
477
- ### Adding New Pages
478
-
479
- 1. Create new component in `src/components/`
480
- 2. Add route in `App.tsx`
481
- 3. Add navigation item in `Navigation.tsx`
482
-
483
- ### Styling
484
-
485
- The app uses PACE Core's design system. You can customize:
486
- - Colors via CSS variables
487
- - Typography via Tailwind classes
488
- - Component variants via props
489
-
490
- ### Adding Features
491
-
492
- - **Forms**: Use PACE Core's Form components
493
- - **Data Tables**: Add DataTable for data management
494
- - **Permissions**: Implement RBAC with useCan hook
495
-
496
- ## 📚 Next Steps
497
-
498
- - **[Full-Featured App](./full-featured-app.md)** - Complete application with all features
499
- - **[Data Tables Guide](../implementation-guides/data-tables.md)** - Advanced data management
500
- - **[Forms Guide](../implementation-guides/forms.md)** - Form handling and validation
501
- - **[RBAC Guide](../../rbac/README.md)** - Role-based access control
502
-
503
- ## 🐛 Troubleshooting
504
-
505
- ### Common Issues
506
-
507
- **Styling not working:**
508
- - Ensure CSS import is first: `import '@jmruthers/pace-core/src/styles/core.css';`
509
- - Check Vite configuration for content scanning
510
-
511
- **Authentication not working:**
512
- - Verify Supabase credentials in `.env.local`
513
- - Check database setup and RLS policies
514
-
515
- **Build errors:**
516
- - Clear node_modules and reinstall
517
- - Check TypeScript configuration
518
- - Verify all imports are correct
519
-
520
- For more help, see the [Troubleshooting Guide](../../troubleshooting/README.md).