@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
package/CHANGELOG.md CHANGED
@@ -7,6 +7,68 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Removed
11
+ - **DataTable Debug Tools Exports**: Removed all public exports from `packages/core/src/components/DataTable/utils/debugTools.ts` as they were unused. The debug tools functionality remains available internally for development but is no longer exported. Removed exports include:
12
+ - `DebugLevel` enum
13
+ - `DebugConfig` interface
14
+ - `DEFAULT_DEBUG_CONFIG` constant
15
+ - `DebugLogEntry` interface
16
+ - `PerformanceTimelineEntry` interface
17
+ - `MemorySnapshot` interface
18
+ - `RenderPerformanceData` interface
19
+ - `DataTableDebugger` class
20
+ - `dataTableDebugger` instance
21
+ - `profile` decorator function
22
+ - `MemoryMonitor` class
23
+ - `usePerformanceDebugger` hook
24
+ - `setupDevTools` function
25
+ - **DataTable Type Exports**: Removed duplicative type exports from `packages/core/src/components/DataTable/types.ts`:
26
+ - `PartialDataRecord<TData>` - Use `Partial<TData>` instead
27
+ - `CompleteDataRecord<TData>` - Use `TData` directly instead
28
+ - **Flexible Import Helper Functions**: Removed unused helper functions from `packages/core/src/components/DataTable/utils/flexibleImport.ts`:
29
+ - `createImportOptions()` - Not used anywhere in the codebase
30
+ - `createRegionalImportOptions()` - Not used anywhere in the codebase
31
+ - `testDateParsing()` - Not used anywhere in the codebase
32
+
33
+ ### Migration Notes
34
+ - If you were using `PartialDataRecord` or `CompleteDataRecord`, replace them with `Partial<TData>` and `TData` respectively
35
+ - If you were using any of the debug tools exports, they are no longer available. The debug tools remain functional internally but are not exposed as public APIs
36
+ - If you were using `createImportOptions()`, `createRegionalImportOptions()`, or `testDateParsing()`, you'll need to implement similar functionality yourself or use the `flexibleImport()` function directly with manual options
37
+
38
+ ## [0.6.0] - 2025-01-28
39
+
40
+ ### Changed
41
+ - **BREAKING**: Upgraded from React 18.3.1 to React 19.2.3
42
+ - **BREAKING**: Updated peer dependencies to require React ^19.0.0
43
+ - **BREAKING**: Updated @types/react to ^19.2.7 and @types/react-dom to ^19.2.3
44
+ - **BREAKING**: Updated @vitejs/plugin-react to ^5.1.2
45
+ - **BREAKING**: Database schema changes (table naming standardization, person-scoped profiles)
46
+ - Fixed TypeScript errors related to React 19's stricter type system in Button and Select components
47
+ - Updated vitest.config.ts to remove duplicate configuration keys
48
+
49
+ ### Added
50
+ - **React Compiler**: Added `babel-plugin-react-compiler` for automatic component optimizations
51
+ - **React Compiler Configuration**: Configured React Compiler in vite.config.ts and vitest.config.ts
52
+ - **Migration Guides**: Added comprehensive migration documentation
53
+
54
+ ### Migration Notes
55
+
56
+ **⚠️ CRITICAL**: This version includes major breaking changes. See migration guides for detailed instructions:
57
+
58
+ - **React 19 Upgrade**: See [React 19 Migration Guide](./docs/migration/V0.6.0_REACT_19_MIGRATION.md)
59
+ - **Complete Migration Guide**: See [v0.5.190 → v0.6.1 Migration Guide](./docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md)
60
+ - **Database Changes**: See [Database Changes December 2025](./docs/migration/database-changes-december-2025.md)
61
+ - **Table Naming**: See [Database Changes December 2025](./docs/migration/database-changes-december-2025.md#change-1-table-naming-standardization)
62
+ - **Person-Scoped Profiles**: See [Person-Scoped Profiles Migration Guide](./docs/migration/V0.5.190_person-scoped-profiles-migration-guide.md)
63
+
64
+ **Quick Summary:**
65
+ - Consuming apps must upgrade to React 19.2.3+
66
+ - Database migrations required for table naming and person-scoped profiles
67
+ - All table names updated to follow `app_entity` naming convention
68
+ - Profiles are now person-scoped instead of organisation-scoped
69
+
70
+ ## [Unreleased]
71
+
10
72
  ### Added
11
73
  - **useFormDialog Hook**: Generic React hook for managing form dialog state (open/close, form data, reset behavior). Supports both controlled and uncontrolled usage patterns with type-safe form data management.
12
74
  - **DateTimeField Component**: Form input component for datetime values with automatic UTC ↔ timezone conversion
package/README.md CHANGED
@@ -80,6 +80,7 @@ import React from 'react';
80
80
  import ReactDOM from 'react-dom/client';
81
81
  import App from './App';
82
82
 
83
+ // React 19+ with createRoot
83
84
  const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
84
85
  root.render(
85
86
  <React.StrictMode>
@@ -104,7 +105,12 @@ import path from 'path'
104
105
 
105
106
  export default defineConfig({
106
107
  plugins: [
107
- react(),
108
+ react({
109
+ // React Compiler for automatic optimizations (React 19+)
110
+ babel: {
111
+ plugins: ['babel-plugin-react-compiler'],
112
+ },
113
+ }),
108
114
  tailwindcss({
109
115
  // Only need to scan your app's source files
110
116
  // pace-core source files are automatically scanned via @source directives
@@ -0,0 +1,299 @@
1
+ ---
2
+ description: Enforce pace-core usage patterns and prevent custom solutions when pace-core provides functionality
3
+ globs: ["src/**/*.{ts,tsx,js,jsx}"]
4
+ alwaysApply: false
5
+ paceCoreVersion: "0.6.x"
6
+ rulesVersion: "2025-01-28"
7
+ ---
8
+ # pace-core Compliance Guide
9
+
10
+ This guide ensures consuming apps use pace-core components, hooks, and utilities correctly, preventing duplication and maintaining consistency across the PACE suite.
11
+
12
+ ## MUST: Use pace-core Instead of Custom Solutions
13
+
14
+ **You MUST use pace-core components, hooks, and utilities when they exist.** Creating custom solutions duplicates functionality and breaks consistency.
15
+
16
+ ### Components
17
+
18
+ **MUST use pace-core components:**
19
+ - `Button`, `Card`, `Input`, `Label`, `Textarea` - Basic UI components
20
+ - `Dialog`, `Select`, `Tabs`, `Calendar`, `Toast`, `Tooltip` - Advanced UI components
21
+ - `DataTable` - Complex data tables with RBAC integration
22
+ - `Form`, `FormField`, `LoginForm` - Form components
23
+ - `Header`, `Footer`, `PaceAppLayout` - Layout components
24
+ - `FileUpload`, `FileDisplay` - Storage components
25
+
26
+ **MUST NOT:**
27
+ - Create custom button components when `Button` from pace-core exists
28
+ - Use native HTML elements (`<button>`, `<input>`) when pace-core provides components
29
+ - Import directly from `@radix-ui/*` - Use pace-core wrappers instead
30
+ - Import directly from `lucide-react` - Use pace-core components that include icons
31
+
32
+ **Example:**
33
+ ```tsx
34
+ // ❌ WRONG: <button className="btn">Click me</button>
35
+ // ✅ CORRECT: import { Button } from '@jmruthers/pace-core'; <Button>Click me</Button>
36
+ ```
37
+
38
+ ### Hooks
39
+
40
+ **MUST use pace-core hooks:**
41
+ - `useUnifiedAuth`, `useEvents`, `useOrganisations` - Authentication and data
42
+ - `usePermissions`, `useCan`, `useSecureSupabase` - RBAC hooks
43
+ - `useToast`, `useDebounce`, `useZodForm` - Utility hooks
44
+ - `useFileReference`, `useFileUpload` - File management hooks
45
+
46
+ **MUST NOT:**
47
+ - Create custom `useAuth` when `useUnifiedAuth` exists
48
+ - Create custom `useToast` when pace-core provides it
49
+ - Create custom `useDebounce` when pace-core provides it
50
+ - Create custom form hooks when `useZodForm` exists
51
+
52
+ **Example:**
53
+ ```tsx
54
+ // ❌ WRONG: Custom useDebounce hook implementation
55
+ // ✅ CORRECT: import { useDebounce } from '@jmruthers/pace-core'; const debouncedValue = useDebounce(value, 500);
56
+ ```
57
+
58
+ ### Utilities
59
+
60
+ **MUST use pace-core utilities:**
61
+ - `cn` - Class name utility (replaces clsx/tailwind-merge)
62
+ - `formatDate`, `formatTime`, `formatDateTime` - Date formatting
63
+ - `formatCurrency`, `formatNumber`, `formatPercent` - Number formatting
64
+ - `emailSchema`, `nameSchema`, `passwordSchema` - Validation schemas
65
+ - `validateUserInput`, `sanitizeUserInput` - Input validation
66
+
67
+ **MUST NOT:**
68
+ - Create custom `formatDate` when pace-core provides it
69
+ - Use `clsx` directly - Use `cn` from pace-core
70
+ - Create custom validation when pace-core schemas exist
71
+
72
+ **Example:**
73
+ ```tsx
74
+ // ❌ WRONG: Custom formatDate implementation
75
+ // ✅ CORRECT: import { formatDate } from '@jmruthers/pace-core'; const formatted = formatDate(date);
76
+ ```
77
+
78
+ ## MUST: Use Secure Supabase Client
79
+
80
+ **You MUST use `useSecureSupabase()` for all database operations.** Never use the base Supabase client directly.
81
+
82
+ ```tsx
83
+ // ❌ WRONG: import { createClient } from '@supabase/supabase-js'; const supabase = createClient(...);
84
+ // ✅ CORRECT: import { useSecureSupabase } from '@jmruthers/pace-core/rbac'; const secureSupabase = useSecureSupabase();
85
+ ```
86
+
87
+ ## MUST: Setup RBAC Before Use
88
+
89
+ **You MUST call `setupRBAC()` before any RBAC usage.** This is non-negotiable.
90
+
91
+ ```tsx
92
+ // main.tsx - MUST be first
93
+ import { setupRBAC } from '@jmruthers/pace-core/rbac';
94
+ setupRBAC(supabase);
95
+ // Then render app
96
+ ```
97
+
98
+ ## MUST: Read Documentation Before Using Components
99
+
100
+ **You MUST read pace-core component documentation before using any component.** Never guess about props, usage patterns, or behavior.
101
+
102
+ ### Where to Find Documentation
103
+
104
+ **Component API Reference:**
105
+ - Location: `node_modules/@jmruthers/pace-core/docs/api-reference/components.md`
106
+ - Or: Check pace-core repository `packages/core/docs/api-reference/components.md`
107
+ - Contains: Complete prop definitions, type information, usage examples
108
+
109
+ **Implementation Guides:**
110
+ - Location: `node_modules/@jmruthers/pace-core/docs/implementation-guides/`
111
+ - Contains: Detailed guides for complex components like DataTable, Forms, etc.
112
+ - Examples:
113
+ - `data-tables.md` - DataTable component guide
114
+ - `forms.md` - Form components guide
115
+ - `file-upload-storage.md` - FileUpload/FileDisplay guide
116
+
117
+ **Detailed API Documentation:**
118
+ - Location: `node_modules/@jmruthers/pace-core/docs/api/`
119
+ - Contains: In-depth API documentation for all exports
120
+
121
+ **Quick Reference:**
122
+ - Location: `node_modules/@jmruthers/pace-core/docs/getting-started/quick-reference.md`
123
+ - Contains: Quick lookup for common patterns
124
+
125
+ ### How to Find Component-Specific Docs
126
+
127
+ 1. **Check API Reference First:**
128
+ ```bash
129
+ # In your consuming app
130
+ cat node_modules/@jmruthers/pace-core/docs/api-reference/components.md
131
+ ```
132
+
133
+ 2. **Search Implementation Guides:**
134
+ - Look for component name in `implementation-guides/` directory
135
+ - Complex components have dedicated guides
136
+
137
+ 3. **Check Type Definitions:**
138
+ ```tsx
139
+ // Import and check TypeScript types
140
+ import type { DataTableProps } from '@jmruthers/pace-core';
141
+ // Hover over type to see prop definitions
142
+ ```
143
+
144
+ 4. **Use IDE IntelliSense:**
145
+ - TypeScript types provide inline documentation
146
+ - Hover over component name to see prop types
147
+ - Use autocomplete to discover available props
148
+
149
+ ### MUST NOT: Guess About Props or Usage
150
+
151
+ **❌ WRONG - Guessing props:**
152
+ ```tsx
153
+ <DataTable data={data} columns={columns} /> // Missing required rbac prop
154
+ ```
155
+
156
+ **✅ CORRECT - Read documentation first:**
157
+ ```tsx
158
+ import { DataTable } from '@jmruthers/pace-core';
159
+ <DataTable data={data} columns={columns} rbac={{ pageName: 'users' }} features={{ search: true }} />
160
+ ```
161
+
162
+ ### Documentation Checklist
163
+
164
+ Before using any pace-core component:
165
+ - [ ] Read component API reference
166
+ - [ ] Check for implementation guide if component is complex
167
+ - [ ] Review TypeScript types for prop definitions
168
+ - [ ] Check examples in documentation
169
+ - [ ] Verify required vs optional props
170
+ - [ ] Understand component behavior and limitations
171
+
172
+ ### Common Documentation Locations
173
+
174
+ | Component Type | Documentation Location |
175
+ |----------------|----------------------|
176
+ | Basic UI (Button, Card, etc.) | `api-reference/components.md` |
177
+ | DataTable | `implementation-guides/data-tables.md` |
178
+ | Forms | `implementation-guides/forms.md` |
179
+ | RBAC Components | `rbac/getting-started.md` |
180
+ | File Upload/Display | `implementation-guides/file-upload-storage.md` |
181
+ | Hooks | `api-reference/hooks.md` |
182
+ | Utilities | `api-reference/utilities.md` |
183
+
184
+ ## SHOULD: Check pace-core Before Creating New Components
185
+
186
+ **Before creating a new component, hook, or utility:**
187
+
188
+ 1. Check pace-core exports: `@jmruthers/pace-core`
189
+ 2. Review pace-core documentation
190
+ 3. Check `core-usage-manifest.json` for available exports
191
+ 4. Search pace-core source if needed
192
+
193
+ **If pace-core doesn't provide what you need:**
194
+ - Consider if it should be added to pace-core (for shared use)
195
+ - Document why custom solution is needed
196
+ - Follow pace-core patterns for consistency
197
+
198
+ ## MUST: Use pace-core Providers
199
+
200
+ **You MUST wrap your app with required providers:**
201
+
202
+ ```tsx
203
+ import { UnifiedAuthProvider, OrganisationProvider } from '@jmruthers/pace-core';
204
+ <UnifiedAuthProvider supabaseClient={supabase} appName="Your App">
205
+ <OrganisationProvider>{/* Your app */}</OrganisationProvider>
206
+ </UnifiedAuthProvider>
207
+ ```
208
+
209
+ ## MUST: Import Core Styles
210
+
211
+ **You MUST import pace-core styles:**
212
+
213
+ ```tsx
214
+ // main.tsx or App.tsx
215
+ import '@jmruthers/pace-core/styles/core.css';
216
+ ```
217
+
218
+ ## MUST NOT: Use Inline Styles
219
+
220
+ **You MUST NOT use inline styles (`style={{...}}`).** All styling MUST come from pace-core components and Tailwind classes.
221
+
222
+ ### Why No Inline Styles
223
+
224
+ - Inline styles override pace-core component styles
225
+ - Inline styles break consistency across the PACE suite
226
+ - Inline styles are harder to maintain and update
227
+ - Inline styles don't benefit from theme variables and design system
228
+
229
+ ### Use pace-core Components for Styling
230
+
231
+ **All styling MUST come from:**
232
+ 1. **pace-core components** - Components already have correct styling
233
+ 2. **Tailwind utility classes** - Use Tailwind classes for layout and spacing
234
+ 3. **Semantic classes** - Use semantic classes from pace-core (e.g., `bg-background`, `text-foreground`)
235
+
236
+ **MUST NOT:**
237
+ - Use `style={{...}}` prop
238
+ - Use inline CSS strings
239
+ - Override component styles with inline styles
240
+ - Create custom CSS for styling that pace-core provides
241
+
242
+ **Example:**
243
+ ```tsx
244
+ // ❌ WRONG: <div style={{ backgroundColor: 'blue' }}> or <Button style={{...}}>
245
+ // ✅ CORRECT: <Card className="bg-main-500 p-4"> or <Button variant="default"> or <div className="flex gap-4">
246
+ ```
247
+
248
+ ### When Tailwind Classes Are Acceptable
249
+
250
+ **Tailwind classes are acceptable for:**
251
+ - Layout (flex, grid, positioning)
252
+ - Spacing (margin, padding, gap)
253
+ - Responsive design (breakpoints)
254
+ - Layout-specific styling not provided by pace-core components
255
+
256
+ **Tailwind classes MUST NOT:**
257
+ - Override pace-core component internal styles
258
+ - Duplicate styling that pace-core components already provide
259
+ - Use standard Tailwind colors (use `main-*`, `sec-*`, `acc-*` namespaces)
260
+
261
+ ### Styling Checklist
262
+
263
+ Before adding any styling:
264
+ - [ ] Check if pace-core component provides the styling you need
265
+ - [ ] Use pace-core component variants/props for styling
266
+ - [ ] Use Tailwind classes only for layout/spacing
267
+ - [ ] Never use inline `style={{...}}` prop
268
+ - [ ] Never override component styles with inline styles
269
+ - [ ] Use semantic classes (`bg-background`, `text-foreground`) when available
270
+
271
+ ## SHOULD: Use pace-core Patterns
272
+
273
+ **Follow pace-core patterns for consistency:**
274
+ - Component structure and composition
275
+ - Error handling patterns
276
+ - Loading state patterns
277
+ - Form validation patterns
278
+ - RBAC permission checking patterns
279
+
280
+ ## Common Mistakes to Avoid
281
+
282
+ 1. **Using inline styles** - Never use `style={{...}}`, use pace-core components and Tailwind classes
283
+ 2. **Guessing component props** - Always read documentation first
284
+ 3. **Creating duplicate components** - Always check pace-core first
285
+ 4. **Using base Supabase client** - Always use `useSecureSupabase()`
286
+ 5. **Missing RBAC setup** - Always call `setupRBAC()` first
287
+ 6. **Missing providers** - Always wrap with required providers
288
+ 7. **Missing styles** - Always import core.css
289
+ 8. **Direct library imports** - Use pace-core wrappers instead
290
+
291
+ ## Reference
292
+
293
+ - **pace-core Exports**: See `pace-core-exports.mdc` for complete export reference
294
+ - **RBAC Implementation**: See `rbac-implementation.mdc` for RBAC patterns
295
+ - **Component Documentation**:
296
+ - API Reference: `node_modules/@jmruthers/pace-core/docs/api-reference/components.md`
297
+ - Implementation Guides: `node_modules/@jmruthers/pace-core/docs/implementation-guides/`
298
+ - Detailed API: `node_modules/@jmruthers/pace-core/docs/api/`
299
+ - **Always read documentation before using components** - Never guess about props or usage
@@ -0,0 +1,244 @@
1
+ ---
2
+ description: Enforce compliance with all pace-core standards across architecture, API, components, code style, security, testing, and RBAC/RLS
3
+ globs: ["src/**/*.{ts,tsx,js,jsx}", "supabase/migrations/**/*.sql"]
4
+ alwaysApply: false
5
+ paceCoreVersion: "0.6.x"
6
+ rulesVersion: "2025-01-28"
7
+ ---
8
+ # Standards Compliance Guide
9
+
10
+ This guide ensures consuming apps comply with all pace-core standards. Follow these standards to maintain quality, security, and consistency.
11
+
12
+ ## Architecture Standard
13
+
14
+ ### MUST: Follow Architecture Principles
15
+
16
+ **MUST adhere to:**
17
+ - Composition over complexity
18
+ - Separation of concerns
19
+ - Domain-agnostic design
20
+ - Extensible, stable APIs
21
+ - Secure by default
22
+ - Performance-conscious
23
+
24
+ ### MUST: Use Helper Functions in RLS Policies
25
+
26
+ **RLS policies MUST use helper functions, NEVER subqueries.**
27
+
28
+ ```sql
29
+ -- ❌ WRONG: Subquery in RLS policy (causes N+1 queries)
30
+ CREATE POLICY rbac_select_users ON users FOR SELECT USING (
31
+ organisation_id IN (SELECT organisation_id FROM organisation_memberships WHERE user_id = auth.uid())
32
+ );
33
+
34
+ -- ✅ CORRECT: Helper function with STABLE SECURITY DEFINER
35
+ CREATE OR REPLACE FUNCTION get_user_organisation_ids() RETURNS uuid[] LANGUAGE plpgsql STABLE SECURITY DEFINER SET search_path TO public AS $$
36
+ BEGIN RETURN ARRAY(SELECT organisation_id FROM organisation_memberships WHERE user_id = get_effective_user_id()); END;
37
+ $$;
38
+ CREATE POLICY rbac_select_users ON users FOR SELECT USING (organisation_id = ANY(get_user_organisation_ids()));
39
+ ```
40
+
41
+ ### MUST: Test Database Migrations
42
+
43
+ **MUST verify migrations don't cause query timeouts or performance degradation.**
44
+
45
+ ## API & RPC Standard
46
+
47
+ ### MUST: Follow RPC Naming Convention
48
+
49
+ **RPCs MUST follow pattern: `<family>_<domain>_<verb>`**
50
+
51
+ - `data_*` prefix for read operations: `data_cake_dishes_list`, `data_file_reference_list`
52
+ - `app_*` prefix for write operations: `app_cake_dish_create`, `app_cake_dish_update`
53
+ - CRUD verbs only: `create`, `read`, `update`, `delete`, `list`, `get`
54
+ - Bulk operations: `_bulk` suffix (e.g., `app_cake_dish_create_bulk`)
55
+
56
+ ```sql
57
+ -- ✅ CORRECT: data_cake_dishes_list, app_cake_dish_create, app_cake_dish_create_bulk
58
+ -- ❌ WRONG: getDishes, create_dish (wrong naming pattern)
59
+ ```
60
+
61
+ ### MUST: Use ApiResult Shape
62
+
63
+ **All RPCs MUST return ApiResult shape:**
64
+
65
+ ```typescript
66
+ type ApiResult<T> = { ok: true; data: T } | { ok: false; error: ApiError };
67
+ type ApiError = { code: string; message: string; details?: object };
68
+ ```
69
+
70
+ ### MUST: Enforce RLS in RPCs
71
+
72
+ **RPCs MUST enforce RLS and tenant boundaries.** Never bypass RLS.
73
+
74
+ ### SHOULD: Make Write RPCs Idempotent
75
+
76
+ **Write RPCs SHOULD be idempotent when possible.**
77
+
78
+ ## Component Standard
79
+
80
+ ### MUST: Follow Component Principles
81
+
82
+ **Components MUST:**
83
+ - Be stateless when possible
84
+ - Use composable structure
85
+ - Be accessible by default
86
+ - Be fully typed
87
+ - Have small surface area
88
+
89
+ ### MUST NOT: Add Domain Logic to Components
90
+
91
+ **Components MUST NOT:**
92
+ - Include domain-specific logic
93
+ - Fetch data directly (use hooks/services)
94
+ - Include business workflows
95
+
96
+ ### MUST: Ensure Accessibility
97
+
98
+ **Components MUST:**
99
+ - Be keyboard operable
100
+ - Have correct ARIA roles
101
+ - Have visible focus states
102
+ - Avoid inaccessible interactions
103
+
104
+ ## Code Style Standard
105
+
106
+ ### MUST: Follow TypeScript Rules
107
+
108
+ **MUST:**
109
+ - Use strict mode (`strict: true` in tsconfig)
110
+ - Prefer discriminated unions
111
+ - Use ReadonlyArray where possible
112
+ - Avoid boolean mode flags (use unions instead)
113
+
114
+ **MUST NOT:**
115
+ - Use `any` (use `unknown` if type is truly unknown)
116
+ - Use implicit any
117
+ - Use unnecessary type assertions
118
+
119
+ ### MUST: Follow Naming Conventions
120
+
121
+ - Hooks: `useSomething`
122
+ - Providers: `SomethingProvider`
123
+ - Utilities: `camelCase`
124
+ - Components: `PascalCase`
125
+
126
+ ### SHOULD: Use Preferred Patterns
127
+
128
+ **SHOULD:**
129
+ - Use pure functions
130
+ - Prefer composition over inheritance
131
+ - Use early returns
132
+ - Extract large functions into small helpers
133
+
134
+ ## Security Standard
135
+
136
+ ### MUST: Never Bypass RLS
137
+
138
+ **MUST enforce RLS on all tables.** Never bypass RLS policies.
139
+
140
+ ### MUST: Validate All Inputs
141
+
142
+ **MUST validate all inputs using Zod schemas or similar.**
143
+
144
+ ### MUST: Sanitize Logs
145
+
146
+ **MUST NOT log:**
147
+ - Passwords
148
+ - Tokens
149
+ - Sensitive data (PII)
150
+
151
+ **MAY log:**
152
+ - IDs
153
+ - Non-PII metadata
154
+
155
+ ### MUST: Use Safe Error Messaging
156
+
157
+ **MUST NOT expose internal details in error messages.**
158
+
159
+ ### MUST: Use Helper Functions in RLS
160
+
161
+ **RLS policies MUST use STABLE SECURITY DEFINER helper functions:**
162
+ - `STABLE` - Results consistent within transaction
163
+ - `SECURITY DEFINER` - Bypass RLS to avoid recursion
164
+ - `SET search_path TO 'public'` - Prevent search path injection
165
+
166
+ ## Testing Standard
167
+
168
+ ### MUST: Meet Coverage Requirements
169
+
170
+ **MUST achieve:**
171
+ - ≥90% coverage for utils & hooks
172
+ - ≥70% coverage for components
173
+
174
+ ### MUST: Use React Testing Library
175
+
176
+ **MUST use React Testing Library + userEvent for component tests.**
177
+
178
+ ### SHOULD: Colocate Tests
179
+
180
+ **Tests SHOULD be colocated: `*.test.ts` or `*.test.tsx`**
181
+
182
+ ### SHOULD: Test Critical Paths
183
+
184
+ **SHOULD test:**
185
+ - Key user interactions
186
+ - Error handling
187
+ - Edge cases
188
+ - Critical business logic
189
+
190
+ ## RBAC & RLS Standard
191
+
192
+ ### MUST: Use Helper Functions
193
+
194
+ **All RLS policies MUST use helper functions with:**
195
+ - `STABLE` attribute
196
+ - `SECURITY DEFINER` attribute
197
+ - `SET search_path TO 'public'`
198
+
199
+ ### MUST: Follow Policy Naming
200
+
201
+ **RLS policies MUST follow pattern: `rbac_{operation}_{table_name}_{scope}`**
202
+
203
+ Example: `rbac_select_users_organisation`
204
+
205
+ ### MUST: Include Organisation Context
206
+
207
+ **RLS policies MUST include `organisation_id` for multi-tenant isolation.**
208
+
209
+ ### MUST: Include Super Admin Checks
210
+
211
+ **RLS policies SHOULD include super admin checks where appropriate.**
212
+
213
+ ## Standards Precedence
214
+
215
+ When standards conflict, follow this order:
216
+ 1. Security Standard (highest priority)
217
+ 2. API & RPC Standard
218
+ 3. Component Standard
219
+ 4. Code Style Standard
220
+ 5. Testing Standard
221
+ 6. Documentation Standard
222
+
223
+ ## Compliance Checklist
224
+
225
+ Before committing code, verify:
226
+ - [ ] RLS policies use helper functions (no subqueries)
227
+ - [ ] RPCs follow naming convention
228
+ - [ ] Components are accessible and typed
229
+ - [ ] No `any` types used
230
+ - [ ] Inputs are validated
231
+ - [ ] Tests meet coverage requirements
232
+ - [ ] No sensitive data in logs
233
+ - [ ] Error messages are safe
234
+
235
+ ## Reference
236
+
237
+ See `packages/core/docs/standards/` for complete standards documentation:
238
+ - 01-architecture-standard.md
239
+ - 02-api-and-rpc-standard.md
240
+ - 03-component-standard.md
241
+ - 04-code-style-standard.md
242
+ - 05-security-standard.md
243
+ - 06-testing-and-docs-standard.md
244
+ - 07-rbac-and-rls-standard.md