@jmruthers/pace-core 0.2.4

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 (1009) hide show
  1. package/CHANGELOG.md +202 -0
  2. package/README.md +299 -0
  3. package/dist/DataTable-BHlzyKZP.d.ts +116 -0
  4. package/dist/DataTable-GEY5U7OI.js +100 -0
  5. package/dist/DataTable-GEY5U7OI.js.map +1 -0
  6. package/dist/PublicLoadingSpinner-DztrzuJr.d.ts +3430 -0
  7. package/dist/UnifiedAuthProvider-w66zSCUf.d.ts +160 -0
  8. package/dist/api-GZHIDA4X.js +41 -0
  9. package/dist/api-GZHIDA4X.js.map +1 -0
  10. package/dist/appConfig-BVGyuvI7.d.ts +71 -0
  11. package/dist/appNameResolver-7GHF5ED2.js +22 -0
  12. package/dist/appNameResolver-7GHF5ED2.js.map +1 -0
  13. package/dist/audit-BUW3LMJB.js +16 -0
  14. package/dist/audit-BUW3LMJB.js.map +1 -0
  15. package/dist/chunk-22KLBHPS.js +29 -0
  16. package/dist/chunk-22KLBHPS.js.map +1 -0
  17. package/dist/chunk-24MKLB7U.js +81 -0
  18. package/dist/chunk-24MKLB7U.js.map +1 -0
  19. package/dist/chunk-2MKP6IYD.js +388 -0
  20. package/dist/chunk-2MKP6IYD.js.map +1 -0
  21. package/dist/chunk-2V3Y6YBC.js +114 -0
  22. package/dist/chunk-2V3Y6YBC.js.map +1 -0
  23. package/dist/chunk-5CDJCTOO.js +190 -0
  24. package/dist/chunk-5CDJCTOO.js.map +1 -0
  25. package/dist/chunk-6ZQVSHKL.js +1345 -0
  26. package/dist/chunk-6ZQVSHKL.js.map +1 -0
  27. package/dist/chunk-74C6SNEC.js +77 -0
  28. package/dist/chunk-74C6SNEC.js.map +1 -0
  29. package/dist/chunk-7BNPOCLL.js +178 -0
  30. package/dist/chunk-7BNPOCLL.js.map +1 -0
  31. package/dist/chunk-7JL3T7BO.js +3344 -0
  32. package/dist/chunk-7JL3T7BO.js.map +1 -0
  33. package/dist/chunk-CDQ3PX7L.js +18 -0
  34. package/dist/chunk-CDQ3PX7L.js.map +1 -0
  35. package/dist/chunk-DY5E3AT7.js +1734 -0
  36. package/dist/chunk-DY5E3AT7.js.map +1 -0
  37. package/dist/chunk-ETEJVKYK.js +6032 -0
  38. package/dist/chunk-ETEJVKYK.js.map +1 -0
  39. package/dist/chunk-I5Z3QH5X.js +32 -0
  40. package/dist/chunk-I5Z3QH5X.js.map +1 -0
  41. package/dist/chunk-MZBUOP4P.js +119 -0
  42. package/dist/chunk-MZBUOP4P.js.map +1 -0
  43. package/dist/chunk-N2EUGZRW.js +98 -0
  44. package/dist/chunk-N2EUGZRW.js.map +1 -0
  45. package/dist/chunk-NQ4TOOO6.js +20 -0
  46. package/dist/chunk-NQ4TOOO6.js.map +1 -0
  47. package/dist/chunk-OHXGNT3K.js +21 -0
  48. package/dist/chunk-OHXGNT3K.js.map +1 -0
  49. package/dist/chunk-OKXMUYIB.js +522 -0
  50. package/dist/chunk-OKXMUYIB.js.map +1 -0
  51. package/dist/chunk-PFRRIDYA.js +382 -0
  52. package/dist/chunk-PFRRIDYA.js.map +1 -0
  53. package/dist/chunk-PLDDJCW6.js +49 -0
  54. package/dist/chunk-PLDDJCW6.js.map +1 -0
  55. package/dist/chunk-SS3E6QLB.js +695 -0
  56. package/dist/chunk-SS3E6QLB.js.map +1 -0
  57. package/dist/chunk-TMRLB2LA.js +326 -0
  58. package/dist/chunk-TMRLB2LA.js.map +1 -0
  59. package/dist/chunk-WYB6MBZA.js +5533 -0
  60. package/dist/chunk-WYB6MBZA.js.map +1 -0
  61. package/dist/chunk-YDJW5XTN.js +84 -0
  62. package/dist/chunk-YDJW5XTN.js.map +1 -0
  63. package/dist/components.d.ts +1308 -0
  64. package/dist/components.js +3759 -0
  65. package/dist/components.js.map +1 -0
  66. package/dist/database-C3Szpi5J.d.ts +470 -0
  67. package/dist/hooks.d.ts +449 -0
  68. package/dist/hooks.js +612 -0
  69. package/dist/hooks.js.map +1 -0
  70. package/dist/index.d.ts +385 -0
  71. package/dist/index.js +569 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/organisation-CO3Sh3_D.d.ts +99 -0
  74. package/dist/providers.d.ts +45 -0
  75. package/dist/providers.js +36 -0
  76. package/dist/providers.js.map +1 -0
  77. package/dist/rbac/eslint-rules.d.ts +52 -0
  78. package/dist/rbac/eslint-rules.js +252 -0
  79. package/dist/rbac/eslint-rules.js.map +1 -0
  80. package/dist/rbac/index.d.ts +1918 -0
  81. package/dist/rbac/index.js +2212 -0
  82. package/dist/rbac/index.js.map +1 -0
  83. package/dist/styles/core.css +401 -0
  84. package/dist/styles/fonts/georama-italic.woff2 +0 -0
  85. package/dist/styles/fonts/georama.woff2 +0 -0
  86. package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
  87. package/dist/styles/fonts/open-sans.woff2 +0 -0
  88. package/dist/styles/fonts/reddit-mono.woff2 +0 -0
  89. package/dist/styles/index.d.ts +36 -0
  90. package/dist/styles/index.js +24 -0
  91. package/dist/styles/index.js.map +1 -0
  92. package/dist/theming/runtime.d.ts +73 -0
  93. package/dist/theming/runtime.js +16 -0
  94. package/dist/theming/runtime.js.map +1 -0
  95. package/dist/types-CInEi-ng.d.ts +316 -0
  96. package/dist/types.d.ts +196 -0
  97. package/dist/types.js +83 -0
  98. package/dist/types.js.map +1 -0
  99. package/dist/unified-CM7T0aTK.d.ts +198 -0
  100. package/dist/useComponentPerformance-DE9l5RkL.d.ts +11 -0
  101. package/dist/usePublicRouteParams-B6i0KtXW.d.ts +477 -0
  102. package/dist/utils.d.ts +639 -0
  103. package/dist/utils.js +1103 -0
  104. package/dist/utils.js.map +1 -0
  105. package/dist/validation-PM_iOaTI.d.ts +159 -0
  106. package/dist/validation.d.ts +138 -0
  107. package/dist/validation.js +477 -0
  108. package/dist/validation.js.map +1 -0
  109. package/docs/INDEX.md +192 -0
  110. package/docs/README.md +165 -0
  111. package/docs/api/.nojekyll +1 -0
  112. package/docs/api/README.md +301 -0
  113. package/docs/api/classes/ErrorBoundary.md +144 -0
  114. package/docs/api/classes/PublicErrorBoundary.md +132 -0
  115. package/docs/api/interfaces/AggregateConfig.md +43 -0
  116. package/docs/api/interfaces/ButtonProps.md +53 -0
  117. package/docs/api/interfaces/CardProps.md +40 -0
  118. package/docs/api/interfaces/ColorPalette.md +7 -0
  119. package/docs/api/interfaces/ColorShade.md +41 -0
  120. package/docs/api/interfaces/DataTableAction.md +200 -0
  121. package/docs/api/interfaces/DataTableColumn.md +300 -0
  122. package/docs/api/interfaces/DataTableProps.md +517 -0
  123. package/docs/api/interfaces/DataTableToolbarButton.md +96 -0
  124. package/docs/api/interfaces/EmptyStateConfig.md +61 -0
  125. package/docs/api/interfaces/EventContextType.md +96 -0
  126. package/docs/api/interfaces/EventLogoProps.md +152 -0
  127. package/docs/api/interfaces/EventProviderProps.md +19 -0
  128. package/docs/api/interfaces/FileSizeLimits.md +7 -0
  129. package/docs/api/interfaces/FileUploadProps.md +154 -0
  130. package/docs/api/interfaces/FooterProps.md +105 -0
  131. package/docs/api/interfaces/InactivityWarningModalProps.md +115 -0
  132. package/docs/api/interfaces/InputProps.md +53 -0
  133. package/docs/api/interfaces/LabelProps.md +107 -0
  134. package/docs/api/interfaces/LoginFormProps.md +184 -0
  135. package/docs/api/interfaces/NavigationItem.md +176 -0
  136. package/docs/api/interfaces/NavigationMenuProps.md +236 -0
  137. package/docs/api/interfaces/Organisation.md +140 -0
  138. package/docs/api/interfaces/OrganisationContextType.md +377 -0
  139. package/docs/api/interfaces/OrganisationMembership.md +140 -0
  140. package/docs/api/interfaces/OrganisationProviderProps.md +19 -0
  141. package/docs/api/interfaces/OrganisationSecurityError.md +62 -0
  142. package/docs/api/interfaces/PaceAppLayoutProps.md +393 -0
  143. package/docs/api/interfaces/PaceLoginPageProps.md +34 -0
  144. package/docs/api/interfaces/PaletteData.md +41 -0
  145. package/docs/api/interfaces/PublicErrorBoundaryProps.md +94 -0
  146. package/docs/api/interfaces/PublicErrorBoundaryState.md +68 -0
  147. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +86 -0
  148. package/docs/api/interfaces/PublicPageFooterProps.md +112 -0
  149. package/docs/api/interfaces/PublicPageHeaderProps.md +138 -0
  150. package/docs/api/interfaces/PublicPageLayoutProps.md +138 -0
  151. package/docs/api/interfaces/StorageConfig.md +41 -0
  152. package/docs/api/interfaces/StorageFileInfo.md +74 -0
  153. package/docs/api/interfaces/StorageFileMetadata.md +140 -0
  154. package/docs/api/interfaces/StorageListOptions.md +86 -0
  155. package/docs/api/interfaces/StorageListResult.md +41 -0
  156. package/docs/api/interfaces/StorageUploadOptions.md +88 -0
  157. package/docs/api/interfaces/StorageUploadResult.md +63 -0
  158. package/docs/api/interfaces/StorageUrlOptions.md +47 -0
  159. package/docs/api/interfaces/StyleImport.md +19 -0
  160. package/docs/api/interfaces/ToastActionElement.md +9 -0
  161. package/docs/api/interfaces/ToastProps.md +9 -0
  162. package/docs/api/interfaces/UnifiedAuthContextType.md +1108 -0
  163. package/docs/api/interfaces/UnifiedAuthProviderProps.md +171 -0
  164. package/docs/api/interfaces/UseInactivityTrackerOptions.md +136 -0
  165. package/docs/api/interfaces/UseInactivityTrackerReturn.md +123 -0
  166. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  167. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  168. package/docs/api/interfaces/UsePublicEventOptions.md +34 -0
  169. package/docs/api/interfaces/UsePublicEventReturn.md +68 -0
  170. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +94 -0
  171. package/docs/api/interfaces/UserEventAccess.md +118 -0
  172. package/docs/api/interfaces/UserMenuProps.md +86 -0
  173. package/docs/api/interfaces/UserProfile.md +63 -0
  174. package/docs/api/modules.md +4153 -0
  175. package/docs/api-reference/components.md +1623 -0
  176. package/docs/api-reference/hooks.md +627 -0
  177. package/docs/api-reference/providers.md +487 -0
  178. package/docs/api-reference/types.md +1005 -0
  179. package/docs/api-reference/utilities.md +1104 -0
  180. package/docs/app.css.example +53 -0
  181. package/docs/architecture/README.md +577 -0
  182. package/docs/best-practices/README.md +400 -0
  183. package/docs/best-practices/deployment.md +1042 -0
  184. package/docs/best-practices/performance.md +789 -0
  185. package/docs/best-practices/security.md +881 -0
  186. package/docs/best-practices/testing.md +981 -0
  187. package/docs/consuming-app-example.md +290 -0
  188. package/docs/consuming-app-vite-config.md +233 -0
  189. package/docs/core-concepts/authentication.md +98 -0
  190. package/docs/core-concepts/events.md +756 -0
  191. package/docs/core-concepts/organisations.md +790 -0
  192. package/docs/core-concepts/permissions.md +729 -0
  193. package/docs/core-concepts/rbac-system.md +233 -0
  194. package/docs/database-schema-requirements.md +172 -0
  195. package/docs/documentation-style-checklist.md +294 -0
  196. package/docs/examples/navigation-menu-auth-fix.md +344 -0
  197. package/docs/getting-started/examples/README.md +106 -0
  198. package/docs/getting-started/examples/basic-auth-app.md +521 -0
  199. package/docs/getting-started/examples/full-featured-app.md +616 -0
  200. package/docs/getting-started/installation.md +269 -0
  201. package/docs/getting-started/quick-start.md +401 -0
  202. package/docs/implementation-guides/app-layout.md +983 -0
  203. package/docs/implementation-guides/data-tables.md +1898 -0
  204. package/docs/implementation-guides/dynamic-colors.md +195 -0
  205. package/docs/implementation-guides/forms.md +578 -0
  206. package/docs/implementation-guides/hierarchical-datatable.md +850 -0
  207. package/docs/implementation-guides/large-datasets.md +281 -0
  208. package/docs/implementation-guides/navigation.md +844 -0
  209. package/docs/implementation-guides/performance.md +403 -0
  210. package/docs/implementation-guides/permission-enforcement.md +764 -0
  211. package/docs/implementation-guides/public-pages.md +752 -0
  212. package/docs/migration/README.md +493 -0
  213. package/docs/migration/organisation-context-timing-fix.md +217 -0
  214. package/docs/migration/quick-migration-guide.md +320 -0
  215. package/docs/migration/rbac-migration.md +571 -0
  216. package/docs/migration/v0.4.15-tailwind-scanning.md +272 -0
  217. package/docs/migration/v0.4.16-css-first-approach.md +306 -0
  218. package/docs/migration/v0.4.17-source-path-fix.md +229 -0
  219. package/docs/migration-guide.md +168 -0
  220. package/docs/performance/README.md +551 -0
  221. package/docs/print-components/README.md +258 -0
  222. package/docs/print-components/api-reference.md +636 -0
  223. package/docs/print-components/examples/README.md +204 -0
  224. package/docs/print-components/examples/basic-report.tsx +92 -0
  225. package/docs/print-components/examples/card-catalog.tsx +149 -0
  226. package/docs/print-components/examples/cover-page-report.tsx +163 -0
  227. package/docs/print-components/quick-start.md +363 -0
  228. package/docs/quick-reference.md +576 -0
  229. package/docs/rbac/README.md +265 -0
  230. package/docs/rbac/advanced-patterns.md +776 -0
  231. package/docs/rbac/api-reference.md +1033 -0
  232. package/docs/rbac/examples.md +883 -0
  233. package/docs/rbac/getting-started.md +679 -0
  234. package/docs/rbac/quick-start.md +619 -0
  235. package/docs/rbac/super-admin-guide.md +592 -0
  236. package/docs/rbac/troubleshooting.md +316 -0
  237. package/docs/security/README.md +680 -0
  238. package/docs/security/checklist.md +343 -0
  239. package/docs/style-guide.md +522 -0
  240. package/docs/styles/README.md +319 -0
  241. package/docs/testing/README.md +874 -0
  242. package/docs/troubleshooting/README.md +497 -0
  243. package/docs/troubleshooting/common-issues.md +1563 -0
  244. package/docs/troubleshooting/database-view-compatibility.md +119 -0
  245. package/docs/troubleshooting/debugging.md +1117 -0
  246. package/docs/troubleshooting/migration.md +918 -0
  247. package/docs/troubleshooting/organisation-context-setup.md +277 -0
  248. package/docs/troubleshooting/react-hooks-issue-analysis.md +166 -0
  249. package/docs/troubleshooting/styling-issues.md +219 -0
  250. package/docs/troubleshooting/tailwind-content-scanning.md +213 -0
  251. package/docs/usage.md +175 -0
  252. package/docs/visual-testing.md +114 -0
  253. package/package.json +211 -0
  254. package/src/__mocks__/lucide-react.ts +181 -0
  255. package/src/__tests__/README.md +404 -0
  256. package/src/__tests__/debug-provider.unit.test.tsx +67 -0
  257. package/src/__tests__/e2e/workflows.test.tsx +373 -0
  258. package/src/__tests__/hybridPermissions.unit.test.tsx +474 -0
  259. package/src/__tests__/index.integration.test.ts +491 -0
  260. package/src/__tests__/mocks/MockAuthProvider-standalone.tsx +47 -0
  261. package/src/__tests__/mocks/MockAuthProvider.tsx +63 -0
  262. package/src/__tests__/mocks/enhancedSupabaseMock.ts +252 -0
  263. package/src/__tests__/mocks/index.test.ts +23 -0
  264. package/src/__tests__/mocks/index.ts +16 -0
  265. package/src/__tests__/mocks/mockAuth.ts +155 -0
  266. package/src/__tests__/mocks/mockSupabase.ts +83 -0
  267. package/src/__tests__/mocks/mockSupabaseClient.ts +63 -0
  268. package/src/__tests__/mocks/providers.tsx +22 -0
  269. package/src/__tests__/patterns/__tests__/testPatterns.test.ts +394 -0
  270. package/src/__tests__/patterns/testPatterns.ts +124 -0
  271. package/src/__tests__/performance/componentPerformance.performance.test.ts +27 -0
  272. package/src/__tests__/performance/index.ts +24 -0
  273. package/src/__tests__/performance/performanceValidation.performance.test.ts +15 -0
  274. package/src/__tests__/security/security.unit.test.tsx +7 -0
  275. package/src/__tests__/security/securityValidation.security.test.tsx +153 -0
  276. package/src/__tests__/setup.ts +259 -0
  277. package/src/__tests__/setupTests.d.ts +1 -0
  278. package/src/__tests__/shared/componentTestUtils.tsx +475 -0
  279. package/src/__tests__/shared/errorHandlingTestUtils.ts +107 -0
  280. package/src/__tests__/shared/index.ts +81 -0
  281. package/src/__tests__/shared/integrationTestUtils.tsx +375 -0
  282. package/src/__tests__/shared/performanceTestUtils.tsx +476 -0
  283. package/src/__tests__/shared/testUtils.optimized.tsx +627 -0
  284. package/src/__tests__/simple.test.tsx +20 -0
  285. package/src/__tests__/templates/accessibility.test.template.tsx +279 -0
  286. package/src/__tests__/templates/component.test.template.tsx +122 -0
  287. package/src/__tests__/templates/integration.test.template.tsx +199 -0
  288. package/src/__tests__/test-utils/dataFactories.ts +60 -0
  289. package/src/__tests__/test-utils/index.ts +6 -0
  290. package/src/__tests__/typeSafety.unit.test.ts +65 -0
  291. package/src/__tests__/unifiedAuth.unit.test.tsx +151 -0
  292. package/src/__tests__/utils/accessibilityHelpers.ts +254 -0
  293. package/src/__tests__/utils/assertions.ts +50 -0
  294. package/src/__tests__/utils/deterministicHelpers.ts +31 -0
  295. package/src/__tests__/utils/edgeCaseConfig.test.ts +75 -0
  296. package/src/__tests__/utils/edgeCaseConfig.ts +98 -0
  297. package/src/__tests__/utils/mockHelpers.ts +149 -0
  298. package/src/__tests__/utils/mockLoader.ts +101 -0
  299. package/src/__tests__/utils/performanceHelpers.ts +55 -0
  300. package/src/__tests__/utils/performanceTestHelpers.ts +68 -0
  301. package/src/__tests__/utils/testDataFactories.ts +28 -0
  302. package/src/__tests__/utils/testIsolation.ts +67 -0
  303. package/src/__tests__/utils/visualTestHelpers.ts +20 -0
  304. package/src/__tests__/visual/__snapshots__/componentSnapshots.visual.test.tsx.snap +68 -0
  305. package/src/__tests__/visual/__snapshots__/componentVisuals.visual.test.tsx.snap +14 -0
  306. package/src/__tests__/visual/__snapshots__/visualRegression.test.tsx.snap +217 -0
  307. package/src/__tests__/visual/__snapshots__/visualRegression.visual.test.tsx.snap +24 -0
  308. package/src/__tests__/visual/componentSnapshots.visual.test.tsx +33 -0
  309. package/src/__tests__/visual/componentVisuals.visual.test.tsx +12 -0
  310. package/src/__tests__/visual/visualRegression.visual.test.tsx +20 -0
  311. package/src/components/Alert/Alert.tsx +134 -0
  312. package/src/components/Alert/__tests__/Alert.unit.test.tsx +381 -0
  313. package/src/components/Alert/index.ts +2 -0
  314. package/src/components/Avatar/Avatar.tsx +84 -0
  315. package/src/components/Avatar/__tests__/Avatar.unit.test.tsx +232 -0
  316. package/src/components/Avatar/index.ts +2 -0
  317. package/src/components/Button/Button.tsx +270 -0
  318. package/src/components/Button/__tests__/Button.accessibility.test.tsx +131 -0
  319. package/src/components/Button/__tests__/Button.comprehensive.test.tsx +721 -0
  320. package/src/components/Button/__tests__/Button.unit.test.tsx +189 -0
  321. package/src/components/Button/__tests__/EventSelector.integration.test.tsx +285 -0
  322. package/src/components/Button/index.ts +2 -0
  323. package/src/components/Card/Card.tsx +271 -0
  324. package/src/components/Card/__tests__/Card.accessibility.test.tsx +394 -0
  325. package/src/components/Card/__tests__/Card.comprehensive.test.tsx +599 -0
  326. package/src/components/Card/__tests__/Card.integration.test.tsx +673 -0
  327. package/src/components/Card/__tests__/Card.performance.test.tsx +546 -0
  328. package/src/components/Card/__tests__/Card.unit.test.tsx +330 -0
  329. package/src/components/Card/__tests__/Card.visual.test.tsx +599 -0
  330. package/src/components/Card/__tests__/README.md +211 -0
  331. package/src/components/Card/index.ts +1 -0
  332. package/src/components/Checkbox/Checkbox.tsx +75 -0
  333. package/src/components/Checkbox/__mocks__/Checkbox.tsx +2 -0
  334. package/src/components/Checkbox/__tests__/Checkbox.unit.test.tsx +520 -0
  335. package/src/components/Checkbox/index.ts +2 -0
  336. package/src/components/DataTable/DataTable.tsx +440 -0
  337. package/src/components/DataTable/__tests__/DataTable.autoSizing.test.tsx +526 -0
  338. package/src/components/DataTable/__tests__/DataTable.errorHandling.test.tsx +259 -0
  339. package/src/components/DataTable/__tests__/DataTable.hierarchical.test.tsx +675 -0
  340. package/src/components/DataTable/__tests__/DataTable.infinite-loop.test.tsx +324 -0
  341. package/src/components/DataTable/__tests__/DataTable.integration.test.tsx +724 -0
  342. package/src/components/DataTable/__tests__/DataTable.performance.test.tsx +597 -0
  343. package/src/components/DataTable/__tests__/DataTable.permissions.test.tsx +306 -0
  344. package/src/components/DataTable/__tests__/DataTable.regressionFixes.test.tsx +546 -0
  345. package/src/components/DataTable/__tests__/DataTable.selection.controlled.test.tsx +386 -0
  346. package/src/components/DataTable/__tests__/DataTable.selection.test.tsx +338 -0
  347. package/src/components/DataTable/__tests__/DataTable.userWorkflows.test.tsx +310 -0
  348. package/src/components/DataTable/__tests__/DataTable.workflowValidation.test.tsx +489 -0
  349. package/src/components/DataTable/__tests__/DataTable.workflows.test.tsx +701 -0
  350. package/src/components/DataTable/__tests__/README.md +136 -0
  351. package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +66 -0
  352. package/src/components/DataTable/__tests__/performance-regression.test.tsx +788 -0
  353. package/src/components/DataTable/__tests__/performance.test.tsx +365 -0
  354. package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +103 -0
  355. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +382 -0
  356. package/src/components/DataTable/__tests__/test-utils.ts +94 -0
  357. package/src/components/DataTable/components/ActionButtons.tsx +177 -0
  358. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +160 -0
  359. package/src/components/DataTable/components/ColumnFilter.tsx +114 -0
  360. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +100 -0
  361. package/src/components/DataTable/components/DataTableBody.tsx +462 -0
  362. package/src/components/DataTable/components/DataTableCore.tsx +869 -0
  363. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +214 -0
  364. package/src/components/DataTable/components/DataTableHeader.tsx +31 -0
  365. package/src/components/DataTable/components/DataTableModals.tsx +87 -0
  366. package/src/components/DataTable/components/DataTableToolbar.tsx +251 -0
  367. package/src/components/DataTable/components/DraggableColumnHeader.tsx +148 -0
  368. package/src/components/DataTable/components/EditableRow.tsx +160 -0
  369. package/src/components/DataTable/components/EmptyState.tsx +64 -0
  370. package/src/components/DataTable/components/ExpandButton.tsx +113 -0
  371. package/src/components/DataTable/components/FilterRow.tsx +101 -0
  372. package/src/components/DataTable/components/GroupHeader.tsx +42 -0
  373. package/src/components/DataTable/components/GroupingDropdown.tsx +96 -0
  374. package/src/components/DataTable/components/ImportModal.tsx +345 -0
  375. package/src/components/DataTable/components/LoadingState.tsx +12 -0
  376. package/src/components/DataTable/components/PaginationControls.tsx +332 -0
  377. package/src/components/DataTable/components/UnifiedTableBody.tsx +911 -0
  378. package/src/components/DataTable/components/ViewRowModal.tsx +68 -0
  379. package/src/components/DataTable/components/VirtualizedDataTable.tsx +593 -0
  380. package/src/components/DataTable/components/__tests__/ActionButtons.unit.test.tsx +150 -0
  381. package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +224 -0
  382. package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.unit.test.tsx +244 -0
  383. package/src/components/DataTable/components/__tests__/DataTable.accessibility.test.tsx +523 -0
  384. package/src/components/DataTable/components/__tests__/DataTable.integration.test.tsx +401 -0
  385. package/src/components/DataTable/components/__tests__/DataTable.performance.test.tsx +161 -0
  386. package/src/components/DataTable/components/__tests__/DataTable.real.test.tsx +251 -0
  387. package/src/components/DataTable/components/__tests__/DataTable.security.test.tsx +172 -0
  388. package/src/components/DataTable/components/__tests__/DataTable.unit.test.tsx +290 -0
  389. package/src/components/DataTable/components/__tests__/DataTableBody.unit.test.tsx +147 -0
  390. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.unit.test.tsx +182 -0
  391. package/src/components/DataTable/components/__tests__/DataTableHeader.unit.test.tsx +143 -0
  392. package/src/components/DataTable/components/__tests__/DataTableModals.unit.test.tsx +123 -0
  393. package/src/components/DataTable/components/__tests__/EditableRow.unit.test.tsx +660 -0
  394. package/src/components/DataTable/components/__tests__/EmptyState.unit.test.tsx +256 -0
  395. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +498 -0
  396. package/src/components/DataTable/components/__tests__/FilterRow.unit.test.tsx +112 -0
  397. package/src/components/DataTable/components/__tests__/FilteringToggle.unit.test.tsx +130 -0
  398. package/src/components/DataTable/components/__tests__/GroupHeader.unit.test.tsx +172 -0
  399. package/src/components/DataTable/components/__tests__/GroupingDropdown.unit.test.tsx +222 -0
  400. package/src/components/DataTable/components/__tests__/ImportModal.unit.test.tsx +780 -0
  401. package/src/components/DataTable/components/__tests__/LoadingState.unit.test.tsx +65 -0
  402. package/src/components/DataTable/components/__tests__/PaginationControls.unit.test.tsx +634 -0
  403. package/src/components/DataTable/components/__tests__/StateComponents.unit.test.tsx +48 -0
  404. package/src/components/DataTable/components/__tests__/UnifiedTableBody.hierarchical.test.tsx +541 -0
  405. package/src/components/DataTable/components/__tests__/ViewRowModal.unit.test.tsx +228 -0
  406. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.unit.test.tsx +568 -0
  407. package/src/components/DataTable/components/index.ts +17 -0
  408. package/src/components/DataTable/context/DataTableContext.tsx +97 -0
  409. package/src/components/DataTable/core/ActionManager.ts +235 -0
  410. package/src/components/DataTable/core/ColumnFactory.ts +268 -0
  411. package/src/components/DataTable/core/ColumnManager.ts +205 -0
  412. package/src/components/DataTable/core/DataManager.ts +188 -0
  413. package/src/components/DataTable/core/DataTableContext.tsx +182 -0
  414. package/src/components/DataTable/core/LocalDataAdapter.ts +264 -0
  415. package/src/components/DataTable/core/PluginRegistry.ts +229 -0
  416. package/src/components/DataTable/core/StateManager.ts +311 -0
  417. package/src/components/DataTable/core/__tests__/ActionManager.unit.test.ts +405 -0
  418. package/src/components/DataTable/core/__tests__/ArchitectureIntegration.unit.test.tsx +445 -0
  419. package/src/components/DataTable/core/__tests__/ColumnFactory.unit.test.ts +288 -0
  420. package/src/components/DataTable/core/__tests__/ColumnManager.unit.test.ts +623 -0
  421. package/src/components/DataTable/core/__tests__/DataManager.unit.test.ts +431 -0
  422. package/src/components/DataTable/core/__tests__/DataTableContext.unit.test.tsx +433 -0
  423. package/src/components/DataTable/core/__tests__/LocalDataAdapter.unit.test.ts +422 -0
  424. package/src/components/DataTable/core/__tests__/PluginRegistry.unit.test.tsx +207 -0
  425. package/src/components/DataTable/core/__tests__/StateManager.unit.test.ts +278 -0
  426. package/src/components/DataTable/core/index.ts +8 -0
  427. package/src/components/DataTable/core/interfaces.ts +338 -0
  428. package/src/components/DataTable/examples/AutoSizingExample.tsx +180 -0
  429. package/src/components/DataTable/examples/ColumnSizingComparison.tsx +235 -0
  430. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +418 -0
  431. package/src/components/DataTable/examples/HierarchicalExample.tsx +472 -0
  432. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +173 -0
  433. package/src/components/DataTable/examples/PerformanceExample.tsx +502 -0
  434. package/src/components/DataTable/examples/__tests__/PerformanceExample.unit.test.tsx +281 -0
  435. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.unit.test.ts +407 -0
  436. package/src/components/DataTable/hooks/__tests__/useColumnReordering.unit.test.ts +679 -0
  437. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +95 -0
  438. package/src/components/DataTable/hooks/useColumnReordering.ts +110 -0
  439. package/src/components/DataTable/hooks/useDataTableState.ts +325 -0
  440. package/src/components/DataTable/hooks/useHierarchicalState.ts +174 -0
  441. package/src/components/DataTable/index.ts +70 -0
  442. package/src/components/DataTable/styles.ts +171 -0
  443. package/src/components/DataTable/types.ts +475 -0
  444. package/src/components/DataTable/utils/__tests__/columnSizing.test.ts +237 -0
  445. package/src/components/DataTable/utils/__tests__/debugTools.unit.test.ts +267 -0
  446. package/src/components/DataTable/utils/__tests__/errorHandling.unit.test.ts +467 -0
  447. package/src/components/DataTable/utils/__tests__/exportUtils.unit.test.ts +380 -0
  448. package/src/components/DataTable/utils/__tests__/flexibleImport.unit.test.ts +233 -0
  449. package/src/components/DataTable/utils/__tests__/performanceUtils.unit.test.ts +414 -0
  450. package/src/components/DataTable/utils/columnSizing.ts +125 -0
  451. package/src/components/DataTable/utils/debugTools.ts +583 -0
  452. package/src/components/DataTable/utils/errorHandling.ts +494 -0
  453. package/src/components/DataTable/utils/exportUtils.ts +126 -0
  454. package/src/components/DataTable/utils/flexibleImport.ts +510 -0
  455. package/src/components/DataTable/utils/hierarchicalSorting.ts +151 -0
  456. package/src/components/DataTable/utils/hierarchicalUtils.ts +218 -0
  457. package/src/components/DataTable/utils/index.ts +1 -0
  458. package/src/components/DataTable/utils/performanceUtils.ts +351 -0
  459. package/src/components/Dialog/Dialog.tsx +782 -0
  460. package/src/components/Dialog/README.md +804 -0
  461. package/src/components/Dialog/__tests__/Dialog.accessibility.test.tsx +521 -0
  462. package/src/components/Dialog/__tests__/Dialog.auto-size.example.tsx +157 -0
  463. package/src/components/Dialog/__tests__/Dialog.enhanced.test.tsx +538 -0
  464. package/src/components/Dialog/__tests__/Dialog.unit.test.tsx +1373 -0
  465. package/src/components/Dialog/examples/BasicHtmlTest.tsx +55 -0
  466. package/src/components/Dialog/examples/DebugHtmlExample.tsx +68 -0
  467. package/src/components/Dialog/examples/HtmlDialogExample.tsx +202 -0
  468. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +61 -0
  469. package/src/components/Dialog/examples/SmartDialogExample.tsx +322 -0
  470. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +151 -0
  471. package/src/components/Dialog/index.ts +12 -0
  472. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +611 -0
  473. package/src/components/Dialog/utils/safeHtml.ts +185 -0
  474. package/src/components/ErrorBoundary/ErrorBoundary.tsx +312 -0
  475. package/src/components/ErrorBoundary/__tests__/ErrorBoundary.accessibility.test.tsx +517 -0
  476. package/src/components/ErrorBoundary/__tests__/ErrorBoundary.integration.test.tsx +572 -0
  477. package/src/components/ErrorBoundary/__tests__/ErrorBoundary.unit.test.tsx +579 -0
  478. package/src/components/ErrorBoundary/index.ts +8 -0
  479. package/src/components/EventSelector/EventSelector.tsx +360 -0
  480. package/src/components/EventSelector/__tests__/EventSelector.test.tsx +528 -0
  481. package/src/components/EventSelector/index.ts +3 -0
  482. package/src/components/EventSelector/types.ts +79 -0
  483. package/src/components/FileUpload/FileUpload.example.tsx +218 -0
  484. package/src/components/FileUpload/FileUpload.tsx +237 -0
  485. package/src/components/FileUpload/__tests__/FileUpload.integration.test.tsx +992 -0
  486. package/src/components/FileUpload/__tests__/FileUpload.real.test.tsx +927 -0
  487. package/src/components/FileUpload/__tests__/FileUpload.test.tsx +855 -0
  488. package/src/components/FileUpload/__tests__/FileUpload.unit.test.tsx +1311 -0
  489. package/src/components/FileUpload/__tests__/FileUpload.unmocked.test.tsx +937 -0
  490. package/src/components/FileUpload/index.ts +6 -0
  491. package/src/components/Footer/Footer.tsx +197 -0
  492. package/src/components/Footer/__tests__/Footer.accessibility.test.tsx +359 -0
  493. package/src/components/Footer/__tests__/Footer.integration.test.tsx +353 -0
  494. package/src/components/Footer/__tests__/Footer.performance.test.tsx +309 -0
  495. package/src/components/Footer/__tests__/Footer.unit.test.tsx +309 -0
  496. package/src/components/Footer/__tests__/Footer.visual.test.tsx +335 -0
  497. package/src/components/Footer/index.ts +17 -0
  498. package/src/components/Form/Form.tsx +166 -0
  499. package/src/components/Form/FormErrorSummary.tsx +113 -0
  500. package/src/components/Form/FormField.tsx +249 -0
  501. package/src/components/Form/FormFieldset.tsx +127 -0
  502. package/src/components/Form/FormLiveRegion.tsx +198 -0
  503. package/src/components/Form/__tests__/Form.accessibility.test.tsx +820 -0
  504. package/src/components/Form/__tests__/Form.unit.test.tsx +305 -0
  505. package/src/components/Form/__tests__/FormErrorSummary.unit.test.tsx +285 -0
  506. package/src/components/Form/__tests__/FormFieldset.unit.test.tsx +241 -0
  507. package/src/components/Form/index.ts +26 -0
  508. package/src/components/Header/Header.tsx +301 -0
  509. package/src/components/Header/__tests__/Header.accessibility.test.tsx +382 -0
  510. package/src/components/Header/__tests__/Header.comprehensive.test.tsx +509 -0
  511. package/src/components/Header/__tests__/Header.unit.test.tsx +335 -0
  512. package/src/components/Header/index.ts +4 -0
  513. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +196 -0
  514. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +164 -0
  515. package/src/components/InactivityWarningModal/__tests__/InactivityWarningModal.unit.test.tsx +224 -0
  516. package/src/components/InactivityWarningModal/index.ts +9 -0
  517. package/src/components/Input/Input.tsx +201 -0
  518. package/src/components/Input/__mocks__/Input.tsx +2 -0
  519. package/src/components/Input/__tests__/Input.accessibility.test.tsx +632 -0
  520. package/src/components/Input/__tests__/Input.unit.test.tsx +1121 -0
  521. package/src/components/Input/index.ts +9 -0
  522. package/src/components/Label/Label.tsx +186 -0
  523. package/src/components/Label/__tests__/Label.accessibility.test.tsx +239 -0
  524. package/src/components/Label/__tests__/Label.unit.test.tsx +331 -0
  525. package/src/components/Label/index.ts +2 -0
  526. package/src/components/LoadingSpinner/LoadingSpinner.tsx +98 -0
  527. package/src/components/LoadingSpinner/__tests__/LoadingSpinner.accessibility.test.tsx +116 -0
  528. package/src/components/LoadingSpinner/__tests__/LoadingSpinner.unit.test.tsx +144 -0
  529. package/src/components/LoadingSpinner/index.ts +3 -0
  530. package/src/components/LoginForm/LoginForm.tsx +273 -0
  531. package/src/components/LoginForm/__tests__/LoginForm.accessibility.test.tsx +201 -0
  532. package/src/components/LoginForm/__tests__/LoginForm.unit.test.tsx +119 -0
  533. package/src/components/LoginForm/index.ts +3 -0
  534. package/src/components/NavigationMenu/NavigationMenu.tsx +698 -0
  535. package/src/components/NavigationMenu/__tests__/NavigationMenu.accessibility.test.tsx +378 -0
  536. package/src/components/NavigationMenu/__tests__/NavigationMenu.enhanced.test.tsx +768 -0
  537. package/src/components/NavigationMenu/__tests__/NavigationMenu.integration.test.tsx +576 -0
  538. package/src/components/NavigationMenu/__tests__/NavigationMenu.performance.test.tsx +585 -0
  539. package/src/components/NavigationMenu/__tests__/NavigationMenu.real.component.test.tsx +783 -0
  540. package/src/components/NavigationMenu/__tests__/NavigationMenu.security.enhanced.test.tsx +810 -0
  541. package/src/components/NavigationMenu/__tests__/NavigationMenu.security.test.tsx +494 -0
  542. package/src/components/NavigationMenu/__tests__/NavigationMenu.unit.test.tsx +331 -0
  543. package/src/components/NavigationMenu/__tests__/NavigationMenu.userWorkflows.test.tsx +347 -0
  544. package/src/components/NavigationMenu/__tests__/NavigationMenu.workflows.test.tsx +584 -0
  545. package/src/components/NavigationMenu/index.ts +10 -0
  546. package/src/components/NavigationMenu/types.ts +85 -0
  547. package/src/components/OrganisationSelector/OrganisationSelector.tsx +304 -0
  548. package/src/components/OrganisationSelector/__tests__/OrganisationSelector.unit.test.tsx +664 -0
  549. package/src/components/OrganisationSelector/index.ts +9 -0
  550. package/src/components/PaceAppLayout/PaceAppLayout.tsx +699 -0
  551. package/src/components/PaceAppLayout/README.md +278 -0
  552. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +288 -0
  553. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +889 -0
  554. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +629 -0
  555. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +782 -0
  556. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +904 -0
  557. package/src/components/PaceAppLayout/index.ts +1 -0
  558. package/src/components/PaceLoginPage/PaceLoginPage.tsx +221 -0
  559. package/src/components/PaceLoginPage/__tests__/PaceLoginPage.accessibility.test.tsx +463 -0
  560. package/src/components/PaceLoginPage/__tests__/PaceLoginPage.integration.test.tsx +586 -0
  561. package/src/components/PaceLoginPage/__tests__/PaceLoginPage.unit.test.tsx +533 -0
  562. package/src/components/PaceLoginPage/index.ts +1 -0
  563. package/src/components/PasswordReset/PasswordChangeForm.tsx +186 -0
  564. package/src/components/PasswordReset/PasswordResetForm.tsx +201 -0
  565. package/src/components/PasswordReset/__tests__/PasswordChangeForm.accessibility.test.tsx +408 -0
  566. package/src/components/PasswordReset/__tests__/PasswordChangeForm.unit.test.tsx +561 -0
  567. package/src/components/PasswordReset/__tests__/PasswordReset.integration.test.tsx +304 -0
  568. package/src/components/PasswordReset/__tests__/PasswordResetForm.accessibility.test.tsx +20 -0
  569. package/src/components/PasswordReset/__tests__/PasswordResetForm.unit.test.tsx +523 -0
  570. package/src/components/PasswordReset/__tests__/__mocks__/UnifiedAuthProvider.ts +29 -0
  571. package/src/components/PasswordReset/index.ts +4 -0
  572. package/src/components/Print/__tests__/Print.comprehensive.test.tsx +331 -0
  573. package/src/components/PrintButton/PrintButton.tsx +321 -0
  574. package/src/components/PrintButton/PrintButtonGroup.tsx +84 -0
  575. package/src/components/PrintButton/PrintToolbar.tsx +94 -0
  576. package/src/components/PrintButton/__tests__/PrintButton.unit.test.tsx +429 -0
  577. package/src/components/PrintButton/__tests__/PrintButtonGroup.unit.test.tsx +277 -0
  578. package/src/components/PrintButton/__tests__/PrintToolbar.unit.test.tsx +264 -0
  579. package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +438 -0
  580. package/src/components/PrintButton/index.ts +33 -0
  581. package/src/components/PrintButton/types.ts +173 -0
  582. package/src/components/PrintCard/PrintCard.tsx +154 -0
  583. package/src/components/PrintCard/PrintCardContent.tsx +57 -0
  584. package/src/components/PrintCard/PrintCardFooter.tsx +60 -0
  585. package/src/components/PrintCard/PrintCardGrid.tsx +91 -0
  586. package/src/components/PrintCard/PrintCardHeader.tsx +78 -0
  587. package/src/components/PrintCard/PrintCardImage.tsx +81 -0
  588. package/src/components/PrintCard/__tests__/PrintCard.unit.test.tsx +233 -0
  589. package/src/components/PrintCard/__tests__/PrintCardContent.test.tsx +284 -0
  590. package/src/components/PrintCard/__tests__/PrintCardGrid.unit.test.tsx +214 -0
  591. package/src/components/PrintCard/__tests__/PrintCardImage.unit.test.tsx +264 -0
  592. package/src/components/PrintCard/examples/PrintCardShowcase.tsx +239 -0
  593. package/src/components/PrintCard/index.ts +34 -0
  594. package/src/components/PrintCard/types.ts +171 -0
  595. package/src/components/PrintDataTable/PrintDataTable.tsx +215 -0
  596. package/src/components/PrintDataTable/PrintTableGroup.tsx +90 -0
  597. package/src/components/PrintDataTable/PrintTableRow.tsx +76 -0
  598. package/src/components/PrintDataTable/__tests__/PrintDataTable.unit.test.tsx +361 -0
  599. package/src/components/PrintDataTable/__tests__/PrintTableGroup.unit.test.tsx +314 -0
  600. package/src/components/PrintDataTable/__tests__/PrintTableRow.unit.test.tsx +362 -0
  601. package/src/components/PrintDataTable/index.ts +25 -0
  602. package/src/components/PrintDataTable/types.ts +67 -0
  603. package/src/components/PrintFooter/PrintFooter.tsx +183 -0
  604. package/src/components/PrintFooter/PrintFooterContent.tsx +71 -0
  605. package/src/components/PrintFooter/PrintFooterInfo.tsx +86 -0
  606. package/src/components/PrintFooter/PrintPageNumber.tsx +90 -0
  607. package/src/components/PrintFooter/__tests__/PrintFooter.unit.test.tsx +500 -0
  608. package/src/components/PrintFooter/__tests__/PrintFooterContent.unit.test.tsx +321 -0
  609. package/src/components/PrintFooter/__tests__/PrintFooterInfo.unit.test.tsx +335 -0
  610. package/src/components/PrintFooter/__tests__/PrintPageNumber.unit.test.tsx +340 -0
  611. package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +390 -0
  612. package/src/components/PrintFooter/index.ts +30 -0
  613. package/src/components/PrintFooter/types.ts +149 -0
  614. package/src/components/PrintGrid/PrintGrid.tsx +180 -0
  615. package/src/components/PrintGrid/PrintGridBreakpoint.tsx +109 -0
  616. package/src/components/PrintGrid/PrintGridContainer.tsx +128 -0
  617. package/src/components/PrintGrid/PrintGridItem.tsx +220 -0
  618. package/src/components/PrintGrid/__tests__/PrintGrid.unit.test.tsx +340 -0
  619. package/src/components/PrintGrid/__tests__/PrintGridBreakpoint.unit.test.tsx +261 -0
  620. package/src/components/PrintGrid/__tests__/PrintGridContainer.unit.test.tsx +338 -0
  621. package/src/components/PrintGrid/__tests__/PrintGridItem.unit.test.tsx +338 -0
  622. package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +359 -0
  623. package/src/components/PrintGrid/index.ts +31 -0
  624. package/src/components/PrintGrid/types.ts +159 -0
  625. package/src/components/PrintHeader/PrintCoverHeader.tsx +230 -0
  626. package/src/components/PrintHeader/PrintHeader.tsx +150 -0
  627. package/src/components/PrintHeader/__tests__/PrintCoverHeader.unit.test.tsx +309 -0
  628. package/src/components/PrintHeader/__tests__/PrintHeader.unit.test.tsx +202 -0
  629. package/src/components/PrintHeader/index.ts +17 -0
  630. package/src/components/PrintHeader/types.ts +42 -0
  631. package/src/components/PrintLayout/PrintLayout.tsx +122 -0
  632. package/src/components/PrintLayout/PrintLayoutContext.tsx +66 -0
  633. package/src/components/PrintLayout/PrintPageBreak.tsx +52 -0
  634. package/src/components/PrintLayout/__tests__/PrintLayout.unit.test.tsx +238 -0
  635. package/src/components/PrintLayout/examples/PrintShowcase.tsx +230 -0
  636. package/src/components/PrintLayout/index.ts +19 -0
  637. package/src/components/PrintLayout/types.ts +37 -0
  638. package/src/components/PrintPageBreak/PrintPageBreak.tsx +120 -0
  639. package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +90 -0
  640. package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +112 -0
  641. package/src/components/PrintPageBreak/__tests__/PrintPageBreak.unit.test.tsx +263 -0
  642. package/src/components/PrintPageBreak/__tests__/PrintPageBreakGroup.unit.test.tsx +239 -0
  643. package/src/components/PrintPageBreak/__tests__/PrintPageBreakIndicator.unit.test.tsx +235 -0
  644. package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +279 -0
  645. package/src/components/PrintPageBreak/index.ts +23 -0
  646. package/src/components/PrintPageBreak/types.ts +94 -0
  647. package/src/components/PrintSection/PrintColumn.tsx +104 -0
  648. package/src/components/PrintSection/PrintDivider.tsx +101 -0
  649. package/src/components/PrintSection/PrintSection.tsx +129 -0
  650. package/src/components/PrintSection/PrintSectionContent.tsx +75 -0
  651. package/src/components/PrintSection/PrintSectionHeader.tsx +97 -0
  652. package/src/components/PrintSection/__tests__/PrintColumn.unit.test.tsx +385 -0
  653. package/src/components/PrintSection/__tests__/PrintDivider.unit.test.tsx +373 -0
  654. package/src/components/PrintSection/__tests__/PrintSection.unit.test.tsx +390 -0
  655. package/src/components/PrintSection/__tests__/PrintSectionContent.unit.test.tsx +321 -0
  656. package/src/components/PrintSection/__tests__/PrintSectionHeader.unit.test.tsx +334 -0
  657. package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +258 -0
  658. package/src/components/PrintSection/index.ts +33 -0
  659. package/src/components/PrintSection/types.ts +155 -0
  660. package/src/components/PrintText/PrintText.tsx +116 -0
  661. package/src/components/PrintText/__tests__/PrintText.unit.test.tsx +351 -0
  662. package/src/components/PrintText/index.ts +16 -0
  663. package/src/components/PrintText/types.ts +24 -0
  664. package/src/components/Progress/Progress.tsx +116 -0
  665. package/src/components/Progress/__tests__/Progress.accessibility.test.tsx +240 -0
  666. package/src/components/Progress/__tests__/Progress.unit.test.tsx +242 -0
  667. package/src/components/Progress/index.ts +3 -0
  668. package/src/components/PublicLayout/EventLogo.tsx +287 -0
  669. package/src/components/PublicLayout/PublicErrorBoundary.tsx +279 -0
  670. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +208 -0
  671. package/src/components/PublicLayout/PublicPageContextChecker.tsx +130 -0
  672. package/src/components/PublicLayout/PublicPageDebugger.tsx +104 -0
  673. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +162 -0
  674. package/src/components/PublicLayout/PublicPageFooter.tsx +124 -0
  675. package/src/components/PublicLayout/PublicPageHeader.tsx +178 -0
  676. package/src/components/PublicLayout/PublicPageLayout.tsx +232 -0
  677. package/src/components/PublicLayout/PublicPageProvider.tsx +137 -0
  678. package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +761 -0
  679. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.simplified.test.tsx +228 -0
  680. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +228 -0
  681. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +459 -0
  682. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +362 -0
  683. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +522 -0
  684. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +599 -0
  685. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +513 -0
  686. package/src/components/PublicLayout/index.ts +51 -0
  687. package/src/components/RBAC/PagePermissionGuard.tsx +274 -0
  688. package/src/components/RBAC/RBACGuard.tsx +143 -0
  689. package/src/components/RBAC/RBACProvider.tsx +186 -0
  690. package/src/components/RBAC/RoleBasedContent.tsx +129 -0
  691. package/src/components/RBAC/__tests__/PagePermissionGuard.unit.test.tsx +674 -0
  692. package/src/components/RBAC/__tests__/RBAC.integration.test.tsx +573 -0
  693. package/src/components/RBAC/__tests__/RBACGuard.unit.test.tsx +467 -0
  694. package/src/components/RBAC/__tests__/RBACProvider.accessibility.test.tsx +475 -0
  695. package/src/components/RBAC/__tests__/RBACProvider.advanced.test.tsx +569 -0
  696. package/src/components/RBAC/__tests__/RBACProvider.integration.test.tsx +352 -0
  697. package/src/components/RBAC/__tests__/RBACProvider.unit.test.tsx +128 -0
  698. package/src/components/RBAC/__tests__/RoleBasedContent.unit.test.tsx +657 -0
  699. package/src/components/RBAC/index.ts +23 -0
  700. package/src/components/Select/Select.tsx +654 -0
  701. package/src/components/Select/__tests__/SearchableSelect.unit.test.tsx +437 -0
  702. package/src/components/Select/__tests__/Select.accessibility.test.tsx +1202 -0
  703. package/src/components/Select/__tests__/Select.actual.test.tsx +774 -0
  704. package/src/components/Select/__tests__/Select.comprehensive.test.tsx +837 -0
  705. package/src/components/Select/__tests__/Select.enhanced.test.tsx +1101 -0
  706. package/src/components/Select/__tests__/Select.integration.test.tsx +772 -0
  707. package/src/components/Select/__tests__/Select.performance.test.tsx +695 -0
  708. package/src/components/Select/__tests__/Select.real-world.test.tsx +1046 -0
  709. package/src/components/Select/__tests__/Select.search-algorithms.test.tsx +968 -0
  710. package/src/components/Select/__tests__/Select.unit.test.tsx +647 -0
  711. package/src/components/Select/__tests__/Select.utils.test.tsx +890 -0
  712. package/src/components/Select/index.ts +1 -0
  713. package/src/components/SuperAdminGuard.tsx +116 -0
  714. package/src/components/Table/Table.tsx +222 -0
  715. package/src/components/Table/__tests__/Table.accessibility.test.tsx +233 -0
  716. package/src/components/Table/__tests__/Table.unit.test.tsx +235 -0
  717. package/src/components/Table/index.ts +11 -0
  718. package/src/components/Toast/Toast.tsx +339 -0
  719. package/src/components/Toast/__tests__/Toast.accessibility.test.tsx +238 -0
  720. package/src/components/Toast/__tests__/Toast.integration.test.tsx +699 -0
  721. package/src/components/Toast/__tests__/Toast.unit.test.tsx +750 -0
  722. package/src/components/Toast/index.ts +14 -0
  723. package/src/components/Tooltip/Tooltip.tsx +167 -0
  724. package/src/components/Tooltip/__tests__/Tooltip.accessibility.test.tsx +121 -0
  725. package/src/components/Tooltip/__tests__/Tooltip.unit.test.tsx +185 -0
  726. package/src/components/Tooltip/index.ts +7 -0
  727. package/src/components/UserMenu/UserMenu.tsx +243 -0
  728. package/src/components/UserMenu/__tests__/UserMenu.accessibility.test.tsx +139 -0
  729. package/src/components/UserMenu/__tests__/UserMenu.integration.test.tsx +188 -0
  730. package/src/components/UserMenu/__tests__/UserMenu.unit.test.tsx +458 -0
  731. package/src/components/UserMenu/index.ts +3 -0
  732. package/src/components/__tests__/EdgeCaseTesting.enhanced.test.tsx +523 -0
  733. package/src/components/__tests__/ErrorTesting.enhanced.test.tsx +455 -0
  734. package/src/components/__tests__/SuperAdminGuard.test.tsx +456 -0
  735. package/src/components/__tests__/SuperAdminGuard.unit.test.tsx +456 -0
  736. package/src/components/examples/PermissionExample.tsx +150 -0
  737. package/src/components/examples/__tests__/PermissionExample.unit.test.tsx +360 -0
  738. package/src/components/index.ts +434 -0
  739. package/src/components.ts +19 -0
  740. package/src/constants/performance.ts +14 -0
  741. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  742. package/src/examples/PublicEventPage.tsx +274 -0
  743. package/src/examples/PublicPageApp.tsx +308 -0
  744. package/src/examples/PublicPageUsageExample.tsx +216 -0
  745. package/src/fonts/georama-italic.woff2 +0 -0
  746. package/src/fonts/georama.woff2 +0 -0
  747. package/src/fonts/open-sans-italic.woff2 +0 -0
  748. package/src/fonts/open-sans.woff2 +0 -0
  749. package/src/fonts/reddit-mono.woff2 +0 -0
  750. package/src/hooks/__tests__/hooks.integration.test.tsx +575 -0
  751. package/src/hooks/__tests__/useApiFetch.unit.test.ts +115 -0
  752. package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +133 -0
  753. package/src/hooks/__tests__/useDebounce.unit.test.ts +82 -0
  754. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +293 -0
  755. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +385 -0
  756. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +286 -0
  757. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +838 -0
  758. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +627 -0
  759. package/src/hooks/__tests__/useRBAC.unit.test.ts +903 -0
  760. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +537 -0
  761. package/src/hooks/__tests__/useToast.unit.test.tsx +62 -0
  762. package/src/hooks/__tests__/useZodForm.unit.test.tsx +37 -0
  763. package/src/hooks/index.ts +56 -0
  764. package/src/hooks/public/__tests__/usePublicEvent.test.tsx +397 -0
  765. package/src/hooks/public/__tests__/usePublicEventLogo.test.tsx +690 -0
  766. package/src/hooks/public/__tests__/usePublicRouteParams.test.tsx +449 -0
  767. package/src/hooks/public/index.ts +34 -0
  768. package/src/hooks/public/usePublicEvent.ts +261 -0
  769. package/src/hooks/public/usePublicEventLogo.ts +285 -0
  770. package/src/hooks/public/usePublicRouteParams.ts +259 -0
  771. package/src/hooks/useAppConfig.ts +94 -0
  772. package/src/hooks/useComponentPerformance.ts +39 -0
  773. package/src/hooks/useDataTablePerformance.ts +387 -0
  774. package/src/hooks/useDataTableState.ts +110 -0
  775. package/src/hooks/useDebounce.ts +18 -0
  776. package/src/hooks/useFocusManagement.ts +161 -0
  777. package/src/hooks/useFocusTrap.ts +155 -0
  778. package/src/hooks/useInactivityTracker.ts +372 -0
  779. package/src/hooks/useIsMobile.ts +42 -0
  780. package/src/hooks/useKeyboardShortcuts.ts +237 -0
  781. package/src/hooks/useOrganisationPermissions.ts +208 -0
  782. package/src/hooks/useOrganisationSecurity.ts +262 -0
  783. package/src/hooks/usePerformanceMonitor.ts +128 -0
  784. package/src/hooks/usePermissionCache.ts +455 -0
  785. package/src/hooks/useRBAC.ts +262 -0
  786. package/src/hooks/useSecureDataAccess.ts +586 -0
  787. package/src/hooks/useStorage.ts +274 -0
  788. package/src/hooks/useToast.ts +242 -0
  789. package/src/hooks/useZodForm.ts +28 -0
  790. package/src/index.ts +200 -0
  791. package/src/providers/AuthProvider.tsx +369 -0
  792. package/src/providers/EventProvider.tsx +324 -0
  793. package/src/providers/InactivityProvider.tsx +238 -0
  794. package/src/providers/OrganisationProvider.tsx +588 -0
  795. package/src/providers/RBACProvider.tsx +622 -0
  796. package/src/providers/UnifiedAuthProvider.tsx +327 -0
  797. package/src/providers/__tests__/EventProvider.unit.test.tsx +768 -0
  798. package/src/providers/__tests__/OrganisationProvider.basic.test.tsx +116 -0
  799. package/src/providers/__tests__/OrganisationProvider.unit.test.tsx +1312 -0
  800. package/src/providers/__tests__/UnifiedAuthProvider.inactivity.test.tsx +601 -0
  801. package/src/providers/__tests__/UnifiedAuthProvider.unit.test.tsx +675 -0
  802. package/src/providers/__tests__/index.unit.test.ts +78 -0
  803. package/src/providers/index.ts +15 -0
  804. package/src/rbac/README.md +885 -0
  805. package/src/rbac/__tests__/PagePermissionGuard.test.tsx +673 -0
  806. package/src/rbac/__tests__/README.md +170 -0
  807. package/src/rbac/__tests__/RoleBasedRouter.test.tsx +709 -0
  808. package/src/rbac/__tests__/TestContext.tsx +72 -0
  809. package/src/rbac/__tests__/__mocks__/cache.ts +144 -0
  810. package/src/rbac/__tests__/__mocks__/supabase.ts +152 -0
  811. package/src/rbac/__tests__/adapters-hooks-comprehensive.test.tsx +782 -0
  812. package/src/rbac/__tests__/adapters-hooks.test.tsx +561 -0
  813. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +963 -0
  814. package/src/rbac/__tests__/adapters.test.tsx +444 -0
  815. package/src/rbac/__tests__/api.test.ts +620 -0
  816. package/src/rbac/__tests__/audit-observability-comprehensive.test.ts +792 -0
  817. package/src/rbac/__tests__/audit-observability.test.ts +549 -0
  818. package/src/rbac/__tests__/audit.test.ts +616 -0
  819. package/src/rbac/__tests__/build-contract-compliance-simple.test.ts +230 -0
  820. package/src/rbac/__tests__/cache-invalidation-comprehensive.test.ts +889 -0
  821. package/src/rbac/__tests__/cache-invalidation.test.ts +457 -0
  822. package/src/rbac/__tests__/cache.test.ts +458 -0
  823. package/src/rbac/__tests__/components-navigation-guard.enhanced.test.tsx +859 -0
  824. package/src/rbac/__tests__/components-navigation-guard.test.tsx +895 -0
  825. package/src/rbac/__tests__/components-navigation-provider.test.tsx +692 -0
  826. package/src/rbac/__tests__/components-page-permission-guard.test.tsx +673 -0
  827. package/src/rbac/__tests__/components-page-permission-provider.test.tsx +614 -0
  828. package/src/rbac/__tests__/components-permission-enforcer.enhanced.fixed.test.tsx +836 -0
  829. package/src/rbac/__tests__/components-permission-enforcer.enhanced.test.tsx +837 -0
  830. package/src/rbac/__tests__/components-permission-enforcer.test.tsx +825 -0
  831. package/src/rbac/__tests__/components-role-based-router.test.tsx +709 -0
  832. package/src/rbac/__tests__/components-secure-data-provider.test.tsx +607 -0
  833. package/src/rbac/__tests__/config.test.ts +583 -0
  834. package/src/rbac/__tests__/core-logic-unit.test.ts +190 -0
  835. package/src/rbac/__tests__/core-permission-logic-comprehensive.test.ts +1467 -0
  836. package/src/rbac/__tests__/core-permission-logic-fixed.test.ts +151 -0
  837. package/src/rbac/__tests__/core-permission-logic-simple.test.ts +968 -0
  838. package/src/rbac/__tests__/core-permission-logic.test.ts +966 -0
  839. package/src/rbac/__tests__/edge-cases-comprehensive.test.ts +988 -0
  840. package/src/rbac/__tests__/edge-cases.test.ts +654 -0
  841. package/src/rbac/__tests__/engine.test.ts +361 -0
  842. package/src/rbac/__tests__/engine.unit.test.ts +361 -0
  843. package/src/rbac/__tests__/hooks.enhanced.test.tsx +979 -0
  844. package/src/rbac/__tests__/hooks.fixed.test.tsx +475 -0
  845. package/src/rbac/__tests__/hooks.test.tsx +385 -0
  846. package/src/rbac/__tests__/index.test.ts +269 -0
  847. package/src/rbac/__tests__/integration.enhanced.test.tsx +824 -0
  848. package/src/rbac/__tests__/page-permission-guard-super-admin.test.tsx +261 -0
  849. package/src/rbac/__tests__/performance.enhanced.test.tsx +724 -0
  850. package/src/rbac/__tests__/permissions.test.ts +383 -0
  851. package/src/rbac/__tests__/requires-event.test.ts +330 -0
  852. package/src/rbac/__tests__/scope-isolation-comprehensive.test.ts +1349 -0
  853. package/src/rbac/__tests__/scope-isolation.test.ts +755 -0
  854. package/src/rbac/__tests__/secure-client-rls-comprehensive.test.ts +592 -0
  855. package/src/rbac/__tests__/secure-client-rls.test.ts +377 -0
  856. package/src/rbac/__tests__/security.test.ts +296 -0
  857. package/src/rbac/__tests__/setup.ts +228 -0
  858. package/src/rbac/__tests__/test-utils-enhanced.tsx +400 -0
  859. package/src/rbac/__tests__/types.test.ts +685 -0
  860. package/src/rbac/adapters.tsx +726 -0
  861. package/src/rbac/api.ts +337 -0
  862. package/src/rbac/audit-enhanced.ts +339 -0
  863. package/src/rbac/audit.ts +338 -0
  864. package/src/rbac/cache.ts +213 -0
  865. package/src/rbac/components/EnhancedNavigationMenu.tsx +294 -0
  866. package/src/rbac/components/NavigationGuard.tsx +294 -0
  867. package/src/rbac/components/NavigationProvider.tsx +314 -0
  868. package/src/rbac/components/PagePermissionGuard.tsx +430 -0
  869. package/src/rbac/components/PagePermissionProvider.tsx +274 -0
  870. package/src/rbac/components/PermissionEnforcer.tsx +307 -0
  871. package/src/rbac/components/RoleBasedRouter.tsx +425 -0
  872. package/src/rbac/components/SecureDataProvider.tsx +319 -0
  873. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +631 -0
  874. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +667 -0
  875. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +647 -0
  876. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +496 -0
  877. package/src/rbac/components/index.ts +64 -0
  878. package/src/rbac/config.ts +133 -0
  879. package/src/rbac/docs/event-based-apps.md +285 -0
  880. package/src/rbac/engine.ts +1026 -0
  881. package/src/rbac/eslint-rules.js +285 -0
  882. package/src/rbac/examples/CompleteRBACExample.tsx +323 -0
  883. package/src/rbac/examples/EventBasedApp.tsx +238 -0
  884. package/src/rbac/hooks.ts +555 -0
  885. package/src/rbac/index.ts +114 -0
  886. package/src/rbac/permissions.ts +293 -0
  887. package/src/rbac/secureClient.ts +244 -0
  888. package/src/rbac/security.ts +346 -0
  889. package/src/rbac/testing/__tests__/index.test.tsx +342 -0
  890. package/src/rbac/testing/index.tsx +340 -0
  891. package/src/rbac/types.ts +341 -0
  892. package/src/rbac/utils/__tests__/eventContext.test.ts +428 -0
  893. package/src/rbac/utils/__tests__/eventContext.unit.test.ts +428 -0
  894. package/src/rbac/utils/eventContext.ts +83 -0
  895. package/src/styles/__tests__/styles.unit.test.ts +164 -0
  896. package/src/styles/core.css +401 -0
  897. package/src/styles/index.ts +51 -0
  898. package/src/test-dom-cleanup.test.tsx +38 -0
  899. package/src/theming/__tests__/README.md +335 -0
  900. package/src/theming/__tests__/runtime.accessibility.test.ts +474 -0
  901. package/src/theming/__tests__/runtime.error.test.ts +616 -0
  902. package/src/theming/__tests__/runtime.integration.test.ts +376 -0
  903. package/src/theming/__tests__/runtime.performance.test.ts +411 -0
  904. package/src/theming/__tests__/runtime.unit.test.ts +470 -0
  905. package/src/theming/runtime.ts +187 -0
  906. package/src/types/__tests__/database.unit.test.ts +489 -0
  907. package/src/types/__tests__/guards.unit.test.ts +146 -0
  908. package/src/types/__tests__/index.unit.test.ts +77 -0
  909. package/src/types/__tests__/organisation.unit.test.ts +713 -0
  910. package/src/types/__tests__/rbac.unit.test.ts +621 -0
  911. package/src/types/__tests__/security.unit.test.ts +347 -0
  912. package/src/types/__tests__/supabase.unit.test.ts +658 -0
  913. package/src/types/__tests__/theme.unit.test.ts +218 -0
  914. package/src/types/__tests__/unified.unit.test.ts +537 -0
  915. package/src/types/__tests__/validation.unit.test.ts +616 -0
  916. package/src/types/database.ts +472 -0
  917. package/src/types/guards.ts +30 -0
  918. package/src/types/index.ts +25 -0
  919. package/src/types/organisation.ts +184 -0
  920. package/src/types/security.ts +70 -0
  921. package/src/types/supabase.ts +166 -0
  922. package/src/types/theme.ts +6 -0
  923. package/src/types/unified.ts +262 -0
  924. package/src/types/validation.ts +164 -0
  925. package/src/types/vitest-globals.d.ts +43 -0
  926. package/src/utils/__mocks__/supabaseMock.ts +75 -0
  927. package/src/utils/__mocks__/supabaseMock.tsx +198 -0
  928. package/src/utils/__tests__/appConfig.unit.test.ts +55 -0
  929. package/src/utils/__tests__/appNameResolver.unit.test.ts +137 -0
  930. package/src/utils/__tests__/audit.unit.test.ts +69 -0
  931. package/src/utils/__tests__/auth-utils.unit.test.ts +70 -0
  932. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +317 -0
  933. package/src/utils/__tests__/cn.unit.test.ts +34 -0
  934. package/src/utils/__tests__/deviceFingerprint.unit.test.ts +480 -0
  935. package/src/utils/__tests__/dynamicUtils.unit.test.ts +322 -0
  936. package/src/utils/__tests__/formatDate.unit.test.ts +109 -0
  937. package/src/utils/__tests__/formatting.unit.test.ts +66 -0
  938. package/src/utils/__tests__/index.unit.test.ts +251 -0
  939. package/src/utils/__tests__/lazyLoad.unit.test.tsx +309 -0
  940. package/src/utils/__tests__/organisationContext.unit.test.ts +192 -0
  941. package/src/utils/__tests__/performanceBudgets.unit.test.ts +259 -0
  942. package/src/utils/__tests__/permissionTypes.unit.test.ts +250 -0
  943. package/src/utils/__tests__/permissionUtils.unit.test.ts +362 -0
  944. package/src/utils/__tests__/sanitization.unit.test.ts +346 -0
  945. package/src/utils/__tests__/schemaUtils.unit.test.ts +441 -0
  946. package/src/utils/__tests__/secureDataAccess.unit.test.ts +334 -0
  947. package/src/utils/__tests__/secureErrors.unit.test.ts +377 -0
  948. package/src/utils/__tests__/secureStorage.unit.test.ts +293 -0
  949. package/src/utils/__tests__/security.unit.test.ts +127 -0
  950. package/src/utils/__tests__/securityMonitor.unit.test.ts +280 -0
  951. package/src/utils/__tests__/sessionTracking.unit.test.ts +370 -0
  952. package/src/utils/__tests__/validation.unit.test.ts +84 -0
  953. package/src/utils/__tests__/validationUtils.unit.test.ts +571 -0
  954. package/src/utils/appConfig.ts +47 -0
  955. package/src/utils/appIdResolver.ts +130 -0
  956. package/src/utils/appNameResolver.ts +190 -0
  957. package/src/utils/audit.ts +127 -0
  958. package/src/utils/auth-utils.ts +96 -0
  959. package/src/utils/bundleAnalysis.ts +129 -0
  960. package/src/utils/cn.ts +7 -0
  961. package/src/utils/debugLogger.ts +46 -0
  962. package/src/utils/deviceFingerprint.ts +215 -0
  963. package/src/utils/dynamicUtils.ts +105 -0
  964. package/src/utils/formatting.ts +77 -0
  965. package/src/utils/index.ts +145 -0
  966. package/src/utils/lazyLoad.tsx +44 -0
  967. package/src/utils/organisationContext.ts +135 -0
  968. package/src/utils/performanceBenchmark.ts +64 -0
  969. package/src/utils/performanceBudgets.ts +111 -0
  970. package/src/utils/permissionTypes.ts +37 -0
  971. package/src/utils/permissionUtils.ts +31 -0
  972. package/src/utils/print/PrintDataProcessor.ts +390 -0
  973. package/src/utils/print/__tests__/PrintDataProcessor.unit.test.ts +219 -0
  974. package/src/utils/print/__tests__/usePrintOptimization.unit.test.tsx +353 -0
  975. package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +397 -0
  976. package/src/utils/print/index.ts +29 -0
  977. package/src/utils/print/types.ts +196 -0
  978. package/src/utils/print/usePrintOptimization.ts +272 -0
  979. package/src/utils/sanitization.ts +264 -0
  980. package/src/utils/schemaUtils.ts +37 -0
  981. package/src/utils/secureDataAccess.ts +361 -0
  982. package/src/utils/secureErrors.ts +79 -0
  983. package/src/utils/secureStorage.ts +244 -0
  984. package/src/utils/security.ts +156 -0
  985. package/src/utils/securityMonitor.ts +45 -0
  986. package/src/utils/sessionTracking.ts +170 -0
  987. package/src/utils/storage/README.md +348 -0
  988. package/src/utils/storage/__tests__/config.unit.test.ts +206 -0
  989. package/src/utils/storage/__tests__/helpers.unit.test.ts +646 -0
  990. package/src/utils/storage/__tests__/index.unit.test.ts +167 -0
  991. package/src/utils/storage/__tests__/types.unit.test.ts +441 -0
  992. package/src/utils/storage/config.ts +100 -0
  993. package/src/utils/storage/helpers.ts +359 -0
  994. package/src/utils/storage/index.ts +36 -0
  995. package/src/utils/storage/types.ts +90 -0
  996. package/src/utils/validation.ts +111 -0
  997. package/src/utils/validationUtils.ts +120 -0
  998. package/src/validation/__tests__/common.unit.test.ts +101 -0
  999. package/src/validation/__tests__/csrf.unit.test.ts +302 -0
  1000. package/src/validation/__tests__/passwordSchema.unit.test.ts +98 -0
  1001. package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +466 -0
  1002. package/src/validation/common.ts +53 -0
  1003. package/src/validation/csrf.ts +214 -0
  1004. package/src/validation/index.ts +43 -0
  1005. package/src/validation/passwordSchema.ts +125 -0
  1006. package/src/validation/sanitization.ts +96 -0
  1007. package/src/validation/schemaUtils.ts +42 -0
  1008. package/src/validation/sqlInjectionProtection.ts +242 -0
  1009. package/src/validation/user.ts +34 -0
