@jmruthers/pace-core 0.6.4 → 0.6.6

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 (387) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +5 -403
  3. package/core-usage-manifest.json +93 -0
  4. package/cursor-rules/00-pace-core-compliance.mdc +128 -26
  5. package/cursor-rules/01-standards-compliance.mdc +49 -8
  6. package/cursor-rules/02-project-structure.mdc +6 -0
  7. package/cursor-rules/03-solid-principles.mdc +2 -0
  8. package/cursor-rules/04-testing-standards.mdc +2 -0
  9. package/cursor-rules/05-bug-reports-and-features.mdc +2 -0
  10. package/cursor-rules/06-code-quality.mdc +2 -0
  11. package/cursor-rules/07-tech-stack-compliance.mdc +2 -0
  12. package/cursor-rules/08-markup-quality.mdc +52 -27
  13. package/cursor-rules/09-rbac-compliance.mdc +462 -0
  14. package/cursor-rules/10-error-handling-patterns.mdc +179 -0
  15. package/cursor-rules/11-performance-optimization.mdc +169 -0
  16. package/cursor-rules/12-ci-cd-integration.mdc +150 -0
  17. package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
  18. package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-2N_tqbfq.d.ts} +1 -1
  19. package/dist/DataTable-LRJL4IRV.js +15 -0
  20. package/dist/{PublicPageProvider-DEMpysFR.d.ts → PublicPageProvider-BBH6Vqg7.d.ts} +72 -139
  21. package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
  22. package/dist/api-Y4MQWOFW.js +4 -0
  23. package/dist/audit-MYQXYZFU.js +3 -0
  24. package/dist/{chunk-J36DSWQK.js → chunk-2HGJFNAH.js} +8 -28
  25. package/dist/{chunk-OEWDTMG7.js → chunk-3O3WHILE.js} +38 -121
  26. package/dist/{chunk-M43Y4SSO.js → chunk-3QC3KRHK.js} +1 -14
  27. package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
  28. package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
  29. package/dist/chunk-4T7OBVTU.js +62 -0
  30. package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
  31. package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
  32. package/dist/{chunk-NN6WWZ5U.js → chunk-7TYHROIV.js} +579 -563
  33. package/dist/{chunk-M7MPQISP.js → chunk-A55DK444.js} +9 -16
  34. package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
  35. package/dist/{chunk-L4OXEN46.js → chunk-BVP2BCJF.js} +2 -16
  36. package/dist/chunk-C7NSAPTL.js +1 -0
  37. package/dist/{chunk-YKRAFF5K.js → chunk-FENMYN2U.js} +73 -149
  38. package/dist/{chunk-AVMLPIM7.js → chunk-FTCRZOG2.js} +284 -432
  39. package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
  40. package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
  41. package/dist/{chunk-I6DAQMWX.js → chunk-LAZMKTTF.js} +930 -891
  42. package/dist/{chunk-5EC5MEWX.js → chunk-MAGBIDNS.js} +77 -222
  43. package/dist/chunk-MBADTM7L.js +64 -0
  44. package/dist/chunk-OHIK3MIO.js +994 -0
  45. package/dist/{chunk-6SOIHG6Z.js → chunk-S7DKJPLT.js} +115 -44
  46. package/dist/{chunk-FMUCXFII.js → chunk-SD6WQY43.js} +1 -5
  47. package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
  48. package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
  49. package/dist/{chunk-FFQEQTNW.js → chunk-UIYSCEV7.js} +134 -45
  50. package/dist/{chunk-3LPHPB62.js → chunk-ZFYPMX46.js} +271 -87
  51. package/dist/{chunk-7JPAB3T5.js → chunk-ZS5VO5JB.js} +1989 -1283
  52. package/dist/components.d.ts +6 -6
  53. package/dist/components.js +57 -267
  54. package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
  55. package/dist/eslint-rules/index.cjs +22 -0
  56. package/dist/eslint-rules/rules/compliance.cjs +348 -0
  57. package/dist/eslint-rules/rules/components.cjs +113 -0
  58. package/dist/eslint-rules/rules/imports.cjs +102 -0
  59. package/dist/eslint-rules/rules/rbac.cjs +790 -0
  60. package/dist/eslint-rules/utils/helpers.cjs +42 -0
  61. package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
  62. package/dist/hooks.d.ts +5 -5
  63. package/dist/hooks.js +62 -270
  64. package/dist/icons/index.d.ts +1 -0
  65. package/dist/icons/index.js +1 -0
  66. package/dist/index.d.ts +36 -26
  67. package/dist/index.js +87 -690
  68. package/dist/providers.d.ts +2 -2
  69. package/dist/providers.js +8 -35
  70. package/dist/rbac/eslint-rules.d.ts +46 -44
  71. package/dist/rbac/eslint-rules.js +7 -4
  72. package/dist/rbac/index.d.ts +124 -594
  73. package/dist/rbac/index.js +14 -207
  74. package/dist/styles/index.js +2 -12
  75. package/dist/theming/runtime.js +3 -19
  76. package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
  77. package/dist/{types-CkbwOr4Y.d.ts → types-B-K_5VnO.d.ts} +4 -0
  78. package/dist/types-t9H8qKRw.d.ts +55 -0
  79. package/dist/types.d.ts +1 -1
  80. package/dist/types.js +7 -94
  81. package/dist/{usePublicRouteParams-i3qtoBgg.d.ts → usePublicRouteParams-COZ28Mvq.d.ts} +9 -9
  82. package/dist/utils.d.ts +24 -117
  83. package/dist/utils.js +54 -392
  84. package/docs/README.md +16 -6
  85. package/docs/api/README.md +4 -402
  86. package/docs/api/modules.md +454 -930
  87. package/docs/api-reference/components.md +3 -1
  88. package/docs/api-reference/deprecated.md +31 -6
  89. package/docs/api-reference/rpc-functions.md +78 -3
  90. package/docs/best-practices/accessibility.md +6 -3
  91. package/docs/getting-started/cursor-rules.md +3 -23
  92. package/docs/getting-started/dependencies.md +650 -0
  93. package/docs/getting-started/installation-guide.md +20 -7
  94. package/docs/getting-started/quick-start.md +23 -12
  95. package/docs/implementation-guides/permission-enforcement.md +4 -0
  96. package/docs/rbac/MIGRATION_GUIDE.md +819 -0
  97. package/docs/rbac/RBAC_CONTRACT.md +724 -0
  98. package/docs/rbac/README.md +12 -3
  99. package/docs/rbac/edge-functions-guide.md +376 -0
  100. package/docs/rbac/secure-client-protection.md +0 -34
  101. package/docs/standards/00-pace-core-compliance.md +967 -0
  102. package/docs/standards/01-standards-compliance.md +188 -0
  103. package/docs/standards/02-project-structure.md +985 -0
  104. package/docs/standards/03-solid-principles.md +39 -0
  105. package/docs/standards/04-testing-standards.md +36 -0
  106. package/docs/standards/05-bug-reports-and-features.md +27 -0
  107. package/docs/standards/{04-code-style-standard.md → 06-code-quality.md} +2 -0
  108. package/docs/standards/07-tech-stack-compliance.md +30 -0
  109. package/docs/standards/08-markup-quality.md +345 -0
  110. package/docs/standards/{07-rbac-and-rls-standard.md → 09-rbac-compliance.md} +149 -54
  111. package/docs/standards/10-error-handling-patterns.md +401 -0
  112. package/docs/standards/11-performance-optimization.md +348 -0
  113. package/docs/standards/12-ci-cd-integration.md +370 -0
  114. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +192 -0
  115. package/docs/standards/README.md +62 -33
  116. package/docs/troubleshooting/organisation-context-setup.md +42 -19
  117. package/eslint-config-pace-core.cjs +20 -4
  118. package/package.json +31 -21
  119. package/scripts/audit/audit-compliance.cjs +1295 -0
  120. package/scripts/audit/audit-components.cjs +260 -0
  121. package/scripts/audit/audit-dependencies.cjs +395 -0
  122. package/scripts/audit/audit-rbac.cjs +954 -0
  123. package/scripts/audit/audit-standards.cjs +1268 -0
  124. package/scripts/audit/index.cjs +1898 -194
  125. package/scripts/install-cursor-rules.cjs +259 -8
  126. package/scripts/validate-master.js +1 -1
  127. package/src/__tests__/fixtures/supabase.ts +1 -1
  128. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +1 -1
  129. package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
  130. package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
  131. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +3 -3
  132. package/src/__tests__/helpers/component-test-utils.tsx +1 -1
  133. package/src/__tests__/helpers/supabaseMock.ts +2 -2
  134. package/src/__tests__/public-recipe-view.test.ts +38 -9
  135. package/src/components/Button/Button.tsx +5 -1
  136. package/src/components/ContextSelector/ContextSelector.tsx +42 -39
  137. package/src/components/DataTable/__tests__/keyboard.test.tsx +15 -2
  138. package/src/components/DataTable/components/DataTableBody.tsx +55 -31
  139. package/src/components/DataTable/components/DataTableCore.tsx +186 -13
  140. package/src/components/DataTable/components/DataTableLayout.tsx +30 -5
  141. package/src/components/DataTable/components/EditFields.tsx +23 -3
  142. package/src/components/DataTable/components/EditableRow.tsx +7 -2
  143. package/src/components/DataTable/components/ImportModal.tsx +4 -6
  144. package/src/components/DataTable/components/RowComponent.tsx +12 -0
  145. package/src/components/DataTable/components/ViewRowModal.tsx +4 -4
  146. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +455 -96
  147. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +122 -58
  148. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
  149. package/src/components/DataTable/core/DataTableContext.tsx +1 -1
  150. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
  151. package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
  152. package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
  153. package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
  154. package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
  155. package/src/components/DataTable/types.ts +5 -0
  156. package/src/components/DateTimeField/DateTimeField.tsx +20 -20
  157. package/src/components/DateTimeField/README.md +5 -2
  158. package/src/components/Dialog/Dialog.test.tsx +361 -318
  159. package/src/components/Dialog/Dialog.tsx +1154 -323
  160. package/src/components/Dialog/index.ts +3 -3
  161. package/src/components/FileDisplay/FileDisplay.test.tsx +45 -2
  162. package/src/components/FileDisplay/FileDisplay.tsx +28 -22
  163. package/src/components/Form/Form.test.tsx +9 -10
  164. package/src/components/Form/Form.tsx +369 -9
  165. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +28 -28
  166. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +40 -54
  167. package/src/components/LoginForm/LoginForm.tsx +2 -2
  168. package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
  169. package/src/components/NavigationMenu/NavigationMenu.tsx +2 -2
  170. package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
  171. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
  172. package/src/components/PaceAppLayout/PaceAppLayout.tsx +30 -41
  173. package/src/components/PaceAppLayout/README.md +10 -9
  174. package/src/components/PaceAppLayout/test-setup.tsx +40 -31
  175. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
  176. package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
  177. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +61 -0
  178. package/src/components/PasswordChange/PasswordChangeForm.tsx +20 -13
  179. package/src/components/PublicLayout/PublicLayout.test.tsx +7 -3
  180. package/src/components/PublicLayout/PublicPageLayout.tsx +5 -8
  181. package/src/components/Select/Select.tsx +23 -21
  182. package/src/components/Select/types.ts +1 -1
  183. package/src/components/UserMenu/UserMenu.test.tsx +38 -6
  184. package/src/components/UserMenu/UserMenu.tsx +39 -34
  185. package/src/components/index.ts +3 -4
  186. package/src/eslint-rules/index.cjs +22 -0
  187. package/src/eslint-rules/rules/compliance.cjs +348 -0
  188. package/src/eslint-rules/rules/components.cjs +113 -0
  189. package/src/eslint-rules/rules/imports.cjs +102 -0
  190. package/src/eslint-rules/rules/rbac.cjs +790 -0
  191. package/src/eslint-rules/utils/helpers.cjs +42 -0
  192. package/src/eslint-rules/utils/manifest-loader.cjs +75 -0
  193. package/src/hooks/__tests__/hooks.integration.test.tsx +6 -8
  194. package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
  195. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
  196. package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
  197. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
  198. package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
  199. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
  200. package/src/hooks/public/usePublicEvent.ts +62 -190
  201. package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
  202. package/src/hooks/public/usePublicEventLogo.ts +19 -9
  203. package/src/hooks/useAppConfig.ts +26 -24
  204. package/src/hooks/useEventTheme.test.ts +211 -233
  205. package/src/hooks/useEventTheme.ts +19 -28
  206. package/src/hooks/useEvents.ts +11 -7
  207. package/src/hooks/useKeyboardShortcuts.ts +1 -1
  208. package/src/hooks/useOrganisationPermissions.ts +9 -11
  209. package/src/hooks/useOrganisations.ts +13 -7
  210. package/src/hooks/useQueryCache.ts +0 -1
  211. package/src/hooks/useSessionDraft.ts +380 -0
  212. package/src/hooks/useSessionRestoration.ts +3 -1
  213. package/src/icons/index.ts +27 -0
  214. package/src/index.ts +16 -1
  215. package/src/providers/OrganisationProvider.tsx +23 -14
  216. package/src/providers/services/EventServiceProvider.tsx +1 -24
  217. package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
  218. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -0
  219. package/src/rbac/README.md +20 -20
  220. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
  221. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
  222. package/src/rbac/adapters.tsx +7 -295
  223. package/src/rbac/api.test.ts +44 -56
  224. package/src/rbac/api.ts +10 -17
  225. package/src/rbac/cache-invalidation.ts +0 -1
  226. package/src/rbac/compliance/index.ts +10 -0
  227. package/src/rbac/compliance/pattern-detector.ts +553 -0
  228. package/src/rbac/compliance/runtime-compliance.ts +22 -0
  229. package/src/rbac/components/AccessDenied.tsx +150 -0
  230. package/src/rbac/components/NavigationGuard.tsx +12 -20
  231. package/src/rbac/components/PagePermissionGuard.tsx +4 -24
  232. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
  233. package/src/rbac/components/index.ts +3 -41
  234. package/src/rbac/eslint-rules.js +1 -1
  235. package/src/rbac/hooks/index.ts +0 -3
  236. package/src/rbac/hooks/permissions/index.ts +0 -3
  237. package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
  238. package/src/rbac/hooks/usePermissions.ts +0 -3
  239. package/src/rbac/hooks/useRBAC.test.ts +21 -3
  240. package/src/rbac/hooks/useRBAC.ts +4 -3
  241. package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
  242. package/src/rbac/hooks/useResolvedScope.ts +58 -140
  243. package/src/rbac/hooks/useResourcePermissions.test.ts +241 -60
  244. package/src/rbac/hooks/useResourcePermissions.ts +182 -63
  245. package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
  246. package/src/rbac/hooks/useRoleManagement.ts +147 -19
  247. package/src/rbac/hooks/useSecureSupabase.ts +4 -8
  248. package/src/rbac/index.ts +7 -9
  249. package/src/rbac/permissions.ts +17 -17
  250. package/src/rbac/utils/contextValidator.ts +45 -7
  251. package/src/services/AuthService.ts +132 -23
  252. package/src/services/EventService.ts +4 -97
  253. package/src/services/InactivityService.ts +155 -58
  254. package/src/services/OrganisationService.ts +7 -44
  255. package/src/services/__tests__/OrganisationService.test.ts +26 -8
  256. package/src/services/base/BaseService.ts +0 -3
  257. package/src/styles/core.css +4 -0
  258. package/src/types/database.generated.ts +4733 -3809
  259. package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
  260. package/src/utils/context/organisationContext.test.ts +13 -28
  261. package/src/utils/context/organisationContext.ts +21 -52
  262. package/src/utils/dynamic/dynamicUtils.ts +1 -1
  263. package/src/utils/file-reference/index.ts +39 -15
  264. package/src/utils/formatting/formatDateTime.test.ts +3 -2
  265. package/src/utils/formatting/formatTime.test.ts +3 -2
  266. package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
  267. package/src/utils/index.ts +4 -1
  268. package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
  269. package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
  270. package/src/utils/persistence/keyDerivation.ts +304 -0
  271. package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
  272. package/src/utils/security/secureStorage.ts +5 -5
  273. package/src/utils/storage/helpers.ts +3 -3
  274. package/src/utils/supabase/createBaseClient.ts +147 -0
  275. package/src/utils/timezone/timezone.test.ts +1 -2
  276. package/src/utils/timezone/timezone.ts +1 -1
  277. package/src/utils/validation/csrf.ts +4 -4
  278. package/cursor-rules/CHANGELOG.md +0 -119
  279. package/cursor-rules/README.md +0 -192
  280. package/dist/DataTable-E7YQZD7D.js +0 -175
  281. package/dist/DataTable-E7YQZD7D.js.map +0 -1
  282. package/dist/UnifiedAuthProvider-QPXO24B4.js +0 -18
  283. package/dist/UnifiedAuthProvider-QPXO24B4.js.map +0 -1
  284. package/dist/api-6LVZTHDS.js +0 -52
  285. package/dist/api-6LVZTHDS.js.map +0 -1
  286. package/dist/audit-V53FV5AG.js +0 -17
  287. package/dist/audit-V53FV5AG.js.map +0 -1
  288. package/dist/chunk-36LVWXB2.js +0 -227
  289. package/dist/chunk-36LVWXB2.js.map +0 -1
  290. package/dist/chunk-3LPHPB62.js.map +0 -1
  291. package/dist/chunk-5DRSZLL2.js.map +0 -1
  292. package/dist/chunk-5EC5MEWX.js.map +0 -1
  293. package/dist/chunk-63FOKYGO.js.map +0 -1
  294. package/dist/chunk-6SOIHG6Z.js.map +0 -1
  295. package/dist/chunk-7JPAB3T5.js.map +0 -1
  296. package/dist/chunk-ATKZM7RX.js +0 -2053
  297. package/dist/chunk-ATKZM7RX.js.map +0 -1
  298. package/dist/chunk-AVMLPIM7.js.map +0 -1
  299. package/dist/chunk-DGUM43GV.js.map +0 -1
  300. package/dist/chunk-E66EQZE6.js.map +0 -1
  301. package/dist/chunk-FFQEQTNW.js.map +0 -1
  302. package/dist/chunk-FMUCXFII.js.map +0 -1
  303. package/dist/chunk-G37KK66H.js.map +0 -1
  304. package/dist/chunk-I6DAQMWX.js.map +0 -1
  305. package/dist/chunk-J36DSWQK.js.map +0 -1
  306. package/dist/chunk-KQCRWDSA.js +0 -1
  307. package/dist/chunk-KQCRWDSA.js.map +0 -1
  308. package/dist/chunk-L4OXEN46.js.map +0 -1
  309. package/dist/chunk-LMC26NLJ.js +0 -84
  310. package/dist/chunk-LMC26NLJ.js.map +0 -1
  311. package/dist/chunk-M43Y4SSO.js.map +0 -1
  312. package/dist/chunk-M7MPQISP.js.map +0 -1
  313. package/dist/chunk-NN6WWZ5U.js.map +0 -1
  314. package/dist/chunk-OEWDTMG7.js.map +0 -1
  315. package/dist/chunk-PWLANIRT.js.map +0 -1
  316. package/dist/chunk-QXHPKYJV.js.map +0 -1
  317. package/dist/chunk-VBXEHIUJ.js.map +0 -1
  318. package/dist/chunk-YKRAFF5K.js.map +0 -1
  319. package/dist/chunk-ZSAAAMVR.js.map +0 -1
  320. package/dist/components.js.map +0 -1
  321. package/dist/contextValidator-OOPCLPZW.js +0 -9
  322. package/dist/contextValidator-OOPCLPZW.js.map +0 -1
  323. package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
  324. package/dist/hooks.js.map +0 -1
  325. package/dist/index.js.map +0 -1
  326. package/dist/providers.js.map +0 -1
  327. package/dist/rbac/eslint-rules.js.map +0 -1
  328. package/dist/rbac/index.js.map +0 -1
  329. package/dist/styles/index.js.map +0 -1
  330. package/dist/theming/runtime.js.map +0 -1
  331. package/dist/types.js.map +0 -1
  332. package/dist/utils.js.map +0 -1
  333. package/docs/standards/01-architecture-standard.md +0 -44
  334. package/docs/standards/02-api-and-rpc-standard.md +0 -39
  335. package/docs/standards/03-component-standard.md +0 -32
  336. package/docs/standards/05-security-standard.md +0 -44
  337. package/docs/standards/06-testing-and-docs-standard.md +0 -29
  338. package/docs/standards/pace-core-compliance.md +0 -432
  339. package/scripts/audit/core/checks/accessibility.cjs +0 -197
  340. package/scripts/audit/core/checks/api-usage.cjs +0 -191
  341. package/scripts/audit/core/checks/bundle.cjs +0 -142
  342. package/scripts/audit/core/checks/compliance.cjs +0 -2706
  343. package/scripts/audit/core/checks/config.cjs +0 -54
  344. package/scripts/audit/core/checks/coverage.cjs +0 -84
  345. package/scripts/audit/core/checks/dependencies.cjs +0 -994
  346. package/scripts/audit/core/checks/documentation.cjs +0 -268
  347. package/scripts/audit/core/checks/environment.cjs +0 -116
  348. package/scripts/audit/core/checks/error-handling.cjs +0 -340
  349. package/scripts/audit/core/checks/forms.cjs +0 -172
  350. package/scripts/audit/core/checks/heuristics.cjs +0 -68
  351. package/scripts/audit/core/checks/hooks.cjs +0 -334
  352. package/scripts/audit/core/checks/imports.cjs +0 -244
  353. package/scripts/audit/core/checks/performance.cjs +0 -325
  354. package/scripts/audit/core/checks/routes.cjs +0 -117
  355. package/scripts/audit/core/checks/state.cjs +0 -130
  356. package/scripts/audit/core/checks/structure.cjs +0 -65
  357. package/scripts/audit/core/checks/style.cjs +0 -584
  358. package/scripts/audit/core/checks/testing.cjs +0 -122
  359. package/scripts/audit/core/checks/typescript.cjs +0 -61
  360. package/scripts/audit/core/scanner.cjs +0 -199
  361. package/scripts/audit/core/utils.cjs +0 -137
  362. package/scripts/audit/reporters/console.cjs +0 -151
  363. package/scripts/audit/reporters/json.cjs +0 -54
  364. package/scripts/audit/reporters/markdown.cjs +0 -124
  365. package/scripts/audit-consuming-app.cjs +0 -86
  366. package/src/eslint-rules/pace-core-compliance.cjs +0 -510
  367. package/src/eslint-rules/pace-core-compliance.js +0 -638
  368. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
  369. package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
  370. package/src/rbac/components/NavigationProvider.test.tsx +0 -481
  371. package/src/rbac/components/NavigationProvider.tsx +0 -345
  372. package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
  373. package/src/rbac/components/PagePermissionProvider.tsx +0 -279
  374. package/src/rbac/components/PermissionEnforcer.tsx +0 -312
  375. package/src/rbac/components/RoleBasedRouter.tsx +0 -440
  376. package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
  377. package/src/rbac/components/SecureDataProvider.tsx +0 -339
  378. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
  379. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
  380. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
  381. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
  382. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
  383. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
  384. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
  385. package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
  386. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
  387. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
