@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
@@ -1,356 +0,0 @@
1
- ---
2
- lastUpdated: 2025-11-18T21:00:00+11:00
3
- version: 0.5.181
4
- reviewedBy: documentation-standards-audit
5
- ---
6
-
7
- # Quick Migration Guide
8
-
9
- > **🚀 Fast Track Migration** | [Full Migration Guide](./MIGRATION_GUIDE.md) | [Complete Migration Reference](./README.md)
10
-
11
- Quick migration guide for common PACE Core upgrade scenarios. For detailed migration instructions, see the [Complete Migration Guide](./MIGRATION_GUIDE.md).
12
-
13
- ## 🎯 Quick Migration Checklist
14
-
15
- ### Before You Start
16
- - [ ] **Backup your project** - Always backup before major updates
17
- - [ ] **Check current version** - `npm list @jmruthers/pace-core`
18
- - [ ] **Review changelog** - Check for breaking changes
19
- - [ ] **Test in development** - Never migrate directly in production
20
-
21
- ### Common Migration Scenarios
22
-
23
- ## 📦 Package Updates
24
-
25
- ### Minor Version Updates (e.g., v0.4.16 → v0.4.17)
26
-
27
- **Usually safe, but check for:**
28
- - New features
29
- - Bug fixes
30
- - Performance improvements
31
-
32
- ```bash
33
- # Update to latest
34
- npm update @jmruthers/pace-core
35
-
36
- # Or specific version
37
- npm install @jmruthers/pace-core@0.4.17
38
- ```
39
-
40
- **What to check:**
41
- - [ ] App still builds successfully
42
- - [ ] No console errors
43
- - [ ] Components render correctly
44
- - [ ] Authentication still works
45
-
46
- ### Major Version Updates (e.g., v0.x → v1.x)
47
-
48
- **Requires more attention:**
49
- - Breaking API changes
50
- - New required props
51
- - Deprecated features
52
- - Configuration changes
53
-
54
- ```bash
55
- # Check what's new
56
- npm info @jmruthers/pace-core versions --json
57
-
58
- # Update to latest
59
- npm install @jmruthers/pace-core@latest
60
- ```
61
-
62
- **What to check:**
63
- - [ ] Review [Breaking Changes](./breaking-changes.md)
64
- - [ ] Update import statements
65
- - [ ] Fix deprecated API usage
66
- - [ ] Update configuration files
67
- - [ ] Test all functionality
68
-
69
- ## 🔧 Configuration Updates
70
-
71
- ### Tailwind v4 Migration
72
-
73
- **From v0.4.15 to v0.4.16+ (CSS-First Approach):**
74
-
75
- ```bash
76
- # Remove old dependencies
77
- npm uninstall tailwindcss postcss autoprefixer
78
-
79
- # Install new dependencies
80
- npm install @tailwindcss/vite tailwindcss@^4.0.0
81
- ```
82
-
83
- **Update vite.config.ts:**
84
- ```ts
85
- // Before (v0.4.15)
86
- import tailwindcss from '@tailwindcss/vite'
87
- export default defineConfig({
88
- plugins: [
89
- react(),
90
- tailwindcss({
91
- content: [
92
- './src/**/*.{js,ts,jsx,tsx}',
93
- './node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}'
94
- ]
95
- })
96
- ],
97
- })
98
-
99
- // After (v0.4.16+)
100
- import tailwindcss from '@tailwindcss/vite'
101
- export default defineConfig({
102
- plugins: [
103
- react(),
104
- tailwindcss({
105
- content: [
106
- './src/**/*.{js,ts,jsx,tsx}' // Only app files, pace-core scanned via @source
107
- ]
108
- })
109
- ],
110
- })
111
- ```
112
-
113
- **Update CSS imports:**
114
- ```tsx
115
- // Before
116
- import '@jmruthers/pace-core/src/styles/core.css';
117
-
118
- // After
119
- import '@jmruthers/pace-core/src/styles/core.css';
120
- ```
121
-
122
- ### Source Path Fix (v0.4.17+)
123
-
124
- **Critical fix for @source directive paths:**
125
-
126
- ```ts
127
- // vite.config.ts
128
- import tailwindcss from '@tailwindcss/vite'
129
- export default defineConfig({
130
- plugins: [
131
- react(),
132
- tailwindcss({
133
- content: [
134
- './src/**/*.{js,ts,jsx,tsx}',
135
- './node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
136
- ]
137
- })
138
- ],
139
- })
140
- ```
141
-
142
- ## 🔄 API Changes
143
-
144
- ### Component Props
145
-
146
- **Common prop changes:**
147
-
148
- ```tsx
149
- // Before (v0.x)
150
- <DataTable
151
- data={data}
152
- columns={columns}
153
- enableSearch={true}
154
- enablePagination={true}
155
- />
156
-
157
- // After (v1.x)
158
- <DataTable
159
- data={data}
160
- columns={columns}
161
- features={{
162
- search: true,
163
- pagination: true,
164
- sorting: true,
165
- filtering: true
166
- }}
167
- />
168
- ```
169
-
170
- ### Hook Changes
171
-
172
- **RBAC hooks moved to separate module:**
173
-
174
- ```tsx
175
- // Before
176
- import { useCan, usePermissions } from '@jmruthers/pace-core';
177
-
178
- // After
179
- import { useCan, usePermissions } from '@jmruthers/pace-core/rbac';
180
- ```
181
-
182
- ### Import Changes
183
-
184
- **Consolidated imports:**
185
-
186
- ```tsx
187
- // Before
188
- import { Button } from '@jmruthers/pace-core/components';
189
- import { useUnifiedAuth } from '@jmruthers/pace-core/hooks';
190
-
191
- // After
192
- import { Button, useUnifiedAuth } from '@jmruthers/pace-core';
193
- ```
194
-
195
- ## 🐛 Common Migration Issues
196
-
197
- ### Styling Issues
198
-
199
- **Problem**: Components appear unstyled after update
200
-
201
- **Solution**:
202
- ```tsx
203
- // Ensure CSS import is first
204
- import '@jmruthers/pace-core/src/styles/core.css';
205
- import { Button } from '@jmruthers/pace-core';
206
- ```
207
-
208
- ### Build Errors
209
-
210
- **Problem**: Build fails with Tailwind errors
211
-
212
- **Solution**:
213
- ```bash
214
- # Clear all caches
215
- rm -rf node_modules package-lock.json
216
- npm install
217
-
218
- # Check Tailwind config
219
- npm run build -- --debug
220
- ```
221
-
222
- ### TypeScript Errors
223
-
224
- **Problem**: Type errors after update
225
-
226
- **Solution**:
227
- ```bash
228
- # Update TypeScript types
229
- npm install @types/react@latest @types/react-dom@latest
230
-
231
- # Regenerate types
232
- npm run type-check
233
- ```
234
-
235
- ### Authentication Issues
236
-
237
- **Problem**: Login not working after update
238
-
239
- **Solution**:
240
- ```tsx
241
- // Check provider hierarchy
242
- <UnifiedAuthProvider supabaseClient={supabase} appName="my-app">
243
- <OrganisationProvider>
244
- <EventProvider>
245
- <YourApp />
246
- </EventProvider>
247
- </OrganisationProvider>
248
- </UnifiedAuthProvider>
249
- ```
250
-
251
- ## ✅ Post-Migration Testing
252
-
253
- ### Essential Tests
254
- - [ ] **Build succeeds** - `npm run build`
255
- - [ ] **App starts** - `npm run dev`
256
- - [ ] **Authentication works** - Login/logout
257
- - [ ] **Components render** - All UI components display
258
- - [ ] **Permissions work** - RBAC functions correctly
259
- - [ ] **Forms work** - Form validation and submission
260
- - [ ] **Data tables work** - CRUD operations
261
- - [ ] **Styling correct** - No visual regressions
262
-
263
- ### Performance Tests
264
- - [ ] **Bundle size** - Check for size increases
265
- - [ ] **Load time** - Measure initial load
266
- - [ ] **Runtime performance** - Check for slowdowns
267
- - [ ] **Memory usage** - Monitor for leaks
268
-
269
- ### Browser Tests
270
- - [ ] **Chrome** - Latest version
271
- - [ ] **Firefox** - Latest version
272
- - [ ] **Safari** - Latest version
273
- - [ ] **Mobile browsers** - iOS Safari, Chrome Mobile
274
-
275
- ## 🆘 Getting Help
276
-
277
- ### If Migration Fails
278
-
279
- 1. **Check the logs** - Look for specific error messages
280
- 2. **Revert changes** - Go back to working version
281
- 3. **Check documentation** - Look for migration guides
282
- 4. **Search issues** - Check GitHub issues
283
- 5. **Ask for help** - Create detailed issue report
284
-
285
- ### Debug Information
286
-
287
- When asking for help, include:
288
-
289
- ```bash
290
- # Version information
291
- npm list @jmruthers/pace-core
292
- node --version
293
- npm --version
294
-
295
- # Build output
296
- npm run build 2>&1 | tee build.log
297
-
298
- # Error details
299
- # Include full error messages and stack traces
300
- ```
301
-
302
- ### Emergency Rollback
303
-
304
- ```bash
305
- # Rollback to previous version
306
- npm install @jmruthers/pace-core@0.4.16
307
-
308
- # Or specific working version
309
- npm install @jmruthers/pace-core@0.4.15
310
-
311
- # Clear caches
312
- rm -rf node_modules package-lock.json
313
- npm install
314
- ```
315
-
316
- ## 📚 Additional Resources
317
-
318
- - **[Complete Migration Guide](./MIGRATION_GUIDE.md)** - Detailed migration instructions
319
- - **[Migration Overview](./README.md)** - Migration guide index
320
- - **[Troubleshooting](../troubleshooting/README.md)** - Common issues and solutions
321
- - **[GitHub Issues](https://github.com/jmruthers/pace-core/issues)** - Report bugs and get help
322
-
323
- ---
324
-
325
- **Remember**: Always test migrations in a development environment first!
326
-
327
- ## ♿ Accessibility
328
-
329
- Migration processes should maintain accessibility:
330
-
331
- - **Accessibility testing after migration** - Verify all components remain accessible after migration
332
- - **Screen reader compatibility** - Test with assistive technologies after migration
333
- - **Keyboard navigation** - Ensure keyboard navigation still works after migration
334
-
335
- ### Accessibility Best Practices
336
-
337
- 1. **Test accessibility after migration** - Run accessibility tests after each migration step
338
- 2. **Verify keyboard navigation** - Ensure all interactive elements remain keyboard accessible
339
- 3. **Test with screen readers** - Verify components work with assistive technologies
340
-
341
- ## ⚠️ Edge Cases
342
-
343
- ### Migration Failures
344
-
345
- When migrations fail:
346
- - Review error messages carefully
347
- - Check version compatibility
348
- - Verify all dependencies are updated
349
- - Test with minimal configuration
350
-
351
- ### Partial Migrations
352
-
353
- When only partial migration is possible:
354
- - Document what was migrated and what wasn't
355
- - Create remediation plan for remaining items
356
- - Test partially migrated code thoroughly
@@ -1,281 +0,0 @@
1
- ---
2
- lastUpdated: 2025-11-18T21:00:00+11:00
3
- version: 0.5.181
4
- reviewedBy: documentation-standards-audit
5
- ---
6
-
7
- # Provider Architecture: Service-Based Design
8
-
9
- ## Overview
10
-
11
- pace-core now uses a **service-based architecture** for all providers. This provides better testability, maintainability, and follows SOLID principles by separating business logic (services) from React context (providers).
12
-
13
- ## Architecture Benefits
14
-
15
- - **Separation of Concerns**: Business logic in pure TypeScript services
16
- - **Better Testability**: Services can be tested without React
17
- - **Improved Performance**: Services instantiated once and reused
18
- - **Type Safety**: Full TypeScript support with clear interfaces
19
-
20
- ## Quick Start
21
-
22
- ### Basic Usage
23
-
24
- ```tsx
25
- import { UnifiedAuthProvider, useUnifiedAuth } from '@jmruthers/pace-core';
26
-
27
- function App() {
28
- return (
29
- <UnifiedAuthProvider
30
- supabaseClient={supabase}
31
- appName="MY_APP"
32
- idleTimeoutMs={30 * 60 * 1000} // 30 minutes
33
- warnBeforeMs={60 * 1000} // 60 seconds
34
- onIdleLogout={() => {
35
- // Handle idle logout - redirect to login
36
- window.location.href = '/login';
37
- }}
38
- >
39
- <YourAppContent />
40
- </UnifiedAuthProvider>
41
- );
42
- }
43
- ```
44
-
45
- ### Using Hooks
46
-
47
- ```tsx
48
- import { useUnifiedAuth, useEvents, useOrganisations } from '@jmruthers/pace-core';
49
-
50
- function MyComponent() {
51
- const { user, isAuthenticated, signOut } = useUnifiedAuth();
52
- const { events, selectedEvent, setSelectedEvent } = useEvents();
53
- const { selectedOrganisation, organisations } = useOrganisations();
54
-
55
- // Use the hooks as needed
56
- }
57
- ```
58
-
59
- ## Service Architecture Overview
60
-
61
- ### Three-Layer Architecture
62
-
63
- The service architecture follows a clear three-layer pattern:
64
-
65
- 1. **Service Layer** (`src/services/`) - Pure TypeScript classes containing business logic
66
- - No React dependencies
67
- - Observable pattern for state changes
68
- - Easy to unit test
69
-
70
- 2. **Provider Layer** (`src/providers/services/`) - React context providers that create service instances
71
- - Creates and manages service instances (singleton pattern)
72
- - Provides services via React context
73
- - Handles service lifecycle
74
- - **Note**: Providers do NOT export hooks
75
-
76
- 3. **Hook Layer** (`src/hooks/services/`) - React hooks for reactive component integration
77
- - Access services from context
78
- - Subscribe to service state changes
79
- - Trigger React re-renders when state changes
80
- - **⚠️ Always import hooks from here, not from providers**
81
-
82
- ### Service Layer
83
-
84
- Each service is a pure TypeScript class:
85
-
86
- ```typescript
87
- class AuthService extends BaseService {
88
- signIn(email: string, password: string): Promise<AuthResult> { /* ... */ }
89
- signOut(): Promise<AuthResult> { /* ... */ }
90
- // ... other methods
91
- }
92
- ```
93
-
94
- ### Provider Layer
95
-
96
- Service providers create and manage service instances:
97
-
98
- ```tsx
99
- function AuthServiceProvider({ children, supabaseClient }) {
100
- const authService = useMemo(() => new AuthService(supabaseClient), [supabaseClient]);
101
- // Initialize and manage service lifecycle
102
- return <AuthServiceContext.Provider value={{ authService }}>{children}</AuthServiceContext.Provider>;
103
- }
104
- ```
105
-
106
- ### Hook Layer
107
-
108
- Convenience hooks provide easy access to services:
109
-
110
- ```tsx
111
- function useAuth() {
112
- const context = useContext(AuthServiceContext);
113
- return context.authService;
114
- }
115
- ```
116
-
117
- ## Available Hooks
118
-
119
- ### Unified Hook (Recommended for Most Use Cases)
120
-
121
- ```tsx
122
- import { useUnifiedAuth } from '@jmruthers/pace-core';
123
-
124
- function MyComponent() {
125
- const {
126
- user,
127
- isAuthenticated,
128
- signOut,
129
- selectedOrganisation,
130
- events,
131
- selectedEvent,
132
- permissions,
133
- hasRole,
134
- hasPermission
135
- } = useUnifiedAuth();
136
-
137
- // Access all features from one hook
138
- }
139
- ```
140
-
141
- ### Individual Service Hooks (For Performance)
142
-
143
- For better performance, use individual service hooks:
144
-
145
- ```tsx
146
- import {
147
- useEvents,
148
- useOrganisations,
149
- useAuthService,
150
- useEventService,
151
- useOrganisationService
152
- } from '@jmruthers/pace-core';
153
-
154
- function MyComponent() {
155
- const events = useEvents(); // Convenience hook
156
- const orgs = useOrganisations(); // Convenience hook
157
- const authService = useAuthService(); // Direct service hook
158
- const eventService = useEventService(); // Direct service hook
159
-
160
- // Only re-renders when relevant service state changes
161
- }
162
- ```
163
-
164
- **Important**: Service hooks (like `useAuthService`, `useEventService`) are exported from `hooks/services/` and include state subscription logic. Always import them from the main package or `hooks/services/`, never from `providers/services/`.
165
-
166
- ## Testing
167
-
168
- ### Testing Services
169
-
170
- Services are pure TypeScript classes, making them easy to unit test:
171
-
172
- ```typescript
173
- describe('AuthService', () => {
174
- let authService: AuthService;
175
-
176
- beforeEach(() => {
177
- authService = new AuthService(mockSupabase);
178
- });
179
-
180
- it('should sign in user', async () => {
181
- const result = await authService.signIn('test@example.com', 'password');
182
- expect(result.user).toBeDefined();
183
- });
184
- });
185
- ```
186
-
187
- ### Testing Providers
188
-
189
- Providers can be tested with React Testing Library:
190
-
191
- ```typescript
192
- render(
193
- <UnifiedAuthProvider
194
- supabaseClient={mockSupabase}
195
- appName="TEST_APP"
196
- idleTimeoutMs={30000}
197
- warnBeforeMs={5000}
198
- onIdleLogout={() => {}}
199
- >
200
- <TestComponent />
201
- </UnifiedAuthProvider>
202
- );
203
- ```
204
-
205
- ## Common Issues
206
-
207
- ### Missing Required Props
208
-
209
- **Error**: `Missing required prop: idleTimeoutMs`
210
-
211
- Add the required inactivity management props:
212
-
213
- ```tsx
214
- <UnifiedAuthProvider
215
- supabaseClient={supabase}
216
- appName="MY_APP"
217
- idleTimeoutMs={30 * 60 * 1000}
218
- warnBeforeMs={60 * 1000}
219
- onIdleLogout={() => window.location.href = '/login'}
220
- >
221
- <YourAppContent />
222
- </UnifiedAuthProvider>
223
- ```
224
-
225
- ## Performance Tips
226
-
227
- 1. **Use individual hooks** when you only need specific data
228
- 2. **Avoid unnecessary re-renders** by selecting only what you need
229
- 3. **Memoize expensive computations** in components
230
- 4. **Test services in isolation** for better unit tests
231
-
232
- ## Additional Resources
233
-
234
- - [API Reference](../../api-reference/providers.md)
235
- - [Architecture Documentation](../../architecture/services.md)
236
- - [Example Apps](../../getting-started/examples/)
237
-
238
- ## ♿ Accessibility
239
-
240
- Service architecture migration should maintain accessibility:
241
-
242
- - **Accessibility testing after migration** - Verify all components remain accessible after migration
243
- - **Screen reader compatibility** - Test with assistive technologies after migration
244
- - **Keyboard navigation** - Ensure keyboard navigation still works after migration
245
- - **Focus management** - Verify focus management is correct after migration
246
-
247
- ### Accessibility Best Practices
248
-
249
- 1. **Test accessibility after migration** - Run accessibility tests after each migration step
250
- 2. **Verify keyboard navigation** - Ensure all interactive elements remain keyboard accessible
251
- 3. **Test with screen readers** - Verify components work with assistive technologies
252
- 4. **Check focus indicators** - Ensure focus indicators are visible and correct
253
-
254
- ## ⚠️ Edge Cases
255
-
256
- ### Service Initialization Failures
257
-
258
- When services fail to initialize:
259
- - Verify all required props are provided
260
- - Check Supabase client is properly configured
261
- - Review service dependencies
262
- - Test with minimal configuration
263
- - Verify environment variables are set correctly
264
-
265
- ### Service Context Not Available
266
-
267
- When service context is not available:
268
- - Verify service provider is properly mounted
269
- - Check provider order and hierarchy
270
- - Review service provider composition
271
- - Test with service provider examples
272
- - Verify hooks are called within provider context
273
-
274
- ### Performance Issues After Migration
275
-
276
- When performance degrades after migration:
277
- - Check for unnecessary re-renders
278
- - Review service instance creation
279
- - Verify memoization is working correctly
280
- - Test with performance profiling tools
281
- - Consider using individual hooks instead of unified hook