@jmruthers/pace-core 0.6.5 → 0.6.7

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 (473) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +5 -403
  3. package/audit-tool/00-dependencies.cjs +394 -0
  4. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  5. package/audit-tool/audits/02-project-structure.cjs +255 -0
  6. package/audit-tool/audits/03-architecture.cjs +196 -0
  7. package/audit-tool/audits/04-code-quality.cjs +149 -0
  8. package/audit-tool/audits/05-styling.cjs +224 -0
  9. package/audit-tool/audits/06-security-rbac.cjs +544 -0
  10. package/audit-tool/audits/07-api-tech-stack.cjs +301 -0
  11. package/audit-tool/audits/08-testing-documentation.cjs +202 -0
  12. package/audit-tool/audits/09-operations.cjs +208 -0
  13. package/audit-tool/index.cjs +291 -0
  14. package/audit-tool/utils/code-utils.cjs +218 -0
  15. package/audit-tool/utils/file-utils.cjs +230 -0
  16. package/audit-tool/utils/report-utils.cjs +241 -0
  17. package/core-usage-manifest.json +93 -0
  18. package/cursor-rules/00-standards-overview.mdc +156 -0
  19. package/cursor-rules/01-pace-core-compliance.mdc +586 -0
  20. package/cursor-rules/02-project-structure.mdc +42 -4
  21. package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +126 -10
  22. package/cursor-rules/04-code-quality.mdc +419 -0
  23. package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +104 -34
  24. package/cursor-rules/06-security-rbac.mdc +518 -0
  25. package/cursor-rules/07-api-tech-stack.mdc +377 -0
  26. package/cursor-rules/08-testing-documentation.mdc +324 -0
  27. package/cursor-rules/09-operations.mdc +365 -0
  28. package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
  29. package/dist/DataTable-7PMH7XN7.js +15 -0
  30. package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
  31. package/dist/{PublicPageProvider-QTFVrL-Z.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +33 -72
  32. package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
  33. package/dist/api-Y4MQWOFW.js +4 -0
  34. package/dist/audit-MYQXYZFU.js +3 -0
  35. package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
  36. package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
  37. package/dist/{chunk-UPPMRMYG.js → chunk-5X4QLXRG.js} +73 -151
  38. package/dist/chunk-6F3IILHI.js +62 -0
  39. package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
  40. package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
  41. package/dist/{chunk-FMUCXFII.js → chunk-7ILTDCL2.js} +9 -5
  42. package/dist/{chunk-M43Y4SSO.js → chunk-A3W6LW53.js} +15 -13
  43. package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
  44. package/dist/{chunk-HU2C6SSC.js → chunk-BM4CQ5P3.js} +606 -559
  45. package/dist/chunk-C7NSAPTL.js +1 -0
  46. package/dist/{chunk-J36DSWQK.js → chunk-FEJLJNWA.js} +7 -41
  47. package/dist/{chunk-IHB5DR3H.js → chunk-FTCRZOG2.js} +188 -387
  48. package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
  49. package/dist/chunk-GHYHJTYV.js +994 -0
  50. package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
  51. package/dist/{chunk-FFQEQTNW.js → chunk-IUBRCBSY.js} +134 -45
  52. package/dist/{chunk-6COVEUS7.js → chunk-JGWDVX64.js} +983 -1034
  53. package/dist/{chunk-RGAWHO7N.js → chunk-L4XMVJKY.js} +77 -222
  54. package/dist/chunk-MBADTM7L.js +64 -0
  55. package/dist/{chunk-M7MPQISP.js → chunk-OJ4SKRSV.js} +3 -16
  56. package/dist/{chunk-IVOFDYWT.js → chunk-Q7Q7V5NV.js} +2109 -1604
  57. package/dist/{chunk-JGRYX5UX.js → chunk-S7DKJPLT.js} +29 -58
  58. package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
  59. package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
  60. package/dist/{chunk-NTM7ZSB6.js → chunk-VBCS3DUA.js} +261 -168
  61. package/dist/{chunk-EFN2EIMK.js → chunk-ZFYPMX46.js} +271 -87
  62. package/dist/{chunk-L4OXEN46.js → chunk-ZKAWKYT4.js} +10 -24
  63. package/dist/components.d.ts +7 -5
  64. package/dist/components.js +46 -257
  65. package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
  66. package/dist/eslint-rules/index.cjs +35 -0
  67. package/{src/eslint-rules/pace-core-compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +234 -235
  68. package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
  69. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  70. package/dist/eslint-rules/rules/06-security-rbac.cjs +806 -0
  71. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
  72. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  73. package/dist/eslint-rules/utils/helpers.cjs +42 -0
  74. package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
  75. package/dist/hooks.d.ts +6 -6
  76. package/dist/hooks.js +62 -172
  77. package/dist/icons/index.d.ts +1 -0
  78. package/dist/icons/index.js +1 -0
  79. package/dist/index.d.ts +12 -11
  80. package/dist/index.js +67 -660
  81. package/dist/providers.d.ts +2 -2
  82. package/dist/providers.js +8 -35
  83. package/dist/rbac/eslint-rules.d.ts +46 -44
  84. package/dist/rbac/eslint-rules.js +7 -4
  85. package/dist/rbac/index.d.ts +109 -586
  86. package/dist/rbac/index.js +14 -207
  87. package/dist/styles/index.js +2 -12
  88. package/dist/theming/runtime.d.ts +14 -1
  89. package/dist/theming/runtime.js +3 -19
  90. package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
  91. package/dist/{types-CkbwOr4Y.d.ts → types-DXstZpNI.d.ts} +4 -17
  92. package/dist/types-t9H8qKRw.d.ts +55 -0
  93. package/dist/types.d.ts +1 -1
  94. package/dist/types.js +7 -94
  95. package/dist/{usePublicRouteParams-ClnV4tnv.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +20 -20
  96. package/dist/utils.d.ts +24 -117
  97. package/dist/utils.js +54 -392
  98. package/docs/README.md +17 -7
  99. package/docs/api/README.md +4 -402
  100. package/docs/api/modules.md +301 -871
  101. package/docs/api-reference/components.md +21 -21
  102. package/docs/api-reference/deprecated.md +31 -6
  103. package/docs/api-reference/hooks.md +80 -80
  104. package/docs/api-reference/rpc-functions.md +78 -3
  105. package/docs/api-reference/types.md +1 -1
  106. package/docs/api-reference/utilities.md +1 -1
  107. package/docs/architecture/README.md +1 -1
  108. package/docs/core-concepts/events.md +3 -3
  109. package/docs/core-concepts/organisations.md +6 -6
  110. package/docs/core-concepts/permissions.md +6 -6
  111. package/docs/documentation-index.md +12 -18
  112. package/docs/getting-started/cursor-rules.md +3 -23
  113. package/docs/getting-started/dependencies.md +650 -0
  114. package/docs/getting-started/documentation-index.md +1 -1
  115. package/docs/getting-started/examples/README.md +4 -4
  116. package/docs/getting-started/examples/full-featured-app.md +1 -1
  117. package/docs/getting-started/faq.md +2 -2
  118. package/docs/getting-started/installation-guide.md +20 -7
  119. package/docs/getting-started/quick-reference.md +4 -4
  120. package/docs/getting-started/quick-start.md +23 -12
  121. package/docs/implementation-guides/authentication.md +15 -15
  122. package/docs/implementation-guides/component-styling.md +1 -1
  123. package/docs/implementation-guides/data-tables.md +126 -33
  124. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  125. package/docs/implementation-guides/dynamic-colors.md +3 -3
  126. package/docs/implementation-guides/file-upload-storage.md +2 -2
  127. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  128. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  129. package/docs/implementation-guides/large-datasets.md +3 -2
  130. package/docs/implementation-guides/organisation-security.md +2 -2
  131. package/docs/implementation-guides/performance.md +2 -2
  132. package/docs/implementation-guides/permission-enforcement.md +5 -1
  133. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  134. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  135. package/docs/rbac/MIGRATION_GUIDE.md +819 -0
  136. package/docs/rbac/RBAC_CONTRACT.md +724 -0
  137. package/docs/rbac/README.md +17 -8
  138. package/docs/rbac/advanced-patterns.md +6 -6
  139. package/docs/rbac/api-reference.md +20 -20
  140. package/docs/rbac/edge-functions-guide.md +376 -0
  141. package/docs/rbac/event-based-apps.md +3 -3
  142. package/docs/rbac/examples.md +41 -41
  143. package/docs/rbac/getting-started.md +37 -37
  144. package/docs/rbac/performance.md +1 -1
  145. package/docs/rbac/quick-start.md +52 -52
  146. package/docs/rbac/secure-client-protection.md +1 -35
  147. package/docs/rbac/troubleshooting.md +1 -1
  148. package/docs/security/README.md +5 -5
  149. package/docs/standards/0-standards-overview.md +220 -0
  150. package/docs/standards/1-pace-core-compliance-standards.md +986 -0
  151. package/docs/standards/2-project-structure-standards.md +949 -0
  152. package/docs/standards/3-architecture-standards.md +606 -0
  153. package/docs/standards/4-code-quality-standards.md +728 -0
  154. package/docs/standards/5-styling-standards.md +348 -0
  155. package/docs/standards/{07-rbac-and-rls-standard.md → 6-security-rbac-standards.md} +269 -66
  156. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  157. package/docs/standards/8-testing-documentation-standards.md +401 -0
  158. package/docs/standards/9-operations-standards.md +1102 -0
  159. package/docs/standards/README.md +185 -57
  160. package/docs/troubleshooting/README.md +4 -4
  161. package/docs/troubleshooting/common-issues.md +2 -2
  162. package/docs/troubleshooting/debugging.md +9 -9
  163. package/docs/troubleshooting/migration.md +4 -4
  164. package/docs/troubleshooting/organisation-context-setup.md +42 -19
  165. package/eslint-config-pace-core.cjs +33 -6
  166. package/package.json +35 -23
  167. package/scripts/install-cursor-rules.cjs +25 -6
  168. package/scripts/install-eslint-config.cjs +284 -0
  169. package/src/__tests__/fixtures/supabase.ts +1 -1
  170. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +3 -3
  171. package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
  172. package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
  173. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  174. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +13 -13
  175. package/src/__tests__/helpers/component-test-utils.tsx +1 -1
  176. package/src/__tests__/helpers/supabaseMock.ts +2 -2
  177. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  178. package/src/__tests__/public-recipe-view.test.ts +38 -9
  179. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  180. package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
  181. package/src/__tests__/templates/component.test.template.tsx +18 -15
  182. package/src/components/Button/Button.tsx +5 -1
  183. package/src/components/Calendar/Calendar.tsx +201 -47
  184. package/src/components/ContextSelector/ContextSelector.tsx +106 -119
  185. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  186. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
  187. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
  188. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  189. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  190. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  191. package/src/components/DataTable/components/DataTableCore.tsx +186 -13
  192. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  193. package/src/components/DataTable/components/DataTableLayout.tsx +35 -21
  194. package/src/components/DataTable/components/EditFields.tsx +23 -3
  195. package/src/components/DataTable/components/EditableRow.tsx +12 -9
  196. package/src/components/DataTable/components/EmptyState.tsx +10 -9
  197. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  198. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  199. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  200. package/src/components/DataTable/components/RowComponent.tsx +12 -0
  201. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  202. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  203. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  204. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  205. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  206. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  207. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
  208. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
  209. package/src/components/DataTable/components/index.ts +2 -1
  210. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
  211. package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
  212. package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
  213. package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
  214. package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
  215. package/src/components/DataTable/types.ts +5 -18
  216. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  217. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
  218. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  219. package/src/components/DateTimeField/DateTimeField.tsx +10 -9
  220. package/src/components/Dialog/Dialog.test.tsx +128 -104
  221. package/src/components/Dialog/Dialog.tsx +742 -24
  222. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  223. package/src/components/FileDisplay/FileDisplay.test.tsx +4 -2
  224. package/src/components/FileDisplay/FileDisplay.tsx +23 -17
  225. package/src/components/FileUpload/FileUpload.test.tsx +52 -14
  226. package/src/components/FileUpload/FileUpload.tsx +112 -130
  227. package/src/components/Form/Form.test.tsx +6 -8
  228. package/src/components/Form/Form.tsx +365 -4
  229. package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
  230. package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
  231. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
  232. package/src/components/PaceAppLayout/PaceAppLayout.tsx +11 -15
  233. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
  234. package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
  235. package/src/components/Progress/Progress.tsx +2 -4
  236. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  237. package/src/components/Select/Select.tsx +109 -98
  238. package/src/components/Select/types.ts +4 -1
  239. package/src/components/UserMenu/UserMenu.tsx +9 -6
  240. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  241. package/src/hooks/__tests__/hooks.integration.test.tsx +55 -57
  242. package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
  243. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
  244. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
  245. package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
  246. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
  247. package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
  248. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
  249. package/src/hooks/public/usePublicEvent.ts +67 -195
  250. package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
  251. package/src/hooks/public/usePublicEventLogo.ts +24 -14
  252. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  253. package/src/hooks/public/usePublicRouteParams.ts +5 -5
  254. package/src/hooks/useAppConfig.ts +28 -26
  255. package/src/hooks/useEventTheme.test.ts +217 -239
  256. package/src/hooks/useEventTheme.ts +16 -28
  257. package/src/hooks/useFileDisplay.ts +2 -2
  258. package/src/hooks/useOrganisationPermissions.ts +5 -7
  259. package/src/hooks/useQueryCache.ts +0 -1
  260. package/src/hooks/useSessionDraft.ts +380 -0
  261. package/src/hooks/useSessionRestoration.ts +3 -1
  262. package/src/icons/index.ts +27 -0
  263. package/src/index.ts +5 -0
  264. package/src/providers/OrganisationProvider.tsx +23 -14
  265. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  266. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  267. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  268. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  269. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  270. package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
  271. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  272. package/src/providers/services/EventServiceProvider.tsx +1 -24
  273. package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
  274. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  275. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +13 -10
  276. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
  277. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
  278. package/src/rbac/adapters.tsx +7 -295
  279. package/src/rbac/api.test.ts +44 -56
  280. package/src/rbac/api.ts +10 -17
  281. package/src/rbac/cache-invalidation.ts +0 -1
  282. package/src/rbac/compliance/index.ts +10 -0
  283. package/src/rbac/compliance/pattern-detector.ts +553 -0
  284. package/src/rbac/compliance/runtime-compliance.ts +22 -0
  285. package/src/rbac/components/AccessDenied.tsx +150 -0
  286. package/src/rbac/components/NavigationGuard.tsx +12 -20
  287. package/src/rbac/components/PagePermissionGuard.tsx +4 -24
  288. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
  289. package/src/rbac/components/index.ts +3 -41
  290. package/src/rbac/eslint-rules.js +1 -1
  291. package/src/rbac/hooks/index.ts +0 -3
  292. package/src/rbac/hooks/permissions/index.ts +0 -3
  293. package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
  294. package/src/rbac/hooks/usePermissions.ts +0 -3
  295. package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
  296. package/src/rbac/hooks/useResolvedScope.ts +58 -140
  297. package/src/rbac/hooks/useResourcePermissions.test.ts +124 -38
  298. package/src/rbac/hooks/useResourcePermissions.ts +139 -48
  299. package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
  300. package/src/rbac/hooks/useRoleManagement.ts +147 -19
  301. package/src/rbac/hooks/useSecureSupabase.ts +4 -8
  302. package/src/rbac/index.ts +7 -9
  303. package/src/rbac/utils/contextValidator.ts +9 -7
  304. package/src/services/AuthService.ts +130 -18
  305. package/src/services/EventService.ts +4 -97
  306. package/src/services/InactivityService.ts +16 -0
  307. package/src/services/OrganisationService.ts +7 -44
  308. package/src/services/__tests__/OrganisationService.test.ts +26 -8
  309. package/src/services/base/BaseService.ts +0 -3
  310. package/src/styles/core.css +7 -0
  311. package/src/theming/__tests__/parseEventColours.test.ts +9 -3
  312. package/src/theming/parseEventColours.ts +22 -10
  313. package/src/types/database.generated.ts +4733 -3809
  314. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  315. package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
  316. package/src/utils/context/organisationContext.test.ts +13 -28
  317. package/src/utils/context/organisationContext.ts +21 -52
  318. package/src/utils/dynamic/dynamicUtils.ts +1 -1
  319. package/src/utils/file-reference/index.ts +39 -15
  320. package/src/utils/formatting/formatDateTime.test.ts +3 -2
  321. package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
  322. package/src/utils/index.ts +4 -1
  323. package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
  324. package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
  325. package/src/utils/persistence/keyDerivation.ts +304 -0
  326. package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
  327. package/src/utils/security/secureStorage.ts +5 -5
  328. package/src/utils/storage/README.md +1 -1
  329. package/src/utils/storage/helpers.ts +3 -3
  330. package/src/utils/supabase/createBaseClient.ts +147 -0
  331. package/src/utils/timezone/timezone.test.ts +1 -2
  332. package/src/utils/timezone/timezone.ts +1 -1
  333. package/src/utils/validation/csrf.ts +4 -4
  334. package/cursor-rules/00-pace-core-compliance.mdc +0 -331
  335. package/cursor-rules/01-standards-compliance.mdc +0 -244
  336. package/cursor-rules/04-testing-standards.mdc +0 -268
  337. package/cursor-rules/05-bug-reports-and-features.mdc +0 -246
  338. package/cursor-rules/06-code-quality.mdc +0 -309
  339. package/cursor-rules/07-tech-stack-compliance.mdc +0 -214
  340. package/cursor-rules/CHANGELOG.md +0 -119
  341. package/cursor-rules/README.md +0 -192
  342. package/dist/DataTable-AOVNCPTX.js +0 -175
  343. package/dist/DataTable-AOVNCPTX.js.map +0 -1
  344. package/dist/UnifiedAuthProvider-4SBX4LU5.js +0 -18
  345. package/dist/UnifiedAuthProvider-4SBX4LU5.js.map +0 -1
  346. package/dist/api-O6HTBX5Y.js +0 -52
  347. package/dist/api-O6HTBX5Y.js.map +0 -1
  348. package/dist/audit-V53FV5AG.js +0 -17
  349. package/dist/audit-V53FV5AG.js.map +0 -1
  350. package/dist/chunk-5DRSZLL2.js.map +0 -1
  351. package/dist/chunk-63FOKYGO.js.map +0 -1
  352. package/dist/chunk-6COVEUS7.js.map +0 -1
  353. package/dist/chunk-AFVQODI2.js +0 -263
  354. package/dist/chunk-AFVQODI2.js.map +0 -1
  355. package/dist/chunk-DGUM43GV.js.map +0 -1
  356. package/dist/chunk-E66EQZE6.js.map +0 -1
  357. package/dist/chunk-EFN2EIMK.js.map +0 -1
  358. package/dist/chunk-FFQEQTNW.js.map +0 -1
  359. package/dist/chunk-FMUCXFII.js.map +0 -1
  360. package/dist/chunk-G37KK66H.js.map +0 -1
  361. package/dist/chunk-G7QEZTYQ.js +0 -2053
  362. package/dist/chunk-G7QEZTYQ.js.map +0 -1
  363. package/dist/chunk-HU2C6SSC.js.map +0 -1
  364. package/dist/chunk-IHB5DR3H.js.map +0 -1
  365. package/dist/chunk-IVOFDYWT.js.map +0 -1
  366. package/dist/chunk-J36DSWQK.js.map +0 -1
  367. package/dist/chunk-JGRYX5UX.js.map +0 -1
  368. package/dist/chunk-KQCRWDSA.js +0 -1
  369. package/dist/chunk-KQCRWDSA.js.map +0 -1
  370. package/dist/chunk-L4OXEN46.js.map +0 -1
  371. package/dist/chunk-LMC26NLJ.js +0 -84
  372. package/dist/chunk-LMC26NLJ.js.map +0 -1
  373. package/dist/chunk-M43Y4SSO.js.map +0 -1
  374. package/dist/chunk-M7MPQISP.js.map +0 -1
  375. package/dist/chunk-NTM7ZSB6.js.map +0 -1
  376. package/dist/chunk-PWLANIRT.js.map +0 -1
  377. package/dist/chunk-QXHPKYJV.js.map +0 -1
  378. package/dist/chunk-RGAWHO7N.js.map +0 -1
  379. package/dist/chunk-UPPMRMYG.js.map +0 -1
  380. package/dist/chunk-VBXEHIUJ.js.map +0 -1
  381. package/dist/chunk-ZSAAAMVR.js.map +0 -1
  382. package/dist/components.js.map +0 -1
  383. package/dist/contextValidator-5OGXSPKS.js +0 -9
  384. package/dist/contextValidator-5OGXSPKS.js.map +0 -1
  385. package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
  386. package/dist/hooks.js.map +0 -1
  387. package/dist/index.js.map +0 -1
  388. package/dist/providers.js.map +0 -1
  389. package/dist/rbac/eslint-rules.js.map +0 -1
  390. package/dist/rbac/index.js.map +0 -1
  391. package/dist/styles/index.js.map +0 -1
  392. package/dist/theming/runtime.js.map +0 -1
  393. package/dist/types.js.map +0 -1
  394. package/dist/utils.js.map +0 -1
  395. package/docs/best-practices/README.md +0 -472
  396. package/docs/best-practices/accessibility.md +0 -601
  397. package/docs/best-practices/common-patterns.md +0 -516
  398. package/docs/best-practices/deployment.md +0 -1103
  399. package/docs/best-practices/performance.md +0 -1328
  400. package/docs/best-practices/security.md +0 -940
  401. package/docs/best-practices/testing.md +0 -1034
  402. package/docs/rbac/compliance/compliance-guide.md +0 -544
  403. package/docs/standards/01-architecture-standard.md +0 -44
  404. package/docs/standards/02-api-and-rpc-standard.md +0 -39
  405. package/docs/standards/03-component-standard.md +0 -32
  406. package/docs/standards/04-code-style-standard.md +0 -32
  407. package/docs/standards/05-security-standard.md +0 -44
  408. package/docs/standards/06-testing-and-docs-standard.md +0 -29
  409. package/docs/standards/pace-core-compliance.md +0 -432
  410. package/scripts/audit/core/checks/accessibility.cjs +0 -197
  411. package/scripts/audit/core/checks/api-usage.cjs +0 -191
  412. package/scripts/audit/core/checks/bundle.cjs +0 -142
  413. package/scripts/audit/core/checks/compliance.cjs +0 -2706
  414. package/scripts/audit/core/checks/config.cjs +0 -54
  415. package/scripts/audit/core/checks/coverage.cjs +0 -84
  416. package/scripts/audit/core/checks/dependencies.cjs +0 -994
  417. package/scripts/audit/core/checks/documentation.cjs +0 -268
  418. package/scripts/audit/core/checks/environment.cjs +0 -116
  419. package/scripts/audit/core/checks/error-handling.cjs +0 -340
  420. package/scripts/audit/core/checks/forms.cjs +0 -172
  421. package/scripts/audit/core/checks/heuristics.cjs +0 -68
  422. package/scripts/audit/core/checks/hooks.cjs +0 -334
  423. package/scripts/audit/core/checks/imports.cjs +0 -244
  424. package/scripts/audit/core/checks/performance.cjs +0 -325
  425. package/scripts/audit/core/checks/routes.cjs +0 -117
  426. package/scripts/audit/core/checks/state.cjs +0 -130
  427. package/scripts/audit/core/checks/structure.cjs +0 -65
  428. package/scripts/audit/core/checks/style.cjs +0 -584
  429. package/scripts/audit/core/checks/testing.cjs +0 -122
  430. package/scripts/audit/core/checks/typescript.cjs +0 -61
  431. package/scripts/audit/core/scanner.cjs +0 -199
  432. package/scripts/audit/core/utils.cjs +0 -137
  433. package/scripts/audit/index.cjs +0 -223
  434. package/scripts/audit/reporters/console.cjs +0 -151
  435. package/scripts/audit/reporters/json.cjs +0 -54
  436. package/scripts/audit/reporters/markdown.cjs +0 -124
  437. package/scripts/audit-consuming-app.cjs +0 -86
  438. package/src/components/DataTable/components/DataTableBody.tsx +0 -454
  439. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  440. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  441. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  442. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  443. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  444. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  445. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  446. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  447. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  448. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  449. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  450. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  451. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  452. package/src/components/DataTable/utils/debugTools.ts +0 -514
  453. package/src/eslint-rules/pace-core-compliance.js +0 -638
  454. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
  455. package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
  456. package/src/rbac/components/NavigationProvider.test.tsx +0 -481
  457. package/src/rbac/components/NavigationProvider.tsx +0 -345
  458. package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
  459. package/src/rbac/components/PagePermissionProvider.tsx +0 -279
  460. package/src/rbac/components/PermissionEnforcer.tsx +0 -312
  461. package/src/rbac/components/RoleBasedRouter.tsx +0 -440
  462. package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
  463. package/src/rbac/components/SecureDataProvider.tsx +0 -339
  464. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
  465. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
  466. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
  467. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
  468. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
  469. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
  470. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
  471. package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
  472. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
  473. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
@@ -1,60 +1,188 @@
1
- import {
2
- useEventService,
3
- useOrganisations,
4
- useUnifiedAuth
5
- } from "./chunk-IHB5DR3H.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 { cn, performanceBudgetMonitor } from './chunk-7ILTDCL2.js';
3
+ import { logger } from './chunk-TTRFSOKR.js';
4
+ import * as React from 'react';
5
+ import React__default, { createContext, useContext, Component, useMemo, useState, useEffect, useCallback } from 'react';
6
+ import { useNavigate } from 'react-router-dom';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+ import { createClient } from '@supabase/supabase-js';
12
9
 
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]
10
+ function getCardClasses(variant = "default", size = "default") {
11
+ const baseClasses = "rounded-lg border bg-card text-card-foreground shadow-sm";
12
+ const variantClasses = {
13
+ default: "shadow-xl",
14
+ outline: "border-2",
15
+ ghost: "border-0 shadow-none"
16
+ };
17
+ const sizeClasses = {
18
+ default: "",
19
+ sm: "text-sm",
20
+ lg: "text-lg"
21
+ };
22
+ return `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]}`;
23
+ }
24
+ var CardWithNavigation = React.forwardRef(({ className, variant, size, isLink, link, onClick, ...props }, ref) => {
25
+ const navigate = useNavigate();
26
+ const handleClick = (e) => {
27
+ onClick?.(e);
28
+ if (link && !e.defaultPrevented) {
29
+ if (link.startsWith("http://") || link.startsWith("https://")) {
30
+ window.location.href = link;
31
+ } else {
32
+ navigate(link);
33
+ }
34
+ }
35
+ };
36
+ const shouldShowLinkStyles = isLink || !!link;
37
+ return /* @__PURE__ */ jsx(
38
+ "article",
39
+ {
40
+ ref,
41
+ className: cn(
42
+ "grid grid-rows-[auto_1fr_auto] min-w-0 overflow-visible",
43
+ getCardClasses(variant, size),
44
+ shouldShowLinkStyles && "cursor-pointer hover:bg-acc-200 hover:shadow-xl/30",
45
+ className
46
+ ),
47
+ onClick: handleClick,
48
+ role: "link",
49
+ tabIndex: 0,
50
+ onKeyDown: (e) => {
51
+ if (e.key === "Enter" || e.key === " ") {
52
+ e.preventDefault();
53
+ handleClick(e);
54
+ }
55
+ },
56
+ ...props
57
+ }
35
58
  );
36
- const refreshEventsCallback = useMemo(
37
- () => () => eventService.refreshEvents(),
38
- [eventService]
59
+ });
60
+ CardWithNavigation.displayName = "CardWithNavigation";
61
+ var CardWithoutNavigation = React.forwardRef(({ className, variant, size, isLink, onClick, ...props }, ref) => {
62
+ const shouldShowLinkStyles = isLink;
63
+ return /* @__PURE__ */ jsx(
64
+ "article",
65
+ {
66
+ ref,
67
+ className: cn(
68
+ "grid grid-rows-[auto_1fr_auto] min-w-0 overflow-visible",
69
+ getCardClasses(variant, size),
70
+ shouldShowLinkStyles && "cursor-pointer hover:bg-acc-200 hover:shadow-xl/30",
71
+ className
72
+ ),
73
+ onClick,
74
+ ...props
75
+ }
39
76
  );
40
- const clearEventSelectionCallback = useMemo(
41
- () => () => eventService.clearEventSelection(),
42
- [eventService]
77
+ });
78
+ CardWithoutNavigation.displayName = "CardWithoutNavigation";
79
+ var Card = React.forwardRef(({ link, ...props }, ref) => {
80
+ if (link) {
81
+ return /* @__PURE__ */ jsx(CardWithNavigation, { ref, link, ...props });
82
+ }
83
+ return /* @__PURE__ */ jsx(CardWithoutNavigation, { ref, ...props });
84
+ });
85
+ Card.displayName = "Card";
86
+ var CardHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
87
+ "header",
88
+ {
89
+ ref,
90
+ className: cn("p-6 min-w-0 w-full", className),
91
+ ...props
92
+ }
93
+ ));
94
+ CardHeader.displayName = "CardHeader";
95
+ var CardTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
96
+ "h3",
97
+ {
98
+ ref,
99
+ className: cn(className),
100
+ ...props
101
+ }
102
+ ));
103
+ CardTitle.displayName = "CardTitle";
104
+ var CardDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
105
+ "p",
106
+ {
107
+ ref,
108
+ className: cn(className),
109
+ ...props
110
+ }
111
+ ));
112
+ CardDescription.displayName = "CardDescription";
113
+ var CardContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
114
+ "main",
115
+ {
116
+ ref,
117
+ className: cn("p-6 pt-0 min-w-0 w-full", className),
118
+ ...props
119
+ }
120
+ ));
121
+ CardContent.displayName = "CardContent";
122
+ var CardFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
123
+ "footer",
124
+ {
125
+ ref,
126
+ className: cn("p-6 pt-0 min-w-0 w-full", className),
127
+ ...props
128
+ }
129
+ ));
130
+ CardFooter.displayName = "CardFooter";
131
+ var CardActions = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
132
+ "nav",
133
+ {
134
+ ref,
135
+ className: cn("flex gap-2", className),
136
+ role: "group",
137
+ "aria-label": "Card actions",
138
+ ...props
139
+ }
140
+ ));
141
+ CardActions.displayName = "CardActions";
142
+ var HoverCard = React.forwardRef(({ children, className, ...props }, ref) => {
143
+ return /* @__PURE__ */ jsx(
144
+ "section",
145
+ {
146
+ ref,
147
+ className: cn("relative inline-block", className),
148
+ ...props,
149
+ children
150
+ }
43
151
  );
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";
152
+ });
153
+ HoverCard.displayName = "HoverCard";
154
+ var HoverCardTrigger = React.forwardRef(({ className, asChild, children, ...props }, ref) => {
155
+ if (asChild) {
156
+ return /* @__PURE__ */ jsx("span", { className: cn("cursor-pointer", className), children });
157
+ }
158
+ return /* @__PURE__ */ jsx(
159
+ "button",
160
+ {
161
+ ref,
162
+ type: "button",
163
+ className: cn(
164
+ "cursor-pointer bg-transparent border-0 p-0 m-0 font-inherit color-inherit text-left",
165
+ className
166
+ ),
167
+ ...props,
168
+ children
169
+ }
170
+ );
171
+ });
172
+ HoverCardTrigger.displayName = "HoverCardTrigger";
173
+ var HoverCardContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
174
+ "aside",
175
+ {
176
+ ref,
177
+ className: cn(
178
+ "absolute z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-4 text-popover-foreground shadow-md",
179
+ className
180
+ ),
181
+ role: "tooltip",
182
+ ...props
183
+ }
184
+ ));
185
+ HoverCardContent.displayName = "HoverCardContent";
58
186
  var ErrorBoundaryContext = createContext(void 0);