@@ -69,6 +69,14 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
69
69
  - [EmptyStateConfig](undefined)
70
70
  - [ExportOptions](undefined)
71
71
  - [ExportColumn](undefined)
72
+ - [DialogProps](undefined)
73
+ - [DialogTriggerProps](undefined)
74
+ - [DialogContentProps](undefined)
75
+ - [DialogPortalProps](undefined)
76
+ - [DialogCloseProps](undefined)
77
+ - [DialogHeaderProps](undefined)
78
+ - [DialogFooterProps](undefined)
79
+ - [DialogBodyProps](undefined)
72
80
  - [ErrorBoundaryState](undefined)
73
81
  - [ErrorBoundaryProps](undefined)
74
82
  - [ErrorBoundaryProviderProps](undefined)
@@ -121,23 +129,9 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
121
129
  - [RuntimeComplianceResult](undefined)
122
130
  - [SetupIssue](undefined)
123
131
  - [ComplianceResult](undefined)
124
- - [EnhancedNavigationMenuProps](undefined)
132
+ - [AccessDeniedProps](undefined)
125
133
  - [NavigationGuardProps](undefined)
126
- - [NavigationAccessRecord](undefined)
127
- - [NavigationContextType](undefined)
128
- - [NavigationProviderProps](undefined)
129
134
  - [PagePermissionGuardProps](undefined)
130
- - [PagePermissionContextType](undefined)
131
- - [PageAccessRecord](undefined)
132
- - [PagePermissionProviderProps](undefined)
133
- - [PermissionEnforcerProps](undefined)
134
- - [RouteConfig](undefined)
135
- - [RouteAccessRecord](undefined)
136
- - [RoleBasedRouterContextType](undefined)
137
- - [RoleBasedRouterProps](undefined)
138
- - [DataAccessRecord](undefined)
139
- - [SecureDataContextType](undefined)
140
- - [SecureDataProviderProps](undefined)
141
135
  - [RBACConfig](undefined)
142
136
  - [RBACLogger](undefined)
143
137
  - [UseResolvedScopeOptions](undefined)
@@ -200,6 +194,7 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
200
194
  - [BadgeVariant](undefined)
201
195
  - [GetRowId](undefined)
202
196
  - [DataTableFeatureConfig](undefined)
197
+ - [DialogSize](undefined)
203
198
  - [GlobalErrorHandler](undefined)
204
199
  - [NavigationMode](undefined)
205
200
  - [UseFileReferenceOptions](undefined)
@@ -275,9 +270,8 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
275
270
  - [Dialog](undefined)
276
271
  - [DialogTrigger](undefined)
277
272
  - [DialogPortal](undefined)
278
- - [DialogClose](undefined)
279
- - [DialogOverlay](undefined)
280
273
  - [DialogContent](undefined)
274
+ - [DialogClose](undefined)
281
275
  - [DialogHeader](undefined)
282
276
  - [DialogBody](undefined)
283
277
  - [DialogFooter](undefined)
@@ -383,15 +377,11 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
383
377
  - [OrganisationServiceProvider](undefined)
384
378
  - [useUnifiedAuth](undefined)
