@jmruthers/pace-core 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +5 -403
  3. package/core-usage-manifest.json +93 -0
  4. package/cursor-rules/00-pace-core-compliance.mdc +128 -26
  5. package/cursor-rules/01-standards-compliance.mdc +49 -8
  6. package/cursor-rules/02-project-structure.mdc +6 -0
  7. package/cursor-rules/03-solid-principles.mdc +2 -0
  8. package/cursor-rules/04-testing-standards.mdc +2 -0
  9. package/cursor-rules/05-bug-reports-and-features.mdc +2 -0
  10. package/cursor-rules/06-code-quality.mdc +2 -0
  11. package/cursor-rules/07-tech-stack-compliance.mdc +2 -0
  12. package/cursor-rules/08-markup-quality.mdc +52 -27
  13. package/cursor-rules/09-rbac-compliance.mdc +462 -0
  14. package/cursor-rules/10-error-handling-patterns.mdc +179 -0
  15. package/cursor-rules/11-performance-optimization.mdc +169 -0
  16. package/cursor-rules/12-ci-cd-integration.mdc +150 -0
  17. package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
  18. package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-2N_tqbfq.d.ts} +1 -1
  19. package/dist/DataTable-LRJL4IRV.js +15 -0
  20. package/dist/{PublicPageProvider-DEMpysFR.d.ts → PublicPageProvider-BBH6Vqg7.d.ts} +72 -139
  21. package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
  22. package/dist/api-Y4MQWOFW.js +4 -0
  23. package/dist/audit-MYQXYZFU.js +3 -0
  24. package/dist/{chunk-J36DSWQK.js → chunk-2HGJFNAH.js} +8 -28
  25. package/dist/{chunk-OEWDTMG7.js → chunk-3O3WHILE.js} +38 -121
  26. package/dist/{chunk-M43Y4SSO.js → chunk-3QC3KRHK.js} +1 -14
  27. package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
  28. package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
  29. package/dist/chunk-4T7OBVTU.js +62 -0
  30. package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
  31. package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
  32. package/dist/{chunk-NN6WWZ5U.js → chunk-7TYHROIV.js} +579 -563
  33. package/dist/{chunk-M7MPQISP.js → chunk-A55DK444.js} +9 -16
  34. package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
  35. package/dist/{chunk-L4OXEN46.js → chunk-BVP2BCJF.js} +2 -16
  36. package/dist/chunk-C7NSAPTL.js +1 -0
  37. package/dist/{chunk-YKRAFF5K.js → chunk-FENMYN2U.js} +73 -149
  38. package/dist/{chunk-AVMLPIM7.js → chunk-FTCRZOG2.js} +284 -432
  39. package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
  40. package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
  41. package/dist/{chunk-I6DAQMWX.js → chunk-LAZMKTTF.js} +930 -891
  42. package/dist/{chunk-5EC5MEWX.js → chunk-MAGBIDNS.js} +77 -222
  43. package/dist/chunk-MBADTM7L.js +64 -0
  44. package/dist/chunk-OHIK3MIO.js +994 -0
  45. package/dist/{chunk-6SOIHG6Z.js → chunk-S7DKJPLT.js} +115 -44
  46. package/dist/{chunk-FMUCXFII.js → chunk-SD6WQY43.js} +1 -5
  47. package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
  48. package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
  49. package/dist/{chunk-FFQEQTNW.js → chunk-UIYSCEV7.js} +134 -45
  50. package/dist/{chunk-3LPHPB62.js → chunk-ZFYPMX46.js} +271 -87
  51. package/dist/{chunk-7JPAB3T5.js → chunk-ZS5VO5JB.js} +1989 -1283
  52. package/dist/components.d.ts +6 -6
  53. package/dist/components.js +57 -267
  54. package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
  55. package/dist/eslint-rules/index.cjs +22 -0
  56. package/dist/eslint-rules/rules/compliance.cjs +348 -0
  57. package/dist/eslint-rules/rules/components.cjs +113 -0
  58. package/dist/eslint-rules/rules/imports.cjs +102 -0
  59. package/dist/eslint-rules/rules/rbac.cjs +790 -0
  60. package/dist/eslint-rules/utils/helpers.cjs +42 -0
  61. package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
  62. package/dist/hooks.d.ts +5 -5
  63. package/dist/hooks.js +62 -270
  64. package/dist/icons/index.d.ts +1 -0
  65. package/dist/icons/index.js +1 -0
  66. package/dist/index.d.ts +36 -26
  67. package/dist/index.js +87 -690
  68. package/dist/providers.d.ts +2 -2
  69. package/dist/providers.js +8 -35
  70. package/dist/rbac/eslint-rules.d.ts +46 -44
  71. package/dist/rbac/eslint-rules.js +7 -4
  72. package/dist/rbac/index.d.ts +124 -594
  73. package/dist/rbac/index.js +14 -207
  74. package/dist/styles/index.js +2 -12
  75. package/dist/theming/runtime.js +3 -19
  76. package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
  77. package/dist/{types-CkbwOr4Y.d.ts → types-B-K_5VnO.d.ts} +4 -0
  78. package/dist/types-t9H8qKRw.d.ts +55 -0
  79. package/dist/types.d.ts +1 -1
  80. package/dist/types.js +7 -94
  81. package/dist/{usePublicRouteParams-i3qtoBgg.d.ts → usePublicRouteParams-COZ28Mvq.d.ts} +9 -9
  82. package/dist/utils.d.ts +24 -117
  83. package/dist/utils.js +54 -392
  84. package/docs/README.md +16 -6
  85. package/docs/api/README.md +4 -402
  86. package/docs/api/modules.md +454 -930
  87. package/docs/api-reference/components.md +3 -1
  88. package/docs/api-reference/deprecated.md +31 -6
  89. package/docs/api-reference/rpc-functions.md +78 -3
  90. package/docs/best-practices/accessibility.md +6 -3
  91. package/docs/getting-started/cursor-rules.md +3 -23
  92. package/docs/getting-started/dependencies.md +650 -0
  93. package/docs/getting-started/installation-guide.md +20 -7
  94. package/docs/getting-started/quick-start.md +23 -12
  95. package/docs/implementation-guides/permission-enforcement.md +4 -0
  96. package/docs/rbac/MIGRATION_GUIDE.md +819 -0
  97. package/docs/rbac/RBAC_CONTRACT.md +724 -0
  98. package/docs/rbac/README.md +12 -3
  99. package/docs/rbac/edge-functions-guide.md +376 -0
  100. package/docs/rbac/secure-client-protection.md +0 -34
  101. package/docs/standards/00-pace-core-compliance.md +967 -0
  102. package/docs/standards/01-standards-compliance.md +188 -0
  103. package/docs/standards/02-project-structure.md +985 -0
  104. package/docs/standards/03-solid-principles.md +39 -0
  105. package/docs/standards/04-testing-standards.md +36 -0
  106. package/docs/standards/05-bug-reports-and-features.md +27 -0
  107. package/docs/standards/{04-code-style-standard.md → 06-code-quality.md} +2 -0
  108. package/docs/standards/07-tech-stack-compliance.md +30 -0
  109. package/docs/standards/08-markup-quality.md +345 -0
  110. package/docs/standards/{07-rbac-and-rls-standard.md → 09-rbac-compliance.md} +149 -54
  111. package/docs/standards/10-error-handling-patterns.md +401 -0
  112. package/docs/standards/11-performance-optimization.md +348 -0
  113. package/docs/standards/12-ci-cd-integration.md +370 -0
  114. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +192 -0
  115. package/docs/standards/README.md +62 -33
  116. package/docs/troubleshooting/organisation-context-setup.md +42 -19
  117. package/eslint-config-pace-core.cjs +20 -4
  118. package/package.json +31 -21
  119. package/scripts/audit/audit-compliance.cjs +1295 -0
  120. package/scripts/audit/audit-components.cjs +260 -0
  121. package/scripts/audit/audit-dependencies.cjs +395 -0
  122. package/scripts/audit/audit-rbac.cjs +954 -0
  123. package/scripts/audit/audit-standards.cjs +1268 -0
  124. package/scripts/audit/index.cjs +1898 -194
  125. package/scripts/install-cursor-rules.cjs +259 -8
  126. package/scripts/validate-master.js +1 -1
  127. package/src/__tests__/fixtures/supabase.ts +1 -1
  128. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +1 -1
  129. package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
  130. package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
  131. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +3 -3
  132. package/src/__tests__/helpers/component-test-utils.tsx +1 -1
  133. package/src/__tests__/helpers/supabaseMock.ts +2 -2
  134. package/src/__tests__/public-recipe-view.test.ts +38 -9
  135. package/src/components/Button/Button.tsx +5 -1
  136. package/src/components/ContextSelector/ContextSelector.tsx +42 -39
  137. package/src/components/DataTable/__tests__/keyboard.test.tsx +15 -2
  138. package/src/components/DataTable/components/DataTableBody.tsx +55 -31
  139. package/src/components/DataTable/components/DataTableCore.tsx +186 -13
  140. package/src/components/DataTable/components/DataTableLayout.tsx +30 -5
  141. package/src/components/DataTable/components/EditFields.tsx +23 -3
  142. package/src/components/DataTable/components/EditableRow.tsx +7 -2
  143. package/src/components/DataTable/components/ImportModal.tsx +4 -6
  144. package/src/components/DataTable/components/RowComponent.tsx +12 -0
  145. package/src/components/DataTable/components/ViewRowModal.tsx +4 -4
  146. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +455 -96
  147. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +122 -58
  148. package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
  149. package/src/components/DataTable/core/DataTableContext.tsx +1 -1
  150. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
  151. package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
  152. package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
  153. package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
  154. package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
  155. package/src/components/DataTable/types.ts +5 -0
  156. package/src/components/DateTimeField/DateTimeField.tsx +20 -20
  157. package/src/components/DateTimeField/README.md +5 -2
  158. package/src/components/Dialog/Dialog.test.tsx +361 -318
  159. package/src/components/Dialog/Dialog.tsx +1154 -323
  160. package/src/components/Dialog/index.ts +3 -3
  161. package/src/components/FileDisplay/FileDisplay.test.tsx +45 -2
  162. package/src/components/FileDisplay/FileDisplay.tsx +28 -22
  163. package/src/components/Form/Form.test.tsx +9 -10
  164. package/src/components/Form/Form.tsx +369 -9
  165. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +28 -28
  166. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +40 -54
  167. package/src/components/LoginForm/LoginForm.tsx +2 -2
  168. package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
  169. package/src/components/NavigationMenu/NavigationMenu.tsx +2 -2
  170. package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
  171. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
  172. package/src/components/PaceAppLayout/PaceAppLayout.tsx +30 -41
  173. package/src/components/PaceAppLayout/README.md +10 -9
  174. package/src/components/PaceAppLayout/test-setup.tsx +40 -31
  175. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
  176. package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
  177. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +61 -0
  178. package/src/components/PasswordChange/PasswordChangeForm.tsx +20 -13
  179. package/src/components/PublicLayout/PublicLayout.test.tsx +7 -3
  180. package/src/components/PublicLayout/PublicPageLayout.tsx +5 -8
  181. package/src/components/Select/Select.tsx +23 -21
  182. package/src/components/Select/types.ts +1 -1
  183. package/src/components/UserMenu/UserMenu.test.tsx +38 -6
  184. package/src/components/UserMenu/UserMenu.tsx +39 -34
  185. package/src/components/index.ts +3 -4
  186. package/src/eslint-rules/index.cjs +22 -0
  187. package/src/eslint-rules/rules/compliance.cjs +348 -0
  188. package/src/eslint-rules/rules/components.cjs +113 -0
  189. package/src/eslint-rules/rules/imports.cjs +102 -0
  190. package/src/eslint-rules/rules/rbac.cjs +790 -0
  191. package/src/eslint-rules/utils/helpers.cjs +42 -0
  192. package/src/eslint-rules/utils/manifest-loader.cjs +75 -0
  193. package/src/hooks/__tests__/hooks.integration.test.tsx +6 -8
  194. package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
  195. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
  196. package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
  197. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
  198. package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
  199. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
  200. package/src/hooks/public/usePublicEvent.ts +62 -190
  201. package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
  202. package/src/hooks/public/usePublicEventLogo.ts +19 -9
  203. package/src/hooks/useAppConfig.ts +26 -24
  204. package/src/hooks/useEventTheme.test.ts +211 -233
  205. package/src/hooks/useEventTheme.ts +19 -28
  206. package/src/hooks/useEvents.ts +11 -7
  207. package/src/hooks/useKeyboardShortcuts.ts +1 -1
  208. package/src/hooks/useOrganisationPermissions.ts +9 -11
  209. package/src/hooks/useOrganisations.ts +13 -7
  210. package/src/hooks/useQueryCache.ts +0 -1
  211. package/src/hooks/useSessionDraft.ts +380 -0
  212. package/src/hooks/useSessionRestoration.ts +3 -1
  213. package/src/icons/index.ts +27 -0
  214. package/src/index.ts +16 -1
  215. package/src/providers/OrganisationProvider.tsx +23 -14
  216. package/src/providers/services/EventServiceProvider.tsx +1 -24
  217. package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
  218. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -0
  219. package/src/rbac/README.md +20 -20
  220. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
  221. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
  222. package/src/rbac/adapters.tsx +7 -295
  223. package/src/rbac/api.test.ts +44 -56
  224. package/src/rbac/api.ts +10 -17
  225. package/src/rbac/cache-invalidation.ts +0 -1
  226. package/src/rbac/compliance/index.ts +10 -0
  227. package/src/rbac/compliance/pattern-detector.ts +553 -0
  228. package/src/rbac/compliance/runtime-compliance.ts +22 -0
  229. package/src/rbac/components/AccessDenied.tsx +150 -0
  230. package/src/rbac/components/NavigationGuard.tsx +12 -20
  231. package/src/rbac/components/PagePermissionGuard.tsx +4 -24
  232. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
  233. package/src/rbac/components/index.ts +3 -41
  234. package/src/rbac/eslint-rules.js +1 -1
  235. package/src/rbac/hooks/index.ts +0 -3
  236. package/src/rbac/hooks/permissions/index.ts +0 -3
  237. package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
  238. package/src/rbac/hooks/usePermissions.ts +0 -3
  239. package/src/rbac/hooks/useRBAC.test.ts +21 -3
  240. package/src/rbac/hooks/useRBAC.ts +4 -3
  241. package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
  242. package/src/rbac/hooks/useResolvedScope.ts +58 -140
  243. package/src/rbac/hooks/useResourcePermissions.test.ts +241 -60
  244. package/src/rbac/hooks/useResourcePermissions.ts +182 -63
  245. package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
  246. package/src/rbac/hooks/useRoleManagement.ts +147 -19
  247. package/src/rbac/hooks/useSecureSupabase.ts +4 -8
  248. package/src/rbac/index.ts +7 -9
  249. package/src/rbac/permissions.ts +17 -17
  250. package/src/rbac/utils/contextValidator.ts +45 -7
  251. package/src/services/AuthService.ts +132 -23
  252. package/src/services/EventService.ts +4 -97
  253. package/src/services/InactivityService.ts +155 -58
  254. package/src/services/OrganisationService.ts +7 -44
  255. package/src/services/__tests__/OrganisationService.test.ts +26 -8
  256. package/src/services/base/BaseService.ts +0 -3
  257. package/src/styles/core.css +4 -0
  258. package/src/types/database.generated.ts +4733 -3809
  259. package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
  260. package/src/utils/context/organisationContext.test.ts +13 -28
  261. package/src/utils/context/organisationContext.ts +21 -52
  262. package/src/utils/dynamic/dynamicUtils.ts +1 -1
  263. package/src/utils/file-reference/index.ts +39 -15
  264. package/src/utils/formatting/formatDateTime.test.ts +3 -2
  265. package/src/utils/formatting/formatTime.test.ts +3 -2
  266. package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
  267. package/src/utils/index.ts +4 -1
  268. package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
  269. package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
  270. package/src/utils/persistence/keyDerivation.ts +304 -0
  271. package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
  272. package/src/utils/security/secureStorage.ts +5 -5
  273. package/src/utils/storage/helpers.ts +3 -3
  274. package/src/utils/supabase/createBaseClient.ts +147 -0
  275. package/src/utils/timezone/timezone.test.ts +1 -2
  276. package/src/utils/timezone/timezone.ts +1 -1
  277. package/src/utils/validation/csrf.ts +4 -4
  278. package/cursor-rules/CHANGELOG.md +0 -119
  279. package/cursor-rules/README.md +0 -192
  280. package/dist/DataTable-E7YQZD7D.js +0 -175
  281. package/dist/DataTable-E7YQZD7D.js.map +0 -1
  282. package/dist/UnifiedAuthProvider-QPXO24B4.js +0 -18
  283. package/dist/UnifiedAuthProvider-QPXO24B4.js.map +0 -1
  284. package/dist/api-6LVZTHDS.js +0 -52
  285. package/dist/api-6LVZTHDS.js.map +0 -1
  286. package/dist/audit-V53FV5AG.js +0 -17
  287. package/dist/audit-V53FV5AG.js.map +0 -1
  288. package/dist/chunk-36LVWXB2.js +0 -227
  289. package/dist/chunk-36LVWXB2.js.map +0 -1
  290. package/dist/chunk-3LPHPB62.js.map +0 -1
  291. package/dist/chunk-5DRSZLL2.js.map +0 -1
  292. package/dist/chunk-5EC5MEWX.js.map +0 -1
  293. package/dist/chunk-63FOKYGO.js.map +0 -1
  294. package/dist/chunk-6SOIHG6Z.js.map +0 -1
  295. package/dist/chunk-7JPAB3T5.js.map +0 -1
  296. package/dist/chunk-ATKZM7RX.js +0 -2053
  297. package/dist/chunk-ATKZM7RX.js.map +0 -1
  298. package/dist/chunk-AVMLPIM7.js.map +0 -1
  299. package/dist/chunk-DGUM43GV.js.map +0 -1
  300. package/dist/chunk-E66EQZE6.js.map +0 -1
  301. package/dist/chunk-FFQEQTNW.js.map +0 -1
  302. package/dist/chunk-FMUCXFII.js.map +0 -1
  303. package/dist/chunk-G37KK66H.js.map +0 -1
  304. package/dist/chunk-I6DAQMWX.js.map +0 -1
  305. package/dist/chunk-J36DSWQK.js.map +0 -1
  306. package/dist/chunk-KQCRWDSA.js +0 -1
  307. package/dist/chunk-KQCRWDSA.js.map +0 -1
  308. package/dist/chunk-L4OXEN46.js.map +0 -1
  309. package/dist/chunk-LMC26NLJ.js +0 -84
  310. package/dist/chunk-LMC26NLJ.js.map +0 -1
  311. package/dist/chunk-M43Y4SSO.js.map +0 -1
  312. package/dist/chunk-M7MPQISP.js.map +0 -1
  313. package/dist/chunk-NN6WWZ5U.js.map +0 -1
  314. package/dist/chunk-OEWDTMG7.js.map +0 -1
  315. package/dist/chunk-PWLANIRT.js.map +0 -1
  316. package/dist/chunk-QXHPKYJV.js.map +0 -1
  317. package/dist/chunk-VBXEHIUJ.js.map +0 -1
  318. package/dist/chunk-YKRAFF5K.js.map +0 -1
  319. package/dist/chunk-ZSAAAMVR.js.map +0 -1
  320. package/dist/components.js.map +0 -1
  321. package/dist/contextValidator-OOPCLPZW.js +0 -9
  322. package/dist/contextValidator-OOPCLPZW.js.map +0 -1
  323. package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
  324. package/dist/hooks.js.map +0 -1
  325. package/dist/index.js.map +0 -1
  326. package/dist/providers.js.map +0 -1
  327. package/dist/rbac/eslint-rules.js.map +0 -1
  328. package/dist/rbac/index.js.map +0 -1
  329. package/dist/styles/index.js.map +0 -1
  330. package/dist/theming/runtime.js.map +0 -1
  331. package/dist/types.js.map +0 -1
  332. package/dist/utils.js.map +0 -1
  333. package/docs/standards/01-architecture-standard.md +0 -44
  334. package/docs/standards/02-api-and-rpc-standard.md +0 -39
  335. package/docs/standards/03-component-standard.md +0 -32
  336. package/docs/standards/05-security-standard.md +0 -44
  337. package/docs/standards/06-testing-and-docs-standard.md +0 -29
  338. package/docs/standards/pace-core-compliance.md +0 -432
  339. package/scripts/audit/core/checks/accessibility.cjs +0 -197
  340. package/scripts/audit/core/checks/api-usage.cjs +0 -191
  341. package/scripts/audit/core/checks/bundle.cjs +0 -142
  342. package/scripts/audit/core/checks/compliance.cjs +0 -2706
  343. package/scripts/audit/core/checks/config.cjs +0 -54
  344. package/scripts/audit/core/checks/coverage.cjs +0 -84
  345. package/scripts/audit/core/checks/dependencies.cjs +0 -994
  346. package/scripts/audit/core/checks/documentation.cjs +0 -268
  347. package/scripts/audit/core/checks/environment.cjs +0 -116
  348. package/scripts/audit/core/checks/error-handling.cjs +0 -340
  349. package/scripts/audit/core/checks/forms.cjs +0 -172
  350. package/scripts/audit/core/checks/heuristics.cjs +0 -68
  351. package/scripts/audit/core/checks/hooks.cjs +0 -334
  352. package/scripts/audit/core/checks/imports.cjs +0 -244
  353. package/scripts/audit/core/checks/performance.cjs +0 -325
  354. package/scripts/audit/core/checks/routes.cjs +0 -117
  355. package/scripts/audit/core/checks/state.cjs +0 -130
  356. package/scripts/audit/core/checks/structure.cjs +0 -65
  357. package/scripts/audit/core/checks/style.cjs +0 -584
  358. package/scripts/audit/core/checks/testing.cjs +0 -122
  359. package/scripts/audit/core/checks/typescript.cjs +0 -61
  360. package/scripts/audit/core/scanner.cjs +0 -199
  361. package/scripts/audit/core/utils.cjs +0 -137
  362. package/scripts/audit/reporters/console.cjs +0 -151
  363. package/scripts/audit/reporters/json.cjs +0 -54
  364. package/scripts/audit/reporters/markdown.cjs +0 -124
  365. package/scripts/audit-consuming-app.cjs +0 -86
  366. package/src/eslint-rules/pace-core-compliance.cjs +0 -510
  367. package/src/eslint-rules/pace-core-compliance.js +0 -638
  368. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
  369. package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
  370. package/src/rbac/components/NavigationProvider.test.tsx +0 -481
  371. package/src/rbac/components/NavigationProvider.tsx +0 -345
  372. package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
  373. package/src/rbac/components/PagePermissionProvider.tsx +0 -279
  374. package/src/rbac/components/PermissionEnforcer.tsx +0 -312
  375. package/src/rbac/components/RoleBasedRouter.tsx +0 -440
  376. package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
  377. package/src/rbac/components/SecureDataProvider.tsx +0 -339
  378. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
  379. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
  380. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
  381. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
  382. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
  383. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
  384. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
  385. package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
  386. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
  387. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