59
187
  function ErrorBoundaryProvider({
60
188
  children,
@@ -68,10 +196,6 @@ function ErrorBoundaryProvider({
68
196
  function useErrorBoundaryContext() {
69
197
  return useContext(ErrorBoundaryContext);
70
198
  }
71
-
72
- // src/components/ErrorBoundary/ErrorBoundary.tsx
73
- import { Component } from "react";
74
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
75
199
  var ErrorBoundary = class extends Component {
76
200
  constructor(props) {
77
201
  super(props);
@@ -147,91 +271,81 @@ var ErrorBoundary = class extends Component {
147
271
  if (fallback) {
148
272
  return fallback;
149
273
  }
150
- return /* @__PURE__ */ jsx2(
151
- "div",
274
+ return /* @__PURE__ */ jsxs(
275
+ Card,
152
276
  {
153
277
  role: "alert",
154
- className: "p-6 bg-destructive/10 border border-destructive/20 rounded-lg",
278
+ className: "bg-destructive/10 border-destructive/20",
155
279
  "data-error-boundary": errorId,
156
- 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" }) }) }),
158
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
159
- /* @__PURE__ */ jsxs("h3", { className: "text-destructive", children: [
280
+ children: [
281
+ /* @__PURE__ */ jsxs(CardHeader, { className: "flex items-start gap-3", children: [
282
+ /* @__PURE__ */ jsx("svg", { className: "w-5 h-5 text-destructive flex-shrink-0", 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" }) }),
283
+ /* @__PURE__ */ jsxs(CardTitle, { className: "text-destructive", children: [
160
284
  "Error in ",
161
285
  componentName
162
286
  ] }),
163
- /* @__PURE__ */ jsx2("p", { className: "text-destructive/80", children: this.state.error?.message || "An unexpected error occurred." }),
164
- enableRetry && retryCount < maxRetries && /* @__PURE__ */ jsxs("div", { className: "flex gap-3 mb-4", children: [
165
- /* @__PURE__ */ jsxs(
166
- "button",
167
- {
168
- onClick: this.handleRetry,
169
- className: "px-4 py-2 bg-destructive text-destructive-foreground rounded-md hover:bg-destructive/90 transition-colors text-sm font-medium",
170
- children: [
171
- "Retry (",
172
- retryCount + 1,
173
- "/",
174
- maxRetries,
175
- ")"
176
- ]
177
- }
178
- ),
179
- /* @__PURE__ */ jsx2(
180
- "button",
181
- {
182
- onClick: () => window.location.reload(),
183
- className: "px-4 py-2 bg-sec-600 text-main-50 rounded-md hover:bg-sec-700 transition-colors text-sm font-medium",
184
- children: "Reload Page"
185
- }
186
- )
187
- ] }),
188
- 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(
191
- "button",
192
- {
193
- onClick: () => window.location.reload(),
194
- className: "mt-2 px-3 py-1 bg-acc-600 text-main-50 rounded text-sm hover:bg-acc-700",
195
- children: "Reload Page"
196
- }
197
- )
198
- ] }),
199
- 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)" }),
201
- /* @__PURE__ */ jsxs("div", { className: "bg-destructive/5 p-3 rounded border", children: [
202
- /* @__PURE__ */ jsxs("p", { className: "font-mono", children: [
203
- "Error ID: ",
204
- errorId
205
- ] }),
206
- /* @__PURE__ */ jsxs("pre", { className: "whitespace-pre-wrap text-xs overflow-auto max-h-32", children: [
207
- this.state.error.toString(),
208
- this.state.errorInfo?.componentStack
209
- ] })
287
+ /* @__PURE__ */ jsx(CardDescription, { className: "text-destructive/80", children: this.state.error?.message || "An unexpected error occurred." })
288
+ ] }),
289
+ import.meta.env.MODE === "development" && this.state.error && /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("details", { className: "text-sm text-destructive/70", children: [
290
+ /* @__PURE__ */ jsx("summary", { className: "cursor-pointer font-medium mb-2", children: "Error Details (Development)" }),
291
+ /* @__PURE__ */ jsxs("pre", { children: [
292
+ "Error ID: ",
293
+ errorId,
294
+ /* @__PURE__ */ jsxs("code", { className: "overflow-auto max-h-32", children: [
295
+ this.state.error.toString(),
296
+ this.state.errorInfo?.componentStack
210
297
  ] })
211
298
  ] })
299
+ ] }) }),
300
+ enableRetry && retryCount < maxRetries && /* @__PURE__ */ jsxs(CardFooter, { className: "flex gap-3", children: [
301
+ /* @__PURE__ */ jsxs(
302
+ "button",
303
+ {
304
+ onClick: this.handleRetry,
305
+ className: "px-4 py-2 bg-destructive text-destructive-foreground rounded-md hover:bg-destructive/90 transition-colors text-sm font-medium",
306
+ children: [
307
+ "Retry (",
308
+ retryCount + 1,
309
+ "/",
310
+ maxRetries,
311
+ ")"
312
+ ]
313
+ }
314
+ ),
315
+ /* @__PURE__ */ jsx(
316
+ "button",
317
+ {
318
+ onClick: () => window.location.reload(),
319
+ className: "px-4 py-2 bg-sec-600 text-main-50 rounded-md hover:bg-sec-700 transition-colors text-sm font-medium",
320
+ children: "Reload Page"
321
+ }
322
+ )
323
+ ] }),
324
+ retryCount >= maxRetries && /* @__PURE__ */ jsxs(CardFooter, { className: "flex flex-col gap-3", children: [
325
+ /* @__PURE__ */ jsx("p", { className: "text-acc-800", children: "Maximum retry attempts reached. Please reload the page or contact support." }),
326
+ /* @__PURE__ */ jsx(
327
+ "button",
328
+ {
329
+ onClick: () => window.location.reload(),
330
+ className: "px-3 py-1 bg-acc-600 text-main-50 rounded text-sm hover:bg-acc-700",
331
+ children: "Reload Page"
332
+ }
333
+ )
212
334
  ] })
213
- ] })
335
+ ]
214
336
  }
215
337
  );
216
338
  }
217
339
  return this.props.children;
218
340
  }
219
341
  };
220
-
221
- // src/components/ErrorBoundary/index.ts
222
- import React3 from "react";
223
- var ErrorBoundary2 = React3.forwardRef((props, ref) => {
342
+ var ErrorBoundary2 = React__default.forwardRef((props, ref) => {
224
343
  const context = useErrorBoundaryContext();
225
344
  const globalErrorHandler = context?.defaultErrorHandler;
226
- return React3.createElement(ErrorBoundary, { ...props, ref, _globalErrorHandler: globalErrorHandler });
345
+ return React__default.createElement(ErrorBoundary, { ...props, ref, _globalErrorHandler: globalErrorHandler });
227
346
  });
228
347
  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);
348
+ var PublicPageContext = createContext(void 0);
235
349
  function PublicPageProvider({ children, appName }) {
236
350
  const getEnvVar = (key) => {
237
351
  if (typeof import.meta !== "undefined" && import.meta.env) {
@@ -245,7 +359,7 @@ function PublicPageProvider({ children, appName }) {
245
359
  };
246
360
  const supabaseUrl = getEnvVar("VITE_SUPABASE_URL") || getEnvVar("NEXT_PUBLIC_SUPABASE_URL") || null;
247
361
  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(() => {
362
+ const supabase = useMemo(() => {
249
363
  if (!supabaseUrl || !supabaseKey) {
250
364
  logger.warn("PublicPageProvider", "Missing Supabase environment variables. Please ensure VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY are set in your environment.");
251
365
  return null;
@@ -262,29 +376,29 @@ function PublicPageProvider({ children, appName }) {
262
376
  supabaseKey
263
377
  }
264
378
  };
265
- return /* @__PURE__ */ jsx3(PublicPageContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx3(ErrorBoundary2, { componentName: "PublicPageProvider", children }) });
379
+ return /* @__PURE__ */ jsx(PublicPageContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(ErrorBoundary2, { componentName: "PublicPageProvider", children }) });
266
380
  }
267
381
  function usePublicPageContext() {
268
- const context = useContext2(PublicPageContext);
382
+ const context = useContext(PublicPageContext);
269
383
  if (!context) {
270
384
  throw new Error("usePublicPageContext must be used within a PublicPageProvider");
271
385
  }
272
386
  return context;
273
387
  }
274
388
  function useIsPublicPage() {
275
- const context = useContext2(PublicPageContext);
389
+ const context = useContext(PublicPageContext);
276
390
  return context !== void 0;
277
391
  }
278
-
279
- // src/hooks/useAppConfig.ts
280
- import { useMemo as useMemo3, useContext as useContext3 } from "react";
281
392
  function useAppConfig() {
282
393
  const isPublicPage = useIsPublicPage();
283
- const publicPageContext = useContext3(PublicPageContext);
394
+ const publicPageContext = useContext(PublicPageContext);
284
395
  const hasPublicContext = publicPageContext !== void 0;
285
396
  const contextAppName = publicPageContext?.appName || null;
397
+ const authContext = useContext(UnifiedAuthContext);
398
+ const authAppName = authContext?.appName;
286
399
  const getNodeEnvVar = (key) => typeof process !== "undefined" && process.env ? process.env[key] : void 0;
287
- if (isPublicPage) {
400
+ const publicAppName = useMemo(() => {
401
+ if (!isPublicPage) return null;
288
402
  const getAppName = () => {
289
403
  if (!hasPublicContext) {
290
404
  return "PACE";
@@ -305,27 +419,17 @@ function useAppConfig() {
305
419
  }
306
420
  return "PACE";
307
421
  };
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
- }
422
+ return getAppName();
423
+ }, [isPublicPage, contextAppName, hasPublicContext]);
424
+ const authenticatedAppName = useMemo(() => {
425
+ if (isPublicPage) return null;
426
+ return authAppName || "PACE";
427
+ }, [isPublicPage, authAppName]);
428
+ return useMemo(() => ({
429
+ appName: publicAppName || authenticatedAppName || "PACE",
430
+ isLoading: false
431
+ }), [publicAppName, authenticatedAppName]);
325
432
  }
326
-
327
- // src/hooks/useOrganisationSecurity.ts
328
- import { useCallback, useMemo as useMemo4, useEffect, useState } from "react";
329
433
  var useOrganisationSecurity = () => {
330
434
  const { user, session, supabase } = useUnifiedAuth();
331
435
  const { selectedOrganisation, getUserRole, validateOrganisationAccess: validateAccess } = useOrganisations();
@@ -351,7 +455,7 @@ var useOrganisationSecurity = () => {
351
455
  };
352
456
  checkSuperAdmin();
353
457
  }, [user, session, supabase]);
354
- const superAdminContext = useMemo4(() => {
458
+ const superAdminContext = useMemo(() => {
355
459
  return {
356
460
  isSuperAdmin,
357
461
  hasGlobalAccess: isSuperAdmin,
@@ -403,7 +507,7 @@ var useOrganisationSecurity = () => {
403
507
  const targetOrgId = orgId || selectedOrganisation?.id;
404
508
  if (!targetOrgId || !user) return false;
405
509
  try {
406
- const { isPermittedCached } = await import("./api-O6HTBX5Y.js");
510
+ const { isPermittedCached } = await import('./api-Y4MQWOFW.js');
407
511
  const scope = {
408
512
  organisationId: targetOrgId,
409
513
  eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
@@ -426,7 +530,7 @@ var useOrganisationSecurity = () => {
426
530
  const targetOrgId = orgId || selectedOrganisation?.id;
427
531
  if (!targetOrgId || !user) return [];
428
532
  try {
429
- const { getPermissionMap } = await import("./api-O6HTBX5Y.js");
533
+ const { getPermissionMap } = await import('./api-Y4MQWOFW.js');
430
534
  const scope = {
431
535
  organisationId: targetOrgId,
432
536
  eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
@@ -447,7 +551,7 @@ var useOrganisationSecurity = () => {
447
551
  if (!user || !selectedOrganisation) return;
448
552
  try {
449
553
  if (selectedOrganisation.id) {
450
- const { emitAuditEvent } = await import("./audit-V53FV5AG.js");
554
+ const { emitAuditEvent } = await import('./audit-MYQXYZFU.js');
451
555
  await emitAuditEvent({
452
556
  type: "permission_check",
453
557
  userId: user.id,
@@ -504,15 +608,4 @@ var useOrganisationSecurity = () => {
504
608
  };
505
609
  };
506
610
 
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-NTM7ZSB6.js.map
611
+ export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary2 as ErrorBoundary, ErrorBoundaryProvider, PublicPageContext, PublicPageProvider, useAppConfig, useIsPublicPage, useOrganisationSecurity, usePublicPageContext };