385
379
  - [UnifiedAuthProvider](undefined)
386
- - [PermissionGuard](undefined)
387
- - [AccessLevelGuard](undefined)
388
380
  - [withPermissionGuard](undefined)
389
381
  - [withAccessLevelGuard](undefined)
390
382
  - [withRoleGuard](undefined)
391
383
  - [createRBACMiddleware](undefined)
392
384
  - [createRBACExpressMiddleware](undefined)
393
- - [hasPermissionCached](undefined)
394
- - [hasAnyPermissionCached](undefined)
395
385
  - [setupRBAC](undefined)
396
386
  - [getAccessLevel](undefined)
397
387
  - [getPermissionMap](undefined)
@@ -399,7 +389,6 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
399
389
  - [getRoleContext](undefined)
400
390
  - [isPermitted](undefined)
401
391
  - [isPermittedCached](undefined)
402
- - [hasPermission](undefined)
403
392
  - [hasAnyPermission](undefined)
404
393
  - [hasAllPermissions](undefined)
405
394
  - [createAuditManager](undefined)
@@ -417,18 +406,9 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
417
406
  - [isRBACInitialized](undefined)
418
407
  - [getSetupIssues](undefined)
419
408
  - [validateRBACSetup](undefined)
420
- - [EnhancedNavigationMenu](undefined)
409
+ - [AccessDenied](undefined)
421
410
  - [NavigationGuard](undefined)
422
- - [NavigationProvider](undefined)
423
- - [useNavigationPermissions](undefined)
424
411
  - [PagePermissionGuard](undefined)
425
- - [PagePermissionProvider](undefined)
426
- - [usePagePermissions](undefined)
427
- - [PermissionEnforcer](undefined)
428
- - [RoleBasedRouter](undefined)
429
- - [useRoleBasedRouter](undefined)
430
- - [SecureDataProvider](undefined)
431
- - [useSecureData](undefined)
432
412
  - [createRBACConfig](undefined)
433
413
  - [getRBACConfig](undefined)
434
414
  - [getRBACLogger](undefined)
@@ -436,10 +416,7 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
436
416
  - [isDevelopmentMode](undefined)
437
417
  - [createRBACEngine](undefined)
438
418
  - [useAccessLevel](undefined)
439
- - [useCachedPermissions](undefined)
440
419
  - [useCan](undefined)
441
- - [useHasAllPermissions](undefined)
442
- - [useHasAnyPermission](undefined)
443
420
  - [useMultiplePermissions](undefined)
444
421
  - [usePermissions](undefined)
445
422
  - [useRBAC](undefined)
@@ -497,6 +474,7 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
497
474
  - [listFiles](undefined)
498
475
  - [downloadFile](undefined)
499
476
  - [archiveFile](undefined)
477
+ - [createBaseClient](undefined)
500
478
  - [formatInTimeZone](undefined)
501
479
  - [getTimezoneAbbreviation](undefined)
502
480
  - [formatTimeInTimeZone](undefined)
@@ -505,6 +483,9 @@ import { Dialog, NavigationMenu } from '@jmruthers/pace-core/components';
505
483
  - [fromZonedTime](undefined)
506
484
  - [roundToNearestMinutes](undefined)
507
485
  - [getTimeZoneDifference](undefined)
486
+ - [sanitizeHtml](undefined)
487
+ - [sanitizeUserInput](undefined)
488
+ - [sanitizeFormData](undefined)
508
489
 
509
490
  ## Enumerations
510
491
 
@@ -776,7 +757,7 @@ Extends standard button HTML attributes.
776
757
 
777
758
  #### Defined in
778
759
 
