@jmruthers/pace-core 0.5.193 → 0.6.2

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 (577) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +7 -1
  3. package/cursor-rules/00-pace-core-compliance.mdc +299 -0
  4. package/cursor-rules/01-standards-compliance.mdc +244 -0
  5. package/cursor-rules/02-project-structure.mdc +200 -0
  6. package/cursor-rules/03-solid-principles.mdc +222 -0
  7. package/cursor-rules/04-testing-standards.mdc +268 -0
  8. package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
  9. package/cursor-rules/06-code-quality.mdc +309 -0
  10. package/cursor-rules/07-tech-stack-compliance.mdc +214 -0
  11. package/cursor-rules/08-markup-quality.mdc +452 -0
  12. package/cursor-rules/CHANGELOG.md +119 -0
  13. package/cursor-rules/README.md +192 -0
  14. package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-BPvc3Ka0.d.ts} +54 -0
  15. package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-BMRU8a1j.d.ts} +34 -2
  16. package/dist/{DataTable-5FU7IESH.js → DataTable-TPTKCX4D.js} +10 -9
  17. package/dist/{PublicPageProvider-C0Sm_e5k.d.ts → PublicPageProvider-DC6kCaqf.d.ts} +385 -261
  18. package/dist/{UnifiedAuthProvider-RGJTDE2C.js → UnifiedAuthProvider-CH6Z342H.js} +3 -3
  19. package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CVcTjx-d.d.ts} +29 -0
  20. package/dist/{api-N774RPUA.js → api-MVVQZLJI.js} +2 -2
  21. package/dist/{chunk-KNC55RTG.js → chunk-24UVZUZG.js} +90 -54
  22. package/dist/chunk-24UVZUZG.js.map +1 -0
  23. package/dist/{chunk-HWIIPPNI.js → chunk-2UOI2FG5.js} +20 -20
  24. package/dist/chunk-2UOI2FG5.js.map +1 -0
  25. package/dist/{chunk-E3SPN4VZ 5.js → chunk-3XC4CPTD.js} +4345 -3986
  26. package/dist/chunk-3XC4CPTD.js.map +1 -0
  27. package/dist/{chunk-7EQTDTTJ.js → chunk-6J4GEEJR.js} +172 -45
  28. package/dist/chunk-6J4GEEJR.js.map +1 -0
  29. package/dist/{chunk-6C4YBBJM 5.js → chunk-6SOIHG6Z.js} +1 -1
  30. package/dist/chunk-6SOIHG6Z.js.map +1 -0
  31. package/dist/{chunk-7FLMSG37.js → chunk-EHMR7VYL.js} +25 -25
  32. package/dist/chunk-EHMR7VYL.js.map +1 -0
  33. package/dist/{chunk-I7PSE6JW.js → chunk-F2IMUDXZ.js} +2 -75
  34. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  35. package/dist/{chunk-QWWZ5CAQ.js → chunk-FFQEQTNW.js} +7 -9
  36. package/dist/chunk-FFQEQTNW.js.map +1 -0
  37. package/dist/chunk-FMUCXFII.js +76 -0
  38. package/dist/chunk-FMUCXFII.js.map +1 -0
  39. package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
  40. package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
  41. package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
  42. package/dist/chunk-L4OXEN46.js.map +1 -0
  43. package/dist/{chunk-R77UEZ4E 3.js → chunk-M43Y4SSO.js} +1 -1
  44. package/dist/chunk-M43Y4SSO.js.map +1 -0
  45. package/dist/{chunk-IIELH4DL.js → chunk-MMZ7JXPU.js} +60 -223
  46. package/dist/chunk-MMZ7JXPU.js.map +1 -0
  47. package/dist/{chunk-NOAYCWCX 5.js → chunk-NECFR5MM.js} +394 -312
  48. package/dist/chunk-NECFR5MM.js.map +1 -0
  49. package/dist/{chunk-BC4IJKSL.js → chunk-SFZUDBL5.js} +40 -4
  50. package/dist/chunk-SFZUDBL5.js.map +1 -0
  51. package/dist/{chunk-XNXXZ43G.js → chunk-XWQCNGTQ.js} +748 -364
  52. package/dist/chunk-XWQCNGTQ.js.map +1 -0
  53. package/dist/components.d.ts +6 -6
  54. package/dist/components.js +15 -12
  55. package/dist/components.js.map +1 -1
  56. package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
  57. package/dist/hooks.d.ts +59 -126
  58. package/dist/hooks.js +19 -28
  59. package/dist/hooks.js.map +1 -1
  60. package/dist/index.d.ts +63 -16
  61. package/dist/index.js +23 -24
  62. package/dist/index.js.map +1 -1
  63. package/dist/providers.d.ts +21 -3
  64. package/dist/providers.js +2 -2
  65. package/dist/rbac/index.d.ts +146 -115
  66. package/dist/rbac/index.js +8 -11
  67. package/dist/theming/runtime.d.ts +1 -13
  68. package/dist/theming/runtime.js +1 -1
  69. package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
  70. package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
  71. package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
  72. package/dist/types.d.ts +2 -2
  73. package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-1oMokgLF.d.ts} +34 -4
  74. package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
  75. package/dist/utils.d.ts +4 -5
  76. package/dist/utils.js +15 -15
  77. package/dist/utils.js.map +1 -1
  78. package/docs/api/README.md +7 -1
  79. package/docs/api/classes/ColumnFactory.md +8 -8
  80. package/docs/api/classes/InvalidScopeError.md +4 -4
  81. package/docs/api/classes/Logger.md +1 -1
  82. package/docs/api/classes/MissingUserContextError.md +4 -4
  83. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  84. package/docs/api/classes/PermissionDeniedError.md +4 -4
  85. package/docs/api/classes/RBACAuditManager.md +1 -1
  86. package/docs/api/classes/RBACCache.md +1 -1
  87. package/docs/api/classes/RBACEngine.md +1 -1
  88. package/docs/api/classes/RBACError.md +4 -4
  89. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  90. package/docs/api/classes/SecureSupabaseClient.md +18 -15
  91. package/docs/api/classes/StorageUtils.md +1 -1
  92. package/docs/api/enums/FileCategory.md +1 -1
  93. package/docs/api/enums/LogLevel.md +1 -1
  94. package/docs/api/enums/RBACErrorCode.md +1 -1
  95. package/docs/api/enums/RPCFunction.md +1 -1
  96. package/docs/api/interfaces/AddressFieldProps.md +1 -1
  97. package/docs/api/interfaces/AddressFieldRef.md +1 -1
  98. package/docs/api/interfaces/AggregateConfig.md +4 -4
  99. package/docs/api/interfaces/AutocompleteOptions.md +1 -1
  100. package/docs/api/interfaces/AvatarProps.md +1 -1
  101. package/docs/api/interfaces/BadgeProps.md +9 -2
  102. package/docs/api/interfaces/ButtonProps.md +7 -4
  103. package/docs/api/interfaces/CalendarProps.md +8 -5
  104. package/docs/api/interfaces/CardProps.md +8 -5
  105. package/docs/api/interfaces/ColorPalette.md +1 -1
  106. package/docs/api/interfaces/ColorShade.md +1 -1
  107. package/docs/api/interfaces/ComplianceResult.md +1 -1
  108. package/docs/api/interfaces/DataAccessRecord.md +9 -9
  109. package/docs/api/interfaces/DataRecord.md +1 -1
  110. package/docs/api/interfaces/DataTableAction.md +24 -21
  111. package/docs/api/interfaces/DataTableColumn.md +31 -31
  112. package/docs/api/interfaces/DataTableProps.md +1 -1
  113. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  114. package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
  115. package/docs/api/interfaces/DatabaseIssue.md +1 -1
  116. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  117. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  118. package/docs/api/interfaces/ErrorBoundaryProps.md +147 -0
  119. package/docs/api/interfaces/ErrorBoundaryProviderProps.md +36 -0
  120. package/docs/api/interfaces/ErrorBoundaryState.md +75 -0
  121. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  122. package/docs/api/interfaces/ExportColumn.md +1 -1
  123. package/docs/api/interfaces/ExportOptions.md +8 -8
  124. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  125. package/docs/api/interfaces/FileMetadata.md +1 -1
  126. package/docs/api/interfaces/FileReference.md +1 -1
  127. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  128. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  129. package/docs/api/interfaces/FileUploadProps.md +26 -23
  130. package/docs/api/interfaces/FooterProps.md +10 -8
  131. package/docs/api/interfaces/FormFieldProps.md +10 -10
  132. package/docs/api/interfaces/FormProps.md +1 -1
  133. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  134. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  135. package/docs/api/interfaces/InputProps.md +7 -4
  136. package/docs/api/interfaces/LabelProps.md +1 -1
  137. package/docs/api/interfaces/LoggerConfig.md +1 -1
  138. package/docs/api/interfaces/LoginFormProps.md +14 -11
  139. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  140. package/docs/api/interfaces/NavigationContextType.md +1 -1
  141. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  142. package/docs/api/interfaces/NavigationItem.md +11 -11
  143. package/docs/api/interfaces/NavigationMenuProps.md +15 -15
  144. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  145. package/docs/api/interfaces/Organisation.md +1 -1
  146. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  147. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  148. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  149. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  150. package/docs/api/interfaces/PaceAppLayoutProps.md +30 -27
  151. package/docs/api/interfaces/PaceLoginPageProps.md +6 -4
  152. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  153. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  154. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  155. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  156. package/docs/api/interfaces/PaletteData.md +1 -1
  157. package/docs/api/interfaces/ParsedAddress.md +1 -1
  158. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  159. package/docs/api/interfaces/ProgressProps.md +1 -1
  160. package/docs/api/interfaces/ProtectedRouteProps.md +7 -26
  161. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  162. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  163. package/docs/api/interfaces/PublicPageLayoutProps.md +7 -20
  164. package/docs/api/interfaces/QuickFix.md +1 -1
  165. package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
  166. package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
  167. package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
  168. package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
  169. package/docs/api/interfaces/RBACConfig.md +1 -1
  170. package/docs/api/interfaces/RBACContext.md +1 -1
  171. package/docs/api/interfaces/RBACLogger.md +1 -1
  172. package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
  173. package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
  174. package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
  175. package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
  176. package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
  177. package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
  178. package/docs/api/interfaces/RBACResult.md +1 -1
  179. package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
  180. package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
  181. package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
  182. package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
  183. package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
  184. package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
  185. package/docs/api/interfaces/RBACRolesListParams.md +1 -1
  186. package/docs/api/interfaces/RBACRolesListResult.md +1 -1
  187. package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
  188. package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
  189. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  190. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  191. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  192. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  193. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  194. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  195. package/docs/api/interfaces/RouteConfig.md +1 -1
  196. package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
  197. package/docs/api/interfaces/SecureDataContextType.md +9 -9
  198. package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
  199. package/docs/api/interfaces/SessionRestorationLoaderProps.md +3 -3
  200. package/docs/api/interfaces/SetupIssue.md +1 -1
  201. package/docs/api/interfaces/StorageConfig.md +1 -1
  202. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  203. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  204. package/docs/api/interfaces/StorageListOptions.md +1 -1
  205. package/docs/api/interfaces/StorageListResult.md +1 -1
  206. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  207. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  208. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  209. package/docs/api/interfaces/StyleImport.md +1 -1
  210. package/docs/api/interfaces/SwitchProps.md +1 -1
  211. package/docs/api/interfaces/TabsContentProps.md +1 -1
  212. package/docs/api/interfaces/TabsListProps.md +1 -1
  213. package/docs/api/interfaces/TabsProps.md +1 -1
  214. package/docs/api/interfaces/TabsTriggerProps.md +3 -3
  215. package/docs/api/interfaces/TextareaProps.md +1 -1
  216. package/docs/api/interfaces/ToastActionElement.md +4 -1
  217. package/docs/api/interfaces/ToastProps.md +1 -1
  218. package/docs/api/interfaces/UnifiedAuthContextType.md +58 -55
  219. package/docs/api/interfaces/UnifiedAuthProviderProps.md +15 -13
  220. package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
  221. package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
  222. package/docs/api/interfaces/UseInactivityTrackerOptions.md +11 -9
  223. package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
  224. package/docs/api/interfaces/UsePublicEventLogoOptions.md +6 -6
  225. package/docs/api/interfaces/UsePublicEventLogoReturn.md +9 -6
  226. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  227. package/docs/api/interfaces/UsePublicEventReturn.md +8 -5
  228. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
  229. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +12 -9
  230. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +10 -7
  231. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  232. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  233. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  234. package/docs/api/interfaces/UserEventAccess.md +14 -11
  235. package/docs/api/interfaces/UserMenuProps.md +8 -6
  236. package/docs/api/interfaces/UserProfile.md +1 -1
  237. package/docs/api/modules.md +575 -634
  238. package/docs/architecture/database-schema-requirements.md +161 -0
  239. package/docs/core-concepts/rbac-system.md +3 -3
  240. package/docs/documentation-index.md +2 -4
  241. package/docs/getting-started/cursor-rules.md +263 -0
  242. package/docs/getting-started/installation-guide.md +6 -1
  243. package/docs/getting-started/quick-start.md +6 -1
  244. package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
  245. package/docs/migration/MIGRATION_GUIDE.md +6 -28
  246. package/docs/migration/README.md +52 -6
  247. package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
  248. package/docs/migration/V0.6.0_REACT_19_MIGRATION.md +227 -0
  249. package/docs/migration/database-changes-december-2025.md +3 -3
  250. package/docs/rbac/event-based-apps.md +1 -1
  251. package/docs/rbac/getting-started.md +1 -1
  252. package/docs/rbac/quick-start.md +1 -1
  253. package/docs/standards/README.md +40 -0
  254. package/docs/troubleshooting/migration.md +4 -4
  255. package/examples/PublicPages/PublicEventPage.tsx +1 -1
  256. package/package.json +12 -6
  257. package/scripts/audit/core/checks/accessibility.cjs +197 -0
  258. package/scripts/audit/core/checks/api-usage.cjs +191 -0
  259. package/scripts/audit/core/checks/bundle.cjs +142 -0
  260. package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +737 -691
  261. package/scripts/audit/core/checks/config.cjs +54 -0
  262. package/scripts/audit/core/checks/coverage.cjs +84 -0
  263. package/scripts/audit/core/checks/dependencies.cjs +454 -0
  264. package/scripts/audit/core/checks/documentation.cjs +203 -0
  265. package/scripts/audit/core/checks/environment.cjs +128 -0
  266. package/scripts/audit/core/checks/error-handling.cjs +299 -0
  267. package/scripts/audit/core/checks/forms.cjs +172 -0
  268. package/scripts/audit/core/checks/heuristics.cjs +68 -0
  269. package/scripts/audit/core/checks/hooks.cjs +334 -0
  270. package/scripts/audit/core/checks/imports.cjs +244 -0
  271. package/scripts/audit/core/checks/performance.cjs +325 -0
  272. package/scripts/audit/core/checks/routes.cjs +117 -0
  273. package/scripts/audit/core/checks/state.cjs +130 -0
  274. package/scripts/audit/core/checks/structure.cjs +65 -0
  275. package/scripts/audit/core/checks/style.cjs +584 -0
  276. package/scripts/audit/core/checks/testing.cjs +122 -0
  277. package/scripts/audit/core/checks/typescript.cjs +61 -0
  278. package/scripts/audit/core/scanner.cjs +199 -0
  279. package/scripts/audit/core/utils.cjs +137 -0
  280. package/scripts/audit/index.cjs +223 -0
  281. package/scripts/audit/reporters/console.cjs +151 -0
  282. package/scripts/audit/reporters/json.cjs +54 -0
  283. package/scripts/audit/reporters/markdown.cjs +124 -0
  284. package/scripts/audit-consuming-app.cjs +86 -0
  285. package/scripts/build-docs/build-decision.js +240 -0
  286. package/scripts/build-docs/cache-utils.js +105 -0
  287. package/scripts/build-docs/content-normalization.js +150 -0
  288. package/scripts/build-docs/file-utils.js +105 -0
  289. package/scripts/build-docs/git-utils.js +86 -0
  290. package/scripts/build-docs/hash-utils.js +116 -0
  291. package/scripts/build-docs/typedoc-runner.js +220 -0
  292. package/scripts/build-docs-incremental.js +77 -913
  293. package/scripts/install-cursor-rules.cjs +236 -0
  294. package/scripts/utils/command-runner.js +16 -11
  295. package/scripts/validate-formats.js +61 -56
  296. package/scripts/validate-master.js +74 -69
  297. package/scripts/validate-pre-publish.js +70 -65
  298. package/src/__tests__/helpers/test-providers.tsx +1 -1
  299. package/src/__tests__/helpers/test-utils.tsx +1 -1
  300. package/src/__tests__/hooks/usePermissions.test.ts +2 -2
  301. package/src/components/Alert/Alert.test.tsx +12 -18
  302. package/src/components/Alert/Alert.tsx +5 -7
  303. package/src/components/Avatar/Avatar.test.tsx +4 -4
  304. package/src/components/Badge/Badge.tsx +16 -4
  305. package/src/components/Button/Button.tsx +27 -4
  306. package/src/components/Calendar/Calendar.tsx +9 -3
  307. package/src/components/Card/Card.tsx +4 -0
  308. package/src/components/Checkbox/Checkbox.test.tsx +12 -12
  309. package/src/components/Checkbox/Checkbox.tsx +2 -2
  310. package/src/components/DataTable/DataTable.test.tsx +57 -93
  311. package/src/components/DataTable/DataTable.tsx +40 -6
  312. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
  313. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +29 -7
  314. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
  315. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
  316. package/src/components/DataTable/components/AccessDeniedPage.tsx +17 -26
  317. package/src/components/DataTable/components/ActionButtons.tsx +10 -7
  318. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
  319. package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
  320. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
  321. package/src/components/DataTable/components/DataTableBody.tsx +8 -0
  322. package/src/components/DataTable/components/DataTableCore.tsx +200 -561
  323. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
  324. package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
  325. package/src/components/DataTable/components/DataTableModals.tsx +9 -1
  326. package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
  327. package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
  328. package/src/components/DataTable/components/EditFields.tsx +307 -0
  329. package/src/components/DataTable/components/EditableRow.tsx +9 -1
  330. package/src/components/DataTable/components/EmptyState.tsx +10 -0
  331. package/src/components/DataTable/components/FilterRow.tsx +12 -0
  332. package/src/components/DataTable/components/GroupHeader.tsx +12 -0
  333. package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
  334. package/src/components/DataTable/components/ImportModal.tsx +7 -0
  335. package/src/components/DataTable/components/LoadingState.tsx +6 -0
  336. package/src/components/DataTable/components/PaginationControls.tsx +16 -1
  337. package/src/components/DataTable/components/RowComponent.tsx +391 -0
  338. package/src/components/DataTable/components/UnifiedTableBody.tsx +62 -852
  339. package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
  340. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
  341. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
  342. package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
  343. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
  344. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
  345. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
  346. package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
  347. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
  348. package/src/components/DataTable/components/cellValueUtils.ts +40 -0
  349. package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
  350. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
  351. package/src/components/DataTable/context/DataTableContext.tsx +50 -0
  352. package/src/components/DataTable/core/ColumnFactory.ts +31 -0
  353. package/src/components/DataTable/core/DataTableContext.tsx +32 -1
  354. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
  355. package/src/components/DataTable/hooks/useColumnReordering.ts +14 -2
  356. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
  357. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
  358. package/src/components/DataTable/hooks/useDataTablePermissions.ts +124 -32
  359. package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
  360. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
  361. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
  362. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
  363. package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
  364. package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
  365. package/src/components/DataTable/styles.ts +6 -6
  366. package/src/components/DataTable/types.ts +6 -10
  367. package/src/components/DataTable/utils/a11yUtils.ts +7 -0
  368. package/src/components/DataTable/utils/debugTools.ts +18 -113
  369. package/src/components/DataTable/utils/errorHandling.ts +12 -0
  370. package/src/components/DataTable/utils/exportUtils.ts +9 -0
  371. package/src/components/DataTable/utils/flexibleImport.ts +12 -48
  372. package/src/components/DataTable/utils/paginationUtils.ts +8 -0
  373. package/src/components/DataTable/utils/performanceUtils.ts +5 -1
  374. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
  375. package/src/components/Dialog/Dialog.tsx +8 -7
  376. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
  377. package/src/components/ErrorBoundary/ErrorBoundary.tsx +46 -6
  378. package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
  379. package/src/components/ErrorBoundary/index.ts +27 -2
  380. package/src/components/EventSelector/EventSelector.tsx +4 -1
  381. package/src/components/FileDisplay/FileDisplay.test.tsx +2 -2
  382. package/src/components/FileDisplay/FileDisplay.tsx +32 -18
  383. package/src/components/FileUpload/FileUpload.tsx +22 -2
  384. package/src/components/Footer/Footer.test.tsx +16 -16
  385. package/src/components/Footer/Footer.tsx +15 -12
  386. package/src/components/Form/Form.test.tsx +36 -15
  387. package/src/components/Form/Form.tsx +31 -26
  388. package/src/components/Header/Header.tsx +22 -11
  389. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
  390. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
  391. package/src/components/Input/Input.test.tsx +2 -2
  392. package/src/components/Input/Input.tsx +36 -34
  393. package/src/components/Label/Label.tsx +1 -1
  394. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
  395. package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
  396. package/src/components/LoginForm/LoginForm.test.tsx +42 -42
  397. package/src/components/LoginForm/LoginForm.tsx +12 -8
  398. package/src/components/NavigationMenu/NavigationMenu.tsx +15 -514
  399. package/src/components/NavigationMenu/types.ts +56 -0
  400. package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
  401. package/src/components/OrganisationSelector/OrganisationSelector.tsx +3 -0
  402. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
  403. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +54 -52
  404. package/src/components/PaceAppLayout/PaceAppLayout.tsx +33 -12
  405. package/src/components/PaceAppLayout/README.md +1 -1
  406. package/src/components/PaceAppLayout/test-setup.tsx +1 -2
  407. package/src/components/PaceLoginPage/PaceLoginPage.tsx +4 -1
  408. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
  409. package/src/components/PasswordChange/PasswordChangeForm.tsx +10 -1
  410. package/src/components/Progress/Progress.tsx +1 -1
  411. package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
  412. package/src/components/PublicLayout/PublicPageLayout.tsx +3 -6
  413. package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
  414. package/src/components/Select/Select.tsx +95 -438
  415. package/src/components/Select/context.ts +23 -0
  416. package/src/components/Select/hooks/useSelectEvents.ts +87 -0
  417. package/src/components/Select/hooks/useSelectSearch.ts +91 -0
  418. package/src/components/Select/hooks/useSelectState.ts +104 -0
  419. package/src/components/Select/index.ts +9 -1
  420. package/src/components/Select/types.ts +123 -0
  421. package/src/components/Select/utils/text.ts +26 -0
  422. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +5 -6
  423. package/src/components/Switch/Switch.tsx +4 -4
  424. package/src/components/Table/Table.tsx +1 -1
  425. package/src/components/Tabs/Tabs.tsx +1 -1
  426. package/src/components/Textarea/Textarea.tsx +27 -29
  427. package/src/components/Toast/Toast.tsx +5 -1
  428. package/src/components/Tooltip/Tooltip.tsx +3 -3
  429. package/src/components/UserMenu/UserMenu.test.tsx +24 -11
  430. package/src/components/UserMenu/UserMenu.tsx +22 -19
  431. package/src/components/index.ts +2 -2
  432. package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
  433. package/src/hooks/__tests__/index.unit.test.ts +2 -5
  434. package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
  435. package/src/hooks/index.ts +1 -2
  436. package/src/hooks/public/usePublicEvent.ts +5 -1
  437. package/src/hooks/public/usePublicEventLogo.ts +5 -1
  438. package/src/hooks/public/usePublicFileDisplay.ts +4 -0
  439. package/src/hooks/public/usePublicRouteParams.ts +5 -1
  440. package/src/hooks/services/useAuth.ts +32 -0
  441. package/src/hooks/services/useCurrentEvent.ts +6 -0
  442. package/src/hooks/services/useCurrentOrganisation.ts +6 -0
  443. package/src/hooks/useDataTableState.ts +8 -18
  444. package/src/hooks/useDebounce.ts +9 -0
  445. package/src/hooks/useEventTheme.ts +6 -0
  446. package/src/hooks/useFileDisplay.ts +4 -0
  447. package/src/hooks/useFileReference.ts +25 -7
  448. package/src/hooks/useFileUrl.ts +11 -1
  449. package/src/hooks/useFocusManagement.ts +16 -2
  450. package/src/hooks/useFocusTrap.ts +7 -4
  451. package/src/hooks/useFormDialog.ts +8 -7
  452. package/src/hooks/useInactivityTracker.ts +4 -1
  453. package/src/hooks/useKeyboardShortcuts.ts +4 -0
  454. package/src/hooks/useOrganisationPermissions.ts +4 -0
  455. package/src/hooks/useOrganisationSecurity.ts +4 -0
  456. package/src/hooks/usePerformanceMonitor.ts +4 -0
  457. package/src/hooks/usePermissionCache.ts +8 -1
  458. package/src/hooks/useQueryCache.ts +12 -1
  459. package/src/hooks/useSessionRestoration.ts +4 -0
  460. package/src/hooks/useStorage.ts +4 -0
  461. package/src/hooks/useToast.ts +3 -3
  462. package/src/index.ts +2 -1
  463. package/src/providers/__tests__/OrganisationProvider.test.tsx +115 -49
  464. package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
  465. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
  466. package/src/providers/services/AuthServiceProvider.tsx +18 -0
  467. package/src/providers/services/EventServiceProvider.tsx +18 -0
  468. package/src/providers/services/InactivityServiceProvider.tsx +18 -0
  469. package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
  470. package/src/providers/services/UnifiedAuthProvider.tsx +58 -22
  471. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +33 -7
  472. package/src/rbac/README.md +1 -1
  473. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +26 -26
  474. package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
  475. package/src/rbac/adapters.tsx +14 -5
  476. package/src/rbac/api.ts +100 -67
  477. package/src/rbac/components/EnhancedNavigationMenu.tsx +1 -1
  478. package/src/rbac/components/NavigationGuard.tsx +1 -1
  479. package/src/rbac/components/NavigationProvider.tsx +5 -2
  480. package/src/rbac/components/PagePermissionGuard.tsx +158 -18
  481. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  482. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  483. package/src/rbac/components/RoleBasedRouter.tsx +6 -2
  484. package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
  485. package/src/rbac/components/SecureDataProvider.tsx +21 -6
  486. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
  487. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
  488. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
  489. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
  490. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
  491. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
  492. package/src/rbac/engine.ts +38 -14
  493. package/src/rbac/hooks/permissions/index.ts +7 -0
  494. package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
  495. package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
  496. package/src/rbac/hooks/permissions/useCan.ts +347 -0
  497. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
  498. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
  499. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
  500. package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
  501. package/src/rbac/hooks/useCan.test.ts +71 -64
  502. package/src/rbac/hooks/usePermissions.ts +14 -995
  503. package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
  504. package/src/rbac/hooks/useResourcePermissions.ts +14 -4
  505. package/src/rbac/hooks/useSecureSupabase.ts +33 -13
  506. package/src/rbac/permissions.ts +0 -30
  507. package/src/rbac/secureClient.ts +212 -61
  508. package/src/rbac/types.ts +8 -0
  509. package/src/theming/__tests__/parseEventColours.test.ts +6 -9
  510. package/src/theming/parseEventColours.ts +5 -19
  511. package/src/types/vitest-globals.d.ts +51 -26
  512. package/src/utils/__mocks__/supabaseMock.ts +1 -3
  513. package/src/utils/__tests__/formatting.unit.test.ts +4 -4
  514. package/src/utils/__tests__/index.unit.test.ts +2 -2
  515. package/src/utils/audit/audit.ts +0 -3
  516. package/src/utils/core/cn.ts +1 -1
  517. package/src/utils/file-reference/index.ts +53 -1
  518. package/src/utils/formatting/formatting.ts +8 -18
  519. package/src/utils/index.ts +0 -1
  520. package/src/utils/security/secureDataAccess.test.ts +31 -20
  521. package/src/utils/security/secureDataAccess.ts +4 -3
  522. package/dist/chunk-6C4YBBJM.js +0 -628
  523. package/dist/chunk-6C4YBBJM.js.map +0 -1
  524. package/dist/chunk-7D4SUZUM.js 2.map +0 -1
  525. package/dist/chunk-7EQTDTTJ.js 2.map +0 -1
  526. package/dist/chunk-7EQTDTTJ.js.map +0 -1
  527. package/dist/chunk-7FLMSG37.js 2.map +0 -1
  528. package/dist/chunk-7FLMSG37.js.map +0 -1
  529. package/dist/chunk-BC4IJKSL.js.map +0 -1
  530. package/dist/chunk-E3SPN4VZ.js +0 -12917
  531. package/dist/chunk-E3SPN4VZ.js.map +0 -1
  532. package/dist/chunk-E66EQZE6 5.js +0 -37
  533. package/dist/chunk-E66EQZE6.js 2.map +0 -1
  534. package/dist/chunk-HWIIPPNI.js.map +0 -1
  535. package/dist/chunk-I7PSE6JW 5.js +0 -191
  536. package/dist/chunk-I7PSE6JW.js 2.map +0 -1
  537. package/dist/chunk-I7PSE6JW.js.map +0 -1
  538. package/dist/chunk-IIELH4DL.js.map +0 -1
  539. package/dist/chunk-KNC55RTG.js 5.map +0 -1
  540. package/dist/chunk-KNC55RTG.js.map +0 -1
  541. package/dist/chunk-KQCRWDSA.js 5.map +0 -1
  542. package/dist/chunk-LFNCN2SP.js +0 -412
  543. package/dist/chunk-LFNCN2SP.js 2.map +0 -1
  544. package/dist/chunk-LFNCN2SP.js.map +0 -1
  545. package/dist/chunk-LMC26NLJ 2.js +0 -84
  546. package/dist/chunk-NOAYCWCX.js +0 -4993
  547. package/dist/chunk-NOAYCWCX.js.map +0 -1
  548. package/dist/chunk-QWWZ5CAQ.js 3.map +0 -1
  549. package/dist/chunk-QWWZ5CAQ.js.map +0 -1
  550. package/dist/chunk-QXHPKYJV 3.js +0 -113
  551. package/dist/chunk-R77UEZ4E.js +0 -68
  552. package/dist/chunk-R77UEZ4E.js.map +0 -1
  553. package/dist/chunk-SQGMNID3.js.map +0 -1
  554. package/dist/chunk-VBXEHIUJ.js 6.map +0 -1
  555. package/dist/chunk-XNXXZ43G.js.map +0 -1
  556. package/dist/chunk-ZSAAAMVR 6.js +0 -25
  557. package/dist/components.js 5.map +0 -1
  558. package/dist/styles/index 2.js +0 -12
  559. package/dist/styles/index.js 5.map +0 -1
  560. package/dist/theming/runtime 5.js +0 -19
  561. package/dist/theming/runtime.js 5.map +0 -1
  562. package/docs/api/classes/ErrorBoundary.md +0 -144
  563. package/docs/migration/quick-migration-guide.md +0 -356
  564. package/docs/migration/service-architecture.md +0 -281
  565. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
  566. package/src/hooks/useSecureDataAccess.test.ts +0 -559
  567. package/src/hooks/useSecureDataAccess.ts +0 -666
  568. /package/dist/{DataTable-5FU7IESH.js.map → DataTable-TPTKCX4D.js.map} +0 -0
  569. /package/dist/{UnifiedAuthProvider-RGJTDE2C.js.map → UnifiedAuthProvider-CH6Z342H.js.map} +0 -0
  570. /package/dist/{api-N774RPUA.js.map → api-MVVQZLJI.js.map} +0 -0
  571. /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
  572. /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
  573. /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
  574. /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
  575. /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
  576. /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
  577. /package/examples/{rbac → RBAC}/index.ts +0 -0
