@jmruthers/pace-core 0.5.181 → 0.5.182

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 (750) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -2
  3. package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
  4. package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
  5. package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
  6. package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
  7. package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
  8. package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
  9. package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
  10. package/dist/auth-BZOJqrdd.d.ts +49 -0
  11. package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
  12. package/dist/chunk-5DRSZLL2.js.map +1 -0
  13. package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
  14. package/dist/chunk-6C4YBBJM.js.map +1 -0
  15. package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
  16. package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
  17. package/dist/chunk-CSOFYHAG.js.map +1 -0
  18. package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
  19. package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
  20. package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
  21. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  22. package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
  23. package/dist/chunk-FSFQFJCU.js.map +1 -0
  24. package/dist/chunk-FUEYYMX5.js +2296 -0
  25. package/dist/chunk-FUEYYMX5.js.map +1 -0
  26. package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
  27. package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
  28. package/dist/chunk-KQCRWDSA.js +1 -0
  29. package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
  30. package/dist/chunk-KUEN3HFB.js.map +1 -0
  31. package/dist/chunk-LMC26NLJ.js +84 -0
  32. package/dist/chunk-LMC26NLJ.js.map +1 -0
  33. package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
  34. package/dist/chunk-M7W4CP3M.js.map +1 -0
  35. package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
  36. package/dist/chunk-MI7HBHN3.js.map +1 -0
  37. package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
  38. package/dist/chunk-PWAHJW4G.js.map +1 -0
  39. package/dist/chunk-PWLANIRT.js +127 -0
  40. package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
  41. package/dist/chunk-QCDXODCA.js +75 -0
  42. package/dist/chunk-QCDXODCA.js.map +1 -0
  43. package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
  44. package/dist/chunk-QETLRQI6.js.map +1 -0
  45. package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
  46. package/dist/chunk-QUVSNGIP.js.map +1 -0
  47. package/dist/chunk-QXHPKYJV.js +113 -0
  48. package/dist/chunk-QXHPKYJV.js.map +1 -0
  49. package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
  50. package/dist/chunk-R77UEZ4E.js.map +1 -0
  51. package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
  52. package/dist/chunk-RA3JUFMW.js.map +1 -0
  53. package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
  54. package/dist/chunk-SQGMNID3.js.map +1 -0
  55. package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
  56. package/dist/chunk-UHNYIBXL.js.map +1 -0
  57. package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
  58. package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
  59. package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
  60. package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
  61. package/dist/components.d.ts +12 -93
  62. package/dist/components.js +23 -106
  63. package/dist/components.js.map +1 -1
  64. package/dist/core-CUElvH_C.d.ts +164 -0
  65. package/dist/database.generated-CBmg2950.d.ts +8284 -0
  66. package/dist/event-CW5YB_2p.d.ts +239 -0
  67. package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
  68. package/dist/functions-D_kgHktt.d.ts +208 -0
  69. package/dist/hooks.d.ts +54 -7
  70. package/dist/hooks.js +204 -17
  71. package/dist/hooks.js.map +1 -1
  72. package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
  73. package/dist/index.d.ts +94 -261
  74. package/dist/index.js +314 -126
  75. package/dist/index.js.map +1 -1
  76. package/dist/providers.d.ts +7 -8
  77. package/dist/providers.js +6 -13
  78. package/dist/rbac/index.d.ts +171 -101
  79. package/dist/rbac/index.js +23 -17
  80. package/dist/styles/index.d.ts +1 -3
  81. package/dist/styles/index.js +2 -17
  82. package/dist/theming/runtime.js +3 -3
  83. package/dist/types-UU913iLA.d.ts +102 -0
  84. package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
  85. package/dist/types.d.ts +88 -227
  86. package/dist/types.js +64 -112
  87. package/dist/types.js.map +1 -1
  88. package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
  89. package/dist/utils.d.ts +299 -13
  90. package/dist/utils.js +481 -55
  91. package/dist/utils.js.map +1 -1
  92. package/dist/validation-643vUDZW.d.ts +177 -0
  93. package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
  94. package/docs/README.md +9 -8
  95. package/docs/api/README.md +16 -2
  96. package/docs/api/classes/ColumnFactory.md +1 -1
  97. package/docs/api/classes/ErrorBoundary.md +1 -1
  98. package/docs/api/classes/InvalidScopeError.md +4 -4
  99. package/docs/api/classes/MissingUserContextError.md +4 -4
  100. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  101. package/docs/api/classes/PermissionDeniedError.md +4 -4
  102. package/docs/api/classes/RBACAuditManager.md +14 -14
  103. package/docs/api/classes/RBACCache.md +1 -1
  104. package/docs/api/classes/RBACEngine.md +2 -2
  105. package/docs/api/classes/RBACError.md +4 -4
  106. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  107. package/docs/api/classes/SecureSupabaseClient.md +29 -9
  108. package/docs/api/classes/StorageUtils.md +1 -1
  109. package/docs/api/enums/FileCategory.md +17 -17
  110. package/docs/api/enums/RBACErrorCode.md +228 -0
  111. package/docs/api/enums/RPCFunction.md +118 -0
  112. package/docs/api/interfaces/AggregateConfig.md +1 -1
  113. package/docs/api/interfaces/BadgeProps.md +1 -1
  114. package/docs/api/interfaces/ButtonProps.md +2 -2
  115. package/docs/api/interfaces/CalendarProps.md +1 -1
  116. package/docs/api/interfaces/CardProps.md +29 -3
  117. package/docs/api/interfaces/ColorPalette.md +1 -1
  118. package/docs/api/interfaces/ColorShade.md +1 -1
  119. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  120. package/docs/api/interfaces/DataRecord.md +1 -1
  121. package/docs/api/interfaces/DataTableAction.md +2 -2
  122. package/docs/api/interfaces/DataTableColumn.md +6 -6
  123. package/docs/api/interfaces/DataTableProps.md +1 -1
  124. package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
  125. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  126. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  127. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  128. package/docs/api/interfaces/ExportColumn.md +5 -5
  129. package/docs/api/interfaces/ExportOptions.md +4 -4
  130. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  131. package/docs/api/interfaces/FileMetadata.md +13 -13
  132. package/docs/api/interfaces/FileReference.md +12 -12
  133. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  134. package/docs/api/interfaces/FileUploadOptions.md +10 -10
  135. package/docs/api/interfaces/FileUploadProps.md +19 -19
  136. package/docs/api/interfaces/FooterProps.md +1 -1
  137. package/docs/api/interfaces/FormFieldProps.md +166 -0
  138. package/docs/api/interfaces/FormProps.md +113 -0
  139. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  140. package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
  141. package/docs/api/interfaces/InputProps.md +2 -2
  142. package/docs/api/interfaces/LabelProps.md +8 -8
  143. package/docs/api/interfaces/LoginFormProps.md +1 -1
  144. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  145. package/docs/api/interfaces/NavigationContextType.md +1 -1
  146. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  147. package/docs/api/interfaces/NavigationItem.md +17 -73
  148. package/docs/api/interfaces/NavigationMenuProps.md +38 -53
  149. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  150. package/docs/api/interfaces/Organisation.md +13 -13
  151. package/docs/api/interfaces/OrganisationContextType.md +21 -21
  152. package/docs/api/interfaces/OrganisationMembership.md +15 -15
  153. package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
  154. package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
  155. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
  156. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  157. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  158. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  159. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  160. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  161. package/docs/api/interfaces/PaletteData.md +1 -1
  162. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  163. package/docs/api/interfaces/ProgressProps.md +50 -0
  164. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  165. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  166. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  167. package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
  168. package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
  169. package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
  170. package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
  171. package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
  172. package/docs/api/interfaces/RBACConfig.md +2 -2
  173. package/docs/api/interfaces/RBACContext.md +52 -0
  174. package/docs/api/interfaces/RBACLogger.md +1 -1
  175. package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
  176. package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
  177. package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
  178. package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
  179. package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
  180. package/docs/api/interfaces/RBACResult.md +58 -0
  181. package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
  182. package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
  183. package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
  184. package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
  185. package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
  186. package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
  187. package/docs/api/interfaces/RBACRolesListParams.md +52 -0
  188. package/docs/api/interfaces/RBACRolesListResult.md +74 -0
  189. package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
  190. package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
  191. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  192. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  193. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  194. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  195. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  196. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  197. package/docs/api/interfaces/RouteConfig.md +1 -1
  198. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  199. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  200. package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
  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 +43 -2
  215. package/docs/api/interfaces/TextareaProps.md +2 -2
  216. package/docs/api/interfaces/ToastActionElement.md +1 -1
  217. package/docs/api/interfaces/ToastProps.md +1 -1
  218. package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
  219. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  220. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  221. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  222. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  223. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  224. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  225. package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
  226. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
  227. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  228. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  229. package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
  230. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  231. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  232. package/docs/api/interfaces/UserEventAccess.md +1 -1
  233. package/docs/api/interfaces/UserMenuProps.md +4 -4
  234. package/docs/api/interfaces/UserProfile.md +7 -7
  235. package/docs/api/modules.md +484 -462
  236. package/docs/api-reference/components.md +186 -15
  237. package/docs/api-reference/deprecated.md +376 -0
  238. package/docs/api-reference/hooks.md +149 -19
  239. package/docs/api-reference/providers.md +61 -6
  240. package/docs/api-reference/rpc-functions.md +397 -0
  241. package/docs/api-reference/types.md +135 -78
  242. package/docs/api-reference/utilities.md +51 -380
  243. package/docs/architecture/README.md +49 -3
  244. package/docs/architecture/database-schema-requirements.md +40 -3
  245. package/docs/architecture/rbac-security-architecture.md +41 -4
  246. package/docs/architecture/services.md +127 -42
  247. package/docs/best-practices/README.md +51 -5
  248. package/docs/best-practices/accessibility.md +32 -3
  249. package/docs/best-practices/common-patterns.md +50 -3
  250. package/docs/best-practices/deployment.md +50 -4
  251. package/docs/best-practices/performance.md +50 -3
  252. package/docs/best-practices/security.md +94 -41
  253. package/docs/best-practices/testing.md +33 -4
  254. package/docs/core-concepts/authentication.md +5 -5
  255. package/docs/core-concepts/events.md +3 -3
  256. package/docs/core-concepts/organisations.md +3 -3
  257. package/docs/core-concepts/permissions.md +3 -3
  258. package/docs/core-concepts/rbac-system.md +5 -5
  259. package/docs/documentation-index.md +30 -8
  260. package/docs/getting-started/documentation-index.md +1 -1
  261. package/docs/getting-started/examples/README.md +7 -5
  262. package/docs/getting-started/examples/basic-auth-app.md +3 -0
  263. package/docs/getting-started/examples/full-featured-app.md +5 -3
  264. package/docs/getting-started/faq.md +6 -6
  265. package/docs/getting-started/installation-guide.md +192 -13
  266. package/docs/getting-started/local-development.md +303 -0
  267. package/docs/getting-started/quick-reference.md +3 -3
  268. package/docs/getting-started/quick-start.md +517 -0
  269. package/docs/implementation-guides/app-layout.md +45 -3
  270. package/docs/implementation-guides/authentication.md +66 -7
  271. package/docs/implementation-guides/component-styling.md +53 -3
  272. package/docs/implementation-guides/data-tables.md +76 -7
  273. package/docs/implementation-guides/datatable-filtering.md +1 -2
  274. package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
  275. package/docs/implementation-guides/dynamic-colors.md +155 -4
  276. package/docs/implementation-guides/file-reference-system.md +72 -3
  277. package/docs/implementation-guides/file-upload-storage.md +72 -3
  278. package/docs/implementation-guides/forms.md +53 -3
  279. package/docs/implementation-guides/inactivity-tracking.md +53 -3
  280. package/docs/implementation-guides/large-datasets.md +1 -1
  281. package/docs/implementation-guides/navigation.md +55 -5
  282. package/docs/implementation-guides/organisation-security.md +72 -3
  283. package/docs/implementation-guides/performance.md +57 -1
  284. package/docs/implementation-guides/permission-enforcement.md +81 -8
  285. package/docs/implementation-guides/public-pages.md +560 -14
  286. package/docs/migration/MIGRATION_GUIDE.md +409 -50
  287. package/docs/migration/README.md +37 -3
  288. package/docs/migration/organisation-context-timing-fix.md +39 -4
  289. package/docs/migration/quick-migration-guide.md +41 -5
  290. package/docs/migration/rbac-migration.md +59 -3
  291. package/docs/migration/service-architecture.md +77 -14
  292. package/docs/rbac/README.md +79 -3
  293. package/docs/rbac/advanced-patterns.md +47 -3
  294. package/docs/rbac/api-reference.md +77 -8
  295. package/docs/rbac/event-based-apps.md +50 -5
  296. package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
  297. package/docs/rbac/examples.md +39 -3
  298. package/docs/rbac/getting-started.md +63 -4
  299. package/docs/rbac/quick-start.md +57 -5
  300. package/docs/rbac/rbac-rls-integration.md +68 -6
  301. package/docs/rbac/super-admin-guide.md +47 -3
  302. package/docs/rbac/troubleshooting.md +3 -3
  303. package/docs/security/README.md +68 -3
  304. package/docs/security/checklist.md +50 -3
  305. package/docs/standards/01-architecture-standard.md +39 -0
  306. package/docs/standards/02-api-and-rpc-standard.md +39 -0
  307. package/docs/standards/03-component-standard.md +32 -0
  308. package/docs/standards/04-code-style-standard.md +32 -0
  309. package/docs/standards/05-security-standard.md +30 -0
  310. package/docs/standards/06-testing-and-docs-standard.md +29 -0
  311. package/docs/standards/README.md +35 -0
  312. package/docs/styles/README.md +89 -8
  313. package/docs/testing/README.md +175 -24
  314. package/docs/troubleshooting/README.md +50 -3
  315. package/docs/troubleshooting/common-issues.md +271 -5
  316. package/docs/troubleshooting/debugging.md +54 -1
  317. package/docs/troubleshooting/migration.md +54 -1
  318. package/docs/troubleshooting/organisation-context-setup.md +29 -3
  319. package/docs/troubleshooting/styling-issues.md +246 -4
  320. package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
  321. package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
  322. package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
  323. package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
  324. package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
  325. package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
  326. package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
  327. package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
  328. package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
  329. package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
  330. package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
  331. package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
  332. package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
  333. package/examples/README.md +81 -33
  334. package/examples/index.ts +14 -12
  335. package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
  336. package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
  337. package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
  338. package/package.json +21 -27
  339. package/src/__tests__/helpers/test-utils.tsx +29 -3
  340. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
  341. package/src/components/Alert/Alert.test.tsx +2 -2
  342. package/src/components/Alert/Alert.tsx +4 -4
  343. package/src/components/Avatar/Avatar.test.tsx +17 -6
  344. package/src/components/Badge/Badge.test.tsx +1 -1
  345. package/src/components/Badge/Badge.tsx +2 -2
  346. package/src/components/Button/Button.test.tsx +2 -2
  347. package/src/components/Button/Button.tsx +11 -7
  348. package/src/components/Calendar/Calendar.test.tsx +41 -8
  349. package/src/components/Calendar/Calendar.tsx +39 -36
  350. package/src/components/Card/Card.tsx +51 -13
  351. package/src/components/Checkbox/Checkbox.test.tsx +36 -12
  352. package/src/components/DataTable/DataTable.test.tsx +1 -1
  353. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
  354. package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
  355. package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
  356. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
  357. package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
  358. package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
  359. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
  360. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
  361. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
  362. package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
  363. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
  364. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
  365. package/src/components/DataTable/components/DataTableBody.tsx +10 -25
  366. package/src/components/DataTable/components/DataTableCore.tsx +1 -1
  367. package/src/components/DataTable/components/FilterRow.tsx +3 -1
  368. package/src/components/DataTable/components/ImportModal.tsx +1 -1
  369. package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
  370. package/src/components/DataTable/core/ColumnFactory.ts +6 -6
  371. package/src/components/DataTable/core/DataTableContext.tsx +14 -10
  372. package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
  373. package/src/components/DataTable/core/PluginRegistry.ts +3 -3
  374. package/src/components/DataTable/core/StateManager.ts +12 -11
  375. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
  376. package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
  377. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
  378. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
  379. package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
  380. package/src/components/DataTable/core/interfaces.ts +17 -17
  381. package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
  382. package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
  383. package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
  384. package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
  385. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
  386. package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
  387. package/src/components/DataTable/types.ts +5 -5
  388. package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
  389. package/src/components/DataTable/utils/columnUtils.ts +3 -2
  390. package/src/components/DataTable/utils/debugTools.ts +1 -1
  391. package/src/components/DataTable/utils/exportUtils.ts +6 -6
  392. package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
  393. package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
  394. package/src/components/DataTable/utils/index.ts +0 -1
  395. package/src/components/DataTable/utils/performanceUtils.ts +9 -4
  396. package/src/components/Dialog/Dialog.test.tsx +49 -27
  397. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
  398. package/src/components/EventSelector/EventSelector.test.tsx +60 -12
  399. package/src/components/EventSelector/EventSelector.tsx +38 -15
  400. package/src/components/EventSelector/index.ts +2 -2
  401. package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
  402. package/src/components/FileDisplay/FileDisplay.tsx +1 -0
  403. package/src/components/FileUpload/FileUpload.test.tsx +532 -152
  404. package/src/components/FileUpload/FileUpload.tsx +43 -8
  405. package/src/components/Footer/Footer.test.tsx +19 -14
  406. package/src/components/Form/Form.test.tsx +96 -14
  407. package/src/components/Form/Form.tsx +210 -1
  408. package/src/components/Form/index.ts +3 -7
  409. package/src/components/Header/Header.test.tsx +24 -17
  410. package/src/components/Header/Header.tsx +3 -1
  411. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
  412. package/src/components/Input/Input.test.tsx +61 -36
  413. package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
  414. package/src/components/Label/Label.tsx +2 -3
  415. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
  416. package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
  417. package/src/components/LoginForm/LoginForm.test.tsx +14 -13
  418. package/src/components/LoginForm/LoginForm.tsx +1 -1
  419. package/src/components/LoginForm/index.ts +7 -0
  420. package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
  421. package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
  422. package/src/components/NavigationMenu/index.ts +1 -1
  423. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
  424. package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
  425. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
  426. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
  427. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
  428. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
  429. package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
  430. package/src/components/PaceAppLayout/test-setup.tsx +192 -0
  431. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
  432. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
  433. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
  434. package/src/components/PasswordChange/index.ts +2 -0
  435. package/src/components/Progress/Progress.test.tsx +11 -0
  436. package/src/components/Progress/Progress.tsx +1 -1
  437. package/src/components/Progress/index.ts +10 -0
  438. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
  439. package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
  440. package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
  441. package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
  442. package/src/components/PublicLayout/index.ts +10 -28
  443. package/src/components/Select/Select.test.tsx +7 -7
  444. package/src/components/Select/Select.tsx +277 -11
  445. package/src/components/Select/index.ts +1 -2
  446. package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
  447. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
  448. package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
  449. package/src/components/Tabs/Tabs.test.tsx +10 -9
  450. package/src/components/Tabs/Tabs.tsx +61 -33
  451. package/src/components/Textarea/Textarea.test.tsx +31 -18
  452. package/src/components/Toast/Toast.tsx +2 -2
  453. package/src/components/Tooltip/Tooltip.test.tsx +1 -1
  454. package/src/components/UserMenu/UserMenu.test.tsx +7 -6
  455. package/src/components/UserMenu/UserMenu.tsx +2 -2
  456. package/src/components/index.ts +5 -4
  457. package/src/constants/performance.ts +19 -8
  458. package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
  459. package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
  460. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
  461. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
  462. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
  463. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
  464. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
  465. package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
  466. package/src/hooks/index.ts +4 -0
  467. package/src/hooks/public/index.ts +2 -0
  468. package/src/hooks/public/usePublicEvent.ts +4 -6
  469. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  470. package/src/hooks/services/useAuth.ts +2 -4
  471. package/src/hooks/services/useCurrentEvent.ts +1 -1
  472. package/src/hooks/useAppConfig.ts +1 -1
  473. package/src/hooks/useDataTablePerformance.ts +2 -2
  474. package/src/hooks/useEventTheme.ts +1 -1
  475. package/src/hooks/useEvents.ts +51 -10
  476. package/src/hooks/useOrganisationPermissions.test.ts +3 -3
  477. package/src/hooks/useOrganisationPermissions.ts +1 -1
  478. package/src/hooks/useOrganisationSecurity.ts +2 -2
  479. package/src/hooks/usePermissionCache.test.ts +9 -9
  480. package/src/hooks/usePermissionCache.ts +2 -2
  481. package/src/index.ts +19 -12
  482. package/src/providers/OrganisationProvider.tsx +73 -9
  483. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
  484. package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
  485. package/src/providers/__tests__/EventProvider.test.tsx +24 -15
  486. package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
  487. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
  488. package/src/providers/index.ts +0 -3
  489. package/src/providers/services/AuthServiceProvider.tsx +2 -17
  490. package/src/providers/services/EventServiceProvider.tsx +11 -16
  491. package/src/providers/services/InactivityServiceProvider.tsx +9 -12
  492. package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
  493. package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
  494. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
  495. package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
  496. package/src/rbac/adapters.tsx +1 -1
  497. package/src/rbac/api.ts +20 -4
  498. package/src/rbac/audit-enhanced.ts +47 -2
  499. package/src/rbac/audit.ts +47 -2
  500. package/src/rbac/components/NavigationGuard.tsx +1 -1
  501. package/src/rbac/components/NavigationProvider.test.tsx +7 -6
  502. package/src/rbac/components/NavigationProvider.tsx +1 -1
  503. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  504. package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
  505. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  506. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  507. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  508. package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
  509. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  510. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
  511. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
  512. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
  513. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
  514. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
  515. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
  516. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
  517. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
  518. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
  519. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
  520. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
  521. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
  522. package/src/rbac/hooks/index.ts +3 -0
  523. package/src/rbac/hooks/usePermissions.ts +31 -85
  524. package/src/rbac/hooks/useRBAC.test.ts +13 -1
  525. package/src/rbac/hooks/useRBAC.ts +13 -67
  526. package/src/rbac/hooks/useResolvedScope.ts +11 -0
  527. package/src/rbac/hooks/useSecureSupabase.ts +308 -0
  528. package/src/rbac/index.ts +3 -0
  529. package/src/rbac/secureClient.ts +53 -6
  530. package/src/rbac/security.ts +37 -1
  531. package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
  532. package/src/rbac/types.ts +3 -2
  533. package/src/services/AuthService.ts +33 -25
  534. package/src/services/EventService.ts +56 -44
  535. package/src/services/InactivityService.ts +33 -53
  536. package/src/services/OrganisationService.ts +36 -40
  537. package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
  538. package/src/services/__tests__/EventService.test.ts +67 -33
  539. package/src/services/interfaces/IEventService.ts +1 -1
  540. package/src/styles/core.css +2 -2
  541. package/src/styles/index.ts +1 -5
  542. package/src/types/__tests__/guards.test.ts +1 -1
  543. package/src/types/__tests__/type-validation.test.ts +0 -1
  544. package/src/types/auth.ts +42 -2
  545. package/src/types/core.ts +251 -0
  546. package/src/types/database.ts +11 -496
  547. package/src/types/event.ts +102 -0
  548. package/src/types/file-reference.ts +6 -4
  549. package/src/types/guards.ts +2 -1
  550. package/src/types/index.ts +48 -14
  551. package/src/types/lodash.debounce.d.ts +15 -0
  552. package/src/types/organisation.ts +14 -10
  553. package/src/types/supabase.ts +15 -17
  554. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
  555. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
  556. package/src/utils/app/appNameResolver.ts +1 -1
  557. package/src/utils/dynamic/dynamicUtils.ts +3 -2
  558. package/src/utils/file-reference/index.ts +25 -6
  559. package/src/utils/security/secureErrors.ts +1 -1
  560. package/src/utils/validation/index.ts +6 -12
  561. package/src/utils/validation/validationUtils.ts +0 -13
  562. package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
  563. package/dist/auth-DReDSLq9.d.ts +0 -16
  564. package/dist/chunk-3JI76CYK.js +0 -2444
  565. package/dist/chunk-3JI76CYK.js.map +0 -1
  566. package/dist/chunk-56XJ3TU6.js +0 -11
  567. package/dist/chunk-56XJ3TU6.js.map +0 -1
  568. package/dist/chunk-5MT24GKJ.js.map +0 -1
  569. package/dist/chunk-7QCC6MCP.js +0 -288
  570. package/dist/chunk-BESYRHQM.js.map +0 -1
  571. package/dist/chunk-BJPBT3CU.js +0 -21
  572. package/dist/chunk-BJPBT3CU.js.map +0 -1
  573. package/dist/chunk-BVYWGZVV.js.map +0 -1
  574. package/dist/chunk-CX5M4ZAG.js.map +0 -1
  575. package/dist/chunk-D7LCGMVS.js.map +0 -1
  576. package/dist/chunk-EGI6MUL6.js +0 -27
  577. package/dist/chunk-EGI6MUL6.js.map +0 -1
  578. package/dist/chunk-ERISIBYU.js.map +0 -1
  579. package/dist/chunk-HRO5HWN2.js.map +0 -1
  580. package/dist/chunk-HZLDFOE4.js.map +0 -1
  581. package/dist/chunk-JISYG63F.js +0 -70
  582. package/dist/chunk-JISYG63F.js.map +0 -1
  583. package/dist/chunk-LIMSTKYD.js +0 -61
  584. package/dist/chunk-LIMSTKYD.js.map +0 -1
  585. package/dist/chunk-OWAG3GSU.js.map +0 -1
  586. package/dist/chunk-PPMP5J6T.js.map +0 -1
  587. package/dist/chunk-Q5QRDWKI.js.map +0 -1
  588. package/dist/chunk-S5OFRT4M.js.map +0 -1
  589. package/dist/chunk-SBVILCCA.js.map +0 -1
  590. package/dist/chunk-TUMEWN34.js +0 -15
  591. package/dist/chunk-TUMEWN34.js.map +0 -1
  592. package/dist/chunk-XDNLUEXI.js +0 -138
  593. package/dist/chunk-XJ2HZOBU.js.map +0 -1
  594. package/dist/chunk-ZYTYSTO5.js.map +0 -1
  595. package/dist/chunk-ZZ2SS7NI.js +0 -237
  596. package/dist/chunk-ZZ2SS7NI.js.map +0 -1
  597. package/dist/database-C6jy7EOu.d.ts +0 -500
  598. package/dist/organisation-D6qRDtbF.d.ts +0 -93
  599. package/dist/schema-DTDZQe2u.d.ts +0 -28
  600. package/dist/unified-DQ4VcT7H.d.ts +0 -198
  601. package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
  602. package/dist/validation.d.ts +0 -47
  603. package/dist/validation.js +0 -24
  604. package/dist/validation.js.map +0 -1
  605. package/docs/DOCUMENTATION_AUDIT.md +0 -172
  606. package/docs/DOCUMENTATION_STANDARD.md +0 -137
  607. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  608. package/docs/api/interfaces/EventLogoProps.md +0 -152
  609. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  610. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  611. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  612. package/docs/architecture/rpc-function-standards.md +0 -1106
  613. package/docs/getting-started/consuming-app-vite-config.md +0 -239
  614. package/docs/implementation-guides/event-theming-summary.md +0 -226
  615. package/docs/implementation-guides/public-pages-advanced.md +0 -1038
  616. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
  617. package/docs/migration/v0.4.16-css-first-approach.md +0 -312
  618. package/docs/migration/v0.4.17-source-path-fix.md +0 -235
  619. package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
  620. package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
  621. package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
  622. package/docs/rbac/README-rbac-rls-integration.md +0 -374
  623. package/docs/styles/usage.md +0 -227
  624. package/docs/testing/visual-testing.md +0 -120
  625. package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
  626. package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
  627. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
  628. package/docs/troubleshooting/database-view-compatibility.md +0 -125
  629. package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
  630. package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
  631. package/examples/RBAC/EventBasedApp.tsx +0 -239
  632. package/examples/RBAC/PermissionExample.tsx +0 -151
  633. package/examples/STRUCTURE.md +0 -125
  634. package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
  635. package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
  636. package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
  637. package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
  638. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
  639. package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
  640. package/examples/components 2/index.ts +0 -11
  641. package/examples/features/index.ts +0 -12
  642. package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
  643. package/examples/features/rbac/index.ts +0 -13
  644. package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
  645. package/examples/public-pages/PublicEventPage.tsx +0 -274
  646. package/examples/public-pages/PublicPageApp.tsx +0 -308
  647. package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
  648. package/examples/public-pages/index.ts +0 -14
  649. package/src/__tests__/TEST_STANDARD.md +0 -1008
  650. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  651. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
  652. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
  653. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
  654. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
  655. package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
  656. package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
  657. package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
  658. package/src/components/Dialog/README.md +0 -804
  659. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  660. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  661. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
  662. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  663. package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
  664. package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
  665. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
  666. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  667. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  668. package/src/components/EventSelector/types.ts +0 -79
  669. package/src/components/Form/FormErrorSummary.tsx +0 -113
  670. package/src/components/Form/FormField.tsx +0 -249
  671. package/src/components/Form/FormFieldset.tsx +0 -127
  672. package/src/components/Form/FormLiveRegion.tsx +0 -198
  673. package/src/components/Input/__mocks__/Input.tsx +0 -2
  674. package/src/components/NavigationMenu/types.ts +0 -85
  675. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
  676. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
  677. package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
  678. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  679. package/src/components/PasswordReset/index.ts +0 -2
  680. package/src/components/ProtectedRoute/README.md +0 -164
  681. package/src/components/PublicLayout/EventLogo.tsx +0 -175
  682. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
  683. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
  684. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
  685. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  686. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  687. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  688. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
  689. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
  690. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
  691. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
  692. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
  693. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
  694. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
  695. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
  696. package/src/components/Select/hooks.ts +0 -289
  697. package/src/hooks/useCounter.test.ts +0 -131
  698. package/src/hooks/useDebounce.test.ts +0 -375
  699. package/src/providers/AuthProvider.tsx +0 -15
  700. package/src/providers/EventProvider.tsx +0 -16
  701. package/src/providers/InactivityProvider.tsx +0 -15
  702. package/src/providers/OrganisationProvider.context.test.tsx +0 -169
  703. package/src/providers/UnifiedAuthProvider.tsx +0 -15
  704. package/src/types/theme.ts +0 -6
  705. package/src/types/unified.ts +0 -265
  706. package/src/utils/appConfig.ts +0 -47
  707. package/src/utils/appIdResolver.test.ts +0 -499
  708. package/src/utils/appIdResolver.ts +0 -130
  709. package/src/utils/appNameResolver.simple.test.ts +0 -212
  710. package/src/utils/appNameResolver.test.ts +0 -121
  711. package/src/utils/appNameResolver.ts +0 -191
  712. package/src/utils/audit.ts +0 -127
  713. package/src/utils/auth-utils.ts +0 -96
  714. package/src/utils/bundleAnalysis.ts +0 -129
  715. package/src/utils/debugLogger.ts +0 -67
  716. package/src/utils/deviceFingerprint.ts +0 -215
  717. package/src/utils/dynamicUtils.ts +0 -105
  718. package/src/utils/file-reference.test.ts +0 -788
  719. package/src/utils/file-reference.ts +0 -519
  720. package/src/utils/formatDate.test.ts +0 -237
  721. package/src/utils/formatting.ts +0 -170
  722. package/src/utils/lazyLoad.tsx +0 -44
  723. package/src/utils/logger.ts +0 -179
  724. package/src/utils/organisationContext.test.ts +0 -322
  725. package/src/utils/organisationContext.ts +0 -153
  726. package/src/utils/performanceBenchmark.ts +0 -64
  727. package/src/utils/performanceBudgets.ts +0 -110
  728. package/src/utils/permissionTypes.ts +0 -37
  729. package/src/utils/permissionUtils.test.ts +0 -393
  730. package/src/utils/permissionUtils.ts +0 -34
  731. package/src/utils/sanitization.ts +0 -264
  732. package/src/utils/schemaUtils.ts +0 -37
  733. package/src/utils/secureDataAccess.test.ts +0 -711
  734. package/src/utils/secureDataAccess.ts +0 -377
  735. package/src/utils/secureErrors.ts +0 -79
  736. package/src/utils/security.ts +0 -156
  737. package/src/utils/securityMonitor.ts +0 -45
  738. package/src/utils/sessionTracking.ts +0 -126
  739. package/src/utils/validation.ts +0 -111
  740. package/src/utils/validationUtils.ts +0 -120
  741. package/src/validation/index.ts +0 -12
  742. /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
  743. /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
  744. /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
  745. /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
  746. /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
  747. /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
  748. /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
  749. /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
  750. /package/examples/{RBAC → rbac}/index.ts +0 -0
