@jmruthers/pace-core 0.5.76 → 0.5.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{RBACService-C4udt_Zp.d.ts → AuthService-Df3IozMG.d.ts} +10 -118
  3. package/dist/{DataTable-ntgmhO2W.d.ts → DataTable-BE0OXZKQ.d.ts} +9 -2
  4. package/dist/{DataTable-4GAVPIEG.js → DataTable-ETGVF4Y5.js} +50 -13
  5. package/dist/{PublicLoadingSpinner-BiNER8F5.d.ts → PublicLoadingSpinner-CnUaz0vG.d.ts} +5 -2
  6. package/dist/{UnifiedAuthProvider-Bj6YCf7c.d.ts → UnifiedAuthProvider-B391Aqum.d.ts} +42 -45
  7. package/dist/{UnifiedAuthProvider-3NKDOSOK.js → UnifiedAuthProvider-P5SOJAQ6.js} +4 -5
  8. package/dist/{api-DDMUKIUD.js → api-KG4A2X7P.js} +9 -3
  9. package/dist/{audit-6TOCAMKO.js → audit-65VNHEV2.js} +2 -2
  10. package/dist/{chunk-K34IM5CT.js → chunk-2OGV6IRV.js} +196 -626
  11. package/dist/chunk-2OGV6IRV.js.map +1 -0
  12. package/dist/{chunk-NTNILOBC.js → chunk-5BO3MI5Y.js} +4 -4
  13. package/dist/{chunk-XLZ7U46Z.js → chunk-CVMVPYAL.js} +9 -60
  14. package/dist/chunk-CVMVPYAL.js.map +1 -0
  15. package/dist/{chunk-URUTVZ7N.js → chunk-FL4ZCQLD.js} +2 -2
  16. package/dist/{chunk-LW7MMEAQ.js → chunk-FT2M4R4F.js} +2 -2
  17. package/dist/{chunk-5BSLGBYI.js → chunk-JCQZ6LA7.js} +2 -8
  18. package/dist/{chunk-5BSLGBYI.js.map → chunk-JCQZ6LA7.js.map} +1 -1
  19. package/dist/{chunk-KHJS6VIA.js → chunk-LRQ6RBJC.js} +157 -112
  20. package/dist/chunk-LRQ6RBJC.js.map +1 -0
  21. package/dist/{chunk-WN6XJWOS.js → chunk-MNJXXD6C.js} +274 -743
  22. package/dist/chunk-MNJXXD6C.js.map +1 -0
  23. package/dist/{chunk-KK73ZB4E.js → chunk-PTR5PMPE.js} +153 -132
  24. package/dist/chunk-PTR5PMPE.js.map +1 -0
  25. package/dist/{chunk-B2WTCLCV.js → chunk-Q7APDV6H.js} +18 -8
  26. package/dist/chunk-Q7APDV6H.js.map +1 -0
  27. package/dist/{chunk-A4FUBC7B.js → chunk-QGVSOUJ2.js} +2 -4
  28. package/dist/{chunk-A4FUBC7B.js.map → chunk-QGVSOUJ2.js.map} +1 -1
  29. package/dist/{chunk-FGMFQSHX.js → chunk-S63MFSY6.js} +500 -551
  30. package/dist/chunk-S63MFSY6.js.map +1 -0
  31. package/dist/{chunk-AFGTSUAD.js → chunk-VSOKOFRF.js} +4 -4
  32. package/dist/chunk-WUXCWRL6.js +20 -0
  33. package/dist/chunk-WUXCWRL6.js.map +1 -0
  34. package/dist/{chunk-Y6TXWPJO.js → chunk-YVVGHRGI.js} +105 -31
  35. package/dist/chunk-YVVGHRGI.js.map +1 -0
  36. package/dist/{chunk-M5IWZRBT.js → chunk-ZMNXIJP4.js} +2187 -981
  37. package/dist/chunk-ZMNXIJP4.js.map +1 -0
  38. package/dist/components.d.ts +6 -6
  39. package/dist/components.js +14 -18
  40. package/dist/components.js.map +1 -1
  41. package/dist/{database-C3Szpi5J.d.ts → database-BXAfr2Y_.d.ts} +18 -0
  42. package/dist/hooks.d.ts +5 -5
  43. package/dist/hooks.js +8 -9
  44. package/dist/hooks.js.map +1 -1
  45. package/dist/index.d.ts +19 -27
  46. package/dist/index.js +21 -29
  47. package/dist/index.js.map +1 -1
  48. package/dist/{organisation-BtshODVF.d.ts → organisation-D6qRDtbF.d.ts} +1 -1
  49. package/dist/providers.d.ts +7 -21
  50. package/dist/providers.js +3 -10
  51. package/dist/rbac/index.d.ts +71 -221
  52. package/dist/rbac/index.js +15 -16
  53. package/dist/{types-CGX9Vyf5.d.ts → types-BDg1mAGG.d.ts} +36 -6
  54. package/dist/types.d.ts +3 -3
  55. package/dist/types.js +61 -18
  56. package/dist/types.js.map +1 -1
  57. package/dist/{unified-CM7T0aTK.d.ts → unified-DQ4VcT7H.d.ts} +1 -1
  58. package/dist/{usePublicRouteParams-B-CumWRc.d.ts → usePublicRouteParams-BlgwXweB.d.ts} +3 -3
  59. package/dist/utils.d.ts +2 -2
  60. package/dist/utils.js +52 -9
  61. package/dist/utils.js.map +1 -1
  62. package/docs/CONTENT_AUDIT_REPORT.md +253 -0
  63. package/docs/DOCUMENTATION_AUDIT.md +172 -0
  64. package/docs/README.md +142 -147
  65. package/docs/STYLE_GUIDE.md +37 -0
  66. package/docs/api/classes/ColumnFactory.md +17 -17
  67. package/docs/api/classes/ErrorBoundary.md +1 -1
  68. package/docs/api/classes/InvalidScopeError.md +4 -4
  69. package/docs/api/classes/MissingUserContextError.md +4 -4
  70. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  71. package/docs/api/classes/PermissionDeniedError.md +5 -5
  72. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  73. package/docs/api/classes/RBACAuditManager.md +8 -8
  74. package/docs/api/classes/RBACCache.md +35 -5
  75. package/docs/api/classes/RBACEngine.md +49 -20
  76. package/docs/api/classes/RBACError.md +4 -4
  77. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  78. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  79. package/docs/api/classes/StorageUtils.md +1 -1
  80. package/docs/api/enums/FileCategory.md +1 -1
  81. package/docs/api/interfaces/AggregateConfig.md +4 -4
  82. package/docs/api/interfaces/ButtonProps.md +1 -1
  83. package/docs/api/interfaces/CardProps.md +1 -1
  84. package/docs/api/interfaces/ColorPalette.md +1 -1
  85. package/docs/api/interfaces/ColorShade.md +1 -1
  86. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  87. package/docs/api/interfaces/DataRecord.md +11 -0
  88. package/docs/api/interfaces/DataTableAction.md +65 -29
  89. package/docs/api/interfaces/DataTableColumn.md +36 -23
  90. package/docs/api/interfaces/DataTableProps.md +80 -38
  91. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  92. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  93. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  94. package/docs/api/interfaces/EventLogoProps.md +1 -1
  95. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  96. package/docs/api/interfaces/FileMetadata.md +1 -1
  97. package/docs/api/interfaces/FileReference.md +1 -1
  98. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  99. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  100. package/docs/api/interfaces/FileUploadProps.md +1 -1
  101. package/docs/api/interfaces/FooterProps.md +1 -1
  102. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  103. package/docs/api/interfaces/InputProps.md +1 -1
  104. package/docs/api/interfaces/LabelProps.md +1 -1
  105. package/docs/api/interfaces/LoginFormProps.md +1 -1
  106. package/docs/api/interfaces/NavigationAccessRecord.md +11 -11
  107. package/docs/api/interfaces/NavigationContextType.md +9 -9
  108. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  109. package/docs/api/interfaces/NavigationItem.md +1 -1
  110. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  111. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  112. package/docs/api/interfaces/Organisation.md +1 -1
  113. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  114. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  115. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  116. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  117. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  118. package/docs/api/interfaces/PaceLoginPageProps.md +16 -3
  119. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  120. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  121. package/docs/api/interfaces/PagePermissionGuardProps.md +2 -2
  122. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  123. package/docs/api/interfaces/PaletteData.md +1 -1
  124. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  125. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  126. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  127. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  128. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  129. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  130. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  131. package/docs/api/interfaces/RBACConfig.md +1 -1
  132. package/docs/api/interfaces/RBACLogger.md +1 -1
  133. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  134. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  135. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  136. package/docs/api/interfaces/RouteConfig.md +2 -2
  137. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  138. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  139. package/docs/api/interfaces/StorageConfig.md +1 -1
  140. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  141. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  142. package/docs/api/interfaces/StorageListOptions.md +1 -1
  143. package/docs/api/interfaces/StorageListResult.md +1 -1
  144. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  145. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  146. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  147. package/docs/api/interfaces/StyleImport.md +1 -1
  148. package/docs/api/interfaces/SwitchProps.md +1 -1
  149. package/docs/api/interfaces/ToastActionElement.md +1 -1
  150. package/docs/api/interfaces/ToastProps.md +1 -1
  151. package/docs/api/interfaces/UnifiedAuthContextType.md +94 -521
  152. package/docs/api/interfaces/UnifiedAuthProviderProps.md +16 -16
  153. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  154. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  155. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  156. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  157. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  158. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  159. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  160. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  161. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  162. package/docs/api/interfaces/UserEventAccess.md +11 -11
  163. package/docs/api/interfaces/UserMenuProps.md +1 -1
  164. package/docs/api/interfaces/UserProfile.md +1 -1
  165. package/docs/api/modules.md +251 -269
  166. package/docs/api-reference/components.md +193 -0
  167. package/docs/api-reference/hooks.md +265 -0
  168. package/docs/api-reference/providers.md +6 -0
  169. package/docs/api-reference/types.md +6 -0
  170. package/docs/api-reference/utilities.md +207 -0
  171. package/docs/architecture/README.md +6 -0
  172. package/docs/{database-schema-requirements.md → architecture/database-schema-requirements.md} +6 -0
  173. package/docs/architecture/rbac-security-architecture.md +258 -0
  174. package/docs/architecture/services.md +9 -1
  175. package/docs/best-practices/README.md +6 -0
  176. package/docs/best-practices/accessibility.md +6 -0
  177. package/docs/{common-patterns.md → best-practices/common-patterns.md} +6 -0
  178. package/docs/best-practices/deployment.md +6 -0
  179. package/docs/best-practices/performance.md +475 -2
  180. package/docs/best-practices/security.md +6 -0
  181. package/docs/best-practices/testing.md +6 -0
  182. package/docs/core-concepts/authentication.md +6 -0
  183. package/docs/core-concepts/events.md +6 -0
  184. package/docs/core-concepts/organisations.md +6 -0
  185. package/docs/core-concepts/permissions.md +6 -0
  186. package/docs/core-concepts/rbac-system.md +8 -0
  187. package/docs/documentation-index.md +121 -182
  188. package/docs/{consuming-app-vite-config.md → getting-started/consuming-app-vite-config.md} +6 -0
  189. package/docs/getting-started/documentation-index.md +40 -0
  190. package/docs/getting-started/examples/README.md +878 -35
  191. package/docs/{faq.md → getting-started/faq.md} +7 -1
  192. package/docs/getting-started/installation-guide.md +6 -0
  193. package/docs/{quick-reference.md → getting-started/quick-reference.md} +6 -0
  194. package/docs/implementation-guides/app-layout.md +6 -0
  195. package/docs/implementation-guides/authentication.md +1021 -0
  196. package/docs/implementation-guides/component-styling.md +6 -0
  197. package/docs/implementation-guides/data-tables.md +1264 -2076
  198. package/docs/implementation-guides/dynamic-colors.md +6 -0
  199. package/docs/implementation-guides/event-theming-summary.md +6 -0
  200. package/docs/{file-reference-system.md → implementation-guides/file-reference-system.md} +6 -0
  201. package/docs/implementation-guides/file-upload-storage.md +6 -0
  202. package/docs/implementation-guides/forms.md +6 -0
  203. package/docs/implementation-guides/inactivity-tracking.md +6 -0
  204. package/docs/implementation-guides/navigation.md +6 -0
  205. package/docs/implementation-guides/organisation-security.md +6 -0
  206. package/docs/implementation-guides/permission-enforcement.md +6 -0
  207. package/docs/implementation-guides/public-pages-advanced.md +6 -0
  208. package/docs/implementation-guides/public-pages.md +6 -0
  209. package/docs/migration/MIGRATION_GUIDE.md +827 -351
  210. package/docs/migration/README.md +7 -1
  211. package/docs/migration/organisation-context-timing-fix.md +6 -0
  212. package/docs/migration/rbac-migration.md +44 -1
  213. package/docs/migration/service-architecture.md +6 -0
  214. package/docs/migration/v0.4.15-tailwind-scanning.md +6 -0
  215. package/docs/migration/v0.4.16-css-first-approach.md +6 -0
  216. package/docs/migration/v0.4.17-source-path-fix.md +6 -0
  217. package/docs/rbac/README-rbac-rls-integration.md +6 -0
  218. package/docs/rbac/README.md +6 -0
  219. package/docs/rbac/advanced-patterns.md +6 -0
  220. package/docs/rbac/api-reference.md +7 -1
  221. package/docs/rbac/breaking-changes-v3.md +222 -0
  222. package/docs/rbac/examples/rbac-rls-integration-example.md +6 -0
  223. package/docs/rbac/examples.md +6 -0
  224. package/docs/rbac/getting-started.md +6 -0
  225. package/docs/rbac/migration-guide.md +260 -0
  226. package/docs/rbac/quick-start.md +70 -13
  227. package/docs/rbac/rbac-rls-integration.md +6 -0
  228. package/docs/rbac/super-admin-guide.md +6 -0
  229. package/docs/rbac/troubleshooting.md +6 -0
  230. package/docs/security/README.md +6 -0
  231. package/docs/security/checklist.md +6 -0
  232. package/docs/styles/README.md +7 -1
  233. package/docs/{usage.md → styles/usage.md} +6 -0
  234. package/docs/testing/README.md +6 -0
  235. package/docs/{visual-testing.md → testing/visual-testing.md} +6 -0
  236. package/docs/troubleshooting/README.md +387 -5
  237. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +6 -0
  238. package/docs/troubleshooting/common-issues.md +6 -0
  239. package/docs/troubleshooting/database-view-compatibility.md +6 -0
  240. package/docs/troubleshooting/organisation-context-setup.md +6 -0
  241. package/docs/troubleshooting/react-hooks-issue-analysis.md +6 -0
  242. package/docs/troubleshooting/styling-issues.md +6 -0
  243. package/docs/troubleshooting/tailwind-content-scanning.md +6 -0
  244. package/package.json +1 -1
  245. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -1
  246. package/src/__tests__/helpers/test-providers.tsx +3 -53
  247. package/src/components/DataTable/DataTable.test.tsx +319 -0
  248. package/src/components/DataTable/DataTable.tsx +32 -11
  249. package/src/components/DataTable/__tests__/{DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx.skip} +6 -4
  250. package/src/components/DataTable/__tests__/{DataTable.test.tsx → DataTable.test.tsx.skip} +6 -4
  251. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +31 -9
  252. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +601 -0
  253. package/src/components/DataTable/__tests__/keyboard.test.tsx +615 -0
  254. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +639 -0
  255. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx.skip +330 -0
  256. package/src/components/DataTable/components/AccessDeniedPage.tsx +2 -2
  257. package/src/components/DataTable/components/ActionButtons.tsx +88 -104
  258. package/src/components/DataTable/components/DataTableCore.tsx +309 -337
  259. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +4 -2
  260. package/src/components/DataTable/components/DataTableModals.tsx +22 -1
  261. package/src/components/DataTable/components/EditableRow.tsx +69 -84
  262. package/src/components/DataTable/components/EmptyState.tsx +5 -1
  263. package/src/components/DataTable/components/ImportModal.tsx +65 -36
  264. package/src/components/DataTable/components/PaginationControls.tsx +40 -100
  265. package/src/components/DataTable/components/UnifiedTableBody.tsx +125 -148
  266. package/src/components/DataTable/context/DataTableContext.tsx +1 -1
  267. package/src/components/DataTable/core/ColumnFactory.ts +5 -0
  268. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +12 -10
  269. package/src/components/DataTable/examples/HierarchicalExample.tsx +1 -1
  270. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +1 -0
  271. package/src/components/DataTable/examples/PerformanceExample.tsx +1 -0
  272. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +1 -5
  273. package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +167 -0
  274. package/src/components/DataTable/hooks/index.ts +7 -0
  275. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +32 -15
  276. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +102 -0
  277. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +89 -0
  278. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +117 -0
  279. package/src/components/DataTable/hooks/useDataTablePermissions.ts +71 -27
  280. package/src/components/DataTable/hooks/useDataTableState.ts +39 -11
  281. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +33 -0
  282. package/src/components/DataTable/hooks/useHierarchicalState.ts +15 -1
  283. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +447 -0
  284. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +94 -0
  285. package/src/components/DataTable/hooks/useTableColumns.ts +10 -7
  286. package/src/components/DataTable/hooks/useTableHandlers.ts +174 -0
  287. package/src/components/DataTable/index.ts +12 -3
  288. package/src/components/DataTable/types.ts +129 -9
  289. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +159 -22
  290. package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +111 -0
  291. package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +15 -29
  292. package/src/components/DataTable/utils/a11yUtils.ts +244 -0
  293. package/src/components/DataTable/utils/debugTools.ts +609 -0
  294. package/src/components/DataTable/utils/exportUtils.ts +114 -16
  295. package/src/components/DataTable/utils/flexibleImport.ts +202 -32
  296. package/src/components/DataTable/utils/hierarchicalUtils.ts +1 -1
  297. package/src/components/DataTable/utils/index.ts +2 -0
  298. package/src/components/DataTable/utils/paginationUtils.ts +350 -0
  299. package/src/components/DataTable/utils/rowUtils.ts +6 -5
  300. package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -24
  301. package/src/components/NavigationMenu/NavigationMenu.tsx +19 -8
  302. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +1 -23
  303. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +56 -6
  304. package/src/components/PaceLoginPage/PaceLoginPage.tsx +137 -13
  305. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +1 -1
  306. package/src/components/Select/Select.tsx +1 -0
  307. package/src/components/examples/PermissionExample.tsx +173 -0
  308. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  309. package/src/examples/PublicEventPage.tsx +274 -0
  310. package/src/examples/PublicPageApp.tsx +308 -0
  311. package/src/examples/PublicPageUsageExample.tsx +216 -0
  312. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +12 -1
  313. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +129 -17
  314. package/src/hooks/__tests__/useRBAC.unit.test.ts +151 -846
  315. package/src/hooks/useOrganisationPermissions.test.ts +42 -18
  316. package/src/hooks/useOrganisationPermissions.ts +12 -6
  317. package/src/hooks/useOrganisationSecurity.test.ts +138 -85
  318. package/src/hooks/useOrganisationSecurity.ts +41 -10
  319. package/src/index.ts +0 -1
  320. package/src/providers/AuthProvider.simplified.tsx +880 -0
  321. package/src/providers/UnifiedAuthProvider.test.simple.tsx +8 -8
  322. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +29 -19
  323. package/src/providers/index.ts +0 -1
  324. package/src/providers/services/EventServiceProvider.tsx +19 -15
  325. package/src/providers/services/InactivityServiceProvider.tsx +19 -15
  326. package/src/providers/services/OrganisationServiceProvider.tsx +19 -15
  327. package/src/providers/services/UnifiedAuthProvider.tsx +156 -127
  328. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +1 -1
  329. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -3
  330. package/src/rbac/README.md +1 -1
  331. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +25 -27
  332. package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +313 -0
  333. package/src/rbac/__tests__/engine.comprehensive.test.ts +114 -348
  334. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +28 -110
  335. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +33 -85
  336. package/src/rbac/__tests__/scenarios.user-role.test.tsx +2 -2
  337. package/src/rbac/adapters.tsx +26 -69
  338. package/src/rbac/api.test.ts +90 -27
  339. package/src/rbac/api.ts +61 -10
  340. package/src/rbac/audit.test.ts +33 -38
  341. package/src/rbac/audit.ts +21 -6
  342. package/src/rbac/cache.ts +33 -1
  343. package/src/rbac/components/NavigationGuard.tsx +11 -11
  344. package/src/rbac/components/NavigationProvider.test.tsx +11 -5
  345. package/src/rbac/components/NavigationProvider.tsx +37 -13
  346. package/src/rbac/components/PagePermissionGuard.tsx +111 -50
  347. package/src/rbac/components/PagePermissionProvider.tsx +5 -5
  348. package/src/rbac/components/PermissionEnforcer.tsx +11 -11
  349. package/src/rbac/components/RoleBasedRouter.tsx +5 -5
  350. package/src/rbac/components/SecureDataProvider.tsx +5 -5
  351. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +8 -8
  352. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +14 -14
  353. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +12 -12
  354. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +6 -6
  355. package/src/rbac/engine.test.simple.ts +19 -13
  356. package/src/rbac/engine.test.ts +1 -0
  357. package/src/rbac/engine.ts +330 -766
  358. package/src/rbac/errors.ts +156 -0
  359. package/src/rbac/hooks/usePermissions.ts +32 -10
  360. package/src/rbac/hooks/useRBAC.test.ts +126 -512
  361. package/src/rbac/hooks/useRBAC.ts +147 -193
  362. package/src/rbac/hooks/useResolvedScope.ts +12 -0
  363. package/src/rbac/index.ts +7 -4
  364. package/src/rbac/security.ts +109 -18
  365. package/src/rbac/types.ts +12 -1
  366. package/src/services/AuthService.ts +2 -15
  367. package/src/services/EventService.ts +43 -46
  368. package/src/services/OrganisationService.ts +51 -31
  369. package/src/services/__tests__/AuthService.test.ts +1 -1
  370. package/src/services/__tests__/EventService.test.ts +1 -1
  371. package/src/services/__tests__/OrganisationService.test.ts +1 -1
  372. package/src/services/base/BaseService.ts +8 -0
  373. package/src/styles/base.css +208 -0
  374. package/src/styles/semantic.css +24 -0
  375. package/src/types/database.generated.ts +7347 -0
  376. package/src/types/database.ts +20 -0
  377. package/src/utils/logger.ts +179 -0
  378. package/src/utils/organisationContext.ts +11 -4
  379. package/src/utils/storage/__tests__/helpers.unit.test.ts +6 -2
  380. package/dist/appNameResolver-UURKN7NF.js +0 -22
  381. package/dist/audit-6TOCAMKO.js.map +0 -1
  382. package/dist/chunk-B2WTCLCV.js.map +0 -1
  383. package/dist/chunk-FGMFQSHX.js.map +0 -1
  384. package/dist/chunk-K34IM5CT.js.map +0 -1
  385. package/dist/chunk-KHJS6VIA.js.map +0 -1
  386. package/dist/chunk-KK73ZB4E.js.map +0 -1
  387. package/dist/chunk-M5IWZRBT.js.map +0 -1
  388. package/dist/chunk-ULBI5JGB.js +0 -109
  389. package/dist/chunk-ULBI5JGB.js.map +0 -1
  390. package/dist/chunk-WN6XJWOS.js.map +0 -1
  391. package/dist/chunk-XLZ7U46Z.js.map +0 -1
  392. package/dist/chunk-Y6TXWPJO.js.map +0 -1
  393. package/docs/DOCUMENTATION_CHECKLIST.md +0 -281
  394. package/docs/TERMINOLOGY.md +0 -231
  395. package/docs/api/interfaces/RBACContextType.md +0 -468
  396. package/docs/api/interfaces/RBACProviderProps.md +0 -107
  397. package/docs/best-practices/performance-expansion.md +0 -473
  398. package/docs/breaking-changes.md +0 -179
  399. package/docs/consuming-app-example.md +0 -290
  400. package/docs/documentation-templates.md +0 -539
  401. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  402. package/docs/getting-started/examples/basic-auth-app.md +0 -520
  403. package/docs/getting-started/examples/full-featured-app.md +0 -616
  404. package/docs/getting-started/quick-start.md +0 -376
  405. package/docs/implementation-guides/datatable-filtering.md +0 -313
  406. package/docs/implementation-guides/datatable-rbac-usage.md +0 -317
  407. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  408. package/docs/implementation-guides/large-datasets.md +0 -281
  409. package/docs/implementation-guides/performance.md +0 -403
  410. package/docs/migration/quick-migration-guide.md +0 -320
  411. package/docs/migration-guide.md +0 -193
  412. package/docs/migration-guides/unified-auth-provider-mandatory-timeouts.md +0 -226
  413. package/docs/performance/README.md +0 -551
  414. package/docs/style-guide.md +0 -964
  415. package/docs/troubleshooting/authentication-issues.md +0 -334
  416. package/docs/troubleshooting/debugging.md +0 -1117
  417. package/docs/troubleshooting/migration.md +0 -918
  418. package/src/__tests__/hooks/usePermissions.test.ts +0 -261
  419. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +0 -574
  420. package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -613
  421. package/src/hooks/services/__tests__/useServiceHooks.test.tsx +0 -137
  422. package/src/hooks/services/usePermissions.ts +0 -70
  423. package/src/hooks/services/useRBACService.ts +0 -30
  424. package/src/hooks/usePermissionCheck.ts +0 -150
  425. package/src/providers/__tests__/ServiceProviders.test.tsx +0 -477
  426. package/src/providers/services/RBACServiceProvider.tsx +0 -79
  427. package/src/rbac/__tests__/integration.authflow.test.tsx +0 -119
  428. package/src/rbac/__tests__/integration.navigation.test.tsx +0 -69
  429. package/src/rbac/__tests__/integration.securedata.test.tsx +0 -92
  430. package/src/rbac/__tests__/integration.smoke.test.tsx +0 -73
  431. package/src/rbac/providers/RBACProvider.tsx +0 -645
  432. package/src/rbac/providers/__tests__/RBACProvider.integration.test.tsx +0 -688
  433. package/src/rbac/providers/__tests__/RBACProvider.test.tsx +0 -1186
  434. package/src/rbac/providers/index.ts +0 -11
  435. package/src/services/RBACService.ts +0 -522
  436. package/src/services/__tests__/RBACService.test.ts +0 -492
  437. package/src/services/interfaces/IRBACService.ts +0 -62
  438. package/src/utils/appNameResolver.test 2.ts +0 -494
  439. /package/dist/{DataTable-4GAVPIEG.js.map → DataTable-ETGVF4Y5.js.map} +0 -0
  440. /package/dist/{UnifiedAuthProvider-3NKDOSOK.js.map → UnifiedAuthProvider-P5SOJAQ6.js.map} +0 -0
  441. /package/dist/{api-DDMUKIUD.js.map → api-KG4A2X7P.js.map} +0 -0
  442. /package/dist/{appNameResolver-UURKN7NF.js.map → audit-65VNHEV2.js.map} +0 -0
  443. /package/dist/{chunk-NTNILOBC.js.map → chunk-5BO3MI5Y.js.map} +0 -0
  444. /package/dist/{chunk-URUTVZ7N.js.map → chunk-FL4ZCQLD.js.map} +0 -0
  445. /package/dist/{chunk-LW7MMEAQ.js.map → chunk-FT2M4R4F.js.map} +0 -0
  446. /package/dist/{chunk-AFGTSUAD.js.map → chunk-VSOKOFRF.js.map} +0 -0
  447. /package/docs/{app.css.example → styles/app.css.example} +0 -0
