@jmruthers/pace-core 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +5 -403
  3. package/core-usage-manifest.json +93 -0
  4. package/cursor-rules/00-pace-core-compliance.mdc +128 -26
  5. package/cursor-rules/01-standards-compliance.mdc +49 -8
  6. package/cursor-rules/02-project-structure.mdc +6 -0
  7. package/cursor-rules/03-solid-principles.mdc +2 -0
  8. package/cursor-rules/04-testing-standards.mdc +2 -0
  9. package/cursor-rules/05-bug-reports-and-features.mdc +2 -0
  10. package/cursor-rules/06-code-quality.mdc +2 -0
  11. package/cursor-rules/07-tech-stack-compliance.mdc +2 -0
  12. package/cursor-rules/08-markup-quality.mdc +52 -27
  13. package/cursor-rules/09-rbac-compliance.mdc +462 -0
  14. package/cursor-rules/10-error-handling-patterns.mdc +179 -0
  15. package/cursor-rules/11-performance-optimization.mdc +169 -0
  16. package/cursor-rules/12-ci-cd-integration.mdc +150 -0
  17. package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
  18. package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-2N_tqbfq.d.ts} +1 -1
  19. package/dist/DataTable-LRJL4IRV.js +15 -0
  20. package/dist/{PublicPageProvider-DEMpysFR.d.ts → PublicPageProvider-BBH6Vqg7.d.ts} +72 -139
  21. package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
  22. package/dist/api-Y4MQWOFW.js +4 -0
  23. package/dist/audit-MYQXYZFU.js +3 -0
  24. package/dist/{chunk-J36DSWQK.js → chunk-2HGJFNAH.js} +8 -28
  25. package/dist/{chunk-OEWDTMG7.js → chunk-3O3WHILE.js} +38 -121
  26. package/dist/{chunk-M43Y4SSO.js → chunk-3QC3KRHK.js} +1 -14
  27. package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
  28. package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
  29. package/dist/chunk-4T7OBVTU.js +62 -0
  30. package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
  31. package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
  32. package/dist/{chunk-NN6WWZ5U.js → chunk-7TYHROIV.js} +579 -563
  33. package/dist/{chunk-M7MPQISP.js → chunk-A55DK444.js} +9 -16
  34. package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
  35. package/dist/{chunk-L4OXEN46.js → chunk-BVP2BCJF.js} +2 -16
  36. package/dist/chunk-C7NSAPTL.js +1 -0
  37. package/dist/{chunk-YKRAFF5K.js → chunk-FENMYN2U.js} +73 -149
  38. package/dist/{chunk-AVMLPIM7.js → chunk-FTCRZOG2.js} +284 -432
  39. package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
  40. package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
  41. package/dist/{chunk-I6DAQMWX.js → chunk-LAZMKTTF.js} +930 -891
  42. package/dist/{chunk-5EC5MEWX.js → chunk-MAGBIDNS.js} +77 -222
  43. package/dist/chunk-MBADTM7L.js +64 -0
  44. package/dist/chunk-OHIK3MIO.js +994 -0
  45. package/dist/{chunk-6SOIHG6Z.js → chunk-S7DKJPLT.js} +115 -44
  46. package/dist/{chunk-FMUCXFII.js → chunk-SD6WQY43.js} +1 -5
  47. package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
  48. package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
  49. package/dist/{chunk-FFQEQTNW.js → chunk-UIYSCEV7.js} +134 -45
  50. package/dist/{chunk-3LPHPB62.js → chunk-ZFYPMX46.js} +271 -87
  51. package/dist/{chunk-7JPAB3T5.js → chunk-ZS5VO5JB.js} +1989 -1283
  52. package/dist/components.d.ts +6 -6
  53. package/dist/components.js +57 -267
  54. package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
  55. package/dist/eslint-rules/index.cjs +22 -0
  56. package/dist/eslint-rules/rules/compliance.cjs +348 -0
  57. package/dist/eslint-rules/rules/components.cjs +113 -0
  58. package/dist/eslint-rules/rules/imports.cjs +102 -0
  59. package/dist/eslint-rules/rules/rbac.cjs +790 -0
  60. package/dist/eslint-rules/utils/helpers.cjs +42 -0
  61. package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
  62. package/dist/hooks.d.ts +5 -5
  63. package/dist/hooks.js +62 -270
  64. package/dist/icons/index.d.ts +1 -0
  65. package/dist/icons/index.js +1 -0
  66. package/dist/index.d.ts +36 -26
  67. package/dist/index.js +87 -690
  68. package/dist/providers.d.ts +2 -2
  69. package/dist/providers.js +8 -35
  70. package/dist/rbac/eslint-rules.d.ts +46 -44
  71. package/dist/rbac/eslint-rules.js +7 -4
  72. package/dist/rbac/index.d.ts +124 -594
  73. package/dist/rbac/index.js +14 -207
  74. package/dist/styles/index.js +2 -12
  75. package/dist/theming/runtime.js +3 -19
  76. package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
  77. package/dist/{types-CkbwOr4Y.d.ts → types-B-K_5VnO.d.ts} +4 -0
  78. package/dist/types-t9H8qKRw.d.ts +55 -0
  79. package/dist/types.d.ts +1 -1
  80. package/dist/types.js +7 -94
  81. package/dist/{usePublicRouteParams-i3qtoBgg.d.ts → usePublicRouteParams-COZ28Mvq.d.ts} +9 -9
  82. package/dist/utils.d.ts +24 -117
  83. package/dist/utils.js +54 -392
  84. package/docs/README.md +16 -6
  85. package/docs/api/README.md +4 -402
  86. package/docs/api/modules.md +454 -930
  87. package/docs/api-reference/components.md +3 -1
  88. package/docs/api-reference/deprecated.md +31 -6
  89. package/docs/api-reference/rpc-functions.md +78 -3
  90. package/docs/best-practices/accessibility.md +6 -3
  91. package/docs/getting-started/cursor-rules.md +3 -23
  92. package/docs/getting-started/dependencies.md +650 -0
  93. package/docs/getting-started/installation-guide.md +20 -7
  94. package/docs/getting-started/quick-start.md +23 -12
  95. package/docs/implementation-guides/permission-enforcement.md +4 -0
  96. package/docs/rbac/MIGRATION_GUIDE.md +819 -0
  97. package/docs/rbac/RBAC_CONTRACT.md +724 -0
  98. package/docs/rbac/README.md +12 -3
  99. package/docs/rbac/edge-functions-guide.md +376 -0
  100. package/docs/rbac/secure-client-protection.md +0 -34
  101. package/docs/standards/00-pace-core-compliance.md +967 -0
  102. package/docs/standards/01-standards-compliance.md +188 -0
  103. package/docs/standards/02-project-structure.md +985 -0
  104. package/docs/standards/03-solid-principles.md +39 -0
  105. package/docs/standards/04-testing-standards.md +36 -0
  106. package/docs/standards/05-bug-reports-and-features.md +27 -0
  107. package/docs/standards/{04-code-style-standard.md → 06-code-quality.md} +2 -0
  108. package/docs/standards/07-tech-stack-compliance.md +30 -0
  109. package/docs/standards/08-markup-quality.md +345 -0
  110. package/docs/standards/{07-rbac-and-rls-standard.md → 09-rbac-compliance.md} +149 -54
  111. package/docs/standards/10-error-handling-patterns.md +401 -0
  112. package/docs/standards/11-performance-optimization.md +348 -0
  113. package/docs/standards/12-ci-cd-integration.md +370 -0
  114. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +192 -0
  115. package/docs/standards/README.md +62 -33
  116. package/docs/troubleshooting/organisation-context-setup.md +42 -19
  117. package/eslint-config-pace-core.cjs +20 -4
  118. package/package.json +31 -21
  119. package/scripts/audit/audit-compliance.cjs +1295 -0
  120. package/scripts/audit/audit-components.cjs +260 -0
  121. package/scripts/audit/audit-dependencies.cjs +395 -0
  122. package/scripts/audit/audit-rbac.cjs +954 -0
  123. package/scripts/audit/audit-standards.cjs +1268 -0
  124. package/scripts/audit/index.cjs +1898 -194
  125. package/scripts/install-cursor-rules.cjs +259 -8
  126. package/scripts/validate-master.js +1 -1
  127. package/src/__tests__/fixtures/supabase.ts +1 -1
  128. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +1 -1
  129. package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
  130. package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
  131. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +3 -3
  132. package/src/__tests__/helpers/component-test-utils.tsx +1 -1
  133. package/src/__tests__/helpers/supabaseMock.ts +2 -2
  134. package/src/__tests__/public-recipe-view.test.ts +38 -9
  135. package/src/components/Button/Button.tsx +5 -1
  136. package/src/components/ContextSelector/ContextSelector.tsx +42 -39
  137. package/src/components/DataTable/__tests__/keyboard.test.tsx +15 -2
  138. package/src/components/DataTable/components/DataTableBody.tsx +55 -31
  139. package/src/components/DataTable/components/DataTableCore.tsx +186 -13
  140. package/src/components/DataTable/components/DataTableLayout.tsx +30 -5
  141. package/src/components/DataTable/components/EditFields.tsx +23 -3
  142. package/src/components/DataTable/components/EditableRow.tsx +7 -2
  143. package/src/components/DataTable/components/ImportModal.tsx +4 -6
  144. package/src/components/DataTable/components/RowComponent.tsx +12 -0
  145. package/src/components/DataTable/components/ViewRowModal.tsx +4 -4
  146. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +455 -96
  147. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +122 -58
  148. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
  149. package/src/components/DataTable/core/DataTableContext.tsx +1 -1
  150. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
  151. package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
  152. package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
  153. package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
  154. package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
  155. package/src/components/DataTable/types.ts +5 -0
  156. package/src/components/DateTimeField/DateTimeField.tsx +20 -20
  157. package/src/components/DateTimeField/README.md +5 -2
  158. package/src/components/Dialog/Dialog.test.tsx +361 -318
  159. package/src/components/Dialog/Dialog.tsx +1154 -323
  160. package/src/components/Dialog/index.ts +3 -3
  161. package/src/components/FileDisplay/FileDisplay.test.tsx +45 -2
  162. package/src/components/FileDisplay/FileDisplay.tsx +28 -22
  163. package/src/components/Form/Form.test.tsx +9 -10
  164. package/src/components/Form/Form.tsx +369 -9
  165. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +28 -28
  166. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +40 -54
  167. package/src/components/LoginForm/LoginForm.tsx +2 -2
  168. package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
  169. package/src/components/NavigationMenu/NavigationMenu.tsx +2 -2
  170. package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
  171. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
  172. package/src/components/PaceAppLayout/PaceAppLayout.tsx +30 -41
  173. package/src/components/PaceAppLayout/README.md +10 -9
  174. package/src/components/PaceAppLayout/test-setup.tsx +40 -31
  175. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
  176. package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
  177. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +61 -0
  178. package/src/components/PasswordChange/PasswordChangeForm.tsx +20 -13
  179. package/src/components/PublicLayout/PublicLayout.test.tsx +7 -3
  180. package/src/components/PublicLayout/PublicPageLayout.tsx +5 -8
  181. package/src/components/Select/Select.tsx +23 -21
  182. package/src/components/Select/types.ts +1 -1
  183. package/src/components/UserMenu/UserMenu.test.tsx +38 -6
  184. package/src/components/UserMenu/UserMenu.tsx +39 -34
  185. package/src/components/index.ts +3 -4
  186. package/src/eslint-rules/index.cjs +22 -0
  187. package/src/eslint-rules/rules/compliance.cjs +348 -0
  188. package/src/eslint-rules/rules/components.cjs +113 -0
  189. package/src/eslint-rules/rules/imports.cjs +102 -0
  190. package/src/eslint-rules/rules/rbac.cjs +790 -0
  191. package/src/eslint-rules/utils/helpers.cjs +42 -0
  192. package/src/eslint-rules/utils/manifest-loader.cjs +75 -0
  193. package/src/hooks/__tests__/hooks.integration.test.tsx +6 -8
  194. package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
  195. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
  196. package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
  197. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
  198. package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
  199. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
  200. package/src/hooks/public/usePublicEvent.ts +62 -190
  201. package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
  202. package/src/hooks/public/usePublicEventLogo.ts +19 -9
  203. package/src/hooks/useAppConfig.ts +26 -24
  204. package/src/hooks/useEventTheme.test.ts +211 -233
  205. package/src/hooks/useEventTheme.ts +19 -28
  206. package/src/hooks/useEvents.ts +11 -7
  207. package/src/hooks/useKeyboardShortcuts.ts +1 -1
  208. package/src/hooks/useOrganisationPermissions.ts +9 -11
  209. package/src/hooks/useOrganisations.ts +13 -7
  210. package/src/hooks/useQueryCache.ts +0 -1
  211. package/src/hooks/useSessionDraft.ts +380 -0
  212. package/src/hooks/useSessionRestoration.ts +3 -1
  213. package/src/icons/index.ts +27 -0
  214. package/src/index.ts +16 -1
  215. package/src/providers/OrganisationProvider.tsx +23 -14
  216. package/src/providers/services/EventServiceProvider.tsx +1 -24
  217. package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
  218. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -0
  219. package/src/rbac/README.md +20 -20
  220. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
  221. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
  222. package/src/rbac/adapters.tsx +7 -295
  223. package/src/rbac/api.test.ts +44 -56
  224. package/src/rbac/api.ts +10 -17
  225. package/src/rbac/cache-invalidation.ts +0 -1
  226. package/src/rbac/compliance/index.ts +10 -0
  227. package/src/rbac/compliance/pattern-detector.ts +553 -0
  228. package/src/rbac/compliance/runtime-compliance.ts +22 -0
  229. package/src/rbac/components/AccessDenied.tsx +150 -0
  230. package/src/rbac/components/NavigationGuard.tsx +12 -20
  231. package/src/rbac/components/PagePermissionGuard.tsx +4 -24
  232. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
  233. package/src/rbac/components/index.ts +3 -41
  234. package/src/rbac/eslint-rules.js +1 -1
  235. package/src/rbac/hooks/index.ts +0 -3
  236. package/src/rbac/hooks/permissions/index.ts +0 -3
  237. package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
  238. package/src/rbac/hooks/usePermissions.ts +0 -3
  239. package/src/rbac/hooks/useRBAC.test.ts +21 -3
  240. package/src/rbac/hooks/useRBAC.ts +4 -3
  241. package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
  242. package/src/rbac/hooks/useResolvedScope.ts +58 -140
  243. package/src/rbac/hooks/useResourcePermissions.test.ts +241 -60
  244. package/src/rbac/hooks/useResourcePermissions.ts +182 -63
  245. package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
  246. package/src/rbac/hooks/useRoleManagement.ts +147 -19
  247. package/src/rbac/hooks/useSecureSupabase.ts +4 -8
  248. package/src/rbac/index.ts +7 -9
  249. package/src/rbac/permissions.ts +17 -17
  250. package/src/rbac/utils/contextValidator.ts +45 -7
  251. package/src/services/AuthService.ts +132 -23
  252. package/src/services/EventService.ts +4 -97
  253. package/src/services/InactivityService.ts +155 -58
  254. package/src/services/OrganisationService.ts +7 -44
  255. package/src/services/__tests__/OrganisationService.test.ts +26 -8
  256. package/src/services/base/BaseService.ts +0 -3
  257. package/src/styles/core.css +4 -0
  258. package/src/types/database.generated.ts +4733 -3809
  259. package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
  260. package/src/utils/context/organisationContext.test.ts +13 -28
  261. package/src/utils/context/organisationContext.ts +21 -52
  262. package/src/utils/dynamic/dynamicUtils.ts +1 -1
  263. package/src/utils/file-reference/index.ts +39 -15
  264. package/src/utils/formatting/formatDateTime.test.ts +3 -2
  265. package/src/utils/formatting/formatTime.test.ts +3 -2
  266. package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
  267. package/src/utils/index.ts +4 -1
  268. package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
  269. package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
  270. package/src/utils/persistence/keyDerivation.ts +304 -0
  271. package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
  272. package/src/utils/security/secureStorage.ts +5 -5
  273. package/src/utils/storage/helpers.ts +3 -3
  274. package/src/utils/supabase/createBaseClient.ts +147 -0
  275. package/src/utils/timezone/timezone.test.ts +1 -2
  276. package/src/utils/timezone/timezone.ts +1 -1
  277. package/src/utils/validation/csrf.ts +4 -4
  278. package/cursor-rules/CHANGELOG.md +0 -119
  279. package/cursor-rules/README.md +0 -192
  280. package/dist/DataTable-E7YQZD7D.js +0 -175
  281. package/dist/DataTable-E7YQZD7D.js.map +0 -1
  282. package/dist/UnifiedAuthProvider-QPXO24B4.js +0 -18
  283. package/dist/UnifiedAuthProvider-QPXO24B4.js.map +0 -1
  284. package/dist/api-6LVZTHDS.js +0 -52
  285. package/dist/api-6LVZTHDS.js.map +0 -1
  286. package/dist/audit-V53FV5AG.js +0 -17
  287. package/dist/audit-V53FV5AG.js.map +0 -1
  288. package/dist/chunk-36LVWXB2.js +0 -227
  289. package/dist/chunk-36LVWXB2.js.map +0 -1
  290. package/dist/chunk-3LPHPB62.js.map +0 -1
  291. package/dist/chunk-5DRSZLL2.js.map +0 -1
  292. package/dist/chunk-5EC5MEWX.js.map +0 -1
  293. package/dist/chunk-63FOKYGO.js.map +0 -1
  294. package/dist/chunk-6SOIHG6Z.js.map +0 -1
  295. package/dist/chunk-7JPAB3T5.js.map +0 -1
  296. package/dist/chunk-ATKZM7RX.js +0 -2053
  297. package/dist/chunk-ATKZM7RX.js.map +0 -1
  298. package/dist/chunk-AVMLPIM7.js.map +0 -1
  299. package/dist/chunk-DGUM43GV.js.map +0 -1
  300. package/dist/chunk-E66EQZE6.js.map +0 -1
  301. package/dist/chunk-FFQEQTNW.js.map +0 -1
  302. package/dist/chunk-FMUCXFII.js.map +0 -1
  303. package/dist/chunk-G37KK66H.js.map +0 -1
  304. package/dist/chunk-I6DAQMWX.js.map +0 -1
  305. package/dist/chunk-J36DSWQK.js.map +0 -1
  306. package/dist/chunk-KQCRWDSA.js +0 -1
  307. package/dist/chunk-KQCRWDSA.js.map +0 -1
  308. package/dist/chunk-L4OXEN46.js.map +0 -1
  309. package/dist/chunk-LMC26NLJ.js +0 -84
  310. package/dist/chunk-LMC26NLJ.js.map +0 -1
  311. package/dist/chunk-M43Y4SSO.js.map +0 -1
  312. package/dist/chunk-M7MPQISP.js.map +0 -1
  313. package/dist/chunk-NN6WWZ5U.js.map +0 -1
  314. package/dist/chunk-OEWDTMG7.js.map +0 -1
  315. package/dist/chunk-PWLANIRT.js.map +0 -1
  316. package/dist/chunk-QXHPKYJV.js.map +0 -1
  317. package/dist/chunk-VBXEHIUJ.js.map +0 -1
  318. package/dist/chunk-YKRAFF5K.js.map +0 -1
  319. package/dist/chunk-ZSAAAMVR.js.map +0 -1
  320. package/dist/components.js.map +0 -1
  321. package/dist/contextValidator-OOPCLPZW.js +0 -9
  322. package/dist/contextValidator-OOPCLPZW.js.map +0 -1
  323. package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
  324. package/dist/hooks.js.map +0 -1
  325. package/dist/index.js.map +0 -1
  326. package/dist/providers.js.map +0 -1
  327. package/dist/rbac/eslint-rules.js.map +0 -1
  328. package/dist/rbac/index.js.map +0 -1
  329. package/dist/styles/index.js.map +0 -1
  330. package/dist/theming/runtime.js.map +0 -1
  331. package/dist/types.js.map +0 -1
  332. package/dist/utils.js.map +0 -1
  333. package/docs/standards/01-architecture-standard.md +0 -44
  334. package/docs/standards/02-api-and-rpc-standard.md +0 -39
  335. package/docs/standards/03-component-standard.md +0 -32
  336. package/docs/standards/05-security-standard.md +0 -44
  337. package/docs/standards/06-testing-and-docs-standard.md +0 -29
  338. package/docs/standards/pace-core-compliance.md +0 -432
  339. package/scripts/audit/core/checks/accessibility.cjs +0 -197
  340. package/scripts/audit/core/checks/api-usage.cjs +0 -191
  341. package/scripts/audit/core/checks/bundle.cjs +0 -142
  342. package/scripts/audit/core/checks/compliance.cjs +0 -2706
  343. package/scripts/audit/core/checks/config.cjs +0 -54
  344. package/scripts/audit/core/checks/coverage.cjs +0 -84
  345. package/scripts/audit/core/checks/dependencies.cjs +0 -994
  346. package/scripts/audit/core/checks/documentation.cjs +0 -268
  347. package/scripts/audit/core/checks/environment.cjs +0 -116
  348. package/scripts/audit/core/checks/error-handling.cjs +0 -340
  349. package/scripts/audit/core/checks/forms.cjs +0 -172
  350. package/scripts/audit/core/checks/heuristics.cjs +0 -68
  351. package/scripts/audit/core/checks/hooks.cjs +0 -334
  352. package/scripts/audit/core/checks/imports.cjs +0 -244
  353. package/scripts/audit/core/checks/performance.cjs +0 -325
  354. package/scripts/audit/core/checks/routes.cjs +0 -117
  355. package/scripts/audit/core/checks/state.cjs +0 -130
  356. package/scripts/audit/core/checks/structure.cjs +0 -65
  357. package/scripts/audit/core/checks/style.cjs +0 -584
  358. package/scripts/audit/core/checks/testing.cjs +0 -122
  359. package/scripts/audit/core/checks/typescript.cjs +0 -61
  360. package/scripts/audit/core/scanner.cjs +0 -199
  361. package/scripts/audit/core/utils.cjs +0 -137
  362. package/scripts/audit/reporters/console.cjs +0 -151
  363. package/scripts/audit/reporters/json.cjs +0 -54
  364. package/scripts/audit/reporters/markdown.cjs +0 -124
  365. package/scripts/audit-consuming-app.cjs +0 -86
  366. package/src/eslint-rules/pace-core-compliance.cjs +0 -510
  367. package/src/eslint-rules/pace-core-compliance.js +0 -638
  368. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
  369. package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
  370. package/src/rbac/components/NavigationProvider.test.tsx +0 -481
  371. package/src/rbac/components/NavigationProvider.tsx +0 -345
  372. package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
  373. package/src/rbac/components/PagePermissionProvider.tsx +0 -279
  374. package/src/rbac/components/PermissionEnforcer.tsx +0 -312
  375. package/src/rbac/components/RoleBasedRouter.tsx +0 -440
  376. package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
  377. package/src/rbac/components/SecureDataProvider.tsx +0 -339
  378. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
  379. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
  380. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
  381. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
  382. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
  383. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
  384. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
  385. package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
  386. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
  387. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