@@ -1,207 +1,14 @@
1
- import {
2
- ALL_PERMISSIONS,
3
- AccessLevelGuard,
4
- EVENT_APP_PERMISSIONS,
5
- EnhancedNavigationMenu,
6
- GLOBAL_PERMISSIONS,
7
- NavigationGuard,
8
- NavigationProvider,
9
- ORGANISATION_PERMISSIONS,
10
- PAGE_PERMISSIONS,
11
- PagePermissionGuard,
12
- PagePermissionProvider,
13
- PermissionEnforcer,
14
- PermissionGuard,
15
- RBACErrorCode,
16
- RPCFunction,
17
- RoleBasedRouter,
18
- SecureDataProvider,
19
- checkRuntimeCompliance,
20
- createRBACExpressMiddleware,
21
- createRBACMiddleware,
22
- getCustomAuthCodeFixes,
23
- getDirectSupabaseAuthFixes,
24
- getDuplicateConfigFixes,
25
- getQuickFixes,
26
- getSetupIssues,
27
- getUnprotectedPageFixes,
28
- hasAnyPermissionCached,
29
- hasPermissionCached,
30
- isRBACInitialized,
31
- isValidPermission,
32
- useNavigationPermissions,
33
- usePagePermissions,
34
- useRoleBasedRouter,
35
- useSecureData,
36
- validateAndWarn,
37
- validateDatabaseConfiguration,
38
- validateRBACSetup,
39
- withAccessLevelGuard,
40
- withPermissionGuard,
41
- withRoleGuard
42
- } from "../chunk-ATKZM7RX.js";
43
- import {
44
- SECURE_CLIENT_SYMBOL,
45
- SecureSupabaseClient,
46
- createSecureClient,
47
- fromSupabaseClient,
48
- isSecureClient,
49
- useAccessLevel,
50
- useCachedPermissions,
51
- useCan,
52
- useHasAllPermissions,
53
- useHasAnyPermission,
54
- useMultiplePermissions,
55
- usePermissions,
56
- useRBAC,
57
- useResolvedScope,
58
- useResourcePermissions,
59
- useRoleManagement,
60
- useSecureSupabase,
61
- warnIfInsecureClient
62
- } from "../chunk-NN6WWZ5U.js";
63
- import "../chunk-OEWDTMG7.js";
64
- import "../chunk-KQCRWDSA.js";
65
- import "../chunk-AVMLPIM7.js";
66
- import {
67
- CACHE_PATTERNS,
68
- RBACCache,
69
- RBACEngine,
70
- clearInFlightRequests,
71
- createRBACConfig,
72
- createRBACEngine,
73
- disablePerformanceMonitoring,
74
- enablePerformanceMonitoring,
75
- getAccessLevel,
76
- getInFlightRequestCount,
77
- getPerformanceMetrics,
78
- getPerformanceSummary,
79
- getPermissionMap,
80
- getRBACConfig,
81
- getRBACLogger,
82
- getRoleContext,
83
- hasAllPermissions,
84
- hasAnyPermission,
85
- hasPermission,
86
- isDebugMode,
87
- isDevelopmentMode,
88
- isPerformanceMonitoringEnabled,
89
- isPermitted,
90
- isPermittedCached,
91
- rbacCache,
92
- recordAuditEvent,
93
- recordPermissionCheck,
94
- resetPerformanceMetrics,
95
- resolveAppContext,
96
- setupRBAC
97
- } from "../chunk-3LPHPB62.js";
98
- import {
99
- RBACAuditManager,
100
- createAuditManager,
101
- emitAuditEvent,
102
- getGlobalAuditManager,
103
- setGlobalAuditManager
104
- } from "../chunk-63FOKYGO.js";
105
- import "../chunk-36LVWXB2.js";
106
- import "../chunk-QXHPKYJV.js";
107
- import "../chunk-M7MPQISP.js";
108
- import "../chunk-FMUCXFII.js";
109
- import "../chunk-VBXEHIUJ.js";
110
- import "../chunk-PWLANIRT.js";
111
- import "../chunk-DGUM43GV.js";
112
- export {
113
- ALL_PERMISSIONS,
114
- AccessLevelGuard,
115
- CACHE_PATTERNS,
116
- EVENT_APP_PERMISSIONS,
117
- EnhancedNavigationMenu,
118
- GLOBAL_PERMISSIONS,
119
- NavigationGuard,
120
- NavigationProvider,
121
- ORGANISATION_PERMISSIONS,
122
- PAGE_PERMISSIONS,
123
- PagePermissionGuard,
124
- PagePermissionProvider,
125
- PermissionEnforcer,
126
- PermissionGuard,
127
- RBACAuditManager,
128
- RBACCache,
129
- RBACEngine,
130
- RBACErrorCode,
131
- RPCFunction,
132
- RoleBasedRouter,
133
- SECURE_CLIENT_SYMBOL,
134
- SecureDataProvider,
135
- SecureSupabaseClient,
136
- checkRuntimeCompliance,
137
- clearInFlightRequests,
138
- createAuditManager,
139
- createRBACConfig,
140
- createRBACEngine,
141
- createRBACExpressMiddleware,
142
- createRBACMiddleware,
143
- createSecureClient,
144
- disablePerformanceMonitoring,
145
- emitAuditEvent,
146
- enablePerformanceMonitoring,
147
- fromSupabaseClient,
148
- getAccessLevel,
149
- getCustomAuthCodeFixes,
150
- getDirectSupabaseAuthFixes,
151
- getDuplicateConfigFixes,
152
- getGlobalAuditManager,
153
- getInFlightRequestCount,
154
- getPerformanceMetrics,
155
- getPerformanceSummary,
156
- getPermissionMap,
157
- getQuickFixes,
158
- getRBACConfig,
159
- getRBACLogger,
160
- getRoleContext,
161
- getSetupIssues,
162
- getUnprotectedPageFixes,
163
- hasAllPermissions,
164
- hasAnyPermission,
165
- hasAnyPermissionCached,
166
- hasPermission,
167
- hasPermissionCached,
168
- isDebugMode,
169
- isDevelopmentMode,
170
- isPerformanceMonitoringEnabled,
171
- isPermitted,
172
- isPermittedCached,
173
- isRBACInitialized,
174
- isSecureClient,
175
- isValidPermission,
176
- rbacCache,
177
- recordAuditEvent,
178
- recordPermissionCheck,
179
- resetPerformanceMetrics,
180
- resolveAppContext,
181
- setGlobalAuditManager,
182
- setupRBAC,
183
- useAccessLevel,
184
- useCachedPermissions,
185
- useCan,
186
- useHasAllPermissions,
187
- useHasAnyPermission,
188
- useMultiplePermissions,
189
- useNavigationPermissions,
190
- usePagePermissions,
191
- usePermissions,
192
- useRBAC,
193
- useResolvedScope,
194
- useResourcePermissions,
195
- useRoleBasedRouter,
196
- useRoleManagement,
197
- useSecureData,
198
- useSecureSupabase,
199
- validateAndWarn,
200
- validateDatabaseConfiguration,
201
- validateRBACSetup,
202
- warnIfInsecureClient,
203
- withAccessLevelGuard,
204
- withPermissionGuard,
205
- withRoleGuard
206
- };
207
- //# sourceMappingURL=index.js.map
1
+ export { ALL_PERMISSIONS, EVENT_APP_PERMISSIONS, GLOBAL_PERMISSIONS, NavigationGuard, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, PagePermissionGuard, RBACErrorCode, RPCFunction, checkRuntimeCompliance, createRBACExpressMiddleware, createRBACMiddleware, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getQuickFixes, getSetupIssues, getUnprotectedPageFixes, isRBACInitialized, isValidPermission, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, withAccessLevelGuard, withPermissionGuard, withRoleGuard } from '../chunk-OHIK3MIO.js';
2
+ export { AccessDenied } from '../chunk-4T7OBVTU.js';
3
+ export { SECURE_CLIENT_SYMBOL, SecureSupabaseClient, createSecureClient, fromSupabaseClient, isSecureClient, useAccessLevel, useCan, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, warnIfInsecureClient } from '../chunk-7TYHROIV.js';
4
+ import '../chunk-3O3WHILE.js';
5
+ import '../chunk-C7NSAPTL.js';
6
+ import '../chunk-FTCRZOG2.js';
7
+ export { CACHE_PATTERNS, RBACCache, RBACEngine, clearInFlightRequests, createRBACConfig, createRBACEngine, disablePerformanceMonitoring, enablePerformanceMonitoring, getAccessLevel, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getRBACConfig, getRBACLogger, getRoleContext, hasAllPermissions, hasAnyPermission, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setupRBAC } from '../chunk-ZFYPMX46.js';
8
+ export { RBACAuditManager, createAuditManager, emitAuditEvent, getGlobalAuditManager, setGlobalAuditManager } from '../chunk-AHU7G2R5.js';
9
+ import '../chunk-4SXLQIZO.js';
10
+ import '../chunk-A55DK444.js';
11
+ import '../chunk-SD6WQY43.js';
12
+ import '../chunk-HF6O3O37.js';
13
+ import '../chunk-TTRFSOKR.js';
14
+ import '../chunk-3RG5ZIWI.js';
@@ -1,12 +1,2 @@
1
- import {
2
- getAllStylePaths,
3
- getStylePath,
4
- styleConfig
5
- } from "../chunk-5DRSZLL2.js";
6
- import "../chunk-DGUM43GV.js";
7
- export {
8
- getAllStylePaths,
9
- getStylePath,
10
- styleConfig
11
- };
12
- //# sourceMappingURL=index.js.map
1
+ export { getAllStylePaths, getStylePath, styleConfig } from '../chunk-UH3NTO3F.js';
2
+ import '../chunk-3RG5ZIWI.js';
@@ -1,19 +1,3 @@
1
- import {
2
- applyPalette,
3
- clearPalette,
4
- generateSSRThemeCSS,
5
- getCurrentThemeData,
6
- isDynamicThemingActive,
7
- parseAndNormalizeEventColours
8
- } from "../chunk-L4OXEN46.js";
9
- import "../chunk-PWLANIRT.js";
10
- import "../chunk-DGUM43GV.js";
11
- export {
12
- applyPalette,
13
- clearPalette,
14
- generateSSRThemeCSS,
15
- getCurrentThemeData,
16
- isDynamicThemingActive,
17
- parseAndNormalizeEventColours
18
- };
19
- //# sourceMappingURL=runtime.js.map
1
+ export { applyPalette, clearPalette, generateSSRThemeCSS, getCurrentThemeData, isDynamicThemingActive, parseAndNormalizeEventColours } from '../chunk-BVP2BCJF.js';
2
+ import '../chunk-TTRFSOKR.js';
3
+ import '../chunk-3RG5ZIWI.js';
@@ -1,6 +1,7 @@
1
1
  import { SupabaseClient } from '@supabase/supabase-js';