@@ -72,22 +72,122 @@ vi.mock('../../hooks/services/useInactivityService', () => ({
72
72
  }));
73
73
 
74
74
  // Import after mocks so provider uses mocked modules
75
- import { UnifiedAuthProvider, useUnifiedAuth } from './UnifiedAuthProvider';
75
+ import { UnifiedAuthProvider, useUnifiedAuth } from './services/UnifiedAuthProvider';
76
76
 
77
77
  // Mock all the child providers with simple implementations
78
78
  // Mock service providers actually used by UnifiedAuthProvider
79
- vi.mock('./services/AuthServiceProvider', () => ({
80
- AuthServiceProvider: ({ children }: { children: ReactNode }) => <div data-testid="auth-provider">{children}</div>,
81
- }));
82
- vi.mock('./services/OrganisationServiceProvider', () => ({
83
- OrganisationServiceProvider: ({ children }: { children: ReactNode }) => <div data-testid="org-provider">{children}</div>,
84
- }));
85
- vi.mock('./services/EventServiceProvider', () => ({
86
- EventServiceProvider: ({ children }: { children: ReactNode }) => <div data-testid="event-provider">{children}</div>,
87
- }));
88
- vi.mock('./services/InactivityServiceProvider', () => ({
89
- InactivityServiceProvider: ({ children }: { children: ReactNode }) => <div data-testid="inactivity-provider">{children}</div>,
90
- }));
79
+ vi.mock('./services/AuthServiceProvider', async (importOriginal) => {
80
+ const actual = await importOriginal<typeof import('./services/AuthServiceProvider')>();
81
+ const React = await import('react');
82
+ const mockAuthService = {
83
+ getUser: () => null,
84
+ getSession: () => null,
85
+ isLoading: () => false,
86
+ getError: () => null,
87
+ getSupabaseClient: () => ({}),
88
+ signIn: vi.fn(),
89
+ signUp: vi.fn(),
90
+ signOut: vi.fn(),
91
+ resetPassword: vi.fn(),
92
+ updatePassword: vi.fn(),
93
+ refreshSession: vi.fn(),
94
+ subscribe: () => () => {},
95
+ initialize: vi.fn(),
96
+ cleanup: vi.fn(),
97
+ getSessionRestorationState: () => ({ isRestoring: false, restorationComplete: false, restorationError: null }),
98
+ };
99
+ return {
100
+ ...actual,
101
+ AuthServiceProvider: ({ children }: { children: ReactNode }) => (
102
+ <actual.AuthServiceContext.Provider value={{ authService: mockAuthService, sessionRestoration: { isRestoring: false, restorationComplete: false, restorationError: null } }}>
103
+ <div data-testid="auth-provider">{children}</div>
104
+ </actual.AuthServiceContext.Provider>
105
+ ),
106
+ };
107
+ });
108
+ vi.mock('./services/OrganisationServiceProvider', async (importOriginal) => {
109
+ const actual = await importOriginal<typeof import('./services/OrganisationServiceProvider')>();
110
+ const React = await import('react');
111
+ const mockOrganisationService = {
112
+ getSelectedOrganisation: () => null,
113
+ getOrganisations: () => [],
114
+ getUserMemberships: () => [],
115
+ isLoading: () => false,
116
+ getError: () => null,
117
+ hasValidOrganisationContext: () => false,
118
+ isContextReady: () => false,
119
+ switchOrganisation: vi.fn(),
120
+ getUserRole: vi.fn(),
121
+ validateOrganisationAccess: vi.fn(),
122
+ refreshOrganisations: vi.fn(),
123
+ ensureOrganisationContext: vi.fn(),
124
+ isOrganisationSecure: vi.fn(),
125
+ getPrimaryOrganisation: vi.fn(),
126
+ subscribe: () => () => {},
127
+ initialize: vi.fn(),
128
+ cleanup: vi.fn(),
129
+ };
130
+ return {
131
+ ...actual,
132
+ OrganisationServiceProvider: ({ children }: { children: ReactNode }) => (
133
+ <actual.OrganisationServiceContext.Provider value={{ organisationService: mockOrganisationService }}>
134
+ <div data-testid="org-provider">{children}</div>
135
+ </actual.OrganisationServiceContext.Provider>
136
+ ),
137
+ };
138
+ });
139
+ vi.mock('./services/EventServiceProvider', async (importOriginal) => {
140
+ const actual = await importOriginal<typeof import('./services/EventServiceProvider')>();
141
+ const React = await import('react');
142
+ const mockEventService = {
143
+ getEvents: () => [],
144
+ getSelectedEvent: () => null,
145
+ isLoading: () => false,
146
+ getError: () => null,
147
+ setSelectedEvent: vi.fn(),
148
+ refreshEvents: vi.fn(),
149
+ subscribe: () => () => {},
150
+ initialize: vi.fn(),
151
+ cleanup: vi.fn(),
152
+ };
153
+ return {
154
+ ...actual,
155
+ EventServiceProvider: ({ children }: { children: ReactNode }) => (
156
+ <actual.EventServiceContext.Provider value={{ eventService: mockEventService }}>
157
+ <div data-testid="event-provider">{children}</div>
158
+ </actual.EventServiceContext.Provider>
159
+ ),
160
+ };
161
+ });
162
+ vi.mock('./services/InactivityServiceProvider', async (importOriginal) => {
163
+ const actual = await importOriginal<typeof import('./services/InactivityServiceProvider')>();
164
+ const React = await import('react');
165
+ const mockInactivityService = {
166
+ getShowInactivityWarning: () => false,
167
+ getInactivityTimeRemaining: () => 0,
168
+ isIdle: () => false,
169
+ getTimeRemaining: () => 30 * 60 * 1000,
170
+ isWarningShown: () => false,
171
+ isTracking: () => false,
172
+ resetActivity: vi.fn(),
173
+ startTracking: vi.fn(),
174
+ stopTracking: vi.fn(),
175
+ handleIdleLogout: vi.fn(),
176
+ handleStaySignedIn: vi.fn(),
177
+ handleSignOutNow: vi.fn(),
178
+ subscribe: () => () => {},
179
+ initialize: vi.fn(),
180
+ cleanup: vi.fn(),
181
+ };
182
+ return {
183
+ ...actual,
184
+ InactivityServiceProvider: ({ children }: { children: ReactNode }) => (
185
+ <actual.InactivityServiceContext.Provider value={{ inactivityService: mockInactivityService }}>
186
+ <div data-testid="inactivity-provider">{children}</div>
187
+ </actual.InactivityServiceContext.Provider>
188
+ ),
189
+ };
190
+ });
91
191
 