@@ -1,3 +1,9 @@
1
+ ---
2
+ lastUpdated: 2025-10-29T22:43:00+11:00
3
+ version: 0.5.76
4
+ reviewedBy: content-audit
5
+ ---
6
+
1
7
  # Components API Reference
2
8
 
3
9
  > **📚 Complete API Reference** | [← Back to Documentation](../README.md) | [↑ Table of Contents](#table-of-contents)
@@ -1572,6 +1578,193 @@ All components include:
1572
1578
 
1573
1579
  For more information about testing components, see the [Testing Guide](../best-practices/testing.md).
1574
1580
 
1581
+ ## Avatar
1582
+
1583
+ Display user profile pictures with fallback initials or icons.
1584
+
1585
+ ### Props
1586
+
1587
+ ```typescript
1588
+ interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
1589
+ className?: string;
1590
+ }
1591
+
1592
+ interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
1593
+ src?: string;
1594
+ alt?: string;
1595
+ className?: string;
1596
+ }
1597
+
1598
+ interface AvatarFallbackProps extends React.HTMLAttributes<HTMLDivElement> {
1599
+ className?: string;
1600
+ }
1601
+ ```
1602
+
1603
+ ### Usage
1604
+
1605
+ ```tsx
1606
+ import { Avatar, AvatarImage, AvatarFallback } from '@jmruthers/pace-core';
1607
+
1608
+ // User avatar
1609
+ <Avatar>
1610
+ <AvatarImage src="/user.jpg" alt="User" />
1611
+ <AvatarFallback>JD</AvatarFallback>
1612
+ </Avatar>
1613
+
1614
+ // Avatar without image
1615
+ <Avatar>
1616
+ <AvatarFallback>AB</AvatarFallback>
1617
+ </Avatar>
1618
+ ```
1619
+
1620
+ ### Features
1621
+
1622
+ - Automatic fallback to initials or icon
1623
+ - Responsive sizing
1624
+ - Accessible ARIA attributes
1625
+ - Integration with user profiles
1626
+
1627
+ ---
1628
+
1629
+ ## Switch
1630
+
1631
+ Toggle switch component for boolean controls.
1632
+
1633
+ ### Props
1634
+
1635
+ ```typescript
1636
+ interface SwitchProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
1637
+ checked?: boolean;
1638
+ defaultChecked?: boolean;
1639
+ onCheckedChange?: (checked: boolean) => void;
1640
+ disabled?: boolean;
1641
+ className?: string;
1642
+ }
1643
+ ```
1644
+
1645
+ ### Usage
1646
+
1647
+ ```tsx
1648
+ import { Switch } from '@jmruthers/pace-core';
1649
+
1650
+ // Controlled switch
1651
+ <Switch checked={isEnabled} onCheckedChange={setIsEnabled} />
1652
+
1653
+ // Uncontrolled switch
1654
+ <Switch defaultChecked={true} />
1655
+
1656
+ // Disabled switch
1657
+ <Switch disabled={true} />
1658
+ ```
1659
+
1660
+ ### Features
1661
+
1662
+ - Keyboard accessible
1663
+ - Mouse and touch support
1664
+ - Customizable styling
1665
+ - Screen reader friendly
1666
+
1667
+ ---
1668
+
1669
+ ## Progress
1670
+
1671
+ Progress indicator for loading states and task completion.
1672
+
1673
+ ### Props
1674
+
1675
+ ```typescript
1676
+ interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {
1677
+ value?: number;
1678
+ max?: number;
1679
+ className?: string;
1680
+ }
1681
+ ```
1682
+
1683
+ ### Usage
1684
+
1685
+ ```tsx
1686
+ import { Progress } from '@jmruthers/pace-core';
1687
+
1688
+ // Progress bar
1689
+ <Progress value={60} max={100} />
1690
+
1691
+ // Indeterminate progress (no value)
1692
+ <Progress />
1693
+ ```
1694
+
1695
+ ### Features
1696
+
1697
+ - Determinate and indeterminate modes
1698
+ - Accessible progress announcements
1699
+ - Customizable appearance
1700
+ - Smooth animations
1701
+
1702
+ ---
1703
+
1704
+ ## Table (Basic)
1705
+
1706
+ Semantic HTML table components for data display.
1707
+
1708
+ ### Props
1709
+
1710
+ ```typescript
1711
+ interface TableProps extends React.HTMLAttributes<HTMLTableElement> {
1712
+ className?: string;
1713
+ }
1714
+ ```
1715
+
1716
+ ### Components
1717
+
1718
+ ```typescript
1719
+ Table // Root table element
1720
+ TableHeader // Table header section
1721
+ TableBody // Table body section
1722
+ TableFooter // Table footer section
1723
+ TableHead // Header cell
1724
+ TableCell // Data cell
1725
+ TableRow // Table row
1726
+ TableCaption // Table caption
1727
+ ```
1728
+
1729
+ ### Usage
1730
+
1731
+ ```tsx
1732
+ import {
1733
+ Table,
1734
+ TableHeader,
1735
+ TableBody,
1736
+ TableHead,
1737
+ TableRow,
1738
+ TableCell,
1739
+ TableCaption
1740
+ } from '@jmruthers/pace-core';
1741
+
1742
+ <Table>
1743
+ <TableCaption>Monthly Sales Report</TableCaption>
1744
+ <TableHeader>
1745
+ <TableRow>
1746
+ <TableHead>Month</TableHead>
1747
+ <TableHead>Sales</TableHead>
1748
+ </TableRow>
1749
+ </TableHeader>
1750
+ <TableBody>
1751
+ <TableRow>
1752
+ <TableCell>January</TableCell>
1753
+ <TableCell>$10,000</TableCell>
1754
+ </TableRow>
1755
+ </TableBody>
1756
+ </Table>
1757
+ ```
1758
+
1759
+ ### Features
1760
+
1761
+ - Semantic HTML structure
1762
+ - Accessible table markup
1763
+ - Customizable styling
1764
+ - Responsive design support
1765
+
1766
+ ---
1767
+
1575
1768
  ## 🔗 Related Documentation
1576
1769
 
1577
1770
  ### Component Usage
@@ -1,3 +1,9 @@
1
+ ---
2
+ lastUpdated: 2025-10-29T22:43:00+11:00
3
+ version: 0.5.76
4
+ reviewedBy: content-audit
5
+ ---
6
+
1
7
  # Hooks API Reference
2
8
 
3
9
  > **🔗 React Hooks Reference** | [← Back to Documentation](../README.md) | [↑ Table of Contents](#table-of-contents)
@@ -961,6 +967,265 @@ function AppSettings() {
961
967
  }
962
968
  ```
963
969
 
970
+ ---
971
+
972
+ ## UI Interaction Hooks
973
+
974
+ ### useFocusManagement
975
+
976
+ Manage focus within a container for accessibility.
977
+
978
+ ```typescript
979
+ interface FocusManagementOptions {
980
+ trapFocus?: boolean;
981
+ autoFocus?: boolean;
982
+ restoreFocus?: boolean;
983
+ onEscape?: () => void;
984
+ onFocusFirst?: () => void;
985
+ onFocusLast?: () => void;
986
+ }
987
+
988
+ function useFocusManagement(options?: FocusManagementOptions): FocusManagementReturn;
989
+ ```
990
+
991
+ **Usage:**
992
+ ```tsx
993
+ import { useFocusManagement } from '@jmruthers/pace-core';
994
+
995
+ function Modal({ children, onClose }) {
996
+ const { containerRef, focusFirst, handleEscape } = useFocusManagement({
997
+ autoFocus: true,
998
+ restoreFocus: true,
999
+ onEscape: onClose
1000
+ });
1001
+
1002
+ return (
1003
+ <div ref={containerRef}>
1004
+ {children}
1005
+ </div>
1006
+ );
1007
+ }
1008
+ ```
1009
+
1010
+ ### useFocusTrap
1011
+
1012
+ Create accessible focus traps for modals and overlays.
1013
+
1014
+ ```typescript
1015
+ interface FocusTrapOptions {
1016
+ isActive?: boolean;
1017
+ autoFocus?: boolean;
1018
+ restoreFocus?: boolean;
1019
+ onEscape?: () => void;
1020
+ focusableSelector?: string;
1021
+ }
1022
+
1023
+ function useFocusTrap(options?: FocusTrapOptions): FocusTrapReturn;
1024
+ ```
1025
+
1026
+ **Usage:**
1027
+ ```tsx
1028
+ import { useFocusTrap } from '@jmruthers/pace-core';
1029
+
1030
+ function Dialog({ isOpen, children, onClose }) {
1031
+ const { containerRef, focusFirst } = useFocusTrap({
1032
+ isActive: isOpen,
1033
+ autoFocus: true,
1034
+ restoreFocus: true,
1035
+ onEscape: onClose
1036
+ });
1037
+
1038
+ if (!isOpen) return null;
1039
+
1040
+ return (
1041
+ <div ref={containerRef}>
1042
+ {children}
1043
+ </div>
1044
+ );
1045
+ }
1046
+ ```
1047
+
1048
+ ### useKeyboardShortcuts
1049
+
1050
+ Register keyboard shortcuts with support for modifiers.
1051
+
1052
+ ```typescript
1053
+ interface KeyboardShortcut {
1054
+ key: string;
1055
+ handler: (event: KeyboardEvent) => void;
1056
+ description?: string;
1057
+ enabled?: boolean;
1058
+ preventDefault?: boolean;
1059
+ stopPropagation?: boolean;
1060
+ }
1061
+
1062
+ function useKeyboardShortcuts(
1063
+ shortcuts: KeyboardShortcut[],
1064
+ options?: KeyboardShortcutsOptions
1065
+ ): void;
1066
+ ```
1067
+
1068
+ **Usage:**
1069
+ ```tsx
1070
+ import { useKeyboardShortcuts } from '@jmruthers/pace-core';
1071
+
1072
+ function Editor({ onSave, onCancel }) {
1073
+ useKeyboardShortcuts([
1074
+ { key: 'ctrl+s', handler: onSave, description: 'Save file' },
1075
+ { key: 'Escape', handler: onCancel, description: 'Cancel editing' },
1076
+ { key: 'ctrl+a', handler: () => selectAll(), description: 'Select all' }
1077
+ ]);
1078
+
1079
+ return <textarea />;
1080
+ }
1081
+ ```
1082
+
1083
+ ### useIsMobile
1084
+
1085
+ Detect mobile device for responsive behavior.
1086
+
1087
+ ```typescript
1088
+ function useIsMobile(): boolean;
1089
+ ```
1090
+
1091
+ **Usage:**
1092
+ ```tsx
1093
+ import { useIsMobile } from '@jmruthers/pace-core';
1094
+
1095
+ function ResponsiveLayout({ children }) {
1096
+ const isMobile = useIsMobile();
1097
+
1098
+ return (
1099
+ <div className={isMobile ? 'mobile' : 'desktop'}>
1100
+ {children}
1101
+ </div>
1102
+ );
1103
+ }
1104
+ ```
1105
+
1106
+ ### useDebounce
1107
+
1108
+ Debounce values for delayed updates.
1109
+
1110
+ ```typescript
1111
+ function useDebounce<T>(value: T, delay: number): T;
1112
+ ```
1113
+
1114
+ **Usage:**
1115
+ ```tsx
1116
+ import { useDebounce } from '@jmruthers/pace-core';
1117
+
1118
+ function SearchBox() {
1119
+ const [searchTerm, setSearchTerm] = useState('');
1120
+ const debouncedSearchTerm = useDebounce(searchTerm, 500);
1121
+
1122
+ useEffect(() => {
1123
+ if (debouncedSearchTerm) {
1124
+ performSearch(debouncedSearchTerm);
1125
+ }
1126
+ }, [debouncedSearchTerm]);
1127
+
1128
+ return <input value={searchTerm} onChange={e => setSearchTerm(e.target.value)} />;
1129
+ }
1130
+ ```
1131
+
1132
+ ### useZodForm
1133
+
1134
+ Create forms with Zod validation.
1135
+
1136
+ ```typescript
1137
+ function useZodForm<TData>(schema: ZodSchema<TData>): FormReturn<TData>;
1138
+ ```
1139
+
1140
+ **Usage:**
1141
+ ```tsx
1142
+ import { useZodForm } from '@jmruthers/pace-core';
1143
+ import { z } from 'zod';
1144
+
1145
+ const userSchema = z.object({
1146
+ name: z.string().min(1),
1147
+ email: z.string().email()
1148
+ });
1149
+
1150
+ function UserForm() {
1151
+ const form = useZodForm(userSchema);
1152
+
1153
+ return (
1154
+ <form onSubmit={form.handleSubmit(handleSubmit)}>
1155
+ {/* Form fields */}
1156
+ </form>
1157
+ );
1158
+ }
1159
+ ```
1160
+
1161
+ ---
1162
+
1163
+ ## Performance Hooks (Advanced)
1164
+
1165
+ ### useComponentPerformance
1166
+
1167
+ Monitor component render performance.
1168
+
1169
+ ```typescript
1170
+ function useComponentPerformance(componentName: string): PerformanceMetrics;
1171
+ ```
1172
+
1173
+ **Usage:**
1174
+ ```tsx
1175
+ import { useComponentPerformance } from '@jmruthers/pace-core';
1176
+
1177
+ function ExpensiveComponent({ data }) {
1178
+ const { renderTime } = useComponentPerformance('ExpensiveComponent');
1179
+
1180
+ // Component logic
1181
+ }
1182
+ ```
1183
+
1184
+ ### usePerformanceMonitor
1185
+
1186
+ Monitor overall application performance.
1187
+
1188
+ ```typescript
1189
+ function usePerformanceMonitor(): PerformanceData;
1190
+ ```
1191
+
1192
+ **Usage:**
1193
+ ```tsx
1194
+ import { usePerformanceMonitor } from '@jmruthers/pace-core';
1195
+
1196
+ function PerformanceDashboard() {
1197
+ const metrics = usePerformanceMonitor();
1198
+
1199
+ return <div>Render time: {metrics.renderTime}ms</div>;
1200
+ }
1201
+ ```
1202
+
1203
+ ### useDataTablePerformance
1204
+
1205
+ Monitor DataTable performance metrics.
1206
+
1207
+ ```typescript
1208
+ function useDataTablePerformance(): DataTablePerformanceMetrics;
1209
+ ```
1210
+
1211
+ **Usage:**
1212
+ ```tsx
1213
+ import { useDataTablePerformance } from '@jmruthers/pace-core';
1214
+
1215
+ function DataTableWithMetrics() {
1216
+ const metrics = useDataTablePerformance();
1217
+
1218
+ return (
1219
+ <>
1220
+ <DataTable data={data} columns={columns} />
1221
+ {metrics.renderTime > 100 && <WarningSlow />}
1222
+ </>
1223
+ );
1224
+ }
1225
+ ```
1226
+
1227
+ ---
1228
+
964
1229
  ## Hook Testing
965
1230
 
966
1231
  All hooks include comprehensive testing:
@@ -1,3 +1,9 @@
1
+ ---
2
+ lastUpdated: 2025-10-29T22:43:00+11:00
3
+ version: 0.5.76
4
+ reviewedBy: content-audit
5
+ ---
6
+
1
7
  # Providers API Reference
2
8
 
3
9
  This section provides detailed API documentation for all context providers in `@jmruthers/pace-core`.
@@ -1,3 +1,9 @@
1
+ ---
2
+ lastUpdated: 2025-10-29T22:43:00+11:00
3
+ version: 0.5.76
4
+ reviewedBy: content-audit
5
+ ---
6
+
1
7
  # Types API Reference
2
8
 
3
9
  This section provides detailed documentation for all TypeScript types and interfaces in `@jmruthers/pace-core`.
@@ -1,3 +1,9 @@
1
+ ---
2
+ lastUpdated: 2025-10-29T22:43:00+11:00
3
+ version: 0.5.76
4
+ reviewedBy: content-audit
5
+ ---
6
+
1
7
  # Utilities API Reference
2
8
 
3
9
  This section provides detailed documentation for all utility functions in `@jmruthers/pace-core`.
@@ -378,6 +384,207 @@ import { sanitizeFormData } from '@jmruthers/pace-core';
378
384
  const sanitizedData = sanitizeFormData(formData);
379
385
  ```
380
386
 
387
+ ## Utility Functions
388
+
389
+ ### cn (ClassName Merge)
390
+
391
+ Utility for merging Tailwind CSS classes with conflict resolution.
392
+
393
+ ```typescript
394
+ function cn(...inputs: ClassValue[]): string;
395
+ ```
396
+
397
+ #### Usage
398
+
399
+ ```typescript
400
+ import { cn } from '@jmruthers/pace-core';
401
+
402
+ // Merge classes
403
+ cn('px-4 py-2', 'bg-main-500', 'hover:bg-main-600')
404
+
405
+ // Conditional classes
406
+ cn('base-class', isActive && 'active-class', isDisabled && 'disabled-class')
407
+
408
+ // Override conflicts (last one wins)
409
+ cn('px-4', 'px-2') // Returns 'px-2'
410
+ ```
411
+
412
+ ### formatCurrency
413
+
414
+ Format a number as currency.
415
+
416
+ ```typescript
417
+ function formatCurrency(
418
+ value: number,
419
+ currencyCode?: string,
420
+ locale?: string
421
+ ): string;
422
+ ```
423
+
424
+ #### Usage
425
+
426
+ ```typescript
427
+ import { formatCurrency } from '@jmruthers/pace-core';
428
+
429
+ formatCurrency(1234.56) // '$1,234.56'
430
+ formatCurrency(1234.56, 'EUR') // '€1,234.56'
431
+ formatCurrency(1234.56, 'USD', 'en-AU') // '$1,234.56'
432
+ ```
433
+
434
+ ### formatNumber
435
+
436
+ Format a number with custom Intl.NumberFormat options.
437
+
438
+ ```typescript
439
+ function formatNumber(
440
+ value: number,
441
+ options?: Intl.NumberFormatOptions,
442
+ locale?: string
443
+ ): string;
444
+ ```
445
+
446
+ #### Usage
447
+
448
+ ```typescript
449
+ import { formatNumber } from '@jmruthers/pace-core';
450
+
451
+ formatNumber(1234.56, { minimumFractionDigits: 2, maximumFractionDigits: 2 })
452
+ formatNumber(1234.56, { style: 'decimal', minimumFractionDigits: 0 })
453
+ ```
454
+
455
+ ### formatPercent
456
+
457
+ Format a number as a percentage.
458
+
459
+ ```typescript
460
+ function formatPercent(
461
+ value: number,
462
+ locale?: string,
463
+ decimals?: number
464
+ ): string;
465
+ ```
466
+
467
+ #### Usage
468
+
469
+ ```typescript
470
+ import { formatPercent } from '@jmruthers/pace-core';
471
+
472
+ formatPercent(45.5) // '45.5%'
473
+ formatPercent(45.5, 'en-US', 2) // '45.50%'
474
+ ```
475
+
476
+ ### formatCompactNumber
477
+
478
+ Format large numbers with K, M, B abbreviations.
479
+
480
+ ```typescript
481
+ function formatCompactNumber(value: number, locale?: string): string;
482
+ ```
483
+
484
+ #### Usage
485
+
486
+ ```typescript
487
+ import { formatCompactNumber } from '@jmruthers/pace-core';
488
+
489
+ formatCompactNumber(1000) // '1K'
490
+ formatCompactNumber(1500000) // '1.5M'
491
+ formatCompactNumber(2300000000) // '2.3B'
492
+ ```
493
+
494
+ ### formatFileSize
495
+
496
+ Format file size in bytes to human-readable string.
497
+
498
+ ```typescript
499
+ function formatFileSize(bytes: number): string;
500
+ ```
501
+
502
+ #### Usage
503
+
504
+ ```typescript
505
+ import { formatFileSize } from '@jmruthers/pace-core';
506
+
507
+ formatFileSize(1024) // '1 KB'
508
+ formatFileSize(1048576) // '1 MB'
509
+ formatFileSize(0) // '0 Bytes'
510
+ ```
511
+
512
+ ### App Configuration Utilities
513
+
514
+ #### setAppConfig
515
+
516
+ Set the current application configuration.
517
+
518
+ ```typescript
519
+ function setAppConfig(config: AppConfig): void;
520
+
521
+ interface AppConfig {
522
+ appName: string;
523
+ appId: string;
524
+ }
525
+ ```
526
+
527
+ #### Usage
528
+
529
+ ```typescript
530
+ import { setAppConfig } from '@jmruthers/pace-core';
531
+
532
+ setAppConfig({
533
+ appName: 'My App',
534
+ appId: 'my-app-id'
535
+ });
536
+ ```
537
+
538
+ #### getAppConfig
539
+
540
+ Get the current application configuration.
541
+
542
+ ```typescript
543
+ function getAppConfig(): AppConfig;
544
+ ```
545
+
546
+ #### Usage
547
+
548
+ ```typescript
549
+ import { getAppConfig } from '@jmruthers/pace-core';
550
+
551
+ const config = getAppConfig();
552
+ console.log(config.appName); // 'My App'
553
+ console.log(config.appId); // 'my-app-id'
554
+ ```
555
+
556
+ #### getCurrentAppName
557
+
558
+ Get the current app name.
559
+
560
+ ```typescript
561
+ function getCurrentAppName(): string;
562
+ ```
563
+
564
+ #### Usage
565
+
566
+ ```typescript
567
+ import { getCurrentAppName } from '@jmruthers/pace-core';
568
+
569
+ const appName = getCurrentAppName(); // 'My App'
570
+ ```
571
+
572
+ #### getCurrentAppId
573
+
574
+ Get the current app ID.
575
+
576
+ ```typescript
577
+ function getCurrentAppId(): string;
578
+ ```
579
+
580
+ #### Usage
581
+
582
+ ```typescript
583
+ import { getCurrentAppId } from '@jmruthers/pace-core';
584
+
585
+ const appId = getCurrentAppId(); // 'my-app-id'
586
+ ```
587
+
381
588
  ## Date and Time Utilities
382
589
 
383
590
  ### formatDate
@@ -1,3 +1,9 @@
1
+ ---
2
+ lastUpdated: 2025-10-29T22:43:00+11:00
3
+ version: 0.5.76
4
+ reviewedBy: content-audit
5
+ ---
6
+
1
7
  # PACE Core Architecture
2
8
 
3
9
  This document provides a comprehensive overview of the PACE Core architecture, including system design, component relationships, and architectural decisions. This is the single source of truth for PACE Core's architectural documentation.