@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
@@ -222,7 +222,7 @@ function MyComponent() {
222
222
  }
223
223
  }, [hasPermission, organisationId]);
224
224
 
225
- if (isLoading) return <div>Loading...</div>;
225
+ if (isLoading) return <p>Loading...</p>;
226
226
 
227
227
  return <DataTable data={data} />;
228
228
  }
@@ -281,7 +281,7 @@ See [Public Pages Guide](./implementation-guides/public-pages.md).
281
281
  3. Use React.memo for expensive components
282
282
  4. Optimize data table rendering
283
283
 
284
- See [Performance Guide](./best-practices/performance.md).
284
+ See [Performance Optimization](../standards/9-operations-standards.md#performance-optimization).
285
285
 
286
286
  ## Still Have Questions?
287
287
 
@@ -36,10 +36,23 @@ npm install @jmruthers/pace-core
36
36
 
37
37
  **Required Peer Dependencies:**
38
38
  ```bash
39
- npm install react react-dom @tanstack/react-table @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-label @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-tooltip lucide-react react-day-picker react-hook-form react-router-dom clsx tailwind-merge zod
39
+ npm install react react-dom @tanstack/react-query @tanstack/react-table clsx date-fns date-fns-tz react-day-picker react-hook-form react-router-dom tailwind-merge tailwindcss zod
40
40
  ```
41
41
 
42
- **Note**: `@supabase/supabase-js` and `@tanstack/react-query` are included as dependencies and do not need to be installed separately.
42
+ > **📦 Complete Dependencies Reference**: See [Dependencies Guide](./dependencies.md) for a detailed breakdown of:
43
+ > - ✅ Which packages are **already included** (don't install)
44
+ > - ⚠️ Which packages are **required peer dependencies** (must install)
45
+ > - ❌ Common mistakes to avoid
46
+ > - 🔍 How to verify your installation
47
+
48
+ **Note**: The following packages are **included dependencies** - **DO NOT install them**, use pace-core exports instead:
49
+ - `@supabase/supabase-js` - Use `createBaseClient()` from `@jmruthers/pace-core` (security enforcement)
50
+ - `@radix-ui/*` packages - Use pace-core components (consistency enforcement)
51
+ - `lucide-react` - Use `@jmruthers/pace-core/icons` (consistency enforcement)
52
+
53
+ The following packages are **peer dependencies** and **MUST be installed**:
54
+ - `@tanstack/react-query` - Required for `QueryClient`, `QueryClientProvider`, and React Query hooks
55
+ - `date-fns` and `date-fns-tz` - Required for date formatting (apps may use date-fns functions directly)
43
56
 
44
57
  ### Step 2: Install Tailwind CSS v4
45
58
 
@@ -286,19 +299,19 @@ export default App;
286
299
 
287
300
  If you're using PACE Core's authentication features:
288
301
 
289
- ```bash
290
- npm install @supabase/supabase-js
291
- ```
302
+ **⚠️ Important**: `@supabase/supabase-js` is **included** in pace-core - you do NOT need to install it separately. Use `createBaseClient()` from pace-core instead.
292
303
 
293
304
  Create `src/lib/supabase.ts`:
294
305
 
295
306
  ```typescript
296
- import { createClient } from '@supabase/supabase-js'
307
+ import { createBaseClient } from '@jmruthers/pace-core'
297
308
 
309
+ // Base Supabase client for UnifiedAuthProvider only
310
+ // DO NOT use this client directly - use useSecureSupabase() instead
298
311
  const supabaseUrl = process.env.VITE_SUPABASE_URL!
299
312
  const supabasePublishableKey = process.env.VITE_SUPABASE_PUBLISHABLE_KEY!
300
313
 
301
- export const supabase = createClient(supabaseUrl, supabaseAnonKey)
314
+ export const supabase = createBaseClient(supabaseUrl, supabasePublishableKey)
302
315
  ```
303
316
 
304
317
  Set environment variables in `.env.local`:
@@ -92,7 +92,7 @@ import { useUnifiedAuth } from '@jmruthers/pace-core';
92
92
  function MyComponent() {
93
93
  const { user, loading, signIn, signOut } = useUnifiedAuth();
94
94
 
95
- if (loading) return <div>Loading...</div>;
95
+ if (loading) return <p>Loading...</p>;
96
96
  if (!user) return <button onClick={signIn}>Sign In</button>;
97
97
 
98
98
  return (
@@ -184,7 +184,7 @@ function SuperAdminPanel() {
184
184
 
185
185
  if (!isSuperAdmin) return null;
186
186
 
187
- return <div>Super admin panel</div>;
187
+ return <section>Super admin panel</section>;
188
188
  }
189
189
  ```
190
190
 
@@ -510,7 +510,7 @@ function MyComponent() {
510
510
  const { user, loading, error } = useUnifiedAuth();
511
511
 
512
512
  if (error) {
513
- return <div>Error: {error.message}</div>;
513
+ return <p>Error: {error.message}</p>;
514
514
  }
515
515
 
516
516
  // ... rest of component
@@ -611,4 +611,4 @@ function AdminPanel() {
611
611
  - **Common Issues**: [Troubleshooting Guide](./troubleshooting/common-issues.md)
612
612
  - **Debugging**: [Debugging Guide](./troubleshooting/debugging.md)
613
613
  - **Migration**: [Migration Guide](./migration/)
614
- - **Security**: [Security Best Practices](./best-practices/security.md)
614
+ - **Security**: [Security & RBAC Standards](../standards/6-security-rbac-standards.md)
@@ -29,20 +29,29 @@ npm install
29
29
 
30
30
  ## Step 2: Install PACE Core
31
31
 
32
+ > **📦 Dependencies Guide**: See [Dependencies Guide](./dependencies.md) for complete details on which packages to install and which are already included.
33
+
32
34
  ```bash
33
- # Install PACE Core and required peer dependencies
34
- npm install @jmruthers/pace-core \
35
- @supabase/supabase-js \
36
- @tanstack/react-query @tanstack/react-table \
37
- @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog \
38
- @radix-ui/react-label @radix-ui/react-slot \
39
- @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-tooltip \
40
- clsx lucide-react react-day-picker react-hook-form react-router-dom tailwind-merge zod
41
-
42
- # Install Tailwind v4
43
- npm install -D tailwindcss@^4.0.0 @tailwindcss/vite
35
+ # Install PACE Core
36
+ npm install @jmruthers/pace-core
37
+
38
+ # Install required peer dependencies
39
+ npm install react react-dom @tanstack/react-query @tanstack/react-table \
40
+ clsx date-fns date-fns-tz react-day-picker react-hook-form react-router-dom tailwind-merge tailwindcss zod
41
+
42
+ # Install Tailwind v4 (dev dependency)
43
+ npm install -D @tailwindcss/vite tailwindcss@^4.0.0
44
44
  ```
45
45
 
46
+ **⚠️ Important**:
47
+ - ❌ **DO NOT install** `@supabase/supabase-js`, `@radix-ui/*`, or `lucide-react` - they're included in pace-core. Use pace-core exports instead:
48
+ - `createBaseClient()` from `@jmruthers/pace-core` (instead of `createClient` from `@supabase/supabase-js`)
49
+ - pace-core components (instead of `@radix-ui/*` primitives)
50
+ - `@jmruthers/pace-core/icons` (instead of `lucide-react`)
51
+ - ⚠️ `@tanstack/react-query` is a **peer dependency** - you MUST install it (required for QueryClient configuration)
52
+ - ⚠️ All listed packages above are **required peer dependencies** - you must install them
53
+ - See [Dependencies Guide](./dependencies.md) for the complete breakdown
54
+
46
55
  ## Step 3: Configure Vite
47
56
 
48
57
  **⚠️ CRITICAL**: This configuration prevents React context and Router context errors.
@@ -120,9 +129,11 @@ import { createClient } from '@supabase/supabase-js';
120
129
  const supabaseUrl = import.meta.env.VITE_SUPABASE_URL!;
121
130
  const supabasePublishableKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY!;
122
131
 
123
- export const supabase = createClient(supabaseUrl, supabaseAnonKey);
132
+ export const supabase = createClient(supabaseUrl, supabasePublishableKey);
124
133
  ```
125
134
 
135
+ **Note**: `@supabase/supabase-js` is already included in pace-core, so you don't need to install it separately. Just import it directly.
136
+
126
137
  ## Step 6: Set Up Your Database
127
138
 
128
139
  In your Supabase dashboard, run this SQL to create a simple `tasks` table:
@@ -326,9 +326,9 @@ function UserDashboard() {
326
326
  hasEventAccess, // Check event access
327
327
  } = useUnifiedAuth();
328
328
 
329
- if (loading) return <div>Loading...</div>;
330
- if (error) return <div>Error: {error.message}</div>;
331
- if (!user) return <div>Please log in</div>;
329
+ if (loading) return <p>Loading...</p>;
330
+ if (error) return <p>Error: {error.message}</p>;
331
+ if (!user) return <p>Please log in</p>;
332
332
 
333
333
  return (
334
334
  <div>
@@ -441,14 +441,14 @@ function EventContent() {
441
441
  const { selectedEvent, hasEventAccess } = useUnifiedAuth();
442
442
 
443
443
  if (!selectedEvent) {
444
- return <div>Please select an event</div>;
444
+ return <p>Please select an event</p>;
445
445
  }
446
446
 
447
447
  if (!hasEventAccess(selectedEvent.id)) {
448
- return <div>You don't have access to this event</div>;
448
+ return <p>You don't have access to this event</p>;
449
449
  }
450
450
 
451
- return <div>Event content for {selectedEvent.name}</div>;
451
+ return <section>Event content for {selectedEvent.name}</section>;
452
452
  }
453
453
  ```
454
454
 
@@ -703,14 +703,14 @@ function ConditionalContent() {
703
703
  const { user, loading } = useUnifiedAuth();
704
704
 
705
705
  if (loading) {
706
- return <div>Loading...</div>;
706
+ return <p>Loading...</p>;
707
707
  }
708
708
 
709
709
  if (!user) {
710
- return <div>Please log in to continue</div>;
710
+ return <p>Please log in to continue</p>;
711
711
  }
712
712
 
713
- return <div>Welcome, {user.email}!</div>;
713
+ return <p>Welcome, {user.email}!</p>;
714
714
  }
715
715
  ```
716
716
 
@@ -850,11 +850,11 @@ function App() {
850
850
  function AuthTest() {
851
851
  const { user, loading, error } = useUnifiedAuth();
852
852
 
853
- if (loading) return <div>Loading...</div>;
854
- if (error) return <div>Error: {error.message}</div>;
855
- if (!user) return <div>Not logged in</div>;
856
-
857
- return <div>Welcome {user.email}</div>;
853
+ if (loading) return <p>Loading...</p>;
854
+ if (error) return <p>Error: {error.message}</p>;
855
+ if (!user) return <p>Not logged in</p>;
856
+
857
+ return <p>Welcome {user.email}</p>;
858
858
  }
859
859
  ```
860
860
 
@@ -1105,7 +1105,7 @@ See the [Authentication Implementation Guide](./authentication.md) for a complet
1105
1105
 
1106
1106
  ### Advanced Patterns
1107
1107
 
1108
- See the [Common Patterns Guide](./best-practices/common-patterns.md) for advanced authentication patterns.
1108
+ See the [Authentication Implementation Guide](./authentication.md) for advanced authentication patterns and the [Standards Overview](../standards/0-standards-overview.md) for compliance requirements.
1109
1109
 
1110
1110
  ## Related Documentation
1111
1111
 
@@ -408,7 +408,7 @@ function DashboardCard({ title, children }) {
408
408
  ## Related Documentation
409
409
 
410
410
  - [Styling Overview](../styles/README.md) - Complete styling system
411
- - [Performance Guide](../best-practices/performance.md) - Performance optimization
411
+ - [Performance Optimization](../standards/9-operations-standards.md#performance-optimization) - Performance optimization
412
412
  - [Component API Reference](../api-reference/components.md) - Component props
413
413
 
414
414
  ---
@@ -408,11 +408,11 @@ const columns: DataTableColumn<Dish>[] = [
408
408
  const indentLevel = isParent ? 0 : 1;
409
409
 
410
410
  return (
411
- <div className={`flex items-center ${isParent ? 'font-semibold' : ''}`}>
412
- <div style={{ marginLeft: `${indentLevel * 20}px` }}>
411
+ <section className={`flex items-center ${isParent ? 'font-semibold' : ''}`}>
412
+ <section style={{ marginLeft: `${indentLevel * 20}px` }}>
413
413
  {isParent ? '🍽️' : '🥬'} {row.original.name}
414
- </div>
415
- </div>
414
+ </section>
415
+ </section>
416
416
  );
417
417
  }
418
418
  },
@@ -478,26 +478,26 @@ const columns: DataTableColumn<Dish>[] = [
478
478
  if (isParent) {
479
479
  // Parent row actions
480
480
  return (
481
- <div className="flex gap-2">
481
+ <section className="flex gap-2">
482
482
  <Button size="sm" variant="outline">
483
483
  Edit Dish
484
484
  </Button>
485
485
  <Button size="sm" variant="outline">
486
486
  Add Ingredient
487
487
  </Button>
488
- </div>
488
+ </section>
489
489
  );
490
490
  } else {
491
491
  // Child row actions
492
492
  return (
493
- <div className="flex gap-2">
493
+ <section className="flex gap-2">
494
494
  <Button size="sm" variant="ghost">
495
495
  Edit Ingredient
496
496
  </Button>
497
497
  <Button size="sm" variant="ghost">
498
498
  Remove
499
499
  </Button>
500
- </div>
500
+ </section>
501
501
  );
502
502
  }
503
503
  }
@@ -1197,7 +1197,7 @@ import { DataTable } from '@jmruthers/pace-core';
1197
1197
 
1198
1198
  **✅ Column Alignment in Virtualized Tables**
1199
1199
  - **Problem**: Header and body columns were misaligned in virtualized mode due to separate table layouts.
1200
- - **Solution**: Enhanced `VirtualizedDataTable` component with synchronized column sizing between header and body tables, `table-fixed` layout for consistent column widths, dynamic column width calculation and synchronization, proper `useLayoutEffect` for measuring actual column widths.
1200
+ - **Solution**: `UnifiedTableBody` component handles virtualization automatically with synchronized column sizing between header and body tables, `table-fixed` layout for consistent column widths, dynamic column width calculation and synchronization, proper virtualization handling for large datasets.
1201
1201
 
1202
1202
  **✅ Pagination State Synchronization**
1203
1203
  - **Problem**: Page size dropdown showed 50 but displayed 20 rows due to hardcoded values and virtualization conflicts.
@@ -2167,7 +2167,7 @@ function UserForm({ user, onSubmit, onCancel }) {
2167
2167
 
2168
2168
  return (
2169
2169
  <form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
2170
- <div>
2170
+ <section>
2171
2171
  <label htmlFor="name">Name</label>
2172
2172
  <input
2173
2173
  id="name"
@@ -2177,9 +2177,9 @@ function UserForm({ user, onSubmit, onCancel }) {
2177
2177
  {errors.name && (
2178
2178
  <p className="text-acc-600 text-sm">{errors.name.message}</p>
2179
2179
  )}
2180
- </div>
2180
+ </section>
2181
2181
 
2182
- <div>
2182
+ <section>
2183
2183
  <label htmlFor="email">Email</label>
2184
2184
  <input
2185
2185
  id="email"
@@ -2190,9 +2190,9 @@ function UserForm({ user, onSubmit, onCancel }) {
2190
2190
  {errors.email && (
2191
2191
  <p className="text-acc-600 text-sm">{errors.email.message}</p>
2192
2192
  )}
2193
- </div>
2193
+ </section>
2194
2194
 
2195
- <div>
2195
+ <section>
2196
2196
  <label htmlFor="role">Role</label>
2197
2197
  <select
2198
2198
  id="role"
@@ -2206,9 +2206,9 @@ function UserForm({ user, onSubmit, onCancel }) {
2206
2206
  {errors.role && (
2207
2207
  <p className="text-acc-600 text-sm">{errors.role.message}</p>
2208
2208
  )}
2209
- </div>
2209
+ </section>
2210
2210
 
2211
- <div className="flex gap-2">
2211
+ <section className="flex gap-2">
2212
2212
  <button
2213
2213
  type="submit"
2214
2214
  disabled={isSubmitting}
@@ -2223,7 +2223,7 @@ function UserForm({ user, onSubmit, onCancel }) {
2223
2223
  >
2224
2224
  Cancel
2225
2225
  </button>
2226
- </div>
2226
+ </section>
2227
2227
  </form>
2228
2228
  );
2229
2229
  }
@@ -2496,25 +2496,118 @@ If you're upgrading from a previous version:
2496
2496
 
2497
2497
  ### Component Structure
2498
2498
 
2499
+ The DataTable component is built with a modular architecture that separates concerns and provides clear component boundaries. The structure is organized into main components, sub-components, hooks, utilities, and core architecture classes.
2500
+
2499
2501
  ```
2500
- DataTable
2501
- ├── useDataTablePerformance (hook)
2502
- ├── DataChunkManager
2503
- │ ├── SearchIndex
2504
- │ ├── PerformanceMonitor
2505
- └── VisibilityTracker
2506
- ├── VirtualizedDataTable (when enabled)
2507
- ├── MemoizedRow
2508
- └── MemoizedCell
2509
- ├── HierarchicalDataTable (when enabled)
2510
- │ ├── ExpandCollapseControls
2511
- │ └── HierarchicalRow
2512
- └── EnhancedPaginationControls
2513
- ├── Performance metrics display
2514
- ├── Jump to page functionality
2515
- └── Memory usage tracking
2502
+ DataTable (Main Entry Point)
2503
+
2504
+ ├── DataTableCore (Internal Orchestrator)
2505
+ │ ├── DataTableErrorBoundary
2506
+ │ ├── LoadingState
2507
+ ├── AccessDeniedPage
2508
+ │ └── DataTableLayout
2509
+
2510
+ ├── DataTableToolbar
2511
+ │ │ ├── GroupingDropdown
2512
+ ├── ColumnVisibilityDropdown
2513
+ └── BulkOperationsDropdown
2514
+ │ │
2515
+ ├── UnifiedTableBody
2516
+ │ │ ├── FilterRow
2517
+ │ │ │ └── ColumnFilter
2518
+ │ │ ├── MemoizedRow (RowComponent)
2519
+ │ │ │ ├── EditableRow
2520
+ │ │ │ │ └── EditFields
2521
+ │ │ │ ├── ActionButtons
2522
+ │ │ │ └── RowComponent (handles grouped rows inline and hierarchical expand/collapse)
2523
+ │ │ └── EmptyState
2524
+ │ │
2525
+ │ ├── PaginationControls
2526
+ │ │ └── EnhancedPaginationControls (when enabled)
2527
+ │ │
2528
+ │ └── DataTableModals
2529
+ │ └── ImportModal
2530
+
2531
+ ├── Hooks (State & Logic Management)
2532
+ │ ├── useDataTableState
2533
+ │ ├── useDataTableDataPipeline
2534
+ │ ├── useDataTableConfiguration
2535
+ │ ├── useDataTablePermissions
2536
+ │ ├── useTableColumns
2537
+ │ ├── useTableHandlers
2538
+ │ ├── useColumnOrderPersistence
2539
+ │ ├── useColumnVisibilityPersistence
2540
+ │ ├── useEffectiveColumnOrder
2541
+ │ ├── useHierarchicalState
2542
+ │ ├── useServerSideDataEffect
2543
+ │ ├── useKeyboardNavigation
2544
+ │ └── useDataTablePerformance (from core hooks)
2545
+ │ ├── DataChunkManager
2546
+ │ ├── SearchIndex
2547
+ │ ├── PerformanceMonitor
2548
+ │ └── VisibilityTracker
2549
+
2550
+ ├── Core Architecture Classes
2551
+ │ ├── ColumnFactory
2552
+ │ ├── ColumnManager
2553
+ │ ├── DataManager
2554
+ │ ├── StateManager
2555
+ │ ├── ActionManager
2556
+ │ ├── LocalDataAdapter
2557
+ │ └── PluginRegistry
2558
+
2559
+ └── Utilities
2560
+ ├── aggregationUtils (sum, average, count, min, max)
2561
+ ├── columnUtils
2562
+ ├── exportUtils
2563
+ ├── hierarchicalUtils
2564
+ ├── hierarchicalSorting
2565
+ ├── paginationUtils
2566
+ ├── performanceUtils
2567
+ ├── rowUtils
2568
+ ├── a11yUtils
2569
+ ├── errorHandling
2570
+ └── flexibleImport
2516
2571
  ```
2517
2572
 
2573
+ #### Component Descriptions
2574
+
2575
+ **Main Components:**
2576
+ - **`DataTable`**: Public API component that wraps `DataTableCore` with feature normalization
2577
+ - **`DataTableCore`**: Internal orchestrator that manages all hooks, state, and sub-components
2578
+ - **`DataTableLayout`**: Main layout component that arranges toolbar, body, pagination, and modals
2579
+
2580
+ **Toolbar Components:**
2581
+ - **`DataTableToolbar`**: Top toolbar with search, grouping, column visibility, and action buttons
2582
+ - **`GroupingDropdown`**: Dropdown for selecting columns to group by
2583
+ - **`ColumnVisibilityDropdown`**: Dropdown for showing/hiding columns
2584
+ - **`BulkOperationsDropdown`**: Menu for bulk operations (delete selected, etc.)
2585
+
2586
+ **Table Body Components:**
2587
+ - **`UnifiedTableBody`**: Unified component that handles both standard and virtualized rendering
2588
+ - **`FilterRow`**: Row of filter inputs below column headers
2589
+ - **`ColumnFilter`**: Individual column filter component
2590
+ - **`MemoizedRow`** (RowComponent): Individual table row with memoization
2591
+ - **`EditableRow`**: Inline editable row with form fields
2592
+ - **`EditFields`**: Field renderers for editable columns (text, select, date, number, boolean)
2593
+ - **`ActionButtons`**: Row action buttons (edit, delete, custom actions)
2594
+ - **Hierarchical expand/collapse**: Handled inline by `RowComponent` for hierarchical rows
2595
+ - **Grouped rows**: Handled inline by `RowComponent` when `row.getIsGrouped()` returns true
2596
+ - **`EmptyState`**: Component displayed when table has no data
2597
+
2598
+ **Pagination Components:**
2599
+ - **`PaginationControls`**: Standard pagination controls
2600
+ - **`EnhancedPaginationControls`**: Enhanced version with performance metrics and jump-to-page
2601
+
2602
+ **Modal Components:**
2603
+ - **`DataTableModals`**: Container for all modal dialogs
2604
+ - **`ImportModal`**: CSV import modal with column mapping
2605
+
2606
+ **Supporting Components:**
2607
+ - **`DataTableErrorBoundary`**: Error boundary for graceful error handling
2608
+ - **`LoadingState`**: Loading indicator component
2609
+ - **`AccessDeniedPage`**: Component shown when user lacks permissions
2610
+
2518
2611
  ### Performance Utilities
2519
2612
 
2520
2613
  - **`determinePaginationMode`**: Automatically selects optimal pagination strategy
@@ -271,7 +271,7 @@ function DishesPage() {
271
271
  console.log('Deleting dish:', row);
272
272
  };
273
273
 
274
- if (loading) return <div>Loading dishes...</div>;
274
+ if (loading) return <p>Loading dishes...</p>;
275
275
 
276
276
  return (
277
277
  <div>
@@ -93,7 +93,7 @@ function MyApp() {
93
93
  // Automatically applies event colors when an event is selected
94
94
  useEventTheme();
95
95
 
96
- return <div>Your app content</div>;
96
+ return <main>Your app content</main>;
97
97
  }
98
98
  ```
99
99
 
@@ -268,7 +268,7 @@ import { useEventTheme } from '@jmruthers/pace-core';
268
268
  function MyApp() {
269
269
  useEventTheme(); // Automatically applies event colors
270
270
 
271
- return <div>Your app content</div>;
271
+ return <main>Your app content</main>;
272
272
  }
273
273
  ```
274
274
 
@@ -319,7 +319,7 @@ function App() {
319
319
  function App() {
320
320
  useEventTheme(); // Replaces the above useEffect
321
321
 
322
- return <div>Your app</div>;
322
+ return <main>Your app</main>;
323
323
  }
324
324
  ```
325
325
 
@@ -388,7 +388,7 @@ function FileManager() {
388
388
  <div>
389
389
  {/* Upload UI */}
390
390
  {isLoading && <div>Uploading...</div>}
391
- {error && <div>Error: {error.message}</div>}
391
+ {error && <p>Error: {error.message}</p>}
392
392
  </div>
393
393
  );
394
394
  }
@@ -941,6 +941,6 @@ When network is interrupted during upload:
941
941
  ## Next Steps
942
942
 
943
943
  - **[Storage Utilities](../api-reference/utilities.md#storage)** - Additional storage utilities
944
- - **[Security Best Practices](../best-practices/security.md)** - Security guidelines
944
+ - **[Security & RBAC Standards](../standards/6-security-rbac-standards.md)** - Security guidelines
945
945
  - **[RBAC Integration](./permission-enforcement.md)** - Permission-based file access
946
946
  - **[Performance Optimization](./performance.md)** - Large file handling