92
192
  // No RBAC provider composition in UnifiedAuthProvider now; remove that assertion
93
193
 
@@ -6,7 +6,8 @@
6
6
  import React from 'react';
7
7
  import { render, screen, fireEvent } from '@testing-library/react';
8
8
  import { vi, describe, it, expect, beforeEach } from 'vitest';
9
- import { AuthServiceProvider as AuthProvider, useAuthService as useAuth } from '../services/AuthServiceProvider';
9
+ import { AuthServiceProvider as AuthProvider } from '../services/AuthServiceProvider';
10
+ import { useAuthService as useAuth } from '../../hooks/services/useAuthService';
10
11
  import { TEST_FIXTURES } from '../../__tests__/fixtures/test-data';
11
12
 
12
13
  // Mock the debug logger
@@ -6,7 +6,8 @@
6
6
  import React from 'react';
7
7
  import { render, screen, fireEvent } from '@testing-library/react';
8
8
  import { vi, describe, it, expect, beforeEach } from 'vitest';
9
- import { EventProvider, useEvents } from '../EventProvider';
9
+ import { EventServiceProvider } from '../services/EventServiceProvider';
10
+ import { useEvents } from '../../hooks/useEvents';
10
11
  import { TEST_FIXTURES } from '../../__tests__/fixtures/test-data';