@@ -123,6 +123,167 @@ The RBAC system uses a **single source of truth** approach:
123
123
  - All functions use `rbac_organisation_roles` table for role management
124
124
  - Views inherit RLS policies from the underlying `rbac_organisation_roles` table
125
125
 
126
+ ## App Access Tables Architecture
127
+
128
+ The system uses three complementary tables to manage app availability and user permissions:
129
+
130
+ ### Table Relationship Overview
131
+
132
+ | Table | Purpose | Question It Answers |
133
+ |-------|---------|-------------------|
134
+ | `core_organisation_app_access` | Organisation-level app configuration | "Is this app available for this organisation?" |
135
+ | `core_event_app_access` | Event-level app availability | "Is this app available for this event?" |
136
+ | `rbac_event_app_roles` | User-specific role grants | "Who can do what for this event-app?" |
137
+
138
+ ### 1. `core_organisation_app_access`
139
+
140
+ **Purpose:** Organisation-level app configuration and feature flags.
141
+
142
+ **Schema:**
143
+ ```sql
144
+ CREATE TABLE core_organisation_app_access (
145
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
146
+ organisation_id UUID NOT NULL REFERENCES core_organisations(id) ON DELETE CASCADE,
147
+ app_id UUID NOT NULL REFERENCES rbac_apps(id),
148
+ is_enabled BOOLEAN DEFAULT true,
149
+ settings JSONB DEFAULT '{}',
150
+ created_at TIMESTAMPTZ DEFAULT NOW(),
151
+ updated_at TIMESTAMPTZ DEFAULT NOW(),
152
+ created_by UUID REFERENCES auth.users(id),
153
+ updated_by UUID REFERENCES auth.users(id)
154
+ );
155
+ ```
156
+
157
+ **Use Cases:**
158
+ - Enable/disable apps at the organisation level
159
+ - Store organisation-specific app settings (e.g., feature flags, configuration)
160
+ - Control which apps are available to an organisation
161
+
162
+ **Key Characteristics:**
163
+ - Organisation-scoped (one record per organisation-app combination)
164
+ - Contains `is_enabled` flag for feature toggling
165
+ - Contains `settings` JSONB field for app-specific configuration
166
+
167
+ ### 2. `core_event_app_access`
168
+
169
+ **Purpose:** Event-level app availability flag.
170
+
171
+ **Schema:**
172
+ ```sql
173
+ CREATE TABLE core_event_app_access (
174
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
175
+ event_id VARCHAR NOT NULL REFERENCES core_events(event_id),
176
+ app_id UUID NOT NULL REFERENCES rbac_apps(id) ON DELETE CASCADE,
177
+ organisation_id UUID NOT NULL REFERENCES core_organisations(id),
178
+ created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
179
+ updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
180
+ created_by UUID REFERENCES auth.users(id),
181
+ updated_by UUID REFERENCES auth.users(id),
182
+ CONSTRAINT core_event_app_access_unique UNIQUE (event_id, app_id, organisation_id)
183
+ );
184
+ ```
185
+
186
+ **Use Cases:**
187
+ - Enable an app for a specific event
188
+ - Track which apps are available for each event
189
+ - Quick check: "Is this app enabled for this event?"
190
+
191
+ **Key Characteristics:**
192
+ - Event-scoped (one record per event-app-organisation combination)
193
+ - Unique constraint prevents duplicate entries
194
+ - Simple boolean flag (existence = enabled)
195
+
196
+ ### 3. `rbac_event_app_roles`
197
+
198
+ **Purpose:** User-specific role grants for event-app combinations.
199
+
200
+ **Schema:**
201
+ ```sql
202
+ CREATE TABLE rbac_event_app_roles (
203
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
204
+ user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
205
+ event_id VARCHAR NOT NULL REFERENCES core_events(event_id) ON DELETE CASCADE,
206
+ app_id UUID NOT NULL REFERENCES rbac_apps(id),
207
+ organisation_id UUID NOT NULL REFERENCES core_organisations(id),
208
+ role rbac_event_app_role NOT NULL, -- ENUM: 'viewer', 'participant', 'planner', 'event_admin'
209
+ status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'suspended')),
210
+ granted_at TIMESTAMPTZ DEFAULT NOW(),
211
+ granted_by UUID REFERENCES auth.users(id),
212
+ valid_from TIMESTAMPTZ DEFAULT NOW(),
213
+ valid_to TIMESTAMPTZ,
214
+ CONSTRAINT rbac_event_app_roles_unique UNIQUE (user_id, event_id, app_id, role)
215
+ );
216
+ ```
217
+
218
+ **Use Cases:**
219
+ - Grant specific roles to users for event-app combinations
220
+ - Control what users can do (viewer, participant, planner, event_admin)
221
+ - Time-based role validity (valid_from, valid_to)
222
+ - Role status management (active, inactive, suspended)
223
+
224
+ **Key Characteristics:**
225
+ - User-scoped (one record per user-event-app-role combination)
226
+ - Includes role hierarchy and permissions
227
+ - Time-based validity support
228
+ - Status tracking for role lifecycle
229
+
230
+ ### Relationship Summary
231
+
232
+ **Access Tables = "Is this app available?"**
233
+ - `core_organisation_app_access`: Organisation-level availability and settings
234
+ - `core_event_app_access`: Event-level availability flag
235
+
236
+ **Roles Table = "Who can do what?"**
237
+ - `rbac_event_app_roles`: User-specific role grants with permissions
238
+
239
+ ### Important Notes
240
+
241
+ 1. **Separation of Concerns:**
242
+ - Access tables handle **configuration** (feature flags, availability)
243
+ - Roles table handles **authorization** (user permissions)
244
+
245
+ 2. **Independence:**
246
+ - Access records can exist without roles (app enabled, no users yet)
247
+ - Roles can exist without access records (legacy data or data inconsistency)
248
+ - These are intentionally independent to allow flexible configuration
249
+
250
+ 3. **Performance:**
251
+ - Access tables provide fast feature flag checks without querying user roles
252
+ - Roles table provides detailed permission information when needed
253
+
254
+ 4. **Data Integrity:**
255
+ - `core_event_app_access` has unique constraint on `(event_id, app_id, organisation_id)`
256
+ - `rbac_event_app_roles` has unique constraint on `(user_id, event_id, app_id, role)`
257
+
258
+ ### Example Usage Patterns
259
+
260
+ ```sql
261
+ -- Check if app is available for an event (configuration check)
262
+ SELECT EXISTS (
263
+ SELECT 1 FROM core_event_app_access
264
+ WHERE event_id = 'event-123'
265
+ AND app_id = 'app-456'
266
+ AND organisation_id = 'org-789'
267
+ );
268
+
269
+ -- Check if user has access to an event-app (authorization check)
270
+ SELECT EXISTS (
271
+ SELECT 1 FROM rbac_event_app_roles
272
+ WHERE user_id = 'user-abc'
273
+ AND event_id = 'event-123'
274
+ AND app_id = 'app-456'
275
+ AND status = 'active'
276
+ AND valid_from <= NOW()
277
+ AND (valid_to IS NULL OR valid_to > NOW())
278
+ );
279
+
280
+ -- Get organisation-level app settings
281
+ SELECT settings FROM core_organisation_app_access
282
+ WHERE organisation_id = 'org-789'
283
+ AND app_id = 'app-456'
284
+ AND is_enabled = true;
285
+ ```
286
+
126
287
  ## Required RPC Functions
