@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
@@ -33,12 +33,19 @@ const mockUser = {
33
33
  }
34
34
  };
35
35
 
36
- vi.mock('../../../providers/UnifiedAuthProvider', () => ({
37
- useUnifiedAuth: () => ({
38
- user: mockUser,
39
- signOut: mockSignOut,
40
- updatePassword: mockUpdatePassword
41
- })
36
+ const mockUseUnifiedAuthFn = vi.fn(() => ({
37
+ user: mockUser,
38
+ signOut: mockSignOut,
39
+ updatePassword: mockUpdatePassword,
40
+ supabase: {},
41
+ selectedOrganisation: mockOrganisation,
42
+ selectedEvent: null,
43
+ isLoading: false,
44
+ error: null,
45
+ }));
46
+ vi.mock('../../providers/services/UnifiedAuthProvider', () => ({
47
+ useUnifiedAuth: () => mockUseUnifiedAuthFn(),
48
+ UnifiedAuthProvider: ({ children }: { children: React.ReactNode }) => <>{children}</>,
42
49
  }));
43
50
 
44
51
  // Mock OrganisationProvider
@@ -80,48 +87,164 @@ const mockOrganisationContext = {
80
87
  isOrganisationSecure: vi.fn().mockReturnValue(true)
81
88
  };
82
89
 
83
- vi.mock('../../../hooks/useOrganisations', () => ({
84
- useOrganisations: () => mockOrganisationContext
90
+ // Mock useOrganisationService FIRST (used internally by useOrganisations)
91
+ vi.mock('../../hooks/services/useOrganisationService', () => ({
92
+ useOrganisationService: () => ({
93
+ getSelectedOrganisation: () => mockOrganisation,
94
+ getOrganisations: () => [mockOrganisation],
95
+ getUserMemberships: () => mockOrganisationContext.userMemberships,
96
+ isLoading: () => false,
97
+ getError: () => null,
98
+ hasValidOrganisationContext: () => true,
99
+ setSelectedOrganisation: vi.fn(),
100
+ switchOrganisation: vi.fn().mockResolvedValue(undefined),
101
+ getUserRole: vi.fn().mockReturnValue('member'),
102
+ validateOrganisationAccess: vi.fn().mockReturnValue(true),
103
+ ensureOrganisationContext: vi.fn().mockReturnValue(mockOrganisation),
104
+ refreshOrganisations: vi.fn().mockResolvedValue(undefined),
105
+ getPrimaryOrganisation: vi.fn().mockReturnValue(mockOrganisation),
106
+ isOrganisationSecure: vi.fn().mockReturnValue(true),
107
+ })
85
108
  }));
86
109
 
87
- // Mock useEvents hook (used by useEventTheme)
88
- vi.mock('../../../hooks/useEvents', () => ({
89
- useEvents: vi.fn(() => ({
90
- selectedEvent: { event_id: 'event-123' },
91
- events: [],
92
- isLoading: false,
93
- error: null,
94
- })),
110
+ // Mock useOrganisations AFTER useOrganisationService
111
+ // Use the same path pattern as PaceAppLayout.test.tsx
112
+ vi.mock('../../hooks/useOrganisations', () => ({
113
+ useOrganisations: vi.fn(() => mockOrganisationContext)
114
+ }));
115
+
116
+ // Mock useEventService hook FIRST (it's imported by useEvents)
117
+ // Must be hoisted to be available when useEvents tries to import it
118
+ const mockUseEventService = vi.hoisted(() => vi.fn(() => ({
119
+ getEvent: vi.fn(),
120
+ getEvents: vi.fn(() => []),
121
+ createEvent: vi.fn(),
122
+ updateEvent: vi.fn(),
123
+ deleteEvent: vi.fn(),
124
+ getSelectedEvent: vi.fn(() => null),
125
+ setSelectedEvent: vi.fn(),
126
+ isLoading: vi.fn(() => false),
127
+ getError: vi.fn(() => null),
128
+ refreshEvents: vi.fn(),
129
+ clearEventSelection: vi.fn(),
130
+ subscribe: vi.fn(() => vi.fn()),
131
+ })));
132
+
133
+ // Mock useEventService hook - path is ../../hooks/services/useEventService from PaceAppLayout
134
+ vi.mock('../../hooks/services/useEventService', () => ({
135
+ useEventService: mockUseEventService,
95
136
  }));
96
137
 
138
+ // Don't mock useEvents - let it use the mocked useEventService
139
+ // The real useEvents will work because useEventService is mocked
140
+
97
141
  // Mock useEventTheme to avoid EventServiceProvider requirement
98
- vi.mock('../../../hooks/useEventTheme', () => ({
142
+ vi.mock('../../hooks/useEventTheme', () => ({
99
143
  useEventTheme: vi.fn(),
100
144
  }));
101
145
 
102
- // Mock the new RBAC system for performance testing
103
- const mockIsPermitted = vi.fn().mockResolvedValue(true);
104
- const mockCheckPermission = vi.fn().mockResolvedValue(true);
105
- const mockIsSuperAdmin = vi.fn().mockResolvedValue(false);
146
+ // Mock logger
147
+ // Note: Must define mock inside factory to avoid hoisting issues
148
+ vi.mock('../../utils/core/logger', () => {
149
+ const mockLogger = {
150
+ debug: vi.fn(),
151
+ info: vi.fn(),
152
+ warn: vi.fn(),
153
+ error: vi.fn(),
154
+ createScopedLogger: vi.fn(() => mockLogger),
155
+ configure: vi.fn(),
156
+ };
157
+
158
+ return {
159
+ logger: mockLogger,
160
+ createLogger: () => mockLogger,
161
+ Logger: {
162
+ debug: vi.fn(),
163
+ info: vi.fn(),
164
+ warn: vi.fn(),
165
+ error: vi.fn(),
166
+ configure: vi.fn(),
167
+ createScopedLogger: vi.fn(() => mockLogger),
168
+ },
169
+ LogLevel: {
170
+ DEBUG: 0,
171
+ INFO: 1,
172
+ WARN: 2,
173
+ ERROR: 3,
174
+ },
175
+ };
176
+ });
177
+
178
+ // Mock EventServiceProvider - provide a context that works with the mocked useEventService
179
+ vi.mock('../../providers/services/EventServiceProvider', () => {
180
+ const React = require('react');
181
+
182
+ // Create a context that provides the mock service
183
+ const mockServiceInstance = mockUseEventService();
184
+ const mockContextValue = {
185
+ eventService: mockServiceInstance,
186
+ };
187
+
188
+ // Create a context that will be used by useEventService
189
+ const MockEventServiceContext = React.createContext(mockContextValue);
190
+
191
+ return {
192
+ EventServiceProvider: ({ children }: { children: React.ReactNode }) => {
193
+ return React.createElement(MockEventServiceContext.Provider, { value: mockContextValue }, children);
194
+ },
195
+ EventServiceContext: MockEventServiceContext,
196
+ useEventService: mockUseEventService,
197
+ };
198
+ });
199
+
200
+ // Define mocks using vi.hoisted() so they're available in hoisted vi.mock factories
201
+ // Note: Cannot export hoisted variables directly, so we define them and access directly in tests
202
+ const mockIsPermitted = vi.hoisted(() => vi.fn().mockResolvedValue(true));
203
+ const mockCheckPermission = vi.hoisted(() => vi.fn().mockResolvedValue(true));
204
+ const mockHasPermissionRBAC = vi.hoisted(() => vi.fn().mockResolvedValue(true));
205
+ const mockIsSuperAdmin = vi.hoisted(() => vi.fn().mockResolvedValue(false));
206
+
207
+ // Mock Supabase client for RBAC engine
208
+ // Note: Must define mock inside factory to avoid hoisting issues
209
+ vi.mock('@supabase/supabase-js', () => {
210
+ const createMockQueryBuilder = () => ({
211
+ select: vi.fn().mockReturnThis(),
212
+ eq: vi.fn().mockReturnThis(),
213
+ single: vi.fn().mockResolvedValue({ data: null, error: null }),
214
+ });
106
215
 
107
- vi.mock('../../../rbac/api', () => ({
108
- isPermitted: vi.fn().mockResolvedValue(true),
216
+ const mockSupabaseClient = {
217
+ from: vi.fn(() => createMockQueryBuilder()),
218
+ rpc: vi.fn().mockResolvedValue({ data: null, error: null }),
219
+ };
220
+
221
+ return {
222
+ createClient: vi.fn(() => mockSupabaseClient),
223
+ };
224
+ });
225
+
226
+ // Mock the new RBAC system for performance testing
227
+ // Reference hoisted mocks - they're available when factory runs
228
+ vi.mock('../../rbac/api', () => ({
229
+ isPermitted: mockIsPermitted,
230
+ isPermittedCached: vi.fn().mockResolvedValue(true),
109
231
  getPermissionMap: vi.fn().mockResolvedValue({}),
110
232
  getAccessLevel: vi.fn().mockResolvedValue('viewer'),
111
- isSuperAdmin: (...args: any[]) => mockIsSuperAdmin(...args),
233
+ isSuperAdmin: mockIsSuperAdmin,
112
234
  setupRBAC: vi.fn()
113
235
  }));
114
236
 
115
237
  // Mock RBAC hooks
116
- const mockHasPermissionRBAC = vi.fn().mockResolvedValue(true);
117
- const mockUseCan = vi.fn(() => ({
238
+ // Reference hoisted mocks - they're available when factory runs
239
+ // Mock useCan hook - create a mock function that can be controlled in tests
240
+ const mockUseCanFn = vi.fn(() => ({
118
241
  can: true,
119
242
  isLoading: false,
120
243
  error: null,
121
244
  refetch: vi.fn().mockResolvedValue(undefined),
122
245
  }));
123
246
 
124
- vi.mock('../../../rbac/hooks', () => ({
247
+ vi.mock('../../rbac/hooks', () => ({
125
248
  useRBAC: vi.fn(() => ({
126
249
  hasPermission: mockHasPermissionRBAC,
127
250
  isLoading: false,
@@ -134,7 +257,7 @@ vi.mock('../../../rbac/hooks', () => ({
134
257
  eventRoles: [],
135
258
  permissionMap: {},
136
259
  })),
137
- useCan: (...args: any[]) => mockUseCan(...args),
260
+ useCan: (...args: any[]) => mockUseCanFn(...args),
138
261
  useResolvedScope: vi.fn(() => ({
139
262
  resolvedScope: { organisationId: 'org-123', eventId: 'event-123', appId: 'app-123' },
140
263
  isLoading: false,
@@ -143,7 +266,8 @@ vi.mock('../../../rbac/hooks', () => ({
143
266
  }));
144
267
 
145
268
  // Mock child components
146
- vi.mock('../../Header', () => ({
269
+ // Mock Header component - PaceAppLayout imports from '../Header'
270
+ vi.mock('../Header', () => ({
147
271
  Header: vi.fn(({ appName, user, onSignOut, onChangePassword, onNavigate, currentPath, logo, userMenu, actions, navItems }) => (
148
272
  <header data-testid="mock-header" role="banner">
149
273
  <div data-testid="app-name">{appName ?? 'Test App'}</div>
@@ -194,7 +318,7 @@ vi.mock('../../Header', () => ({
194
318
  ))
195
319
  }));
196
320
 
197
- vi.mock('../../Footer', () => ({
321
+ vi.mock('../Footer', () => ({
198
322
  Footer: vi.fn(() => <footer data-testid="mock-footer" role="contentinfo">Mock Footer</footer>)
199
323
  }));
200
324
 
@@ -403,7 +527,7 @@ const TestWrapper = ({ children }: { children: React.ReactNode }) => (
403
527
  }, { timeout: 6000 });
404
528
 
405
529
  it('handles permission check errors efficiently', async () => {
406
- mockUseCan.mockReturnValue({
530
+ mockUseCanFn.mockReturnValue({
407
531
  can: false,
408
532
  isLoading: false,
409
533
  error: new Error('Permission check failed'),
@@ -804,7 +928,6 @@ const TestWrapper = ({ children }: { children: React.ReactNode }) => (
804
928
  '/nav-1': 'page-1',
805
929
  '/nav-2': 'page-2'
806
930
  }}
807
- filterNavigationByPermissions={true}
808
931
  />
809
932
  </TestWrapper>
810
933
  );
@@ -17,10 +17,50 @@ vi.mock('react-router-dom', async () => {
17
17
  };
18
18
  });
19
19
 
20
- // Mock UnifiedAuthProvider
21
- const mockSignOut = vi.fn().mockResolvedValue({ error: null });
22
- const mockUpdatePassword = vi.fn().mockResolvedValue({ error: null });
23
- const mockUser = {
20
+ // Create shared mock Supabase client using hoisted function
21
+ const createMockSupabaseClient = vi.hoisted(() => {
22
+ const createMockQueryBuilder = () => {
23
+ const queryBuilder = {
24
+ select: vi.fn().mockReturnThis(),
25
+ eq: vi.fn().mockReturnThis(),
26
+ is: vi.fn().mockReturnThis(),
27
+ lte: vi.fn().mockReturnThis(),
28
+ or: vi.fn().mockReturnThis(),
29
+ limit: vi.fn().mockResolvedValue({ data: [], error: null }), // Default to empty array (not super admin)
30
+ single: vi.fn().mockResolvedValue({ data: null, error: null }),
31
+ maybeSingle: vi.fn().mockResolvedValue({ data: null, error: null }),
32
+ };
33
+ return queryBuilder;
34
+ };
35
+
36
+ // Return a function that creates a new mock client instance each time
37
+ return () => ({
38
+ from: vi.fn(() => createMockQueryBuilder()),
39
+ rpc: vi.fn().mockResolvedValue({ data: false, error: null }),
40
+ auth: {
41
+ getUser: vi.fn().mockResolvedValue({ data: { user: null }, error: null }),
42
+ getSession: vi.fn().mockResolvedValue({ data: { session: null }, error: null }),
43
+ },
44
+ });
45
+ });
46
+
47
+ // Mock OrganisationProvider - hoist so it's available in mock factories
48
+ const mockOrganisation = vi.hoisted(() => ({
49
+ id: 'test-org-id',
50
+ name: 'Test Organisation',
51
+ display_name: 'Test Organisation',
52
+ description: 'Test organisation for testing',
53
+ subscription_tier: 'basic',
54
+ settings: {},
55
+ is_active: true,
56
+ created_at: '2023-01-01T00:00:00Z',
57
+ updated_at: '2023-01-01T00:00:00Z'
58
+ }));
59
+
60
+ // Mock UnifiedAuthProvider - hoist these so they're available in mock factories
61
+ const mockSignOut = vi.hoisted(() => vi.fn().mockResolvedValue({ error: null }));
62
+ const mockUpdatePassword = vi.hoisted(() => vi.fn().mockResolvedValue({ error: null }));
63
+ const mockUser = vi.hoisted(() => ({
24
64
  id: 'test-user-id',
25
65
  email: 'test@example.com',
26
66
  user_metadata: {
@@ -29,41 +69,34 @@ const mockUser = {
29
69
  eventId: 'test-event-456',
30
70
  appId: 'test-app-789'
31
71
  }
32
- };
72
+ }));
33
73
 
34
- vi.mock('../../../providers/UnifiedAuthProvider', () => ({
35
- useUnifiedAuth: () => ({
74
+ const mockUseUnifiedAuthFn = vi.hoisted(() => vi.fn(() => {
75
+ // Create a new mock client instance each time to avoid shared state issues
76
+ const mockSupabase = createMockSupabaseClient();
77
+ return {
36
78
  user: mockUser,
37
79
  signOut: mockSignOut,
38
80
  updatePassword: mockUpdatePassword,
39
81
  isAuthenticated: true,
40
82
  authLoading: false,
41
83
  authError: null,
42
- supabase: null,
84
+ supabase: mockSupabase, // Use the shared mock client
43
85
  appName: 'Test App',
44
86
  signIn: vi.fn().mockResolvedValue({ error: null }),
45
87
  signUp: vi.fn().mockResolvedValue({ error: null }),
46
88
  resetPassword: vi.fn().mockResolvedValue({ error: null }),
47
89
  refreshSession: vi.fn().mockResolvedValue({ error: null }),
48
- // RBAC properties removed - use useRBAC() hook instead
49
- selectedOrganisationId: 'test-org-id',
90
+ selectedOrganisation: mockOrganisation,
91
+ selectedEvent: null,
50
92
  isLoading: false,
51
93
  hasErrors: false
52
- })
94
+ };
95
+ }));
96
+ vi.mock('../../providers/services/UnifiedAuthProvider', () => ({
97
+ useUnifiedAuth: () => mockUseUnifiedAuthFn(),
98
+ UnifiedAuthProvider: ({ children }: { children: React.ReactNode }) => <>{children}</>,
53
99
  }));
54
-
55
- // Mock OrganisationProvider
56
- const mockOrganisation = {
57
- id: 'test-org-id',
58
- name: 'Test Organisation',
59
- display_name: 'Test Organisation',
60
- description: 'Test organisation for testing',
61
- subscription_tier: 'basic',
62
- settings: {},
63
- is_active: true,
64
- created_at: '2023-01-01T00:00:00Z',
65
- updated_at: '2023-01-01T00:00:00Z'
66
- };
67
100
 
68
101
  const mockOrganisationContext = {
69
102
  selectedOrganisation: mockOrganisation,
@@ -91,42 +124,77 @@ const mockOrganisationContext = {
91
124
  isOrganisationSecure: vi.fn().mockReturnValue(true)
92
125
  };
93
126
 
94
- vi.mock('../../../hooks/useOrganisations', () => ({
95
- useOrganisations: () => mockOrganisationContext
127
+ // Mock useOrganisationService FIRST (used internally by useOrganisations)
128
+ vi.mock('../../hooks/services/useOrganisationService', () => ({
129
+ useOrganisationService: () => ({
130
+ getSelectedOrganisation: () => mockOrganisation,
131
+ getOrganisations: () => [mockOrganisation],
132
+ getUserMemberships: () => mockOrganisationContext.userMemberships,
133
+ isLoading: () => false,
134
+ getError: () => null,
135
+ hasValidOrganisationContext: () => true,
136
+ setSelectedOrganisation: vi.fn(),
137
+ switchOrganisation: vi.fn().mockResolvedValue(undefined),
138
+ getUserRole: vi.fn().mockReturnValue('member'),
139
+ validateOrganisationAccess: vi.fn().mockReturnValue(true),
140
+ ensureOrganisationContext: vi.fn().mockReturnValue(mockOrganisation),
141
+ refreshOrganisations: vi.fn().mockResolvedValue(undefined),
142
+ getPrimaryOrganisation: vi.fn().mockReturnValue(mockOrganisation),
143
+ isOrganisationSecure: vi.fn().mockReturnValue(true),
144
+ })
96
145
  }));
97
146
 
98
- // Mock useEvents hook (used by useEventTheme)
99
- vi.mock('../../../hooks/useEvents', () => ({
100
- useEvents: vi.fn(() => ({
101
- selectedEvent: { event_id: 'event-123' },
102
- events: [],
103
- isLoading: false,
104
- error: null,
105
- })),
147
+ // Mock useOrganisations AFTER useOrganisationService
148
+ // Use the same path pattern as PaceAppLayout.test.tsx
149
+ vi.mock('../../hooks/useOrganisations', () => ({
150
+ useOrganisations: vi.fn(() => mockOrganisationContext)
106
151
  }));
107
152
 
108
- // Mock useEventTheme to avoid EventServiceProvider requirement
109
- vi.mock('../../../hooks/useEventTheme', () => ({
110
- useEventTheme: vi.fn(),
111
- }));
153
+ // Mock useEventService hook FIRST (it's imported by useEvents)
154
+ // Must be hoisted to be available when useEvents tries to import it
155
+ const mockUseEventService = vi.hoisted(() => vi.fn(() => ({
156
+ getEvent: vi.fn(),
157
+ getEvents: vi.fn(() => []),
158
+ createEvent: vi.fn(),
159
+ updateEvent: vi.fn(),
160
+ deleteEvent: vi.fn(),
161
+ getSelectedEvent: vi.fn(() => null),
162
+ setSelectedEvent: vi.fn(),
163
+ isLoading: vi.fn(() => false),
164
+ getError: vi.fn(() => null),
165
+ refreshEvents: vi.fn(),
166
+ clearEventSelection: vi.fn(),
167
+ subscribe: vi.fn(() => vi.fn()),
168
+ })));
112
169
 
113
- // Mock the new RBAC system for security testing
114
- const mockIsPermitted = vi.fn().mockResolvedValue(true);
115
- const mockCheckPermission = vi.fn().mockResolvedValue(true);
170
+ // Mock useEventService hook - path is ../../hooks/services/useEventService from PaceAppLayout
171
+ vi.mock('../../hooks/services/useEventService', () => ({
172
+ useEventService: mockUseEventService,
173
+ }));
116
174
 
117
- const mockIsSuperAdmin = vi.fn().mockResolvedValue(false);
175
+ // Don't mock useEvents - let it use the mocked useEventService
176
+ // The real useEvents will work because useEventService is mocked
118
177
 
119
- vi.mock('../../../rbac/api', () => ({
120
- isPermitted: vi.fn().mockResolvedValue(true),
121
- getPermissionMap: vi.fn().mockResolvedValue({}),
122
- getAccessLevel: vi.fn().mockResolvedValue('viewer'),
123
- isSuperAdmin: (...args: any[]) => mockIsSuperAdmin(...args),
124
- setupRBAC: vi.fn()
178
+ // Mock useEventTheme to avoid EventServiceProvider requirement
179
+ vi.mock('../../hooks/useEventTheme', () => ({
180
+ useEventTheme: vi.fn(),
125
181
  }));
126
182
 
127
- // Mock RBAC hooks
128
- const mockHasPermissionRBAC = vi.fn().mockResolvedValue(true);
129
- const mockUseRBAC = vi.fn(() => ({
183
+ // Define mocks using vi.hoisted() so they're available in hoisted vi.mock factories
184
+ // Note: Cannot export hoisted variables directly, so we define them and access directly in tests
185
+ const mockIsPermitted = vi.hoisted(() => vi.fn().mockResolvedValue(true));
186
+ const mockCheckPermission = vi.hoisted(() => vi.fn().mockResolvedValue(true));
187
+ const mockIsSuperAdmin = vi.hoisted(() => vi.fn().mockResolvedValue(false));
188
+
189
+ // Define RBAC hook mocks using vi.hoisted() so they're available in hoisted vi.mock factories
190
+ const mockHasPermissionRBAC = vi.hoisted(() => vi.fn().mockResolvedValue(true));
191
+ const mockUseCan = vi.hoisted(() => vi.fn(() => ({
192
+ can: true,
193
+ isLoading: false,
194
+ error: null,
195
+ refetch: vi.fn().mockResolvedValue(undefined),
196
+ })));
197
+ const mockUseRBAC = vi.hoisted(() => vi.fn(() => ({
130
198
  hasPermission: mockHasPermissionRBAC,
131
199
  isLoading: false,
132
200
  error: null,
@@ -137,18 +205,87 @@ const mockUseRBAC = vi.fn(() => ({
137
205
  organisationRoles: [],
138
206
  eventRoles: [],
139
207
  permissionMap: {},
140
- }));
208
+ })));
141
209
 
142
- const mockUseCan = vi.fn(() => ({
143
- can: true,
144
- isLoading: false,
145
- error: null,
146
- refetch: vi.fn().mockResolvedValue(undefined),
210
+ // Mock logger - must be hoisted to be available in vi.mock factory
211
+ const mockLogger = vi.hoisted(() => ({
212
+ debug: vi.fn(),
213
+ info: vi.fn(),
214
+ warn: vi.fn(),
215
+ error: vi.fn(),
216
+ configure: vi.fn(),
147
217
  }));
148
218
 
149
- vi.mock('../../../rbac/hooks', () => ({
150
- useRBAC: () => mockUseRBAC(),
151
- useCan: (...args: any[]) => mockUseCan(...args),
219
+ vi.mock('../../utils/core/logger', () => {
220
+ const logger = mockLogger;
221
+ return {
222
+ logger: logger,
223
+ createLogger: () => logger,
224
+ Logger: {
225
+ debug: vi.fn(),
226
+ info: vi.fn(),
227
+ warn: vi.fn(),
228
+ error: vi.fn(),
229
+ configure: vi.fn(),
230
+ createScopedLogger: vi.fn(() => logger),
231
+ },
232
+ LogLevel: {
233
+ DEBUG: 0,
234
+ INFO: 1,
235
+ WARN: 2,
236
+ ERROR: 3,
237
+ },
238
+ };
239
+ });
240
+
241
+ // Mock EventServiceProvider - provide a context that works with the mocked useEventService
242
+ vi.mock('../../providers/services/EventServiceProvider', () => {
243
+ const React = require('react');
244
+
245
+ // Create a context that provides the mock service
246
+ const mockServiceInstance = mockUseEventService();
247
+ const mockContextValue = {
248
+ eventService: mockServiceInstance,
249
+ };
250
+
251
+ // Create a context that will be used by useEventService
252
+ const MockEventServiceContext = React.createContext(mockContextValue);
253
+
254
+ return {
255
+ EventServiceProvider: ({ children }: { children: React.ReactNode }) => {
256
+ return React.createElement(MockEventServiceContext.Provider, { value: mockContextValue }, children);
257
+ },
258
+ EventServiceContext: MockEventServiceContext,
259
+ useEventService: mockUseEventService,
260
+ };
261
+ });
262
+
263
+ // Mock Supabase client for RBAC engine
264
+ // Use the hoisted mock client function to ensure consistency
265
+ vi.mock('@supabase/supabase-js', () => {
266
+ return {
267
+ createClient: vi.fn(() => createMockSupabaseClient()()), // Call the function to get the mock client
268
+ SupabaseClient: vi.fn(),
269
+ };
270
+ });
271
+
272
+ // Mock the new RBAC system for security testing
273
+ // Reference hoisted mocks - they're available when factory runs
274
+ vi.mock('../../rbac/api', () => {
275
+ return {
276
+ isPermitted: mockIsPermitted,
277
+ isPermittedCached: vi.fn().mockResolvedValue(true),
278
+ getPermissionMap: vi.fn().mockResolvedValue({}),
279
+ getAccessLevel: vi.fn().mockResolvedValue('viewer'),
280
+ isSuperAdmin: mockIsSuperAdmin,
281
+ setupRBAC: vi.fn(),
282
+ };
283
+ });
284
+
285
+ // Mock RBAC hooks - use hoisted mocks
286
+ vi.mock('../../rbac/hooks', () => ({
287
+ useRBAC: mockUseRBAC,
288
+ useCan: mockUseCan,
152
289
  useResolvedScope: vi.fn(() => ({
153
290
  resolvedScope: { organisationId: 'org-123', eventId: 'event-123', appId: 'app-123' },
154
291
  isLoading: false,
@@ -156,8 +293,18 @@ vi.mock('../../../rbac/hooks', () => ({
156
293
  })),
157
294
  }));
158
295
 
296
+ // Mock EventSelector to avoid useEventService requirement
297
+ vi.mock('../EventSelector', () => ({
298
+ EventSelector: vi.fn(({ placeholder, className, 'data-testid': testId }: any) => (
299
+ <div data-testid={testId || 'event-selector'} className={className}>
300
+ {placeholder || 'Select event'}
301
+ </div>
302
+ ))
303
+ }));
304
+
159
305
  // Mock child components
160
- vi.mock('../../Header', () => ({
306
+ // Mock Header component - PaceAppLayout imports from '../Header'
307
+ vi.mock('../Header', () => ({
161
308
  Header: vi.fn(({ appName, user, onSignOut, onChangePassword, onNavigate, currentPath, logo, userMenu, actions }) => (
162
309
  <header data-testid="mock-header" role="banner">
163
310
  <div data-testid="app-name">{appName ?? 'Test App'}</div>
@@ -202,7 +349,7 @@ vi.mock('../../Header', () => ({
202
349
  ))
203
350
  }));
204
351
 
205
- vi.mock('../../Footer', () => ({
352
+ vi.mock('../Footer', () => ({
206
353
  Footer: vi.fn(() => <footer data-testid="mock-footer" role="contentinfo">Mock Footer</footer>)
207
354
  }));
208
355
 
@@ -261,7 +408,7 @@ describe('PaceAppLayout Security', () => {
261
408
  });
262
409
 
263
410
  // Reset the mocked function
264
- const { isPermitted } = await import('../../../rbac/api');
411
+ const { isPermitted } = await import('../../rbac/api');
265
412
  vi.mocked(isPermitted).mockClear();
266
413
  vi.mocked(isPermitted).mockResolvedValue(true);
267
414
 
@@ -420,7 +567,6 @@ describe('PaceAppLayout Security', () => {
420
567
  <PaceAppLayout
421
568
  appName="Test App"
422
569
  enforcePermissions={true}
423
- filterNavigationByPermissions={true}
424
570
  routePermissions={{
425
571
  '/admin': 'delete',
426
572
  '/dashboard': 'read'
@@ -817,7 +963,7 @@ describe('PaceAppLayout Security', () => {
817
963
  };
818
964
 
819
965
  // Ensure the mock is properly set to allow access
820
- const { isPermitted } = await import('../../../rbac/api');
966
+ const { isPermitted } = await import('../../rbac/api');
821
967
  vi.mocked(isPermitted).mockClear();
822
968
  vi.mocked(isPermitted).mockResolvedValue(true);
823
969