2
2
  import { z } from 'zod';
3
3
  import { ClassValue } from 'clsx';
4
+ import { D as Database } from './database.generated-CcnC_DRc.js';
4
5
 
5
6
  /**
6
7
  * Hook for manual session tracking (event switches and session expiration).
@@ -61,6 +62,107 @@ declare function calculatePasswordStrength(password: string): {
61
62
  level: 'very-weak' | 'weak' | 'fair' | 'good' | 'strong';
62
63
  };
63
64
 
65
+ /**
66
+ * @file HTML Sanitization Utilities
67
+ * @package @jmruthers/pace-core
68
+ * @module Utils/Validation/HTMLSanitization
69
+ * @since 0.4.36
70
+ *
71
+ * Utilities for safely rendering HTML content.
72
+ * Provides sanitization and validation for basic HTML elements.
73
+ */
74
+ /**
75
+ * Basic HTML sanitization function using regex-based approach
76
+ * Removes potentially dangerous elements and attributes while preserving basic formatting
77
+ * This approach is more reliable in SSR environments and doesn't require DOM manipulation
78
+ *
79
+ * @param html - The HTML string to sanitize
80
+ * @returns Sanitized HTML string safe for rendering
81
+ *
82
+ * @example
83
+ * ```tsx
84
+ * const safeHtml = sanitizeHtml('<p>Hello <strong>world</strong>!</p>');
85
+ * // Returns: '<p>Hello <strong>world</strong>!</p>'
86
+ *
87
+ * const dangerousHtml = sanitizeHtml('<script>alert("xss")</script><p>Safe content</p>');
88
+ * // Returns: '<p>Safe content</p>'
89
+ * ```
90
+ */
91
+ declare function sanitizeHtml(html: string): string;
92
+ /**
93
+ * Validates if HTML content is safe for rendering
94
+ *
95
+ * @param html - The HTML string to validate
96
+ * @returns Object with validation result and any warnings
97
+ *
98
+ * @example
99
+ * ```tsx
100
+ * const validation = validateHtml('<p>Safe content</p>');
101
+ * console.log(validation.isValid); // true
102
+ * console.log(validation.warnings); // []
103
+ * ```
104
+ */
105
+ declare function validateHtml(html: string): {
106
+ isValid: boolean;
107
+ warnings: string[];
108
+ };
109
+ /**
110
+ * Safely renders HTML content with sanitization
111
+ *
112
+ * @param html - The HTML string to render
113
+ * @param options - Rendering options
114
+ * @returns Object with sanitized HTML and validation info
115
+ *
116
+ * @example
117
+ * ```tsx
118
+ * const result = renderSafeHtml('<p>Hello <strong>world</strong>!</p>');
119
+ * console.log(result.html); // Sanitized HTML
120
+ * console.log(result.isValid); // true
121
+ * ```
122
+ */
123
+ declare function renderSafeHtml(html: string, options?: {
124
+ strict?: boolean;
125
+ logWarnings?: boolean;
126
+ }): {
127
+ html: string;
128
+ isValid: boolean;
129
+ warnings: string[];
130
+ };
131
+
132
+ /**
133
+ * @file Input Sanitization Layer
134
+ * @package @jmruthers/pace-core
135
+ * @module Utils/Validation/Sanitization
136
+ * @since 0.1.0
137
+ *
138
+ * Comprehensive input sanitization utilities to prevent XSS, injection attacks,
139
+ * and other security vulnerabilities.
140
+ */
141
+
142
+ /**
143
+ * Sanitization options for different contexts
144
+ */
145
+ interface SanitizationOptions {
146
+ allowHtml?: boolean;
147
+ allowedTags?: string[];
148
+ maxLength?: number;
149
+ trim?: boolean;
150
+ removeScripts?: boolean;
151
+ removeEvents?: boolean;
152
+ }
153
+ /**
154
+ * Sanitizes user input by removing potentially dangerous characters and patterns
155
+ */
156
+ declare function sanitizeUserInput(input: string, options?: SanitizationOptions): string;
157
+ /**
158
+ * Validates and sanitizes form data using Zod schemas
159
+ */
160
+ declare function sanitizeFormData<T>(data: unknown, schema: z.ZodSchema<T>, sanitizationRules?: Record<string, SanitizationOptions>): {
161
+ success: boolean;
162
+ data?: T;
163
+ error?: string;
164
+ };
165
+
64
166
  /**
65
167
  * @file Secure Data Access Utility
66
168
  * @package @jmruthers/pace-core
@@ -136,6 +238,78 @@ declare function getCurrentAppName(): string;
136
238
  */
