@jmruthers/pace-core 0.5.193 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +7 -1
  3. package/cursor-rules/00-pace-core-compliance.mdc +299 -0
  4. package/cursor-rules/01-standards-compliance.mdc +244 -0
  5. package/cursor-rules/02-project-structure.mdc +200 -0
  6. package/cursor-rules/03-solid-principles.mdc +222 -0
  7. package/cursor-rules/04-testing-standards.mdc +268 -0
  8. package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
  9. package/cursor-rules/06-code-quality.mdc +309 -0
  10. package/cursor-rules/07-tech-stack-compliance.mdc +214 -0
  11. package/cursor-rules/08-markup-quality.mdc +452 -0
  12. package/cursor-rules/CHANGELOG.md +119 -0
  13. package/cursor-rules/README.md +192 -0
  14. package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-BPvc3Ka0.d.ts} +54 -0
  15. package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-BMRU8a1j.d.ts} +34 -2
  16. package/dist/{DataTable-5FU7IESH.js → DataTable-TPTKCX4D.js} +10 -9
  17. package/dist/{PublicPageProvider-C0Sm_e5k.d.ts → PublicPageProvider-DC6kCaqf.d.ts} +385 -261
  18. package/dist/{UnifiedAuthProvider-RGJTDE2C.js → UnifiedAuthProvider-CH6Z342H.js} +3 -3
  19. package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CVcTjx-d.d.ts} +29 -0
  20. package/dist/{api-N774RPUA.js → api-MVVQZLJI.js} +2 -2
  21. package/dist/{chunk-KNC55RTG.js → chunk-24UVZUZG.js} +90 -54
  22. package/dist/chunk-24UVZUZG.js.map +1 -0
  23. package/dist/{chunk-HWIIPPNI.js → chunk-2UOI2FG5.js} +20 -20
  24. package/dist/chunk-2UOI2FG5.js.map +1 -0
  25. package/dist/{chunk-E3SPN4VZ 5.js → chunk-3XC4CPTD.js} +4345 -3986
  26. package/dist/chunk-3XC4CPTD.js.map +1 -0
  27. package/dist/{chunk-7EQTDTTJ.js → chunk-6J4GEEJR.js} +172 -45
  28. package/dist/chunk-6J4GEEJR.js.map +1 -0
  29. package/dist/{chunk-6C4YBBJM 5.js → chunk-6SOIHG6Z.js} +1 -1
  30. package/dist/chunk-6SOIHG6Z.js.map +1 -0
  31. package/dist/{chunk-7FLMSG37.js → chunk-EHMR7VYL.js} +25 -25
  32. package/dist/chunk-EHMR7VYL.js.map +1 -0
  33. package/dist/{chunk-I7PSE6JW.js → chunk-F2IMUDXZ.js} +2 -75
  34. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  35. package/dist/{chunk-QWWZ5CAQ.js → chunk-FFQEQTNW.js} +7 -9
  36. package/dist/chunk-FFQEQTNW.js.map +1 -0
  37. package/dist/chunk-FMUCXFII.js +76 -0
  38. package/dist/chunk-FMUCXFII.js.map +1 -0
  39. package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
  40. package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
  41. package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
  42. package/dist/chunk-L4OXEN46.js.map +1 -0
  43. package/dist/{chunk-R77UEZ4E 3.js → chunk-M43Y4SSO.js} +1 -1
  44. package/dist/chunk-M43Y4SSO.js.map +1 -0
  45. package/dist/{chunk-IIELH4DL.js → chunk-MMZ7JXPU.js} +60 -223
  46. package/dist/chunk-MMZ7JXPU.js.map +1 -0
  47. package/dist/{chunk-NOAYCWCX 5.js → chunk-NECFR5MM.js} +394 -312
  48. package/dist/chunk-NECFR5MM.js.map +1 -0
  49. package/dist/{chunk-BC4IJKSL.js → chunk-SFZUDBL5.js} +40 -4
  50. package/dist/chunk-SFZUDBL5.js.map +1 -0
  51. package/dist/{chunk-XNXXZ43G.js → chunk-XWQCNGTQ.js} +748 -364
  52. package/dist/chunk-XWQCNGTQ.js.map +1 -0
  53. package/dist/components.d.ts +6 -6
  54. package/dist/components.js +15 -12
  55. package/dist/components.js.map +1 -1
  56. package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
  57. package/dist/hooks.d.ts +59 -126
  58. package/dist/hooks.js +19 -28
  59. package/dist/hooks.js.map +1 -1
  60. package/dist/index.d.ts +63 -16
  61. package/dist/index.js +23 -24
  62. package/dist/index.js.map +1 -1
  63. package/dist/providers.d.ts +21 -3
  64. package/dist/providers.js +2 -2
  65. package/dist/rbac/index.d.ts +146 -115
  66. package/dist/rbac/index.js +8 -11
  67. package/dist/theming/runtime.d.ts +1 -13
  68. package/dist/theming/runtime.js +1 -1
  69. package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
  70. package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
  71. package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
  72. package/dist/types.d.ts +2 -2
  73. package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-1oMokgLF.d.ts} +34 -4
  74. package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
  75. package/dist/utils.d.ts +4 -5
  76. package/dist/utils.js +15 -15
  77. package/dist/utils.js.map +1 -1
  78. package/docs/api/README.md +7 -1
  79. package/docs/api/classes/ColumnFactory.md +8 -8
  80. package/docs/api/classes/InvalidScopeError.md +4 -4
  81. package/docs/api/classes/Logger.md +1 -1
  82. package/docs/api/classes/MissingUserContextError.md +4 -4
  83. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  84. package/docs/api/classes/PermissionDeniedError.md +4 -4
  85. package/docs/api/classes/RBACAuditManager.md +1 -1
  86. package/docs/api/classes/RBACCache.md +1 -1
  87. package/docs/api/classes/RBACEngine.md +1 -1
  88. package/docs/api/classes/RBACError.md +4 -4
  89. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  90. package/docs/api/classes/SecureSupabaseClient.md +18 -15
  91. package/docs/api/classes/StorageUtils.md +1 -1
  92. package/docs/api/enums/FileCategory.md +1 -1
  93. package/docs/api/enums/LogLevel.md +1 -1
  94. package/docs/api/enums/RBACErrorCode.md +1 -1
  95. package/docs/api/enums/RPCFunction.md +1 -1
  96. package/docs/api/interfaces/AddressFieldProps.md +1 -1
  97. package/docs/api/interfaces/AddressFieldRef.md +1 -1
  98. package/docs/api/interfaces/AggregateConfig.md +4 -4
  99. package/docs/api/interfaces/AutocompleteOptions.md +1 -1
  100. package/docs/api/interfaces/AvatarProps.md +1 -1
  101. package/docs/api/interfaces/BadgeProps.md +9 -2
  102. package/docs/api/interfaces/ButtonProps.md +7 -4
  103. package/docs/api/interfaces/CalendarProps.md +8 -5
  104. package/docs/api/interfaces/CardProps.md +8 -5
  105. package/docs/api/interfaces/ColorPalette.md +1 -1
  106. package/docs/api/interfaces/ColorShade.md +1 -1
  107. package/docs/api/interfaces/ComplianceResult.md +1 -1
  108. package/docs/api/interfaces/DataAccessRecord.md +9 -9
  109. package/docs/api/interfaces/DataRecord.md +1 -1
  110. package/docs/api/interfaces/DataTableAction.md +24 -21
  111. package/docs/api/interfaces/DataTableColumn.md +31 -31
  112. package/docs/api/interfaces/DataTableProps.md +1 -1
  113. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  114. package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
  115. package/docs/api/interfaces/DatabaseIssue.md +1 -1
  116. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  117. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  118. package/docs/api/interfaces/ErrorBoundaryProps.md +147 -0
  119. package/docs/api/interfaces/ErrorBoundaryProviderProps.md +36 -0
  120. package/docs/api/interfaces/ErrorBoundaryState.md +75 -0
  121. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  122. package/docs/api/interfaces/ExportColumn.md +1 -1
  123. package/docs/api/interfaces/ExportOptions.md +8 -8
  124. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  125. package/docs/api/interfaces/FileMetadata.md +1 -1
  126. package/docs/api/interfaces/FileReference.md +1 -1
  127. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  128. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  129. package/docs/api/interfaces/FileUploadProps.md +26 -23
  130. package/docs/api/interfaces/FooterProps.md +10 -8
  131. package/docs/api/interfaces/FormFieldProps.md +10 -10
  132. package/docs/api/interfaces/FormProps.md +1 -1
  133. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  134. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  135. package/docs/api/interfaces/InputProps.md +7 -4
  136. package/docs/api/interfaces/LabelProps.md +1 -1
  137. package/docs/api/interfaces/LoggerConfig.md +1 -1
  138. package/docs/api/interfaces/LoginFormProps.md +14 -11
  139. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  140. package/docs/api/interfaces/NavigationContextType.md +1 -1
  141. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  142. package/docs/api/interfaces/NavigationItem.md +11 -11
  143. package/docs/api/interfaces/NavigationMenuProps.md +15 -15
  144. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  145. package/docs/api/interfaces/Organisation.md +1 -1
  146. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  147. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  148. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  149. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  150. package/docs/api/interfaces/PaceAppLayoutProps.md +30 -27
  151. package/docs/api/interfaces/PaceLoginPageProps.md +6 -4
  152. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  153. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  154. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  155. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  156. package/docs/api/interfaces/PaletteData.md +1 -1
  157. package/docs/api/interfaces/ParsedAddress.md +1 -1
  158. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  159. package/docs/api/interfaces/ProgressProps.md +1 -1
  160. package/docs/api/interfaces/ProtectedRouteProps.md +7 -26
  161. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  162. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  163. package/docs/api/interfaces/PublicPageLayoutProps.md +7 -20
  164. package/docs/api/interfaces/QuickFix.md +1 -1
  165. package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
  166. package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
  167. package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
  168. package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
  169. package/docs/api/interfaces/RBACConfig.md +1 -1
  170. package/docs/api/interfaces/RBACContext.md +1 -1
  171. package/docs/api/interfaces/RBACLogger.md +1 -1
  172. package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
  173. package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
  174. package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
  175. package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
  176. package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
  177. package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
  178. package/docs/api/interfaces/RBACResult.md +1 -1
  179. package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
  180. package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
  181. package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
  182. package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
  183. package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
  184. package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
  185. package/docs/api/interfaces/RBACRolesListParams.md +1 -1
  186. package/docs/api/interfaces/RBACRolesListResult.md +1 -1
  187. package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
  188. package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
  189. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  190. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  191. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  192. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  193. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  194. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  195. package/docs/api/interfaces/RouteConfig.md +1 -1
  196. package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
  197. package/docs/api/interfaces/SecureDataContextType.md +9 -9
  198. package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
  199. package/docs/api/interfaces/SessionRestorationLoaderProps.md +3 -3
  200. package/docs/api/interfaces/SetupIssue.md +1 -1
  201. package/docs/api/interfaces/StorageConfig.md +1 -1
  202. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  203. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  204. package/docs/api/interfaces/StorageListOptions.md +1 -1
  205. package/docs/api/interfaces/StorageListResult.md +1 -1
  206. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  207. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  208. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  209. package/docs/api/interfaces/StyleImport.md +1 -1
  210. package/docs/api/interfaces/SwitchProps.md +1 -1
  211. package/docs/api/interfaces/TabsContentProps.md +1 -1
  212. package/docs/api/interfaces/TabsListProps.md +1 -1
  213. package/docs/api/interfaces/TabsProps.md +1 -1
  214. package/docs/api/interfaces/TabsTriggerProps.md +3 -3
  215. package/docs/api/interfaces/TextareaProps.md +1 -1
  216. package/docs/api/interfaces/ToastActionElement.md +4 -1
  217. package/docs/api/interfaces/ToastProps.md +1 -1
  218. package/docs/api/interfaces/UnifiedAuthContextType.md +58 -55
  219. package/docs/api/interfaces/UnifiedAuthProviderProps.md +15 -13
  220. package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
  221. package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
  222. package/docs/api/interfaces/UseInactivityTrackerOptions.md +11 -9
  223. package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
  224. package/docs/api/interfaces/UsePublicEventLogoOptions.md +6 -6
  225. package/docs/api/interfaces/UsePublicEventLogoReturn.md +9 -6
  226. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  227. package/docs/api/interfaces/UsePublicEventReturn.md +8 -5
  228. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
  229. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +12 -9
  230. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +10 -7
  231. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  232. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  233. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  234. package/docs/api/interfaces/UserEventAccess.md +14 -11
  235. package/docs/api/interfaces/UserMenuProps.md +8 -6
  236. package/docs/api/interfaces/UserProfile.md +1 -1
  237. package/docs/api/modules.md +575 -634
  238. package/docs/architecture/database-schema-requirements.md +161 -0
  239. package/docs/core-concepts/rbac-system.md +3 -3
  240. package/docs/documentation-index.md +2 -4
  241. package/docs/getting-started/cursor-rules.md +263 -0
  242. package/docs/getting-started/installation-guide.md +6 -1
  243. package/docs/getting-started/quick-start.md +6 -1
  244. package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
  245. package/docs/migration/MIGRATION_GUIDE.md +6 -28
  246. package/docs/migration/README.md +52 -6
  247. package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
  248. package/docs/migration/V0.6.0_REACT_19_MIGRATION.md +227 -0
  249. package/docs/migration/database-changes-december-2025.md +3 -3
  250. package/docs/rbac/event-based-apps.md +1 -1
  251. package/docs/rbac/getting-started.md +1 -1
  252. package/docs/rbac/quick-start.md +1 -1
  253. package/docs/standards/README.md +40 -0
  254. package/docs/troubleshooting/migration.md +4 -4
  255. package/examples/PublicPages/PublicEventPage.tsx +1 -1
  256. package/package.json +12 -6
  257. package/scripts/audit/core/checks/accessibility.cjs +197 -0
  258. package/scripts/audit/core/checks/api-usage.cjs +191 -0
  259. package/scripts/audit/core/checks/bundle.cjs +142 -0
  260. package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +737 -691
  261. package/scripts/audit/core/checks/config.cjs +54 -0
  262. package/scripts/audit/core/checks/coverage.cjs +84 -0
  263. package/scripts/audit/core/checks/dependencies.cjs +454 -0
  264. package/scripts/audit/core/checks/documentation.cjs +203 -0
  265. package/scripts/audit/core/checks/environment.cjs +128 -0
  266. package/scripts/audit/core/checks/error-handling.cjs +299 -0
  267. package/scripts/audit/core/checks/forms.cjs +172 -0
  268. package/scripts/audit/core/checks/heuristics.cjs +68 -0
  269. package/scripts/audit/core/checks/hooks.cjs +334 -0
  270. package/scripts/audit/core/checks/imports.cjs +244 -0
  271. package/scripts/audit/core/checks/performance.cjs +325 -0
  272. package/scripts/audit/core/checks/routes.cjs +117 -0
  273. package/scripts/audit/core/checks/state.cjs +130 -0
  274. package/scripts/audit/core/checks/structure.cjs +65 -0
  275. package/scripts/audit/core/checks/style.cjs +584 -0
  276. package/scripts/audit/core/checks/testing.cjs +122 -0
  277. package/scripts/audit/core/checks/typescript.cjs +61 -0
  278. package/scripts/audit/core/scanner.cjs +199 -0
  279. package/scripts/audit/core/utils.cjs +137 -0
  280. package/scripts/audit/index.cjs +223 -0
  281. package/scripts/audit/reporters/console.cjs +151 -0
  282. package/scripts/audit/reporters/json.cjs +54 -0
  283. package/scripts/audit/reporters/markdown.cjs +124 -0
  284. package/scripts/audit-consuming-app.cjs +86 -0
  285. package/scripts/build-docs/build-decision.js +240 -0
  286. package/scripts/build-docs/cache-utils.js +105 -0
  287. package/scripts/build-docs/content-normalization.js +150 -0
  288. package/scripts/build-docs/file-utils.js +105 -0
  289. package/scripts/build-docs/git-utils.js +86 -0
  290. package/scripts/build-docs/hash-utils.js +116 -0
  291. package/scripts/build-docs/typedoc-runner.js +220 -0
  292. package/scripts/build-docs-incremental.js +77 -913
  293. package/scripts/install-cursor-rules.cjs +236 -0
  294. package/scripts/utils/command-runner.js +16 -11
  295. package/scripts/validate-formats.js +61 -56
  296. package/scripts/validate-master.js +74 -69
  297. package/scripts/validate-pre-publish.js +70 -65
  298. package/src/__tests__/helpers/test-providers.tsx +1 -1
  299. package/src/__tests__/helpers/test-utils.tsx +1 -1
  300. package/src/__tests__/hooks/usePermissions.test.ts +2 -2
  301. package/src/components/Alert/Alert.test.tsx +12 -18
  302. package/src/components/Alert/Alert.tsx +5 -7
  303. package/src/components/Avatar/Avatar.test.tsx +4 -4
  304. package/src/components/Badge/Badge.tsx +16 -4
  305. package/src/components/Button/Button.tsx +27 -4
  306. package/src/components/Calendar/Calendar.tsx +9 -3
  307. package/src/components/Card/Card.tsx +4 -0
  308. package/src/components/Checkbox/Checkbox.test.tsx +12 -12
  309. package/src/components/Checkbox/Checkbox.tsx +2 -2
  310. package/src/components/DataTable/DataTable.test.tsx +57 -93
  311. package/src/components/DataTable/DataTable.tsx +40 -6
  312. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
  313. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +29 -7
  314. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
  315. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
  316. package/src/components/DataTable/components/AccessDeniedPage.tsx +17 -26
  317. package/src/components/DataTable/components/ActionButtons.tsx +10 -7
  318. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
  319. package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
  320. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
  321. package/src/components/DataTable/components/DataTableBody.tsx +8 -0
  322. package/src/components/DataTable/components/DataTableCore.tsx +200 -561
  323. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
  324. package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
  325. package/src/components/DataTable/components/DataTableModals.tsx +9 -1
  326. package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
  327. package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
  328. package/src/components/DataTable/components/EditFields.tsx +307 -0
  329. package/src/components/DataTable/components/EditableRow.tsx +9 -1
  330. package/src/components/DataTable/components/EmptyState.tsx +10 -0
  331. package/src/components/DataTable/components/FilterRow.tsx +12 -0
  332. package/src/components/DataTable/components/GroupHeader.tsx +12 -0
  333. package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
  334. package/src/components/DataTable/components/ImportModal.tsx +7 -0
  335. package/src/components/DataTable/components/LoadingState.tsx +6 -0
  336. package/src/components/DataTable/components/PaginationControls.tsx +16 -1
  337. package/src/components/DataTable/components/RowComponent.tsx +391 -0
  338. package/src/components/DataTable/components/UnifiedTableBody.tsx +62 -852
  339. package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
  340. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
  341. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
  342. package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
  343. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
  344. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
  345. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
  346. package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
  347. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
  348. package/src/components/DataTable/components/cellValueUtils.ts +40 -0
  349. package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
  350. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
  351. package/src/components/DataTable/context/DataTableContext.tsx +50 -0
  352. package/src/components/DataTable/core/ColumnFactory.ts +31 -0
  353. package/src/components/DataTable/core/DataTableContext.tsx +32 -1
  354. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
  355. package/src/components/DataTable/hooks/useColumnReordering.ts +14 -2
  356. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
  357. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
  358. package/src/components/DataTable/hooks/useDataTablePermissions.ts +124 -32
  359. package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
  360. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
  361. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
  362. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
  363. package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
  364. package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
  365. package/src/components/DataTable/styles.ts +6 -6
  366. package/src/components/DataTable/types.ts +6 -10
  367. package/src/components/DataTable/utils/a11yUtils.ts +7 -0
  368. package/src/components/DataTable/utils/debugTools.ts +18 -113
  369. package/src/components/DataTable/utils/errorHandling.ts +12 -0
  370. package/src/components/DataTable/utils/exportUtils.ts +9 -0
  371. package/src/components/DataTable/utils/flexibleImport.ts +12 -48
  372. package/src/components/DataTable/utils/paginationUtils.ts +8 -0
  373. package/src/components/DataTable/utils/performanceUtils.ts +5 -1
  374. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
  375. package/src/components/Dialog/Dialog.tsx +8 -7
  376. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
  377. package/src/components/ErrorBoundary/ErrorBoundary.tsx +46 -6
  378. package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
  379. package/src/components/ErrorBoundary/index.ts +27 -2
  380. package/src/components/EventSelector/EventSelector.tsx +4 -1
  381. package/src/components/FileDisplay/FileDisplay.test.tsx +2 -2
  382. package/src/components/FileDisplay/FileDisplay.tsx +32 -18
  383. package/src/components/FileUpload/FileUpload.tsx +22 -2
  384. package/src/components/Footer/Footer.test.tsx +16 -16
  385. package/src/components/Footer/Footer.tsx +15 -12
  386. package/src/components/Form/Form.test.tsx +36 -15
  387. package/src/components/Form/Form.tsx +31 -26
  388. package/src/components/Header/Header.tsx +22 -11
  389. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
  390. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
  391. package/src/components/Input/Input.test.tsx +2 -2
  392. package/src/components/Input/Input.tsx +36 -34
  393. package/src/components/Label/Label.tsx +1 -1
  394. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
  395. package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
  396. package/src/components/LoginForm/LoginForm.test.tsx +42 -42
  397. package/src/components/LoginForm/LoginForm.tsx +12 -8
  398. package/src/components/NavigationMenu/NavigationMenu.tsx +15 -514
  399. package/src/components/NavigationMenu/types.ts +56 -0
  400. package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
  401. package/src/components/OrganisationSelector/OrganisationSelector.tsx +3 -0
  402. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
  403. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +54 -52
  404. package/src/components/PaceAppLayout/PaceAppLayout.tsx +33 -12
  405. package/src/components/PaceAppLayout/README.md +1 -1
  406. package/src/components/PaceAppLayout/test-setup.tsx +1 -2
  407. package/src/components/PaceLoginPage/PaceLoginPage.tsx +4 -1
  408. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
  409. package/src/components/PasswordChange/PasswordChangeForm.tsx +10 -1
  410. package/src/components/Progress/Progress.tsx +1 -1
  411. package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
  412. package/src/components/PublicLayout/PublicPageLayout.tsx +3 -6
  413. package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
  414. package/src/components/Select/Select.tsx +95 -438
  415. package/src/components/Select/context.ts +23 -0
  416. package/src/components/Select/hooks/useSelectEvents.ts +87 -0
  417. package/src/components/Select/hooks/useSelectSearch.ts +91 -0
  418. package/src/components/Select/hooks/useSelectState.ts +104 -0
  419. package/src/components/Select/index.ts +9 -1
  420. package/src/components/Select/types.ts +123 -0
  421. package/src/components/Select/utils/text.ts +26 -0
  422. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +5 -6
  423. package/src/components/Switch/Switch.tsx +4 -4
  424. package/src/components/Table/Table.tsx +1 -1
  425. package/src/components/Tabs/Tabs.tsx +1 -1
  426. package/src/components/Textarea/Textarea.tsx +27 -29
  427. package/src/components/Toast/Toast.tsx +5 -1
  428. package/src/components/Tooltip/Tooltip.tsx +3 -3
  429. package/src/components/UserMenu/UserMenu.test.tsx +24 -11
  430. package/src/components/UserMenu/UserMenu.tsx +22 -19
  431. package/src/components/index.ts +2 -2
  432. package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
  433. package/src/hooks/__tests__/index.unit.test.ts +2 -5
  434. package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
  435. package/src/hooks/index.ts +1 -2
  436. package/src/hooks/public/usePublicEvent.ts +5 -1
  437. package/src/hooks/public/usePublicEventLogo.ts +5 -1
  438. package/src/hooks/public/usePublicFileDisplay.ts +4 -0
  439. package/src/hooks/public/usePublicRouteParams.ts +5 -1
  440. package/src/hooks/services/useAuth.ts +32 -0
  441. package/src/hooks/services/useCurrentEvent.ts +6 -0
  442. package/src/hooks/services/useCurrentOrganisation.ts +6 -0
  443. package/src/hooks/useDataTableState.ts +8 -18
  444. package/src/hooks/useDebounce.ts +9 -0
  445. package/src/hooks/useEventTheme.ts +6 -0
  446. package/src/hooks/useFileDisplay.ts +4 -0
  447. package/src/hooks/useFileReference.ts +25 -7
  448. package/src/hooks/useFileUrl.ts +11 -1
  449. package/src/hooks/useFocusManagement.ts +16 -2
  450. package/src/hooks/useFocusTrap.ts +7 -4
  451. package/src/hooks/useFormDialog.ts +8 -7
  452. package/src/hooks/useInactivityTracker.ts +4 -1
  453. package/src/hooks/useKeyboardShortcuts.ts +4 -0
  454. package/src/hooks/useOrganisationPermissions.ts +4 -0
  455. package/src/hooks/useOrganisationSecurity.ts +4 -0
  456. package/src/hooks/usePerformanceMonitor.ts +4 -0
  457. package/src/hooks/usePermissionCache.ts +8 -1
  458. package/src/hooks/useQueryCache.ts +12 -1
  459. package/src/hooks/useSessionRestoration.ts +4 -0
  460. package/src/hooks/useStorage.ts +4 -0
  461. package/src/hooks/useToast.ts +3 -3
  462. package/src/index.ts +2 -1
  463. package/src/providers/__tests__/OrganisationProvider.test.tsx +115 -49
  464. package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
  465. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
  466. package/src/providers/services/AuthServiceProvider.tsx +18 -0
  467. package/src/providers/services/EventServiceProvider.tsx +18 -0
  468. package/src/providers/services/InactivityServiceProvider.tsx +18 -0
  469. package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
  470. package/src/providers/services/UnifiedAuthProvider.tsx +58 -22
  471. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +33 -7
  472. package/src/rbac/README.md +1 -1
  473. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +26 -26
  474. package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
  475. package/src/rbac/adapters.tsx +14 -5
  476. package/src/rbac/api.ts +100 -67
  477. package/src/rbac/components/EnhancedNavigationMenu.tsx +1 -1
  478. package/src/rbac/components/NavigationGuard.tsx +1 -1
  479. package/src/rbac/components/NavigationProvider.tsx +5 -2
  480. package/src/rbac/components/PagePermissionGuard.tsx +158 -18
  481. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  482. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  483. package/src/rbac/components/RoleBasedRouter.tsx +6 -2
  484. package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
  485. package/src/rbac/components/SecureDataProvider.tsx +21 -6
  486. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
  487. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
  488. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
  489. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
  490. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
  491. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
  492. package/src/rbac/engine.ts +38 -14
  493. package/src/rbac/hooks/permissions/index.ts +7 -0
  494. package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
  495. package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
  496. package/src/rbac/hooks/permissions/useCan.ts +347 -0
  497. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
  498. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
  499. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
  500. package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
  501. package/src/rbac/hooks/useCan.test.ts +71 -64
  502. package/src/rbac/hooks/usePermissions.ts +14 -995
  503. package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
  504. package/src/rbac/hooks/useResourcePermissions.ts +14 -4
  505. package/src/rbac/hooks/useSecureSupabase.ts +33 -13
  506. package/src/rbac/permissions.ts +0 -30
  507. package/src/rbac/secureClient.ts +212 -61
  508. package/src/rbac/types.ts +8 -0
  509. package/src/theming/__tests__/parseEventColours.test.ts +6 -9
  510. package/src/theming/parseEventColours.ts +5 -19
  511. package/src/types/vitest-globals.d.ts +51 -26
  512. package/src/utils/__mocks__/supabaseMock.ts +1 -3
  513. package/src/utils/__tests__/formatting.unit.test.ts +4 -4
  514. package/src/utils/__tests__/index.unit.test.ts +2 -2
  515. package/src/utils/audit/audit.ts +0 -3
  516. package/src/utils/core/cn.ts +1 -1
  517. package/src/utils/file-reference/index.ts +53 -1
  518. package/src/utils/formatting/formatting.ts +8 -18
  519. package/src/utils/index.ts +0 -1
  520. package/src/utils/security/secureDataAccess.test.ts +31 -20
  521. package/src/utils/security/secureDataAccess.ts +4 -3
  522. package/dist/chunk-6C4YBBJM.js +0 -628
  523. package/dist/chunk-6C4YBBJM.js.map +0 -1
  524. package/dist/chunk-7D4SUZUM.js 2.map +0 -1
  525. package/dist/chunk-7EQTDTTJ.js 2.map +0 -1
  526. package/dist/chunk-7EQTDTTJ.js.map +0 -1
  527. package/dist/chunk-7FLMSG37.js 2.map +0 -1
  528. package/dist/chunk-7FLMSG37.js.map +0 -1
  529. package/dist/chunk-BC4IJKSL.js.map +0 -1
  530. package/dist/chunk-E3SPN4VZ.js +0 -12917
  531. package/dist/chunk-E3SPN4VZ.js.map +0 -1
  532. package/dist/chunk-E66EQZE6 5.js +0 -37
  533. package/dist/chunk-E66EQZE6.js 2.map +0 -1
  534. package/dist/chunk-HWIIPPNI.js.map +0 -1
  535. package/dist/chunk-I7PSE6JW 5.js +0 -191
  536. package/dist/chunk-I7PSE6JW.js 2.map +0 -1
  537. package/dist/chunk-I7PSE6JW.js.map +0 -1
  538. package/dist/chunk-IIELH4DL.js.map +0 -1
  539. package/dist/chunk-KNC55RTG.js 5.map +0 -1
  540. package/dist/chunk-KNC55RTG.js.map +0 -1
  541. package/dist/chunk-KQCRWDSA.js 5.map +0 -1
  542. package/dist/chunk-LFNCN2SP.js +0 -412
  543. package/dist/chunk-LFNCN2SP.js 2.map +0 -1
  544. package/dist/chunk-LFNCN2SP.js.map +0 -1
  545. package/dist/chunk-LMC26NLJ 2.js +0 -84
  546. package/dist/chunk-NOAYCWCX.js +0 -4993
  547. package/dist/chunk-NOAYCWCX.js.map +0 -1
  548. package/dist/chunk-QWWZ5CAQ.js 3.map +0 -1
  549. package/dist/chunk-QWWZ5CAQ.js.map +0 -1
  550. package/dist/chunk-QXHPKYJV 3.js +0 -113
  551. package/dist/chunk-R77UEZ4E.js +0 -68
  552. package/dist/chunk-R77UEZ4E.js.map +0 -1
  553. package/dist/chunk-SQGMNID3.js.map +0 -1
  554. package/dist/chunk-VBXEHIUJ.js 6.map +0 -1
  555. package/dist/chunk-XNXXZ43G.js.map +0 -1
  556. package/dist/chunk-ZSAAAMVR 6.js +0 -25
  557. package/dist/components.js 5.map +0 -1
  558. package/dist/styles/index 2.js +0 -12
  559. package/dist/styles/index.js 5.map +0 -1
  560. package/dist/theming/runtime 5.js +0 -19
  561. package/dist/theming/runtime.js 5.map +0 -1
  562. package/docs/api/classes/ErrorBoundary.md +0 -144
  563. package/docs/migration/quick-migration-guide.md +0 -356
  564. package/docs/migration/service-architecture.md +0 -281
  565. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
  566. package/src/hooks/useSecureDataAccess.test.ts +0 -559
  567. package/src/hooks/useSecureDataAccess.ts +0 -666
  568. /package/dist/{DataTable-5FU7IESH.js.map → DataTable-TPTKCX4D.js.map} +0 -0
  569. /package/dist/{UnifiedAuthProvider-RGJTDE2C.js.map → UnifiedAuthProvider-CH6Z342H.js.map} +0 -0
  570. /package/dist/{api-N774RPUA.js.map → api-MVVQZLJI.js.map} +0 -0
  571. /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
  572. /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
  573. /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
  574. /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
  575. /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
  576. /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
  577. /package/examples/{rbac → RBAC}/index.ts +0 -0
