@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
@@ -17,7 +17,7 @@ import { PagePermissionGuard } from '@jmruthers/pace-core/rbac';
17
17
 
18
18
  function UserProfile() {
19
19
  return (
20
- <div>
20
+ <section>
21
21
  <h1>User Profile</h1>
22
22
  <PagePermissionGuard
23
23
  pageName="profile"
@@ -26,7 +26,7 @@ function UserProfile() {
26
26
  >
27
27
  <EditButton />
28
28
  </PagePermissionGuard>
29
- </div>
29
+ </section>
30
30
  );
31
31
  }
32
32
  ```
@@ -86,7 +86,7 @@ import { PagePermissionGuard } from '@jmruthers/pace-core/rbac';
86
86
 
87
87
  function AdminPanel() {
88
88
  return (
89
- <div>
89
+ <section>
90
90
  <h1>Admin Panel</h1>
91
91
 
92
92
  <PagePermissionGuard
@@ -100,11 +100,11 @@ function AdminPanel() {
100
100
  <PagePermissionGuard
101
101
  pageName="system"
102
102
  operation="manage"
103
- fallback={<div>System management access required</div>}
103
+ fallback={<p>System management access required</p>}
104
104
  >
105
105
  <SystemSettings />
106
106
  </PagePermissionGuard>
107
- </div>
107
+ </section>
108
108
  );
109
109
  }
110
110
  ```
@@ -116,14 +116,14 @@ import { AccessLevelGuard } from '@jmruthers/pace-core/rbac';
116
116
 
117
117
  function EventManagement({ userId, scope }) {
118
118
  return (
119
- <div>
119
+ <section>
120
120
  <h1>Event Management</h1>
121
121
 
122
122
  <AccessLevelGuard
123
123
  userId={userId}
124
124
  scope={scope}
125
125
  requiredLevel="planner"
126
- fallback={<div>Planner access required</div>}
126
+ fallback={<p>Planner access required</p>}
127
127
  >
128
128
  <EventPlanning />
129
129
  </AccessLevelGuard>
@@ -132,11 +132,11 @@ function EventManagement({ userId, scope }) {
132
132
  userId={userId}
133
133
  scope={scope}
134
134
  requiredLevel="admin"
135
- fallback={<div>Admin access required</div>}
135
+ fallback={<p>Admin access required</p>}
136
136
  >
137
137
  <EventAdminPanel />
138
138
  </AccessLevelGuard>
139
- </div>
139
+ </section>
140
140
  );
141
141
  }
142
142
  ```
@@ -185,7 +185,7 @@ function UsersTable({ users, userId, scope }) {
185
185
  id: 'actions',
186
186
  header: 'Actions',
187
187
  cell: ({ row }) => (
188
- <div className="flex space-x-2">
188
+ <section className="flex space-x-2">
189
189
  {permissions.canEdit && (
190
190
  <button onClick={() => editUser(row.original.id)}>
191
191
  Edit
@@ -196,7 +196,7 @@ function UsersTable({ users, userId, scope }) {
196
196
  Delete
197
197
  </button>
198
198
  )}
199
- </div>
199
+ </section>
200
200
  ),
201
201
  },
202
202
  ];
@@ -246,31 +246,31 @@ function UserForm({ userId, scope, userData }) {
246
246
 
247
247
  return (
248
248
  <form>
249
- <div>
249
+ <section>
250
250
  <label>Name</label>
251
251
  <input defaultValue={userData.name} />
252
- </div>
252
+ </section>
253
253
 
254
- <div>
254
+ <section>
255
255
  <label>Email</label>
256
256
  <input defaultValue={userData.email} />
257
- </div>
257
+ </section>
258
258
 
259
259
  {permissions.canEditRole && (
260
- <div>
260
+ <section>
261
261
  <label>Role</label>
262
262
  <select defaultValue={userData.role}>
263
263
  <option value="user">User</option>
264
264
  <option value="admin">Admin</option>
265
265
  </select>
266
- </div>
266
+ </section>
267
267
  )}
268
268
 
269
269
  {permissions.canEditPermissions && (
270
- <div>
270
+ <section>
271
271
  <label>Permissions</label>
272
272
  <PermissionSelector defaultValue={userData.permissions} />
273
- </div>
273
+ </section>
274
274
  )}
275
275
 
276
276
  <button type="submit">Save</button>
@@ -318,7 +318,7 @@ function Navigation({ userId, scope }) {
318
318
  checkNavigationPermissions();
319
319
  }, [hasPermission, isLoading, userId, scope]);
320
320
 
321
- if (isLoading) return <div>Loading navigation...</div>;
321
+ if (isLoading) return <p>Loading navigation...</p>;
322
322
 
323
323
  return (
324
324
  <nav>
@@ -449,12 +449,12 @@ function OptimizedUserList({ userId, scope }) {
449
449
  }, [hasPermission, isLoading, userId, scope]);
450
450
 
451
451
  return (
452
- <div>
452
+ <section>
453
453
  {permissions.canRead && <UserList />}
454
454
  {permissions.canCreate && <CreateUserButton />}
455
455
  {permissions.canUpdate && <EditUserButton />}
456
456
  {permissions.canDelete && <DeleteUserButton />}
457
- </div>
457
+ </section>
458
458
  );
459
459
  }
460
460
  ```
@@ -477,11 +477,11 @@ function UserActions({ userId, scope }) {
477
477
  };
478
478
 
479
479
  return (
480
- <div>
480
+ <section>
481
481
  <button onClick={() => handleUserUpdate(userData)}>
482
482
  Update User
483
483
  </button>
484
- </div>
484
+ </section>
485
485
  );
486
486
  }
487
487
  ```
@@ -525,18 +525,18 @@ function UserManagement({ userId, scope }) {
525
525
  }, [hasPermission, isLoading, userId, scope]);
526
526
 
527
527
  if (error) {
528
- return <div>Error: {error.message}</div>;
528
+ return <p>Error: {error.message}</p>;
529
529
  }
530
530
 
531
531
  if (isLoading) {
532
- return <div>Checking permissions...</div>;
532
+ return <p>Checking permissions...</p>;
533
533
  }
534
534
 
535
535
  return (
536
- <div>
537
- {errorMessage && <div className="error">{errorMessage}</div>}
536
+ <section>
537
+ {errorMessage && <p className="error">{errorMessage}</p>}
538
538
  {canEdit && <EditUserButton />}
539
- </div>
539
+ </section>
540
540
  );
541
541
  }
542
542
  ```
@@ -571,9 +571,9 @@ function CustomUserActions({ userId, scope, user }) {
571
571
  }, [hasPermission, userId, scope, user]);