137
239
  declare function getCurrentAppId(): string;
138
240
 
241
+ /**
242
+ * @file Base Supabase Client Creation Utility
243
+ * @package @jmruthers/pace-core
244
+ * @module Utils/Supabase
245
+ * @since 0.6.6
246
+ *
247
+ * Restricted wrapper for creating the base Supabase client for UnifiedAuthProvider.
248
+ * This is the ONLY acceptable way to create a Supabase client in consuming apps.
249
+ *
250
+ * @example
251
+ * ```tsx
252
+ * // ✅ CORRECT: In main.tsx, App.tsx, or lib/supabase.ts
253
+ * import { createBaseClient } from '@jmruthers/pace-core';
254
+ *
255
+ * const supabase = createBaseClient(
256
+ * import.meta.env.VITE_SUPABASE_URL,
257
+ * import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
258
+ * );
259
+ *
260
+ * // Pass to UnifiedAuthProvider
261
+ * <UnifiedAuthProvider supabaseClient={supabase} ... />
262
+ * ```
263
+ */
264
+
265
+ /**
266
+ * Create a base Supabase client for UnifiedAuthProvider
267
+ *
268
+ * **CRITICAL**: This function can ONLY be called from:
269
+ * - `src/main.tsx` (or `main.jsx`)
270
+ * - `src/App.tsx` (or `App.jsx`)
271
+ * - `src/lib/supabase.ts` (or `supabase.js`)
272
+ * - `src/supabase.ts` (or `supabase.js`)
273
+ *
274
+ * **DO NOT** use this client directly for queries. Always use `useSecureSupabase()` hook instead.
275
+ *
276
+ * The client is configured with explicit auth options to ensure consistent session persistence:
277
+ * - `persistSession: true` - Sessions are saved to localStorage and restored on page load/refresh
278
+ * - `autoRefreshToken: true` - Tokens are automatically refreshed before expiry
279
+ * - `detectSessionInUrl: true` - Detects and handles OAuth callback URLs
280
+ * - `flowType: 'pkce'` - Uses PKCE flow for enhanced security
281
+ *
282
+ * This configuration ensures that users remain logged in after hard refresh (Cmd+Shift+R)
283
+ * and other browser navigation scenarios across all consuming apps.
284
+ *
285
+ * @param supabaseUrl - Supabase project URL
286
+ * @param supabaseKey - Supabase publishable key or anon key (accepts both legacy anon keys and modern publishable keys)
287
+ * @returns Supabase client instance with auth configuration
288
+ *
289
+ * @throws {Error} If called from an unauthorized file location (development only)
290
+ *
291
+ * @example
292
+ * ```tsx
293
+ * // main.tsx
294
+ * import { createBaseClient } from '@jmruthers/pace-core';
295
+ * import { UnifiedAuthProvider } from '@jmruthers/pace-core';
296
+ *
297
+ * const supabase = createBaseClient(
298
+ * import.meta.env.VITE_SUPABASE_URL,
299
+ * import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
300
+ * );
301
+ *
302
+ * function App() {
303
+ * return (
304
+ * <UnifiedAuthProvider supabaseClient={supabase} appName="MyApp">
305
+ * <YourApp />
306
+ * </UnifiedAuthProvider>
307
+ * );
308
+ * }
309
+ * ```
310
+ */
311
+ declare function createBaseClient(supabaseUrl: string, supabaseKey: string): SupabaseClient<Database>;
312
+
139
313
  /**
140
314
  * @file Production-Safe Logger Utility
141
315
  * @package @jmruthers/pace-core
@@ -520,4 +694,4 @@ declare function roundToNearestMinutes(date: Date, minutesStep?: number): Date;
520
694
  */