127
288
 
128
289
  The following RPC functions are required and should be updated to use the correct tables/views:
@@ -10,7 +10,7 @@ reviewedBy: documentation-standards-audit
10
10
 
11
11
  PACE Core provides a comprehensive Role-Based Access Control (RBAC) system that manages user permissions through roles, ensuring secure and scalable access control across your application.
12
12
 
13
- > **🔄 Migrating?** If you're upgrading from the legacy RBAC system, see the [Migration Guide](../migration/rbac-migration.md) for step-by-step instructions.
13
+ > **🔄 Migrating?** If you're upgrading from the legacy RBAC system, see the [Migration Guide](../migration/V0.4.0_rbac-migration.md) for step-by-step instructions.
14
14
 
15
15
  > **⚠️ IMPORTANT**: You **must** call `setupRBAC()` before using any RBAC features. See the [Quick Start Guide](../rbac/quick-start.md) for setup instructions.
16
16
 
@@ -278,7 +278,7 @@ If you're upgrading from a system with hardcoded permissions:
278
278
  3. **Replace 'manage' Operations** - Use specific CRUD operations instead
279
279
  4. **Enable Cache Invalidation** - Ensure realtime subscriptions are active
280
280
 
281
- For detailed migration instructions, see the **[RBAC Migration Guide](../migration/rbac-migration.md)**.
281
+ For detailed migration instructions, see the **[RBAC Migration Guide](../migration/V0.4.0_rbac-migration.md)**.
282
282
 