572
572
 
573
573
  return (
574
- <div>
574
+ <section>
575
575
  {canEdit && <EditUserButton userId={user.id} />}
576
- </div>
576
+ </section>
577
577
  );
578
578
  }
579
579
  ```
@@ -610,11 +610,11 @@ function ProtectedRoute({ children, requiredPermission, userId, scope }) {
610
610
  }, [hasPermission, isLoading, requiredPermission, userId, scope, navigate]);
611
611
 
612
612
  if (isLoading) {
613
- return <div>Checking access...</div>;
613
+ return <p>Checking access...</p>;
614
614
  }
615
615
 
616
616
  if (!hasAccess) {
617
- return <div>Access denied</div>;
617
+ return <p>Access denied</p>;
618
618
  }
619
619
 
620
620
  return children;
@@ -679,9 +679,9 @@ test('renders fallback when user lacks permission', () => {
679
679
  userId="user-123"
680
680
  scope={{ organisationId: "org-456" }}
681
681
  permission="read:users"
682
- fallback={<div>Access Denied</div>}
682
+ fallback={<p>Access Denied</p>}
683
683
  >
684
- <div>User List</div>
684
+ <section>User List</section>
685
685
  </PermissionGuard>
686
686
  );
687
687
 
@@ -739,7 +739,7 @@ function UserManagement() {
739
739
  >
740
740
  <CreateUserButton />
741
741
  </PermissionEnforcer>
742
- </div>
742
+ </section>
743
743
  );
744
744
  }
745
745
  ```
@@ -771,7 +771,7 @@ function EventDashboard() {
771
771
  >
772
772
  <ParticipantManagement />
773
773
  </PermissionEnforcer>
774
- </div>
774
+ </section>
775
775
  );
776
776
  }