521
695
  declare function getTimeZoneDifference(fromTimeZone: string, toTimeZone: string): number;
522
696
 
523
- export { formatTimeInTimeZone as A, getUserTimeZone as B, toZonedTime as C, fromZonedTime as D, roundToNearestMinutes as E, getTimeZoneDifference as F, formatDateTimeForDisplay as G, formatDateOnlyForDisplay as H, formatDateTimeForTable as I, formatDateTimeForMap as J, type DateTimeFormatOptions as K, Logger as L, dateSchema as M, calculatePasswordStrength as N, type SecureDataAccess as S, urlSchema as a, passwordSchema as b, createSecureDataAccess as c, cn as d, emailSchema as e, getCurrentAppName as f, getAppConfig as g, getCurrentAppId as h, createLogger as i, LogLevel as j, type LoggerConfig as k, logger as l, formatDate as m, nameSchema as n, formatTime as o, phoneSchema as p, formatDateTime as q, formatCurrency as r, setAppConfig as s, formatNumber as t, useSessionTracking as u, formatPercent as v, formatCompactNumber as w, formatFileSize as x, formatInTimeZone as y, getTimezoneAbbreviation as z };
697
+ export { formatCompactNumber as A, formatFileSize as B, formatInTimeZone as C, getTimezoneAbbreviation as D, formatTimeInTimeZone as E, getUserTimeZone as F, toZonedTime as G, fromZonedTime as H, roundToNearestMinutes as I, getTimeZoneDifference as J, type SecureDataAccess as K, Logger as L, formatDateTimeForDisplay as M, formatDateOnlyForDisplay as N, formatDateTimeForTable as O, formatDateTimeForMap as P, type DateTimeFormatOptions as Q, validateHtml as R, type SanitizationOptions as S, renderSafeHtml as T, dateSchema as U, calculatePasswordStrength as V, urlSchema as a, passwordSchema as b, sanitizeFormData as c, sanitizeHtml as d, emailSchema as e, createSecureDataAccess as f, cn as g, setAppConfig as h, getAppConfig as i, getCurrentAppName as j, getCurrentAppId as k, createBaseClient as l, logger as m, nameSchema as n, createLogger as o, phoneSchema as p, LogLevel as q, type LoggerConfig as r, sanitizeUserInput as s, formatDate as t, useSessionTracking as u, formatTime as v, formatDateTime as w, formatCurrency as x, formatNumber as y, formatPercent as z };
@@ -176,6 +176,10 @@ declare module '@tanstack/react-table' {
176
176
  /** Column type for styling purposes */
177
177
  type?: 'text' | 'number' | 'date' | 'boolean' | 'custom';
178
178
  }
