@jmruthers/pace-core 0.6.1 → 0.6.3

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 (549) hide show
  1. package/CHANGELOG.md +88 -10
  2. package/cursor-rules/00-pace-core-compliance.mdc +46 -87
  3. package/cursor-rules/01-standards-compliance.mdc +16 -47
  4. package/cursor-rules/02-project-structure.mdc +4 -4
  5. package/cursor-rules/03-solid-principles.mdc +45 -164
  6. package/cursor-rules/04-testing-standards.mdc +22 -69
  7. package/cursor-rules/05-bug-reports-and-features.mdc +2 -2
  8. package/cursor-rules/06-code-quality.mdc +42 -125
  9. package/cursor-rules/07-tech-stack-compliance.mdc +33 -128
  10. package/cursor-rules/08-markup-quality.mdc +452 -0
  11. package/cursor-rules/CHANGELOG.md +18 -0
  12. package/cursor-rules/README.md +2 -1
  13. package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-Cb34EQs3.d.ts} +63 -1
  14. package/dist/{DataTable-CH1U5Tpy.d.ts → DataTable-BMRU8a1j.d.ts} +33 -1
  15. package/dist/{DataTable-DQ7RSOHE.js → DataTable-THFPBKTP.js} +12 -10
  16. package/dist/{PublicPageProvider-ce4xlHYA.d.ts → PublicPageProvider-DEMpysFR.d.ts} +394 -171
  17. package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CKvHP1MK.d.ts} +30 -8
  18. package/dist/{UnifiedAuthProvider-ATAP5UTR.js → UnifiedAuthProvider-KAGUYQ4J.js} +5 -4
  19. package/dist/{api-N774RPUA.js → api-IAGWF3ZG.js} +10 -10
  20. package/dist/{audit-B5P6FFIR.js → audit-V53FV5AG.js} +2 -2
  21. package/dist/{chunk-JBKQ3SAO.js → chunk-2T2IG7T7.js} +107 -57
  22. package/dist/chunk-2T2IG7T7.js.map +1 -0
  23. package/dist/{chunk-3QRJFVBR.js → chunk-6SOIHG6Z.js} +1 -1
  24. package/dist/chunk-6SOIHG6Z.js.map +1 -0
  25. package/dist/{chunk-3XTALGJF.js → chunk-6Z7LTB3D.js} +69 -240
  26. package/dist/chunk-6Z7LTB3D.js.map +1 -0
  27. package/dist/{chunk-4ZC4GX36.js → chunk-CNCQDFLN.js} +199 -46
  28. package/dist/chunk-CNCQDFLN.js.map +1 -0
  29. package/dist/chunk-DGUM43GV.js +11 -0
  30. package/dist/{chunk-BYFSK72L.js → chunk-DWUBLJJM.js} +361 -187
  31. package/dist/chunk-DWUBLJJM.js.map +1 -0
  32. package/dist/{chunk-LXQLPRQ2.js → chunk-FFQEQTNW.js} +6 -8
  33. package/dist/chunk-FFQEQTNW.js.map +1 -0
  34. package/dist/chunk-FMUCXFII.js +76 -0
  35. package/dist/chunk-FMUCXFII.js.map +1 -0
  36. package/dist/{chunk-4N5C5XZU.js → chunk-HFZBI76P.js} +4 -4
  37. package/dist/chunk-HFZBI76P.js.map +1 -0
  38. package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
  39. package/dist/chunk-L4OXEN46.js.map +1 -0
  40. package/dist/{chunk-R77UEZ4E.js → chunk-M43Y4SSO.js} +1 -1
  41. package/dist/chunk-M43Y4SSO.js.map +1 -0
  42. package/dist/{chunk-I7PSE6JW.js → chunk-M7MPQISP.js} +3 -76
  43. package/dist/chunk-M7MPQISP.js.map +1 -0
  44. package/dist/chunk-PQBSKX33.js +7793 -0
  45. package/dist/chunk-PQBSKX33.js.map +1 -0
  46. package/dist/chunk-QRPVRXYT.js +226 -0
  47. package/dist/chunk-QRPVRXYT.js.map +1 -0
  48. package/dist/{chunk-KNC55RTG.js → chunk-RWEBCB47.js} +194 -416
  49. package/dist/chunk-RWEBCB47.js.map +1 -0
  50. package/dist/{chunk-XM25TVIE.js → chunk-YDQHOZNA.js} +843 -388
  51. package/dist/chunk-YDQHOZNA.js.map +1 -0
  52. package/dist/{chunk-GLK6VM3F.js → chunk-ZNIWI3UC.js} +739 -737
  53. package/dist/chunk-ZNIWI3UC.js.map +1 -0
  54. package/dist/components.d.ts +5 -5
  55. package/dist/components.js +18 -16
  56. package/dist/components.js.map +1 -1
  57. package/dist/contextValidator-3JNZKUTX.js +9 -0
  58. package/dist/contextValidator-3JNZKUTX.js.map +1 -0
  59. package/dist/eslint-rules/pace-core-compliance.cjs +106 -0
  60. package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
  61. package/dist/hooks.d.ts +55 -122
  62. package/dist/hooks.js +10 -13
  63. package/dist/hooks.js.map +1 -1
  64. package/dist/index.d.ts +60 -13
  65. package/dist/index.js +30 -25
  66. package/dist/index.js.map +1 -1
  67. package/dist/providers.d.ts +21 -3
  68. package/dist/providers.js +4 -3
  69. package/dist/rbac/index.d.ts +210 -139
  70. package/dist/rbac/index.js +17 -13
  71. package/dist/styles/index.js +1 -1
  72. package/dist/theming/runtime.d.ts +1 -13
  73. package/dist/theming/runtime.js +2 -2
  74. package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
  75. package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
  76. package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
  77. package/dist/types.d.ts +2 -2
  78. package/dist/types.js +1 -1
  79. package/dist/{usePublicRouteParams-BJAlWfuJ.d.ts → usePublicRouteParams-i3qtoBgg.d.ts} +38 -17
  80. package/dist/utils.d.ts +4 -5
  81. package/dist/utils.js +17 -19
  82. package/dist/utils.js.map +1 -1
  83. package/docs/api/README.md +21 -17
  84. package/docs/api/modules.md +4191 -2967
  85. package/docs/architecture/database-schema-requirements.md +161 -0
  86. package/docs/components/context-selector.md +126 -0
  87. package/docs/core-concepts/rbac-system.md +3 -3
  88. package/docs/documentation-index.md +2 -4
  89. package/docs/getting-started/cursor-rules.md +2 -1
  90. package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
  91. package/docs/migration/MIGRATION_GUIDE.md +2 -24
  92. package/docs/migration/RBAC_SCOPE_MIGRATION.md +385 -0
  93. package/docs/migration/README.md +52 -6
  94. package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
  95. package/docs/migration/database-changes-december-2025.md +3 -3
  96. package/docs/pace-mint-fix-auto-selection.md +218 -0
  97. package/docs/pace-mint-rbac-setup.md +391 -0
  98. package/docs/rbac/event-based-apps.md +1 -1
  99. package/docs/rbac/getting-started.md +1 -1
  100. package/docs/rbac/quick-start.md +1 -1
  101. package/docs/rbac/secure-client-protection.md +330 -0
  102. package/docs/standards/README.md +1 -0
  103. package/package.json +4 -3
  104. package/scripts/audit/core/checks/accessibility.cjs +197 -0
  105. package/scripts/audit/core/checks/api-usage.cjs +191 -0
  106. package/scripts/audit/core/checks/bundle.cjs +142 -0
  107. package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +784 -685
  108. package/scripts/audit/core/checks/config.cjs +54 -0
  109. package/scripts/audit/core/checks/coverage.cjs +84 -0
  110. package/scripts/audit/core/checks/dependencies.cjs +985 -0
  111. package/scripts/audit/core/checks/documentation.cjs +268 -0
  112. package/scripts/audit/core/checks/environment.cjs +116 -0
  113. package/scripts/audit/core/checks/error-handling.cjs +340 -0
  114. package/scripts/audit/core/checks/forms.cjs +172 -0
  115. package/scripts/audit/core/checks/heuristics.cjs +68 -0
  116. package/scripts/audit/core/checks/hooks.cjs +334 -0
  117. package/scripts/audit/core/checks/imports.cjs +244 -0
  118. package/scripts/audit/core/checks/performance.cjs +325 -0
  119. package/scripts/audit/core/checks/routes.cjs +117 -0
  120. package/scripts/audit/core/checks/state.cjs +130 -0
  121. package/scripts/audit/core/checks/structure.cjs +65 -0
  122. package/scripts/audit/core/checks/style.cjs +584 -0
  123. package/scripts/audit/core/checks/testing.cjs +122 -0
  124. package/scripts/audit/core/checks/typescript.cjs +61 -0
  125. package/scripts/audit/core/scanner.cjs +199 -0
  126. package/scripts/audit/core/utils.cjs +137 -0
  127. package/scripts/audit/index.cjs +223 -0
  128. package/scripts/audit/reporters/console.cjs +151 -0
  129. package/scripts/audit/reporters/json.cjs +54 -0
  130. package/scripts/audit/reporters/markdown.cjs +124 -0
  131. package/scripts/audit-consuming-app.cjs +61 -936
  132. package/scripts/build-docs/build-decision.js +240 -0
  133. package/scripts/build-docs/cache-utils.js +105 -0
  134. package/scripts/build-docs/content-normalization.js +150 -0
  135. package/scripts/build-docs/file-utils.js +105 -0
  136. package/scripts/build-docs/git-utils.js +86 -0
  137. package/scripts/build-docs/hash-utils.js +116 -0
  138. package/scripts/build-docs/typedoc-runner.js +220 -0
  139. package/scripts/build-docs-incremental.js +77 -913
  140. package/scripts/utils/command-runner.js +16 -11
  141. package/scripts/validate-formats.js +61 -56
  142. package/scripts/validate-master.js +74 -69
  143. package/scripts/validate-pre-publish.js +70 -65
  144. package/src/__tests__/hooks/usePermissions.test.ts +2 -2
  145. package/src/components/Alert/Alert.test.tsx +12 -18
  146. package/src/components/Alert/Alert.tsx +5 -7
  147. package/src/components/Avatar/Avatar.test.tsx +4 -4
  148. package/src/components/Badge/Badge.tsx +14 -0
  149. package/src/components/Button/Button.tsx +22 -0
  150. package/src/components/Calendar/Calendar.tsx +8 -2
  151. package/src/components/Card/Card.tsx +4 -0
  152. package/src/components/Checkbox/Checkbox.test.tsx +12 -12
  153. package/src/components/Checkbox/Checkbox.tsx +2 -2
  154. package/src/components/ContextSelector/ContextSelector.tsx +384 -0
  155. package/src/components/ContextSelector/index.ts +3 -0
  156. package/src/components/DataTable/DataTable.tsx +38 -4
  157. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
  158. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +18 -4
  159. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
  160. package/src/components/DataTable/components/AccessDeniedPage.tsx +16 -25
  161. package/src/components/DataTable/components/ActionButtons.tsx +10 -7
  162. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +1 -1
  163. package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
  164. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
  165. package/src/components/DataTable/components/DataTableBody.tsx +8 -0
  166. package/src/components/DataTable/components/DataTableCore.tsx +196 -554
  167. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
  168. package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
  169. package/src/components/DataTable/components/DataTableModals.tsx +8 -0
  170. package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
  171. package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
  172. package/src/components/DataTable/components/EditFields.tsx +307 -0
  173. package/src/components/DataTable/components/EditableRow.tsx +8 -0
  174. package/src/components/DataTable/components/EmptyState.tsx +10 -0
  175. package/src/components/DataTable/components/FilterRow.tsx +12 -0
  176. package/src/components/DataTable/components/GroupHeader.tsx +12 -0
  177. package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
  178. package/src/components/DataTable/components/ImportModal.tsx +7 -0
  179. package/src/components/DataTable/components/LoadingState.tsx +6 -0
  180. package/src/components/DataTable/components/PaginationControls.tsx +16 -1
  181. package/src/components/DataTable/components/RowComponent.tsx +391 -0
  182. package/src/components/DataTable/components/UnifiedTableBody.tsx +63 -851
  183. package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
  184. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
  185. package/src/components/DataTable/components/cellValueUtils.ts +40 -0
  186. package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
  187. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
  188. package/src/components/DataTable/context/DataTableContext.tsx +50 -0
  189. package/src/components/DataTable/core/ColumnFactory.ts +31 -0
  190. package/src/components/DataTable/core/DataTableContext.tsx +32 -1
  191. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
  192. package/src/components/DataTable/hooks/useColumnReordering.ts +12 -0
  193. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
  194. package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
  195. package/src/components/DataTable/hooks/useDataTablePermissions.ts +127 -33
  196. package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
  197. package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
  198. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
  199. package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
  200. package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
  201. package/src/components/DataTable/styles.ts +6 -6
  202. package/src/components/DataTable/types.ts +6 -10
  203. package/src/components/DataTable/utils/a11yUtils.ts +7 -0
  204. package/src/components/DataTable/utils/debugTools.ts +18 -113
  205. package/src/components/DataTable/utils/errorHandling.ts +12 -0
  206. package/src/components/DataTable/utils/exportUtils.ts +9 -0
  207. package/src/components/DataTable/utils/flexibleImport.ts +12 -48
  208. package/src/components/DataTable/utils/paginationUtils.ts +8 -0
  209. package/src/components/DataTable/utils/performanceUtils.ts +5 -1
  210. package/src/components/Dialog/Dialog.tsx +31 -3
  211. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
  212. package/src/components/ErrorBoundary/ErrorBoundary.tsx +45 -5
  213. package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
  214. package/src/components/ErrorBoundary/index.ts +27 -2
  215. package/src/components/FileDisplay/FileDisplay.tsx +74 -28
  216. package/src/components/FileUpload/FileUpload.tsx +22 -2
  217. package/src/components/Footer/Footer.test.tsx +16 -16
  218. package/src/components/Footer/Footer.tsx +14 -11
  219. package/src/components/Form/Form.tsx +1 -0
  220. package/src/components/Header/Header.test.tsx +43 -73
  221. package/src/components/Header/Header.tsx +59 -49
  222. package/src/components/Input/Input.test.tsx +2 -2
  223. package/src/components/Input/Input.tsx +8 -4
  224. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
  225. package/src/components/LoginForm/LoginForm.tsx +4 -0
  226. package/src/components/NavigationMenu/NavigationMenu.tsx +14 -513
  227. package/src/components/NavigationMenu/types.ts +56 -0
  228. package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
  229. package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +10 -19
  230. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +2 -2
  231. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +5 -5
  232. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +13 -11
  233. package/src/components/PaceAppLayout/PaceAppLayout.tsx +167 -44
  234. package/src/components/PaceAppLayout/README.md +14 -17
  235. package/src/components/PaceAppLayout/test-setup.tsx +3 -4
  236. package/src/components/PaceLoginPage/PaceLoginPage.tsx +3 -0
  237. package/src/components/PasswordChange/PasswordChangeForm.tsx +9 -0
  238. package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
  239. package/src/components/PublicLayout/PublicPageLayout.tsx +2 -5
  240. package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
  241. package/src/components/Select/Select.tsx +80 -434
  242. package/src/components/Select/context.ts +23 -0
  243. package/src/components/Select/hooks/useSelectEvents.ts +87 -0
  244. package/src/components/Select/hooks/useSelectSearch.ts +91 -0
  245. package/src/components/Select/hooks/useSelectState.ts +104 -0
  246. package/src/components/Select/index.ts +9 -1
  247. package/src/components/Select/types.ts +123 -0
  248. package/src/components/Select/utils/text.ts +26 -0
  249. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +4 -5
  250. package/src/components/Switch/Switch.tsx +4 -4
  251. package/src/components/Tabs/Tabs.tsx +1 -1
  252. package/src/components/Toast/Toast.tsx +4 -0
  253. package/src/components/Tooltip/Tooltip.tsx +2 -2
  254. package/src/components/UserMenu/UserMenu.test.tsx +24 -11
  255. package/src/components/UserMenu/UserMenu.tsx +21 -18
  256. package/src/components/index.ts +7 -7
  257. package/src/eslint-rules/pace-core-compliance.cjs +106 -0
  258. package/src/hooks/__tests__/index.unit.test.ts +2 -5
  259. package/src/hooks/__tests__/useAppConfig.unit.test.ts +4 -98
  260. package/src/hooks/index.ts +1 -2
  261. package/src/hooks/public/usePublicEvent.ts +4 -0
  262. package/src/hooks/public/usePublicEventLogo.ts +4 -0
  263. package/src/hooks/public/usePublicFileDisplay.ts +4 -0
  264. package/src/hooks/public/usePublicRouteParams.ts +4 -0
  265. package/src/hooks/services/useAuth.ts +32 -0
  266. package/src/hooks/services/useCurrentEvent.ts +6 -0
  267. package/src/hooks/services/useCurrentOrganisation.ts +6 -0
  268. package/src/hooks/useAppConfig.ts +15 -30
  269. package/src/hooks/useDebounce.ts +9 -0
  270. package/src/hooks/useEventTheme.ts +6 -0
  271. package/src/hooks/useFileDisplay.ts +81 -50
  272. package/src/hooks/useFileReference.ts +25 -7
  273. package/src/hooks/useFileUrl.ts +11 -1
  274. package/src/hooks/useFocusManagement.ts +14 -0
  275. package/src/hooks/useFocusTrap.ts +3 -0
  276. package/src/hooks/useInactivityTracker.ts +3 -0
  277. package/src/hooks/useKeyboardShortcuts.ts +4 -0
  278. package/src/hooks/useOrganisationPermissions.ts +4 -0
  279. package/src/hooks/useOrganisationSecurity.ts +4 -0
  280. package/src/hooks/usePerformanceMonitor.ts +4 -0
  281. package/src/hooks/usePermissionCache.ts +7 -0
  282. package/src/hooks/useQueryCache.ts +12 -1
  283. package/src/hooks/useSessionRestoration.ts +4 -0
  284. package/src/hooks/useStorage.ts +4 -0
  285. package/src/hooks/useToast.ts +1 -1
  286. package/src/index.ts +6 -6
  287. package/src/providers/__tests__/OrganisationProvider.test.tsx +92 -70
  288. package/src/providers/services/AuthServiceProvider.tsx +35 -7
  289. package/src/providers/services/EventServiceProvider.tsx +51 -5
  290. package/src/providers/services/InactivityServiceProvider.tsx +18 -0
  291. package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
  292. package/src/providers/services/UnifiedAuthProvider.tsx +126 -134
  293. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +29 -13
  294. package/src/rbac/README.md +1 -1
  295. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +1 -1
  296. package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
  297. package/src/rbac/adapters.tsx +12 -3
  298. package/src/rbac/api.test.ts +59 -51
  299. package/src/rbac/api.ts +246 -167
  300. package/src/rbac/components/NavigationProvider.tsx +4 -1
  301. package/src/rbac/components/PagePermissionGuard.tsx +185 -17
  302. package/src/rbac/components/RoleBasedRouter.tsx +5 -1
  303. package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
  304. package/src/rbac/components/SecureDataProvider.tsx +20 -5
  305. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
  306. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
  307. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
  308. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
  309. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
  310. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
  311. package/src/rbac/engine.ts +38 -14
  312. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +32 -21
  313. package/src/rbac/hooks/permissions/index.ts +7 -0
  314. package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
  315. package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
  316. package/src/rbac/hooks/permissions/useCan.ts +377 -0
  317. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
  318. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
  319. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
  320. package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
  321. package/src/rbac/hooks/useCan.test.ts +64 -66
  322. package/src/rbac/hooks/usePermissions.ts +14 -995
  323. package/src/rbac/hooks/useRBAC.test.ts +1 -5
  324. package/src/rbac/hooks/useRBAC.ts +36 -37
  325. package/src/rbac/hooks/useResolvedScope.test.ts +120 -35
  326. package/src/rbac/hooks/useResolvedScope.ts +35 -40
  327. package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
  328. package/src/rbac/hooks/useResourcePermissions.ts +14 -4
  329. package/src/rbac/hooks/useSecureSupabase.ts +27 -7
  330. package/src/rbac/index.ts +7 -0
  331. package/src/rbac/permissions.ts +0 -30
  332. package/src/rbac/secureClient.test.ts +22 -18
  333. package/src/rbac/secureClient.ts +294 -68
  334. package/src/rbac/security.ts +0 -17
  335. package/src/rbac/types.ts +9 -0
  336. package/src/rbac/utils/__tests__/contextValidator.test.ts +64 -86
  337. package/src/rbac/utils/clientSecurity.ts +93 -0
  338. package/src/rbac/utils/contextValidator.ts +77 -168
  339. package/src/services/AuthService.ts +39 -7
  340. package/src/services/EventService.ts +186 -54
  341. package/src/services/OrganisationService.ts +81 -14
  342. package/src/services/__tests__/EventService.test.ts +1 -2
  343. package/src/services/base/BaseService.ts +3 -0
  344. package/src/theming/__tests__/parseEventColours.test.ts +6 -9
  345. package/src/theming/parseEventColours.ts +5 -19
  346. package/src/types/vitest-globals.d.ts +51 -26
  347. package/src/utils/__mocks__/supabaseMock.ts +1 -3
  348. package/src/utils/__tests__/formatting.unit.test.ts +4 -4
  349. package/src/utils/__tests__/index.unit.test.ts +2 -2
  350. package/src/utils/audit/audit.ts +0 -3
  351. package/src/utils/core/cn.ts +1 -1
  352. package/src/utils/dynamic/dynamicUtils.ts +7 -4
  353. package/src/utils/file-reference/index.ts +53 -1
  354. package/src/utils/formatting/formatting.ts +8 -18
  355. package/src/utils/index.ts +0 -1
  356. package/dist/chunk-3QRJFVBR.js.map +0 -1
  357. package/dist/chunk-3XTALGJF.js.map +0 -1
  358. package/dist/chunk-4N5C5XZU.js.map +0 -1
  359. package/dist/chunk-4ZC4GX36.js.map +0 -1
  360. package/dist/chunk-7D4SUZUM.js +0 -38
  361. package/dist/chunk-BYFSK72L.js.map +0 -1
  362. package/dist/chunk-EXUD6RNJ.js +0 -451
  363. package/dist/chunk-EXUD6RNJ.js.map +0 -1
  364. package/dist/chunk-GLK6VM3F.js.map +0 -1
  365. package/dist/chunk-I7PSE6JW.js.map +0 -1
  366. package/dist/chunk-JBKQ3SAO.js.map +0 -1
  367. package/dist/chunk-KNC55RTG.js.map +0 -1
  368. package/dist/chunk-LXQLPRQ2.js.map +0 -1
  369. package/dist/chunk-R77UEZ4E.js.map +0 -1
  370. package/dist/chunk-SQGMNID3.js.map +0 -1
  371. package/dist/chunk-T33XF5ZC.js +0 -12922
  372. package/dist/chunk-T33XF5ZC.js.map +0 -1
  373. package/dist/chunk-XM25TVIE.js.map +0 -1
  374. package/docs/api/classes/ColumnFactory.md +0 -243
  375. package/docs/api/classes/ErrorBoundary.md +0 -144
  376. package/docs/api/classes/InvalidScopeError.md +0 -73
  377. package/docs/api/classes/Logger.md +0 -178
  378. package/docs/api/classes/MissingUserContextError.md +0 -66
  379. package/docs/api/classes/OrganisationContextRequiredError.md +0 -66
  380. package/docs/api/classes/PermissionDeniedError.md +0 -73
  381. package/docs/api/classes/RBACAuditManager.md +0 -297
  382. package/docs/api/classes/RBACCache.md +0 -322
  383. package/docs/api/classes/RBACEngine.md +0 -171
  384. package/docs/api/classes/RBACError.md +0 -76
  385. package/docs/api/classes/RBACNotInitializedError.md +0 -66
  386. package/docs/api/classes/SecureSupabaseClient.md +0 -160
  387. package/docs/api/classes/StorageUtils.md +0 -328
  388. package/docs/api/enums/FileCategory.md +0 -184
  389. package/docs/api/enums/LogLevel.md +0 -54
  390. package/docs/api/enums/RBACErrorCode.md +0 -228
  391. package/docs/api/enums/RPCFunction.md +0 -118
  392. package/docs/api/interfaces/AddressFieldProps.md +0 -241
  393. package/docs/api/interfaces/AddressFieldRef.md +0 -94
  394. package/docs/api/interfaces/AggregateConfig.md +0 -43
  395. package/docs/api/interfaces/AutocompleteOptions.md +0 -75
  396. package/docs/api/interfaces/AvatarProps.md +0 -128
  397. package/docs/api/interfaces/BadgeProps.md +0 -27
  398. package/docs/api/interfaces/ButtonProps.md +0 -53
  399. package/docs/api/interfaces/CalendarProps.md +0 -70
  400. package/docs/api/interfaces/CardProps.md +0 -66
  401. package/docs/api/interfaces/ColorPalette.md +0 -7
  402. package/docs/api/interfaces/ColorShade.md +0 -66
  403. package/docs/api/interfaces/ComplianceResult.md +0 -30
  404. package/docs/api/interfaces/DataAccessRecord.md +0 -96
  405. package/docs/api/interfaces/DataRecord.md +0 -11
  406. package/docs/api/interfaces/DataTableAction.md +0 -249
  407. package/docs/api/interfaces/DataTableColumn.md +0 -504
  408. package/docs/api/interfaces/DataTableProps.md +0 -625
  409. package/docs/api/interfaces/DataTableToolbarButton.md +0 -96
  410. package/docs/api/interfaces/DatabaseComplianceResult.md +0 -85
  411. package/docs/api/interfaces/DatabaseIssue.md +0 -41
  412. package/docs/api/interfaces/EmptyStateConfig.md +0 -61
  413. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +0 -235
  414. package/docs/api/interfaces/EventAppRoleData.md +0 -71
  415. package/docs/api/interfaces/ExportColumn.md +0 -90
  416. package/docs/api/interfaces/ExportOptions.md +0 -126
  417. package/docs/api/interfaces/FileDisplayProps.md +0 -249
  418. package/docs/api/interfaces/FileMetadata.md +0 -129
  419. package/docs/api/interfaces/FileReference.md +0 -118
  420. package/docs/api/interfaces/FileSizeLimits.md +0 -7
  421. package/docs/api/interfaces/FileUploadOptions.md +0 -139
  422. package/docs/api/interfaces/FileUploadProps.md +0 -293
  423. package/docs/api/interfaces/FooterProps.md +0 -105
  424. package/docs/api/interfaces/FormFieldProps.md +0 -166
  425. package/docs/api/interfaces/FormProps.md +0 -113
  426. package/docs/api/interfaces/GrantEventAppRoleParams.md +0 -122
  427. package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
  428. package/docs/api/interfaces/InputProps.md +0 -53
  429. package/docs/api/interfaces/LabelProps.md +0 -107
  430. package/docs/api/interfaces/LoggerConfig.md +0 -62
  431. package/docs/api/interfaces/LoginFormProps.md +0 -184
  432. package/docs/api/interfaces/NavigationAccessRecord.md +0 -107
  433. package/docs/api/interfaces/NavigationContextType.md +0 -164
  434. package/docs/api/interfaces/NavigationGuardProps.md +0 -139
  435. package/docs/api/interfaces/NavigationItem.md +0 -120
  436. package/docs/api/interfaces/NavigationMenuProps.md +0 -221
  437. package/docs/api/interfaces/NavigationProviderProps.md +0 -117
  438. package/docs/api/interfaces/Organisation.md +0 -140
  439. package/docs/api/interfaces/OrganisationContextType.md +0 -388
  440. package/docs/api/interfaces/OrganisationMembership.md +0 -140
  441. package/docs/api/interfaces/OrganisationProviderProps.md +0 -76
  442. package/docs/api/interfaces/OrganisationSecurityError.md +0 -62
  443. package/docs/api/interfaces/PaceAppLayoutProps.md +0 -406
  444. package/docs/api/interfaces/PaceLoginPageProps.md +0 -47
  445. package/docs/api/interfaces/PageAccessRecord.md +0 -85
  446. package/docs/api/interfaces/PagePermissionContextType.md +0 -140
  447. package/docs/api/interfaces/PagePermissionGuardProps.md +0 -153
  448. package/docs/api/interfaces/PagePermissionProviderProps.md +0 -119
  449. package/docs/api/interfaces/PaletteData.md +0 -41
  450. package/docs/api/interfaces/ParsedAddress.md +0 -120
  451. package/docs/api/interfaces/PermissionEnforcerProps.md +0 -153
  452. package/docs/api/interfaces/ProgressProps.md +0 -42
  453. package/docs/api/interfaces/ProtectedRouteProps.md +0 -97
  454. package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
  455. package/docs/api/interfaces/PublicPageHeaderProps.md +0 -125
  456. package/docs/api/interfaces/PublicPageLayoutProps.md +0 -198
  457. package/docs/api/interfaces/QuickFix.md +0 -52
  458. package/docs/api/interfaces/RBACAccessValidateParams.md +0 -52
  459. package/docs/api/interfaces/RBACAccessValidateResult.md +0 -41
  460. package/docs/api/interfaces/RBACAuditLogParams.md +0 -85
  461. package/docs/api/interfaces/RBACAuditLogResult.md +0 -52
  462. package/docs/api/interfaces/RBACConfig.md +0 -133
  463. package/docs/api/interfaces/RBACContext.md +0 -52
  464. package/docs/api/interfaces/RBACLogger.md +0 -112
  465. package/docs/api/interfaces/RBACPageAccessCheckParams.md +0 -74
  466. package/docs/api/interfaces/RBACPerformanceMetrics.md +0 -138
  467. package/docs/api/interfaces/RBACPermissionCheckParams.md +0 -74
  468. package/docs/api/interfaces/RBACPermissionCheckResult.md +0 -52
  469. package/docs/api/interfaces/RBACPermissionsGetParams.md +0 -63
  470. package/docs/api/interfaces/RBACPermissionsGetResult.md +0 -63
  471. package/docs/api/interfaces/RBACResult.md +0 -58
  472. package/docs/api/interfaces/RBACRoleGrantParams.md +0 -63
  473. package/docs/api/interfaces/RBACRoleGrantResult.md +0 -52
  474. package/docs/api/interfaces/RBACRoleRevokeParams.md +0 -63
  475. package/docs/api/interfaces/RBACRoleRevokeResult.md +0 -52
  476. package/docs/api/interfaces/RBACRoleValidateParams.md +0 -52
  477. package/docs/api/interfaces/RBACRoleValidateResult.md +0 -63
  478. package/docs/api/interfaces/RBACRolesListParams.md +0 -52
  479. package/docs/api/interfaces/RBACRolesListResult.md +0 -74
  480. package/docs/api/interfaces/RBACSessionTrackParams.md +0 -74
  481. package/docs/api/interfaces/RBACSessionTrackResult.md +0 -52
  482. package/docs/api/interfaces/ResourcePermissions.md +0 -155
  483. package/docs/api/interfaces/RevokeEventAppRoleParams.md +0 -100
  484. package/docs/api/interfaces/RoleBasedRouterContextType.md +0 -151
  485. package/docs/api/interfaces/RoleBasedRouterProps.md +0 -156
  486. package/docs/api/interfaces/RoleManagementResult.md +0 -52
  487. package/docs/api/interfaces/RouteAccessRecord.md +0 -107
  488. package/docs/api/interfaces/RouteConfig.md +0 -134
  489. package/docs/api/interfaces/RuntimeComplianceResult.md +0 -55
  490. package/docs/api/interfaces/SecureDataContextType.md +0 -168
  491. package/docs/api/interfaces/SecureDataProviderProps.md +0 -132
  492. package/docs/api/interfaces/SessionRestorationLoaderProps.md +0 -34
  493. package/docs/api/interfaces/SetupIssue.md +0 -41
  494. package/docs/api/interfaces/StorageConfig.md +0 -41
  495. package/docs/api/interfaces/StorageFileInfo.md +0 -74
  496. package/docs/api/interfaces/StorageFileMetadata.md +0 -151
  497. package/docs/api/interfaces/StorageListOptions.md +0 -99
  498. package/docs/api/interfaces/StorageListResult.md +0 -41
  499. package/docs/api/interfaces/StorageUploadOptions.md +0 -101
  500. package/docs/api/interfaces/StorageUploadResult.md +0 -63
  501. package/docs/api/interfaces/StorageUrlOptions.md +0 -60
  502. package/docs/api/interfaces/StyleImport.md +0 -19
  503. package/docs/api/interfaces/SwitchProps.md +0 -34
  504. package/docs/api/interfaces/TabsContentProps.md +0 -9
  505. package/docs/api/interfaces/TabsListProps.md +0 -9
  506. package/docs/api/interfaces/TabsProps.md +0 -9
  507. package/docs/api/interfaces/TabsTriggerProps.md +0 -50
  508. package/docs/api/interfaces/TextareaProps.md +0 -53
  509. package/docs/api/interfaces/ToastActionElement.md +0 -9
  510. package/docs/api/interfaces/ToastProps.md +0 -9
  511. package/docs/api/interfaces/UnifiedAuthContextType.md +0 -820
  512. package/docs/api/interfaces/UnifiedAuthProviderProps.md +0 -171
  513. package/docs/api/interfaces/UseFormDialogOptions.md +0 -62
  514. package/docs/api/interfaces/UseFormDialogReturn.md +0 -117
  515. package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -136
  516. package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
  517. package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
  518. package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -81
  519. package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
  520. package/docs/api/interfaces/UsePublicEventReturn.md +0 -68
  521. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +0 -47
  522. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +0 -120
  523. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -94
  524. package/docs/api/interfaces/UseResolvedScopeOptions.md +0 -47
  525. package/docs/api/interfaces/UseResolvedScopeReturn.md +0 -47
  526. package/docs/api/interfaces/UseResourcePermissionsOptions.md +0 -34
  527. package/docs/api/interfaces/UserEventAccess.md +0 -118
  528. package/docs/api/interfaces/UserMenuProps.md +0 -86
  529. package/docs/api/interfaces/UserProfile.md +0 -63
  530. package/docs/migration/quick-migration-guide.md +0 -356
  531. package/docs/migration/service-architecture.md +0 -281
  532. package/src/components/EventSelector/EventSelector.test.tsx +0 -720
  533. package/src/components/EventSelector/EventSelector.tsx +0 -420
  534. package/src/components/EventSelector/index.ts +0 -3
  535. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +0 -784
  536. package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -324
  537. package/src/components/OrganisationSelector/index.ts +0 -9
  538. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
  539. package/src/hooks/useSecureDataAccess.test.ts +0 -559
  540. package/src/hooks/useSecureDataAccess.ts +0 -681
  541. /package/dist/{DataTable-DQ7RSOHE.js.map → DataTable-THFPBKTP.js.map} +0 -0
  542. /package/dist/{UnifiedAuthProvider-ATAP5UTR.js.map → UnifiedAuthProvider-KAGUYQ4J.js.map} +0 -0
  543. /package/dist/{api-N774RPUA.js.map → api-IAGWF3ZG.js.map} +0 -0
  544. /package/dist/{audit-B5P6FFIR.js.map → audit-V53FV5AG.js.map} +0 -0
  545. /package/dist/{chunk-7D4SUZUM.js.map → chunk-DGUM43GV.js.map} +0 -0
  546. /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
  547. /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
  548. /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
  549. /package/docs/migration/{REACT_19_MIGRATION.md → V0.6.0_REACT_19_MIGRATION.md} +0 -0