283
283
  ## What's Next?
284
284
 
@@ -286,7 +286,7 @@ For detailed migration instructions, see the **[RBAC Migration Guide](../migrati
286
286
  - **[RBAC Quick Start](../rbac/quick-start.md)** - Build your first RBAC-enabled app
287
287
  - **[RBAC API Reference](../rbac/api-reference.md)** - Complete API documentation
288
288
  - **[RBAC Examples](../rbac/examples.md)** - Practical usage examples
289
- - **[Migration Guide](../migration/rbac-migration.md)** - Migrate from legacy RBAC
289
+ - **[Migration Guide](../migration/V0.4.0_rbac-migration.md)** - Migrate from legacy RBAC
290
290
  - **[Installation](../getting-started/installation-guide.md)** - Get PACE Core set up
291
291
  - **[Authentication](./authentication.md)** - Understand authentication system
292
292
  - **[Organisations](./organisations.md)** - Learn about multi-tenancy
@@ -96,10 +96,8 @@ This index mirrors the folder layout in `packages/core/docs/` so teams can quick
96
96
 
97
97
  - [Migration overview](./migration/README.md)
98
98
  - [Unified migration guide](./migration/MIGRATION_GUIDE.md)
99
- - [Quick migration guide](./migration/quick-migration-guide.md)
100
- - [Organisation context timing fix](./migration/organisation-context-timing-fix.md)
101
- - [Service architecture changes](./migration/service-architecture.md)
102
- - [RBAC migration](./migration/rbac-migration.md)
99
+ - [Organisation context timing fix](./migration/V0.3.44_organisation-context-timing-fix.md)
100
+ - [RBAC migration](./migration/V0.4.0_rbac-migration.md)
103
101
  - [Tailwind scanning updates](./migration/v0.4.15-tailwind-scanning.md)
104
102
  - [CSS-first migration (v0.4.16)](./migration/v0.4.16-css-first-approach.md)
105
103
  - [Source path fix (v0.4.17)](./migration/v0.4.17-source-path-fix.md)
@@ -0,0 +1,263 @@
1
+ # Cursor Rules Quick Start Guide
2
+
3
+ This guide helps you get started with pace-core cursor rules in your consuming app.
4
+
5
+ ## What are Cursor Rules?
6
+
7
+ Cursor rules are `.mdc` (Markdown Cursor) files that guide AI assistants (like Cursor) to follow specific patterns and standards when writing code. pace-core provides a comprehensive set of rules that ensure your app maintains quality, consistency, and compliance with pace-core standards.
8
+
9
+ ## Installation
10
+
11
+ ### Step 1: Install pace-core
12
+
13
+ Make sure pace-core is installed in your project:
14
+
15
+ ```bash
16
+ npm install @jmruthers/pace-core
17
+ ```
18
+
19
+ ### Step 2: Install Cursor Rules
20
+
21
+ Run the installation script from your app root:
22
+
23
+ ```bash
24
+ node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
25
+ ```
26
+
27
+ Or add to your `package.json`:
28
+
29
+ ```json
30
+ {
31
+ "scripts": {
32
+ "setup:cursor-rules": "node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs"
33
+ }
34
+ }
35
+ ```
36
+
37
+ Then run:
38
+
39
+ ```bash
40
+ npm run setup:cursor-rules
41
+ ```
42
+
43
+ The script will:
44
+ - Create `.cursor/rules/` directory if it doesn't exist
45
+ - Copy all pace-core rules (00-08) to your project
46
+ - **Automatically update** pace-core rules (00-09) if they've changed
47
+ - Preserve any existing custom rules (50+)
48
+ - Skip files that are already up to date
49
+
50
+ ## Quick Start Snippet
51
+
52
+ When working with Cursor, you can explicitly reference rules:
53
+
54
+ > "Use pace-core components and follow rules 00–04."
55
+
56
+ This helps Cursor focus on specific rule sets and ensures consistency.
57
+
58
+ ## Rule Files Overview
59
+
60
+ The installed rules are numbered for ordering:
61
+
62
+ - **00-pace-core-compliance.mdc** - Enforce pace-core usage patterns
63
+ - **01-standards-compliance.mdc** - Enforce all pace-core standards
64
+ - **02-project-structure.mdc** - Define standard folder structure
65
+ - **03-solid-principles.mdc** - Enforce SOLID architecture principles
66
+ - **04-testing-standards.mdc** - Enforce testing framework consistency
67
+ - **05-bug-reports-and-features.mdc** - Templates for bug reports (guidance-only)
68
+ - **06-code-quality.mdc** - Enforce code quality standards
69
+ - **07-tech-stack-compliance.mdc** - Enforce tech stack versions and patterns
70
+ - **08-markup-quality.mdc** - Enforce clean markup standards, semantic HTML usage, and pace-core component patterns
71
+
72
+ ## Using Rules with Cursor
73
+
74
+ ### Automatic Loading
75
+
76
+ Cursor automatically loads all `.mdc` files from `.cursor/rules/` when:
77
+ - You open a file that matches the rule's `globs` pattern
78
+ - You ask Cursor to write or modify code
79
+ - Cursor needs context for code generation
80
+
81
+ ### Explicit References
82
+
83
+ You can explicitly reference rules in your prompts:
84
+
85
+ ```
86
+ "Create a new component following rules 00, 01, and 03"
87
+ "Refactor this code to follow SOLID principles (rule 03)"
88
+ "Write tests following rule 04"
89
+ ```
90
+
91
+ ### Rule Semantics
92
+
93
+ Rules use clear semantics:
94
+ - **MUST** - Hard requirement, non-negotiable
95
+ - **SHOULD** - Strong recommendation, best practice
96
+ - **MAY** - Optional, acceptable alternative
97
+
98
+ ## Custom Rules
99
+
100
+ ### Creating Your Own Rules
101
+
102
+ Create your own rules in `.cursor/rules/` with numbers starting at `50`:
103
+
104
+ ```
105
+ .cursor/rules/
106
+ ├── 00-pace-core-compliance.mdc # pace-core rule
107
+ ├── 01-standards-compliance.mdc # pace-core rule
108
+ ├── ...
109
+ ├── 50-my-custom-rule.mdc # Your custom rule
110
+ └── 51-another-custom-rule.mdc # Your custom rule
111
+ ```
112
+
113
+ ### Rule Format
114
+
115
+ Your custom rules should follow the same format:
116
+
117
+ ```markdown
118
+ ---
119
+ description: Brief description of your rule
120
+ globs: ["targeted/path/**/*.{ts,tsx}"]
121
+ alwaysApply: true
122
+ ---
123
+
124
+ # Your Rule Title
125
+
126
+ Content with examples and guidelines.
127
+ ```
128
+
129
+ ## Running Audits
130
+
131
+ ### Comprehensive Audit
132
+
133
+ Run the comprehensive audit tool to check compliance:
134
+
135
+ ```bash
136
+ node node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs
137
+ ```
138
+
139
+ Or add to your `package.json`:
140
+
141
+ ```json
142
+ {
143
+ "scripts": {
144
+ "audit:pace-core": "node node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs"
145
+ }
146
+ }
147
+ ```
148
+
149
+ This generates a timestamped markdown report in `audit/` directory.
150
+
151
+ ### Compliance Check
152
+
153
+ For a quick compliance check:
154
+
155
+ ```bash
156
+ node node_modules/@jmruthers/pace-core/scripts/check-pace-core-compliance.cjs
157
+ ```
158
+
159
+ ## Updating Rules
160
+
161
+ When pace-core is updated, run the installation script again:
162
+
163
+ ```bash
164
+ npm run setup:cursor-rules
165
+ ```
166
+
167
+ The script will:
168
+ - **Automatically update** pace-core rules (00-09) if they've changed (version or content differs)
169
+ - Preserve your custom rules (50+)
170
+ - Skip files that are already up to date
171
+
172
+ ### Force Update
173
+
174
+ To force update all rules (even when versions match):
175
+
176
+ ```bash
177
+ node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs --force
178
+ ```
179
+
180
+ **Note**: Normally, pace-core rules are automatically updated when they change. The `--force` flag forces an update even when versions match (useful if content changed but version metadata wasn't updated).
181
+
182
+ ## Monorepo Setup
183
+
184
+ For monorepos, run the installation script from each app's root directory:
185
+
186
+ ```
187
+ monorepo/
188
+ ├── apps/
189
+ │ ├── app1/
190
+ │ │ └── .cursor/rules/ # Run script here
191
+ │ └── app2/
192
+ │ └── .cursor/rules/ # Run script here
193
+ ```
194
+
195
+ Each app maintains its own `.cursor/rules/` directory.
196
+
197
+ ## Troubleshooting
198
+
199
+ ### Rules Not Loading
200
+
201
+ 1. Verify rules are in `.cursor/rules/` directory
202
+ 2. Check file extensions are `.mdc`
203
+ 3. Restart Cursor if rules were just installed
204
+ 4. Check rule frontmatter is valid YAML
205
+
206
+ ### Rules Conflicting
207
+
208
+ 1. Check rule numbering (pace-core: 00-09, yours: 50+)
209
+ 2. Verify `globs` patterns don't overlap unnecessarily
210
+ 3. Review rule priorities in frontmatter
211
+
212
+ ### Installation Fails
213
+
214
+ 1. Check you're in the app root directory
215
+ 2. Verify `node_modules/@jmruthers/pace-core/` exists
216
+ 3. Check file permissions
217
+ 4. Try with `--force` flag if needed
218
+
219
+ ## Best Practices
220
+
221
+ 1. **Run audits regularly** - Check compliance before major commits
222
+ 2. **Update rules** - Keep pace-core rules up to date
223
+ 3. **Reference rules explicitly** - Tell Cursor which rules to follow
224
+ 4. **Create custom rules** - Add app-specific rules starting at 50
225
+ 5. **Review audit reports** - Address issues systematically
226
+
227
+ ## Example Workflow
228
+
229
+ 1. **Initial Setup:**
230
+ ```bash
231
+ npm install @jmruthers/pace-core
232
+ npm run setup:cursor-rules
233
+ ```
234
+
235
+ 2. **Daily Development:**
236
+ - Cursor automatically uses rules when writing code
237
+ - Explicitly reference rules when needed: "Follow rules 00-04"
238
+
239
+ 3. **Before Committing:**
240
+ ```bash
241
+ npm run audit:pace-core
242
+ ```
243
+ Review the generated report in `audit/` directory
244
+
245
+ 4. **After pace-core Updates:**
246
+ ```bash
247
+ npm update @jmruthers/pace-core
248
+ npm run setup:cursor-rules
249
+ ```
250
+
251
+ ## Related Documentation
252
+
253
+ - [Cursor Rules README](../../cursor-rules/README.md)
254
+ - [pace-core Standards](../standards/README.md)
255
+ - [pace-core Exports](../api-reference/README.md)
256
+
257
+ ## Support
258
+
259
+ For issues with cursor rules:
260
+ 1. Check this guide
261
+ 2. Review rule files for guidance
262
+ 3. File an issue in pace-core repository
263
+ 4. Check pace-core documentation
@@ -71,7 +71,12 @@ import path from 'path'
71
71
 
72
72
  export default defineConfig({
73
73
  plugins: [
74
- react(),
74
+ react({
75
+ // React Compiler for automatic optimizations (React 19+)
76
+ babel: {
77
+ plugins: ['babel-plugin-react-compiler'],
78
+ },
79
+ }),
75
80
  tailwindcss({
76
81
  // CRITICAL: Include pace-core source files for Tailwind scanning
77
82
  content: [
@@ -57,7 +57,12 @@ import path from 'path';
57
57
 
58
58
  export default defineConfig({
59
59
  plugins: [
60
- react(),
60
+ react({
61
+ // React Compiler for automatic optimizations (React 19+)
62
+ babel: {
63
+ plugins: ['babel-plugin-react-compiler'],
64
+ },
65
+ }),
61
66
  tailwindcss({
62
67
  content: [
63
68
  './src/**/*.{js,ts,jsx,tsx}',