@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,9 +1,11 @@
1
- import {
2
- createLogger
3
- } from "./chunk-PWLANIRT.js";
4
- import {
5
- __require
6
- } from "./chunk-DGUM43GV.js";
1
+ import { createLogger } from './chunk-TTRFSOKR.js';
2
+ import { __require } from './chunk-3RG5ZIWI.js';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+
6
+ function cn(...inputs) {
7
+ return twMerge(clsx(inputs));
8
+ }
7
9
 
8
10
  // src/utils/app/appNameResolver.ts
9
11
  var log = createLogger("AppNameResolver");
@@ -106,13 +108,4 @@ function getCurrentAppNameWithFallback(fallback = "default-app") {
106
108
  return getCurrentAppName() || fallback;
107
109
  }
108
110
 
109
- export {
110
- getAppNameFromPackageJson,
111
- getAppNameFromBuildTime,
112
- getAppNameFromGlobal,
113
- getAppNameFromEnvironment,
114
- getCurrentAppName,
115
- setRBACAppName,
116
- getCurrentAppNameWithFallback
117
- };
118
- //# sourceMappingURL=chunk-M7MPQISP.js.map
111
+ export { cn, getAppNameFromBuildTime, getAppNameFromEnvironment, getAppNameFromGlobal, getAppNameFromPackageJson, getCurrentAppName, getCurrentAppNameWithFallback, setRBACAppName };
@@ -1,6 +1,4 @@
1
- import {
2
- logger
3
- } from "./chunk-PWLANIRT.js";
1
+ import { logger } from './chunk-TTRFSOKR.js';
4
2
 
5
3
  // src/rbac/audit-batched.ts
6
4
  var DEFAULT_CONFIG = {
@@ -422,11 +420,4 @@ async function emitAuditEvent(event) {
422
420
  }
423
421
  }
424
422
 
425
- export {
426
- RBACAuditManager,
427
- createAuditManager,
428
- setGlobalAuditManager,
429
- getGlobalAuditManager,
430
- emitAuditEvent
431
- };
432
- //# sourceMappingURL=chunk-63FOKYGO.js.map
423
+ export { RBACAuditManager, createAuditManager, emitAuditEvent, getGlobalAuditManager, setGlobalAuditManager };
@@ -1,6 +1,4 @@
1
- import {
2
- createLogger
3
- } from "./chunk-PWLANIRT.js";
1
+ import { createLogger } from './chunk-TTRFSOKR.js';
4
2
 
5
3
  // src/theming/parseEventColours.ts
6
4
  var log = createLogger("ParseEventColours");
@@ -159,19 +157,7 @@ function getCurrentThemeData() {
159
157
  if (typeof document === "undefined" || document === null) {
160
158
  return null;
161
159
  }
162
- const root = document.documentElement;
163
- const main = {};
164
- const sec = {};
165
- const acc = {};
166
160
  return null;
167
161
  }
168
162
 
169
- export {
170
- parseAndNormalizeEventColours,
171
- applyPalette,
172
- clearPalette,
173
- generateSSRThemeCSS,
174
- isDynamicThemingActive,
175
- getCurrentThemeData
176
- };
177
- //# sourceMappingURL=chunk-L4OXEN46.js.map
163
+ export { applyPalette, clearPalette, generateSSRThemeCSS, getCurrentThemeData, isDynamicThemingActive, parseAndNormalizeEventColours };
@@ -0,0 +1 @@
1
+
@@ -1,33 +1,11 @@
1
- import {
2
- useEvents
3
- } from "./chunk-OEWDTMG7.js";
4
- import {
5
- isSuperAdmin
6
- } from "./chunk-3LPHPB62.js";
7
- import {
8
- assertAppId
9
- } from "./chunk-QXHPKYJV.js";
10
- import {
11
- createAddressFromPlaceResult,
12
- fetchPlaceAutocomplete,
13
- fetchPlaceDetails,
14
- getAddressByPlaceId
15
- } from "./chunk-G37KK66H.js";
16
- import {
17
- setOrganisationContext
18
- } from "./chunk-VBXEHIUJ.js";
19
- import {
20
- applyPalette,
21
- clearPalette,
22
- parseAndNormalizeEventColours
23
- } from "./chunk-L4OXEN46.js";
24
- import {
25
- createLogger,
26
- logger
27
- } from "./chunk-PWLANIRT.js";
1
+ import { clearPalette, parseAndNormalizeEventColours, applyPalette } from './chunk-BVP2BCJF.js';
2
+ import { EventServiceContext } from './chunk-FTCRZOG2.js';
3
+ import { assertAppId } from './chunk-4SXLQIZO.js';
4
+ import { fetchPlaceDetails, createAddressFromPlaceResult, getAddressByPlaceId, fetchPlaceAutocomplete, setOrganisationContext } from './chunk-FYHN4DD5.js';
5
+ import { createLogger, logger } from './chunk-TTRFSOKR.js';
6
+ import { useState, useEffect, useCallback, useRef, useMemo, useContext } from 'react';
7
+ import { useLocation } from 'react-router-dom';
28
8
 