777
777
  ```
@@ -795,7 +795,7 @@ function AdaptiveComponent({ appId }) {
795
795
  loadAppConfig();
796
796
  }, [appId]);
797
797
 
798
- if (!appConfig) return <div>Loading app configuration...</div>;
798
+ if (!appConfig) return <p>Loading app configuration...</p>;
799
799
 
800
800
  // Determine required context based on app type
801
801
  const scope = appConfig.requires_event
@@ -858,15 +858,15 @@ function ContextAwareComponent({ appId }) {
858
858
  getAppConfig(appId).then(setAppConfig);
859
859
  }, [appId]);
860
860
 
861
- if (!appConfig) return <div>Loading...</div>;
861
+ if (!appConfig) return <p>Loading...</p>;
862
862
 
863
863
  const getContextError = () => {
864
864
  if (appConfig.requires_event) {
865
865
  return (
866
- <div>
866
+ <section>
867
867
  <p>Access denied</p>
868
868
  <p>This app requires event context</p>
869
- </div>
869
+ </section>
870
870
  );
871
871
  } else {
872
872
  return (
@@ -158,12 +158,12 @@ function Dashboard() {
158
158
  <PagePermissionGuard
159
159
  pageName="dashboard"
160
160
  operation="read"
161
- fallback={<div>Access Denied</div>}
161
+ fallback={<p>Access Denied</p>}
162
162
  >
163
- <div>
163
+ <section>
164
164
  <h1>Dashboard</h1>
165
165
  <EventContent />
166
- </div>
166
+ </section>
167
167
  </PagePermissionGuard>
168
168
  );
169
169
  }
@@ -193,14 +193,14 @@ function UserActions() {
193
193
  }
194
194
  );
195
195
 
196
- if (isLoading) return <div>Loading permissions...</div>;
197
- if (error) return <div>Error: {error.message}</div>;
196
+ if (isLoading) return <p>Loading permissions...</p>;
197
+ if (error) return <p>Error: {error.message}</p>;
198
198
 
199
199
  return (
200
- <div>
200
+ <section>
201
201
  {permissions['page-1']?.includes('read') && <ReadButton />}
202
202
  {permissions['page-1']?.includes('manage') && <ManageButton />}
203
- </div>
203
+ </section>
204
204
  );
205
205
  }
206
206
  ```
@@ -229,13 +229,13 @@ function UserActions() {
229
229
  'page-123' // optional pageId
230
230
  );
231
231
 
232
- if (isLoading) return <div>Checking permission...</div>;
233
- if (error) return <div>Error: {error.message}</div>;
232
+ if (isLoading) return <p>Checking permission...</p>;
233
+ if (error) return <p>Error: {error.message}</p>;
234
234
 
235
235
  return (
236
- <div>
236
+ <section>
237
237
  {can ? <AdminPanel /> : <AccessDenied />}
238
- </div>
238
+ </section>
239
239
  );
240
240
  }
241
241
  ```
@@ -298,17 +298,17 @@ function Dashboard() {
298
298
 
299
299
  // Pattern 1: PermissionEnforcer (automatic scope resolution)
300
300
  return (
301
- <div>
301
+ <main>
302
302
  <h1>Dashboard</h1>
303
303
 
304
304
  {/* Always visible */}
305
- <div>Welcome to the dashboard!</div>
305
+ <p>Welcome to the dashboard!</p>
306
306
 
307
307
  {/* Pattern 1: PermissionEnforcer - automatic scope resolution */}
308
308
  <PermissionEnforcer
309
309
  permissions={['read:admin']}
310
310
  operation="admin-panel"
311
- fallback={<div>Admin access required</div>}
311
+ fallback={<p>Admin access required</p>}
312
312
  >
313
313
  <AdminPanel />
314
314
  </PermissionEnforcer>
@@ -318,7 +318,7 @@ function Dashboard() {
318
318
 
319
319
  {/* Pattern 3: usePermissions - for custom logic */}
320
320
  <CustomPermissionLogic userId={user?.id} organisationId={selectedOrganisationId} />
321
- </div>
321
+ </main>
322
322
  );
323
323
  }
324
324
 
@@ -330,20 +330,20 @@ function UserManagement({ userId, organisationId }) {
330
330
  'update:users'
331
331
  );
332
332
 
333
- if (isLoading) return <div>Checking permissions...</div>;
334
- if (error) return <div>Error: {error.message}</div>;
333
+ if (isLoading) return <p>Checking permissions...</p>;
334
+ if (error) return <p>Error: {error.message}</p>;
335
335
 
336
336
  return (
337
- <div>
337
+ <section>
338
338
  {can ? (
339
- <div>
339
+ <section>
340
340
  <h2>User Management</h2>
341
341
  <UserList />
342
- </div>
342
+ </section>
343
343
  ) : (
344
- <div>You need user management permissions</div>
344
+ <p>You need user management permissions</p>
345
345
  )}
346
- </div>
346
+ </section>
347
347
  );
348
348
  }
349
349
 
@@ -354,27 +354,27 @@ function CustomPermissionLogic({ userId, organisationId }) {
354
354
  { organisationId: organisationId || '' }
355
355
  );
356
356
 
357
- if (isLoading) return <div>Loading permissions...</div>;
358
- if (error) return <div>Error: {error.message}</div>;
357
+ if (isLoading) return <p>Loading permissions...</p>;
358
+ if (error) return <p>Error: {error.message}</p>;
359
359
 
360
360
  return (
361
- <div>
361
+ <section>
362
362
  <h2>Your Permissions</h2>
363
363
  {Object.entries(permissions).map(([pageId, operations]) => (
364
- <div key={pageId}>
364
+ <p key={pageId}>
365
365
  <strong>{pageId}:</strong> {operations.join(', ')}
366
- </div>
366
+ </p>
367
367
  ))}
368
- </div>
368
+ </section>
369
369
  );
370
370
  }
371
371
 
372
372
  function AdminPanel() {
373
- return <div>Admin Panel Content</div>;
373
+ return <section>Admin Panel Content</section>;
374
374
  }
375
375
 
376
376
  function UserList() {
377
- return <div>User List</div>;
377
+ return <section>User List</section>;
378
378
  }
379
379
  ```