@@ -1,7 +1,7 @@
1
1
  import * as React$1 from 'react';
2
- import React__default, { Component, ReactNode } from 'react';
2
+ import React__default, { ReactNode, Component } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import { P as ParsedAddress, A as AutocompleteOptions } from './types-CEpcvwwF.js';
4
+ import { P as ParsedAddress, A as AutocompleteOptions } from './types-CkbwOr4Y.js';
5
5
  import * as LabelPrimitive from '@radix-ui/react-label';
6
6
  import { F as FileCategory, e as FileUploadResult, U as UploadProgress, c as FileUploadOptions, a as FileReference } from './file-reference-BavO2eQj.js';
7
7
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
@@ -14,9 +14,19 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
14
14
  import { FieldValues, DefaultValues, SubmitHandler, SubmitErrorHandler, UseFormReturn, FieldPath, ControllerRenderProps, ControllerFieldState, UseFormStateReturn } from 'react-hook-form';
15
15
  import { z } from 'zod';
16
16
  import { User, SupabaseClient, createClient } from '@supabase/supabase-js';
17
- import { P as Permission, A as AccessLevel } from './types-UU913iLA.js';
18
- import { E as Event, O as Organisation } from './event-CW5YB_2p.js';
17
+ import { P as Permission, A as AccessLevel } from './types-BeoeWV5I.js';
18
+ import { O as Organisation, E as Event } from './event-CW5YB_2p.js';
19
19
 