@@ -1,6 +1,6 @@
1
- import { U as UUID, g as PermissionCacheKey, h as AuditEventSource, i as RBACAuditEvent, a as PermissionCheck, S as Scope, A as AccessLevel, b as PermissionMap, j as RBACAppContext, k as RBACRoleContext, P as Permission, l as UserRBACContext } from '../types-UU913iLA.js';
2
- export { E as EventAppRole, G as GlobalRole, I as InvalidScopeError, M as MissingUserContextError, O as Operation, e as OrganisationContextRequiredError, c as OrganisationRole, d as PermissionDeniedError, R as RBACError, f as RBACNotInitializedError } from '../types-UU913iLA.js';
3
- export { A as AccessLevelContext, s as AuditEventType, P as PermissionSource, d as RBACAccessValidateParams, e as RBACAccessValidateResult, q as RBACAuditLogParams, r as RBACAuditLogResult, t as RBACContext, w as RBACErrorCode, v as RBACFunctionResponse, f as RBACPageAccessCheckParams, R as RBACPermissionCheckParams, a as RBACPermissionCheckResult, b as RBACPermissionsGetParams, c as RBACPermissionsGetResult, u as RBACResult, g as RBACRoleGrantParams, h as RBACRoleGrantResult, i as RBACRoleRevokeParams, j as RBACRoleRevokeResult, m as RBACRoleValidateParams, n as RBACRoleValidateResult, k as RBACRolesListParams, l as RBACRolesListResult, o as RBACSessionTrackParams, p as RBACSessionTrackResult, x as RPCFunction, S as SessionType } from '../functions-D_kgHktt.js';
1
+ import { U as UUID, g as PermissionCacheKey, h as AuditEventSource, i as RBACAuditEvent, a as PermissionCheck, S as Scope, A as AccessLevel, b as PermissionMap, j as RBACAppContext, k as RBACRoleContext, P as Permission, l as UserRBACContext } from '../types-BeoeWV5I.js';
2
+ export { E as EventAppRole, G as GlobalRole, I as InvalidScopeError, M as MissingUserContextError, O as Operation, e as OrganisationContextRequiredError, c as OrganisationRole, d as PermissionDeniedError, R as RBACError, f as RBACNotInitializedError } from '../types-BeoeWV5I.js';
3
+ export { A as AccessLevelContext, s as AuditEventType, P as PermissionSource, d as RBACAccessValidateParams, e as RBACAccessValidateResult, q as RBACAuditLogParams, r as RBACAuditLogResult, t as RBACContext, w as RBACErrorCode, v as RBACFunctionResponse, f as RBACPageAccessCheckParams, R as RBACPermissionCheckParams, a as RBACPermissionCheckResult, b as RBACPermissionsGetParams, c as RBACPermissionsGetResult, u as RBACResult, g as RBACRoleGrantParams, h as RBACRoleGrantResult, i as RBACRoleRevokeParams, j as RBACRoleRevokeResult, m as RBACRoleValidateParams, n as RBACRoleValidateResult, k as RBACRolesListParams, l as RBACRolesListResult, o as RBACSessionTrackParams, p as RBACSessionTrackResult, x as RPCFunction, S as SessionType } from '../functions-DHebl8-F.js';
4
4
  import { SupabaseClient } from '@supabase/supabase-js';