11
12
 
12
13
  // Mock the debug logger
@@ -30,14 +31,16 @@ const mockUnifiedAuthState = {
30
31
  setSelectedEventId: vi.fn(),
31
32
  };
32
33
 
33
- vi.mock('../UnifiedAuthProvider', () => ({
34
- useUnifiedAuth: () => ({
35
- user: mockUnifiedAuthState.user,
36
- session: mockUnifiedAuthState.session,
37
- supabase: mockUnifiedAuthState.supabase,
38
- appName: mockUnifiedAuthState.appName,
39
- setSelectedEventId: mockUnifiedAuthState.setSelectedEventId,
40
- }),
34
+ const mockUseUnifiedAuthFn = vi.fn(() => ({
35
+ user: mockUnifiedAuthState.user,
36
+ session: mockUnifiedAuthState.session,
37
+ supabase: mockUnifiedAuthState.supabase,
38
+ appName: mockUnifiedAuthState.appName,
39
+ setSelectedEventId: mockUnifiedAuthState.setSelectedEventId,
40
+ }));
41
+ vi.mock('../services/UnifiedAuthProvider', () => ({
42
+ useUnifiedAuth: () => mockUseUnifiedAuthFn(),
43
+ UnifiedAuthProvider: ({ children }: { children: React.ReactNode }) => <>{children}</>,
41
44
  }));
42
45
 
43
46
  // Mock OrganisationProvider
@@ -46,7 +49,7 @@ const mockOrganisationState = {
46
49
  ensureOrganisationContext: vi.fn(),
47
50
  };
48
51
 
49
- vi.mock('../OrganisationProvider', () => ({
52
+ vi.mock('../../hooks/useOrganisations', () => ({
50
53
  useOrganisations: () => ({
51
54
  selectedOrganisation: mockOrganisationState.selectedOrganisation,
52
55
  ensureOrganisationContext: mockOrganisationState.ensureOrganisationContext,
@@ -130,9 +133,16 @@ const TestWrapper = ({
130
133
  mockOrganisationState.selectedOrganisation = selectedOrganisation;
131
134
 
132
135
  return (
133
- <EventProvider supabaseClient={supabaseClient}>
136
+ <EventServiceProvider
137
+ supabaseClient={supabaseClient || createMockSupabaseClient()}
138
+ user={user}
139
+ session={session}
140
+ appName={appName}
141
+ selectedOrganisation={selectedOrganisation}
142
+ setSelectedEventId={mockUnifiedAuthState.setSelectedEventId}
143
+ >
134
144
  {children}
135
- </EventProvider>
145
+ </EventServiceProvider>
136
146
  );
137
147
  };
138
148
 
@@ -270,9 +280,8 @@ describe('EventProvider', () => {
270
280
  };
271
281
 
272
282
  render(<TestOutsideProvider />);
273
- // The hook might not throw an error in this test environment
274
- // Just verify the component renders
275
- expect(screen.getByTestId('no-error')).toBeInTheDocument();
283
+ // The hook should throw an error when used outside the provider
284
+ expect(screen.getByTestId('error')).toHaveTextContent('useEventService must be used within EventServiceProvider');
276
285
  });
277
286
  });
278
287
 
@@ -4,9 +4,10 @@
4
4
  */
5
5
 
6
6
  import React from 'react';
7
- import { render, screen, fireEvent } from '@testing-library/react';
7
+ import { render, screen, fireEvent, waitFor } from '@testing-library/react';
8
8
  import { vi, describe, it, expect, beforeEach } from 'vitest';
9
- import { OrganisationProvider, useOrganisations } from '../OrganisationProvider';
9
+ import { OrganisationServiceProvider } from '../services/OrganisationServiceProvider';
10
+ import { useOrganisations } from '../../hooks/useOrganisations';
10
11
  import { TEST_FIXTURES } from '../../__tests__/fixtures/test-data';
11
12
 
12
13
  // Mock the debug logger
@@ -16,30 +17,68 @@ vi.mock('../../utils/debugLogger', () => ({
16
17
  },
17
18
  }));
18
19
 
20
+ // Mock setOrganisationContext
21
+ vi.mock('../../utils/context/organisationContext', () => ({
22
+ setOrganisationContext: vi.fn().mockResolvedValue(undefined),
23
+ }));
24
+
25
+ // Create mock user and session
26
+ const mockUser = {
27
+ id: '123e4567-e89b-12d3-a456-426614174001', // Valid UUID format
28
+ email: 'test@example.com',
29
+ } as any;
30
+
31
+ const mockSession = {
32
+ access_token: 'test-token',
33
+ refresh_token: 'test-refresh-token',
34
+ user: mockUser,
35
+ expires_at: Date.now() + 3600000,
36
+ } as any;
37
+
19
38
  // Create mock Supabase client
20
- const createMockSupabaseClient = () => ({
21
- from: vi.fn(() => ({
22
- select: vi.fn(() => ({
23
- eq: vi.fn(() => ({
24
- data: [
25
- {
26
- organisation_id: 'org-1',
27
- organisation_name: 'Test Organisation 1',
28
- role: 'admin',
29
- is_primary: true,
30
- },
31
- {
32
- organisation_id: 'org-2',
33
- organisation_name: 'Test Organisation 2',
34
- role: 'user',
35
- is_primary: false,
36
- },
37
- ],
38
- error: null,
39
- })),
40
- })),
41
- })),
42
- });
39
+ const createMockSupabaseClient = () => {
40
+ const orgId = '123e4567-e89b-12d3-a456-426614174000'; // Valid UUID format
41
+ const userId = '123e4567-e89b-12d3-a456-426614174001'; // Valid UUID format
42
+
43
+ return {
44
+ rpc: vi.fn().mockResolvedValue({
45
+ data: [
46
+ {
47
+ user_id: userId,
48
+ organisation_id: orgId,
49
+ role: 'org_admin',
50
+ status: 'active',
51
+ },
52
+ ],
53
+ error: null,
54
+ }),
55
+ from: vi.fn((table: string) => {
56
+ if (table === 'organisations') {
57
+ return {
58
+ select: vi.fn().mockResolvedValue({
59
+ data: [
60
+ {
61
+ id: orgId,
62
+ name: 'Test Organisation 1',
63
+ display_name: 'Test Organisation 1',
64
+ subscription_tier: 'basic',
65
+ settings: {},
66
+ is_active: true,
67
+ parent_id: null,
68
+ created_at: '2023-01-01T00:00:00Z',
69
+ updated_at: '2023-01-01T00:00:00Z',
70
+ },
71
+ ],
72
+ error: null,
73
+ }),
74
+ };
75
+ }
76
+ return {
77
+ select: vi.fn().mockResolvedValue({ data: [], error: null }),
78
+ };
79
+ }),
80
+ };
81
+ };
43
82
 
44
83
  // Test component that uses the organisation context
45
84
  const TestComponent = () => {
@@ -50,7 +89,7 @@ const TestComponent = () => {
50
89
  <div data-testid="organisations-count">{org.organisations.length}</div>
51
90
  <div data-testid="isLoading">{org.isLoading ? 'true' : 'false'}</div>
52
91
  <div data-testid="error">{org.error?.message || 'no-error'}</div>
53
- <div data-testid="selectedOrg">{org.selectedOrganisation?.organisation_name || 'no-org'}</div>
92
+ <div data-testid="selectedOrg">{org.selectedOrganisation?.name || org.selectedOrganisation?.display_name || 'no-org'}</div>
54
93
  <div data-testid="hasValidContext">{org.hasValidOrganisationContext ? 'true' : 'false'}</div>
55
94
  <div data-testid="hasSetSelectedOrg">{typeof org.setSelectedOrganisation === 'function' ? 'true' : 'false'}</div>
56
95
  <div data-testid="hasRefreshOrg">{typeof org.refreshOrganisations === 'function' ? 'true' : 'false'}</div>
@@ -62,8 +101,8 @@ const TestComponent = () => {
62
101
  const TestWrapper = ({
63
102
  children,
64
103
  supabaseClient,
65
- user = null,
66
- session = null
104
+ user = mockUser,
105
+ session = mockSession
67
106
  }: {
68
107
  children: React.ReactNode;
69
108
  supabaseClient?: any;
@@ -71,9 +110,9 @@ const TestWrapper = ({
71
110
  session?: any;
72
111
  }) => {
73
112
  return (
74
- <OrganisationProvider supabaseClient={supabaseClient} user={user} session={session}>
113
+ <OrganisationServiceProvider supabaseClient={supabaseClient || createMockSupabaseClient()} user={user} session={session}>
75
114
  {children}
76
- </OrganisationProvider>
115
+ </OrganisationServiceProvider>
77
116
  );
78
117
  };
79
118
 
@@ -86,7 +125,7 @@ describe('OrganisationProvider', () => {
86
125
  });
87
126
 
88
127
  describe('Rendering', () => {
89
- it('renders without crashing', () => {
128
+ it('renders without crashing', async () => {
90
129
  render(
91
130
  <TestWrapper supabaseClient={mockSupabaseClient}>
92
131
  <TestComponent />
@@ -94,7 +133,12 @@ describe('OrganisationProvider', () => {
94
133
  );
95
134
 
96
135
  expect(screen.getByTestId('test-component')).toBeInTheDocument();
97
- expect(screen.getByTestId('organisations-count')).toHaveTextContent('1');
136
+
137
+ // Wait for organisations to load
138
+ await waitFor(() => {
139
+ expect(screen.getByTestId('organisations-count')).toHaveTextContent('1');
140
+ }, { timeout: 3000 });
141
+
98
142
  expect(screen.getByTestId('isLoading')).toHaveTextContent('false');
99
143
  expect(screen.getByTestId('error')).toHaveTextContent('no-error');
100
144
  });
@@ -111,18 +155,24 @@ describe('OrganisationProvider', () => {
111
155
  });
112
156
 
113
157
  describe('Context Values', () => {
114
- it('provides all required context values', () => {
158
+ it('provides all required context values', async () => {
115
159
  render(
116
160
  <TestWrapper supabaseClient={mockSupabaseClient}>
117
161
  <TestComponent />
118
162
  </TestWrapper>
119
163
  );
120
164
 
165
+ // Wait for organisations to load and selected organisation to be set
166
+ await waitFor(() => {
167
+ expect(screen.getByTestId('organisations-count')).toHaveTextContent('1');
168
+ expect(screen.getByTestId('selectedOrg')).not.toHaveTextContent('no-org');
169
+ }, { timeout: 3000 });
170
+
121
171
  expect(screen.getByTestId('organisations-count')).toHaveTextContent('1');
122
172
  expect(screen.getByTestId('isLoading')).toHaveTextContent('false');
123
173
  expect(screen.getByTestId('error')).toHaveTextContent('no-error');
124
- expect(screen.getByTestId('selectedOrg')).toHaveTextContent('no-org');
125
- expect(screen.getByTestId('hasValidContext')).toHaveTextContent('false');
174
+ expect(screen.getByTestId('selectedOrg')).not.toHaveTextContent('no-org');
175
+ expect(screen.getByTestId('hasValidContext')).toHaveTextContent('true');
126
176
  expect(screen.getByTestId('hasSetSelectedOrg')).toHaveTextContent('true');
127
177
  expect(screen.getByTestId('hasRefreshOrg')).toHaveTextContent('true');
128
178
  });
@@ -158,7 +208,8 @@ describe('OrganisationProvider', () => {
158
208
  );
159
209
 
160
210
  expect(screen.getByTestId('test-component')).toBeInTheDocument();
161
- expect(screen.getByTestId('organisations-count')).toHaveTextContent('1');
211
+ // Without supabase client, organisations won't load, so count should be 0
212
+ expect(screen.getByTestId('organisations-count')).toHaveTextContent('0');
162
213
  });
163
214
 
164
215
  it('handles missing user', () => {
@@ -6,7 +6,7 @@
6
6
  import React from 'react';
7
7
  import { render, screen, waitFor } from '@testing-library/react';
8
8
  import { vi, describe, it, expect } from 'vitest';
9
- import { UnifiedAuthProvider, useUnifiedAuth } from '../UnifiedAuthProvider';
9
+ import { UnifiedAuthProvider, useUnifiedAuth } from '../services/UnifiedAuthProvider';
10
10
 
11
11
  // Mock the debug logger
12
12
  vi.mock('../../utils/debugLogger', () => ({
@@ -15,11 +15,35 @@ vi.mock('../../utils/debugLogger', () => ({
15
15
  },
16
16
  }));
17
17
 
18
+ // Create mock user and session
19
+ const mockUser = {
20
+ id: 'test-user-id',
21
+ email: 'test@example.com',
22
+ user_metadata: {},
23
+ app_metadata: {},
24
+ } as any;
25
+
26
+ const mockSession = {
27
+ access_token: 'test-token',
28
+ refresh_token: 'test-refresh-token',
29
+ user: mockUser,
30
+ expires_at: Date.now() + 3600000,
31
+ } as any;
32
+
18
33
  // Create mock Supabase client
19
34
  const createMockSupabaseClient = () => ({
20
35
  auth: {
21
- getSession: vi.fn(),
22
- onAuthStateChange: vi.fn(),
36
+ getSession: vi.fn().mockResolvedValue({
37
+ data: { session: mockSession },
38
+ error: null
39
+ }),
40
+ getUser: vi.fn().mockResolvedValue({
41
+ data: { user: mockUser },
42
+ error: null
43
+ }),
44
+ onAuthStateChange: vi.fn().mockReturnValue({
45
+ data: { subscription: { unsubscribe: vi.fn() } }
46
+ }),
23
47
  signInWithPassword: vi.fn(),
24
48
  signUp: vi.fn(),
25
49
  signOut: vi.fn(),
@@ -47,12 +71,22 @@ const TestComponent = () => {
47
71
  };
48
72
 
49
73
  describe('UnifiedAuthProvider', () => {
50
- const mockSupabaseClient = createMockSupabaseClient();
74
+ let mockSupabaseClient: ReturnType<typeof createMockSupabaseClient>;
75
+ const defaultProps = {
76
+ idleTimeoutMs: 30 * 60 * 1000,
77
+ warnBeforeMs: 60 * 1000,
78
+ onIdleLogout: vi.fn(),
79
+ };
80
+
81
+ beforeEach(() => {
82
+ // Create a fresh mock client for each test
83
+ mockSupabaseClient = createMockSupabaseClient();
84
+ });
51
85
 
52
86
  describe('Rendering', () => {
53
87
  it('renders without crashing', () => {
54
88
  render(
55
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
89
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} {...defaultProps}>
56
90
  <TestComponent />
57
91
  </UnifiedAuthProvider>
58
92
  );
@@ -62,7 +96,7 @@ describe('UnifiedAuthProvider', () => {
62
96
 
63
97
  it('renders with custom app name', () => {
64
98
  render(
65
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Custom App">
99
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Custom App" {...defaultProps}>
66
100
  <TestComponent />
67
101
  </UnifiedAuthProvider>
68
102
  );
@@ -84,15 +118,15 @@ describe('UnifiedAuthProvider', () => {
84
118
  describe('Context Values', () => {
85
119
  it('provides all required context values', async () => {
86
120
  render(
87
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
121
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Test App" {...defaultProps}>
88
122
  <TestComponent />
89
123
  </UnifiedAuthProvider>
90
124
  );
91
125
 
92
- // Wait for services to initialize
126
+ // Wait for services to initialize and user/session to be loaded
93
127
  await waitFor(() => {
94
- expect(screen.getByTestId('test-component')).toBeInTheDocument();
95
- });
128
+ expect(screen.getByTestId('hasUser')).toHaveTextContent('true');
129
+ }, { timeout: 3000 });
96
130
 
97
131
  expect(screen.getByTestId('hasUser')).toHaveTextContent('true');
98
132
  expect(screen.getByTestId('hasSession')).toHaveTextContent('true');
@@ -148,7 +182,7 @@ describe('UnifiedAuthProvider', () => {
148
182
 
149
183
  it('uses default configuration', () => {
150
184
  render(
151
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
185
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} {...defaultProps}>
152
186
  <TestComponent />
153
187
  </UnifiedAuthProvider>
154
188
  );
@@ -158,7 +192,7 @@ describe('UnifiedAuthProvider', () => {
158
192
  });
159
193
 
160
194
  describe('[integration] Provider Composition', () => {
161
- it('composes with child providers without errors', () => {
195
+ it('composes with child providers without errors', async () => {
162
196
  const TestCompositionComponent = () => {
163
197
  const auth = useUnifiedAuth();
164
198
 
@@ -173,16 +207,20 @@ describe('UnifiedAuthProvider', () => {
173
207
  };
174
208
 
175
209
  render(
176
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
210
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Test App" {...defaultProps}>
177
211
  <TestCompositionComponent />
178
212
  </UnifiedAuthProvider>
179
213
  );
180
214
 
181
215
  expect(screen.getByTestId('composition-success')).toHaveTextContent('composed');
182
- expect(screen.getByTestId('has-all-contexts')).toHaveTextContent('yes');
216
+
217
+ // Wait for user and session to be loaded
218
+ await waitFor(() => {
219
+ expect(screen.getByTestId('has-all-contexts')).toHaveTextContent('yes');
220
+ }, { timeout: 3000 });
183
221
  });
184
222
 
185
- it('provides complete unified context', () => {
223
+ it('provides complete unified context', async () => {
186
224
  const TestCompleteContextComponent = () => {
187
225
  const auth = useUnifiedAuth();
188
226
 
@@ -198,11 +236,16 @@ describe('UnifiedAuthProvider', () => {
198
236
  };
199
237
 
200
238
  render(
201
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
239
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Test App" {...defaultProps}>
202
240
  <TestCompleteContextComponent />
203
241
  </UnifiedAuthProvider>
204
242
  );
205
243
 
244
+ // Wait for user and session to be loaded
245
+ await waitFor(() => {
246
+ expect(screen.getByTestId('user-context')).toHaveTextContent('present');
247
+ }, { timeout: 3000 });
248
+
206
249
  expect(screen.getByTestId('user-context')).toHaveTextContent('present');
207
250
  expect(screen.getByTestId('session-context')).toHaveTextContent('present');
208
251
  expect(screen.getByTestId('organisation-context')).toHaveTextContent('missing');
@@ -368,7 +411,7 @@ describe('UnifiedAuthProvider', () => {
368
411
  });
369
412
 
370
413
  describe('[integration] Hook Integration', () => {
371
- it('integrates useUnifiedAuth with all contexts', () => {
414
+ it('integrates useUnifiedAuth with all contexts', async () => {
372
415
  const TestHookIntegrationComponent = () => {
373
416
  const auth = useUnifiedAuth();
374
417
 
@@ -385,11 +428,16 @@ describe('UnifiedAuthProvider', () => {
385
428
  };
386
429
 
387
430
  render(
388
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
431
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Test App" {...defaultProps}>
389
432
  <TestHookIntegrationComponent />
390
433
  </UnifiedAuthProvider>
391
434
  );
392
435
 
436
+ // Wait for user and session to be loaded
437
+ await waitFor(() => {
438
+ expect(screen.getByTestId('hook-access')).toHaveTextContent('full');
439
+ }, { timeout: 3000 });
440
+
393
441
  expect(screen.getByTestId('hook-access')).toHaveTextContent('full');
394
442
  expect(screen.getByTestId('hook-methods')).toHaveTextContent('complete');
395
443
  });
@@ -427,7 +475,7 @@ describe('UnifiedAuthProvider', () => {
427
475
  expect(screen.getByTestId('user-stable')).toHaveTextContent('stable');
428
476
  });
429
477
 
430
- it('handles concurrent hook usage', () => {
478
+ it('handles concurrent hook usage', async () => {
431
479
  const TestConcurrentComponent = () => {
432
480
  const auth = useUnifiedAuth();
433
481
 
@@ -446,13 +494,17 @@ describe('UnifiedAuthProvider', () => {
446
494
  };
447
495
 
448
496
  render(
449
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient}>
497
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Test App" {...defaultProps}>
450
498
  <TestConcurrentComponent />
451
499
  </UnifiedAuthProvider>
452
500
  );
453
501
 
454
502
  expect(screen.getByTestId('concurrent-safe')).toHaveTextContent('safe');
455
- expect(screen.getByTestId('all-reads')).toHaveTextContent('success');
503
+
504
+ // Wait for user and session to be loaded
505
+ await waitFor(() => {
506
+ expect(screen.getByTestId('all-reads')).toHaveTextContent('success');
507
+ }, { timeout: 3000 });
456
508
  });
457
509
  });
458
510
 
@@ -485,7 +537,7 @@ describe('UnifiedAuthProvider', () => {
485
537
  expect(screen.getByTestId('app-name-consistent')).toHaveTextContent('consistent');
486
538
  });
487
539
 
488
- it('configures RBAC features when enabled', () => {
540
+ it('configures RBAC features when enabled', async () => {
489
541
  const TestRBACConfigComponent = () => {
490
542
  const auth = useUnifiedAuth();
491
543
 
@@ -502,12 +554,16 @@ describe('UnifiedAuthProvider', () => {
502
554
  };
503
555
 
504
556
  render(
505
- <UnifiedAuthProvider supabaseClient={mockSupabaseClient} enableRBAC={true}>
557
+ <UnifiedAuthProvider supabaseClient={mockSupabaseClient} appName="Test App" enableRBAC={true} {...defaultProps}>
506
558
  <TestRBACConfigComponent />
507
559
  </UnifiedAuthProvider>
508
560
  );
509
561
 
510
- expect(screen.getByTestId('rbac-enabled')).toHaveTextContent('enabled');
562
+ // Wait for user and session to be loaded
563
+ await waitFor(() => {
564
+ expect(screen.getByTestId('rbac-enabled')).toHaveTextContent('enabled');
565
+ }, { timeout: 3000 });
566
+
511
567
  expect(screen.getByTestId('session-available')).toBeInTheDocument();
512
568
  });
513
569
 
@@ -12,6 +12,3 @@ export * from './services/EventServiceProvider';
12
12
  export * from './services/OrganisationServiceProvider';
13
13
  export * from './services/InactivityServiceProvider';
14
14
  export * from './services/AuthServiceProvider';
15
-
16
- // RBAC Provider - Use @jmruthers/pace-core/rbac instead
17
- // Note: RBAC functionality has been moved to the dedicated RBAC module