@@ -0,0 +1,650 @@
1
+ ---
2
+ lastUpdated: 2025-01-28T00:00:00+00:00
3
+ version: 0.6.5
4
+ reviewedBy: dependency-clarity-audit
5
+ ---
6
+
7
+ # PACE Core Dependencies Guide
8
+
9
+ > **📚 Complete Dependency Reference** | [← Back to Documentation](../README.md) | [Installation Guide](./installation-guide.md) | [🔍 Dependency Audit Guide](./dependency-audit-guide.md)
10
+
11
+ **This guide clearly explains which dependencies you need to install and which are already included in pace-core.**
12
+
13
+ > **🎯 New to auditing?** Start with the [Dependency Audit Guide](./dependency-audit-guide.md) for a quick overview and step-by-step instructions.
14
+
15
+ ## 🎯 Quick Start: Audit Your Dependencies
16
+
17
+ **This document is the single source of truth for pace-core dependencies.** Use it to audit your consuming app's dependencies.
18
+
19
+ > **🎯 New to auditing?** Start with the [Dependency Audit Guide](./dependency-audit-guide.md) for a quick overview and step-by-step instructions.
20
+
21
+ **Quick Audit Checklist:**
22
+ 1. ✅ Verify pace-core version (`^0.6.5` or later)
23
+ 2. ❌ Remove included dependencies (see [Included Dependencies](#-already-included-do-not-install) below)
24
+ 3. ✅ Install required core dependencies (see [Required Peer Dependencies](#-required-peer-dependencies-must-install) below)
25
+ 4. ⚠️ Install optional dependencies only if you use those features
26
+ 5. 🔄 Update code to use pace-core exports instead of direct imports
27
+
28
+ **For detailed guidance:**
29
+ - [Dependency Audit Guide](./dependency-audit-guide.md) - Quick overview and 5-step process
30
+ - [Consuming Apps Audit Checklist](../../audit/consuming-apps-audit-checklist.md) - Step-by-step checklist with commands
31
+
32
+ ---
33
+
34
+ ## ⚠️ CRITICAL: pace-core Version Requirement
35
+
36
+ **You MUST use `@jmruthers/pace-core@^0.6.5` or later.** Older versions may have incompatible dependencies or missing features.
37
+
38
+ ```bash
39
+ # ✅ Ensure you're using the latest version
40
+ npm install @jmruthers/pace-core@latest
41
+
42
+ # Verify your installed version
43
+ npm ls @jmruthers/pace-core
44
+ ```
45
+
46
+ **Why this matters:**
47
+ - Dependency structure may change between versions
48
+ - Security patches and bug fixes are included in newer versions
49
+ - New features require specific dependency versions
50
+ - This guide is accurate for pace-core v0.6.5+
51
+
52
+ ## Quick Reference
53
+
54
+ ### ✅ Already Included (DO NOT Install)
55
+
56
+ These packages are included as dependencies in `@jmruthers/pace-core` and **should NOT** be installed in your consuming app:
57
+
58
+ ```bash
59
+ # ❌ DO NOT install these - they're already included
60
+ # @supabase/supabase-js (use createBaseClient from pace-core instead)
61
+ # @radix-ui/react-checkbox (use pace-core components instead)
62
+ # @radix-ui/react-label (use pace-core components instead)
63
+ # @radix-ui/react-slot (use pace-core components instead)
64
+ # @radix-ui/react-switch (use pace-core components instead)
65
+ # @radix-ui/react-tabs (use pace-core components instead)
66
+ # @radix-ui/react-toast (use pace-core components instead)
67
+ # @radix-ui/react-tooltip (use pace-core components instead)
68
+ # lucide-react (use @jmruthers/pace-core/icons instead)
69
+ # @tanstack/react-virtual
70
+ # @hookform/resolvers
71
+ # lodash.debounce
72
+ # lodash.throttle
73
+ # papaparse
74
+ # react-is
75
+ ```
76
+
77
+ > **Note**:
78
+ > - `@supabase/supabase-js` is **included** - Use `createBaseClient()` from `@jmruthers/pace-core` instead of importing `createClient` directly (security enforcement).
79
+ > - `@radix-ui/*` packages are **included** - Use pace-core components instead of importing Radix UI primitives directly (consistency enforcement).
80
+ > - `lucide-react` is **included** - Use `@jmruthers/pace-core/icons` instead of importing icons directly (consistency enforcement).
81
+ > - `@tanstack/react-query` is a **peer dependency** (see below) because consuming apps need direct access to `QueryClient`, `QueryClientProvider`, and React Query hooks.
82
+ > - `date-fns` and `date-fns-tz` are **peer dependencies** (see below) because consuming apps may need direct access to date-fns functions that pace-core doesn't export.
83
+
84
+ ### ⚠️ Required Peer Dependencies (MUST Install)
85
+
86
+ These packages are **required** for pace-core to function. You **MUST** install them in your consuming app:
87
+
88
+ **Minimum Versions (Required):**
89
+ ```bash
90
+ # ✅ REQUIRED - Minimum versions (^ allows compatible updates)
91
+ npm install react@^19.0.0 react-dom@^19.0.0
92
+ npm install @tanstack/react-query@^5.90.0
93
+ npm install @tanstack/react-table@^8.0.0
94
+ npm install date-fns@^3.0.0 date-fns-tz@^3.0.0
95
+ npm install @radix-ui/react-checkbox@^1.0.0
96
+ npm install @radix-ui/react-label@^2.0.0
97
+ npm install @radix-ui/react-slot@^1.0.0
98
+ npm install @radix-ui/react-switch@^1.1.0
99
+ npm install @radix-ui/react-tabs@^1.0.0
100
+ npm install @radix-ui/react-toast@^1.0.0
101
+ npm install @radix-ui/react-tooltip@^1.0.0
102
+ npm install clsx@^2.0.0
103
+ npm install lucide-react@^0.400.0
104
+ npm install react-day-picker@^9.0.0
105
+ npm install react-hook-form@^7.0.0
106
+ npm install react-router-dom@^6.0.0
107
+ npm install tailwind-merge@^2.0.0
108
+ npm install tailwindcss@^4.0.0
109
+ npm install zod@^3.20.0
110
+ ```
111
+
112
+ **Recommended Specific Versions (For Maximum Compatibility):**
113
+ ```bash
114
+ # ✅ RECOMMENDED - Specific tested versions
115
+ npm install react@19.2.3 react-dom@19.2.3
116
+ npm install @tanstack/react-query@^5.90.16
117
+ npm install @tanstack/react-table@^8.20.0
118
+ npm install date-fns@^3.0.0 date-fns-tz@^3.0.0
119
+ npm install @radix-ui/react-checkbox@^1.1.2
120
+ npm install @radix-ui/react-label@^2.1.1
121
+ npm install @radix-ui/react-slot@^1.1.0
122
+ npm install @radix-ui/react-switch@^1.1.1
123
+ npm install @radix-ui/react-tabs@^1.1.1
124
+ npm install @radix-ui/react-toast@^1.2.2
125
+ npm install @radix-ui/react-tooltip@^1.1.3
126
+ npm install clsx@^2.1.1
127
+ npm install lucide-react@^0.468.0
128
+ npm install react-day-picker@^9.4.3
129
+ npm install react-hook-form@^7.54.2
130
+ npm install react-router-dom@^6.28.0
131
+ npm install tailwind-merge@^2.5.5
132
+ npm install tailwindcss@^4.0.0
133
+ npm install zod@^3.24.1
134
+ ```
135
+
136
+ > **💡 Version Strategy**: Use `^` (caret) ranges for flexibility, or pin specific versions for maximum stability. React 19.2.3+ is recommended to avoid security vulnerabilities in earlier 19.x versions.
137
+
138
+ ### 📦 One-Line Install (All Required Peers)
139
+
140
+ ```bash
141
+ 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
142
+ ```
143
+
144
+ > **Note**: Only install peer dependencies that your app actually uses. For example:
145
+ > - If you don't use DataTable, you may not need `@tanstack/react-table`
146
+ > - If you don't use forms, you may not need `react-hook-form`
147
+ > - If you don't use date pickers, you may not need `react-day-picker`
148
+ > - If you don't use date formatting, you may not need `date-fns`/`date-fns-tz`
149
+
150
+ ---
151
+
152
+ ## Detailed Breakdown
153
+
154
+ ### Included Dependencies
155
+
156
+ These are bundled with pace-core. Installing them separately will create duplicate dependencies and potential version conflicts.
157
+
158
+ | Package | Version | Used For |
159
+ |---------|---------|----------|
160
+ | `@supabase/supabase-js` | ^2.89.0 | Supabase client (use `createBaseClient()` from pace-core) |
161
+ | `@radix-ui/react-checkbox` | ^1.0.0 | Checkbox primitive (use pace-core `Checkbox` component) |
162
+ | `@radix-ui/react-label` | ^2.0.0 | Label primitive (use pace-core `Label` component) |
163
+ | `@radix-ui/react-slot` | ^1.0.0 | Slot primitive (used by pace-core components) |
164
+ | `@radix-ui/react-switch` | ^1.1.0 | Switch primitive (use pace-core `Switch` component) |
165
+ | `@radix-ui/react-tabs` | ^1.0.0 | Tabs primitive (use pace-core `Tabs` component) |
166
+ | `@radix-ui/react-toast` | ^1.0.0 | Toast primitive (use pace-core `Toast` component) |
167
+ | `@radix-ui/react-tooltip` | ^1.0.0 | Tooltip primitive (use pace-core `Tooltip` component) |
168
+ | `lucide-react` | ^0.400.0 | Icon library (use `@jmruthers/pace-core/icons`) |
169
+ | `@tanstack/react-virtual` | ^3.13.16 | Virtual scrolling for DataTable performance |
170
+ | `@hookform/resolvers` | ^3.9.0 | Form validation with Zod |
171
+ | `lodash.debounce` | ^4.0.8 | Input debouncing |
172
+ | `lodash.throttle` | ^4.1.1 | Event throttling |
173
+ | `papaparse` | ^5.5.3 | CSV parsing (DataTable export) |
174
+ | `react-is` | ^19.2.3 | React element type checking |
175
+
176
+ **Why these are included:**
177
+ - They're core to pace-core's functionality
178
+ - Ensures version compatibility
179
+ - Prevents duplicate installations
180
+ - Simplifies consuming app setup
181
+
182
+ ### Required Peer Dependencies
183
+
184
+ These must be installed by consuming apps because:
185
+
186
+ 1. **React & React DOM** - Core framework (peer dependency to allow React 19+)
187
+ 2. **@tanstack/react-query** - Data fetching, caching, state management (peer to allow app-level QueryClient configuration)
188
+ 3. **date-fns & date-fns-tz** - Date formatting and timezone utilities (peer to allow apps to use date-fns functions directly)
189
+ 4. **@tanstack/react-table** - DataTable component functionality
190
+ 5. **react-router-dom** - Navigation and routing (peer to allow app-level routing)
191
+ 6. **tailwindcss** - Styling system (peer to allow app-level Tailwind config)
192
+ 7. **Other utilities** - Used throughout pace-core components
193
+
194
+ **Note**: `@supabase/supabase-js`, `@radix-ui/*` packages, and `lucide-react` are now **included dependencies** to enforce security and consistency. Use pace-core's exports instead:
195
+ - `createBaseClient()` from `@jmruthers/pace-core` (instead of `createClient` from `@supabase/supabase-js`)
196
+ - pace-core components (instead of `@radix-ui/*` primitives)
197
+ - `@jmruthers/pace-core/icons` (instead of `lucide-react`)
198
+
199
+ | Package | Minimum Version | Recommended Version | Used For | Required? |
200
+ |---------|-----------------|---------------------|----------|----------|
201
+ | `react` | ^19.0.0 | **19.2.3+** (security fixes) | React framework | ✅ Always |
202
+ | `react-dom` | ^19.0.0 | **19.2.3+** (security fixes) | React DOM rendering | ✅ Always |
203
+ | `react-router-dom` | ^6.0.0 | ^6.28.0 | Routing and navigation | ✅ Always |
204
+ | `tailwindcss` | ^4.0.0 | ^4.0.0 | CSS framework | ✅ Always |
205
+ | `@tanstack/react-query` | ^5.90.0 | ^5.90.16 | Data fetching, caching, QueryClient configuration | ⚠️ If using data fetching |
206
+ | `@tanstack/react-table` | ^8.0.0 | ^8.20.0 | DataTable component | ⚠️ If using DataTable |
207
+ | `date-fns` | ^3.0.0 | ^3.0.0 | Date formatting and manipulation | ⚠️ If using date formatting |
208
+ | `date-fns-tz` | ^3.0.0 | ^3.0.0 | Timezone-aware date operations | ⚠️ If using timezone features |
209
+ | `react-hook-form` | ^7.0.0 | ^7.54.2 | Form handling | ⚠️ If using forms |
210
+ | `react-day-picker` | ^9.0.0 | ^9.4.3 | Calendar/date picker | ⚠️ If using date pickers |
211
+ | `zod` | ^3.20.0 | ^3.24.1 | Schema validation | ⚠️ If using validation |
212
+ | `clsx` | ^2.0.0 | ^2.1.1 | Conditional className utility | ⚠️ If using className utilities |
213
+ | `tailwind-merge` | ^2.0.0 | ^2.5.5 | Tailwind class merging utility | ⚠️ If using class merging |
214
+
215
+ > **⚠️ React Version Security**: React 19.0.0 through 19.2.0 had security vulnerabilities (CVE-2025-55182). **You MUST use React 19.2.3 or later** to avoid these issues.
216
+
217
+ **Why these are peer dependencies:**
218
+ - Allows consuming apps to control versions
219
+ - Prevents duplicate installations
220
+ - Enables app-level configuration (e.g., Tailwind config)
221
+ - Ensures single instance of React/React Router
222
+
223
+ ---
224
+
225
+ ## Installation Checklist
226
+
227
+ Use this checklist to verify your installation:
228
+
229
+ ### ✅ Step 1: Install pace-core (Latest Version)
230
+
231
+ ```bash
232
+ # Install latest version
233
+ npm install @jmruthers/pace-core@latest
234
+
235
+ # Or install specific minimum version
236
+ npm install @jmruthers/pace-core@^0.6.5
237
+
238
+ # Verify installed version
239
+ npm ls @jmruthers/pace-core
240
+ ```
241
+
242
+ **Expected output:** Should show `@jmruthers/pace-core@0.6.5` or higher.
243
+
244
+ ### ✅ Step 2: Install Required Peer Dependencies
245
+
246
+ **Install core dependencies (always required):**
247
+ ```bash
248
+ npm install react react-dom react-router-dom tailwindcss
249
+ ```
250
+
251
+ **Install optional dependencies (only if you use these features):**
252
+ ```bash
253
+ # If using data fetching
254
+ npm install @tanstack/react-query
255
+
256
+ # If using DataTable
257
+ npm install @tanstack/react-table
258
+
259
+ # If using date formatting
260
+ npm install date-fns date-fns-tz
261
+
262
+ # If using forms
263
+ npm install react-hook-form
264
+
265
+ # If using date pickers
266
+ npm install react-day-picker
267
+
268
+ # If using validation
269
+ npm install zod
270
+
271
+ # If using className utilities
272
+ npm install clsx tailwind-merge
273
+ ```
274
+
275
+ ### ✅ Step 3: Install Tailwind v4 (Dev Dependency)
276
+
277
+ ```bash
278
+ npm install -D @tailwindcss/vite tailwindcss@^4.0.0
279
+ ```
280
+
281
+ ### ❌ Step 4: Verify You Did NOT Install Included Dependencies
282
+
283
+ Check your `package.json` - you should **NOT** have these as dependencies:
284
+
285
+ - ❌ `@supabase/supabase-js` (already in pace-core - use `createBaseClient()` from pace-core)
286
+ - ❌ `@radix-ui/react-checkbox` (already in pace-core - use pace-core `Checkbox` component)
287
+ - ❌ `@radix-ui/react-label` (already in pace-core - use pace-core `Label` component)
288
+ - ❌ `@radix-ui/react-slot` (already in pace-core - used by pace-core components)
289
+ - ❌ `@radix-ui/react-switch` (already in pace-core - use pace-core `Switch` component)
290
+ - ❌ `@radix-ui/react-tabs` (already in pace-core - use pace-core `Tabs` component)
291
+ - ❌ `@radix-ui/react-toast` (already in pace-core - use pace-core `Toast` component)
292
+ - ❌ `@radix-ui/react-tooltip` (already in pace-core - use pace-core `Tooltip` component)
293
+ - ❌ `lucide-react` (already in pace-core - use `@jmruthers/pace-core/icons`)
294
+ - ❌ `@tanstack/react-virtual` (already in pace-core)
295
+ - ❌ `@hookform/resolvers` (already in pace-core)
296
+ - ❌ `lodash.debounce` (already in pace-core)
297
+ - ❌ `lodash.throttle` (already in pace-core)
298
+ - ❌ `papaparse` (already in pace-core)
299
+ - ❌ `react-is` (already in pace-core)
300
+ - ❌ `@hookform/resolvers` (already in pace-core)
301
+ - ❌ `date-fns` (already in pace-core)
302
+ - ❌ `date-fns-tz` (already in pace-core)
303
+ - ❌ `lodash.debounce` (already in pace-core)
304
+ - ❌ `lodash.throttle` (already in pace-core)
305
+ - ❌ `papaparse` (already in pace-core)
306
+ - ❌ `react-is` (already in pace-core)
307
+
308
+ If you find any of these in your `package.json`, remove them:
309
+
310
+ ```bash
311
+ npm uninstall @supabase/supabase-js @radix-ui/react-checkbox @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 @tanstack/react-virtual @hookform/resolvers lodash.debounce lodash.throttle papaparse react-is
312
+ ```
313
+
314
+ > **Note**:
315
+ > - `@supabase/supabase-js` is **included** - Use `createBaseClient()` from `@jmruthers/pace-core` instead.
316
+ > - `@radix-ui/*` packages are **included** - Use pace-core components instead.
317
+ > - `lucide-react` is **included** - Use `@jmruthers/pace-core/icons` instead.
318
+ > - `@tanstack/react-query` is a **peer dependency** and should be installed (see [Required Peer Dependencies](#-required-peer-dependencies-must-install) above).
319
+ > - `date-fns` and `date-fns-tz` are **peer dependencies** and should be installed (see [Required Peer Dependencies](#-required-peer-dependencies-must-install) above).
320
+
321
+ ---
322
+
323
+ ## Common Mistakes
324
+
325
+ ### ❌ Mistake 1: Installing Included Dependencies
326
+
327
+ **Problem:** Installing packages that are already included in pace-core
328
+
329
+ ```bash
330
+ # ❌ WRONG - Don't do this
331
+ npm install @supabase/supabase-js @radix-ui/react-checkbox lucide-react @tanstack/react-virtual
332
+ ```
333
+
334
+ **Why it's wrong:**
335
+ - Creates duplicate dependencies
336
+ - Can cause version conflicts
337
+ - Increases bundle size unnecessarily
338
+ - May cause runtime errors
339
+ - **Security risk**: Allows bypassing pace-core security rules
340
+ - **Consistency risk**: Allows bypassing pace-core components/icons
341
+
342
+ **Solution:** Remove them from your `package.json` and use pace-core exports instead:
343
+
344
+ ```bash
345
+ npm uninstall @supabase/supabase-js @radix-ui/react-checkbox @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 @tanstack/react-virtual @hookform/resolvers lodash.debounce lodash.throttle papaparse react-is
346
+ ```
347
+
348
+ **Use pace-core exports instead:**
349
+ ```tsx
350
+ // ✅ CORRECT: Use pace-core exports
351
+ import { createBaseClient } from '@jmruthers/pace-core';
352
+ import { Button, Checkbox, Label } from '@jmruthers/pace-core';
353
+ import { ChevronDown, Edit } from '@jmruthers/pace-core/icons';
354
+
355
+ // ❌ WRONG: Direct imports (will fail - packages are included, not peer)
356
+ import { createClient } from '@supabase/supabase-js';
357
+ import { Checkbox } from '@radix-ui/react-checkbox';
358
+ import { ChevronDown } from 'lucide-react';
359
+ ```
360
+
361
+ > **Note**:
362
+ > - `@tanstack/react-query` is a **peer dependency** and should be installed. See [Required Peer Dependencies](#-required-peer-dependencies-must-install) above.
363
+ > - `date-fns` and `date-fns-tz` are **peer dependencies** and should be installed. See [Required Peer Dependencies](#-required-peer-dependencies-must-install) above.
364
+
365
+ ### ❌ Mistake 2: Missing Required Peer Dependencies
366
+
367
+ **Problem:** Not installing required peer dependencies
368
+
369
+ **Symptoms:**
370
+ - Runtime errors: "Cannot find module '@radix-ui/react-checkbox'"
371
+ - TypeScript errors: "Module not found"
372
+ - Components don't render correctly
373
+
374
+ **Solution:** Install all required peer dependencies (see [Required Peer Dependencies](#-required-peer-dependencies-must-install) above)
375
+
376
+ ### ❌ Mistake 3: Wrong Versions
377
+
378
+ **Problem:** Installing incompatible versions of peer dependencies
379
+
380
+ **Example:**
381
+ ```bash
382
+ # ❌ WRONG - React 18 when pace-core requires React 19
383
+ npm install react@^18.0.0
384
+
385
+ # ❌ WRONG - React 19.0.0-19.2.0 have security vulnerabilities
386
+ npm install react@19.0.0
387
+ ```
388
+
389
+ **Solution:** Use compatible versions specified in peer dependencies:
390
+
391
+ ```bash
392
+ # ✅ CORRECT - Minimum version
393
+ npm install react@^19.0.0 react-dom@^19.0.0
394
+
395
+ # ✅ BETTER - Recommended secure version
396
+ npm install react@19.2.3 react-dom@19.2.3
397
+ ```
398
+
399
+ ### ❌ Mistake 4: Installing Optional Dependencies
400
+
401
+ **Problem:** Installing packages that aren't needed
402
+
403
+ **Note:** Currently, all peer dependencies are required. There are no optional peer dependencies.
404
+
405
+ ---
406
+
407
+ ## Verification
408
+
409
+ ### Check Your Installation
410
+
411
+ Run this command to verify core peer dependencies are installed:
412
+
413
+ ```bash
414
+ # Check core dependencies (always required)
415
+ npm ls react react-dom react-router-dom tailwindcss
416
+
417
+ # Check optional dependencies (only if you use these features)
418
+ npm ls @tanstack/react-query @tanstack/react-table date-fns date-fns-tz react-day-picker react-hook-form zod clsx tailwind-merge
419
+ ```
420
+
421
+ ### Check for Duplicates
422
+
423
+ Verify you don't have duplicate dependencies:
424
+
425
+ ```bash
426
+ # Check for included dependencies that shouldn't be installed
427
+ npm ls @supabase/supabase-js @radix-ui/react-checkbox @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 @tanstack/react-virtual @hookform/resolvers lodash.debounce lodash.throttle papaparse react-is
428
+ ```
429
+
430
+ If these show up as direct dependencies (not under `@jmruthers/pace-core`), remove them and use pace-core exports instead.
431
+
432
+ > **Note**:
433
+ > - `@tanstack/react-query` should be a direct dependency (it's a peer dependency).
434
+ > - `date-fns` and `date-fns-tz` should be direct dependencies (they're peer dependencies).
435
+ > - `@supabase/supabase-js`, `@radix-ui/*`, and `lucide-react` should NOT be direct dependencies (they're included - use pace-core exports).
436
+
437
+ ### Verify pace-core Version
438
+
439
+ Check that you're using a compatible version of pace-core:
440
+
441
+ ```bash
442
+ # Check installed version
443
+ npm ls @jmruthers/pace-core
444
+
445
+ # Check latest available version
446
+ npm view @jmruthers/pace-core version
447
+
448
+ # Compare versions
449
+ npm outdated @jmruthers/pace-core
450
+ ```
451
+
452
+ **Required:** You must be using `@jmruthers/pace-core@^0.6.5` or later.
453
+
454
+ ### Verify Version Compatibility
455
+
456
+ Check that your peer dependency versions match pace-core requirements:
457
+
458
+ ```bash
459
+ # Check key dependencies
460
+ npm ls react react-dom @tanstack/react-query date-fns date-fns-tz tailwindcss @jmruthers/pace-core
461
+
462
+ # Check all peer dependencies
463
+ npm ls 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
464
+ ```
465
+
466
+ All should show versions compatible with pace-core's peer dependency requirements.
467
+
468
+ **Critical Check:** Ensure React is 19.2.3 or later:
469
+ ```bash
470
+ npm ls react
471
+ # Should show: react@19.2.3 or higher
472
+ ```
473
+
474
+ ---
475
+
476
+ ## Troubleshooting
477
+
478
+ ### Issue: "Cannot find module '@radix-ui/react-checkbox'" or similar Radix UI errors
479
+
480
+ **Cause:** `@radix-ui/*` packages are now **included dependencies** in pace-core. You should NOT import them directly.
481
+
482
+ **Solution:**
483
+ 1. **DO NOT** install `@radix-ui/*` packages - they're included in pace-core
484
+ 2. **Use** pace-core components instead:
485
+
486
+ ```tsx
487
+ // ✅ CORRECT: Use pace-core components
488
+ import { Checkbox, Label, Switch, Tabs, Toast, Tooltip } from '@jmruthers/pace-core';
489
+
490
+ // ❌ WRONG: Direct Radix UI import (will fail - packages are included, not peer)
491
+ import { Checkbox } from '@radix-ui/react-checkbox';
492
+ ```
493
+
494
+ **Note**: `@radix-ui/*` packages are included dependencies to enforce consistency. Use pace-core components instead.
495
+
496
+ ### Issue: "Module not found: '@supabase/supabase-js'" or "Rollup failed to resolve import '@supabase/supabase-js'"
497
+
498
+ **Cause:** `@supabase/supabase-js` is now an **included dependency** in pace-core. You should NOT import it directly.
499
+
500
+ **Solution:**
501
+ 1. **Remove** `@supabase/supabase-js` from your `package.json` if you have it installed
502
+ 2. **Use** `createBaseClient()` from pace-core instead:
503
+
504
+ ```tsx
505
+ // ✅ CORRECT: Use pace-core's createBaseClient
506
+ import { createBaseClient } from '@jmruthers/pace-core';
507
+
508
+ const supabase = createBaseClient(
509
+ import.meta.env.VITE_SUPABASE_URL,
510
+ import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
511
+ );
512
+
513
+ // ❌ WRONG: Direct import (will fail - package is included, not peer)
514
+ import { createClient } from '@supabase/supabase-js';
515
+ ```
516
+
517
+ **Why:**
518
+ - `@supabase/supabase-js` is included to enforce security rules
519
+ - Use `createBaseClient()` which enforces the allowed exception pattern
520
+ - **Do NOT** add it to Vite `optimizeDeps` - that won't work and violates security rules
521
+
522
+ **Files to check:**
523
+ - `src/lib/supabase.ts`
524
+ - `src/main.tsx`
525
+ - Any file importing `createClient` from `@supabase/supabase-js`
526
+
527
+ ### Issue: Build-Time Resolution Errors
528
+
529
+ **Cause:** Some bundlers (Vite/Rollup) require packages to be in direct dependencies for build-time module resolution.
530
+
531
+ **Symptoms:**
532
+ - Build errors: "Failed to resolve import '@tanstack/react-query'"
533
+ - Build errors: "Failed to resolve import 'date-fns'"
534
+ - Build errors: `[vite]: Rollup failed to resolve import "@tanstack/react-query"`
535
+
536
+ **Solution:**
537
+ - `@tanstack/react-query`, `date-fns`, and `date-fns-tz` are **peer dependencies** and **MUST be installed** as direct dependencies in your `package.json`. See [Required Peer Dependencies](#-required-peer-dependencies-must-install) above.
538
+ - **Do NOT** externalize them in Vite config - install them as dependencies instead.
539
+ - **Do NOT** add them to `optimizeDeps.include` - that won't fix the build error.
540
+ - `@supabase/supabase-js`, `@radix-ui/*`, and `lucide-react` are included dependencies - use pace-core exports instead of importing directly.
541
+
542
+ **Common Mistake:**
543
+ If you removed `@tanstack/react-query` during cleanup thinking it was included, you need to reinstall it:
544
+
545
+ ```bash
546
+ # ✅ CORRECT: Install as peer dependency
547
+ npm install @tanstack/react-query@^5.90.0
548
+
549
+ # ❌ WRONG: Don't externalize in vite.config.ts
550
+ # build: { rollupOptions: { external: ['@tanstack/react-query'] } }
551
+
552
+ # ❌ WRONG: Don't add to optimizeDeps
553
+ # optimizeDeps: { include: ['@tanstack/react-query'] }
554
+ ```
555
+
556
+ **Why:**
557
+ - Peer dependencies must be explicitly installed in your `package.json`
558
+ - Peer dependencies are **NOT** transitive dependencies - they won't be available unless you install them
559
+ - Externalizing or adding to `optimizeDeps` are workarounds that won't work - the dependency must be in `package.json`
560
+ - This is the standard approach for peer dependencies
561
+
562
+ ### Issue: Version conflicts
563
+
564
+ **Cause:** Incompatible versions of peer dependencies
565
+
566
+ **Solution:**
567
+ 1. Check required versions in pace-core's `package.json`
568
+ 2. Update your dependencies to match:
569
+ ```bash
570
+ npm install react@^19.0.0 react-dom@^19.0.0
571
+ ```
572
+
573
+ ### Issue: Duplicate React instances
574
+
575
+ **Cause:** Multiple React installations
576
+
577
+ **Solution:**
578
+ 1. Check for duplicates: `npm ls react`
579
+ 2. Remove duplicate installations
580
+ 3. Ensure Vite config deduplicates React (see [Installation Guide](./installation-guide.md))
581
+
582
+ ---
583
+
584
+ ## Reference
585
+
586
+ ### View Current Dependencies
587
+
588
+ To see pace-core's current dependencies and peer dependencies:
589
+
590
+ ```bash
591
+ # View pace-core package.json
592
+ npm view @jmruthers/pace-core peerDependencies
593
+ npm view @jmruthers/pace-core dependencies
594
+ ```
595
+
596
+ Or check the source:
597
+ - **Peer Dependencies:** `packages/core/package.json` → `peerDependencies`
598
+ - **Included Dependencies:** `packages/core/package.json` → `dependencies`
599
+
600
+ ### Package.json Structure
601
+
602
+ ```json
603
+ {
604
+ "peerDependencies": {
605
+ // ⚠️ REQUIRED - Install these in your app
606
+ "react": "^19.0.0",
607
+ "react-dom": "^19.0.0",
608
+ "@tanstack/react-query": "^5.90.0",
609
+ "date-fns": "^3.0.0",
610
+ "date-fns-tz": "^3.0.0",
611
+ // ... other required peers
612
+ },
613
+ "dependencies": {
614
+ // ✅ INCLUDED - Already in pace-core, don't install
615
+ // Use pace-core exports instead:
616
+ // - @supabase/supabase-js → use createBaseClient() from pace-core
617
+ // - @radix-ui/* → use pace-core components
618
+ // - lucide-react → use @jmruthers/pace-core/icons
619
+ "@supabase/supabase-js": "^2.89.0",
620
+ "@radix-ui/react-checkbox": "^1.0.0",
621
+ // ... other included deps
622
+ }
623
+ }
624
+ ```
625
+
626
+
627
+ ---
628
+
629
+ ## Summary
630
+
631
+ | Category | Action | Packages |
632
+ |----------|--------|----------|
633
+ | **pace-core** | ✅ **MUST** use latest | `@jmruthers/pace-core@^0.6.5` (use `@latest` to get current version) |
634
+ | **Included** | ❌ **DO NOT** install | `@supabase/supabase-js` (use `createBaseClient()`), `@radix-ui/*` (use pace-core components), `lucide-react` (use `@jmruthers/pace-core/icons`), `@tanstack/react-virtual`, `@hookform/resolvers`, `lodash.debounce`, `lodash.throttle`, `papaparse`, `react-is` |
635
+ | **Required Peers (Always)** | ✅ **MUST** install | `react@19.2.3+`, `react-dom@19.2.3+`, `react-router-dom@^6.0.0`, `tailwindcss@^4.0.0` |
636
+ | **Optional Peers (If Used)** | ⚠️ **Install if needed** | `@tanstack/react-query@^5.90.0` (data fetching), `@tanstack/react-table@^8.0.0` (DataTable), `date-fns@^3.0.0` (date formatting), `date-fns-tz@^3.0.0` (timezone), `react-hook-form@^7.0.0` (forms), `react-day-picker@^9.0.0` (date pickers), `zod@^3.20.0` (validation), `clsx@^2.0.0` (className utility), `tailwind-merge@^2.0.0` (class merging) |
637
+ | **Dev Dependency** | ✅ **MUST** install | `@tailwindcss/vite`, `tailwindcss@^4.0.0` |
638
+
639
+ ---
640
+
641
+ **Last Updated:** 2025-01-28 | **Version:** v0.6.5
642
+
643
+ **Next Steps:**
644
+ - [Consuming Apps Audit Checklist](../../audit/consuming-apps-audit-checklist.md) - **Use this checklist to audit your dependencies**
645
+ - [Installation Guide](./installation-guide.md) - Complete setup instructions
646
+ - [Quick Start](./quick-start.md) - Build your first app
647
+ - [Troubleshooting](../troubleshooting/README.md) - Fix common issues
648
+
649
+ **This document is the single source of truth for pace-core dependencies.**
650
+