380
380
 
@@ -391,7 +391,7 @@ export default function AdminPage() {
391
391
  <PermissionGuard
392
392
  permission="admin:read"
393
393
  scope={{ organisationId: 'org-123' }}
394
- fallback={<div>Access Denied</div>}
394
+ fallback={<p>Access Denied</p>}
395
395
  >
396
396
  <AdminPageContent />
397
397
  </PermissionGuard>
@@ -407,7 +407,7 @@ import { PermissionGuard } from '@jmruthers/pace-core/rbac';
407
407
 
408
408
  function UserCard({ user, organisationId }) {
409
409
  return (
410
- <div className="user-card">
410
+ <section className="user-card">
411
411
  <h3>{user.name}</h3>
412
412
 
413
413
  <PermissionGuard
@@ -538,7 +538,7 @@ function Navigation({ userId, organisationId }) {
538
538
  ```tsx
539
539
  const { selectedOrganisationId } = useUnifiedAuth();
540
540
  if (!selectedOrganisationId) {
541
- return <div>Please select an organisation first</div>;
541
+ return <p>Please select an organisation first</p>;
542
542
  }
543
543
  ```
544
544
 
@@ -622,9 +622,9 @@ function MyComponent() {
622
622
  'update:users'
623
623
  );
624
624
 
625
- if (isLoading) return <div>Checking permissions...</div>;
626
- if (error) return <div>Error: {error.message}</div>;
627
- if (!can) return <div>Access denied</div>;
625
+ if (isLoading) return <p>Checking permissions...</p>;
626
+ if (error) return <p>Error: {error.message}</p>;
627
+ if (!can) return <p>Access denied</p>;
628
628
 
629
629
  return <AdminContent />;
630
630
  }
@@ -818,7 +818,7 @@ function AdaptiveComponent({ appId }) {
818
818
  loadAppConfig();
819
819
  }, [appId]);
820
820
 
821
- if (!appConfig) return <div>Loading app configuration...</div>;
821
+ if (!appConfig) return <p>Loading app configuration...</p>;
822
822
 
823
823
  // Determine required context based on app type
824
824
  const scope = appConfig.requires_event
@@ -315,6 +315,6 @@ If performance monitoring isn't showing data:
315
315
 
316
316
  - [PagePermissionGuard API Reference](./api-reference.md#pagepermissionguard) - Component API
317
317
  - [RBAC Configuration](./api-reference.md#configuration) - Configuration options
318
- - [Performance Best Practices](../best-practices/performance.md) - General performance guide
318
+ - [Performance Optimization](../standards/9-operations-standards.md#performance-optimization) - General performance guide
319
319
  - [RBAC Getting Started](./getting-started.md) - Getting started guide
320
320