@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
@@ -1,60 +1,10 @@
1
- import {
2
- useEventService,
3
- useOrganisations,
4
- useUnifiedAuth
5
- } from "./chunk-AVMLPIM7.js";
6
- import {
7
- performanceBudgetMonitor
8
- } from "./chunk-FMUCXFII.js";
9
- import {
10
- logger
11
- } from "./chunk-PWLANIRT.js";
1
+ import { UnifiedAuthContext, useUnifiedAuth, useOrganisations } from './chunk-FTCRZOG2.js';
2
+ import { performanceBudgetMonitor } from './chunk-SD6WQY43.js';
3
+ import { logger } from './chunk-TTRFSOKR.js';
4
+ import React3, { createContext, useContext, Component, useMemo, useState, useEffect, useCallback } from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+ import { createClient } from '@supabase/supabase-js';
12
7
 
13
- // src/hooks/useEvents.ts
14
- import { useMemo, useRef } from "react";
15
- function useEvents() {
16
- const eventService = useEventService();
17
- const rawEvents = eventService.getEvents();
18
- const selectedEvent = eventService.getSelectedEvent();
19
- const isLoading = eventService.isLoading();
20
- const error = eventService.getError();
21
- const prevEventsRef = useRef([]);
22
- const prevEventsIdsRef = useRef("");
23
- const currentEventsIds = rawEvents.map((e) => e.event_id || e.id).join(",");
24
- const eventsChanged = currentEventsIds !== prevEventsIdsRef.current;
25
- if (eventsChanged) {
26
- prevEventsRef.current = rawEvents;
27
- prevEventsIdsRef.current = currentEventsIds;
28
- }
29
- const events = useMemo(() => {
30
- return prevEventsRef.current;
31
- }, [currentEventsIds]);
32
- const setSelectedEventCallback = useMemo(
33
- () => (event) => eventService.setSelectedEvent(event),
34
- [eventService]
35
- );
36
- const refreshEventsCallback = useMemo(
37
- () => () => eventService.refreshEvents(),
38
- [eventService]
39
- );
40
- const clearEventSelectionCallback = useMemo(
41
- () => () => eventService.clearEventSelection(),
42
- [eventService]
43
- );
44
- return useMemo(() => ({
45
- events,
46
- selectedEvent,
47
- isLoading,
48
- error,
49
- setSelectedEvent: setSelectedEventCallback,
50
- refreshEvents: refreshEventsCallback,
51
- clearEventSelection: clearEventSelectionCallback
52
- }), [events, selectedEvent?.event_id, isLoading, error?.message, setSelectedEventCallback, refreshEventsCallback, clearEventSelectionCallback]);
53
- }
54
-
55
- // src/components/ErrorBoundary/ErrorBoundaryContext.tsx
56
- import { createContext, useContext } from "react";
57
- import { jsx } from "react/jsx-runtime";
58
8
  var ErrorBoundaryContext = createContext(void 0);