@@ -0,0 +1,1918 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ import { D as Database } from '../database-C3Szpi5J.js';
3
+ import React__default, { ReactNode } from 'react';
4
+ import * as react_jsx_runtime from 'react/jsx-runtime';
5
+
6
+ /**
7
+ * RBAC (Role-Based Access Control) Types - Build Contract Compliant
8
+ * @package @jmruthers/pace-core
9
+ * @module RBAC/Types
10
+ * @since 1.0.0
11
+ *
12
+ * This module defines the core types for the RBAC system that match the build contract exactly.
13
+ * All types are designed to be framework-agnostic and provide strong typing for permission operations.
14
+ */
15
+
16
+ type UUID = string;
17
+ type Operation = 'read' | 'create' | 'update' | 'delete' | 'manage';
18
+ type Permission = `${Operation}:${string}`;
19
+ type AccessLevel = 'viewer' | 'participant' | 'planner' | 'admin' | 'super';
20
+ type Scope = {
21
+ organisationId?: UUID;
22
+ eventId?: string;
23
+ appId?: UUID;
24
+ };
25
+ type PermissionCheck = {
26
+ userId: UUID;
27
+ scope: Scope;
28
+ permission: Permission;
29
+ pageId?: UUID | string;
30
+ };
31
+ type PermissionMap = Record<string, Operation[]>;
32
+ type GlobalRole = 'super_admin';
33
+ type OrganisationRole = 'supporter' | 'member' | 'leader' | 'org_admin';
34
+ type EventAppRole = 'viewer' | 'participant' | 'planner' | 'event_admin';
35
+ type AuditEventType = 'permission_check' | 'permission_denied' | 'role_granted' | 'role_denied' | 'rls_denied';
36
+ type AuditEventSource = 'api' | 'ui' | 'middleware' | 'rls';
37
+ interface RBACAuditEvent {
38
+ id: UUID;
39
+ event_type: AuditEventType;
40
+ user_id: UUID;
41
+ organisation_id: UUID;
42
+ event_id?: string;
43
+ app_id?: UUID;
44
+ page_id?: UUID;
45
+ permission?: string;
46
+ decision?: boolean;
47
+ source?: AuditEventSource;
48
+ bypass?: boolean;
49
+ duration_ms?: number;
50
+ metadata: Record<string, any>;
51
+ created_at: string;
52
+ }
53
+ interface PermissionCacheKey {
54
+ userId: UUID;
55
+ organisationId?: UUID;
56
+ eventId?: string;
57
+ appId?: UUID;
58
+ }
59
+ interface UsePermissionsReturn {
60
+ permissions: PermissionMap;
61
+ isLoading: boolean;
62
+ error: Error | null;
63
+ refetch: () => Promise<void>;
64
+ }
65
+ interface UseCanReturn {
66
+ can: boolean;
67
+ isLoading: boolean;
68
+ error: Error | null;
69
+ check: () => Promise<void>;
70
+ }
71
+ declare class RBACError extends Error {
72
+ code: string;
73
+ context?: Record<string, any> | undefined;
74
+ constructor(message: string, code: string, context?: Record<string, any> | undefined);
75
+ }
76
+ declare class PermissionDeniedError extends RBACError {
77
+ constructor(permission: Permission, context?: Record<string, any>);
78
+ }
79
+ declare class OrganisationContextRequiredError extends RBACError {
80
+ constructor();
81
+ }
82
+ declare class RBACNotInitializedError extends RBACError {
83
+ constructor();
84
+ }
85
+ declare class InvalidScopeError extends RBACError {
86
+ constructor(scope: Scope, reason: string);
87
+ }
88
+ declare class MissingUserContextError extends RBACError {
89
+ constructor();
90
+ }
91
+
92
+ /**
93
+ * RBAC Configuration
94
+ * @package @jmruthers/pace-core
95
+ * @module RBAC/Config
96
+ * @since 1.0.0
97
+ *
98
+ * This module provides configuration options for the RBAC system.
99
+ */
100
+
101
+ type LogLevel = 'error' | 'warn' | 'info' | 'debug';
102
+ interface RBACConfig {
103
+ supabase: SupabaseClient<Database>;
104
+ debug?: boolean;
105
+ logLevel?: LogLevel;
106
+ developmentMode?: boolean;
107
+ mockPermissions?: Record<string, boolean>;
108
+ cache?: {
109
+ ttl?: number;
110
+ enabled?: boolean;
111
+ };
112
+ audit?: {
113
+ enabled?: boolean;
114
+ logLevel?: LogLevel;
115
+ };
116
+ }
117
+ interface RBACLogger {
118
+ error: (message: string, ...args: unknown[]) => void;
119
+ warn: (message: string, ...args: unknown[]) => void;
120
+ info: (message: string, ...args: unknown[]) => void;
121
+ debug: (message: string, ...args: unknown[]) => void;
122
+ }
123
+ declare function createRBACConfig(config: RBACConfig): RBACConfig;
124
+ declare function getRBACConfig(): RBACConfig | null;
125
+ declare function getRBACLogger(): RBACLogger;
126
+ declare function isDebugMode(): boolean;
127
+ declare function isDevelopmentMode(): boolean;
128
+
129
+ /**
130
+ * Secure Supabase Client for RBAC
131
+ * @package @jmruthers/pace-core
132
+ * @module RBAC/SecureClient
133
+ * @since 1.0.0
134
+ *
135
+ * This module provides a secure Supabase client that enforces organisation context
136
+ * and prevents direct database access outside of the RBAC system.
137
+ */
138
+
139
+ /**
140
+ * Secure Supabase Client that enforces organisation context
141
+ *
142
+ * This client automatically injects organisation context into all requests
143
+ * and prevents queries that don't have the required context.
144
+ */
145
+ declare class SecureSupabaseClient {
146
+ private supabase;
147
+ private supabaseUrl;
148
+ private supabaseKey;
149
+ private organisationId;
150
+ private eventId?;
151
+ private appId?;
152
+ constructor(supabaseUrl: string, supabaseKey: string, organisationId: UUID, eventId?: string, appId?: UUID);
153
+ /**
154
+ * Setup context injection for all database operations
155
+ */
156
+ private setupContextInjection;
157
+ /**
158
+ * Inject organisation context into a query
159
+ */
160
+ private injectContext;
161
+ /**
162
+ * Add organisation filter to a query
163
+ */
164
+ private addOrganisationFilter;
165
+ /**
166
+ * Validate that required context is present
167
+ */
168
+ private validateContext;
169
+ /**
170
+ * Get the current organisation ID
171
+ */
172
+ getOrganisationId(): UUID;
173
+ /**
174
+ * Get the current event ID
175
+ */
176
+ getEventId(): string | undefined;
177
+ /**
178
+ * Get the current app ID
179
+ */
180
+ getAppId(): UUID | undefined;
181
+ /**
182
+ * Create a new client with updated context
183
+ */
184
+ withContext(updates: {
185
+ organisationId?: UUID;
186
+ eventId?: string;
187
+ appId?: UUID;
188
+ }): SecureSupabaseClient;
189
+ /**
190
+ * Get the underlying Supabase client (for internal use only)
191
+ * @internal
192
+ */
193
+ getClient(): SupabaseClient<Database>;
194
+ }
195
+ /**
196
+ * Create a secure Supabase client with organisation context
197
+ *
198
+ * @param supabaseUrl - Supabase project URL
199
+ * @param supabaseKey - Supabase anon key
200
+ * @param organisationId - Required organisation ID
201
+ * @param eventId - Optional event ID
202
+ * @param appId - Optional app ID
203
+ * @returns SecureSupabaseClient instance
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const client = createSecureClient(
208
+ * 'https://your-project.supabase.co',
209
+ * 'your-anon-key',
210
+ * 'org-123',
211
+ * 'event-456',
212
+ * 'app-789'
213
+ * );
214
+ * ```
215
+ */
216
+ declare function createSecureClient(supabaseUrl: string, supabaseKey: string, organisationId: UUID, eventId?: string, appId?: UUID): SecureSupabaseClient;
217
+ /**
218
+ * Create a secure client from an existing Supabase client
219
+ *
220
+ * @param client - Existing Supabase client
221
+ * @param organisationId - Required organisation ID
222
+ * @param eventId - Optional event ID
223
+ * @param appId - Optional app ID
224
+ * @returns SecureSupabaseClient instance
225
+ */
226
+ declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID, eventId?: string, appId?: UUID): SecureSupabaseClient;
227
+
228
+ /**
229
+ * RBAC Cache Implementation
230
+ * @package @jmruthers/pace-core
231
+ * @module RBAC/Cache
232
+ * @since 1.0.0
233
+ *
234
+ * This module provides caching functionality for RBAC operations with TTL and invalidation.
235
+ */
236
+
237
+ /**
238
+ * In-memory cache for RBAC operations
239
+ *
240
+ * Provides 60-second TTL and pattern-based invalidation for permission checks.
241
+ */
242
+ declare class RBACCache {
243
+ private cache;
244
+ private readonly TTL;
245
+ private invalidationCallbacks;
246
+ /**
247
+ * Get a value from the cache
248
+ *
249
+ * @param key - Cache key
250
+ * @returns Cached value or null if not found/expired
251
+ */
252
+ get<T>(key: string): T | null;
253
+ /**
254
+ * Set a value in the cache
255
+ *
256
+ * @param key - Cache key
257
+ * @param data - Data to cache
258
+ * @param ttl - Time to live in milliseconds (defaults to 60s)
259
+ */
260
+ set<T>(key: string, data: T, ttl?: number): void;
261
+ /**
262
+ * Delete a specific key from the cache
263
+ *
264
+ * @param key - Cache key to delete
265
+ */
266
+ delete(key: string): void;
267
+ /**
268
+ * Invalidate cache entries matching a pattern
269
+ *
270
+ * @param pattern - Pattern to match against cache keys
271
+ */
272
+ invalidate(pattern: string): void;
273
+ /**
274
+ * Clear all cache entries
275
+ */
276
+ clear(): void;
277
+ /**
278
+ * Get cache statistics
279
+ */
280
+ getStats(): {
281
+ size: number;
282
+ ttl: number;
283
+ keys: string[];
284
+ };
285
+ /**
286
+ * Add an invalidation callback
287
+ *
288
+ * @param callback - Function to call when cache is invalidated
289
+ */
290
+ onInvalidate(callback: (pattern: string) => void): () => void;
291
+ /**
292
+ * Generate cache key for permission check
293
+ *
294
+ * @param key - Permission cache key object
295
+ * @returns String cache key
296
+ */
297
+ static generatePermissionKey(key: PermissionCacheKey): string;
298
+ /**
299
+ * Generate cache key for access level
300
+ *
301
+ * @param userId - User ID
302
+ * @param organisationId - Organisation ID
303
+ * @param eventId - Event ID (optional)
304
+ * @param appId - App ID (optional)
305
+ * @returns String cache key
306
+ */
307
+ static generateAccessLevelKey(userId: UUID, organisationId: UUID, eventId?: string, appId?: UUID): string;
308
+ /**
309
+ * Generate cache key for permission map
310
+ *
311
+ * @param userId - User ID
312
+ * @param organisationId - Organisation ID
313
+ * @param eventId - Event ID (optional)
314
+ * @param appId - App ID (optional)
315
+ * @returns String cache key
316
+ */
317
+ static generatePermissionMapKey(userId: UUID, organisationId: UUID, eventId?: string, appId?: UUID): string;
318
+ }
319
+ /**
320
+ * Global cache instance
321
+ *
322
+ * This is the default cache instance used by the RBAC system.
323
+ * You can create additional instances if needed for different contexts.
324
+ */
325
+ declare const rbacCache: RBACCache;
326
+ /**
327
+ * Cache key patterns for invalidation
328
+ */
329
+ declare const CACHE_PATTERNS: {
330
+ readonly USER: (userId: UUID) => string;
331
+ readonly ORGANISATION: (organisationId: UUID) => string;
332
+ readonly EVENT: (eventId: string) => string;
333
+ readonly APP: (appId: UUID) => string;
334
+ readonly PERMISSION: (userId: UUID, organisationId: UUID) => string;
335
+ };
336
+
337
+ /**
338
+ * RBAC Audit Events System
339
+ * @package @jmruthers/pace-core
340
+ * @module RBAC/Audit
341
+ * @since 1.0.0
342
+ *
343
+ * This module provides structured audit event emission for all RBAC operations.
344
+ */
345
+
346
+ /**
347
+ * Audit event payload for permission checks
348
+ */
349
+ interface PermissionCheckAuditEvent {
350
+ type: 'permission_check';
351
+ userId: UUID;
352
+ organisationId: UUID;
353
+ eventId?: string;
354
+ appId?: UUID;
355
+ pageId?: UUID;
356
+ permission: string;
357
+ decision: boolean;
358
+ source: AuditEventSource;
359
+ bypass?: boolean;
360
+ duration_ms: number;
361
+ metadata?: Record<string, any>;
362
+ }
363
+ /**
364
+ * Audit event payload for permission denied
365
+ */
366
+ interface PermissionDeniedAuditEvent {
367
+ type: 'permission_denied';
368
+ userId: UUID;
369
+ organisationId: UUID;
370
+ eventId?: string;
371
+ appId?: UUID;
372
+ pageId?: UUID;
373
+ permission: string;
374
+ source: AuditEventSource;
375
+ metadata?: Record<string, any>;
376
+ }
377
+ /**
378
+ * Audit event payload for role granted
379
+ */
380
+ interface RoleGrantedAuditEvent {
381
+ type: 'role_granted';
382
+ userId: UUID;
383
+ organisationId: UUID;
384
+ eventId?: string;
385
+ appId?: UUID;
386
+ role: string;
387
+ grantedBy: UUID;
388
+ metadata?: Record<string, any>;
389
+ }
390
+ /**
391
+ * Audit event payload for role revoked
392
+ */
393
+ interface RoleRevokedAuditEvent {
394
+ type: 'role_denied';
395
+ userId: UUID;
396
+ organisationId: UUID;
397
+ eventId?: string;
398
+ appId?: UUID;
399
+ role: string;
400
+ revokedBy: UUID;
401
+ metadata?: Record<string, any>;
402
+ }
403
+ /**
404
+ * Audit event payload for RLS denied
405
+ */
406
+ interface RLSDeniedAuditEvent {
407
+ type: 'rls_denied';
408
+ userId: UUID;
409
+ organisationId: UUID;
410
+ table: string;
411
+ operation: string;
412
+ metadata?: Record<string, any>;
413
+ }
414
+ /**
415
+ * Union type for all audit events
416
+ */
417
+ type AuditEventPayload = PermissionCheckAuditEvent | PermissionDeniedAuditEvent | RoleGrantedAuditEvent | RoleRevokedAuditEvent | RLSDeniedAuditEvent;
418
+ /**
419
+ * RBAC Audit Manager
420
+ *
421
+ * Handles emission of structured audit events for all RBAC operations.
422
+ */
423
+ declare class RBACAuditManager {
424
+ private supabase;
425
+ private enabled;
426
+ constructor(supabase: SupabaseClient<Database>);
427
+ /**
428
+ * Enable or disable audit logging
429
+ *
430
+ * @param enabled - Whether to enable audit logging
431
+ */
432
+ setEnabled(enabled: boolean): void;
433
+ /**
434
+ * Check if audit logging is enabled
435
+ *
436
+ * @returns True if audit logging is enabled
437
+ */
438
+ isEnabled(): boolean;
439
+ /**
440
+ * Emit an audit event
441
+ *
442
+ * @param event - Audit event payload
443
+ * @returns Promise that resolves when event is logged
444
+ */
445
+ emitEvent(event: AuditEventPayload): Promise<void>;
446
+ /**
447
+ * Emit a permission check audit event
448
+ *
449
+ * @param event - Permission check event data
450
+ */
451
+ emitPermissionCheck(event: Omit<PermissionCheckAuditEvent, 'type'>): Promise<void>;
452
+ /**
453
+ * Emit a permission denied audit event
454
+ *
455
+ * @param event - Permission denied event data
456
+ */
457
+ emitPermissionDenied(event: Omit<PermissionDeniedAuditEvent, 'type'>): Promise<void>;
458
+ /**
459
+ * Emit a role granted audit event
460
+ *
461
+ * @param event - Role granted event data
462
+ */
463
+ emitRoleGranted(event: Omit<RoleGrantedAuditEvent, 'type'>): Promise<void>;
464
+ /**
465
+ * Emit a role revoked audit event
466
+ *
467
+ * @param event - Role revoked event data
468
+ */
469
+ emitRoleRevoked(event: Omit<RoleRevokedAuditEvent, 'type'>): Promise<void>;
470
+ /**
471
+ * Emit an RLS denied audit event
472
+ *
473
+ * @param event - RLS denied event data
474
+ */
475
+ emitRLSDenied(event: Omit<RLSDeniedAuditEvent, 'type'>): Promise<void>;
476
+ /**
477
+ * Get audit events for a user
478
+ *
479
+ * @param userId - User ID
480
+ * @param limit - Maximum number of events to return
481
+ * @returns Promise resolving to audit events
482
+ */
483
+ getUserAuditEvents(userId: UUID, limit?: number): Promise<RBACAuditEvent[]>;
484
+ /**
485
+ * Get audit events for an organisation
486
+ *
487
+ * @param organisationId - Organisation ID
488
+ * @param limit - Maximum number of events to return
489
+ * @returns Promise resolving to audit events
490
+ */
491
+ getOrganisationAuditEvents(organisationId: UUID, limit?: number): Promise<RBACAuditEvent[]>;
492
+ }
493
+ /**
494
+ * Create an audit manager instance
495
+ *
496
+ * @param supabase - Supabase client
497
+ * @returns RBACAuditManager instance
498
+ */
499
+ declare function createAuditManager(supabase: SupabaseClient<Database>): RBACAuditManager;
500
+ /**
501
+ * Set the global audit manager
502
+ *
503
+ * @param manager - Audit manager instance
504
+ */
505
+ declare function setGlobalAuditManager(manager: RBACAuditManager): void;
506
+ /**
507
+ * Get the global audit manager
508
+ *
509
+ * @returns Global audit manager or null if not set
510
+ */
511
+ declare function getGlobalAuditManager(): RBACAuditManager | null;
512
+ /**
513
+ * Emit an audit event using the global audit manager
514
+ *
515
+ * @param event - Audit event payload
516
+ */
517
+ declare function emitAuditEvent(event: AuditEventPayload): Promise<void>;
518
+
519
+ /**
520
+ * RBAC Security Enhancements
521
+ * @package @jmruthers/pace-core
522
+ * @module RBAC/Security
523
+ * @since 1.0.0
524
+ *
525
+ * Additional security measures for the RBAC system
526
+ */
527
+
528
+ /**
529
+ * Security context for RBAC operations
530
+ */
531
+ interface SecurityContext {
532
+ userId: UUID;
533
+ organisationId: UUID;
534
+ ipAddress?: string;
535
+ userAgent?: string;
536
+ timestamp: Date;
537
+ }
538
+
539
+ /**
540
+ * RBAC Core Engine
541
+ * @package @jmruthers/pace-core
542
+ * @module RBAC/Engine
543
+ * @since 1.0.0
544
+ *
545
+ * This module implements the core RBAC permission algorithm with deny-overrides-allow precedence.
546
+ */
547
+
548
+ /**
549
+ * RBAC Engine
550
+ *
551
+ * Implements the core permission algorithm with deny-overrides-allow precedence.
552
+ */
553
+ declare class RBACEngine {
554
+ private supabase;
555
+ private securityMiddleware;
556
+ constructor(supabase: SupabaseClient<Database>);
557
+ /**
558
+ * Check if a user has a specific permission
559
+ *
560
+ * @param input - Permission check input
561
+ * @param securityContext - Optional security context for enhanced validation
562
+ * @returns Promise resolving to permission result
563
+ */
564
+ isPermitted(input: PermissionCheck, securityContext?: SecurityContext): Promise<boolean>;
565
+ /**
566
+ * Get user's access level in a scope
567
+ *
568
+ * @param input - Access level input
569
+ * @returns Promise resolving to access level
570
+ */
571
+ getAccessLevel(input: {
572
+ userId: UUID;
573
+ scope: Scope;
574
+ }): Promise<AccessLevel>;
575
+ /**
576
+ * Get user's permission map for a scope
577
+ *
578
+ * @param input - Permission map input
579
+ * @returns Promise resolving to permission map
580
+ */
581
+ getPermissionMap(input: {
582
+ userId: UUID;
583
+ scope: Scope;
584
+ }): Promise<PermissionMap>;
585
+ /**
586
+ * Check if user is super admin
587
+ *
588
+ * @param userId - User ID
589
+ * @returns Promise resolving to super admin status
590
+ */
591
+ private checkSuperAdmin;
592
+ /**
593
+ * Get app configuration including requires_event setting
594
+ *
595
+ * @param appId - App ID
596
+ * @returns Promise resolving to app configuration
597
+ */
598
+ getAppConfig(appId: UUID): Promise<{
599
+ requires_event: boolean;
600
+ } | null>;
601
+ /**
602
+ * Resolve organisation ID from event ID
603
+ *
604
+ * @param eventId - Event ID
605
+ * @returns Promise resolving to organisation ID
606
+ */
607
+ private resolveOrganisationFromEvent;
608
+ /**
609
+ * Validate context requirements based on app configuration
610
+ *
611
+ * @param scope - Permission scope
612
+ * @param appId - Optional app ID
613
+ * @returns Promise resolving to validated scope with resolved organisation ID
614
+ */
615
+ private validateContextRequirements;
616
+ /**
617
+ * Collect active grants for a user in a scope
618
+ *
619
+ * @param userId - User ID
620
+ * @param scope - Permission scope
621
+ * @param pageId - Optional page ID
622
+ * @returns Promise resolving to grants array
623
+ *
624
+ * PRECEDENCE ORDER (closest scope first): page → eventApp → organisation → global
625
+ */
626
+ private collectActiveGrants;
627
+ /**
628
+ * Check page-specific permissions
629
+ *
630
+ * @param userId - User ID
631
+ * @param pageId - Page ID
632
+ * @param permission - Permission to check
633
+ * @param scope - Permission scope
634
+ * @returns Promise resolving to page permission result
635
+ */
636
+ private checkPagePermissions;
637
+ /**
638
+ * Get organisation role for a user
639
+ *
640
+ * @param userId - User ID
641
+ * @param organisationId - Organisation ID
642
+ * @returns Promise resolving to organisation role
643
+ */
644
+ private getOrganisationRole;
645
+ /**
646
+ * Get event-app role for a user
647
+ *
648
+ * @param userId - User ID
649
+ * @param eventId - Event ID
650
+ * @param appId - App ID
651
+ * @returns Promise resolving to event-app role
652
+ */
653
+ private getEventAppRole;
654
+ /**
655
+ * Get permission for organisation role
656
+ *
657
+ * @param role - Organisation role
658
+ * @returns Permission string
659
+ */
660
+ private getPermissionForOrgRole;
661
+ /**
662
+ * Get permission for event-app role
663
+ *
664
+ * @param role - Event-app role
665
+ * @returns Permission string
666
+ */
667
+ private getPermissionForEventRole;
668
+ /**
669
+ * Check if a permission matches another permission
670
+ *
671
+ * @param grantPermission - Permission from grant
672
+ * @param requestedPermission - Requested permission
673
+ * @returns True if permissions match
674
+ */
675
+ private permissionMatches;
676
+ /**
677
+ * Resolve a page ID to UUID if it's a page name
678
+ *
679
+ * @param pageId - Page ID (UUID) or page name (string)
680
+ * @param appId - App ID to look up the page
681
+ * @returns Resolved page ID (UUID) or original pageId if it's already a UUID or can't be resolved
682
+ */
683
+ private resolvePageId;
684
+ }
685
+ /**
686
+ * Create an RBAC engine instance
687
+ *
688
+ * @param supabase - Supabase client
689
+ * @returns RBACEngine instance
690
+ */
691
+ declare function createRBACEngine(supabase: SupabaseClient<Database>): RBACEngine;
692
+
693
+ /**
694
+ * RBAC React Hooks
695
+ * @package @jmruthers/pace-core
696
+ * @module RBAC/Hooks
697
+ * @since 1.0.0
698
+ *
699
+ * This module provides React hooks for RBAC functionality.
700
+ */
701
+
702
+ /**
703
+ * Hook to get user's permissions in a scope
704
+ *
705
+ * @param userId - User ID
706
+ * @param scope - Permission scope
707
+ * @returns Permission data and loading state
708
+ *
709
+ * @example
710
+ * ```tsx
711
+ * function MyComponent() {
712
+ * const { permissions, isLoading, error } = usePermissions(
713
+ * 'user-123',
714
+ * { organisationId: 'org-456' }
715
+ * );
716
+ *
717
+ * if (isLoading) return <div>Loading...</div>;
718
+ * if (error) return <div>Error: {error.message}</div>;
719
+ *
720
+ * return (
721
+ * <div>
722
+ * {permissions['page-1']?.includes('read') && <ReadButton />}
723
+ * {permissions['page-1']?.includes('manage') && <ManageButton />}
724
+ * </div>
725
+ * );
726
+ * }
727
+ * ```
728
+ */
729
+ declare function usePermissions(userId: UUID, scope: Scope): UsePermissionsReturn;
730
+ /**
731
+ * Hook to check if user has a specific permission
732
+ *
733
+ * @param userId - User ID
734
+ * @param scope - Permission scope
735
+ * @param permission - Permission to check
736
+ * @param pageId - Optional page ID
737
+ * @param useCache - Whether to use cached results (default: true)
738
+ * @returns Permission check result and loading state
739
+ *
740
+ * @example
741
+ * ```tsx
742
+ * function MyComponent() {
743
+ * const { can, isLoading } = useCan(
744
+ * 'user-123',
745
+ * { organisationId: 'org-456' },
746
+ * 'manage:events',
747
+ * 'page-789'
748
+ * );
749
+ *
750
+ * if (isLoading) return <div>Checking permission...</div>;
751
+ *
752
+ * return (
753
+ * <div>
754
+ * {can ? <AdminPanel /> : <AccessDenied />}
755
+ * </div>
756
+ * );
757
+ * }
758
+ * ```
759
+ */
760
+ declare function useCan(userId: UUID, scope: Scope, permission: Permission, pageId?: UUID, useCache?: boolean): UseCanReturn;
761
+ /**
762
+ * Hook to get user's access level in a scope
763
+ *
764
+ * @param userId - User ID
765
+ * @param scope - Permission scope
766
+ * @returns Access level and loading state
767
+ *
768
+ * @example
769
+ * ```tsx
770
+ * function MyComponent() {
771
+ * const { accessLevel, isLoading } = useAccessLevel(
772
+ * 'user-123',
773
+ * { organisationId: 'org-456' }
774
+ * );
775
+ *
776
+ * if (isLoading) return <div>Loading...</div>;
777
+ *
778
+ * return (
779
+ * <div>
780
+ * {accessLevel === 'super' && <SuperAdminPanel />}
781
+ * {accessLevel === 'admin' && <AdminPanel />}
782
+ * {accessLevel === 'planner' && <PlannerPanel />}
783
+ * </div>
784
+ * );
785
+ * }
786
+ * ```
787
+ */
788
+ declare function useAccessLevel(userId: UUID, scope: Scope): {
789
+ accessLevel: AccessLevel | null;
790
+ isLoading: boolean;
791
+ error: Error | null;
792
+ refetch: () => Promise<void>;
793
+ };
794
+ /**
795
+ * Hook to check multiple permissions at once
796
+ *
797
+ * @param userId - User ID
798
+ * @param scope - Permission scope
799
+ * @param permissions - Array of permissions to check
800
+ * @param pageId - Optional page ID
801
+ * @param useCache - Whether to use cached results (default: true)
802
+ * @returns Object with permission results and loading state
803
+ *
804
+ * @example
805
+ * ```tsx
806
+ * function MyComponent() {
807
+ * const { permissions, isLoading } = useMultiplePermissions(
808
+ * 'user-123',
809
+ * { organisationId: 'org-456' },
810
+ * ['read:events', 'manage:events', 'delete:events']
811
+ * );
812
+ *
813
+ * return (
814
+ * <div>
815
+ * {permissions['read:events'] && <ReadButton />}
816
+ * {permissions['manage:events'] && <ManageButton />}
817
+ * {permissions['delete:events'] && <DeleteButton />}
818
+ * </div>
819
+ * );
820
+ * }
821
+ * ```
822
+ */
823
+ declare function useMultiplePermissions(userId: UUID, scope: Scope, permissions: Permission[], pageId?: UUID, useCache?: boolean): {
824
+ permissions: Record<Permission, boolean>;
825
+ isLoading: boolean;
826
+ error: Error | null;
827
+ refetch: () => Promise<void>;
828
+ };
829
+ /**
830
+ * Hook to check if user has any of the specified permissions
831
+ *
832
+ * @param userId - User ID
833
+ * @param scope - Permission scope
834
+ * @param permissions - Array of permissions to check
835
+ * @param pageId - Optional page ID
836
+ * @returns True if user has any permission and loading state
837
+ *
838
+ * @example
839
+ * ```tsx
840
+ * function MyComponent() {
841
+ * const { hasAny, isLoading } = useHasAnyPermission(
842
+ * 'user-123',
843
+ * { organisationId: 'org-456' },
844
+ * ['read:events', 'manage:events']
845
+ * );
846
+ *
847
+ * return (
848
+ * <div>
849
+ * {hasAny ? <EventContent /> : <AccessDenied />}
850
+ * </div>
851
+ * );
852
+ * }
853
+ * ```
854
+ */
855
+ declare function useHasAnyPermission(userId: UUID, scope: Scope, permissions: Permission[], pageId?: UUID): {
856
+ hasAny: boolean;
857
+ isLoading: boolean;
858
+ error: Error | null;
859
+ refetch: () => Promise<void>;
860
+ };
861
+ /**
862
+ * Hook to check if user has all of the specified permissions
863
+ *
864
+ * @param userId - User ID
865
+ * @param scope - Permission scope
866
+ * @param permissions - Array of permissions to check
867
+ * @param pageId - Optional page ID
868
+ * @returns True if user has all permissions and loading state
869
+ *
870
+ * @example
871
+ * ```tsx
872
+ * function MyComponent() {
873
+ * const { hasAll, isLoading } = useHasAllPermissions(
874
+ * 'user-123',
875
+ * { organisationId: 'org-456' },
876
+ * ['read:events', 'manage:events']
877
+ * );
878
+ *
879
+ * return (
880
+ * <div>
881
+ * {hasAll ? <FullAccessPanel /> : <LimitedAccessPanel />}
882
+ * </div>
883
+ * );
884
+ * }
885
+ * ```
886
+ */
887
+ declare function useHasAllPermissions(userId: UUID, scope: Scope, permissions: Permission[], pageId?: UUID): {
888
+ hasAll: boolean;
889
+ isLoading: boolean;
890
+ error: Error | null;
891
+ refetch: () => Promise<void>;
892
+ };
893
+ /**
894
+ * Hook to read cached permissions (contract requirement)
895
+ *
896
+ * This hook only reads from the core cache and does not perform
897
+ * any bespoke caching as per the contract requirements.
898
+ *
899
+ * @param userId - User ID
900
+ * @param scope - Permission scope
901
+ * @returns Cached permission data and loading state
902
+ *
903
+ * @example
904
+ * ```tsx
905
+ * function MyComponent() {
906
+ * const { permissions, isLoading, error } = useCachedPermissions(
907
+ * 'user-123',
908
+ * { organisationId: 'org-456' }
909
+ * );
910
+ *
911
+ * if (isLoading) return <div>Loading cached permissions...</div>;
912
+ * if (error) return <div>Error: {error.message}</div>;
913
+ *
914
+ * return (
915
+ * <div>
916
+ * {permissions['page-1']?.includes('read') && <ReadButton />}
917
+ * {permissions['page-1']?.includes('manage') && <ManageButton />}
918
+ * </div>
919
+ * );
920
+ * }
921
+ * ```
922
+ */
923
+ declare function useCachedPermissions(userId: UUID, scope: Scope): {
924
+ permissions: PermissionMap;
925
+ isLoading: boolean;
926
+ error: Error | null;
927
+ refetch: () => Promise<void>;
928
+ };
929
+
930
+ /**
931
+ * RBAC Adapters
932
+ * @package @jmruthers/pace-core
933
+ * @module RBAC/Adapters
934
+ * @since 1.0.0
935
+ *
936
+ * This module provides adapters for different frameworks and server runtimes.
937
+ */
938
+
939
+ /**
940
+ * Permission Guard Component
941
+ *
942
+ * A React component that conditionally renders children based on permissions.
943
+ * Can auto-infer userId from context if not provided.
944
+ *
945
+ * @example
946
+ * ```tsx
947
+ * // With explicit userId and scope
948
+ * <PermissionGuard
949
+ * userId="user-123"
950
+ * scope={{ organisationId: 'org-456' }}
951
+ * permission="manage:events"
952
+ * pageId="page-789"
953
+ * fallback={<AccessDenied />}
954
+ * >
955
+ * <AdminPanel />
956
+ * </PermissionGuard>
957
+ *
958
+ * // With context inference (requires auth context)
959
+ * <PermissionGuard
960
+ * permission="manage:events"
961
+ * scope={{ organisationId: 'org-456' }}
962
+ * fallback={<AccessDenied />}
963
+ * >
964
+ * <AdminPanel />
965
+ * </PermissionGuard>
966
+ * ```
967
+ */
968
+ declare function PermissionGuard({ userId, scope, permission, pageId, children, fallback, onDenied, loading, strictMode, auditLog, enforceAudit, }: {
969
+ userId?: UUID;
970
+ scope: {
971
+ organisationId: UUID;
972
+ eventId?: string;
973
+ appId?: UUID;
974
+ };
975
+ permission: Permission;
976
+ pageId?: UUID;
977
+ children: ReactNode;
978
+ fallback?: ReactNode;
979
+ onDenied?: () => void;
980
+ loading?: ReactNode;
981
+ strictMode?: boolean;
982
+ auditLog?: boolean;
983
+ enforceAudit?: boolean;
984
+ }): React__default.ReactNode;
985
+ /**
986
+ * Access Level Guard Component
987
+ *
988
+ * A React component that conditionally renders children based on access level.
989
+ * Can auto-infer userId from context if not provided.
990
+ *
991
+ * @example
992
+ * ```tsx
993
+ * // With explicit userId and scope
994
+ * <AccessLevelGuard
995
+ * userId="user-123"
996
+ * scope={{ organisationId: 'org-456' }}
997
+ * minLevel="admin"
998
+ * fallback={<AccessDenied />}
999
+ * >
1000
+ * <AdminPanel />
1001
+ * </AccessLevelGuard>
1002
+ *
1003
+ * // With context inference (requires auth context)
1004
+ * <AccessLevelGuard
1005
+ * minLevel="admin"
1006
+ * scope={{ organisationId: 'org-456' }}
1007
+ * fallback={<AccessDenied />}
1008
+ * >
1009
+ * <AdminPanel />
1010
+ * </AccessLevelGuard>
1011
+ * ```
1012
+ */
1013
+ declare function AccessLevelGuard({ userId, scope, minLevel, children, fallback, loading, }: {
1014
+ userId?: UUID;
1015
+ scope: {
1016
+ organisationId: UUID;
1017
+ eventId?: string;
1018
+ appId?: UUID;
1019
+ };
1020
+ minLevel: 'viewer' | 'participant' | 'planner' | 'admin' | 'super';
1021
+ children: ReactNode;
1022
+ fallback?: ReactNode;
1023
+ loading?: ReactNode;
1024
+ }): React__default.ReactNode;
1025
+ /**
1026
+ * Permission Guard for Server Handlers
1027
+ *
1028
+ * Wraps a server handler with permission checking.
1029
+ *
1030
+ * @param config - Permission guard configuration
1031
+ * @param handler - Handler function to wrap
1032
+ * @returns Wrapped handler function
1033
+ *
1034
+ * @example
1035
+ * ```typescript
1036
+ * const protectedHandler = withPermissionGuard(
1037
+ * { permission: 'manage:events', pageId: 'page-789' },
1038
+ * async (req, res) => {
1039
+ * // Handler logic here
1040
+ * res.json({ success: true });
1041
+ * }
1042
+ * );
1043
+ * ```
1044
+ */
1045
+ declare function withPermissionGuard<T extends any[]>(config: {
1046
+ permission: Permission;
1047
+ pageId?: UUID;
1048
+ }, handler: (...args: T) => Promise<any>): (...args: T) => Promise<any>;
1049
+ /**
1050
+ * Access Level Guard for Server Handlers
1051
+ *
1052
+ * Wraps a server handler with access level checking.
1053
+ *
1054
+ * @param minLevel - Minimum access level required
1055
+ * @param handler - Handler function to wrap
1056
+ * @returns Wrapped handler function
1057
+ *
1058
+ * @example
1059
+ * ```typescript
1060
+ * const adminHandler = withAccessLevelGuard(
1061
+ * 'admin',
1062
+ * async (req, res) => {
1063
+ * // Admin-only logic here
1064
+ * res.json({ success: true });
1065
+ * }
1066
+ * );
1067
+ * ```
1068
+ */
1069
+ declare function withAccessLevelGuard<T extends any[]>(minLevel: 'viewer' | 'participant' | 'planner' | 'admin' | 'super', handler: (...args: T) => Promise<any>): (...args: T) => Promise<any>;
1070
+ /**
1071
+ * Role Guard for Server Handlers
1072
+ *
1073
+ * Wraps a server handler with role-based access control.
1074
+ * This is the primary middleware for routing protection as specified in the contract.
1075
+ *
1076
+ * @param config - Role guard configuration
1077
+ * @param handler - Handler function to wrap
1078
+ * @returns Wrapped handler function
1079
+ *
1080
+ * @example
1081
+ * ```typescript
1082
+ * const adminHandler = withRoleGuard(
1083
+ * {
1084
+ * globalRoles: ['super_admin'],
1085
+ * organisationRoles: ['org_admin', 'leader'],
1086
+ * eventAppRoles: ['event_admin', 'planner']
1087
+ * },
1088
+ * async (req, res) => {
1089
+ * // Admin-only logic here
1090
+ * res.json({ success: true });
1091
+ * }
1092
+ * );
1093
+ * ```
1094
+ */
1095
+ declare function withRoleGuard<T extends any[]>(config: {
1096
+ globalRoles?: string[];
1097
+ organisationRoles?: string[];
1098
+ eventAppRoles?: string[];
1099
+ requireAll?: boolean;
1100
+ }, handler: (...args: T) => Promise<any>): (...args: T) => Promise<any>;
1101
+ /**
1102
+ * Next.js Middleware for RBAC
1103
+ *
1104
+ * Middleware that checks permissions before allowing access to pages.
1105
+ *
1106
+ * @param config - Middleware configuration
1107
+ * @returns Next.js middleware function
1108
+ *
1109
+ * @example
1110
+ * ```typescript
1111
+ * // middleware.ts
1112
+ * import { createRBACMiddleware } from '@jmruthers/pace-core/rbac';
1113
+ *
1114
+ * export default createRBACMiddleware({
1115
+ * protectedRoutes: [
1116
+ * { path: '/admin', permission: 'manage:admin' },
1117
+ * { path: '/events', permission: 'read:events' },
1118
+ * ],
1119
+ * fallbackUrl: '/access-denied',
1120
+ * });
1121
+ * ```
1122
+ */
1123
+ declare function createRBACMiddleware(config: {
1124
+ protectedRoutes: Array<{
1125
+ path: string;
1126
+ permission: Permission;
1127
+ pageId?: UUID;
1128
+ }>;
1129
+ fallbackUrl?: string;
1130
+ }): (req: {
1131
+ nextUrl: {
1132
+ pathname: string;
1133
+ };
1134
+ user?: {
1135
+ id: string;
1136
+ };
1137
+ organisationId?: string;
1138
+ }, res: {
1139
+ redirect: (url: string) => void;
1140
+ }, next: () => void) => Promise<void>;
1141
+ /**
1142
+ * Express Middleware for RBAC
1143
+ *
1144
+ * Middleware that checks permissions for Express routes.
1145
+ *
1146
+ * @param config - Middleware configuration
1147
+ * @returns Express middleware function
1148
+ *
1149
+ * @example
1150
+ * ```typescript
1151
+ * import { createRBACExpressMiddleware } from '@jmruthers/pace-core/rbac';
1152
+ *
1153
+ * app.use(createRBACExpressMiddleware({
1154
+ * permission: 'read:api',
1155
+ * pageId: 'api-page-123',
1156
+ * }));
1157
+ * ```
1158
+ */
1159
+ declare function createRBACExpressMiddleware(config: {
1160
+ permission: Permission;
1161
+ pageId?: UUID;
1162
+ }): (req: {
1163
+ user?: {
1164
+ id: string;
1165
+ };
1166
+ organisationId?: string;
1167
+ eventId?: string;
1168
+ appId?: string;
1169
+ }, res: {
1170
+ status: (code: number) => {
1171
+ json: (data: object) => void;
1172
+ };
1173
+ }, next: () => void) => Promise<void>;
1174
+ /**
1175
+ * Check if a user has a permission (synchronous cache check only)
1176
+ *
1177
+ * @param userId - User ID
1178
+ * @param scope - Permission scope
1179
+ * @param permission - Permission to check
1180
+ * @param pageId - Optional page ID
1181
+ * @returns True if permission is cached and granted
1182
+ */
1183
+ declare function hasPermissionCached(userId: UUID, scope: {
1184
+ organisationId: UUID;
1185
+ eventId?: string;
1186
+ appId?: UUID;
1187
+ }, _permission: Permission, _pageId?: UUID): boolean;
1188
+ /**
1189
+ * Check if a user has any of the specified permissions (synchronous cache check only)
1190
+ *
1191
+ * @param userId - User ID
1192
+ * @param scope - Permission scope
1193
+ * @param permissions - Array of permissions to check
1194
+ * @param pageId - Optional page ID
1195
+ * @returns True if any permission is cached and granted
1196
+ */
1197
+ declare function hasAnyPermissionCached(userId: UUID, scope: {
1198
+ organisationId: UUID;
1199
+ eventId?: string;
1200
+ appId?: UUID;
1201
+ }, permissions: Permission[], pageId?: UUID): boolean;
1202
+
1203
+ interface PagePermissionContextType {
1204
+ /** Check if user has permission for a page */
1205
+ hasPagePermission: (pageName: string, operation: string, pageId?: string, scope?: Scope) => boolean;
1206
+ /** Get all page permissions for current user */
1207
+ getPagePermissions: () => Record<string, string[]>;
1208
+ /** Check if page permission checking is enabled */
1209
+ isEnabled: boolean;
1210
+ /** Check if strict mode is enabled */
1211
+ isStrictMode: boolean;
1212
+ /** Check if audit logging is enabled */
1213
+ isAuditLogEnabled: boolean;
1214
+ /** Get page access history */
1215
+ getPageAccessHistory: () => PageAccessRecord[];
1216
+ /** Clear page access history */
1217
+ clearPageAccessHistory: () => void;
1218
+ }
1219
+ interface PageAccessRecord {
1220
+ pageName: string;
1221
+ operation: string;
1222
+ userId: UUID;
1223
+ scope: Scope;
1224
+ allowed: boolean;
1225
+ timestamp: string;
1226
+ pageId?: string;
1227
+ }
1228
+ interface PagePermissionProviderProps {
1229
+ /** Child components */
1230
+ children: React__default.ReactNode;
1231
+ /** Enable strict mode to prevent bypassing (default: true) */
1232
+ strictMode?: boolean;
1233
+ /** Enable audit logging (default: true) */
1234
+ auditLog?: boolean;
1235
+ /** Callback when page access is attempted */
1236
+ onPageAccess?: (pageName: string, operation: string, allowed: boolean, record: PageAccessRecord) => void;
1237
+ /** Callback when strict mode violation occurs */
1238
+ onStrictModeViolation?: (pageName: string, operation: string, record: PageAccessRecord) => void;
1239
+ /** Maximum number of access records to keep in history */
1240
+ maxHistorySize?: number;
1241
+ }
1242
+ /**
1243
+ * PagePermissionProvider - Manages page-level permissions across the app
1244
+ *
1245
+ * This provider ensures that all pages are properly protected and provides
1246
+ * centralized page permission management with strict enforcement.
1247
+ *
1248
+ * @param props - Provider props
1249
+ * @returns React element with page permission context
1250
+ */
1251
+ declare function PagePermissionProvider({ children, strictMode, auditLog, onPageAccess, onStrictModeViolation, maxHistorySize }: PagePermissionProviderProps): react_jsx_runtime.JSX.Element;
1252
+ /**
1253
+ * Hook to use page permission context
1254
+ *
1255
+ * @returns Page permission context
1256
+ * @throws Error if used outside of PagePermissionProvider
1257
+ */
1258
+ declare function usePagePermissions(): PagePermissionContextType;
1259
+
1260
+ interface PagePermissionGuardProps {
1261
+ /** Name of the page being protected */
1262
+ pageName: string;
1263
+ /** Operation being performed on the page */
1264
+ operation: 'read' | 'create' | 'update' | 'delete';
1265
+ /** Content to render when user has permission */
1266
+ children: React__default.ReactNode;
1267
+ /** Content to render when user lacks permission */
1268
+ fallback?: React__default.ReactNode;
1269
+ /** Enable strict mode to prevent bypassing (default: true) */
1270
+ strictMode?: boolean;
1271
+ /** Force audit logging for this page access (default: true) */
1272
+ auditLog?: boolean;
1273
+ /** Custom page ID for permission checking */
1274
+ pageId?: string;
1275
+ /** Custom scope for permission checking */
1276
+ scope?: Scope;
1277
+ /** Callback when access is denied */
1278
+ onDenied?: (pageName: string, operation: string) => void;
1279
+ /** Loading state content */
1280
+ loading?: React__default.ReactNode;
1281
+ }
1282
+ /**
1283
+ * PagePermissionGuard - Enforces page-level permissions
1284
+ *
1285
+ * This component ensures that users can only access pages they have permission for.
1286
+ * It integrates with the existing RBAC system and provides strict enforcement to
1287
+ * prevent apps from bypassing permission checks.
1288
+ *
1289
+ * @param props - Component props
1290
+ * @returns React element with permission enforcement
1291
+ */
1292
+ declare function PagePermissionGuard({ pageName, operation, children, fallback, strictMode, auditLog, pageId, scope, onDenied, loading }: PagePermissionGuardProps): react_jsx_runtime.JSX.Element;
1293
+
1294
+ interface DataAccessRecord {
1295
+ table: string;
1296
+ operation: string;
1297
+ userId: UUID;
1298
+ scope: Scope;
1299
+ allowed: boolean;
1300
+ timestamp: string;
1301
+ query?: string;
1302
+ filters?: Record<string, any>;
1303
+ }
1304
+ interface SecureDataContextType {
1305
+ /** Check if data access is allowed for a table and operation */
1306
+ isDataAccessAllowed: (table: string, operation: string, scope?: Scope) => boolean;
1307
+ /** Get all data access permissions for current user */
1308
+ getDataAccessPermissions: () => Record<string, string[]>;
1309
+ /** Check if secure data access is enabled */
1310
+ isEnabled: boolean;
1311
+ /** Check if strict mode is enabled */
1312
+ isStrictMode: boolean;
1313
+ /** Check if audit logging is enabled */
1314
+ isAuditLogEnabled: boolean;
1315
+ /** Get data access history */
1316
+ getDataAccessHistory: () => DataAccessRecord[];
1317
+ /** Clear data access history */
1318
+ clearDataAccessHistory: () => void;
1319
+ /** Validate data access attempt */
1320
+ validateDataAccess: (table: string, operation: string, scope?: Scope) => boolean;
1321
+ }
1322
+ interface SecureDataProviderProps {
1323
+ /** Child components */
1324
+ children: React__default.ReactNode;
1325
+ /** Enable strict mode to prevent bypassing (default: true) */
1326
+ strictMode?: boolean;
1327
+ /** Enable audit logging (default: true) */
1328
+ auditLog?: boolean;
1329
+ /** Callback when data access is attempted */
1330
+ onDataAccess?: (table: string, operation: string, allowed: boolean, record: DataAccessRecord) => void;
1331
+ /** Callback when strict mode violation occurs */
1332
+ onStrictModeViolation?: (table: string, operation: string, record: DataAccessRecord) => void;
1333
+ /** Maximum number of access records to keep in history */
1334
+ maxHistorySize?: number;
1335
+ /** Enable RLS enforcement (default: true) */
1336
+ enforceRLS?: boolean;
1337
+ }
1338
+ /**
1339
+ * SecureDataProvider - Prevents direct Supabase access and enforces secure data patterns
1340
+ *
1341
+ * This provider ensures that all data access goes through the secure RBAC system
1342
+ * and prevents apps from bypassing data access controls.
1343
+ *
1344
+ * @param props - Provider props
1345
+ * @returns React element with secure data context
1346
+ */
1347
+ declare function SecureDataProvider({ children, strictMode, auditLog, onDataAccess, onStrictModeViolation, maxHistorySize, enforceRLS }: SecureDataProviderProps): react_jsx_runtime.JSX.Element;
1348
+ /**
1349
+ * Hook to use secure data context
1350
+ *
1351
+ * @returns Secure data context
1352
+ * @throws Error if used outside of SecureDataProvider
1353
+ */
1354
+ declare function useSecureData(): SecureDataContextType;
1355
+
1356
+ interface PermissionEnforcerProps {
1357
+ /** Permissions required for access */
1358
+ permissions: Permission[];
1359
+ /** Operation being performed */
1360
+ operation: string;
1361
+ /** Content to render when user has permission */
1362
+ children: React__default.ReactNode;
1363
+ /** Content to render when user lacks permission */
1364
+ fallback?: React__default.ReactNode;
1365
+ /** Enable strict mode to prevent bypassing (default: true) */
1366
+ strictMode?: boolean;
1367
+ /** Force audit logging for this operation (default: true) */
1368
+ auditLog?: boolean;
1369
+ /** Custom scope for permission checking */
1370
+ scope?: Scope;
1371
+ /** Callback when access is denied */
1372
+ onDenied?: (permissions: Permission[], operation: string) => void;
1373
+ /** Loading state content */
1374
+ loading?: React__default.ReactNode;
1375
+ /** Require all permissions (AND) or any permission (OR) */
1376
+ requireAll?: boolean;
1377
+ }
1378
+ /**
1379
+ * PermissionEnforcer - Enforces permissions for operations
1380
+ *
1381
+ * This component ensures that users can only perform operations they have permission for.
1382
+ * It integrates with the existing RBAC system and provides strict enforcement to
1383
+ * prevent apps from bypassing permission checks.
1384
+ *
1385
+ * @param props - Component props
1386
+ * @returns React element with permission enforcement
1387
+ */
1388
+ declare function PermissionEnforcer({ permissions, operation, children, fallback, strictMode, auditLog, scope, onDenied, loading, requireAll }: PermissionEnforcerProps): react_jsx_runtime.JSX.Element;
1389
+
1390
+ interface RouteConfig {
1391
+ /** Route path */
1392
+ path: string;
1393
+ /** React component to render */
1394
+ component: React__default.ComponentType;
1395
+ /** Permissions required for this route */
1396
+ permissions: Permission[];
1397
+ /** Roles that can access this route */
1398
+ roles?: string[];
1399
+ /** Minimum access level required */
1400
+ accessLevel?: AccessLevel;
1401
+ /** Page ID for permission checking */
1402
+ pageId?: string;
1403
+ /** Enable strict mode for this route */
1404
+ strictMode?: boolean;
1405
+ /** Route metadata */
1406
+ meta?: {
1407
+ title?: string;
1408
+ description?: string;
1409
+ requiresAuth?: boolean;
1410
+ hidden?: boolean;
1411
+ };
1412
+ }
1413
+ interface RouteAccessRecord {
1414
+ route: string;
1415
+ permissions: Permission[];
1416
+ userId: UUID;
1417
+ scope: Scope;
1418
+ allowed: boolean;
1419
+ timestamp: string;
1420
+ pageId?: string;
1421
+ roles?: string[];
1422
+ accessLevel?: AccessLevel;
1423
+ }
1424
+ interface RoleBasedRouterContextType {
1425
+ /** Get all accessible routes for current user */
1426
+ getAccessibleRoutes: () => RouteConfig[];
1427
+ /** Check if user can access a specific route */
1428
+ canAccessRoute: (path: string) => boolean;
1429
+ /** Get route configuration for a path */
1430
+ getRouteConfig: (path: string) => RouteConfig | null;
1431
+ /** Get route access history */
1432
+ getRouteAccessHistory: () => RouteAccessRecord[];
1433
+ /** Clear route access history */
1434
+ clearRouteAccessHistory: () => void;
1435
+ /** Check if strict mode is enabled */
1436
+ isStrictMode: boolean;
1437
+ /** Check if audit logging is enabled */
1438
+ isAuditLogEnabled: boolean;
1439
+ }
1440
+ interface RoleBasedRouterProps {
1441
+ /** Route configuration */
1442
+ routes: RouteConfig[];
1443
+ /** Fallback route for unauthorized access */
1444
+ fallbackRoute?: string;
1445
+ /** Child components */
1446
+ children: React__default.ReactNode;
1447
+ /** Enable strict mode to prevent bypassing (default: true) */
1448
+ strictMode?: boolean;
1449
+ /** Enable audit logging (default: true) */
1450
+ auditLog?: boolean;
1451
+ /** Callback when route access is attempted */
1452
+ onRouteAccess?: (route: string, allowed: boolean, record: RouteAccessRecord) => void;
1453
+ /** Callback when strict mode violation occurs */
1454
+ onStrictModeViolation?: (route: string, record: RouteAccessRecord) => void;
1455
+ /** Maximum number of access records to keep in history */
1456
+ maxHistorySize?: number;
1457
+ /** Custom unauthorized component */
1458
+ unauthorizedComponent?: React__default.ComponentType<{
1459
+ route: string;
1460
+ reason: string;
1461
+ }>;
1462
+ }
1463
+ /**
1464
+ * RoleBasedRouter - Centralized routing control with role-based protection
1465
+ *
1466
+ * This component ensures that all routes are properly protected and provides
1467
+ * centralized routing control to prevent apps from bypassing route protection.
1468
+ *
1469
+ * @param props - Router props
1470
+ * @returns React element with role-based routing
1471
+ */
1472
+ declare function RoleBasedRouter({ routes, fallbackRoute, children, strictMode, auditLog, onRouteAccess, onStrictModeViolation, maxHistorySize, unauthorizedComponent: UnauthorizedComponent }: RoleBasedRouterProps): react_jsx_runtime.JSX.Element;
1473
+ /**
1474
+ * Hook to use role-based router context
1475
+ *
1476
+ * @returns Role-based router context
1477
+ * @throws Error if used outside of RoleBasedRouter
1478
+ */
1479
+ declare function useRoleBasedRouter(): RoleBasedRouterContextType;
1480
+
1481
+ interface NavigationItem {
1482
+ /** Unique identifier for the navigation item */
1483
+ id: string;
1484
+ /** Display label for the navigation item */
1485
+ label: string;
1486
+ /** Navigation path/URL */
1487
+ path: string;
1488
+ /** Permissions required for this navigation item */
1489
+ permissions: Permission[];
1490
+ /** Roles that can access this navigation item */
1491
+ roles?: string[];
1492
+ /** Minimum access level required */
1493
+ accessLevel?: 'viewer' | 'participant' | 'planner' | 'admin' | 'super';
1494
+ /** Page ID for permission checking */
1495
+ pageId?: string;
1496
+ /** Enable strict mode for this navigation item */
1497
+ strictMode?: boolean;
1498
+ /** Navigation item metadata */
1499
+ meta?: {
1500
+ icon?: string;
1501
+ description?: string;
1502
+ hidden?: boolean;
1503
+ order?: number;
1504
+ };
1505
+ }
1506
+ interface NavigationAccessRecord {
1507
+ navigationItem: string;
1508
+ permissions: Permission[];
1509
+ userId: UUID;
1510
+ scope: Scope;
1511
+ allowed: boolean;
1512
+ timestamp: string;
1513
+ pageId?: string;
1514
+ roles?: string[];
1515
+ accessLevel?: string;
1516
+ }
1517
+ interface NavigationContextType {
1518
+ /** Check if user has permission for a navigation item */
1519
+ hasNavigationPermission: (item: NavigationItem) => boolean;
1520
+ /** Get all navigation permissions for current user */
1521
+ getNavigationPermissions: () => Record<string, string[]>;
1522
+ /** Get filtered navigation items based on permissions */
1523
+ getFilteredNavigationItems: (items: NavigationItem[]) => NavigationItem[];
1524
+ /** Check if navigation permission checking is enabled */
1525
+ isEnabled: boolean;
1526
+ /** Check if strict mode is enabled */
1527
+ isStrictMode: boolean;
1528
+ /** Check if audit logging is enabled */
1529
+ isAuditLogEnabled: boolean;
1530
+ /** Get navigation access history */
1531
+ getNavigationAccessHistory: () => NavigationAccessRecord[];
1532
+ /** Clear navigation access history */
1533
+ clearNavigationAccessHistory: () => void;
1534
+ }
1535
+ interface NavigationProviderProps {
1536
+ /** Child components */
1537
+ children: React__default.ReactNode;
1538
+ /** Enable strict mode to prevent bypassing (default: true) */
1539
+ strictMode?: boolean;
1540
+ /** Enable audit logging (default: true) */
1541
+ auditLog?: boolean;
1542
+ /** Callback when navigation access is attempted */
1543
+ onNavigationAccess?: (item: NavigationItem, allowed: boolean, record: NavigationAccessRecord) => void;
1544
+ /** Callback when strict mode violation occurs */
1545
+ onStrictModeViolation?: (item: NavigationItem, record: NavigationAccessRecord) => void;
1546
+ /** Maximum number of access records to keep in history */
1547
+ maxHistorySize?: number;
1548
+ }
1549
+ /**
1550
+ * NavigationProvider - Manages navigation-level permissions across the app
1551
+ *
1552
+ * This provider ensures that all navigation items are properly protected and provides
1553
+ * centralized navigation permission management with strict enforcement.
1554
+ *
1555
+ * @param props - Provider props
1556
+ * @returns React element with navigation permission context
1557
+ */
1558
+ declare function NavigationProvider({ children, strictMode, auditLog, onNavigationAccess, onStrictModeViolation, maxHistorySize }: NavigationProviderProps): react_jsx_runtime.JSX.Element;
1559
+ /**
1560
+ * Hook to use navigation permission context
1561
+ *
1562
+ * @returns Navigation permission context
1563
+ * @throws Error if used outside of NavigationProvider
1564
+ */
1565
+ declare function useNavigationPermissions(): NavigationContextType;
1566
+
1567
+ interface NavigationGuardProps {
1568
+ /** Navigation item being protected */
1569
+ navigationItem: NavigationItem;
1570
+ /** Content to render when user has permission */
1571
+ children: React__default.ReactNode;
1572
+ /** Content to render when user lacks permission */
1573
+ fallback?: React__default.ReactNode;
1574
+ /** Enable strict mode to prevent bypassing (default: true) */
1575
+ strictMode?: boolean;
1576
+ /** Force audit logging for this navigation access (default: true) */
1577
+ auditLog?: boolean;
1578
+ /** Custom scope for permission checking */
1579
+ scope?: Scope;
1580
+ /** Callback when access is denied */
1581
+ onDenied?: (item: NavigationItem) => void;
1582
+ /** Loading state content */
1583
+ loading?: React__default.ReactNode;
1584
+ /** Require all permissions (AND) or any permission (OR) */
1585
+ requireAll?: boolean;
1586
+ }
1587
+ /**
1588
+ * NavigationGuard - Enforces navigation-level permissions
1589
+ *
1590
+ * This component ensures that users can only access navigation items they have permission for.
1591
+ * It integrates with the existing RBAC system and provides strict enforcement to
1592
+ * prevent apps from bypassing navigation permission checks.
1593
+ *
1594
+ * @param props - Component props
1595
+ * @returns React element with navigation permission enforcement
1596
+ */
1597
+ declare function NavigationGuard({ navigationItem, children, fallback, strictMode, auditLog, scope, onDenied, loading, requireAll }: NavigationGuardProps): react_jsx_runtime.JSX.Element;
1598
+
1599
+ interface EnhancedNavigationMenuProps {
1600
+ /** Navigation items to display */
1601
+ items: NavigationItem[];
1602
+ /** Enable strict mode to prevent bypassing (default: true) */
1603
+ strictMode?: boolean;
1604
+ /** Enable audit logging (default: true) */
1605
+ auditLog?: boolean;
1606
+ /** Callback when navigation access is attempted */
1607
+ onNavigationAccess?: (item: NavigationItem, allowed: boolean) => void;
1608
+ /** Callback when strict mode violation occurs */
1609
+ onStrictModeViolation?: (item: NavigationItem) => void;
1610
+ /** Custom className for the navigation menu */
1611
+ className?: string;
1612
+ /** Custom className for navigation items */
1613
+ itemClassName?: string;
1614
+ /** Custom className for active navigation items */
1615
+ activeItemClassName?: string;
1616
+ /** Custom className for disabled navigation items */
1617
+ disabledItemClassName?: string;
1618
+ /** Show/hide navigation items that user doesn't have permission for */
1619
+ hideUnauthorizedItems?: boolean;
1620
+ /** Custom render function for navigation items */
1621
+ renderItem?: (item: NavigationItem, isAuthorized: boolean) => React__default.ReactNode;
1622
+ /** Current active path for highlighting */
1623
+ activePath?: string;
1624
+ /** Navigation item click handler */
1625
+ onItemClick?: (item: NavigationItem) => void;
1626
+ }
1627
+ /**
1628
+ * EnhancedNavigationMenu - Secure navigation menu with RBAC integration
1629
+ *
1630
+ * This component provides a navigation menu that automatically filters items based on
1631
+ * user permissions and enforces strict security controls.
1632
+ *
1633
+ * @param props - Component props
1634
+ * @returns React element with enhanced navigation menu
1635
+ */
1636
+ declare function EnhancedNavigationMenu({ items, strictMode, auditLog, onNavigationAccess, onStrictModeViolation, className, itemClassName, activeItemClassName, disabledItemClassName, hideUnauthorizedItems, renderItem, activePath, onItemClick }: EnhancedNavigationMenuProps): react_jsx_runtime.JSX.Element;
1637
+
1638
+ /**
1639
+ * RBAC Main API Functions
1640
+ * @package @jmruthers/pace-core
1641
+ * @module RBAC/API
1642
+ * @since 1.0.0
1643
+ *
1644
+ * This module provides the main API functions for the RBAC system.
1645
+ */
1646
+
1647
+ /**
1648
+ * Setup RBAC system
1649
+ *
1650
+ * @param supabase - Supabase client
1651
+ * @param config - Optional configuration
1652
+ */
1653
+ declare function setupRBAC(supabase: SupabaseClient<Database>, config?: Partial<RBACConfig>): void;
1654
+ /**
1655
+ * Get user's access level in a scope
1656
+ *
1657
+ * @param input - Access level input
1658
+ * @returns Promise resolving to access level
1659
+ *
1660
+ * @example
1661
+ * ```typescript
1662
+ * const accessLevel = await getAccessLevel({
1663
+ * userId: 'user-123',
1664
+ * scope: { organisationId: 'org-456' }
1665
+ * });
1666
+ * ```
1667
+ */
1668
+ declare function getAccessLevel(input: {
1669
+ userId: UUID;
1670
+ scope: Scope;
1671
+ }): Promise<AccessLevel>;
1672
+ /**
1673
+ * Get user's permission map for a scope
1674
+ *
1675
+ * @param input - Permission map input
1676
+ * @returns Promise resolving to permission map
1677
+ *
1678
+ * @example
1679
+ * ```typescript
1680
+ * const permissions = await getPermissionMap({
1681
+ * userId: 'user-123',
1682
+ * scope: {
1683
+ * organisationId: 'org-456',
1684
+ * eventId: 'event-789',
1685
+ * appId: 'app-101'
1686
+ * }
1687
+ * });
1688
+ * ```
1689
+ */
1690
+ declare function getPermissionMap(input: {
1691
+ userId: UUID;
1692
+ scope: Scope;
1693
+ }): Promise<PermissionMap>;
1694
+ /**
1695
+ * Check if user has a specific permission
1696
+ *
1697
+ * @param input - Permission check input
1698
+ * @returns Promise resolving to permission result
1699
+ *
1700
+ * @example
1701
+ * ```typescript
1702
+ * const canManage = await isPermitted({
1703
+ * userId: 'user-123',
1704
+ * scope: { organisationId: 'org-456' },
1705
+ * permission: 'manage:events',
1706
+ * pageId: 'page-789'
1707
+ * });
1708
+ * ```
1709
+ */
1710
+ declare function isPermitted(input: PermissionCheck): Promise<boolean>;
1711
+ /**
1712
+ * Check if user has a specific permission (cached version)
1713
+ *
1714
+ * @param input - Permission check input
1715
+ * @returns Promise resolving to permission result
1716
+ */
1717
+ declare function isPermittedCached(input: PermissionCheck): Promise<boolean>;
1718
+ /**
1719
+ * Check if a user has a specific permission (alias for isPermitted)
1720
+ *
1721
+ * @param input - Permission check parameters
1722
+ * @returns Promise<boolean> - True if user has permission
1723
+ */
1724
+ declare function hasPermission(input: PermissionCheck): Promise<boolean>;
1725
+ /**
1726
+ * Check if user has any of the specified permissions
1727
+ *
1728
+ * @param input - Permission check input with array of permissions
1729
+ * @returns Promise resolving to true if user has any permission
1730
+ */
1731
+ declare function hasAnyPermission(input: {
1732
+ userId: UUID;
1733
+ scope: Scope;
1734
+ permissions: Permission[];
1735
+ pageId?: UUID;
1736
+ }): Promise<boolean>;
1737
+ /**
1738
+ * Check if user has all of the specified permissions
1739
+ *
1740
+ * @param input - Permission check input with array of permissions
1741
+ * @returns Promise resolving to true if user has all permissions
1742
+ */
1743
+ declare function hasAllPermissions(input: {
1744
+ userId: UUID;
1745
+ scope: Scope;
1746
+ permissions: Permission[];
1747
+ pageId?: UUID;
1748
+ }): Promise<boolean>;
1749
+
1750
+ /**
1751
+ * RBAC Permissions Definitions
1752
+ * @package @jmruthers/pace-core
1753
+ * @module RBAC/Permissions
1754
+ * @since 1.0.0
1755
+ *
1756
+ * This module defines all permissions used in the RBAC system.
1757
+ * All permission strings must be imported from this file to ensure consistency.
1758
+ */
1759
+
1760
+ declare const GLOBAL_PERMISSIONS: {
1761
+ readonly MANAGE_ALL: Permission;
1762
+ readonly READ_ALL: Permission;
1763
+ readonly CREATE_ALL: Permission;
1764
+ readonly UPDATE_ALL: Permission;
1765
+ readonly DELETE_ALL: Permission;
1766
+ };
1767
+ declare const ORGANISATION_PERMISSIONS: {
1768
+ readonly MANAGE_ORGANISATION: Permission;
1769
+ readonly READ_ORGANISATION: Permission;
1770
+ readonly UPDATE_ORGANISATION: Permission;
1771
+ readonly MANAGE_USERS: Permission;
1772
+ readonly READ_USERS: Permission;
1773
+ readonly CREATE_USERS: Permission;
1774
+ readonly UPDATE_USERS: Permission;
1775
+ readonly DELETE_USERS: Permission;
1776
+ readonly MANAGE_ROLES: Permission;
1777
+ readonly READ_ROLES: Permission;
1778
+ readonly CREATE_ROLES: Permission;
1779
+ readonly UPDATE_ROLES: Permission;
1780
+ readonly DELETE_ROLES: Permission;
1781
+ readonly MANAGE_EVENTS: Permission;
1782
+ readonly READ_EVENTS: Permission;
1783
+ readonly CREATE_EVENTS: Permission;
1784
+ readonly UPDATE_EVENTS: Permission;
1785
+ readonly DELETE_EVENTS: Permission;
1786
+ readonly MANAGE_APPS: Permission;
1787
+ readonly READ_APPS: Permission;
1788
+ readonly CREATE_APPS: Permission;
1789
+ readonly UPDATE_APPS: Permission;
1790
+ readonly DELETE_APPS: Permission;
1791
+ };
1792
+ declare const EVENT_APP_PERMISSIONS: {
1793
+ readonly MANAGE_EVENT: Permission;
1794
+ readonly READ_EVENT: Permission;
1795
+ readonly UPDATE_EVENT: Permission;
1796
+ readonly MANAGE_APP: Permission;
1797
+ readonly READ_APP: Permission;
1798
+ readonly UPDATE_APP: Permission;
1799
+ readonly MANAGE_TEAM: Permission;
1800
+ readonly READ_TEAM: Permission;
1801
+ readonly CREATE_TEAM: Permission;
1802
+ readonly UPDATE_TEAM: Permission;
1803
+ readonly DELETE_TEAM: Permission;
1804
+ readonly MANAGE_TEAM_MEMBERS: Permission;
1805
+ readonly READ_TEAM_MEMBERS: Permission;
1806
+ readonly CREATE_TEAM_MEMBERS: Permission;
1807
+ readonly UPDATE_TEAM_MEMBERS: Permission;
1808
+ readonly DELETE_TEAM_MEMBERS: Permission;
1809
+ readonly MANAGE_EVENT_CONTENT: Permission;
1810
+ readonly READ_EVENT_CONTENT: Permission;
1811
+ readonly CREATE_EVENT_CONTENT: Permission;
1812
+ readonly UPDATE_EVENT_CONTENT: Permission;
1813
+ readonly DELETE_EVENT_CONTENT: Permission;
1814
+ readonly MANAGE_EVENT_SETTINGS: Permission;
1815
+ readonly READ_EVENT_SETTINGS: Permission;
1816
+ readonly UPDATE_EVENT_SETTINGS: Permission;
1817
+ };
1818
+ declare const PAGE_PERMISSIONS: {
1819
+ readonly READ_PAGE: Permission;
1820
+ readonly MANAGE_PAGE: Permission;
1821
+ readonly READ_ADMIN: Permission;
1822
+ readonly MANAGE_ADMIN: Permission;
1823
+ readonly READ_DASHBOARD: Permission;
1824
+ readonly MANAGE_DASHBOARD: Permission;
1825
+ readonly READ_SETTINGS: Permission;
1826
+ readonly MANAGE_SETTINGS: Permission;
1827
+ readonly READ_REPORTS: Permission;
1828
+ readonly MANAGE_REPORTS: Permission;
1829
+ };
1830
+ declare const PERMISSION_GROUPS: {
1831
+ readonly GLOBAL_ADMIN: readonly [`read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`];
1832
+ readonly ORG_ADMIN: readonly [`read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`];
1833
+ readonly EVENT_ADMIN: readonly [`read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`];
1834
+ readonly PLANNER: readonly [`read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`];
1835
+ readonly PARTICIPANT: readonly [`read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`];
1836
+ readonly VIEWER: readonly [`read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`, `read:${string}` | `create:${string}` | `update:${string}` | `delete:${string}` | `manage:${string}`];
1837
+ };
1838
+ /**
1839
+ * Validate that a permission string is properly formatted
1840
+ *
1841
+ * @param permission - Permission string to validate
1842
+ * @returns True if valid, false otherwise
1843
+ */
1844
+ declare function isValidPermission(permission: string): permission is Permission;
1845
+ /**
1846
+ * Get all permissions for a role
1847
+ *
1848
+ * @param role - Role name
1849
+ * @returns Array of permissions for the role
1850
+ */
1851
+ declare function getPermissionsForRole(role: string): Permission[];
1852
+ declare const ALL_PERMISSIONS: {
1853
+ readonly READ_PAGE: Permission;
1854
+ readonly MANAGE_PAGE: Permission;
1855
+ readonly READ_ADMIN: Permission;
1856
+ readonly MANAGE_ADMIN: Permission;
1857
+ readonly READ_DASHBOARD: Permission;
1858
+ readonly MANAGE_DASHBOARD: Permission;
1859
+ readonly READ_SETTINGS: Permission;
1860
+ readonly MANAGE_SETTINGS: Permission;
1861
+ readonly READ_REPORTS: Permission;
1862
+ readonly MANAGE_REPORTS: Permission;
1863
+ readonly MANAGE_EVENT: Permission;
1864
+ readonly READ_EVENT: Permission;
1865
+ readonly UPDATE_EVENT: Permission;
1866
+ readonly MANAGE_APP: Permission;
1867
+ readonly READ_APP: Permission;
1868
+ readonly UPDATE_APP: Permission;
1869
+ readonly MANAGE_TEAM: Permission;
1870
+ readonly READ_TEAM: Permission;
1871
+ readonly CREATE_TEAM: Permission;
1872
+ readonly UPDATE_TEAM: Permission;
1873
+ readonly DELETE_TEAM: Permission;
1874
+ readonly MANAGE_TEAM_MEMBERS: Permission;
1875
+ readonly READ_TEAM_MEMBERS: Permission;
1876
+ readonly CREATE_TEAM_MEMBERS: Permission;
1877
+ readonly UPDATE_TEAM_MEMBERS: Permission;
1878
+ readonly DELETE_TEAM_MEMBERS: Permission;
1879
+ readonly MANAGE_EVENT_CONTENT: Permission;
1880
+ readonly READ_EVENT_CONTENT: Permission;
1881
+ readonly CREATE_EVENT_CONTENT: Permission;
1882
+ readonly UPDATE_EVENT_CONTENT: Permission;
1883
+ readonly DELETE_EVENT_CONTENT: Permission;
1884
+ readonly MANAGE_EVENT_SETTINGS: Permission;
1885
+ readonly READ_EVENT_SETTINGS: Permission;
1886
+ readonly UPDATE_EVENT_SETTINGS: Permission;
1887
+ readonly MANAGE_ORGANISATION: Permission;
1888
+ readonly READ_ORGANISATION: Permission;
1889
+ readonly UPDATE_ORGANISATION: Permission;
1890
+ readonly MANAGE_USERS: Permission;
1891
+ readonly READ_USERS: Permission;
1892
+ readonly CREATE_USERS: Permission;
1893
+ readonly UPDATE_USERS: Permission;
1894
+ readonly DELETE_USERS: Permission;
1895
+ readonly MANAGE_ROLES: Permission;
1896
+ readonly READ_ROLES: Permission;
1897
+ readonly CREATE_ROLES: Permission;
1898
+ readonly UPDATE_ROLES: Permission;
1899
+ readonly DELETE_ROLES: Permission;
1900
+ readonly MANAGE_EVENTS: Permission;
1901
+ readonly READ_EVENTS: Permission;
1902
+ readonly CREATE_EVENTS: Permission;
1903
+ readonly UPDATE_EVENTS: Permission;
1904
+ readonly DELETE_EVENTS: Permission;
1905
+ readonly MANAGE_APPS: Permission;
1906
+ readonly READ_APPS: Permission;
1907
+ readonly CREATE_APPS: Permission;
1908
+ readonly UPDATE_APPS: Permission;
1909
+ readonly DELETE_APPS: Permission;
1910
+ readonly MANAGE_ALL: Permission;
1911
+ readonly READ_ALL: Permission;
1912
+ readonly CREATE_ALL: Permission;
1913
+ readonly UPDATE_ALL: Permission;
1914
+ readonly DELETE_ALL: Permission;
1915
+ };
1916
+ type AllPermissions = typeof ALL_PERMISSIONS;
1917
+
1918
+ export { ALL_PERMISSIONS, type AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type DataAccessRecord, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRole, GLOBAL_PERMISSIONS, type GlobalRole, InvalidScopeError, type LogLevel, MissingUserContextError, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, type Operation, OrganisationContextRequiredError, type OrganisationRole, PAGE_PERMISSIONS, PERMISSION_GROUPS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, type Permission, type PermissionCheck, PermissionDeniedError, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, type PermissionMap, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, RBACError, type RBACLogger, RBACNotInitializedError, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RouteAccessRecord, type RouteConfig, type Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type UUID, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, emitAuditEvent, fromSupabaseClient, getAccessLevel, getGlobalAuditManager, getPermissionMap, getPermissionsForRole, getRBACConfig, getRBACLogger, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPermitted, isPermittedCached, isValidPermission, rbacCache, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRoleBasedRouter, useSecureData, withAccessLevelGuard, withPermissionGuard, withRoleGuard };