29
- // src/hooks/useDebounce.ts
30
- import { useState, useEffect } from "react";
31
9
  function useDebounce(value, delay) {
32
10
  const [debouncedValue, setDebouncedValue] = useState(value);
33
11
  useEffect(() => {
@@ -40,9 +18,6 @@ function useDebounce(value, delay) {
40
18
  }, [value, delay]);
41
19
  return debouncedValue;
42
20
  }
43
-
44
- // src/hooks/useQueryCache.ts
45
- import { useCallback } from "react";
46
21
  var log = createLogger("useQueryCache");
47
22
  var queryCache = /* @__PURE__ */ new Map();
48
23
  var CLEANUP_INTERVAL_MS = 5 * 60 * 1e3;
@@ -62,7 +37,6 @@ function runCacheCleanup() {
62
37
  }
63
38
  if (typeof window !== "undefined" && !cleanupTimer) {
64
39
  cleanupTimer = setInterval(runCacheCleanup, CLEANUP_INTERVAL_MS);
65
- log.debug("Query cache cleanup initialized.");
66
40
  window.addEventListener("beforeunload", () => {
67
41
  if (cleanupTimer) {
68
42
  clearInterval(cleanupTimer);
@@ -226,9 +200,6 @@ var queryCacheHelpers = {
226
200
  return promise;
227
201
  }
228
202
  };
229
-
230
- // src/hooks/useAddressAutocomplete.ts
231
- import { useState as useState2, useEffect as useEffect3, useCallback as useCallback2, useRef as useRef2, useMemo } from "react";
232
203
  function useAddressAutocomplete(apiKey, inputValue, options = {}) {
233
204
  const {
234
205
  debounceDelay = 300,
@@ -241,18 +212,18 @@ function useAddressAutocomplete(apiKey, inputValue, options = {}) {
241
212
  },
242
213
  autocompleteOptions
243
214
  } = options;
244
- const [suggestions, setSuggestions] = useState2([]);
245
- const [isLoading, setIsLoading] = useState2(false);
246
- const [error, setError] = useState2(null);
215
+ const [suggestions, setSuggestions] = useState([]);
216
+ const [isLoading, setIsLoading] = useState(false);
217
+ const [error, setError] = useState(null);
247
218
  const debouncedInput = useDebounce(inputValue, debounceDelay);
248
219
  const { getCachedQuery } = useQueryCache();
249
- const abortControllerRef = useRef2(null);
220
+ const abortControllerRef = useRef(null);
250
221
  const memoizedAutocompleteOptions = useMemo(
251
222
  () => autocompleteOptions,
252
223
  // eslint-disable-next-line react-hooks/exhaustive-deps
253
224
  [JSON.stringify(autocompleteOptions)]
254
225
  );
255
- useEffect3(() => {
226
+ useEffect(() => {
256
227
  if (abortControllerRef.current) {
257
228
  abortControllerRef.current.abort();
258
229
  }
@@ -303,7 +274,7 @@ function useAddressAutocomplete(apiKey, inputValue, options = {}) {
303
274
  }
304
275
  };
305
276
  }, [debouncedInput, apiKey, cacheEnabled, cacheTTL.autocomplete]);
306
- const selectAddress = useCallback2(
277
+ const selectAddress = useCallback(
307
278
  async (placeId) => {
308
279
  if (!placeId || !apiKey) {
309
280
  return null;
@@ -338,7 +309,7 @@ function useAddressAutocomplete(apiKey, inputValue, options = {}) {
338
309
  // eslint-disable-next-line react-hooks/exhaustive-deps
339
310
  [apiKey, cacheEnabled, cacheTTL.placeDetails]
340
311
  );
341
- const getAddressByPlaceIdFn = useCallback2(
312
+ const getAddressByPlaceIdFn = useCallback(
342
313
  async (placeId) => {
343
314
  if (!placeId || !apiKey) {
344
315
  return null;
@@ -370,7 +341,7 @@ function useAddressAutocomplete(apiKey, inputValue, options = {}) {
370
341
  // eslint-disable-next-line react-hooks/exhaustive-deps
371
342
  [apiKey, cacheEnabled, cacheTTL.placeDetails]
372
343
  );
373
- const clearSuggestions = useCallback2(() => {
344
+ const clearSuggestions = useCallback(() => {
374
345
  setSuggestions([]);
375
346
  setError(null);
376
347
  }, []);
@@ -502,12 +473,12 @@ async function extractFileMetadata(file, options, uploadedBy) {
502
473
  const dimensions = await getImageDimensions(file);
503
474
  metadata.width = dimensions.width;
504
475
  metadata.height = dimensions.height;
505
- } catch (error) {
476
+ } catch (_error) {
506
477
  }
507
478
  }
508
479
  try {
509
480
  metadata.hash = await generateFileHash(file);
510
- } catch (error) {
481
+ } catch (_error) {
511
482
  }
512
483
  return metadata;
513
484
  }
@@ -614,7 +585,7 @@ function getPublicUrl(supabase, path, isPublic = true) {
614
585
  if (/^https?:\/\//i.test(path)) {
615
586
  return path;
616
587
  }
617
- let normalisedPath = path.trim().replace(/^\/+/, "");
588
+ const normalisedPath = path.trim().replace(/^\/+/, "");
618
589
  if (!normalisedPath) {
619
590
  throw new Error("Storage path cannot be empty after normalisation");
620
591
  }
@@ -677,7 +648,6 @@ async function getSignedUrl(supabase, path, options) {
677
648
  }
678
649
  var globalUrlCache = /* @__PURE__ */ new Map();
679
650
  var MAX_CACHE_SIZE = 500;
680
- var DEFAULT_TTL_MS = 3600 * 1e3;
681
651
  function getCacheKey(fileId, filePath, isPublic) {
682
652
  return `file-url:${fileId}:${isPublic ? "public" : "private"}`;
683
653
  }
@@ -892,9 +862,6 @@ async function archiveFile(supabase, path, options) {
892
862
  };
893
863
  }
894
864
  }
895
-
896
- // src/hooks/public/usePublicFileDisplay.ts
897
- import { useState as useState3, useEffect as useEffect4, useCallback as useCallback3 } from "react";
898
865
  var publicFileCache = /* @__PURE__ */ new Map();
899
866
  function usePublicFileDisplay(table_name, record_id, organisation_id, category, options) {
900
867
  const {
@@ -903,14 +870,14 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
903
870
  enableCache = true,
904
871
  supabase
905
872
  } = options;
906
- const [fileUrl, setFileUrl] = useState3(null);
907
- const [fileReference, setFileReference] = useState3(null);
908
- const [fileReferences, setFileReferences] = useState3([]);
909
- const [fileUrls, setFileUrls] = useState3(/* @__PURE__ */ new Map());
910
- const [fileCount, setFileCount] = useState3(0);
911
- const [isLoading, setIsLoading] = useState3(false);
912
- const [error, setError] = useState3(null);
913
- const fetchFiles = useCallback3(async () => {
873
+ const [fileUrl, setFileUrl] = useState(null);
874
+ const [fileReference, setFileReference] = useState(null);
875
+ const [fileReferences, setFileReferences] = useState([]);
876
+ const [fileUrls, setFileUrls] = useState(/* @__PURE__ */ new Map());
877
+ const [fileCount, setFileCount] = useState(0);
878
+ const [isLoading, setIsLoading] = useState(false);
879
+ const [error, setError] = useState(null);
880
+ const fetchFiles = useCallback(async () => {
914
881
  if (!table_name || !record_id || !supabase) {
915
882
  setFileUrl(null);
916
883
  setFileReference(null);
@@ -1162,7 +1129,7 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
1162
1129
  setIsLoading(false);
1163
1130
  }
1164
1131
  }, [table_name, record_id, organisation_id, category, supabase, cacheTtl, enableCache]);
1165
- useEffect4(() => {
1132
+ useEffect(() => {
1166
1133
  if (table_name && record_id) {
1167
1134
  fetchFiles();
1168
1135
  } else {
@@ -1175,7 +1142,7 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
1175
1142
  setError(null);
1176
1143
  }
1177
1144
  }, [fetchFiles, table_name, record_id, organisation_id]);
1178
- const refetch = useCallback3(async () => {
1145
+ const refetch = useCallback(async () => {
1179
1146
  if (!table_name || !record_id) return;
1180
1147
  if (enableCache) {
1181
1148
  const cacheKey = `public_file_${table_name}_${record_id}_${organisation_id === void 0 ? "undefined" : organisation_id ?? "null"}_${category || "all"}`;
@@ -1209,9 +1176,6 @@ function getPublicFileDisplayCacheStats() {
1209
1176
  };
1210
1177
  }
1211
1178
 
1212
- // src/hooks/useFileDisplay.ts
1213
- import { useState as useState4, useEffect as useEffect5, useCallback as useCallback4, useRef as useRef3 } from "react";
1214
-
1215
1179
  // src/utils/file-reference/index.ts
1216
1180
  var log3 = createLogger("FileReferenceService");
1217
1181
  var FileReferenceServiceImpl = class {
@@ -1270,6 +1234,19 @@ var FileReferenceServiceImpl = class {
1270
1234
  authenticatedUserId = authUser.id;
1271
1235
  log3.debug("Using authenticated user ID for user-scoped file upload", { userId: authenticatedUserId });
1272
1236
  }
1237
+ let isSuperAdminUser = false;
1238
+ const userIdForCheck = authenticatedUserId || options.userId;
1239
+ if (userIdForCheck) {
1240
+ try {
1241
+ const { isSuperAdmin } = await import('./api-Y4MQWOFW.js');
1242
+ isSuperAdminUser = await isSuperAdmin(userIdForCheck);
1243
+ if (isSuperAdminUser) {
1244
+ log3.debug("Super admin detected - bypassing permission checks", { userId: userIdForCheck });
1245
+ }
1246
+ } catch (superAdminCheckError) {
1247
+ log3.warn("Failed to check super-admin status, proceeding with normal permission checks", superAdminCheckError);
1248
+ }
1249
+ }
1273
1250
  const uploadResult = await uploadFile(this.supabase, file, {
1274
1251
  appName: "file-reference",
1275
1252
  orgId: options.organisation_id || void 0,
@@ -1296,6 +1273,17 @@ var FileReferenceServiceImpl = class {
1296
1273
  if (!isUserScoped && options.organisation_id) {
1297
1274
  await setOrganisationContext(this.supabase, options.organisation_id);
1298
1275
  }
1276
+ let rpcUserId = null;
1277
+ if (authenticatedUserId) {
1278
+ rpcUserId = authenticatedUserId;
1279
+ } else if (options.userId) {
1280
+ rpcUserId = options.userId;
1281
+ } else {
1282
+ const { data: { user: authUser } } = await this.supabase.auth.getUser();
1283
+ if (authUser) {
1284
+ rpcUserId = authUser.id;
1285
+ }
1286
+ }
1299
1287
  const { data, error } = await this.supabase.rpc("data_file_reference_create", {
1300
1288
  p_table_name: options.table_name,
1301
1289
  p_record_id: options.record_id,
@@ -1315,23 +1303,14 @@ var FileReferenceServiceImpl = class {
1315
1303
  ...options.custom_metadata
1316
1304
  },
1317
1305
  p_is_public: options.is_public || false,
1318
- p_user_id: authenticatedUserId || options.userId || null
1319
- // Pass authenticated user ID for user-scoped files
1306
+ p_user_id: rpcUserId
1307
+ // Always pass authenticated user ID for SECURITY DEFINER functions
1320
1308
  });
1321
1309
  if (error) {
1322
1310
  await deleteFile(this.supabase, filePath, options.is_public || false);
1323
1311
  throw new Error(`Failed to create file reference: ${error.message}`);
1324
1312
  }
1325
1313
  if (!data || data === null) {
1326
- let isSuperAdminUser = false;
1327
- try {
1328
- const { data: { user: authUser } } = await this.supabase.auth.getUser();
1329
- if (authUser) {
1330
- isSuperAdminUser = await isSuperAdmin(authUser.id);
1331
- }
1332
- } catch (superAdminCheckError) {
1333
- log3.warn("Failed to check super-admin status", superAdminCheckError);
1334
- }
1335
1314
  await deleteFile(this.supabase, filePath, options.is_public || false);
1336
1315
  const appName = await this.getAppName(options.app_id).catch(() => "unknown");
1337
1316
  const pageContextDisplay = options.pageContext || "undefined";
@@ -1684,20 +1663,20 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
1684
1663
  enableCache = true,
1685
1664
  supabase
1686
1665
  } = options;
1687
- const [fileUrl, setFileUrl] = useState4(null);
1688
- const [fileReference, setFileReference] = useState4(null);
1689
- const [fileReferences, setFileReferences] = useState4([]);
1690
- const [fileUrls, setFileUrls] = useState4(/* @__PURE__ */ new Map());
1691
- const [fileCount, setFileCount] = useState4(0);
1692
- const [isLoading, setIsLoading] = useState4(false);
1693
- const [error, setError] = useState4(null);
1694
- const isMountedRef = useRef3(true);
1666
+ const [fileUrl, setFileUrl] = useState(null);
1667
+ const [fileReference, setFileReference] = useState(null);
1668
+ const [fileReferences, setFileReferences] = useState([]);
1669
+ const [fileUrls, setFileUrls] = useState(/* @__PURE__ */ new Map());
1670
+ const [fileCount, setFileCount] = useState(0);
1671
+ const [isLoading, setIsLoading] = useState(false);
1672
+ const [error, setError] = useState(null);
1673
+ const isMountedRef = useRef(true);
1695
1674
  const safeSetState = (setter, value) => {
1696
1675
  if (isMountedRef.current) {
1697
1676
  setter(value);
1698
1677
  }
1699
1678
  };
1700
- const fetchFiles = useCallback4(async () => {
1679
+ const fetchFiles = useCallback(async () => {
1701
1680
  if (!table_name || !record_id || !supabase) {
1702
1681
  safeSetState(setFileUrl, null);
1703
1682
  safeSetState(setFileReference, null);
@@ -2046,7 +2025,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
2046
2025
  safeSetState(setIsLoading, false);
2047
2026
  }
2048
2027
  }, [table_name, record_id, organisation_id, category, supabase, cacheTtl, enableCache]);
2049
- useEffect5(() => {
2028
+ useEffect(() => {
2050
2029
  isMountedRef.current = true;
2051
2030
  if (table_name && record_id && supabase) {
2052
2031
  fetchFiles().catch((err) => {
@@ -2067,7 +2046,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
2067
2046
  isMountedRef.current = false;
2068
2047
  };
2069
2048
  }, [table_name, record_id, organisation_id, supabase]);
2070
- const refetch = useCallback4(async () => {
2049
+ const refetch = useCallback(async () => {
2071
2050
  if (!table_name || !record_id || !supabase) return;
2072
2051
  if (enableCache) {
2073
2052
  const cacheKey = `file_${table_name}_${record_id}_${organisation_id === void 0 ? "undefined" : organisation_id ?? "null"}_${category || "all"}`;
@@ -2108,29 +2087,13 @@ function invalidateFileDisplayCache(table_name, record_id, organisation_id, cate
2108
2087
  authenticatedFileCache.delete(allCategoryKey);
2109
2088
  }
2110
2089
  }
2111
-
2112
- // src/hooks/useEventTheme.ts
2113
- import { useEffect as useEffect6 } from "react";
2114
- import { useLocation } from "react-router-dom";
2115
2090
  var log4 = createLogger("useEventTheme");
2116
2091
  function useEventTheme(event) {
2117
2092
  const location = useLocation();
2118
- let selectedEvent;
2119
- try {
2120
- if (event === void 0) {
2121
- const eventsContext = useEvents();
2122
- selectedEvent = eventsContext.selectedEvent;
2123
- } else {
2124
- selectedEvent = event;
2125
- }
2126
- } catch (error) {
2127
- if (event !== void 0) {
2128
- selectedEvent = event;
2129
- } else {
2130
- selectedEvent = null;
2131
- }
2132
- }
2133
- useEffect6(() => {
2093
+ const eventServiceContext = useContext(EventServiceContext);
2094
+ const eventsContextSelectedEvent = eventServiceContext?.eventService?.getSelectedEvent() ?? null;
2095
+ const selectedEvent = event !== void 0 ? event : eventsContextSelectedEvent;
2096
+ useEffect(() => {
2134
2097
  const isOnLoginRoute = location.pathname === "/login" || location.pathname.startsWith("/login");
2135
2098
  if (isOnLoginRoute) {
2136
2099
  clearPalette();
@@ -2155,14 +2118,11 @@ function useEventTheme(event) {
2155
2118
  };
2156
2119
  }, [selectedEvent, location.pathname]);
2157
2120
  }
2158
-
2159
- // src/hooks/usePreventTabReload.ts
2160
- import { useEffect as useEffect7, useRef as useRef4 } from "react";
2161
2121
  function usePreventTabReload(options = {}) {
2162
2122
  const { enabled = true, gracePeriodMs = 2e3 } = options;
2163
- const isRestoringFromCacheRef = useRef4(false);
2164
- const gracePeriodTimeoutRef = useRef4(null);
2165
- useEffect7(() => {
2123
+ const isRestoringFromCacheRef = useRef(false);
2124
+ const gracePeriodTimeoutRef = useRef(null);
2125
+ useEffect(() => {
2166
2126
  if (!enabled || typeof window === "undefined") return;
2167
2127
  const handlePageShow = (event) => {
2168
2128
  if (event.persisted) {
@@ -2198,40 +2158,4 @@ function usePreventTabReload(options = {}) {
2198
2158
  }, [enabled, gracePeriodMs]);
2199
2159
  }
2200
2160
 
2201
- export {
2202
- useDebounce,
2203
- cleanupQueryCache,
2204
- useQueryCache,
2205
- queryCacheHelpers,
2206
- useAddressAutocomplete,
2207
- FILE_SIZE_LIMITS,
2208
- DEFAULT_FILE_SIZE_LIMIT,
2209
- APP_PATH_MAPPING,
2210
- STORAGE_CONFIG,
2211
- getFileSizeLimit,
2212
- getBucketName,
2213
- validateFileSize,
2214
- generateFilePath,
2215
- generateUniqueFileName,
2216
- extractFileMetadata,
2217
- uploadFile,
2218
- getPublicUrl,
2219
- getSignedUrl,
2220
- generateFileUrlsBatch,
2221
- deleteFile,
2222
- listFiles,
2223
- downloadFile,
2224
- archiveFile,
2225
- usePublicFileDisplay,
2226
- clearPublicFileDisplayCache,
2227
- getPublicFileDisplayCacheStats,
2228
- createFileReferenceService,
2229
- uploadFileWithReference,
2230
- useFileDisplay,
2231
- clearFileDisplayCache,
2232
- getFileDisplayCacheStats,
2233
- invalidateFileDisplayCache,
2234
- useEventTheme,
2235
- usePreventTabReload
2236
- };
2237
- //# sourceMappingURL=chunk-YKRAFF5K.js.map
2161
+ export { APP_PATH_MAPPING, DEFAULT_FILE_SIZE_LIMIT, FILE_SIZE_LIMITS, STORAGE_CONFIG, archiveFile, cleanupQueryCache, clearFileDisplayCache, clearPublicFileDisplayCache, createFileReferenceService, deleteFile, downloadFile, extractFileMetadata, generateFilePath, generateFileUrlsBatch, generateUniqueFileName, getBucketName, getFileDisplayCacheStats, getFileSizeLimit, getPublicFileDisplayCacheStats, getPublicUrl, getSignedUrl, invalidateFileDisplayCache, listFiles, queryCacheHelpers, uploadFile, uploadFileWithReference, useAddressAutocomplete, useDebounce, useEventTheme, useFileDisplay, usePreventTabReload, usePublicFileDisplay, useQueryCache, validateFileSize };