179
+ interface ColumnDefBase<TData, TValue> {
180
+ /** Alternative accessor key used while editing */
181
+ editAccessorKey?: string;
182
+ }
179
183
  }
180
184
  /**
181
185
  * Base data record type - all DataTable data must extend this
@@ -0,0 +1,55 @@
1
+ import * as React from 'react';
2
+ import { P as Permission, A as AccessLevel } from './types-BeoeWV5I.js';
3
+
4
+ /**
5
+ * Navigation mode type
6
+ */
7
+ type NavigationMode = "dropdown" | "hierarchical";
8
+ /**
9
+ * Navigation item metadata
10
+ */
11
+ interface NavigationItemMeta {
12
+ hidden?: boolean;
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Navigation item interface
17
+ */
18
+ interface NavigationItem {
19
+ id: string;
20
+ label: string;
21
+ href?: string;
22
+ icon?: string;
23
+ children?: NavigationItem[];
24
+ permissions?: (Permission | string)[];
25
+ roles?: string[];
26
+ accessLevel?: AccessLevel | string;
27
+ meta?: NavigationItemMeta;
28
+ pageId?: string;
29
+ }
30
+ /**
31
+ * Navigation menu component props
32
+ */
33
+ interface NavigationMenuProps extends React.HTMLAttributes<HTMLDivElement> {
34
+ items: NavigationItem[];
35
+ mode?: NavigationMode;
36
+ currentPath?: string;
37
+ onNavigate?: (item: NavigationItem) => void;
38
+ className?: string;
39
+ disabled?: boolean;
40
+ buttonText?: string;
41
+ showIcons?: boolean;
42
+ navigationLabel?: string;
43
+ strictMode?: boolean;
44
+ auditLog?: boolean;
45
+ onNavigationAccessDenied?: (item: NavigationItem) => void;
46
+ onStrictModeViolation?: (item: NavigationItem, reason: string) => void;
47
+ /**
48
+ * If true, indicates that items have already been filtered by the parent component (e.g., PaceAppLayout).
49
+ * When true, NavigationMenu will skip expensive permission checks and trust the provided items.
50
+ * This significantly improves performance when items are pre-filtered.
51
+ */
52
+ itemsPreFiltered?: boolean;
53
+ }
54
+
55
+ export type { NavigationMenuProps as N, NavigationItem as a, NavigationMode as b };
package/dist/types.d.ts CHANGED
@@ -6,7 +6,7 @@ export { E as Event, c as EventContextType, b as EventTheme, k as ORGANISATION_R
6
6
  export { g as BucketInfo, B as BulkUploadResult, F as FileCategory, b as FileMetadata, a as FileReference, d as FileReferenceService, f as FileReferenceWithUrl, c as FileUploadOptions, e as FileUploadResult, h as FileUrlInfo, S as StorageUploadOptions, U as UploadProgress } from './file-reference-BavO2eQj.js';
7
7
  export { C as ChangePasswordFormValues, o as ContactFormData, F as FormData, k as LoginFormData, L as LoginFormValues, P as ProfileFormData, m as RegistrationFormData, R as RegistrationFormValues, S as SecureLoginFormValues, j as SecureRegistrationFormValues, U as UserProfileFormValues, V as ValidationError, a as ValidationResult, g as changePasswordSchema, t as combineSchemas, i as contactFormSchema, d as dateSchema, e as emailSchema, l as loginSchema, n as nameSchema, f as passwordResetSchema, b as passwordSchema, p as phoneSchema, q as pickSchema, r as registrationSchema, c as secureLoginSchema, s as securePasswordSchema, u as urlSchema, h as userProfileSchema } from './validation-643vUDZW.js';
8
8
  import { SupabaseClient } from '@supabase/supabase-js';
9
- export { D as Database, J as Json } from './database.generated-CzIvgcPu.js';
9
+ export { D as Database, J as Json } from './database.generated-CcnC_DRc.js';
10
10
  export { A as AccessLevelContext, s as AuditEventType, P as PermissionSource, d as RBACAccessValidateParams, e as RBACAccessValidateResult, q as RBACAuditLogParams, r as RBACAuditLogResult, t as RBACContext, w as RBACErrorCode, v as RBACFunctionResponse, f as RBACPageAccessCheckParams, R as RBACPermissionCheckParams, a as RBACPermissionCheckResult, b as RBACPermissionsGetParams, c as RBACPermissionsGetResult, u as RBACResult, g as RBACRoleGrantParams, h as RBACRoleGrantResult, i as RBACRoleRevokeParams, j as RBACRoleRevokeResult, m as RBACRoleValidateParams, n as RBACRoleValidateResult, k as RBACRolesListParams, l as RBACRolesListResult, o as RBACSessionTrackParams, p as RBACSessionTrackResult, S as SessionType } from './functions-DHebl8-F.js';
11
11
  import 'zod';
12
12
  import './types-BeoeWV5I.js';
package/dist/types.js CHANGED
@@ -1,50 +1,8 @@
1
- import {
2
- FileCategory
3
- } from "./chunk-ZSAAAMVR.js";
4
- import {
5
- AuthErrorCode,
6
- PermissionErrorCode,
7
- assertAppId,
8
- assertEventId,
9
- assertOrganisationId,
10
- assertPageId,
11
- assertUserId,
12
- createAppId,
13
- createEventId,
14
- createOrganisationId,
15
- createPageId,
16
- createPermissionString,
17
- createRequestId,
18
- createSessionToken,
19
- createUserId,
20
- isAppId,
21
- isEventId,
22
- isOrganisationId,
23
- isPageId,
24
- isPermissionString,
25
- isRequestId,
26
- isSessionToken,
27
- isUserId
28
- } from "./chunk-QXHPKYJV.js";
29
- import {
30
- changePasswordSchema,
31
- combineSchemas,
32
- contactFormSchema,
33
- dateSchema,
34
- emailSchema,
35
- loginSchema,
36
- nameSchema,
37
- passwordResetSchema,
38
- passwordSchema,
39
- phoneSchema,
40
- pickSchema,
41
- registrationSchema,
42
- secureLoginSchema,
43
- securePasswordSchema,
44
- urlSchema,
45
- userProfileSchema
46
- } from "./chunk-LMC26NLJ.js";
47
- import "./chunk-DGUM43GV.js";
1
+ export { FileCategory } from './chunk-6QYDGKQY.js';
2
+ import { AuthErrorCode } from './chunk-4SXLQIZO.js';
3
+ export { AuthErrorCode, PermissionErrorCode, assertAppId, assertEventId, assertOrganisationId, assertPageId, assertUserId, createAppId, createEventId, createOrganisationId, createPageId, createPermissionString, createRequestId, createSessionToken, createUserId, isAppId, isEventId, isOrganisationId, isPageId, isPermissionString, isRequestId, isSessionToken, isUserId } from './chunk-4SXLQIZO.js';
4
+ export { changePasswordSchema, combineSchemas, contactFormSchema, dateSchema, emailSchema, loginSchema, nameSchema, passwordResetSchema, passwordSchema, phoneSchema, pickSchema, registrationSchema, secureLoginSchema, securePasswordSchema, urlSchema, userProfileSchema } from './chunk-MBADTM7L.js';
5
+ import './chunk-3RG5ZIWI.js';
48
6
 
49
7
  // src/types/organisation.ts
50
8
  var ORGANISATION_ROLE_PERMISSIONS = {
@@ -66,50 +24,5 @@ function isSession(obj) {
66
24
  const candidate = obj;
67
25
  return candidate != null && typeof candidate === "object" && typeof candidate.access_token === "string" && candidate.user != null && typeof candidate.user === "object";
68
26
  }
69
- export {
70
- AuthErrorCode,
71
- FileCategory,
72
- ORGANISATION_ROLE_PERMISSIONS,
73
- PermissionErrorCode,
74
- assertAppId,
75
- assertEventId,
76
- assertOrganisationId,
77
- assertPageId,
78
- assertUserId,
79
- changePasswordSchema,
80
- combineSchemas,
81
- contactFormSchema,
82
- createAppId,
83
- createEventId,
84
- createOrganisationId,
85
- createPageId,
86
- createPermissionString,
87
- createRequestId,
88
- createSessionToken,
89
- createUserId,
90
- dateSchema,
91
- emailSchema,
92
- isAppId,
93
- isAuthErrorCode,
94
- isEventId,
95
- isOrganisationId,
96
- isPageId,
97
- isPermissionString,
98
- isRequestId,
99
- isSession,
100
- isSessionToken,
101
- isUser,
102
- isUserId,
103
- loginSchema,
104
- nameSchema,
105
- passwordResetSchema,
106
- passwordSchema,
107
- phoneSchema,
108
- pickSchema,
109
- registrationSchema,
110
- secureLoginSchema,
111
- securePasswordSchema,
112
- urlSchema,
113
- userProfileSchema
114
- };
115
- //# sourceMappingURL=types.js.map
27
+
28
+ export { ORGANISATION_ROLE_PERMISSIONS, isAuthErrorCode, isSession, isUser };