5
5
  import { D as Database } from '../database.generated-CzIvgcPu.js';
6
6
  import * as react_jsx_runtime from 'react/jsx-runtime';
@@ -122,8 +122,10 @@ declare function isDevelopmentMode(): boolean;
122
122
  * This client automatically injects organisation context into all requests
123
123
  * and prevents queries that don't have the required context.
124
124
  *
125
- * Note: Callers should derive organisationId from eventId before creating this client
126
- * if working with event-required apps. The client requires organisationId.
125
+ * Note: For non-super-admins, organisationId is required. Super-admins can operate
126
+ * without organisationId to access system-wide tables (like core_organisations).
127
+ * Callers should derive organisationId from eventId before creating this client
128
+ * if working with event-required apps.
127
129
  */
128
130
  declare class SecureSupabaseClient {
129
131
  private supabase;
@@ -134,7 +136,19 @@ declare class SecureSupabaseClient {
134
136
  private eventId?;
135
137
  private appId?;
136
138
  private isSuperAdmin;
137
- constructor(supabaseUrl: string, supabaseKey: string, organisationId: UUID, eventId?: string, appId?: UUID, isSuperAdmin?: boolean);
139
+ private usesExistingClient;
140
+ /**
141
+ * RPC functions that are safe to call without organisation context.
142
+ *
143
+ * These functions must:
144
+ * - rely on JWT context (auth.uid()) for authentication
145
+ * - not read or write organisation-scoped data
146
+ *
147
+ * This allowlist enables compliant consuming apps to use `secureSupabase.rpc(...)`
148
+ * even before an organisation is selected (common during initial page load/refresh).
149
+ */
150
+ private static readonly GLOBAL_RPC_ALLOWLIST;
151
+ constructor(supabaseUrl: string, supabaseKey: string, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean, existingClient?: SupabaseClient<Database>);
138
152
  /**
139
153
  * Setup context injection for all database operations
140
154
  */
@@ -170,18 +184,36 @@ declare class SecureSupabaseClient {
170
184
  * - Super admins: No org filter (see all users) - RLS will allow access
171
185
  * - Non-super-admins: Apply org filter as defense in depth - RLS will also filter
172
186
  *
187
+ * For system-wide tables (like core_organisations):
188
+ * - Super admins: No org filter (see all records) - RLS will allow access
189
+ * - Non-super-admins: Apply org filter as defense in depth - RLS will also filter
190
+ *
173
191
  * For other tables:
174
192
  * - Always apply org filter unless super admin bypasses it
175
193
  */
176
194
  private addOrganisationFilter;
177
195
  /**
178
196
  * Validate that required context is present
197
+ * Super-admins can operate without organisation context
179
198
  */
180
199
  private validateContext;
200
+ /**
201
+ * Determine whether a table requires organisation context.
202
+ * Tables without an organisation_id column (or global configuration tables) are safe without org context.
203
+ */
204
+ private tableRequiresOrganisationContext;
205
+ /**
206
+ * Validate context for a specific table operation.
207
+ */
208
+ private validateContextForTable;
209
+ /**
210
+ * Validate context for a specific RPC call.
211
+ */
212
+ private validateContextForRpc;
181
213
  /**
182
214
  * Get the current organisation ID
183
215
  */
184
- getOrganisationId(): UUID;
216
+ getOrganisationId(): UUID | null;
185
217
  /**
186
218
  * Get the current event ID
187
219
  */
@@ -194,7 +226,7 @@ declare class SecureSupabaseClient {
194
226
  * Create a new client with updated context
195
227
  */
196
228
  withContext(updates: {
197
- organisationId?: UUID;
229
+ organisationId?: UUID | null;
198
230
  eventId?: string;
199
231
  appId?: UUID;
200
232
  isSuperAdmin?: boolean;
@@ -210,10 +242,10 @@ declare class SecureSupabaseClient {
210
242
  *
211
243
  * @param supabaseUrl - Supabase project URL
212
244
  * @param supabaseKey - Supabase publishable key or anon key (accepts both legacy anon keys and modern publishable keys)
213
- * @param organisationId - Required organisation ID
245
+ * @param organisationId - Organisation ID (optional for super-admins)
214
246
  * @param eventId - Optional event ID
215
247
  * @param appId - Optional app ID
216
- * @param isSuperAdmin - Optional super admin flag (defaults to false)
248
+ * @param isSuperAdmin - Optional super admin flag (defaults to false). When true, organisationId can be null.
217
249
  * @returns SecureSupabaseClient instance
218
250
  *
219
251
  * @example
@@ -226,9 +258,19 @@ declare class SecureSupabaseClient {
226
258
  * 'app-789',
227
259
  * false // isSuperAdmin
228
260
  * );
261
+ *
262
+ * // For super-admins, organisationId can be null
263
+ * const superAdminClient = createSecureClient(
264
+ * 'https://your-project.supabase.co',
265
+ * 'your-publishable-key-or-anon-key',
266
+ * null, // organisationId not required for super-admins
267
+ * undefined,
268
+ * undefined,
269
+ * true // isSuperAdmin
270
+ * );
229
271
  * ```
230
272
  */
231
- declare function createSecureClient(supabaseUrl: string, supabaseKey: string, organisationId: UUID, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
273
+ declare function createSecureClient(supabaseUrl: string, supabaseKey: string, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
232
274
  /**
233
275
  * Create a secure client from an existing Supabase client
234
276
  *
@@ -238,7 +280,7 @@ declare function createSecureClient(supabaseUrl: string, supabaseKey: string, or
238
280
  * @param appId - Optional app ID
239
281
  * @returns SecureSupabaseClient instance
240
282
  */
241
- declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID, eventId?: string, appId?: UUID): SecureSupabaseClient;
283
+ declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
242
284
 
243
285
  /**
244
286
  * RBAC Cache Implementation
@@ -838,7 +880,7 @@ interface PagePermissionGuardProps {
838
880
  /** Loading state content */
839
881
  loading?: React__default.ReactNode;
840
882
  }
841
- declare const PagePermissionGuard: React__default.MemoExoticComponent<({ pageName, operation, children, fallback, strictMode, auditLog, pageId, scope, onDenied, loading }: PagePermissionGuardProps) => string | number | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null>;
883
+ declare const PagePermissionGuard: React__default.MemoExoticComponent<({ pageName, operation, children, fallback, strictMode, auditLog, pageId, scope, onDenied, loading }: PagePermissionGuardProps) => string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null>;
842
884
 
843
885
  interface DataAccessRecord {
844
886
  table: string;
@@ -1376,126 +1418,118 @@ interface ResourcePermissions {
1376
1418
  declare function useResourcePermissions(resource: string, options?: UseResourcePermissionsOptions): ResourcePermissions;
1377
1419
 
1378
1420
  /**
1379
- * @file RBAC Permission Hooks
1380
- * @package @jmruthers/pace-core
1381
- * @module RBAC/Hooks
1382
- * @since 1.0.0
1383
- *
1384
- * This module provides React hooks for RBAC functionality.
1385
- */
1386
-
1387
- /**
1388
- * Hook to get user's permissions in a scope
1421
+ * Hook to get user's access level in a scope
1389
1422
  *
1390
1423
  * @param userId - User ID
1391
- * @param organisationId - Organisation ID
1392
- * @param eventId - Event ID (optional)
1393
- * @param appId - Application ID (optional)
1394
- * @returns Permission state and methods
1424
+ * @param scope - Scope for access level checking
1425
+ * @returns Access level state and methods
1395
1426
  *
1396
1427
  * @example
1397
1428
  * ```tsx
1398
1429
  * function MyComponent() {
1399
- * const { permissions, isLoading, error } = usePermissions(
1400
- * userId,
1401
- * organisationId,
1402
- * eventId,
1403
- * appId
1404
- * );
1430
+ * const { accessLevel, isLoading, error } = useAccessLevel(userId, scope);
1405
1431
  *
1406
- * if (isLoading) return <div>Loading...</div>;
1432
+ * if (isLoading) return <div>Loading access level...</div>;
1407
1433
  * if (error) return <div>Error: {error.message}</div>;
1408
1434
  *
1409
1435
  * return (
1410
1436
  * <div>
1411
- * {permissions['read:users'] && <UserList />}
1412
- * {permissions['create:users'] && <CreateUserButton />}
1437
+ * Access Level: {accessLevel}
1438
+ * {accessLevel >= AccessLevel.ADMIN && <AdminPanel />}
1413
1439
  * </div>
1414
1440
  * );
1415
1441
  * }
1416
1442
  * ```
1417
1443
  */
1418
- declare function usePermissions(userId: UUID, organisationId: string | undefined, eventId: string | undefined, appId: string | undefined): {
1419
- permissions: PermissionMap;
1444
+ declare function useAccessLevel(userId: UUID, scope: Scope): {
1445
+ accessLevel: AccessLevel;
1420
1446
  isLoading: boolean;
1421
1447
  error: Error | null;
1422
- hasPermission: (permission: Permission) => boolean;
1423
- hasAnyPermission: (permissionList: Permission[]) => boolean;
1424
- hasAllPermissions: (permissionList: Permission[]) => boolean;
1425
1448
  refetch: () => Promise<void>;
1426
1449
  };
1450
+
1427
1451
  /**
1428
- * Hook to check if user can perform an action
1452
+ * Hook to get cached permissions with TTL management
1429
1453
  *
1430
1454
  * @param userId - User ID
1431
1455
  * @param scope - Scope for permission checking
1432
- * @param permission - Permission to check
1433
- * @param pageId - Optional page ID
1434
- * @param useCache - Whether to use cached results
1435
- * @param appName - Optional app name (for PORTAL/ADMIN special case)
1436
- * @returns Permission check state and methods
1456
+ * @returns Cached permission state and methods
1437
1457
  *
1438
1458
  * @example
1439
1459
  * ```tsx
1440
1460
  * function MyComponent() {
1441
- * const { can, isLoading, error } = useCan(userId, scope, 'read:users');
1461
+ * const { permissions, isLoading, error, invalidateCache } = useCachedPermissions(userId, scope);
1442
1462
  *
1443
- * if (isLoading) return <div>Checking permission...</div>;
1463
+ * if (isLoading) return <div>Loading cached permissions...</div>;
1444
1464
  * if (error) return <div>Error: {error.message}</div>;
1445
1465
  *
1446
- * return can ? <UserList /> : <div>Access denied</div>;
1466
+ * return (
1467
+ * <div>
1468
+ * {permissions['read:users'] && <UserList />}
1469
+ * <button onClick={invalidateCache}>Refresh Permissions</button>
1470
+ * </div>
1471
+ * );
1447
1472
  * }
1448
1473
  * ```
1449
1474
  */
1450
- declare function useCan(userId: UUID, scope: Scope, permission: Permission, pageId?: UUID, useCache?: boolean, appName?: string): {
1451
- can: boolean;
1475
+ declare function useCachedPermissions(userId: UUID, scope: Scope): {
1476
+ permissions: PermissionMap;
1452
1477
  isLoading: boolean;
1453
1478
  error: Error | null;
1479
+ invalidateCache: () => void;
1454
1480
  refetch: () => Promise<void>;
1455
1481
  };
1482
+
1456
1483
  /**
1457
- * Hook to get user's access level in a scope
1484
+ * Hook to check if user can perform an action
1458
1485
  *
1459
1486
  * @param userId - User ID
1460
- * @param scope - Scope for access level checking
1461
- * @returns Access level state and methods
1487
+ * @param scope - Scope for permission checking
1488
+ * @param permission - Permission to check
1489
+ * @param pageId - Optional page ID
1490
+ * @param useCache - Whether to use cached results
1491
+ * @param appName - Optional app name (for PORTAL/ADMIN special case)
1492
+ * @returns Permission check state and methods
1462
1493
  *
1463
1494
  * @example
1464
1495
  * ```tsx
1465
1496
  * function MyComponent() {
1466
- * const { accessLevel, isLoading, error } = useAccessLevel(userId, scope);
1497
+ * const { can, isLoading, error } = useCan(userId, scope, 'read:users');
1467
1498
  *
1468
- * if (isLoading) return <div>Loading access level...</div>;
1499
+ * if (isLoading) return <div>Checking permission...</div>;
1469
1500
  * if (error) return <div>Error: {error.message}</div>;
1470
1501
  *
1471
- * return (
1472
- * <div>
1473
- * Access Level: {accessLevel}
1474
- * {accessLevel >= AccessLevel.ADMIN && <AdminPanel />}
1475
- * </div>
1476
- * );
1502
+ * return can ? <UserList /> : <div>Access denied</div>;
1477
1503
  * }
1478
1504
  * ```
1479
1505
  */
1480
- declare function useAccessLevel(userId: UUID, scope: Scope): {
1481
- accessLevel: AccessLevel;
1506
+ declare function useCan(userId: UUID, scope: Scope, permission: Permission, pageId?: UUID, useCache?: boolean,
1507
+ /**
1508
+ * Pre-computed super admin flag to avoid duplicate super admin checks.
1509
+ * Callers should check super admin once and pass the result to all useCan hooks.
1510
+ * Pass null if not checked yet, false/true if checked.
1511
+ * Defaults to null (not checked yet) - hook will check if needed.
1512
+ */
1513
+ precomputedSuperAdmin?: boolean | null, appName?: string): {
1514
+ can: boolean;
1482
1515
  isLoading: boolean;
1483
1516
  error: Error | null;
1484
1517
  refetch: () => Promise<void>;
1485
1518
  };
1519
+
1486
1520
  /**
1487
- * Hook to check multiple permissions at once
1521
+ * Hook to check if user has all of the specified permissions
1488
1522
  *
1489
1523
  * @param userId - User ID
1490
1524
  * @param scope - Scope for permission checking
1491
1525
  * @param permissions - Array of permissions to check
1492
1526
  * @param useCache - Whether to use cached results
1493
- * @returns Multiple permission check results
1527
+ * @returns Whether user has all of the permissions
1494
1528
  *
1495
1529
  * @example
1496
1530
  * ```tsx
1497
1531
  * function MyComponent() {
1498
- * const { results, isLoading, error } = useMultiplePermissions(
1532
+ * const { hasAll, isLoading, error } = useHasAllPermissions(
1499
1533
  * userId,
1500
1534
  * scope,
1501
1535
  * ['read:users', 'create:users', 'update:users']
@@ -1504,22 +1538,17 @@ declare function useAccessLevel(userId: UUID, scope: Scope): {
1504
1538
  * if (isLoading) return <div>Checking permissions...</div>;
1505
1539
  * if (error) return <div>Error: {error.message}</div>;
1506
1540
  *
1507
- * return (
1508
- * <div>
1509
- * {results['read:users'] && <UserList />}
1510
- * {results['create:users'] && <CreateUserButton />}
1511
- * {results['update:users'] && <EditUserButton />}
1512
- * </div>
1513
- * );
1541
+ * return hasAll ? <FullUserManagementPanel /> : <div>Insufficient permissions</div>;
1514
1542
  * }
1515
1543
  * ```
1516
1544
  */
1517
- declare function useMultiplePermissions(userId: UUID, scope: Scope, permissions: Permission[], useCache?: boolean): {
1518
- results: Record<Permission, boolean>;
1545
+ declare function useHasAllPermissions(userId: UUID, scope: Scope, permissions: Permission[], useCache?: boolean): {
1546
+ hasAll: boolean;
1519
1547
  isLoading: boolean;
1520
1548
  error: Error | null;
1521
1549
  refetch: () => Promise<void>;
1522
1550
  };
1551
+
1523
1552
  /**
1524
1553
  * Hook to check if user has any of the specified permissions
1525
1554
  *
@@ -1551,19 +1580,20 @@ declare function useHasAnyPermission(userId: UUID, scope: Scope, permissions: Pe
1551
1580
  error: Error | null;
1552
1581
  refetch: () => Promise<void>;
1553
1582
  };
1583
+
1554
1584
  /**
1555
- * Hook to check if user has all of the specified permissions
1585
+ * Hook to check multiple permissions at once
1556
1586
  *
1557
1587
  * @param userId - User ID
1558
1588
  * @param scope - Scope for permission checking
1559
1589
  * @param permissions - Array of permissions to check
1560
1590
  * @param useCache - Whether to use cached results
1561
- * @returns Whether user has all of the permissions
1591
+ * @returns Multiple permission check results
1562
1592
  *
1563
1593
  * @example
1564
1594
  * ```tsx
1565
1595
  * function MyComponent() {
1566
- * const { hasAll, isLoading, error } = useHasAllPermissions(
1596
+ * const { results, isLoading, error } = useMultiplePermissions(
1567
1597
  * userId,
1568
1598
  * scope,
1569
1599
  * ['read:users', 'create:users', 'update:users']
@@ -1572,45 +1602,61 @@ declare function useHasAnyPermission(userId: UUID, scope: Scope, permissions: Pe
1572
1602
  * if (isLoading) return <div>Checking permissions...</div>;
1573
1603
  * if (error) return <div>Error: {error.message}</div>;
1574
1604
  *
1575
- * return hasAll ? <FullUserManagementPanel /> : <div>Insufficient permissions</div>;
1605
+ * return (
1606
+ * <div>
1607
+ * {results['read:users'] && <UserList />}
1608
+ * {results['create:users'] && <CreateUserButton />}
1609
+ * {results['update:users'] && <EditUserButton />}
1610
+ * </div>
1611
+ * );
1576
1612
  * }
1577
1613
  * ```
1578
1614
  */
1579
- declare function useHasAllPermissions(userId: UUID, scope: Scope, permissions: Permission[], useCache?: boolean): {
1580
- hasAll: boolean;
1615
+ declare function useMultiplePermissions(userId: UUID, scope: Scope, permissions: Permission[], useCache?: boolean): {
1616
+ results: Record<Permission, boolean>;
1581
1617
  isLoading: boolean;
1582
1618
  error: Error | null;
1583
1619
  refetch: () => Promise<void>;
1584
1620
  };
1621
+
1585
1622
  /**
1586
- * Hook to get cached permissions with TTL management
1623
+ * Hook to get user's permissions in a scope
1587
1624
  *
1588
1625
  * @param userId - User ID
1589
- * @param scope - Scope for permission checking
1590
- * @returns Cached permission state and methods
1626
+ * @param organisationId - Organisation ID
1627
+ * @param eventId - Event ID (optional)
1628
+ * @param appId - Application ID (optional)
1629
+ * @returns Permission state and methods
1591
1630
  *
1592
1631
  * @example
1593
1632
  * ```tsx
1594
1633
  * function MyComponent() {
1595
- * const { permissions, isLoading, error, invalidateCache } = useCachedPermissions(userId, scope);
1634
+ * const { permissions, isLoading, error } = usePermissions(
1635
+ * userId,
1636
+ * organisationId,
1637
+ * eventId,
1638
+ * appId
1639
+ * );
1596
1640
  *
1597
- * if (isLoading) return <div>Loading cached permissions...</div>;
1641
+ * if (isLoading) return <div>Loading...</div>;
1598
1642
  * if (error) return <div>Error: {error.message}</div>;
1599
1643
  *
1600
1644
  * return (
1601
1645
  * <div>
1602
1646
  * {permissions['read:users'] && <UserList />}
1603
- * <button onClick={invalidateCache}>Refresh Permissions</button>
1647
+ * {permissions['create:users'] && <CreateUserButton />}
1604
1648
  * </div>
1605
1649
  * );
1606
1650
  * }
1607
1651
  * ```
1608
1652
  */
1609
- declare function useCachedPermissions(userId: UUID, scope: Scope): {
1653
+ declare function usePermissions(userId: UUID, organisationId: string | undefined, eventId: string | undefined, appId: string | undefined): {
1610
1654
  permissions: PermissionMap;
1611
1655
  isLoading: boolean;
1612
1656
  error: Error | null;
1613
- invalidateCache: () => void;
1657
+ hasPermission: (permission: Permission) => boolean;
1658
+ hasAnyPermission: (permissionList: Permission[]) => boolean;
1659
+ hasAllPermissions: (permissionList: Permission[]) => boolean;
1614
1660
  refetch: () => Promise<void>;
1615
1661
  };
1616
1662
 
@@ -2238,7 +2284,14 @@ declare function getRoleContext(input: {
2238
2284
  * });
2239
2285
  * ```
2240
2286
  */
2241
- declare function isPermitted(input: PermissionCheck, appConfig?: AppConfig | null, appName?: string): Promise<boolean>;
2287
+ declare function isPermitted(input: PermissionCheck, appConfig?: AppConfig | null, appName?: string,
2288
+ /**
2289
+ * Pre-computed super admin status to avoid duplicate checks.
2290
+ * Pass null if not checked yet (will check), true if already checked and is super admin,
2291
+ * or false if already checked and is not super admin.
2292
+ * @default null
2293
+ */
2294
+ precomputedSuperAdmin?: boolean | null): Promise<boolean>;
2242
2295
  /**
2243
2296
  * Check if user has a specific permission (cached version)
2244
2297
  *
@@ -2375,28 +2428,6 @@ declare const PAGE_PERMISSIONS: {
2375
2428
  * @returns True if valid, false otherwise
2376
2429
  */
2377
2430
  declare function isValidPermission(permission: string): permission is Permission;
2378
- /**
2379
- * Get all permissions for a role - REMOVED
2380
- *
2381
- * @deprecated This function has been removed to ensure RBAC compliance.
2382
- * Permissions must be queried from the rbac_page_permissions database table,
2383
- * not hardcoded in application code. This allows organizations to customize
2384
- * their own page-level permissions as required by the RBAC specification.
2385
- *
2386
- * To get permissions for a role, query the database:
2387
- * ```typescript
2388
- * const { data } = await supabase
2389
- * .from('rbac_page_permissions')
2390
- * .select('operation, allowed')
2391
- * .eq('role_name', roleName)
2392
- * .eq('organisation_id', organisationId)
2393
- * .eq('allowed', true);
2394
- * ```
2395
- *
2396
- * @param role - Role name
2397
- * @returns Empty array (function deprecated)
2398
- */
2399
- declare function getPermissionsForRole(role: string): Permission[];
2400
2431
  declare const ALL_PERMISSIONS: {
2401
2432
  readonly READ_PAGE: Permission;
2402
2433
  readonly CREATE_PAGE: Permission;
@@ -2609,4 +2640,4 @@ declare function getDirectSupabaseAuthFixes(): QuickFix;
2609
2640
  */
2610
2641
  declare function getQuickFixes(issueType: string, details?: Record<string, any>): QuickFix[];
2611
2642
 
2612
- export { ALL_PERMISSIONS, AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DataAccessRecord, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, Permission, PermissionCheck, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RoleManagementResult, type RouteAccessRecord, type RouteConfig, type RuntimeComplianceResult, Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type SetupIssue, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getPermissionsForRole, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleBasedRouter, useRoleManagement, useSecureData, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
2643
+ export { ALL_PERMISSIONS, AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DataAccessRecord, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, Permission, PermissionCheck, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RoleManagementResult, type RouteAccessRecord, type RouteConfig, type RuntimeComplianceResult, Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type SetupIssue, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleBasedRouter, useRoleManagement, useSecureData, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
@@ -22,7 +22,6 @@ import {
22
22
  getCustomAuthCodeFixes,
23
23
  getDirectSupabaseAuthFixes,
24
24
  getDuplicateConfigFixes,
25
- getPermissionsForRole,
26
25
  getQuickFixes,
27
26
  getSetupIssues,
28
27
  getUnprotectedPageFixes,
@@ -40,7 +39,7 @@ import {
40
39
  withAccessLevelGuard,
41
40
  withPermissionGuard,
42
41
  withRoleGuard
43
- } from "../chunk-7EQTDTTJ.js";
42
+ } from "../chunk-6J4GEEJR.js";
44
43
  import {
45
44
  SecureSupabaseClient,
46
45
  createSecureClient,
@@ -53,16 +52,14 @@ import {
53
52
  useMultiplePermissions,
54
53
  usePermissions,
55
54
  useRBAC,
55
+ useResolvedScope,
56
56
  useResourcePermissions,
57
57
  useRoleManagement,
58
58
  useSecureSupabase
59
- } from "../chunk-XNXXZ43G.js";
60
- import "../chunk-LFNCN2SP.js";
61
- import {
62
- useResolvedScope
63
- } from "../chunk-IIELH4DL.js";
59
+ } from "../chunk-XWQCNGTQ.js";
60
+ import "../chunk-MMZ7JXPU.js";
64
61
  import "../chunk-KQCRWDSA.js";
65
- import "../chunk-7FLMSG37.js";
62
+ import "../chunk-EHMR7VYL.js";
66
63
  import {
67
64
  CACHE_PATTERNS,
68
65
  RBACCache,
@@ -94,7 +91,7 @@ import {
94
91
  resetPerformanceMetrics,
95
92
  resolveAppContext,
96
93
  setupRBAC
97
- } from "../chunk-KNC55RTG.js";
94
+ } from "../chunk-24UVZUZG.js";
98
95
  import {
99
96
  RBACAuditManager,
100
97
  createAuditManager,
@@ -103,7 +100,8 @@ import {
103
100
  setGlobalAuditManager
104
101
  } from "../chunk-63FOKYGO.js";
105
102
  import "../chunk-QXHPKYJV.js";
106
- import "../chunk-I7PSE6JW.js";
103
+ import "../chunk-F2IMUDXZ.js";
104
+ import "../chunk-FMUCXFII.js";
107
105
  import "../chunk-VBXEHIUJ.js";
108
106
  import "../chunk-PWLANIRT.js";
109
107
  import "../chunk-7D4SUZUM.js";
@@ -151,7 +149,6 @@ export {
151
149
  getPerformanceMetrics,
152
150
  getPerformanceSummary,
153
151
  getPermissionMap,
154
- getPermissionsForRole,
155
152
  getQuickFixes,
156
153
  getRBACConfig,
157
154
  getRBACLogger,
@@ -10,9 +10,8 @@
10
10
  /**
11
11
  * Parse and normalize event_colours to PaletteData
12
12
  *
13
- * Supports multiple input formats:
13
+ * Supports input formats:
14
14
  * - Object with 'main', 'sec', 'acc' keys
15
- * - Object with 'ev-main', 'ev-sec', 'ev-acc' keys (legacy)
16
15
  * - JSON string that will be parsed
17
16
  *
18
17
  * Only includes explicitly defined color values. Does not fill
@@ -34,17 +33,6 @@
34
33
  * // Returns: { main: { 500: {...}, raw: {...} }, sec: { 500: {...} }, acc: { 500: {...} } }
35
34
  * ```
36
35
  *
37
- * @example
38
- * ```ts
39
- * // Legacy format with ev-* keys
40
- * const colours = {
41
- * "ev-main": { 500: { L: 0.5, C: 0.2, H: 0 } },
42
- * "ev-sec": { 500: { L: 0.5, C: 0.2, H: 120 } },
43
- * "ev-acc": { 500: { L: 0.5, C: 0.2, H: 240 } }
44
- * };
45
- * const palette = parseAndNormalizeEventColours(colours);
46
- * // Returns normalized palette with only defined shades included
47
- * ```
48
36
  */
49
37
  declare function parseAndNormalizeEventColours(input: unknown): {
50
38
  main: any;
@@ -5,7 +5,7 @@ import {
5
5
  getCurrentThemeData,
6
6
  isDynamicThemingActive,
7
7
  parseAndNormalizeEventColours
8
- } from "../chunk-SQGMNID3.js";
8
+ } from "../chunk-L4OXEN46.js";
9
9
  import "../chunk-PWLANIRT.js";
10
10
  import "../chunk-7D4SUZUM.js";
11
11
  export {
@@ -267,16 +267,9 @@ declare function formatNumber(value: number, options?: Intl.NumberFormatOptions,
267
267
  /**
268
268
  * Format a number as a percentage.
269
269
  *
270
- * The third parameter can be either:
271
- * - A number for fixed decimal places (backward compatible): `formatPercent(0.81, 'en-US', 2)`
272
- * - An options object with:
273
- * - `decimals`: Fixed number of decimal places (default: 1)
274
- * - `preserveDecimals`: Auto-detect and preserve decimal places from the input value
275
- * - `maxDecimals`: Maximum decimal places when preserving (default: 10)
276
- *
277
270
  * @param value - The percentage value as a decimal (e.g., 0.81 for 0.81%)
278
271
  * @param locale - The locale string (default: 'en-US')
279
- * @param decimalsOrOptions - Either a number for fixed decimals, or an options object with:
272
+ * @param options - Options object with:
280
273
  * - `decimals` - Fixed number of decimal places (default: 1)
281
274
  * - `preserveDecimals` - Auto-detect and preserve decimal places from the input value
282
275
  * - `maxDecimals` - Maximum decimal places when preserving (default: 10)
@@ -286,14 +279,14 @@ declare function formatNumber(value: number, options?: Intl.NumberFormatOptions,
286
279
  * ```ts
287
280
  * // Fixed decimals (default behavior)
288
281
  * formatPercent(0.5) // '0.5%'
289
- * formatPercent(0.81, 'en-US', 1) // '0.8%' (loses precision)
282
+ * formatPercent(0.81, 'en-US', { decimals: 1 }) // '0.8%' (loses precision)
290
283
  *
291
284
  * // Preserve decimal places dynamically
292
285
  * formatPercent(0.81, 'en-US', { preserveDecimals: true }) // '0.81%'
293
286
  * formatPercent(0.8123, 'en-US', { preserveDecimals: true, maxDecimals: 2 }) // '0.81%'
294
287
  * ```
295
288
  */
296
- declare function formatPercent(value: number, locale?: string, decimalsOrOptions?: number | {
289
+ declare function formatPercent(value: number, locale?: string, options?: {
297
290
  decimals?: number;
298
291
  preserveDecimals?: boolean;
299
292
  maxDecimals?: number;
@@ -14,11 +14,19 @@ type UUID = string;
14
14
  type Operation = 'read' | 'create' | 'update' | 'delete';
15
15
  type Permission = `${Operation}:${string}`;
16
16
  type AccessLevel = 'viewer' | 'participant' | 'planner' | 'admin' | 'super';
17
+ /**
18
+ * Scope defines the context for permission checks.
19
+ * Can include organisation, event, and/or app identifiers.
20
+ */
17
21
  type Scope = {
18
22
  organisationId?: UUID;
19
23
  eventId?: string;
20
24
  appId?: AppId | UUID;
21
25
  };
26
+ /**
27
+ * Permission check request parameters.
28
+ * Defines who (userId) is checking what permission in what context (scope).
29
+ */
22
30
  type PermissionCheck = {
23
31
  userId: UUID;
24
32
  scope: Scope;