59
9
  function ErrorBoundaryProvider({
60
10
  children,
@@ -68,10 +18,6 @@ function ErrorBoundaryProvider({
68
18
  function useErrorBoundaryContext() {
69
19
  return useContext(ErrorBoundaryContext);
70
20
  }
71
-
72
- // src/components/ErrorBoundary/ErrorBoundary.tsx
73
- import { Component } from "react";
74
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
75
21
  var ErrorBoundary = class extends Component {
76
22
  constructor(props) {
77
23
  super(props);
@@ -147,20 +93,20 @@ var ErrorBoundary = class extends Component {
147
93
  if (fallback) {
148
94
  return fallback;
149
95
  }
150
- return /* @__PURE__ */ jsx2(
96
+ return /* @__PURE__ */ jsx(
151
97
  "div",
152
98
  {
153
99
  role: "alert",
154
100
  className: "p-6 bg-destructive/10 border border-destructive/20 rounded-lg",
155
101
  "data-error-boundary": errorId,
156
102
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
157
- /* @__PURE__ */ jsx2("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx2("svg", { className: "w-5 h-5 text-destructive", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx2("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }) }),
103
+ /* @__PURE__ */ jsx("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx("svg", { className: "w-5 h-5 text-destructive", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z", clipRule: "evenodd" }) }) }),
158
104
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
159
105
  /* @__PURE__ */ jsxs("h3", { className: "text-destructive", children: [
160
106
  "Error in ",
161
107
  componentName
162
108
  ] }),
163
- /* @__PURE__ */ jsx2("p", { className: "text-destructive/80", children: this.state.error?.message || "An unexpected error occurred." }),
109
+ /* @__PURE__ */ jsx("p", { className: "text-destructive/80", children: this.state.error?.message || "An unexpected error occurred." }),
164
110
  enableRetry && retryCount < maxRetries && /* @__PURE__ */ jsxs("div", { className: "flex gap-3 mb-4", children: [
165
111
  /* @__PURE__ */ jsxs(
166
112
  "button",
@@ -176,7 +122,7 @@ var ErrorBoundary = class extends Component {
176
122
  ]
177
123
  }
178
124
  ),
179
- /* @__PURE__ */ jsx2(
125
+ /* @__PURE__ */ jsx(
180
126
  "button",
181
127
  {
182
128
  onClick: () => window.location.reload(),
@@ -186,8 +132,8 @@ var ErrorBoundary = class extends Component {
186
132
  )
187
133
  ] }),
188
134
  retryCount >= maxRetries && /* @__PURE__ */ jsxs("div", { className: "mb-4 p-3 bg-acc-50 border border-acc-200 rounded-md", children: [
189
- /* @__PURE__ */ jsx2("p", { className: "text-acc-800", children: "Maximum retry attempts reached. Please reload the page or contact support." }),
190
- /* @__PURE__ */ jsx2(
135
+ /* @__PURE__ */ jsx("p", { className: "text-acc-800", children: "Maximum retry attempts reached. Please reload the page or contact support." }),
136
+ /* @__PURE__ */ jsx(
191
137
  "button",
192
138
  {
193
139
  onClick: () => window.location.reload(),
@@ -197,7 +143,7 @@ var ErrorBoundary = class extends Component {
197
143
  )
198
144
  ] }),
199
145
  import.meta.env.MODE === "development" && this.state.error && /* @__PURE__ */ jsxs("details", { className: "text-sm text-destructive/70", children: [
200
- /* @__PURE__ */ jsx2("summary", { className: "cursor-pointer font-medium mb-2", children: "Error Details (Development)" }),
146
+ /* @__PURE__ */ jsx("summary", { className: "cursor-pointer font-medium mb-2", children: "Error Details (Development)" }),
201
147
  /* @__PURE__ */ jsxs("div", { className: "bg-destructive/5 p-3 rounded border", children: [
202
148
  /* @__PURE__ */ jsxs("p", { className: "font-mono", children: [
203
149
  "Error ID: ",
@@ -217,21 +163,13 @@ var ErrorBoundary = class extends Component {
217
163
  return this.props.children;
218
164
  }
219
165
  };
220
-
221
- // src/components/ErrorBoundary/index.ts
222
- import React3 from "react";
223
166
  var ErrorBoundary2 = React3.forwardRef((props, ref) => {
224
167
  const context = useErrorBoundaryContext();
225
168
  const globalErrorHandler = context?.defaultErrorHandler;
226
169
  return React3.createElement(ErrorBoundary, { ...props, ref, _globalErrorHandler: globalErrorHandler });
227
170
  });
228
171
  ErrorBoundary2.displayName = "ErrorBoundary";
229
-
230
- // src/components/PublicLayout/PublicPageProvider.tsx
231
- import { createContext as createContext2, useContext as useContext2, useMemo as useMemo2 } from "react";
232
- import { createClient } from "@supabase/supabase-js";
233
- import { jsx as jsx3 } from "react/jsx-runtime";
234
- var PublicPageContext = createContext2(void 0);
172
+ var PublicPageContext = createContext(void 0);
235
173
  function PublicPageProvider({ children, appName }) {
236
174
  const getEnvVar = (key) => {
237
175
  if (typeof import.meta !== "undefined" && import.meta.env) {
@@ -245,7 +183,7 @@ function PublicPageProvider({ children, appName }) {
245
183
  };
246
184
  const supabaseUrl = getEnvVar("VITE_SUPABASE_URL") || getEnvVar("NEXT_PUBLIC_SUPABASE_URL") || null;
247
185
  const supabaseKey = getEnvVar("VITE_SUPABASE_PUBLISHABLE_KEY") || getEnvVar("NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY") || getEnvVar("VITE_SUPABASE_ANON_KEY") || getEnvVar("NEXT_PUBLIC_SUPABASE_ANON_KEY") || null;
248
- const supabase = useMemo2(() => {
186
+ const supabase = useMemo(() => {
249
187
  if (!supabaseUrl || !supabaseKey) {
250
188
  logger.warn("PublicPageProvider", "Missing Supabase environment variables. Please ensure VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY are set in your environment.");
251
189
  return null;
@@ -262,29 +200,29 @@ function PublicPageProvider({ children, appName }) {
262
200
  supabaseKey
263
201
  }
264
202
  };
265
- return /* @__PURE__ */ jsx3(PublicPageContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx3(ErrorBoundary2, { componentName: "PublicPageProvider", children }) });
203
+ return /* @__PURE__ */ jsx(PublicPageContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(ErrorBoundary2, { componentName: "PublicPageProvider", children }) });
266
204
  }
267
205
  function usePublicPageContext() {
268
- const context = useContext2(PublicPageContext);
206
+ const context = useContext(PublicPageContext);
269
207
  if (!context) {
270
208
  throw new Error("usePublicPageContext must be used within a PublicPageProvider");
271
209
  }
272
210
  return context;
273
211
  }
274
212
  function useIsPublicPage() {
275
- const context = useContext2(PublicPageContext);
213
+ const context = useContext(PublicPageContext);
276
214
  return context !== void 0;
277
215
  }
278
-
279
- // src/hooks/useAppConfig.ts
280
- import { useMemo as useMemo3, useContext as useContext3 } from "react";
281
216
  function useAppConfig() {
282
217
  const isPublicPage = useIsPublicPage();
283
- const publicPageContext = useContext3(PublicPageContext);
218
+ const publicPageContext = useContext(PublicPageContext);
284
219
  const hasPublicContext = publicPageContext !== void 0;
285
220
  const contextAppName = publicPageContext?.appName || null;
221
+ const authContext = useContext(UnifiedAuthContext);
222
+ const authAppName = authContext?.appName;
286
223
  const getNodeEnvVar = (key) => typeof process !== "undefined" && process.env ? process.env[key] : void 0;
287
- if (isPublicPage) {
224
+ const publicAppName = useMemo(() => {
225
+ if (!isPublicPage) return null;
288
226
  const getAppName = () => {
289
227
  if (!hasPublicContext) {
290
228
  return "PACE";
@@ -305,27 +243,17 @@ function useAppConfig() {
305
243
  }
306
244
  return "PACE";
307
245
  };
308
- return useMemo3(() => ({
309
- appName: getAppName(),
310
- isLoading: false
311
- }), [contextAppName, hasPublicContext]);
312
- }
313
- try {
314
- const { appName } = useUnifiedAuth();
315
- return useMemo3(() => ({
316
- appName,
317
- isLoading: false
318
- }), [appName]);
319
- } catch (error) {
320
- return useMemo3(() => ({
321
- appName: contextAppName || getNodeEnvVar("VITE_APP_NAME") || getNodeEnvVar("NEXT_PUBLIC_APP_NAME") || "PACE",
322
- isLoading: false
323
- }), [contextAppName]);
324
- }
246
+ return getAppName();
247
+ }, [isPublicPage, contextAppName, hasPublicContext]);
248
+ const authenticatedAppName = useMemo(() => {
249
+ if (isPublicPage) return null;
250
+ return authAppName || "PACE";
251
+ }, [isPublicPage, authAppName]);
252
+ return useMemo(() => ({
253
+ appName: publicAppName || authenticatedAppName || "PACE",
254
+ isLoading: false
255
+ }), [publicAppName, authenticatedAppName]);
325
256
  }
326
-
327
- // src/hooks/useOrganisationSecurity.ts
328
- import { useCallback, useMemo as useMemo4, useEffect, useState } from "react";
329
257
  var useOrganisationSecurity = () => {
330
258
  const { user, session, supabase } = useUnifiedAuth();
331
259
  const { selectedOrganisation, getUserRole, validateOrganisationAccess: validateAccess } = useOrganisations();
@@ -351,7 +279,7 @@ var useOrganisationSecurity = () => {
351
279
  };
352
280
  checkSuperAdmin();
353
281
  }, [user, session, supabase]);
354
- const superAdminContext = useMemo4(() => {
282
+ const superAdminContext = useMemo(() => {
355
283
  return {
356
284
  isSuperAdmin,
357
285
  hasGlobalAccess: isSuperAdmin,
@@ -403,7 +331,7 @@ var useOrganisationSecurity = () => {
403
331
  const targetOrgId = orgId || selectedOrganisation?.id;
404
332
  if (!targetOrgId || !user) return false;
405
333
  try {
406
- const { isPermittedCached } = await import("./api-6LVZTHDS.js");
334
+ const { isPermittedCached } = await import('./api-Y4MQWOFW.js');
407
335
  const scope = {
408
336
  organisationId: targetOrgId,
409
337
  eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
@@ -426,7 +354,7 @@ var useOrganisationSecurity = () => {
426
354
  const targetOrgId = orgId || selectedOrganisation?.id;
427
355
  if (!targetOrgId || !user) return [];
428
356
  try {
429
- const { getPermissionMap } = await import("./api-6LVZTHDS.js");
357
+ const { getPermissionMap } = await import('./api-Y4MQWOFW.js');
430
358
  const scope = {
431
359
  organisationId: targetOrgId,
432
360
  eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
@@ -447,7 +375,7 @@ var useOrganisationSecurity = () => {
447
375
  if (!user || !selectedOrganisation) return;
448
376
  try {
449
377
  if (selectedOrganisation.id) {
450
- const { emitAuditEvent } = await import("./audit-V53FV5AG.js");
378
+ const { emitAuditEvent } = await import('./audit-MYQXYZFU.js');
451
379
  await emitAuditEvent({
452
380
  type: "permission_check",
453
381
  userId: user.id,
@@ -504,15 +432,4 @@ var useOrganisationSecurity = () => {
504
432
  };
505
433
  };
506
434
 
507
- export {
508
- useEvents,
509
- ErrorBoundaryProvider,
510
- ErrorBoundary2 as ErrorBoundary,
511
- PublicPageContext,
512
- PublicPageProvider,
513
- usePublicPageContext,
514
- useIsPublicPage,
515
- useAppConfig,
516
- useOrganisationSecurity
517
- };
518
- //# sourceMappingURL=chunk-OEWDTMG7.js.map
435
+ export { ErrorBoundary2 as ErrorBoundary, ErrorBoundaryProvider, PublicPageContext, PublicPageProvider, useAppConfig, useIsPublicPage, useOrganisationSecurity, usePublicPageContext };
@@ -1,10 +1,3 @@
1
- // src/utils/core/cn.ts
2
- import { clsx } from "clsx";
3
- import { twMerge } from "tailwind-merge";
4
- function cn(...inputs) {
5
- return twMerge(clsx(inputs));
6
- }
7
-
8
1
  // src/utils/validation/htmlSanitization.ts
9
2
  function sanitizeHtml(html) {
10
3
  if (!html || typeof html !== "string") {
@@ -59,10 +52,4 @@ function renderSafeHtml(html, options = {}) {
59
52
  };
60
53
  }
61
54
 
62
- export {
63
- cn,
64
- sanitizeHtml,
65
- validateHtml,
66
- renderSafeHtml
67
- };
68
- //# sourceMappingURL=chunk-M43Y4SSO.js.map
55
+ export { renderSafeHtml, sanitizeHtml, validateHtml };
@@ -5,7 +5,4 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
5
5
  throw Error('Dynamic require of "' + x + '" is not supported');
6
6
  });
7
7
 
8
- export {
9
- __require
10
- };
11
- //# sourceMappingURL=chunk-DGUM43GV.js.map
8
+ export { __require };
@@ -85,29 +85,4 @@ var PermissionErrorCode = /* @__PURE__ */ ((PermissionErrorCode2) => {
85
85
  return PermissionErrorCode2;
86
86
  })(PermissionErrorCode || {});
87
87
 
88
- export {
89
- createUserId,
90
- createSessionToken,
91
- createPermissionString,
92
- createRequestId,
93
- createOrganisationId,
94
- createEventId,
95
- createAppId,
96
- createPageId,
97
- isUserId,
98
- isSessionToken,
99
- isPermissionString,
100
- isRequestId,
101
- isOrganisationId,
102
- isEventId,
103
- isAppId,
104
- isPageId,
105
- assertUserId,
106
- assertOrganisationId,
107
- assertEventId,
108
- assertAppId,
109
- assertPageId,
110
- AuthErrorCode,
111
- PermissionErrorCode
112
- };
113
- //# sourceMappingURL=chunk-QXHPKYJV.js.map
88
+ export { AuthErrorCode, PermissionErrorCode, assertAppId, assertEventId, assertOrganisationId, assertPageId, assertUserId, createAppId, createEventId, createOrganisationId, createPageId, createPermissionString, createRequestId, createSessionToken, createUserId, isAppId, isEventId, isOrganisationId, isPageId, isPermissionString, isRequestId, isSessionToken, isUserId };
@@ -0,0 +1,62 @@
1
+ import { Button } from './chunk-7TYHROIV.js';
2
+ import { ShieldX } from 'lucide-react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ function AccessDenied({
6
+ message,
7
+ resource,
8
+ operation,
9
+ onGoBack,
10
+ onSignOut,
11
+ className = "",
12
+ showSignOut = false
13
+ }) {
14
+ const defaultMessage = message || (resource && operation ? `You don't have permission to ${operation} ${resource}.` : "You don't have permission to access this page.");
15
+ const handleGoBack = () => {
16
+ if (onGoBack) {
17
+ onGoBack();
18
+ } else {
19
+ window.history.back();
20
+ }
21
+ };
22
+ const handleSignOut = () => {
23
+ if (onSignOut) {
24
+ onSignOut();
25
+ }
26
+ };
27
+ return /* @__PURE__ */ jsx(
28
+ "main",
29
+ {
30
+ className: `flex flex-col items-center justify-center min-h-[400px] p-8 text-center ${className}`,
31
+ role: "alert",
32
+ "aria-live": "polite",
33
+ children: /* @__PURE__ */ jsxs("section", { className: "max-w-md", children: [
34
+ /* @__PURE__ */ jsx("div", { className: "mb-6 flex justify-center", children: /* @__PURE__ */ jsx(ShieldX, { className: "size-16 text-acc-500", "aria-hidden": "true" }) }),
35
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-semibold text-sec-900 mb-3", children: "Access Denied" }),
36
+ /* @__PURE__ */ jsx("p", { className: "text-sec-600 mb-6", children: defaultMessage }),
37
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row gap-3 justify-center", children: [
38
+ /* @__PURE__ */ jsx(
39
+ Button,
40
+ {
41
+ onClick: handleGoBack,
42
+ variant: "default",
43
+ "aria-label": "Go back to previous page",
44
+ children: "Go Back"
45
+ }
46
+ ),
47
+ showSignOut && onSignOut && /* @__PURE__ */ jsx(
48
+ Button,
49
+ {
50
+ onClick: handleSignOut,
51
+ variant: "outline",
52
+ "aria-label": "Sign out of your account",
53
+ children: "Sign Out"
54
+ }
55
+ )
56
+ ] })
57
+ ] })
58
+ }
59
+ );
60
+ }
61
+
62
+ export { AccessDenied };
@@ -1,9 +1,6 @@
1
- import {
2
- createLogger
3
- } from "./chunk-PWLANIRT.js";
1
+ import { createLogger } from './chunk-TTRFSOKR.js';
2
+ import { useRef, useEffect } from 'react';
4
3
 
5
- // src/hooks/useComponentPerformance.ts
6
- import { useEffect, useRef } from "react";
7
4
  var log = createLogger("useComponentPerformance");
8
5
  function useComponentPerformance({
9
6
  componentName,
@@ -31,7 +28,4 @@ function useComponentPerformance({
31
28
  };
32
29
  }
33
30
 
34
- export {
35
- useComponentPerformance
36
- };
37
- //# sourceMappingURL=chunk-E66EQZE6.js.map
31
+ export { useComponentPerformance };
@@ -19,7 +19,4 @@ var FileCategory = /* @__PURE__ */ ((FileCategory2) => {
19
19
  return FileCategory2;
20
20
  })(FileCategory || {});
21
21
 
22
- export {
23
- FileCategory
24
- };
25
- //# sourceMappingURL=chunk-ZSAAAMVR.js.map
22
+ export { FileCategory };