20
+ /**
21
+ * Button component props
22
+ * Extends standard HTML button attributes with button-specific styling and behavior options.
23
+ *
24
+ * @interface ButtonProps
25
+ */
26
+ /**
27
+ * Props for the Button component.
28
+ * Extends standard button HTML attributes.
29
+ */
20
30
  interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
21
31
  /** Visual variant of the button */
22
32
  variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
@@ -109,6 +119,10 @@ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.Re
109
119
  * - Screen reader friendly with semantic landmarks
110
120
  */
111
121
 
122
+ /**
123
+ * Props for the Card component.
124
+ * Extends standard HTML attributes for semantic HTML elements.
125
+ */
112
126
  interface CardProps extends React$1.HTMLAttributes<HTMLElement> {
113
127
  /** Visual variant of the card */
114
128
  variant?: 'default' | 'outline' | 'ghost';
@@ -128,6 +142,10 @@ declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttribut
128
142
  declare const CardActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
129
143
  type CardActionsProps = React$1.HTMLAttributes<HTMLElement>;
130
144
 
145
+ /**
146
+ * Props for the Input component.
147
+ * Extends standard input HTML attributes.
148
+ */
131
149
  interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'> {
132
150
  /**
133
151
  * Input variant style
@@ -464,22 +482,20 @@ declare namespace Textarea {
464
482
  *
465
483
  * @example
466
484
  * ```tsx
467
- * // Basic alert
485
+ * // Basic alert (renders as <aside> with <h5> title and <p> description)
468
486
  * <Alert>
469
487
  * <AlertTitle>Success</AlertTitle>
470
488
  * <AlertDescription>Your changes have been saved.</AlertDescription>
471
489
  * </Alert>
472
490
  *
473
- * // Destructive alert with icon
491
+ * // Destructive alert with icon (renders as <aside> with <h5> title and <p> description)
474
492
  * <Alert variant="destructive">
475
493
  * <ErrorIcon />
476
- * <div>
477
- * <AlertTitle>Error</AlertTitle>
478
- * <AlertDescription>Something went wrong.</AlertDescription>
479
- * </div>
494
+ * <AlertTitle>Error</AlertTitle>
495
+ * <AlertDescription>Something went wrong.</AlertDescription>
480
496
  * </Alert>
481
497
  *
482
- * // Inline alert (renders as fragment with strong/span)
498
+ * // Inline alert (renders as React.Fragment with <strong> title and <span> description)
483
499
  * <Alert variant="inline">
484
500
  * <AlertTitle>Note:</AlertTitle>
485
501
  * <AlertDescription>This is an inline message.</AlertDescription>
@@ -570,7 +586,21 @@ interface AvatarProps extends React$1.HTMLAttributes<HTMLDivElement> {
570
586
  */
571
587
  declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & React$1.RefAttributes<HTMLDivElement>>;
572
588
 
589
+ /**
590
+ * Badge variant type
591
+ * Defines the visual style, color palette, and shade intensity of the badge.
592
+ * Format: {style}-{color}-{shade}
593
+ * - style: 'solid' | 'outline' | 'soft'
594
+ * - color: 'main' | 'sec' | 'acc'
595
+ * - shade: 'muted' | 'normal' | 'strong'
596
+ */
573
597
  type BadgeVariant = 'solid-main-muted' | 'solid-main-normal' | 'solid-main-strong' | 'solid-sec-muted' | 'solid-sec-normal' | 'solid-sec-strong' | 'solid-acc-muted' | 'solid-acc-normal' | 'solid-acc-strong' | 'outline-main-muted' | 'outline-main-normal' | 'outline-main-strong' | 'outline-sec-muted' | 'outline-sec-normal' | 'outline-sec-strong' | 'outline-acc-muted' | 'outline-acc-normal' | 'outline-acc-strong' | 'soft-main-muted' | 'soft-main-normal' | 'soft-main-strong' | 'soft-sec-muted' | 'soft-sec-normal' | 'soft-sec-strong' | 'soft-acc-muted' | 'soft-acc-normal' | 'soft-acc-strong';
598
+ /**
599
+ * Badge component props
600
+ * Extends standard HTML span attributes with badge-specific styling options.
601
+ *
602
+ * @interface BadgeProps
603
+ */
574
604
  interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
575
605
  /** Visual variant of the badge (style-color-shade) */
576
606
  variant?: BadgeVariant;
@@ -625,10 +655,10 @@ declare namespace Badge {
625
655
  * <Checkbox />
626
656
  *
627
657
  * // With label
628
- * <div className="flex items-center space-x-2">
658
+ * <>
629
659
  * <Checkbox id="terms" />
630
660
  * <label htmlFor="terms">Accept terms and conditions</label>
631
- * </div>
661
+ * </>
632
662
  *
633
663
  * // Disabled state
634
664
  * <Checkbox disabled />
@@ -677,7 +707,7 @@ declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive
677
707
  * const [checked, setChecked] = React.useState(false);
678
708
  *
679
709
  * return (
680
- * <div className="flex items-center gap-2">
710
+ * <>
681
711
  * <Switch
682
712
  * checked={checked}
683
713
  * onCheckedChange={setChecked}
@@ -686,7 +716,7 @@ declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive
686
716
  * <label htmlFor="notifications">
687
717
  * Enable notifications
688
718
  * </label>
689
- * </div>
719
+ * </>
690
720
  * );
691
721
  * }
692
722
  * ```
@@ -697,12 +727,12 @@ declare const Checkbox: React$1.ForwardRefExoticComponent<Omit<CheckboxPrimitive
697
727
  *
698
728
  * function FormExample() {
699
729
  * return (
700
- * <div className="flex items-center gap-2">
730
+ * <>
701
731
  * <Switch id="terms" />
702
732
  * <Label htmlFor="terms">
703
733
  * I agree to the terms and conditions
704
734
  * </Label>
705
- * </div>
735
+ * </>
706
736
  * );
707
737
  * }
708
738
  * ```
@@ -1038,19 +1068,13 @@ declare const DialogTitle: React$1.ForwardRefExoticComponent<DialogTitleProps &
1038
1068
  declare const DialogDescription: React$1.ForwardRefExoticComponent<DialogDescriptionProps & React$1.RefAttributes<HTMLHeadingElement>>;
1039
1069
 
1040
1070
  /**
1041
- * @file Select Component - Refactored SOLID Implementation
1042
- * @package @jmruthers/pace-core
1043
- * @module Components/Select
1044
- * @since 0.4.0
1045
- *
1046
- * Refactored Select component following SOLID principles:
1047
- * - Single Responsibility: Each component has one clear purpose
1048
- * - Open/Closed: Easy to extend without modification
1049
- * - Liskov Substitution: Components can be substituted
1050
- * - Interface Segregation: Small, focused interfaces
1051
- * - Dependency Inversion: Depends on abstractions, not concretions
1071
+ * Direction for Select dropdown opening.
1072
+ * Controls whether the dropdown opens upward or downward.
1073
+ */
1074
+ type SelectDirection = "up" | "down";
1075
+ /**
1076
+ * Props for the useSelectState hook.
1052
1077
  */
1053
-
1054
1078
  interface UseSelectStateProps {
1055
1079
  value?: string;
1056
1080
  defaultValue?: string;
@@ -1061,19 +1085,31 @@ interface UseSelectStateProps {
1061
1085
  onValueChange?: (value: string) => void;
1062
1086
  onOpenChange?: (open: boolean) => void;
1063
1087
  }
1064
- interface SelectProps extends Omit<React$1.HTMLAttributes<HTMLFormElement>, 'onChange' | 'onKeyDown' | 'onFocus' | 'onBlur'> {
1088
+ /**
1089
+ * Props for the Select root component.
1090
+ */
1091
+ interface SelectProps extends Omit<React$1.HTMLAttributes<HTMLFormElement>, "onChange" | "onKeyDown" | "onFocus" | "onBlur"> {
1065
1092
  children: React$1.ReactNode;
1066
1093
  className?: string;
1067
- direction?: 'up' | 'down';
1094
+ direction?: SelectDirection;
1068
1095
  }
1069
- interface SelectTriggerProps extends Omit<ButtonProps, 'onClick' | 'onKeyDown'> {
1096
+ /**
1097
+ * Props for the SelectTrigger component.
1098
+ */
1099
+ interface SelectTriggerProps extends Omit<ButtonProps, "onClick" | "onKeyDown"> {
1070
1100
  children: React$1.ReactNode;
1071
1101
  asChild?: boolean;
1072
1102
  }
1103
+ /**
1104
+ * Props for the SelectValue component.
1105
+ */
1073
1106
  interface SelectValueProps {
1074
1107
  placeholder?: string;
1075
1108
  children?: React$1.ReactNode;
1076
1109
  }
1110
+ /**
1111
+ * Props for the SelectContent component.
1112
+ */
1077
1113
  interface SelectContentProps {
1078
1114
  children: React$1.ReactNode;
1079
1115
  className?: string;
@@ -1082,6 +1118,9 @@ interface SelectContentProps {
1082
1118
  maxHeight?: string;
1083
1119
  style?: React$1.CSSProperties;
1084
1120
  }
1121
+ /**
1122
+ * Props for the SelectItem component.
1123
+ */
1085
1124
  interface SelectItemProps {
1086
1125
  value: string;
1087
1126
  children: React$1.ReactNode;
@@ -1089,19 +1128,98 @@ interface SelectItemProps {
1089
1128
  className?: string;
1090
1129
  onClick?: (e: React$1.MouseEvent) => void;
1091
1130
  }
1131
+
1132
+ /**
1133
+ * @file Select Component - Refactored SOLID Implementation
1134
+ * @package @jmruthers/pace-core
1135
+ * @module Components/Select
1136
+ * @since 0.4.0
1137
+ *
1138
+ * Refactored Select component following SOLID principles:
1139
+ * - Single Responsibility: Each component has one clear purpose
1140
+ * - Open/Closed: Easy to extend without modification
1141
+ * - Liskov Substitution: Components can be substituted
1142
+ * - Interface Segregation: Small, focused interfaces
1143
+ * - Dependency Inversion: Depends on abstractions, not concretions
1144
+ */
1145
+
1146
+ /**
1147
+ * Select component root.
1148
+ * Provides select dropdown functionality with search, keyboard navigation, and accessibility.
1149
+ *
1150
+ * @param props - Select configuration
1151
+ * @param ref - Forwarded ref to the form element
1152
+ * @returns The rendered select component
1153
+ */
1092
1154
  declare const Select: React$1.ForwardRefExoticComponent<SelectProps & UseSelectStateProps & React$1.RefAttributes<HTMLFormElement>>;
1155
+ /**
1156
+ * Select trigger button component.
1157
+ * Opens/closes the select dropdown and displays the selected value.
1158
+ *
1159
+ * @param props - Select trigger configuration
1160
+ * @param ref - Forwarded ref to the button element
1161
+ * @returns The rendered select trigger
1162
+ */
1093
1163
  declare const SelectTrigger: React$1.ForwardRefExoticComponent<SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
1164
+ /**
1165
+ * Select value display component.
1166
+ * Shows the selected value or placeholder text.
1167
+ *
1168
+ * @param props - Select value configuration
1169
+ * @param ref - Forwarded ref to the span element
1170
+ * @returns The rendered select value display
1171
+ */
1094
1172
  declare const SelectValue: React$1.ForwardRefExoticComponent<SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
1173
+ /**
1174
+ * Select content/dropdown component.
1175
+ * Contains the list of selectable options.
1176
+ *
1177
+ * @param props - Select content configuration
1178
+ * @param ref - Forwarded ref to the list element
1179
+ * @returns The rendered select content
1180
+ */
1095
1181
  declare const SelectContent: React$1.ForwardRefExoticComponent<SelectContentProps & React$1.RefAttributes<HTMLUListElement>>;
1182
+ /**
1183
+ * Select item component.
1184
+ * Represents a single selectable option in the dropdown.
1185
+ *
1186
+ * @param props - Select item configuration
1187
+ * @param ref - Forwarded ref to the list item element
1188
+ * @returns The rendered select item
1189
+ */
1096
1190
  declare const SelectItem: React$1.ForwardRefExoticComponent<SelectItemProps & React$1.RefAttributes<HTMLLIElement>>;
1191
+ /**
1192
+ * Select group component.
1193
+ * Groups related select items together.
1194
+ *
1195
+ * @param props - Select group configuration
1196
+ * @param ref - Forwarded ref to the div element
1197
+ * @returns The rendered select group
1198
+ */
1097
1199
  declare const SelectGroup: React$1.ForwardRefExoticComponent<{
1098
1200
  children: React$1.ReactNode;
1099
1201
  className?: string;
1100
1202
  } & React$1.RefAttributes<HTMLDivElement>>;
1203
+ /**
1204
+ * Select label component.
1205
+ * Provides a label for a group of select items.
1206
+ *
1207
+ * @param props - Select label configuration
1208
+ * @param ref - Forwarded ref to the div element
1209
+ * @returns The rendered select label
1210
+ */
1101
1211
  declare const SelectLabel: React$1.ForwardRefExoticComponent<{
1102
1212
  children: React$1.ReactNode;
1103
1213
  className?: string;
1104
1214
  } & React$1.RefAttributes<HTMLDivElement>>;
1215
+ /**
1216
+ * Select separator component.
1217
+ * Provides visual separation between groups of select items.
1218
+ *
1219
+ * @param props - Select separator configuration
1220
+ * @param ref - Forwarded ref to the div element
1221
+ * @returns The rendered select separator
1222
+ */
1105
1223
  declare const SelectSeparator: React$1.ForwardRefExoticComponent<{
1106
1224
  className?: string;
1107
1225
  } & React$1.RefAttributes<HTMLDivElement>>;
@@ -1229,7 +1347,7 @@ interface TabsContentProps extends React$1.ComponentPropsWithoutRef<typeof TabsP
1229
1347
  * @example
1230
1348
  * ```tsx
1231
1349
  * <TabsContent value="tab1">
1232
- * <div>Content for tab 1</div>
1350
+ * <section>Content for tab 1</section>
1233
1351
  * </TabsContent>
1234
1352
  * ```
1235
1353
  */
@@ -1292,6 +1410,10 @@ declare const TabsContent: React$1.ForwardRefExoticComponent<TabsContentProps &
1292
1410
  * - Date announcements
1293
1411
  */
1294
1412
 
1413
+ /**
1414
+ * Props for the Calendar component.
1415
+ * Extends DayPickerProps with pace-core specific customizations.
1416
+ */
1295
1417
  interface CalendarProps extends Omit<DayPickerProps, 'className' | 'classNames' | 'styles' | 'onSelect'> {
1296
1418
  /**
1297
1419
  * Additional CSS classes to apply to the calendar table
@@ -1460,6 +1582,10 @@ declare const ToastTitle: React$1.ForwardRefExoticComponent<Omit<ToastPrimitives
1460
1582
  declare const ToastDescription: React$1.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastDescriptionProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1461
1583
  interface ToastProps extends React$1.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> {
1462
1584
  }
1585
+ /**
1586
+ * Type for toast action elements.
1587
+ * Represents a React element that can be used as a toast action button.
1588
+ */
1463
1589
  interface ToastActionElement extends React$1.ReactElement<typeof ToastAction> {
1464
1590
  }
1465
1591
  /**
@@ -1521,10 +1647,10 @@ declare function Toaster(): react_jsx_runtime.JSX.Element;
1521
1647
  * <Button>Advanced Tooltip</Button>
1522
1648
  * </TooltipTrigger>
1523
1649
  * <TooltipContent side="top" className="bg-main-500 text-main-50">
1524
- * <div className="space-y-1">
1650
+ * <section className="space-y-1">
1525
1651
  * <p className="font-semibold">Advanced Tooltip</p>
1526
1652
  * <p className="text-xs">With custom styling</p>
1527
- * </div>
1653
+ * </section>
1528
1654
  * </TooltipContent>
1529
1655
  * </TooltipRoot>
1530
1656
  * </TooltipProvider>
@@ -1887,6 +2013,10 @@ declare function FormField<TFieldValues extends FieldValues = FieldValues, TName
1887
2013
  * - Tailwind CSS - Styling
1888
2014
  */
1889
2015
 
2016
+ /**
2017
+ * Props for the LoginForm component.
2018
+ * Configures login form behavior, validation, and callbacks.
2019
+ */
1890
2020
  interface LoginFormProps {
1891
2021
  /** Callback invoked when the form is submitted */
1892
2022
  onSignIn: (data: {
@@ -1932,6 +2062,57 @@ interface LoginFormProps {
1932
2062
  */
1933
2063
  declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
1934
2064
 
2065
+ /**
2066
+ * Navigation mode type
2067
+ */
2068
+ type NavigationMode = "dropdown" | "hierarchical";
2069
+ /**
2070
+ * Navigation item metadata
2071
+ */
2072
+ interface NavigationItemMeta {
2073
+ hidden?: boolean;
2074
+ [key: string]: unknown;
2075
+ }
2076
+ /**
2077
+ * Navigation item interface
2078
+ */
2079
+ interface NavigationItem {
2080
+ id: string;
2081
+ label: string;
2082
+ href?: string;
2083
+ icon?: string;
2084
+ children?: NavigationItem[];
2085
+ permissions?: (Permission | string)[];
2086
+ roles?: string[];
2087
+ accessLevel?: AccessLevel | string;
2088
+ meta?: NavigationItemMeta;
2089
+ pageId?: string;
2090
+ }
2091
+ /**
2092
+ * Navigation menu component props
2093
+ */
2094
+ interface NavigationMenuProps extends React$1.HTMLAttributes<HTMLDivElement> {
2095
+ items: NavigationItem[];
2096
+ mode?: NavigationMode;
2097
+ currentPath?: string;
2098
+ onNavigate?: (item: NavigationItem) => void;
2099
+ className?: string;
2100
+ disabled?: boolean;
2101
+ buttonText?: string;
2102
+ showIcons?: boolean;
2103
+ navigationLabel?: string;
2104
+ strictMode?: boolean;
2105
+ auditLog?: boolean;
2106
+ onNavigationAccessDenied?: (item: NavigationItem) => void;
2107
+ onStrictModeViolation?: (item: NavigationItem, reason: string) => void;
2108
+ /**
2109
+ * If true, indicates that items have already been filtered by the parent component (e.g., PaceAppLayout).
2110
+ * When true, NavigationMenu will skip expensive permission checks and trust the provided items.
2111
+ * This significantly improves performance when items are pre-filtered.
2112
+ */
2113
+ itemsPreFiltered?: boolean;
2114
+ }
2115
+
1935
2116
  /**
1936
2117
  * @file Unified Navigation Menu Component
1937
2118
  * @package @jmruthers/pace-core
@@ -2125,56 +2306,6 @@ declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
2125
2306
  * - Tailwind CSS - Styling system
2126
2307
  */
2127
2308
 
2128
- /**
2129
- * Navigation mode type
2130
- */
2131
- type NavigationMode = 'dropdown' | 'hierarchical';
2132
- /**
2133
- * Navigation item metadata
2134
- */
2135
- interface NavigationItemMeta {
2136
- hidden?: boolean;
2137
- [key: string]: unknown;
2138
- }
2139
- /**
2140
- * Navigation item interface
2141
- */
2142
- interface NavigationItem {
2143
- id: string;
2144
- label: string;
2145
- href?: string;
2146
- icon?: string;
2147
- children?: NavigationItem[];
2148
- permissions?: (Permission | string)[];
2149
- roles?: string[];
2150
- accessLevel?: AccessLevel | string;
2151
- meta?: NavigationItemMeta;
2152
- pageId?: string;
2153
- }
2154
- /**
2155
- * Navigation menu component props
2156
- */
2157
- interface NavigationMenuProps extends React$1.HTMLAttributes<HTMLDivElement> {
2158
- items: NavigationItem[];
2159
- mode?: NavigationMode;
2160
- currentPath?: string;
2161
- onNavigate?: (item: NavigationItem) => void;
2162
- className?: string;
2163
- disabled?: boolean;
2164
- buttonText?: string;
2165
- showIcons?: boolean;
2166
- navigationLabel?: string;
2167
- strictMode?: boolean;
2168
- auditLog?: boolean;
2169
- onNavigationAccessDenied?: (item: NavigationItem) => void;
2170
- onStrictModeViolation?: (item: NavigationItem, reason: string) => void;
2171
- /**
2172
- * If true, indicates that items have already been filtered by the parent component (e.g., PaceAppLayout).
2173
- * When true, NavigationMenu will skip expensive permission checks and trust the provided items.
2174
- * This significantly improves performance when items are pre-filtered.
2175
- */
2176
- itemsPreFiltered?: boolean;
2177
- }
2178
2309
  /**
2179
2310
  * Unified NavigationMenu component that supports both dropdown and hierarchical navigation modes.
2180
2311
  *
@@ -2466,14 +2597,23 @@ declare const NavigationMenu: React$1.ForwardRefExoticComponent<NavigationMenuPr
2466
2597
  * - Label component
2467
2598
  * - Tailwind CSS - Styling
2468
2599
  */
2600
+ /**
2601
+ * Form values for password change.
2602
+ */
2469
2603
  interface PasswordChangeFormValues {
2470
2604
  newPassword: string;
2471
2605
  confirmPassword: string;
2472
2606
  }
2607
+ /**
2608
+ * Error structure for password change form.
2609
+ */
2473
2610
  interface PasswordChangeFormError {
2474
2611
  message?: string;
2475
2612
  code?: string;
2476
2613
  }
2614
+ /**
2615
+ * Props for the PasswordChangeForm component.
2616
+ */
2477
2617
  interface PasswordChangeFormProps {
2478
2618
  onSubmit: (values: PasswordChangeFormValues) => Promise<{
2479
2619
  error?: PasswordChangeFormError;
@@ -2508,10 +2648,12 @@ interface HeaderProps {
2508
2648
  userMenu?: React__default.ReactNode;
2509
2649
  /** Custom className */
2510
2650
  className?: string;
2511
- /** Show/hide event selector */
2512
- showEventSelector?: boolean;
2513
- /** Show/hide organisation selector */
2514
- showOrgSelector?: boolean;
2651
+ /** Show/hide context selector (unified org/event selector) - default: true */
2652
+ showContextSelector?: boolean;
2653
+ /** Show organisations in context selector - default: true */
2654
+ showOrganisations?: boolean;
2655
+ /** Show events in context selector - default: true */
2656
+ showEvents?: boolean;
2515
2657
  /** Show/hide user menu */
2516
2658
  showUserMenu?: boolean;
2517
2659
  /** Current path for navigation highlighting */
@@ -2583,10 +2725,10 @@ interface HeaderProps {
2583
2725
  *
2584
2726
  * function HeaderWithActions() {
2585
2727
  * const customActions = (
2586
- * <div className="flex items-center gap-2">
2728
+ * <>
2587
2729
  * <Button variant="outline" size="sm">Export</Button>
2588
2730
  * <Button size="sm">New Item</Button>
2589
- * </div>
2731
+ * </>
2590
2732
  * );
2591
2733
  *
2592
2734
  * return (
@@ -2609,7 +2751,7 @@ interface HeaderProps {
2609
2751
  * <Header
2610
2752
  * logoUrl="/simple-logo.svg"
2611
2753
  * logoAlt="Simple App"
2612
- * showEventSelector={false}
2754
+ * showContextSelector={false}
2613
2755
  * user={currentUser}
2614
2756
  * onSignOut={handleSignOut}
2615
2757
  * />
@@ -2622,7 +2764,14 @@ interface HeaderProps {
2622
2764
  *
2623
2765
  * @since 0.1.0
2624
2766
  */
2625
- declare function Header({ logoUrl, logoAlt, logo, navItems, user, onSignOut, onChangePassword, actions, userMenu, className, showEventSelector, showOrgSelector, showUserMenu, currentPath, onNavigate, logoHref }: HeaderProps): react_jsx_runtime.JSX.Element;
2767
+ /**
2768
+ * Header component for application layouts.
2769
+ * Provides navigation, user menu, organisation/event selectors, and customizable branding.
2770
+ *
2771
+ * @param props - Header configuration
2772
+ * @returns The rendered header
2773
+ */
2774
+ declare function Header({ logoUrl, logoAlt, logo, navItems, user, onSignOut, onChangePassword, actions, userMenu, className, showContextSelector, showOrganisations, showEvents, showUserMenu, currentPath, onNavigate, logoHref }: HeaderProps): react_jsx_runtime.JSX.Element;
2626
2775
 
2627
2776
  /**
2628
2777
  * @file Footer Component
@@ -2673,28 +2822,28 @@ declare function Header({ logoUrl, logoAlt, logo, navItems, user, onSignOut, onC
2673
2822
  *
2674
2823
  * // Footer with custom content
2675
2824
  * <Footer companyName="My Company">
2676
- * <div className="grid grid-cols-1 md:grid-cols-3 gap-8 mb-8">
2677
- * <div>
2825
+ * <section className="grid grid-cols-1 md:grid-cols-3 gap-8 mb-8">
2826
+ * <section>
2678
2827
  * <h3 className="font-semibold mb-2">About Us</h3>
2679
2828
  * <p className="text-sm text-muted-foreground">
2680
2829
  * We provide innovative solutions for modern businesses.
2681
2830
  * </p>
2682
- * </div>
2683
- * <div>
2831
+ * </section>
2832
+ * <section>
2684
2833
  * <h3 className="font-semibold mb-2">Contact</h3>
2685
2834
  * <p className="text-sm text-muted-foreground">
2686
2835
  * Email: info@mycompany.com<br />
2687
2836
  * Phone: (555) 123-4567
2688
2837
  * </p>
2689
- * </div>
2690
- * <div>
2838
+ * </section>
2839
+ * <section>
2691
2840
  * <h3 className="font-semibold mb-2">Follow Us</h3>
2692
- * <div className="flex gap-2">
2841
+ * <nav className="flex gap-2">
2693
2842
  * <a href="#" className="text-muted-foreground hover:text-foreground">Twitter</a>
2694
2843
  * <a href="#" className="text-muted-foreground hover:text-foreground">LinkedIn</a>
2695
- * </div>
2696
- * </div>
2697
- * </div>
2844
+ * </nav>
2845
+ * </section>
2846
+ * </section>
2698
2847
  * </Footer>
2699
2848
  * ```
2700
2849
  *
@@ -2711,6 +2860,9 @@ declare function Header({ logoUrl, logoAlt, logo, navItems, user, onSignOut, onC
2711
2860
  * - Tailwind CSS - Styling
2712
2861
  */
2713
2862
 
2863
+ /**
2864
+ * Props for the Footer component.
2865
+ */
2714
2866
  interface FooterProps {
2715
2867
  /**
2716
2868
  * Company or organization name
@@ -2809,7 +2961,7 @@ declare const Footer: React__default.NamedExoticComponent<FooterProps>;
2809
2961
  *
2810
2962
  * // User menu in header
2811
2963
  * <Header>
2812
- * <div className="flex items-center gap-4">
2964
+ * <nav className="flex items-center gap-4">
2813
2965
  * <Navigation />
2814
2966
  * <UserMenu
2815
2967
  * user={user}
@@ -2817,7 +2969,7 @@ declare const Footer: React__default.NamedExoticComponent<FooterProps>;
2817
2969
  * onChangePassword={handlePasswordChange}
2818
2970
  * className="ml-auto"
2819
2971
  * />
2820
- * </div>
2972
+ * </nav>
2821
2973
  * </Header>
2822
2974
  * ```
2823
2975
  *
@@ -2850,6 +3002,9 @@ declare const Footer: React__default.NamedExoticComponent<FooterProps>;
2850
3002
  * - Tailwind CSS - Styling
2851
3003
  */
2852
3004
 
3005
+ /**
3006
+ * Props for the UserMenu component.
3007
+ */
2853
3008
  interface UserMenuProps {
2854
3009
  user: User | null;
2855
3010
  onSignOut?: () => Promise<void>;
@@ -2862,15 +3017,21 @@ interface UserMenuProps {
2862
3017
  declare const UserMenu: React__default.NamedExoticComponent<UserMenuProps>;
2863
3018
 
2864
3019
  type Operation = 'read' | 'create' | 'update' | 'delete' | 'manage';
3020
+ /**
3021
+ * Props for the PaceAppLayout component.
3022
+ * Configures the application layout including navigation, header, and footer.
3023
+ */
2865
3024
  interface PaceAppLayoutProps {
2866
3025
  /** The name of the application to be displayed in the header. */
2867
3026
  appName: string;
2868
3027
  /** Optional navigation items for the header menu. If not provided, uses default navigation. */
2869
3028
  navItems?: NavigationItem[];
2870
- /** Show/hide event selector in the header */
2871
- showEventSelector?: boolean;
2872
- /** Show/hide organisation selector in the header */
2873
- showOrgSelector?: boolean;
3029
+ /** Show/hide unified context selector (shows all accessible orgs and events) - default: true */
3030
+ showContextSelector?: boolean;
3031
+ /** Show organisations in context selector - default: true */
3032
+ showOrganisations?: boolean;
3033
+ /** Show events in context selector - default: true */
3034
+ showEvents?: boolean;
2874
3035
  /** Custom actions to display in the header (between event selector and user menu) */
2875
3036
  headerActions?: React__default.ReactNode;
2876
3037
  /** Custom logo component (overrides default logo) */
@@ -3078,7 +3239,7 @@ interface PaceAppLayoutProps {
3078
3239
  *
3079
3240
  * @since 0.1.0
3080
3241
  */
3081
- declare function PaceAppLayout({ appName, navItems, showEventSelector, showOrgSelector, headerActions, customLogo, logoHref, customUserMenu, headerClassName, showUserMenu, enforcePermissions, defaultPermission, routePermissions, permissionFallback, pageIdMapping, strictMode, enforcePagePermissions, pagePermissionFallback, auditLog, onPageAccessDenied, onStrictModeViolation, roleBasedRouting, routeConfig, fallbackRoute, onRouteAccessDenied, onRouteStrictModeViolation }: PaceAppLayoutProps): react_jsx_runtime.JSX.Element;
3242
+ declare function PaceAppLayout({ appName, navItems, showContextSelector, showOrganisations, showEvents, headerActions, customLogo, logoHref, customUserMenu, headerClassName, showUserMenu, enforcePermissions, defaultPermission, routePermissions, permissionFallback, pageIdMapping, strictMode, enforcePagePermissions, pagePermissionFallback, auditLog, onPageAccessDenied, onStrictModeViolation, roleBasedRouting, routeConfig, fallbackRoute, onRouteAccessDenied, onRouteStrictModeViolation }: PaceAppLayoutProps): react_jsx_runtime.JSX.Element;
3082
3243
 
3083
3244
  /**
3084
3245
  * @file PACE Login Page Component
@@ -3203,6 +3364,9 @@ declare function PaceAppLayout({ appName, navItems, showEventSelector, showOrgSe
3203
3364
  * - Tailwind CSS - Styling
3204
3365
  */
3205
3366
 
3367
+ /**
3368
+ * Props for the PaceLoginPage component.
3369
+ */
3206
3370
  interface PaceLoginPageProps {
3207
3371
  /** The name of the application to be displayed on the login form. */
3208
3372
  appName: string;
@@ -3237,6 +3401,9 @@ interface PaceLoginPageProps {
3237
3401
  */
3238
3402
  declare const PaceLoginPage: React__default.FC<PaceLoginPageProps>;
3239
3403
 
3404
+ /**
3405
+ * Props for the ProtectedRoute component.
3406
+ */
3240
3407
  interface ProtectedRouteProps {
3241
3408
  /**
3242
3409
  * Whether an event is required for routes inside this component.
@@ -3245,13 +3412,6 @@ interface ProtectedRouteProps {
3245
3412
  * @default true
3246
3413
  */
3247
3414
  requireEvent?: boolean;
3248
- /**
3249
- * Whether super admins can bypass event requirement.
3250
- * Note: This feature requires additional RBAC setup. For simple bypass, set requireEvent={false} instead.
3251
- * @default false
3252
- * @deprecated Use requireEvent={false} for routes that don't need events
3253
- */
3254
- allowSuperAdminBypass?: boolean;
3255
3415
  /**
3256
3416
  * Custom component to render when no events are available.
3257
3417
  * If not provided, a default message is shown.
@@ -3284,7 +3444,7 @@ interface ProtectedRouteProps {
3284
3444
  * @param props - Configuration for route protection
3285
3445
  * @returns React element with route protection logic
3286
3446
  */
3287
- declare function ProtectedRoute({ requireEvent, allowSuperAdminBypass, noEventsFallback, loadingFallback, loginPath }: ProtectedRouteProps): string | number | bigint | true | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element;
3447
+ declare function ProtectedRoute({ requireEvent, noEventsFallback, loadingFallback, loginPath }: ProtectedRouteProps): string | number | bigint | true | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element;
3288
3448
 
3289
3449
  /**
3290
3450
  * State interface for the ErrorBoundary component
@@ -3321,6 +3481,8 @@ interface ErrorBoundaryProps {
3321
3481
  enableRetry?: boolean;
3322
3482
  /** Whether to enable error reporting */
3323
3483
  enableReporting?: boolean;
3484
+ /** Internal: Global error handler from context (not part of public API) */
3485
+ _globalErrorHandler?: (error: Error, errorInfo: React__default.ErrorInfo, errorId: string, componentName: string) => void;
3324
3486
  }
3325
3487
  /**
3326
3488
  * ErrorBoundary component
@@ -3339,7 +3501,7 @@ interface ErrorBoundaryProps {
3339
3501
  * </ErrorBoundary>
3340
3502
  * ```
3341
3503
  */
3342
- declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
3504
+ declare class ErrorBoundary$1 extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
3343
3505
  private retryTimeoutId;
3344
3506
  constructor(props: ErrorBoundaryProps);
3345
3507
  static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState>;
@@ -3350,6 +3512,65 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
3350
3512
  render(): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
3351
3513
  }
3352
3514
 
3515
+ /**
3516
+ * Type definition for the global error handler function
3517
+ * @public
3518
+ */
3519
+ type GlobalErrorHandler = (error: Error, errorInfo: React__default.ErrorInfo, errorId: string, componentName: string) => void;
3520
+ /**
3521
+ * Props for ErrorBoundaryProvider component
3522
+ * @public
3523
+ */
3524
+ interface ErrorBoundaryProviderProps {
3525
+ /** Children to wrap with the provider */
3526
+ children: ReactNode;
3527
+ /** Global error handler that will be used by all ErrorBoundary instances unless overridden */
3528
+ defaultErrorHandler?: GlobalErrorHandler;
3529
+ }
3530
+ /**
3531
+ * Provider component for ErrorBoundary global error handler configuration
3532
+ *
3533
+ * Wrap your application with this provider to set a default error handler that will
3534
+ * be used by all ErrorBoundary instances unless they provide their own onError prop.
3535
+ *
3536
+ * @example
3537
+ * ```tsx
3538
+ * <ErrorBoundaryProvider
3539
+ * defaultErrorHandler={(error, errorInfo, errorId, componentName) => {
3540
+ * errorTracking.captureException(error, {
3541
+ * componentStack: errorInfo.componentStack,
3542
+ * errorBoundary: true,
3543
+ * errorId,
3544
+ * componentName,
3545
+ * });
3546
+ * }}
3547
+ * >
3548
+ * <App />
3549
+ * </ErrorBoundaryProvider>
3550
+ * ```
3551
+ *
3552
+ * @public
3553
+ */
3554
+ /**
3555
+ * Error boundary provider component.
3556
+ * Provides global error handling configuration to child ErrorBoundary components.
3557
+ *
3558
+ * @param props - Error boundary provider configuration
3559
+ * @returns The error boundary provider
3560
+ */
3561
+ declare function ErrorBoundaryProvider({ children, defaultErrorHandler, }: ErrorBoundaryProviderProps): react_jsx_runtime.JSX.Element;
3562
+
3563
+ /**
3564
+ * @file Error Boundary exports
3565
+ */
3566
+
3567
+ /**
3568
+ * ErrorBoundary component with automatic context support
3569
+ * This wrapper automatically uses the global error handler from ErrorBoundaryProvider
3570
+ * if no onError prop is provided.
3571
+ */
3572
+ declare const ErrorBoundary: React__default.ForwardRefExoticComponent<Omit<ErrorBoundaryProps, "_globalErrorHandler"> & React__default.RefAttributes<ErrorBoundary$1>>;
3573
+
3353
3574
  /**
3354
3575
  * @file LoadingSpinner Component
3355
3576
  * @package @jmruthers/pace-core
@@ -3476,72 +3697,56 @@ interface SessionRestorationLoaderProps {
3476
3697
  }
3477
3698
  declare const SessionRestorationLoader: React__default.FC<SessionRestorationLoaderProps>;
3478
3699
 
3479
- interface EventSelectorProps {
3480
- /** Placeholder text for the dropdown */
3481
- placeholder?: string;
3482
- /** Additional CSS classes */
3483
- className?: string;
3484
- /** Callback fired when an event changes, providing full event object */
3485
- onEventChange?: (event: Event | null) => void;
3486
- /** Show friendly message when no events available */
3487
- showNoEventsMessage?: boolean;
3488
- /** Show retry button on errors */
3489
- showRetryButton?: boolean;
3490
- /** Show event details in dropdown */
3491
- showEventDetails?: boolean;
3492
- /** Show indicator for next/upcoming events */
3493
- showNextEventIndicator?: boolean;
3494
- }
3495
3700
  /**
3496
- * EventSelector component for selecting events with built-in access control
3497
- *
3498
- * This component provides secure event selection with:
3499
- * - Database integration via rbac_event_app_roles table
3500
- * - Auto-selection of next upcoming event by date
3501
- * - Cross-device sync via Supabase user session metadata
3502
- * - localStorage fallback for offline scenarios
3503
- * - Comprehensive error handling and user feedback
3504
- *
3505
- * @component
3506
- * @example
3507
- * <UnifiedAuthProvider supabaseClient={supabase} appName="PACE">
3508
- * <EventSelector onEventChange={(event) => console.log(event)} />
3509
- * </UnifiedAuthProvider>
3701
+ * Props for the ContextSelector component.
3510
3702
  */
3511
- declare function EventSelector({ placeholder, className, onEventChange, showNoEventsMessage, showRetryButton, showEventDetails, showNextEventIndicator }: EventSelectorProps): react_jsx_runtime.JSX.Element | null;
3512
-
3513
- interface OrganisationSelectorProps {
3703
+ interface ContextSelectorProps {
3514
3704
  /** Placeholder text for the dropdown */
3515
3705
  placeholder?: string;
3516
3706
  /** Additional CSS classes */
3517
3707
  className?: string;
3518
- /** Callback fired when organisation changes, providing full organisation object */
3519
- onOrganisationChange?: (org: Organisation) => void;
3520
- /** Show friendly message when no organisations available */
3521
- showNoOrganisationsMessage?: boolean;
3708
+ /** Callback fired when an organisation is selected */
3709
+ onOrganisationSelect?: (org: Organisation) => void;
3710
+ /** Callback fired when an event is selected */
3711
+ onEventSelect?: (event: Event) => void;
3712
+ /** Show friendly message when no items available */
3713
+ showNoItemsMessage?: boolean;
3522
3714
  /** Show retry button on errors */
3523
3715
  showRetryButton?: boolean;
3524
- /** Show user's role in each organisation */
3525
- showRole?: boolean;
3526
3716
  /** Compact display mode */
3527
3717
  compact?: boolean;
3528
3718
  /** Disabled state */
3529
3719
  disabled?: boolean;
3720
+ /** Show organisations section (default: true) */
3721
+ showOrganisations?: boolean;
3722
+ /** Show events section (default: true) */
3723
+ showEvents?: boolean;
3530
3724
  }
3531
3725
  /**
3532
- * OrganisationSelector component for secure organisation switching
3726
+ * ContextSelector component for selecting organisations or events
3533
3727
  *
3534
- * This component provides secure organisation selection with:
3535
- * - User membership validation
3536
- * - Role-based access display
3537
- * - Security error handling
3538
- * - Real-time organisation switching
3539
- * - Accessible interface design
3728
+ * This is the unified intelligent selector that shows all organisations and events
3729
+ * a user can access. It automatically determines what to show based on the user's
3730
+ * roles and permissions - no need to configure separate org/event selectors.
3540
3731
  *
3541
- * Security: Only shows organisations the user has valid access to
3732
+ * The selector intelligently shows:
3733
+ * - All organisations the user has access to (via organisation roles)
3734
+ * - All events the user has access to (via event-app roles or organisation membership)
3735
+ * - Everything for super admins
3736
+ *
3737
+ * @component
3738
+ * @example
3739
+ * <ContextSelector
3740
+ * onOrganisationSelect={(org) => switchOrganisation(org)}
3741
+ * onEventSelect={(event) => setSelectedEvent(event)}
3742
+ * />
3542
3743
  */
3543
- declare function OrganisationSelector({ placeholder, className, onOrganisationChange, showNoOrganisationsMessage, showRetryButton, showRole, compact, disabled }: OrganisationSelectorProps): react_jsx_runtime.JSX.Element | null;
3744
+ declare function ContextSelector({ placeholder, className, onOrganisationSelect, onEventSelect, showNoItemsMessage, showRetryButton, compact, disabled, showOrganisations, showEvents }: ContextSelectorProps): react_jsx_runtime.JSX.Element | null;
3544
3745
 
3746
+ /**
3747
+ * Props for the FileUpload component.
3748
+ * Configures file upload behavior including storage location, validation, and callbacks.
3749
+ */
3545
3750
  interface FileUploadProps {
3546
3751
  supabase: SupabaseClient;
3547
3752
  table_name: string;
@@ -3631,8 +3836,22 @@ interface FileDisplayProps {
3631
3836
  * @param props.category - Optional category filter. When specified, only displays files matching this category and uses single file display variant.
3632
3837
  * @returns React element with file display
3633
3838
  */
3839
+ /**
3840
+ * File display component.
3841
+ * Renders files from the file reference system with support for previews, downloads, and public/private access.
3842
+ *
3843
+ * @param props - File display configuration
3844
+ * @returns The rendered file display
3845
+ */
3634
3846
  declare function FileDisplay({ table_name, record_id, organisation_id, category, displayOnly, showDelete, className, imgClassName, children, loadingComponent, errorComponent, showFallback, generateFallbackText, fallbackText, fallbackSourceText, fallbackSize, enableChildren, showMetadata }: FileDisplayProps): react_jsx_runtime.JSX.Element;
3635
3847
 
3848
+ /**
3849
+ * Hook for managing file references.
3850
+ * Provides file upload, retrieval, and URL generation functionality.
3851
+ *
3852
+ * @param supabase - Supabase client instance
3853
+ * @returns File reference service with upload, get, and URL methods
3854
+ */
3636
3855
  declare function useFileReference(supabase: SupabaseClient): {
3637
3856
  isLoading: boolean;
3638
3857
  error: string | null;
@@ -3699,6 +3918,9 @@ type UseFileReferenceOptions = {
3699
3918
  record_id: string;
3700
3919
  organisation_id: string;
3701
3920
  };
3921
+ /**
3922
+ * Return value of the useFileReference hook.
3923
+ */
3702
3924
  type UseFileReferenceReturn = {
3703
3925
  isLoading: boolean;
3704
3926
  error: string | null;
@@ -3712,6 +3934,9 @@ type UseFileReferenceReturn = {
3712
3934
  getFileCount: (table_name: string, record_id: string, organisation_id: string) => Promise<number>;
3713
3935
  clearError: () => void;
3714
3936
  };
3937
+ /**
3938
+ * Return value of the useFileReferenceForRecord hook.
3939
+ */
3715
3940
  type UseFileReferenceForRecordReturn = {
3716
3941
  isLoading: boolean;
3717
3942
  error: string | null;
@@ -3859,8 +4084,6 @@ interface PublicPageLayoutProps {
3859
4084
  refetch?: () => Promise<void> | void;
3860
4085
  /** Whether to show the footer (default: true) */
3861
4086
  showFooter?: boolean;
3862
- /** @deprecated Custom CSS classes for the layout - no longer used as wrapper div was removed */
3863
- className?: string;
3864
4087
  /** Custom error fallback component */
3865
4088
  errorFallback?: React__default.ComponentType<{
3866
4089
  error: Error;
@@ -3932,7 +4155,7 @@ declare function PublicPageFooter({ event, companyName, year, links, className,
3932
4155
  * @param props - Layout configuration and content
3933
4156
  * @returns React element with complete public page layout
3934
4157
  */
3935
- declare function PublicPageLayout({ eventCode, children, event, isLoading, error, refetch, showFooter, className, errorFallback: ErrorFallback, loadingFallback: LoadingFallback, customHeader, customFooter, showValidationErrors, loadingMessage }: PublicPageLayoutProps): react_jsx_runtime.JSX.Element;
4158
+ declare function PublicPageLayout({ eventCode, children, event, isLoading, error, refetch, showFooter, errorFallback: ErrorFallback, loadingFallback: LoadingFallback, customHeader, customFooter, showValidationErrors, loadingMessage }: PublicPageLayoutProps): react_jsx_runtime.JSX.Element;
3936
4159
 
3937
4160
  interface PublicPageContextType {
3938
4161
  isPublicPage: true;
@@ -3972,4 +4195,4 @@ declare function usePublicPageContext(): PublicPageContextType;
3972
4195
  */
3973
4196
  declare function useIsPublicPage(): boolean;
3974
4197
 
3975
- export { type DialogTriggerProps as $, AddressField as A, Button as B, Card as C, TableHeader as D, TableBody as E, TableCaption as F, TableCell as G, TableFooter as H, Input as I, TableHead as J, TableRow as K, Label as L, Dialog as M, DialogPortal as N, DialogOverlay as O, Progress as P, DialogTrigger as Q, DialogClose as R, Switch as S, Textarea as T, DialogContent as U, DialogHeader as V, DialogBody as W, DialogFooter as X, DialogTitle as Y, DialogDescription as Z, type DialogProps as _, type ButtonProps as a, EventSelector as a$, type DialogContentProps as a0, type DialogOverlayProps as a1, type DialogHeaderProps as a2, type DialogFooterProps as a3, type DialogTitleProps as a4, type DialogDescriptionProps as a5, type DialogSize as a6, Select as a7, SelectGroup as a8, SelectValue as a9, TooltipTrigger as aA, TooltipContent as aB, TooltipProvider as aC, TooltipRoot as aD, Form as aE, FormField as aF, type FormProps as aG, type FormFieldProps as aH, LoginForm as aI, type LoginFormProps as aJ, Header as aK, Footer as aL, type FooterProps as aM, ProtectedRoute as aN, type ProtectedRouteProps as aO, NavigationMenu as aP, type NavigationMenuProps as aQ, type NavigationItem as aR, OrganisationSelector as aS, type OrganisationSelectorProps as aT, UserMenu as aU, ErrorBoundary as aV, type ErrorBoundaryProps as aW, type ErrorBoundaryState as aX, LoadingSpinner as aY, SessionRestorationLoader as aZ, type SessionRestorationLoaderProps as a_, SelectTrigger as aa, SelectContent as ab, SelectLabel as ac, SelectItem as ad, SelectSeparator as ae, Tabs as af, TabsList as ag, TabsTrigger as ah, TabsContent as ai, type TabsProps as aj, type TabsListProps as ak, type TabsTriggerProps as al, type TabsContentProps as am, Calendar as an, type CalendarProps as ao, Toast as ap, Toaster as aq, ToastAction as ar, ToastProvider as as, ToastViewport as at, ToastTitle as au, ToastDescription as av, ToastClose as aw, type ToastActionElement as ax, type ToastProps as ay, Tooltip as az, CardHeader as b, FileUpload as b0, type FileUploadProps as b1, FileDisplay as b2, type FileDisplayProps as b3, useFileReference as b4, useFileReferenceForRecord as b5, useFileReferenceById as b6, useFilesByCategory as b7, type UseFileReferenceOptions as b8, type UseFileReferenceReturn as b9, type UseFileReferenceForRecordReturn as ba, PublicPageLayout as bb, PublicPageHeader as bc, PublicPageFooter as bd, PublicPageProvider as be, usePublicPageContext as bf, useIsPublicPage as bg, type PublicPageLayoutProps as bh, type PublicPageHeaderProps as bi, type PublicPageFooterProps as bj, type PaceAppLayoutProps as bk, PaceAppLayout as bl, type PaceLoginPageProps as bm, PaceLoginPage as bn, type NavigationMode as bo, type UserMenuProps as bp, PasswordChangeForm as bq, CardFooter as c, CardTitle as d, CardDescription as e, CardContent as f, CardActions as g, type CardProps as h, type CardActionsProps as i, type InputProps as j, type AddressFieldProps as k, type AddressFieldRef as l, type LabelProps as m, type TextareaProps as n, Alert as o, AlertTitle as p, AlertDescription as q, Avatar as r, type AvatarProps as s, Badge as t, type BadgeProps as u, type BadgeVariant as v, Checkbox as w, type SwitchProps as x, type ProgressProps as y, Table as z };
4198
+ export { type DialogTriggerProps as $, AddressField as A, Button as B, Card as C, TableHeader as D, TableBody as E, TableCaption as F, TableCell as G, TableFooter as H, Input as I, TableHead as J, TableRow as K, Label as L, Dialog as M, DialogPortal as N, DialogOverlay as O, Progress as P, DialogTrigger as Q, DialogClose as R, Switch as S, Textarea as T, DialogContent as U, DialogHeader as V, DialogBody as W, DialogFooter as X, DialogTitle as Y, DialogDescription as Z, type DialogProps as _, type ButtonProps as a, LoadingSpinner as a$, type DialogContentProps as a0, type DialogOverlayProps as a1, type DialogHeaderProps as a2, type DialogFooterProps as a3, type DialogTitleProps as a4, type DialogDescriptionProps as a5, type DialogSize as a6, Select as a7, SelectGroup as a8, SelectValue as a9, TooltipTrigger as aA, TooltipContent as aB, TooltipProvider as aC, TooltipRoot as aD, Form as aE, FormField as aF, type FormProps as aG, type FormFieldProps as aH, LoginForm as aI, type LoginFormProps as aJ, Header as aK, Footer as aL, type FooterProps as aM, ProtectedRoute as aN, type ProtectedRouteProps as aO, NavigationMenu as aP, type NavigationMenuProps as aQ, type NavigationItem as aR, ContextSelector as aS, type ContextSelectorProps as aT, UserMenu as aU, ErrorBoundary as aV, ErrorBoundaryProvider as aW, type ErrorBoundaryProps as aX, type ErrorBoundaryState as aY, type ErrorBoundaryProviderProps as aZ, type GlobalErrorHandler as a_, SelectTrigger as aa, SelectContent as ab, SelectLabel as ac, SelectItem as ad, SelectSeparator as ae, Tabs as af, TabsList as ag, TabsTrigger as ah, TabsContent as ai, type TabsProps as aj, type TabsListProps as ak, type TabsTriggerProps as al, type TabsContentProps as am, Calendar as an, type CalendarProps as ao, Toast as ap, Toaster as aq, ToastAction as ar, ToastProvider as as, ToastViewport as at, ToastTitle as au, ToastDescription as av, ToastClose as aw, type ToastActionElement as ax, type ToastProps as ay, Tooltip as az, CardHeader as b, SessionRestorationLoader as b0, type SessionRestorationLoaderProps as b1, FileUpload as b2, type FileUploadProps as b3, FileDisplay as b4, type FileDisplayProps as b5, useFileReference as b6, useFileReferenceForRecord as b7, useFileReferenceById as b8, useFilesByCategory as b9, type UseFileReferenceOptions as ba, type UseFileReferenceReturn as bb, type UseFileReferenceForRecordReturn as bc, PublicPageLayout as bd, PublicPageHeader as be, PublicPageFooter as bf, PublicPageProvider as bg, usePublicPageContext as bh, useIsPublicPage as bi, type PublicPageLayoutProps as bj, type PublicPageHeaderProps as bk, type PublicPageFooterProps as bl, type PaceAppLayoutProps as bm, PaceAppLayout as bn, type PaceLoginPageProps as bo, PaceLoginPage as bp, type NavigationMode as bq, type UserMenuProps as br, PasswordChangeForm as bs, CardFooter as c, CardTitle as d, CardDescription as e, CardContent as f, CardActions as g, type CardProps as h, type CardActionsProps as i, type InputProps as j, type AddressFieldProps as k, type AddressFieldRef as l, type LabelProps as m, type TextareaProps as n, Alert as o, AlertTitle as p, AlertDescription as q, Avatar as r, type AvatarProps as s, Badge as t, type BadgeProps as u, type BadgeVariant as v, Checkbox as w, type SwitchProps as x, type ProgressProps as y, Table as z };