779
- [packages/core/src/components/Button/Button.tsx:66](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Button/Button.tsx#L66)
760
+ [packages/core/src/components/Button/Button.tsx:70](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Button/Button.tsx#L70)
780
761
 
781
762
  ___
782
763
 
@@ -846,7 +827,7 @@ Individual implementations should define more specific types
846
827
 
847
828
  #### Defined in
848
829
 
849
- [packages/core/src/components/DataTable/types.ts:44](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L44)
830
+ [packages/core/src/components/DataTable/types.ts:49](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L49)
850
831
 
851
832
  ___
852
833
 
@@ -864,7 +845,7 @@ Enhanced column definition that extends TanStack's ColumnDef
864
845
 
865
846
  #### Defined in
866
847
 
867
- [packages/core/src/components/DataTable/types.ts:258](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L258)
848
+ [packages/core/src/components/DataTable/types.ts:263](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L263)
868
849
 
869
850
  ___
870
851
 
@@ -883,7 +864,7 @@ Defines custom actions that can be performed on table rows.
883
864
 
884
865
  #### Defined in
885
866
 
886
- [packages/core/src/components/DataTable/types.ts:392](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L392)
867
+ [packages/core/src/components/DataTable/types.ts:397](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L397)
887
868
 
888
869
  ___
889
870
 
@@ -895,7 +876,7 @@ Toolbar button definition
895
876
 
896
877
  #### Defined in
897
878
 
898
- [packages/core/src/components/DataTable/types.ts:432](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L432)
879
+ [packages/core/src/components/DataTable/types.ts:437](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L437)
899
880
 
900
881
  ___
901
882
 
@@ -907,7 +888,7 @@ Aggregate configuration
907
888
 
908
889
  #### Defined in
909
890
 
910
- [packages/core/src/components/DataTable/types.ts:454](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L454)
891
+ [packages/core/src/components/DataTable/types.ts:459](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L459)
911
892
 
912
893
  ___
913
894
 
@@ -919,7 +900,7 @@ Empty state configuration
919
900
 
920
901
  #### Defined in
921
902
 
922
- [packages/core/src/components/DataTable/types.ts:463](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L463)
903
+ [packages/core/src/components/DataTable/types.ts:468](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L468)
923
904
 
924
905
  ___
925
906
 
@@ -956,7 +937,7 @@ Options provided to the onExport handler for custom export functionality
956
937
 
957
938
  #### Defined in
958
939
 
959
- [packages/core/src/components/DataTable/types.ts:641](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L641)
940
+ [packages/core/src/components/DataTable/types.ts:646](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L646)
960
941
 
961
942
  ___
962
943
 
@@ -972,6 +953,103 @@ Column definition for export
972
953
 
973
954
  ___
974
955
 
956
+ ### DialogProps
957
+
958
+ • **DialogProps**: Interface DialogProps
959
+
960
+ Props for the Dialog root component
961
+
962
+ #### Defined in
963
+
964
+ [packages/core/src/components/Dialog/Dialog.tsx:167](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L167)
965
+
966
+ ___
967
+
968
+ ### DialogTriggerProps
969
+
970
+ • **DialogTriggerProps**: Interface DialogTriggerProps
971
+
972
+ Props for the DialogTrigger component
973
+
974
+ #### Defined in
975
+
976
+ [packages/core/src/components/Dialog/Dialog.tsx:178](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L178)
977
+
978
+ ___
979
+
980
+ ### DialogContentProps
981
+
982
+ • **DialogContentProps**: Interface DialogContentProps
983
+
984
+ Enhanced props for the DialogContent component with size variants and customization
985
+ Uses semantic HTML dialog element
986
+
987
+ #### Defined in
988
+
989
+ [packages/core/src/components/Dialog/Dialog.tsx:190](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L190)
990
+
991
+ ___
992
+
993
+ ### DialogPortalProps
994
+
995
+ • **DialogPortalProps**: Interface DialogPortalProps
996
+
997
+ Props for the DialogPortal component
998
+
999
+ #### Defined in
1000
+
1001
+ [packages/core/src/components/Dialog/Dialog.tsx:231](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L231)
1002
+
1003
+ ___
1004
+
1005
+ ### DialogCloseProps
1006
+
1007
+ • **DialogCloseProps**: Interface DialogCloseProps
1008
+
1009
+ Props for the DialogClose component
1010
+
1011
+ #### Defined in
1012
+
1013
+ [packages/core/src/components/Dialog/Dialog.tsx:239](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L239)
1014
+
1015
+ ___
1016
+
1017
+ ### DialogHeaderProps
1018
+
1019
+ • **DialogHeaderProps**: Interface DialogHeaderProps
1020
+
1021
+ Props for the DialogHeader component (semantic header element)
1022
+
1023
+ #### Defined in
1024
+
1025
+ [packages/core/src/components/Dialog/Dialog.tsx:245](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L245)
1026
+
1027
+ ___
1028
+
1029
+ ### DialogFooterProps
1030
+
1031
+ • **DialogFooterProps**: Interface DialogFooterProps
1032
+
1033
+ Props for the DialogFooter component (semantic footer element)
1034
+
1035
+ #### Defined in
1036
+
1037
+ [packages/core/src/components/Dialog/Dialog.tsx:254](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L254)
1038
+
1039
+ ___
1040
+
1041
+ ### DialogBodyProps
1042
+
1043
+ • **DialogBodyProps**: Interface DialogBodyProps
1044
+
1045
+ Props for the DialogBody component (semantic main element)
1046
+
1047
+ #### Defined in
1048
+
1049
+ [packages/core/src/components/Dialog/Dialog.tsx:263](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L263)
1050
+
1051
+ ___
1052
+
975
1053
  ### ErrorBoundaryState
976
1054
 
977
1055
  • **ErrorBoundaryState**: Interface ErrorBoundaryState
@@ -1057,7 +1135,7 @@ Props for the Form component
1057
1135
 
1058
1136
  #### Defined in
1059
1137
 
1060
- [packages/core/src/components/Form/Form.tsx:84](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L84)
1138
+ [packages/core/src/components/Form/Form.tsx:88](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L88)
1061
1139
 
1062
1140
  ___
1063
1141
 
@@ -1076,7 +1154,7 @@ Props for the FormField component
1076
1154
 
1077
1155
  #### Defined in
1078
1156
 
1079
- [packages/core/src/components/Form/Form.tsx:173](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L173)
1157
+ [packages/core/src/components/Form/Form.tsx:533](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L533)
1080
1158
 
1081
1159
  ___
1082
1160
 
@@ -1086,7 +1164,7 @@ ___
1086
1164
 
1087
1165
  #### Defined in
1088
1166
 
1089
- [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:55](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L55)
1167
+ [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:56](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L56)
1090
1168
 
1091
1169
  ___
1092
1170
 
@@ -1161,7 +1239,7 @@ Configures the application layout including navigation, header, and footer.
1161
1239
 
1162
1240
  #### Defined in
1163
1241
 
1164
- [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:129](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L129)
1242
+ [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:132](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L132)
1165
1243
 
1166
1244
  ___
1167
1245
 
@@ -1335,7 +1413,7 @@ Props for the UserMenu component.
1335
1413
 
1336
1414
  #### Defined in
1337
1415
 
1338
- [packages/core/src/components/UserMenu/UserMenu.tsx:132](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L132)
1416
+ [packages/core/src/components/UserMenu/UserMenu.tsx:130](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L130)
1339
1417
 
1340
1418
  ___
1341
1419
 
@@ -1563,7 +1641,7 @@ ___
1563
1641
 
1564
1642
  #### Defined in
1565
1643
 
1566
- [packages/core/src/rbac/compliance/runtime-compliance.ts:13](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/compliance/runtime-compliance.ts#L13)
1644
+ [packages/core/src/rbac/compliance/runtime-compliance.ts:14](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/compliance/runtime-compliance.ts#L14)
1567
1645
 
1568
1646
  ___
1569
1647
 
@@ -1587,13 +1665,13 @@ ___
1587
1665
 
1588
1666
  ___
1589
1667
 
1590
- ### EnhancedNavigationMenuProps
1668
+ ### AccessDeniedProps
1591
1669
 
1592
- • **EnhancedNavigationMenuProps**: Interface EnhancedNavigationMenuProps
1670
+ • **AccessDeniedProps**: Interface AccessDeniedProps
1593
1671
 
1594
1672
  #### Defined in
1595
1673
 
1596
- [packages/core/src/rbac/components/EnhancedNavigationMenu.tsx:63](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/EnhancedNavigationMenu.tsx#L63)
1674
+ [packages/core/src/rbac/components/AccessDenied.tsx:46](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/AccessDenied.tsx#L46)
1597
1675
 
1598
1676
  ___
1599
1677
 
@@ -1603,37 +1681,7 @@ ___
1603
1681
 
1604
1682
  #### Defined in
1605
1683
 
1606
- [packages/core/src/rbac/components/NavigationGuard.tsx:75](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationGuard.tsx#L75)
1607
-
1608
- ___
1609
-
1610
- ### NavigationAccessRecord
1611
-
1612
- • **NavigationAccessRecord**: Interface NavigationAccessRecord
1613
-
1614
- #### Defined in
1615
-
1616
- [packages/core/src/rbac/components/NavigationProvider.tsx:99](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationProvider.tsx#L99)
1617
-
1618
- ___
1619
-
1620
- ### NavigationContextType
1621
-
1622
- • **NavigationContextType**: Interface NavigationContextType
1623
-
1624
- #### Defined in
1625
-
1626
- [packages/core/src/rbac/components/NavigationProvider.tsx:111](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationProvider.tsx#L111)
1627
-
1628
- ___
1629
-
1630
- ### NavigationProviderProps
1631
-
1632
- • **NavigationProviderProps**: Interface NavigationProviderProps
1633
-
1634
- #### Defined in
1635
-
1636
- [packages/core/src/rbac/components/NavigationProvider.tsx:137](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationProvider.tsx#L137)
1684
+ [packages/core/src/rbac/components/NavigationGuard.tsx:76](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationGuard.tsx#L76)
1637
1685
 
1638
1686
  ___
1639
1687
 
@@ -1643,117 +1691,7 @@ ___
1643
1691
 
1644
1692
  #### Defined in
1645
1693
 
1646
- [packages/core/src/rbac/components/PagePermissionGuard.tsx:78](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionGuard.tsx#L78)
1647
-
1648
- ___
1649
-
1650
- ### PagePermissionContextType
1651
-
1652
- • **PagePermissionContextType**: Interface PagePermissionContextType
1653
-
1654
- #### Defined in
1655
-
1656
- [packages/core/src/rbac/components/PagePermissionProvider.tsx:65](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionProvider.tsx#L65)
1657
-
1658
- ___
1659
-
1660
- ### PageAccessRecord
1661
-
1662
- • **PageAccessRecord**: Interface PageAccessRecord
1663
-
1664
- #### Defined in
1665
-
1666
- [packages/core/src/rbac/components/PagePermissionProvider.tsx:88](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionProvider.tsx#L88)
1667
-
1668
- ___
1669
-
1670
- ### PagePermissionProviderProps
1671
-
1672
- • **PagePermissionProviderProps**: Interface PagePermissionProviderProps
1673
-
1674
- #### Defined in
1675
-
1676
- [packages/core/src/rbac/components/PagePermissionProvider.tsx:98](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionProvider.tsx#L98)
1677
-
1678
- ___
1679
-
1680
- ### PermissionEnforcerProps
1681
-
1682
- • **PermissionEnforcerProps**: Interface PermissionEnforcerProps
1683
-
1684
- #### Defined in
1685
-
1686
- [packages/core/src/rbac/components/PermissionEnforcer.tsx:79](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PermissionEnforcer.tsx#L79)
1687
-
1688
- ___
1689
-
1690
- ### RouteConfig
1691
-
1692
- • **RouteConfig**: Interface RouteConfig
1693
-
1694
- #### Defined in
1695
-
1696
- [packages/core/src/rbac/components/RoleBasedRouter.tsx:74](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/RoleBasedRouter.tsx#L74)
1697
-
1698
- ___
1699
-
1700
- ### RouteAccessRecord
1701
-
1702
- • **RouteAccessRecord**: Interface RouteAccessRecord
1703
-
1704
- #### Defined in
1705
-
1706
- [packages/core/src/rbac/components/RoleBasedRouter.tsx:108](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/RoleBasedRouter.tsx#L108)
1707
-
1708
- ___
1709
-
1710
- ### RoleBasedRouterContextType
1711
-
1712
- • **RoleBasedRouterContextType**: Interface RoleBasedRouterContextType
1713
-
1714
- #### Defined in
1715
-
1716
- [packages/core/src/rbac/components/RoleBasedRouter.tsx:120](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/RoleBasedRouter.tsx#L120)
1717
-
1718
- ___
1719
-
1720
- ### RoleBasedRouterProps
1721
-
1722
- • **RoleBasedRouterProps**: Interface RoleBasedRouterProps
1723
-
1724
- #### Defined in
1725
-
1726
- [packages/core/src/rbac/components/RoleBasedRouter.tsx:143](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/RoleBasedRouter.tsx#L143)
1727
-
1728
- ___
1729
-
1730
- ### DataAccessRecord
1731
-
1732
- • **DataAccessRecord**: Interface DataAccessRecord
1733
-
1734
- #### Defined in
1735
-
1736
- [packages/core/src/rbac/components/SecureDataProvider.tsx:67](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/SecureDataProvider.tsx#L67)
1737
-
1738
- ___
1739
-
1740
- ### SecureDataContextType
1741
-
1742
- • **SecureDataContextType**: Interface SecureDataContextType
1743
-
1744
- #### Defined in
1745
-
1746
- [packages/core/src/rbac/components/SecureDataProvider.tsx:78](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/SecureDataProvider.tsx#L78)
1747
-
1748
- ___
1749
-
1750
- ### SecureDataProviderProps
1751
-
1752
- • **SecureDataProviderProps**: Interface SecureDataProviderProps
1753
-
1754
- #### Defined in
1755
-
1756
- [packages/core/src/rbac/components/SecureDataProvider.tsx:104](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/SecureDataProvider.tsx#L104)
1694
+ [packages/core/src/rbac/components/PagePermissionGuard.tsx:79](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionGuard.tsx#L79)
1757
1695
 
1758
1696
  ___
1759
1697
 
@@ -1793,7 +1731,7 @@ ___
1793
1731
 
1794
1732
  #### Defined in
1795
1733
 
1796
- [packages/core/src/rbac/hooks/useResolvedScope.ts:40](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResolvedScope.ts#L40)
1734
+ [packages/core/src/rbac/hooks/useResolvedScope.ts:42](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResolvedScope.ts#L42)
1797
1735
 
1798
1736
  ___
1799
1737
 
@@ -1803,7 +1741,7 @@ ___
1803
1741
 
1804
1742
  #### Defined in
1805
1743
 
1806
- [packages/core/src/rbac/hooks/useResourcePermissions.ts:51](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L51)
1744
+ [packages/core/src/rbac/hooks/useResourcePermissions.ts:54](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L54)
1807
1745
 
1808
1746
  ___
1809
1747
 
@@ -1813,7 +1751,7 @@ ___
1813
1751
 
1814
1752
  #### Defined in
1815
1753
 
1816
- [packages/core/src/rbac/hooks/useResourcePermissions.ts:58](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L58)
1754
+ [packages/core/src/rbac/hooks/useResourcePermissions.ts:61](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L61)
1817
1755
 
1818
1756
  ___
1819
1757
 
@@ -2404,7 +2342,7 @@ RowId
2404
2342
 
2405
2343
  #### Defined in
2406
2344
 
2407
- [packages/core/src/components/DataTable/types.ts:56](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L56)
2345
+ [packages/core/src/components/DataTable/types.ts:61](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L61)
2408
2346
 
2409
2347
  ___
2410
2348
 
@@ -2418,7 +2356,19 @@ ergonomic while maintaining strict internal guarantees.
2418
2356
 
2419
2357
  #### Defined in
2420
2358
 
2421
- [packages/core/src/components/DataTable/types.ts:531](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L531)
2359
+ [packages/core/src/components/DataTable/types.ts:536](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/DataTable/types.ts#L536)
2360
+
2361
+ ___
2362
+
2363
+ ### DialogSize
2364
+
2365
+ Ƭ **DialogSize**: "sm" \| "md" \| "lg" \| "xl" \| "full" \| "auto"
2366
+
2367
+ Dialog size variants
2368
+
2369
+ #### Defined in
2370
+
2371
+ [packages/core/src/components/Dialog/Dialog.tsx:135](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L135)
2422
2372
 
2423
2373
  ___
2424
2374
 
@@ -3311,7 +3261,7 @@ ReactNode
3311
3261
 
3312
3262
  #### Defined in
3313
3263
 
3314
- [packages/core/src/components/Button/Button.tsx:119](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Button/Button.tsx#L119)
3264
+ [packages/core/src/components/Button/Button.tsx:123](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Button/Button.tsx#L123)
3315
3265
 
3316
3266
  ___
3317
3267
 
@@ -3960,7 +3910,7 @@ ___
3960
3910
 
3961
3911
  ### Dialog
3962
3912
 
3963
- ▸ **Dialog**(`props`): ReactNode \| Promise\<ReactNode\>
3913
+ ▸ **Dialog**(`props`): ReactNode
3964
3914
 
3965
3915
  #### Parameters
3966
3916
 
@@ -3970,11 +3920,11 @@ ___
3970
3920
 
3971
3921
  #### Returns
3972
3922
 
3973
- ReactNode \| Promise\<ReactNode\>
3923
+ ReactNode
3974
3924
 
3975
3925
  #### Defined in
3976
3926
 
3977
- [packages/core/src/components/Dialog/Dialog.tsx:316](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L316)
3927
+ [packages/core/src/components/Dialog/Dialog.tsx:312](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L312)
3978
3928
 
3979
3929
  ___
3980
3930
 
@@ -3986,7 +3936,7 @@ ___
3986
3936
 
3987
3937
  | Name | Type |
3988
3938
  | :------ | :------ |
3989
- | `props` | DialogTriggerProps & RefAttributes\<HTMLButtonElement\> |
3939
+ | `props` | DialogTriggerProps & RefAttributes\<HTMLElement\> |
3990
3940
 
3991
3941
  #### Returns
3992
3942
 
@@ -3994,7 +3944,7 @@ ReactNode
3994
3944
 
3995
3945
  #### Defined in
3996
3946
 
3997
- [packages/core/src/components/Dialog/Dialog.tsx:317](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L317)
3947
+ [packages/core/src/components/Dialog/Dialog.tsx:380](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L380)
3998
3948
 
3999
3949
  ___
4000
3950
 
@@ -4014,135 +3964,111 @@ ReactNode \| Promise\<ReactNode\>
4014
3964
 
4015
3965
  #### Defined in
4016
3966
 
4017
- [packages/core/src/components/Dialog/Dialog.tsx:318](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L318)
3967
+ [packages/core/src/components/Dialog/Dialog.tsx:417](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L417)
3968
+
3969
+ [packages/core/src/components/Dialog/Dialog.tsx:429](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L429)
4018
3970
 
4019
3971
  ___
4020
3972
 
4021
- ### DialogClose
3973
+ ### DialogContent
4022
3974
 
4023
- ▸ **DialogClose**(`props`): ReactNode
3975
+ ▸ **DialogContent**(`props`): ReactNode
4024
3976
 
4025
3977
  #### Parameters
4026
3978
 
4027
- | Name | Type |
4028
- | :------ | :------ |
4029
- | `props` | DialogCloseProps & RefAttributes\<HTMLButtonElement\> |
3979
+ | Name | Type | Description |
3980
+ | :------ | :------ | :------ |
3981
+ | `props` | DialogContentProps & RefAttributes\<HTMLDialogElement\> | Content configuration and styling |
4030
3982
 
4031
3983
  #### Returns
4032
3984
 
4033
3985
  ReactNode
4034
3986
 
3987
+ JSX.Element - The semantic dialog content with overlay and optional close button
3988
+
4035
3989
  #### Defined in
4036
3990
 
4037
- [packages/core/src/components/Dialog/Dialog.tsx:319](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L319)
3991
+ [packages/core/src/components/Dialog/Dialog.tsx:641](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L641)
4038
3992
 
4039
3993
  ___
4040
3994
 
4041
- ### DialogOverlay
3995
+ ### DialogClose
4042
3996
 
4043
- ▸ **DialogOverlay**(`props`): ReactNode
3997
+ ▸ **DialogClose**(`props`): ReactNode
4044
3998
 
4045
3999
  #### Parameters
4046
4000
 
4047
4001
  | Name | Type |
4048
4002
  | :------ | :------ |
4049
- | `props` | DialogOverlayProps & RefAttributes\<HTMLDivElement\> |
4050
-
4051
- #### Returns
4052
-
4053
- ReactNode
4054
-
4055
- #### Defined in
4056
-
4057
- [packages/core/src/components/Dialog/Dialog.tsx:322](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L322)
4058
-
4059
- ___
4060
-
4061
- ### DialogContent
4062
-
4063
- ▸ **DialogContent**(`props`): ReactNode
4064
-
4065
- #### Parameters
4066
-
4067
- | Name | Type | Description |
4068
- | :------ | :------ | :------ |
4069
- | `props` | DialogContentProps & RefAttributes\<HTMLDivElement\> | Content configuration and styling |
4003
+ | `props` | DialogCloseProps & RefAttributes\<HTMLButtonElement\> |
4070
4004
 
4071
4005
  #### Returns
4072
4006
 
4073
4007
  ReactNode
4074
4008
 
4075
- JSX.Element - The semantic dialog content with overlay and optional close button
4076
-
4077
4009
  #### Defined in
4078
4010
 
4079
- [packages/core/src/components/Dialog/Dialog.tsx:465](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L465)
4011
+ [packages/core/src/components/Dialog/Dialog.tsx:1366](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L1366)
4080
4012
 
4081
4013
  ___
4082
4014
 
4083
4015
  ### DialogHeader
4084
4016
 
4085
- ▸ **DialogHeader**(`props`): Element
4017
+ ▸ **DialogHeader**(`«destructured»`): Element
4086
4018
 
4087
4019
  #### Parameters
4088
4020
 
4089
- | Name | Type | Description |
4090
- | :------ | :------ | :------ |
4091
- | `props` | DialogHeaderProps | Header configuration and styling |
4021
+ | Name | Type |
4022
+ | :------ | :------ |
4023
+ | `«destructured»` | DialogHeaderProps |
4092
4024
 
4093
4025
  #### Returns
4094
4026
 
4095
4027
  Element
4096
4028
 
4097
- JSX.Element - The dialog header container using semantic <header> element
4098
-
4099
4029
  #### Defined in
4100
4030
 
4101
- [packages/core/src/components/Dialog/Dialog.tsx:584](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L584)
4031
+ [packages/core/src/components/Dialog/Dialog.tsx:1409](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L1409)
4102
4032
 
4103
4033
  ___
4104
4034
 
4105
4035
  ### DialogBody
4106
4036
 
4107
- ▸ **DialogBody**(`props`): Element
4037
+ ▸ **DialogBody**(`«destructured»`): Element
4108
4038
 
4109
4039
  #### Parameters
4110
4040
 
4111
- | Name | Type | Description |
4112
- | :------ | :------ | :------ |
4113
- | `props` | DialogBodyProps | Body configuration and styling |
4041
+ | Name | Type |
4042
+ | :------ | :------ |
4043
+ | `«destructured»` | DialogBodyProps |
4114
4044
 
4115
4045
  #### Returns
4116
4046
 
4117
4047
  Element
4118
4048
 
4119
- JSX.Element - The scrollable dialog body container using semantic <main> element
4120
-
4121
4049
  #### Defined in
4122
4050
 
4123
- [packages/core/src/components/Dialog/Dialog.tsx:625](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L625)
4051
+ [packages/core/src/components/Dialog/Dialog.tsx:1429](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L1429)
4124
4052
 
4125
4053
  ___
4126
4054
 
4127
4055
  ### DialogFooter
4128
4056
 
4129
- ▸ **DialogFooter**(`props`): Element
4057
+ ▸ **DialogFooter**(`«destructured»`): Element
4130
4058
 
4131
4059
  #### Parameters
4132
4060
 
4133
- | Name | Type | Description |
4134
- | :------ | :------ | :------ |
4135
- | `props` | DialogFooterProps | Footer configuration and styling |
4061
+ | Name | Type |
4062
+ | :------ | :------ |
4063
+ | `«destructured»` | DialogFooterProps |
4136
4064
 
4137
4065
  #### Returns
4138
4066
 
4139
4067
  Element
4140
4068
 
4141
- JSX.Element - The dialog footer container using semantic <footer> element
4142
-
4143
4069
  #### Defined in
4144
4070
 
4145
- [packages/core/src/components/Dialog/Dialog.tsx:706](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L706)
4071
+ [packages/core/src/components/Dialog/Dialog.tsx:1531](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L1531)
4146
4072
 
4147
4073
  ___
4148
4074
 
@@ -4162,7 +4088,7 @@ ReactNode
4162
4088
 
4163
4089
  #### Defined in
4164
4090
 
4165
- [packages/core/src/components/Dialog/Dialog.tsx:723](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L723)
4091
+ [packages/core/src/components/Dialog/Dialog.tsx:1551](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L1551)
4166
4092
 
4167
4093
  ___
4168
4094
 
@@ -4174,7 +4100,7 @@ ___
4174
4100
 
4175
4101
  | Name | Type |
4176
4102
  | :------ | :------ |
4177
- | `props` | DialogDescriptionProps & RefAttributes\<HTMLHeadingElement\> |
4103
+ | `props` | DialogDescriptionProps & RefAttributes\<HTMLParagraphElement\> |
4178
4104
 
4179
4105
  #### Returns
4180
4106
 
@@ -4182,7 +4108,7 @@ ReactNode
4182
4108
 
4183
4109
  #### Defined in
4184
4110
 
4185
- [packages/core/src/components/Dialog/Dialog.tsx:758](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L758)
4111
+ [packages/core/src/components/Dialog/Dialog.tsx:1590](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Dialog/Dialog.tsx#L1590)
4186
4112
 
4187
4113
  ___
4188
4114
 
@@ -4252,7 +4178,7 @@ The rendered file display
4252
4178
 
4253
4179
  #### Defined in
4254
4180
 
4255
- [packages/core/src/components/FileDisplay/FileDisplay.tsx:955](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/FileDisplay/FileDisplay.tsx#L955)
4181
+ [packages/core/src/components/FileDisplay/FileDisplay.tsx:961](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/FileDisplay/FileDisplay.tsx#L961)
4256
4182
 
4257
4183
  ___
4258
4184
 
@@ -4337,7 +4263,7 @@ JSX.Element - The rendered form with FormProvider context
4337
4263
 
4338
4264
  #### Defined in
4339
4265
 
4340
- [packages/core/src/components/Form/Form.tsx:143](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L143)
4266
+ [packages/core/src/components/Form/Form.tsx:147](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L147)
4341
4267
 
4342
4268
  ___
4343
4269
 
@@ -4429,7 +4355,7 @@ JSX.Element - The rendered form field with validation
4429
4355
 
4430
4356
  #### Defined in
4431
4357
 
4432
- [packages/core/src/components/Form/Form.tsx:308](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L308)
4358
+ [packages/core/src/components/Form/Form.tsx:668](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Form/Form.tsx#L668)
4433
4359
 
4434
4360
  ___
4435
4361
 
@@ -4474,7 +4400,7 @@ Element
4474
4400
 
4475
4401
  #### Defined in
4476
4402
 
4477
- [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:72](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L72)
4403
+ [packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx:73](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/InactivityWarningModal/InactivityWarningModal.tsx#L73)
4478
4404
 
4479
4405
  ___
4480
4406
 
@@ -4778,7 +4704,7 @@ function AdminApp() {
4778
4704
 
4779
4705
  #### Defined in
4780
4706
 
4781
- [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:352](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L352)
4707
+ [packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx:355](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PaceAppLayout/PaceAppLayout.tsx#L355)
4782
4708
 
4783
4709
  ___
4784
4710
 
@@ -4820,7 +4746,7 @@ Element
4820
4746
 
4821
4747
  #### Defined in
4822
4748
 
4823
- [packages/core/src/components/PasswordChange/PasswordChangeForm.tsx:130](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PasswordChange/PasswordChangeForm.tsx#L130)
4749
+ [packages/core/src/components/PasswordChange/PasswordChangeForm.tsx:133](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/PasswordChange/PasswordChangeForm.tsx#L133)
4824
4750
 
4825
4751
  ___
4826
4752
 
@@ -5023,7 +4949,7 @@ ___
5023
4949
 
5024
4950
  | Name | Type | Description |
5025
4951
  | :------ | :------ | :------ |
5026
- | `props` | SelectProps & UseSelectStateProps & RefAttributes\<HTMLFormElement\> | Select configuration |
4952
+ | `props` | SelectProps & UseSelectStateProps & RefAttributes\<HTMLFieldSetElement\> | Select configuration |
5027
4953
 
5028
4954
  #### Returns
5029
4955
 
@@ -5055,7 +4981,7 @@ The rendered select trigger
5055
4981
 
5056
4982
  #### Defined in
5057
4983
 
5058
- [packages/core/src/components/Select/Select.tsx:235](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L235)
4984
+ [packages/core/src/components/Select/Select.tsx:231](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L231)
5059
4985
 
5060
4986
  ___
5061
4987
 
@@ -5077,7 +5003,7 @@ The rendered select value display
5077
5003
 
5078
5004
  #### Defined in
5079
5005
 
5080
- [packages/core/src/components/Select/Select.tsx:409](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L409)
5006
+ [packages/core/src/components/Select/Select.tsx:407](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L407)
5081
5007
 
5082
5008
  ___
5083
5009
 
@@ -5099,7 +5025,7 @@ The rendered select content
5099
5025
 
5100
5026
  #### Defined in
5101
5027
 
5102
- [packages/core/src/components/Select/Select.tsx:439](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L439)
5028
+ [packages/core/src/components/Select/Select.tsx:437](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L437)
5103
5029
 
5104
5030
  ___
5105
5031
 
@@ -5121,7 +5047,7 @@ The rendered select item
5121
5047
 
5122
5048
  #### Defined in
5123
5049
 
5124
- [packages/core/src/components/Select/Select.tsx:555](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L555)
5050
+ [packages/core/src/components/Select/Select.tsx:553](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L553)
5125
5051
 
5126
5052
  ___
5127
5053
 
@@ -5143,7 +5069,7 @@ The rendered select group
5143
5069
 
5144
5070
  #### Defined in
5145
5071
 
5146
- [packages/core/src/components/Select/Select.tsx:658](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L658)
5072
+ [packages/core/src/components/Select/Select.tsx:660](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L660)
5147
5073
 
5148
5074
  ___
5149
5075
 
@@ -5165,7 +5091,7 @@ The rendered select label
5165
5091
 
5166
5092
  #### Defined in
5167
5093
 
5168
- [packages/core/src/components/Select/Select.tsx:677](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L677)
5094
+ [packages/core/src/components/Select/Select.tsx:679](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L679)
5169
5095
 
5170
5096
  ___
5171
5097
 
@@ -5187,7 +5113,7 @@ The rendered select separator
5187
5113
 
5188
5114
  #### Defined in
5189
5115
 
5190
- [packages/core/src/components/Select/Select.tsx:696](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L696)
5116
+ [packages/core/src/components/Select/Select.tsx:698](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/Select/Select.tsx#L698)
5191
5117
 
5192
5118
  ___
5193
5119
 
@@ -5824,7 +5750,7 @@ ReactNode
5824
5750
 
5825
5751
  #### Defined in
5826
5752
 
5827
- [packages/core/src/components/UserMenu/UserMenu.tsx:140](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L140)
5753
+ [packages/core/src/components/UserMenu/UserMenu.tsx:138](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/components/UserMenu/UserMenu.tsx#L138)
5828
5754
 
5829
5755
  ___
5830
5756
 
@@ -5869,7 +5795,7 @@ void
5869
5795
 
5870
5796
  #### Defined in
5871
5797
 
5872
- [packages/core/src/hooks/public/usePublicEvent.ts:413](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEvent.ts#L413)
5798
+ [packages/core/src/hooks/public/usePublicEvent.ts:285](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEvent.ts#L285)
5873
5799
 
5874
5800
  ___
5875
5801
 
@@ -5890,7 +5816,7 @@ Object
5890
5816
 
5891
5817
  #### Defined in
5892
5818
 
5893
- [packages/core/src/hooks/public/usePublicEvent.ts:424](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEvent.ts#L424)
5819
+ [packages/core/src/hooks/public/usePublicEvent.ts:296](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEvent.ts#L296)
5894
5820
 
5895
5821
  ___
5896
5822
 
@@ -5937,7 +5863,7 @@ void
5937
5863
 
5938
5864
  #### Defined in
5939
5865
 
5940
- [packages/core/src/hooks/public/usePublicEventLogo.ts:275](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEventLogo.ts#L275)
5866
+ [packages/core/src/hooks/public/usePublicEventLogo.ts:285](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEventLogo.ts#L285)
5941
5867
 
5942
5868
  ___
5943
5869
 
@@ -5958,7 +5884,7 @@ Object
5958
5884
 
5959
5885
  #### Defined in
5960
5886
 
5961
- [packages/core/src/hooks/public/usePublicEventLogo.ts:286](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEventLogo.ts#L286)
5887
+ [packages/core/src/hooks/public/usePublicEventLogo.ts:296](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/public/usePublicEventLogo.ts#L296)
5962
5888
 
5963
5889
  ___
5964
5890
 
@@ -6254,20 +6180,24 @@ function MyComponent() {
6254
6180
  const { events, selectedEvent, setSelectedEvent } = useEvents();
6255
6181
 
6256
6182
  return (
6257
- <div>
6258
- {events.map(event => (
6259
- <button key={event.id} onClick={() => setSelectedEvent(event)}>
6260
- {event.event_name}
6261
- </button>
6262
- ))}
6263
- </div>
6183
+ <nav>
6184
+ <ul>
6185
+ {events.map(event => (
6186
+ <li key={event.id}>
6187
+ <button onClick={() => setSelectedEvent(event)}>
6188
+ {event.event_name}
6189
+ </button>
6190
+ </li>
6191
+ ))}
6192
+ </ul>
6193
+ </nav>
6264
6194
  );
6265
6195
  }
6266
6196
  ```
6267
6197
 
6268
6198
  #### Defined in
6269
6199
 
6270
- [packages/core/src/hooks/useEvents.ts:51](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useEvents.ts#L51)
6200
+ [packages/core/src/hooks/useEvents.ts:55](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useEvents.ts#L55)
6271
6201
 
6272
6202
  ___
6273
6203
 
@@ -6568,21 +6498,27 @@ function MyComponent() {
6568
6498
  const { selectedOrganisation, organisations, switchOrganisation } = useOrganisations();
6569
6499
 
6570
6500
  return (
6571
- <div>
6501
+ <main>
6572
6502
  <h1>Current Organisation: {selectedOrganisation.display_name}</h1>
6573
- {organisations.map(org => (
6574
- <button key={org.id} onClick={() => switchOrganisation(org.id)}>
6575
- {org.display_name}
6576
- </button>
6577
- ))}
6578
- </div>
6503
+ <nav>
6504
+ <ul>
6505
+ {organisations.map(org => (
6506
+ <li key={org.id}>
6507
+ <button onClick={() => switchOrganisation(org.id)}>
6508
+ {org.display_name}
6509
+ </button>
6510
+ </li>
6511
+ ))}
6512
+ </ul>
6513
+ </nav>
6514
+ </main>
6579
6515
  );
6580
6516
  }
6581
6517
  ```
6582
6518
 
6583
6519
  #### Defined in
6584
6520
 
6585
- [packages/core/src/hooks/useOrganisations.ts:41](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useOrganisations.ts#L41)
6521
+ [packages/core/src/hooks/useOrganisations.ts:47](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useOrganisations.ts#L47)
6586
6522
 
6587
6523
  ___
6588
6524
 
@@ -6596,7 +6532,7 @@ UseSessionRestorationResult
6596
6532
 
6597
6533
  #### Defined in
6598
6534
 
6599
- [packages/core/src/hooks/useSessionRestoration.ts:32](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useSessionRestoration.ts#L32)
6535
+ [packages/core/src/hooks/useSessionRestoration.ts:34](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/hooks/useSessionRestoration.ts#L34)
6600
6536
 
6601
6537
  ___
6602
6538
 
@@ -6796,162 +6732,42 @@ The unified auth provider
6796
6732
 
6797
6733
  #### Defined in
6798
6734
 
6799
- [packages/core/src/providers/services/UnifiedAuthProvider.tsx:797](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/providers/services/UnifiedAuthProvider.tsx#L797)
6735
+ [packages/core/src/providers/services/UnifiedAuthProvider.tsx:756](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/providers/services/UnifiedAuthProvider.tsx#L756)
6800
6736
 
6801
6737
  ___
6802
6738
 
6803
- ### PermissionGuard
6739
+ ### withPermissionGuard
6740
+
6741
+ ▸ **withPermissionGuard**\<`T`\>(`config`, `handler`): Function
6742
+
6743
+ Permission Guard for Server Handlers
6804
6744
 
6805
- **PermissionGuard**(`«destructured»`): React.ReactNode
6745
+ Wraps a server handler with permission checking.
6806
6746
 
6807
- Permission Guard Component
6747
+ #### Type parameters
6808
6748
 
6809
- A React component that conditionally renders children based on permissions.
6810
- Can auto-infer userId from context if not provided.
6749
+ | Name | Type |
6750
+ | :------ | :------ |
6751
+ | `T` | extends any[] |
6811
6752
 
6812
6753
  #### Parameters
6813
6754
 
6814
- | Name | Type | Default value |
6755
+ | Name | Type | Description |
6815
6756
  | :------ | :------ | :------ |
6816
- | `«destructured»` | Object | `undefined` |
6817
- | › `userId?` | string | `undefined` |
6818
- | › `scope` | Object | `undefined` |
6819
- | › `scope.organisationId` | string | `undefined` |
6820
- | › `scope.eventId?` | string | `undefined` |
6821
- | › `scope.appId?` | string | `undefined` |
6822
- | › `permission` | \`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\` | `undefined` |
6823
- | › `pageId?` | string | `undefined` |
6824
- | › `children` | ReactNode | `undefined` |
6825
- | › `fallback?` | ReactNode | `null` |
6826
- | › `onDenied?` | Function | `undefined` |
6827
- | › `loading?` | ReactNode | `null` |
6828
- | › `strictMode?` | boolean | `true` |
6829
- | › `auditLog?` | boolean | `true` |
6830
- | › `enforceAudit?` | boolean | `true` |
6831
-
6832
- #### Returns
6833
-
6834
- React.ReactNode
6757
+ | `config` | Object | Permission guard configuration |
6758
+ | `config.permission` | \`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\` | - |
6759
+ | `config.pageId?` | string | - |
6760
+ | `handler` | Function | Handler function to wrap |
6835
6761
 
6836
- **`Example`**
6762
+ #### Returns
6837
6763
 
6838
- ```tsx
6839
- // With explicit userId and scope
6840
- <PermissionGuard
6841
- userId="user-123"
6842
- scope={{ organisationId: 'org-456' }}
6843
- permission="update:events"
6844
- pageId="page-789"
6845
- fallback={<AccessDenied />}
6846
- >
6847
- <AdminPanel />
6848
- </PermissionGuard>
6849
-
6850
- // With context inference (requires auth context)
6851
- <PermissionGuard
6852
- permission="update:events"
6853
- scope={{ organisationId: 'org-456' }}
6854
- fallback={<AccessDenied />}
6855
- >
6856
- <AdminPanel />
6857
- </PermissionGuard>
6858
- ```
6764
+ Function
6859
6765
 
6860
- #### Defined in
6766
+ Wrapped handler function
6861
6767
 
6862
- [packages/core/src/rbac/adapters.tsx:50](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L50)
6768
+ (`...args`): Promise\<any\>
6863
6769
 
6864
- ___
6865
-
6866
- ### AccessLevelGuard
6867
-
6868
- ▸ **AccessLevelGuard**(`«destructured»`): React.ReactNode
6869
-
6870
- Access Level Guard Component
6871
-
6872
- A React component that conditionally renders children based on access level.
6873
- Can auto-infer userId from context if not provided.
6874
-
6875
- #### Parameters
6876
-
6877
- | Name | Type | Default value |
6878
- | :------ | :------ | :------ |
6879
- | `«destructured»` | Object | `undefined` |
6880
- | › `userId?` | string | `undefined` |
6881
- | › `scope` | Object | `undefined` |
6882
- | › `scope.organisationId` | string | `undefined` |
6883
- | › `scope.eventId?` | string | `undefined` |
6884
- | › `scope.appId?` | string | `undefined` |
6885
- | › `minLevel` | "viewer" \| "participant" \| "planner" \| "admin" \| "super" | `undefined` |
6886
- | › `children` | ReactNode | `undefined` |
6887
- | › `fallback?` | ReactNode | `null` |
6888
- | › `loading?` | ReactNode | `null` |
6889
-
6890
- #### Returns
6891
-
6892
- React.ReactNode
6893
-
6894
- **`Example`**
6895
-
6896
- ```tsx
6897
- // With explicit userId and scope
6898
- <AccessLevelGuard
6899
- userId="user-123"
6900
- scope={{ organisationId: 'org-456' }}
6901
- minLevel="admin"
6902
- fallback={<AccessDenied />}
6903
- >
6904
- <AdminPanel />
6905
- </AccessLevelGuard>
6906
-
6907
- // With context inference (requires auth context)
6908
- <AccessLevelGuard
6909
- minLevel="admin"
6910
- scope={{ organisationId: 'org-456' }}
6911
- fallback={<AccessDenied />}
6912
- >
6913
- <AdminPanel />
6914
- </AccessLevelGuard>
6915
- ```
6916
-
6917
- #### Defined in
6918
-
6919
- [packages/core/src/rbac/adapters.tsx:190](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L190)
6920
-
6921
- ___
6922
-
6923
- ### withPermissionGuard
6924
-
6925
- ▸ **withPermissionGuard**\<`T`\>(`config`, `handler`): Function
6926
-
6927
- Permission Guard for Server Handlers
6928
-
6929
- Wraps a server handler with permission checking.
6930
-
6931
- #### Type parameters
6932
-
6933
- | Name | Type |
6934
- | :------ | :------ |
6935
- | `T` | extends any[] |
6936
-
6937
- #### Parameters
6938
-
6939
- | Name | Type | Description |
6940
- | :------ | :------ | :------ |
6941
- | `config` | Object | Permission guard configuration |
6942
- | `config.permission` | \`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\` | - |
6943
- | `config.pageId?` | string | - |
6944
- | `handler` | Function | Handler function to wrap |
6945
-
6946
- #### Returns
6947
-
6948
- Function
6949
-
6950
- Wrapped handler function
6951
-
6952
- ▸ (`...args`): Promise\<any\>
6953
-
6954
- ##### Parameters
6770
+ ##### Parameters
6955
6771
 
6956
6772
  | Name | Type |
6957
6773
  | :------ | :------ |
@@ -6975,7 +6791,7 @@ const protectedHandler = withPermissionGuard(
6975
6791
 
6976
6792
  #### Defined in
6977
6793
 
6978
- [packages/core/src/rbac/adapters.tsx:280](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L280)
6794
+ [packages/core/src/rbac/adapters.tsx:43](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L43)
6979
6795
 
6980
6796
  ___
6981
6797
 
@@ -7032,7 +6848,7 @@ const adminHandler = withAccessLevelGuard(
7032
6848
 
7033
6849
  #### Defined in
7034
6850
 
7035
- [packages/core/src/rbac/adapters.tsx:337](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L337)
6851
+ [packages/core/src/rbac/adapters.tsx:100](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L100)
7036
6852
 
7037
6853
  ___
7038
6854
 
@@ -7098,7 +6914,7 @@ const adminHandler = withRoleGuard(
7098
6914
 
7099
6915
  #### Defined in
7100
6916
 
7101
- [packages/core/src/rbac/adapters.tsx:398](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L398)
6917
+ [packages/core/src/rbac/adapters.tsx:161](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L161)
7102
6918
 
7103
6919
  ___
7104
6920
 
@@ -7161,7 +6977,7 @@ export default createRBACMiddleware({
7161
6977
 
7162
6978
  #### Defined in
7163
6979
 
7164
- [packages/core/src/rbac/adapters.tsx:521](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L521)
6980
+ [packages/core/src/rbac/adapters.tsx:284](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L284)
7165
6981
 
7166
6982
  ___
7167
6983
 
@@ -7220,67 +7036,7 @@ app.use(createRBACExpressMiddleware({
7220
7036
 
7221
7037
  #### Defined in
7222
7038
 
7223
- [packages/core/src/rbac/adapters.tsx:588](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L588)
7224
-
7225
- ___
7226
-
7227
- ### hasPermissionCached
7228
-
7229
- ▸ **hasPermissionCached**(`userId`, `scope`, `_permission`, `_pageId?`): boolean
7230
-
7231
- Check if a user has a permission (synchronous cache check only)
7232
-
7233
- #### Parameters
7234
-
7235
- | Name | Type | Description |
7236
- | :------ | :------ | :------ |
7237
- | `userId` | string | User ID |
7238
- | `scope` | Object | Permission scope |
7239
- | `scope.organisationId` | string | - |
7240
- | `scope.eventId?` | string | - |
7241
- | `scope.appId?` | string | - |
7242
- | `_permission` | \`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\` | - |
7243
- | `_pageId?` | string | - |
7244
-
7245
- #### Returns
7246
-
7247
- boolean
7248
-
7249
- True if permission is cached and granted
7250
-
7251
- #### Defined in
7252
-
7253
- [packages/core/src/rbac/adapters.tsx:636](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L636)
7254
-
7255
- ___
7256
-
7257
- ### hasAnyPermissionCached
7258
-
7259
- ▸ **hasAnyPermissionCached**(`userId`, `scope`, `permissions`, `pageId?`): boolean
7260
-
7261
- Check if a user has any of the specified permissions (synchronous cache check only)
7262
-
7263
- #### Parameters
7264
-
7265
- | Name | Type | Description |
7266
- | :------ | :------ | :------ |
7267
- | `userId` | string | User ID |
7268
- | `scope` | Object | Permission scope |
7269
- | `scope.organisationId` | string | - |
7270
- | `scope.eventId?` | string | - |
7271
- | `scope.appId?` | string | - |
7272
- | `permissions` | (\`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\`)[] | Array of permissions to check |
7273
- | `pageId?` | string | Optional page ID |
7274
-
7275
- #### Returns
7276
-
7277
- boolean
7278
-
7279
- True if any permission is cached and granted
7280
-
7281
- #### Defined in
7282
-
7283
- [packages/core/src/rbac/adapters.tsx:661](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L661)
7039
+ [packages/core/src/rbac/adapters.tsx:351](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/adapters.tsx#L351)
7284
7040
 
7285
7041
  ___
7286
7042
 
@@ -7493,30 +7249,6 @@ Promise resolving to permission result
7493
7249
 
7494
7250
  ___
7495
7251
 
7496
- ### hasPermission
7497
-
7498
- ▸ **hasPermission**(`input`): Promise\<boolean\>
7499
-
7500
- Check if a user has a specific permission (alias for isPermitted)
7501
-
7502
- #### Parameters
7503
-
7504
- | Name | Type | Description |
7505
- | :------ | :------ | :------ |
7506
- | `input` | PermissionCheck | Permission check parameters |
7507
-
7508
- #### Returns
7509
-
7510
- Promise\<boolean\>
7511
-
7512
- Promise<boolean> - True if user has permission
7513
-
7514
- #### Defined in
7515
-
7516
- [packages/core/src/rbac/api.ts:499](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L499)
7517
-
7518
- ___
7519
-
7520
7252
  ### hasAnyPermission
7521
7253
 
7522
7254
  ▸ **hasAnyPermission**(`input`): Promise\<boolean\>
@@ -7541,7 +7273,7 @@ Promise resolving to true if user has any permission
7541
7273
 
7542
7274
  #### Defined in
7543
7275
 
7544
- [packages/core/src/rbac/api.ts:509](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L509)
7276
+ [packages/core/src/rbac/api.ts:499](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L499)
7545
7277
 
7546
7278
  ___
7547
7279
 
@@ -7569,7 +7301,7 @@ Promise resolving to true if user has all permissions
7569
7301
 
7570
7302
  #### Defined in
7571
7303
 
7572
- [packages/core/src/rbac/api.ts:537](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L537)
7304
+ [packages/core/src/rbac/api.ts:527](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L527)
7573
7305
 
7574
7306
  ___
7575
7307
 
@@ -7699,7 +7431,7 @@ Get quick fix suggestions for custom auth code
7699
7431
  | Name | Type |
7700
7432
  | :------ | :------ |
7701
7433
  | `customCodeName` | string |
7702
- | `type` | "component" \| "hook" \| "util" |
7434
+ | `type` | "hook" \| "component" \| "util" |
7703
7435
 
7704
7436
  #### Returns
7705
7437
 
@@ -7800,7 +7532,7 @@ Runtime compliance result
7800
7532
 
7801
7533
  #### Defined in
7802
7534
 
7803
- [packages/core/src/rbac/compliance/runtime-compliance.ts:34](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/compliance/runtime-compliance.ts#L34)
7535
+ [packages/core/src/rbac/compliance/runtime-compliance.ts:36](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/compliance/runtime-compliance.ts#L36)
7804
7536
 
7805
7537
  ___
7806
7538
 
@@ -7819,7 +7551,7 @@ void
7819
7551
 
7820
7552
  #### Defined in
7821
7553
 
7822
- [packages/core/src/rbac/compliance/runtime-compliance.ts:72](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/compliance/runtime-compliance.ts#L72)
7554
+ [packages/core/src/rbac/compliance/runtime-compliance.ts:74](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/compliance/runtime-compliance.ts#L74)
7823
7555
 
7824
7556
  ___
7825
7557
 
@@ -7877,30 +7609,30 @@ Compliance result with issues and recommendations
7877
7609
 
7878
7610
  ___
7879
7611
 
7880
- ### EnhancedNavigationMenu
7612
+ ### AccessDenied
7881
7613
 
7882
- ▸ **EnhancedNavigationMenu**(`props`): Element
7614
+ ▸ **AccessDenied**(`props`): Element
7883
7615
 
7884
- EnhancedNavigationMenu - Secure navigation menu with RBAC integration
7616
+ Standard access denied component
7885
7617
 
7886
- This component provides a navigation menu that automatically filters items based on
7887
- user permissions and enforces strict security controls.
7618
+ This component is displayed when users lack the necessary permissions.
7619
+ It provides clear messaging and actionable next steps.
7888
7620
 
7889
7621
  #### Parameters
7890
7622
 
7891
7623
  | Name | Type | Description |
7892
7624
  | :------ | :------ | :------ |
7893
- | `props` | EnhancedNavigationMenuProps | Component props |
7625
+ | `props` | AccessDeniedProps | Component configuration |
7894
7626
 
7895
7627
  #### Returns
7896
7628
 
7897
7629
  Element
7898
7630
 
7899
- React element with enhanced navigation menu
7631
+ JSX.Element - The rendered access denied page
7900
7632
 
7901
7633
  #### Defined in
7902
7634
 
7903
- [packages/core/src/rbac/components/EnhancedNavigationMenu.tsx:113](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/EnhancedNavigationMenu.tsx#L113)
7635
+ [packages/core/src/rbac/components/AccessDenied.tsx:78](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/AccessDenied.tsx#L78)
7904
7636
 
7905
7637
  ___
7906
7638
 
@@ -7928,56 +7660,7 @@ React element with navigation permission enforcement
7928
7660
 
7929
7661
  #### Defined in
7930
7662
 
7931
- [packages/core/src/rbac/components/NavigationGuard.tsx:114](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationGuard.tsx#L114)
7932
-
7933
- ___
7934
-
7935
- ### NavigationProvider
7936
-
7937
- ▸ **NavigationProvider**(`props`): Element
7938
-
7939
- NavigationProvider - Manages navigation-level permissions across the app
7940
-
7941
- This provider ensures that all navigation items are properly protected and provides
7942
- centralized navigation permission management with strict enforcement.
7943
-
7944
- #### Parameters
7945
-
7946
- | Name | Type | Description |
7947
- | :------ | :------ | :------ |
7948
- | `props` | NavigationProviderProps | Provider props |
7949
-
7950
- #### Returns
7951
-
7952
- Element
7953
-
7954
- React element with navigation permission context
7955
-
7956
- #### Defined in
7957
-
7958
- [packages/core/src/rbac/components/NavigationProvider.tsx:168](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationProvider.tsx#L168)
7959
-
7960
- ___
7961
-
7962
- ### useNavigationPermissions
7963
-
7964
- ▸ **useNavigationPermissions**(): NavigationContextType
7965
-
7966
- Hook to use navigation permission context
7967
-
7968
- #### Returns
7969
-
7970
- NavigationContextType
7971
-
7972
- Navigation permission context
7973
-
7974
- **`Throws`**
7975
-
7976
- Error if used outside of NavigationProvider
7977
-
7978
- #### Defined in
7979
-
7980
- [packages/core/src/rbac/components/NavigationProvider.tsx:335](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationProvider.tsx#L335)
7663
+ [packages/core/src/rbac/components/NavigationGuard.tsx:115](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/NavigationGuard.tsx#L115)
7981
7664
 
7982
7665
  ___
7983
7666
 
@@ -7997,182 +7680,7 @@ ReactNode
7997
7680
 
7998
7681
  #### Defined in
7999
7682
 
8000
- [packages/core/src/rbac/components/PagePermissionGuard.tsx:541](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionGuard.tsx#L541)
8001
-
8002
- ___
8003
-
8004
- ### PagePermissionProvider
8005
-
8006
- ▸ **PagePermissionProvider**(`props`): Element
8007
-
8008
- PagePermissionProvider - Manages page-level permissions across the app
8009
-
8010
- This provider ensures that all pages are properly protected and provides
8011
- centralized page permission management with strict enforcement.
8012
-
8013
- #### Parameters
8014
-
8015
- | Name | Type | Description |
8016
- | :------ | :------ | :------ |
8017
- | `props` | PagePermissionProviderProps | Provider props |
8018
-
8019
- #### Returns
8020
-
8021
- Element
8022
-
8023
- React element with page permission context
8024
-
8025
- #### Defined in
8026
-
8027
- [packages/core/src/rbac/components/PagePermissionProvider.tsx:129](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionProvider.tsx#L129)
8028
-
8029
- ___
8030
-
8031
- ### usePagePermissions
8032
-
8033
- ▸ **usePagePermissions**(): PagePermissionContextType
8034
-
8035
- Hook to use page permission context
8036
-
8037
- #### Returns
8038
-
8039
- PagePermissionContextType
8040
-
8041
- Page permission context
8042
-
8043
- **`Throws`**
8044
-
8045
- Error if used outside of PagePermissionProvider
8046
-
8047
- #### Defined in
8048
-
8049
- [packages/core/src/rbac/components/PagePermissionProvider.tsx:269](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionProvider.tsx#L269)
8050
-
8051
- ___
8052
-
8053
- ### PermissionEnforcer
8054
-
8055
- ▸ **PermissionEnforcer**(`props`): Element
8056
-
8057
- PermissionEnforcer - Enforces permissions for operations
8058
-
8059
- This component ensures that users can only perform operations they have permission for.
8060
- It integrates with the existing RBAC system and provides strict enforcement to
8061
- prevent apps from bypassing permission checks.
8062
-
8063
- #### Parameters
8064
-
8065
- | Name | Type | Description |
8066
- | :------ | :------ | :------ |
8067
- | `props` | PermissionEnforcerProps | Component props |
8068
-
8069
- #### Returns
8070
-
8071
- Element
8072
-
8073
- React element with permission enforcement
8074
-
8075
- #### Defined in
8076
-
8077
- [packages/core/src/rbac/components/PermissionEnforcer.tsx:121](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PermissionEnforcer.tsx#L121)
8078
-
8079
- ___
8080
-
8081
- ### RoleBasedRouter
8082
-
8083
- ▸ **RoleBasedRouter**(`props`): Element
8084
-
8085
- RoleBasedRouter - Centralized routing control with role-based protection
8086
-
8087
- This component ensures that all routes are properly protected and provides
8088
- centralized routing control to prevent apps from bypassing route protection.
8089
-
8090
- #### Parameters
8091
-
8092
- | Name | Type | Description |
8093
- | :------ | :------ | :------ |
8094
- | `props` | RoleBasedRouterProps | Router props |
8095
-
8096
- #### Returns
8097
-
8098
- Element
8099
-
8100
- React element with role-based routing
8101
-
8102
- #### Defined in
8103
-
8104
- [packages/core/src/rbac/components/RoleBasedRouter.tsx:183](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/RoleBasedRouter.tsx#L183)
8105
-
8106
- ___
8107
-
8108
- ### useRoleBasedRouter
8109
-
8110
- ▸ **useRoleBasedRouter**(): RoleBasedRouterContextType
8111
-
8112
- Hook to use role-based router context
8113
-
8114
- #### Returns
8115
-
8116
- RoleBasedRouterContextType
8117
-
8118
- Role-based router context
8119
-
8120
- **`Throws`**
8121
-
8122
- Error if used outside of RoleBasedRouter
8123
-
8124
- #### Defined in
8125
-
8126
- [packages/core/src/rbac/components/RoleBasedRouter.tsx:403](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/RoleBasedRouter.tsx#L403)
8127
-
8128
- ___
8129
-
8130
- ### SecureDataProvider
8131
-
8132
- ▸ **SecureDataProvider**(`props`): Element
8133
-
8134
- SecureDataProvider - Prevents direct Supabase access and enforces secure data patterns
8135
-
8136
- This provider ensures that all data access goes through the secure RBAC system
8137
- and prevents apps from bypassing data access controls.
8138
-
8139
- #### Parameters
8140
-
8141
- | Name | Type | Description |
8142
- | :------ | :------ | :------ |
8143
- | `props` | SecureDataProviderProps | Provider props |
8144
-
8145
- #### Returns
8146
-
8147
- Element
8148
-
8149
- React element with secure data context
8150
-
8151
- #### Defined in
8152
-
8153
- [packages/core/src/rbac/components/SecureDataProvider.tsx:138](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/SecureDataProvider.tsx#L138)
8154
-
8155
- ___
8156
-
8157
- ### useSecureData
8158
-
8159
- ▸ **useSecureData**(): SecureDataContextType
8160
-
8161
- Hook to use secure data context
8162
-
8163
- #### Returns
8164
-
8165
- SecureDataContextType
8166
-
8167
- Secure data context
8168
-
8169
- **`Throws`**
8170
-
8171
- Error if used outside of SecureDataProvider
8172
-
8173
- #### Defined in
8174
-
8175
- [packages/core/src/rbac/components/SecureDataProvider.tsx:329](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/SecureDataProvider.tsx#L329)
7683
+ [packages/core/src/rbac/components/PagePermissionGuard.tsx:521](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionGuard.tsx#L521)
8176
7684
 
8177
7685
  ___
8178
7686
 
@@ -8327,57 +7835,6 @@ function MyComponent() {
8327
7835
 
8328
7836
  ___
8329
7837
 
8330
- ### useCachedPermissions
8331
-
8332
- ▸ **useCachedPermissions**(`userId`, `scope`): Object
8333
-
8334
- Hook to get cached permissions with TTL management
8335
-
8336
- #### Parameters
8337
-
8338
- | Name | Type | Description |
8339
- | :------ | :------ | :------ |
8340
- | `userId` | string | User ID |
8341
- | `scope` | Scope | Scope for permission checking |
8342
-
8343
- #### Returns
8344
-
8345
- Object
8346
-
8347
- Cached permission state and methods
8348
-
8349
- | Name | Type |
8350
- | :------ | :------ |
8351
- | `permissions` | PermissionMap |
8352
- | `isLoading` | boolean |
8353
- | `error` | Error \| null |
8354
- | `invalidateCache` | Function |
8355
- | `refetch` | Function |
8356
-
8357
- **`Example`**
8358
-
8359
- ```tsx
8360
- function MyComponent() {
8361
- const { permissions, isLoading, error, invalidateCache } = useCachedPermissions(userId, scope);
8362
-
8363
- if (isLoading) return <div>Loading cached permissions...</div>;
8364
- if (error) return <div>Error: {error.message}</div>;
8365
-
8366
- return (
8367
- <div>
8368
- {permissions['read:users'] && <UserList />}
8369
- <button onClick={invalidateCache}>Refresh Permissions</button>
8370
- </div>
8371
- );
8372
- }
8373
- ```
8374
-
8375
- #### Defined in
8376
-
8377
- [packages/core/src/rbac/hooks/permissions/useCachedPermissions.ts:30](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/permissions/useCachedPermissions.ts#L30)
8378
-
8379
- ___
8380
-
8381
7838
  ### useCan
8382
7839
 
8383
7840
  ▸ **useCan**(`userId`, `scope`, `permission`, `pageId?`, `useCache?`, `precomputedSuperAdmin?`, `appName?`): Object
@@ -8428,108 +7885,6 @@ function MyComponent() {
8428
7885
 
8429
7886
  ___
8430
7887
 
8431
- ### useHasAllPermissions
8432
-
8433
- ▸ **useHasAllPermissions**(`userId`, `scope`, `permissions`, `useCache?`): Object
8434
-
8435
- Hook to check if user has all of the specified permissions
8436
-
8437
- #### Parameters
8438
-
8439
- | Name | Type | Default value | Description |
8440
- | :------ | :------ | :------ | :------ |
8441
- | `userId` | string | `undefined` | User ID |
8442
- | `scope` | Scope | `undefined` | Scope for permission checking |
8443
- | `permissions` | (\`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\`)[] | `undefined` | Array of permissions to check |
8444
- | `useCache` | boolean | `true` | Whether to use cached results |
8445
-
8446
- #### Returns
8447
-
8448
- Object
8449
-
8450
- Whether user has all of the permissions
8451
-
8452
- | Name | Type |
8453
- | :------ | :------ |
8454
- | `hasAll` | boolean |
8455
- | `isLoading` | boolean |
8456
- | `error` | Error \| null |
8457
- | `refetch` | Function |
8458
-
8459
- **`Example`**
8460
-
8461
- ```tsx
8462
- function MyComponent() {
8463
- const { hasAll, isLoading, error } = useHasAllPermissions(
8464
- userId,
8465
- scope,
8466
- ['read:users', 'create:users', 'update:users']
8467
- );
8468
-
8469
- if (isLoading) return <div>Checking permissions...</div>;
8470
- if (error) return <div>Error: {error.message}</div>;
8471
-
8472
- return hasAll ? <FullUserManagementPanel /> : <div>Insufficient permissions</div>;
8473
- }
8474
- ```
8475
-
8476
- #### Defined in
8477
-
8478
- [packages/core/src/rbac/hooks/permissions/useHasAllPermissions.ts:31](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/permissions/useHasAllPermissions.ts#L31)
8479
-
8480
- ___
8481
-
8482
- ### useHasAnyPermission
8483
-
8484
- ▸ **useHasAnyPermission**(`userId`, `scope`, `permissions`, `useCache?`): Object
8485
-
8486
- Hook to check if user has any of the specified permissions
8487
-
8488
- #### Parameters
8489
-
8490
- | Name | Type | Default value | Description |
8491
- | :------ | :------ | :------ | :------ |
8492
- | `userId` | string | `undefined` | User ID |
8493
- | `scope` | Scope | `undefined` | Scope for permission checking |
8494
- | `permissions` | (\`read:$\{string}\` \| \`create:$\{string}\` \| \`update:$\{string}\` \| \`delete:$\{string}\`)[] | `undefined` | Array of permissions to check |
8495
- | `useCache` | boolean | `true` | Whether to use cached results |
8496
-
8497
- #### Returns
8498
-
8499
- Object
8500
-
8501
- Whether user has any of the permissions
8502
-
8503
- | Name | Type |
8504
- | :------ | :------ |
8505
- | `hasAny` | boolean |
8506
- | `isLoading` | boolean |
8507
- | `error` | Error \| null |
8508
- | `refetch` | Function |
8509
-
8510
- **`Example`**
8511
-
8512
- ```tsx
8513
- function MyComponent() {
8514
- const { hasAny, isLoading, error } = useHasAnyPermission(
8515
- userId,
8516
- scope,
8517
- ['read:users', 'create:users']
8518
- );
8519
-
8520
- if (isLoading) return <div>Checking permissions...</div>;
8521
- if (error) return <div>Error: {error.message}</div>;
8522
-
8523
- return hasAny ? <UserManagementPanel /> : <div>No user permissions</div>;
8524
- }
8525
- ```
8526
-
8527
- #### Defined in
8528
-
8529
- [packages/core/src/rbac/hooks/permissions/useHasAnyPermission.ts:31](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/permissions/useHasAnyPermission.ts#L31)
8530
-
8531
- ___
8532
-
8533
7888
  ### useMultiplePermissions
8534
7889
 
8535
7890
  ▸ **useMultiplePermissions**(`userId`, `scope`, `permissions`, `useCache?`): Object
@@ -8706,7 +8061,7 @@ const permission = useCan(userId, resolvedScope, permission);
8706
8061
 
8707
8062
  #### Defined in
8708
8063
 
8709
- [packages/core/src/rbac/hooks/useResolvedScope.ts:73](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResolvedScope.ts#L73)
8064
+ [packages/core/src/rbac/hooks/useResolvedScope.ts:75](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResolvedScope.ts#L75)
8710
8065
 
8711
8066
  ___
8712
8067
 
@@ -8721,15 +8076,22 @@ permissions for a resource type. It handles scope resolution, user context,
8721
8076
  and provides a simple API for permission checking.
8722
8077
 
8723
8078
  **Page Permission Support:**
8724
- When an `appId` is available in the resolved scope, the resource name is passed
8725
- as `pageId` to enable page-based permission checks. This allows the hook to work
8726
- with both resource-based permissions (when appId is not available) and page-based
8727
- permissions (when appId is available and the resource is a registered page).
8079
+ When an `appId` is available in the resolved scope, the hook automatically:
8080
+ 1. Waits for scope resolution to complete (including `appId` being set)
8081
+ 2. Constructs permission strings with the `page.` prefix (e.g., `create:page.planning`)
8082
+ 3. Passes the resource name as `pageId` to enable page-based permission checks
8083
+
8084
+ This ensures permission strings match the format returned by `rbac_permissions_get`
8085
+ (e.g., `create:page.planning`) rather than resource-based format (e.g., `create:planning`).
8086
+
8087
+ **Scope Resolution Timing:**
8088
+ The hook waits for scope resolution to complete before constructing permission strings.
8089
+ This prevents timing issues where permission checks use the wrong format (e.g., `delete:planning`
8090
+ instead of `delete:page.planning`) when `appId` is not yet available in the scope.
8728
8091
 
8729
- The RPC function `rbac_check_permission_simplified` will automatically resolve
8730
- the page name to a page ID and check page permissions if the resource matches
8731
- a registered page in `rbac_app_pages`. If the resource is not a registered page,
8732
- it will fall back to resource-based permission checking.
8092
+ The RPC function `rbac_check_permission_simplified` will resolve the page name to a page ID
8093
+ and check page permissions if the resource matches a registered page in `rbac_app_pages`.
8094
+ If the resource is not a registered page, it will fall back to resource-based permission checking.
8733
8095
 
8734
8096
  #### Parameters
8735
8097
 
@@ -8779,7 +8141,7 @@ function usePlanning() {
8779
8141
 
8780
8142
  #### Defined in
8781
8143
 
8782
- [packages/core/src/rbac/hooks/useResourcePermissions.ts:131](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L131)
8144
+ [packages/core/src/rbac/hooks/useResourcePermissions.ts:141](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/hooks/useResourcePermissions.ts#L141)
8783
8145
 
8784
8146
  ___
8785
8147
 
@@ -10055,6 +9417,73 @@ Promise\<Object\>
10055
9417
 
10056
9418
  ___
10057
9419
 
9420
+ ### createBaseClient
9421
+
9422
+ ▸ **createBaseClient**(`supabaseUrl`, `supabaseKey`): SupabaseClient\<Database\>
9423
+
9424
+ Create a base Supabase client for UnifiedAuthProvider
9425
+
9426
+ **CRITICAL**: This function can ONLY be called from:
9427
+ - `src/main.tsx` (or `main.jsx`)
9428
+ - `src/App.tsx` (or `App.jsx`)
9429
+ - `src/lib/supabase.ts` (or `supabase.js`)
9430
+ - `src/supabase.ts` (or `supabase.js`)
9431
+
9432
+ **DO NOT** use this client directly for queries. Always use `useSecureSupabase()` hook instead.
9433
+
9434
+ The client is configured with explicit auth options to ensure consistent session persistence:
9435
+ - `persistSession: true` - Sessions are saved to localStorage and restored on page load/refresh
9436
+ - `autoRefreshToken: true` - Tokens are automatically refreshed before expiry
9437
+ - `detectSessionInUrl: true` - Detects and handles OAuth callback URLs
9438
+ - `flowType: 'pkce'` - Uses PKCE flow for enhanced security
9439
+
9440
+ This configuration ensures that users remain logged in after hard refresh (Cmd+Shift+R)
9441
+ and other browser navigation scenarios across all consuming apps.
9442
+
9443
+ #### Parameters
9444
+
9445
+ | Name | Type | Description |
9446
+ | :------ | :------ | :------ |
9447
+ | `supabaseUrl` | string | Supabase project URL |
9448
+ | `supabaseKey` | string | Supabase publishable key or anon key (accepts both legacy anon keys and modern publishable keys) |
9449
+
9450
+ #### Returns
9451
+
9452
+ SupabaseClient\<Database\>
9453
+
9454
+ Supabase client instance with auth configuration
9455
+
9456
+ **`Throws`**
9457
+
9458
+ If called from an unauthorized file location (development only)
9459
+
9460
+ **`Example`**
9461
+
9462
+ ```tsx
9463
+ // main.tsx
9464
+ import { createBaseClient } from '@jmruthers/pace-core';
9465
+ import { UnifiedAuthProvider } from '@jmruthers/pace-core';
9466
+
9467
+ const supabase = createBaseClient(
9468
+ import.meta.env.VITE_SUPABASE_URL,
9469
+ import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
9470
+ );
9471
+
9472
+ function App() {
9473
+ return (
9474
+ <UnifiedAuthProvider supabaseClient={supabase} appName="MyApp">
9475
+ <YourApp />
9476
+ </UnifiedAuthProvider>
9477
+ );
9478
+ }
9479
+ ```
9480
+
9481
+ #### Defined in
9482
+
9483
+ [packages/core/src/utils/supabase/createBaseClient.ts:120](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/utils/supabase/createBaseClient.ts#L120)
9484
+
9485
+ ___
9486
+
10058
9487
  ### formatInTimeZone
10059
9488
 
10060
9489
  ▸ **formatInTimeZone**(`date`, `timeZone`, `formatStr`): string
@@ -10305,3 +9734,98 @@ getTimeZoneDifference('America/New_York', 'America/Los_Angeles');
10305
9734
  #### Defined in
10306
9735
 
10307
9736
  [packages/core/src/utils/timezone/timezone.ts:264](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/utils/timezone/timezone.ts#L264)
9737
+
9738
+ ___
9739
+
9740
+ ### sanitizeHtml
9741
+
9742
+ ▸ **sanitizeHtml**(`html`): string
9743
+
9744
+ Basic HTML sanitization function using regex-based approach
9745
+ Removes potentially dangerous elements and attributes while preserving basic formatting
9746
+ This approach is more reliable in SSR environments and doesn't require DOM manipulation
9747
+
9748
+ #### Parameters
9749
+
9750
+ | Name | Type | Description |
9751
+ | :------ | :------ | :------ |
9752
+ | `html` | string | The HTML string to sanitize |
9753
+
9754
+ #### Returns
9755
+
9756
+ string
9757
+
9758
+ Sanitized HTML string safe for rendering
9759
+
9760
+ **`Example`**
9761
+
9762
+ ```tsx
9763
+ const safeHtml = sanitizeHtml('<p>Hello <strong>world</strong>!</p>');
9764
+ // Returns: '<p>Hello <strong>world</strong>!</p>'
9765
+
9766
+ const dangerousHtml = sanitizeHtml('<script>alert("xss")</script><p>Safe content</p>');
9767
+ // Returns: '<p>Safe content</p>'
9768
+ ```
9769
+
9770
+ #### Defined in
9771
+
9772
+ [packages/core/src/utils/validation/htmlSanitization.ts:54](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/utils/validation/htmlSanitization.ts#L54)
9773
+
9774
+ ___
9775
+
9776
+ ### sanitizeUserInput
9777
+
9778
+ ▸ **sanitizeUserInput**(`input`, `options?`): string
9779
+
9780
+ Sanitizes user input by removing potentially dangerous characters and patterns
9781
+
9782
+ #### Parameters
9783
+
9784
+ | Name | Type |
9785
+ | :------ | :------ |
9786
+ | `input` | string |
9787
+ | `options` | SanitizationOptions |
9788
+
9789
+ #### Returns
9790
+
9791
+ string
9792
+
9793
+ #### Defined in
9794
+
9795
+ [packages/core/src/utils/validation/sanitization.ts:40](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/utils/validation/sanitization.ts#L40)
9796
+
9797
+ ___
9798
+
9799
+ ### sanitizeFormData
9800
+
9801
+ ▸ **sanitizeFormData**\<`T`\>(`data`, `schema`, `sanitizationRules?`): Object
9802
+
9803
+ Validates and sanitizes form data using Zod schemas
9804
+
9805
+ #### Type parameters
9806
+
9807
+ | Name |
9808
+ | :------ |
9809
+ | `T` |
9810
+
9811
+ #### Parameters
9812
+
9813
+ | Name | Type |
9814
+ | :------ | :------ |
9815
+ | `data` | unknown |
9816
+ | `schema` | ZodType\<T, ZodTypeDef, T\> |
9817
+ | `sanitizationRules?` | Record\<string, SanitizationOptions\> |
9818
+
9819
+ #### Returns
9820
+
9821
+ Object
9822
+
9823
+ | Name | Type |
9824
+ | :------ | :------ |
9825
+ | `success` | boolean |
9826
+ | `data?` | T |
9827
+ | `error?` | string |
9828
+
9829
+ #### Defined in
9830
+
9831
+ [packages/core/src/utils/validation/sanitization.ts:170](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/utils/validation/sanitization.ts#L170)