@jmruthers/pace-core 0.6.6 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +12 -13
  2. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  3. package/audit-tool/audits/02-project-structure.cjs +255 -0
  4. package/audit-tool/audits/03-architecture.cjs +196 -0
  5. package/audit-tool/audits/04-code-quality.cjs +149 -0
  6. package/audit-tool/audits/05-styling.cjs +224 -0
  7. package/audit-tool/audits/06-security-rbac.cjs +544 -0
  8. package/audit-tool/audits/07-api-tech-stack.cjs +301 -0
  9. package/audit-tool/audits/08-testing-documentation.cjs +202 -0
  10. package/audit-tool/audits/09-operations.cjs +208 -0
  11. package/audit-tool/index.cjs +291 -0
  12. package/audit-tool/utils/code-utils.cjs +218 -0
  13. package/audit-tool/utils/file-utils.cjs +230 -0
  14. package/audit-tool/utils/report-utils.cjs +241 -0
  15. package/cursor-rules/00-standards-overview.mdc +156 -0
  16. package/cursor-rules/{00-pace-core-compliance.mdc → 01-pace-core-compliance.mdc} +187 -34
  17. package/cursor-rules/02-project-structure.mdc +37 -5
  18. package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +125 -11
  19. package/cursor-rules/04-code-quality.mdc +419 -0
  20. package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +55 -10
  21. package/cursor-rules/{09-rbac-compliance.mdc → 06-security-rbac.mdc} +62 -6
  22. package/cursor-rules/07-api-tech-stack.mdc +377 -0
  23. package/cursor-rules/08-testing-documentation.mdc +324 -0
  24. package/cursor-rules/09-operations.mdc +365 -0
  25. package/dist/DataTable-7PMH7XN7.js +15 -0
  26. package/dist/{DataTable-2N_tqbfq.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
  27. package/dist/{PublicPageProvider-BBH6Vqg7.d.ts → PublicPageProvider-DlsCaR5v.d.ts} +26 -16
  28. package/dist/{chunk-FENMYN2U.js → chunk-5X4QLXRG.js} +1 -3
  29. package/dist/{chunk-4T7OBVTU.js → chunk-6F3IILHI.js} +1 -1
  30. package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
  31. package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
  32. package/dist/{chunk-7TYHROIV.js → chunk-BM4CQ5P3.js} +50 -8
  33. package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
  34. package/dist/{chunk-OHIK3MIO.js → chunk-GHYHJTYV.js} +2 -2
  35. package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
  36. package/dist/{chunk-LAZMKTTF.js → chunk-JGWDVX64.js} +281 -347
  37. package/dist/{chunk-MAGBIDNS.js → chunk-L4XMVJKY.js} +2 -2
  38. package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
  39. package/dist/{chunk-ZS5VO5JB.js → chunk-Q7Q7V5NV.js} +406 -451
  40. package/dist/{chunk-3O3WHILE.js → chunk-VBCS3DUA.js} +236 -60
  41. package/dist/{chunk-BVP2BCJF.js → chunk-ZKAWKYT4.js} +8 -8
  42. package/dist/components.d.ts +5 -4
  43. package/dist/components.js +27 -32
  44. package/dist/eslint-rules/index.cjs +22 -9
  45. package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
  46. package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
  47. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  48. package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +26 -10
  49. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
  50. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  51. package/dist/hooks.d.ts +5 -5
  52. package/dist/hooks.js +6 -6
  53. package/dist/index.d.ts +6 -6
  54. package/dist/index.js +18 -17
  55. package/dist/rbac/index.js +6 -6
  56. package/dist/theming/runtime.d.ts +14 -1
  57. package/dist/theming/runtime.js +1 -1
  58. package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
  59. package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
  60. package/dist/utils.d.ts +2 -2
  61. package/dist/utils.js +8 -8
  62. package/docs/README.md +1 -1
  63. package/docs/api/modules.md +47 -31
  64. package/docs/api-reference/components.md +18 -20
  65. package/docs/api-reference/hooks.md +80 -80
  66. package/docs/api-reference/types.md +1 -1
  67. package/docs/api-reference/utilities.md +1 -1
  68. package/docs/architecture/README.md +1 -1
  69. package/docs/core-concepts/events.md +3 -3
  70. package/docs/core-concepts/organisations.md +6 -6
  71. package/docs/core-concepts/permissions.md +6 -6
  72. package/docs/documentation-index.md +12 -18
  73. package/docs/getting-started/documentation-index.md +1 -1
  74. package/docs/getting-started/examples/README.md +4 -4
  75. package/docs/getting-started/examples/full-featured-app.md +1 -1
  76. package/docs/getting-started/faq.md +2 -2
  77. package/docs/getting-started/quick-reference.md +4 -4
  78. package/docs/implementation-guides/authentication.md +15 -15
  79. package/docs/implementation-guides/component-styling.md +1 -1
  80. package/docs/implementation-guides/data-tables.md +126 -33
  81. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  82. package/docs/implementation-guides/dynamic-colors.md +3 -3
  83. package/docs/implementation-guides/file-upload-storage.md +2 -2
  84. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  85. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  86. package/docs/implementation-guides/large-datasets.md +3 -2
  87. package/docs/implementation-guides/organisation-security.md +2 -2
  88. package/docs/implementation-guides/performance.md +2 -2
  89. package/docs/implementation-guides/permission-enforcement.md +1 -1
  90. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  91. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  92. package/docs/rbac/README.md +5 -5
  93. package/docs/rbac/advanced-patterns.md +6 -6
  94. package/docs/rbac/api-reference.md +20 -20
  95. package/docs/rbac/event-based-apps.md +3 -3
  96. package/docs/rbac/examples.md +41 -41
  97. package/docs/rbac/getting-started.md +37 -37
  98. package/docs/rbac/performance.md +1 -1
  99. package/docs/rbac/quick-start.md +52 -52
  100. package/docs/rbac/secure-client-protection.md +1 -1
  101. package/docs/rbac/troubleshooting.md +1 -1
  102. package/docs/security/README.md +5 -5
  103. package/docs/standards/0-standards-overview.md +220 -0
  104. package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +204 -185
  105. package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
  106. package/docs/standards/3-architecture-standards.md +606 -0
  107. package/docs/standards/4-code-quality-standards.md +728 -0
  108. package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
  109. package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
  110. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  111. package/docs/standards/8-testing-documentation-standards.md +401 -0
  112. package/docs/standards/9-operations-standards.md +1102 -0
  113. package/docs/standards/README.md +203 -104
  114. package/docs/troubleshooting/README.md +4 -4
  115. package/docs/troubleshooting/common-issues.md +2 -2
  116. package/docs/troubleshooting/debugging.md +9 -9
  117. package/docs/troubleshooting/migration.md +4 -4
  118. package/eslint-config-pace-core.cjs +21 -10
  119. package/package.json +6 -5
  120. package/scripts/install-cursor-rules.cjs +11 -243
  121. package/scripts/install-eslint-config.cjs +284 -0
  122. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
  123. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  124. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +10 -10
  125. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  126. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  127. package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
  128. package/src/__tests__/templates/component.test.template.tsx +18 -15
  129. package/src/components/Calendar/Calendar.tsx +201 -47
  130. package/src/components/ContextSelector/ContextSelector.tsx +137 -153
  131. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  132. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
  133. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
  134. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  135. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  136. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  137. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  138. package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
  139. package/src/components/DataTable/components/EditableRow.tsx +5 -7
  140. package/src/components/DataTable/components/EmptyState.tsx +10 -9
  141. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  142. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  143. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  144. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  145. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  146. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  147. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  148. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  149. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  150. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
  151. package/src/components/DataTable/components/index.ts +2 -1
  152. package/src/components/DataTable/types.ts +0 -18
  153. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  154. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
  155. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  156. package/src/components/DateTimeField/DateTimeField.tsx +7 -8
  157. package/src/components/Dialog/Dialog.test.tsx +1 -0
  158. package/src/components/Dialog/Dialog.tsx +25 -8
  159. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  160. package/src/components/FileUpload/FileUpload.test.tsx +52 -14
  161. package/src/components/FileUpload/FileUpload.tsx +112 -130
  162. package/src/components/Progress/Progress.tsx +2 -4
  163. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  164. package/src/components/Select/Select.tsx +86 -77
  165. package/src/components/Select/types.ts +3 -0
  166. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  167. package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
  168. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
  169. package/src/hooks/public/usePublicEvent.ts +5 -5
  170. package/src/hooks/public/usePublicEventLogo.ts +5 -5
  171. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  172. package/src/hooks/public/usePublicRouteParams.ts +5 -5
  173. package/src/hooks/useAppConfig.ts +2 -2
  174. package/src/hooks/useEventTheme.test.ts +7 -7
  175. package/src/hooks/useEventTheme.ts +1 -4
  176. package/src/hooks/useFileDisplay.ts +2 -2
  177. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  178. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  179. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  180. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  181. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  182. package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
  183. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  184. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  185. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
  186. package/src/styles/core.css +7 -0
  187. package/src/theming/__tests__/parseEventColours.test.ts +9 -3
  188. package/src/theming/parseEventColours.ts +22 -10
  189. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  190. package/src/utils/storage/README.md +1 -1
  191. package/cursor-rules/01-standards-compliance.mdc +0 -285
  192. package/cursor-rules/04-testing-standards.mdc +0 -270
  193. package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
  194. package/cursor-rules/06-code-quality.mdc +0 -311
  195. package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
  196. package/cursor-rules/10-error-handling-patterns.mdc +0 -179
  197. package/cursor-rules/11-performance-optimization.mdc +0 -169
  198. package/cursor-rules/12-ci-cd-integration.mdc +0 -150
  199. package/dist/DataTable-LRJL4IRV.js +0 -15
  200. package/dist/eslint-rules/rules/compliance.cjs +0 -348
  201. package/dist/eslint-rules/rules/components.cjs +0 -113
  202. package/dist/eslint-rules/rules/imports.cjs +0 -102
  203. package/docs/best-practices/README.md +0 -472
  204. package/docs/best-practices/accessibility.md +0 -604
  205. package/docs/best-practices/common-patterns.md +0 -516
  206. package/docs/best-practices/deployment.md +0 -1103
  207. package/docs/best-practices/performance.md +0 -1328
  208. package/docs/best-practices/security.md +0 -940
  209. package/docs/best-practices/testing.md +0 -1034
  210. package/docs/rbac/compliance/compliance-guide.md +0 -544
  211. package/docs/standards/01-standards-compliance.md +0 -188
  212. package/docs/standards/03-solid-principles.md +0 -39
  213. package/docs/standards/04-testing-standards.md +0 -36
  214. package/docs/standards/05-bug-reports-and-features.md +0 -27
  215. package/docs/standards/06-code-quality.md +0 -34
  216. package/docs/standards/07-tech-stack-compliance.md +0 -30
  217. package/docs/standards/10-error-handling-patterns.md +0 -401
  218. package/docs/standards/11-performance-optimization.md +0 -348
  219. package/docs/standards/12-ci-cd-integration.md +0 -370
  220. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
  221. package/scripts/audit/audit-compliance.cjs +0 -1295
  222. package/scripts/audit/audit-components.cjs +0 -260
  223. package/scripts/audit/audit-rbac.cjs +0 -954
  224. package/scripts/audit/audit-standards.cjs +0 -1268
  225. package/scripts/audit/index.cjs +0 -1927
  226. package/src/components/DataTable/components/DataTableBody.tsx +0 -478
  227. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  228. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  229. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  230. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  231. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  232. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  233. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  234. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  235. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  236. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  237. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  238. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  239. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  240. package/src/components/DataTable/utils/debugTools.ts +0 -514
  241. package/src/eslint-rules/index.cjs +0 -22
  242. package/src/eslint-rules/rules/components.cjs +0 -113
  243. package/src/eslint-rules/rules/imports.cjs +0 -102
  244. package/src/eslint-rules/rules/rbac.cjs +0 -790
  245. package/src/eslint-rules/utils/helpers.cjs +0 -42
  246. package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
@@ -1,7 +1,15 @@
1
1
  /**
2
- * RBAC-specific rules
2
+ * Security & RBAC Rules (Standard 6)
3
3
  * @package @jmruthers/pace-core
4
- * @module ESLintRules/rules/rbac
4
+ * @module ESLintRules/rules/security-rbac
5
+ *
6
+ * Enforces security and RBAC patterns from Standard 6:
7
+ * - Use secure Supabase client (useSecureSupabase)
8
+ * - Use RESOURCE_NAMES constants
9
+ * - No wrapper components/functions around RBAC hooks
10
+ * - Proper permission loading state handling
11
+ *
12
+ * Reference: packages/core/docs/standards/6-security-rbac-standards.md
5
13
  */
6
14
 
7
15
  const { isPaceCoreSourceFile } = require('../utils/helpers.cjs');
@@ -17,7 +25,8 @@ module.exports = {
17
25
  docs: {
18
26
  description: 'Disallow direct createClient calls from @supabase/supabase-js. Use useSecureSupabase() from pace-core instead to ensure organisation context and RLS policies are enforced.',
19
27
  category: 'Security',
20
- recommended: true
28
+ recommended: true,
29
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
21
30
  },
22
31
  messages: {
23
32
  directClientCreation: "Direct Supabase client creation detected. You MUST use useSecureSupabase() from '@jmruthers/pace-core/rbac' instead to ensure organisation context and RLS policies are enforced. This prevents cross-organisation data access.",
@@ -116,7 +125,8 @@ module.exports = {
116
125
  docs: {
117
126
  description: 'Require isLoading extraction from useResourcePermissions and check it before permission calls in mutations.',
118
127
  category: 'Security',
119
- recommended: true
128
+ recommended: true,
129
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
120
130
  },
121
131
  messages: {
122
132
  missingIsLoading: "useResourcePermissions is used but 'isLoading' is not extracted. Permission checks may fail if scope resolution is still in progress.",
@@ -237,7 +247,8 @@ module.exports = {
237
247
  docs: {
238
248
  description: 'Disallow direct calls to RBAC RPC functions. Use pace-core RBAC hooks instead.',
239
249
  category: 'Security',
240
- recommended: true
250
+ recommended: true,
251
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
241
252
  },
242
253
  messages: {
243
254
  directRbacRpc: "Direct RPC call to '{{rpcName}}' detected. Use pace-core RBAC hooks from '@jmruthers/pace-core/rbac' instead."
@@ -296,7 +307,8 @@ module.exports = {
296
307
  docs: {
297
308
  description: 'Disallow direct queries to RBAC tables. Use pace-core RBAC API functions or useSecureSupabase instead.',
298
309
  category: 'Security',
299
- recommended: true
310
+ recommended: true,
311
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
300
312
  },
301
313
  messages: {
302
314
  directRbacTable: "Direct query to RBAC table '{{tableName}}' detected. Use pace-core RBAC API functions from '@jmruthers/pace-core/rbac' or useSecureSupabase hook instead."
@@ -402,7 +414,8 @@ module.exports = {
402
414
  docs: {
403
415
  description: 'Disallow hardcoded role checks. Use useAccessLevel hook or getRoleContext API from pace-core instead.',
404
416
  category: 'Security',
405
- recommended: true
417
+ recommended: true,
418
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
406
419
  },
407
420
  messages: {
408
421
  hardcodedRoleCheck: "Hardcoded role check detected. Use useAccessLevel hook or getRoleContext API from '@jmruthers/pace-core/rbac' instead."
@@ -471,7 +484,8 @@ module.exports = {
471
484
  docs: {
472
485
  description: 'Require RESOURCE_NAMES constants instead of string literals in useResourcePermissions calls.',
473
486
  category: 'Best Practices',
474
- recommended: true
487
+ recommended: true,
488
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
475
489
  },
476
490
  messages: {
477
491
  resourcePermissionStringLiteral: "Resource permission string literal detected. Use RESOURCE_NAMES constant object instead (e.g., RESOURCE_NAMES.ORGANISATIONS, RESOURCE_NAMES.EVENTS)."
@@ -536,7 +550,8 @@ module.exports = {
536
550
  docs: {
537
551
  description: 'Disallow wrapper components around PagePermissionGuard. Use PagePermissionGuard directly.',
538
552
  category: 'Security',
539
- recommended: true
553
+ recommended: true,
554
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
540
555
  },
541
556
  messages: {
542
557
  wrapperComponent: "Wrapper component '{{componentName}}' detected around PagePermissionGuard. Must use PagePermissionGuard directly, not through wrappers."
@@ -643,7 +658,8 @@ module.exports = {
643
658
  docs: {
644
659
  description: 'Disallow wrapper functions around pace-core permission hooks. Use hooks directly in components.',
645
660
  category: 'Security',
646
- recommended: true
661
+ recommended: true,
662
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/6-security-rbac-standards.md'
647
663
  },
648
664
  messages: {
649
665
  wrapperFunction: "Permission wrapper function '{{functionName}}' detected. Use pace-core hooks (useCan, useResourcePermissions) directly in components instead of wrapping them."
@@ -0,0 +1,263 @@
1
+ /**
2
+ * API & Tech Stack Rules (Standard 7)
3
+ * @package @jmruthers/pace-core
4
+ * @module ESLintRules/rules/api-tech-stack
5
+ *
6
+ * Enforces API and tech stack patterns from Standard 7:
7
+ * - RPC naming conventions (data_*, app_*)
8
+ * - React 19+ patterns (no class components)
9
+ * - import.meta.env usage (Vite) instead of process.env
10
+ *
11
+ * Reference: packages/core/docs/standards/7-api-tech-stack-standards.md
12
+ */
13
+
14
+ const { isPaceCoreSourceFile } = require('../utils/helpers.cjs');
15
+
16
+ module.exports = {
17
+ rules: {
18
+ /**
19
+ * Enforce RPC naming pattern: data_* for reads, app_* for writes
20
+ */
21
+ 'rpc-naming-pattern': {
22
+ meta: {
23
+ type: 'problem',
24
+ docs: {
25
+ description: 'Enforce RPC naming pattern: data_* for read operations, app_* for write operations',
26
+ category: 'Best Practices',
27
+ recommended: true,
28
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/7-api-tech-stack-standards.md'
29
+ },
30
+ messages: {
31
+ invalidRpcNaming: "RPC '{{rpcName}}' does not follow naming pattern. Read operations must start with 'data_', write operations must start with 'app_' (e.g., data_events_list, app_event_create)",
32
+ invalidRpcVerb: "RPC '{{rpcName}}' uses invalid verb '{{verb}}'. Use only: list, get, create, update, delete, read"
33
+ },
34
+ hasSuggestions: true
35
+ },
36
+ create(context) {
37
+ const filename = context.getFilename();
38
+
39
+ // Exclude pace-core source files - these rules are for consuming apps
40
+ if (isPaceCoreSourceFile(filename)) {
41
+ return {};
42
+ }
43
+
44
+ const validVerbs = ['list', 'get', 'create', 'update', 'delete', 'read'];
45
+ const readVerbs = ['list', 'get', 'read'];
46
+ const writeVerbs = ['create', 'update', 'delete', 'bulk_create', 'bulk_update'];
47
+ const rpcPattern = /^(data_|app_)[a-z0-9_]+_(list|get|create|update|delete|read|bulk_create|bulk_update)$/;
48
+
49
+ return {
50
+ CallExpression(node) {
51
+ // Check for supabase.rpc('rpc_name', ...)
52
+ if (node.callee.type === 'MemberExpression' &&
53
+ node.callee.property &&
54
+ node.callee.property.name === 'rpc' &&
55
+ node.arguments.length > 0) {
56
+
57
+ const firstArg = node.arguments[0];
58
+ if (firstArg.type === 'Literal' && typeof firstArg.value === 'string') {
59
+ const rpcName = firstArg.value;
60
+
61
+ // Skip if it's a variable (can't validate at lint time)
62
+ if (firstArg.type !== 'Literal') {
63
+ return;
64
+ }
65
+
66
+ // Check if it matches the pattern
67
+ if (!rpcPattern.test(rpcName)) {
68
+ // Extract verb if possible
69
+ const parts = rpcName.split('_');
70
+ const verb = parts[parts.length - 1];
71
+
72
+ if (validVerbs.includes(verb) || verb.startsWith('bulk_')) {
73
+ // Has valid verb but wrong prefix
74
+ const isReadOperation = readVerbs.includes(verb);
75
+ const isWriteOperation = writeVerbs.includes(verb) || verb.startsWith('bulk_');
76
+
77
+ let suggestedPrefix = 'data_';
78
+ if (isWriteOperation) {
79
+ suggestedPrefix = 'app_';
80
+ }
81
+
82
+ context.report({
83
+ node: firstArg,
84
+ messageId: 'invalidRpcNaming',
85
+ data: { rpcName },
86
+ suggest: [{
87
+ desc: `Use '${suggestedPrefix}' prefix for ${isReadOperation ? 'read' : 'write'} operations`,
88
+ fix(fixer) {
89
+ return null; // Complex fix
90
+ }
91
+ }]
92
+ });
93
+ } else {
94
+ // Invalid verb
95
+ context.report({
96
+ node: firstArg,
97
+ messageId: 'invalidRpcVerb',
98
+ data: { rpcName, verb },
99
+ suggest: [{
100
+ desc: `Use valid verb: ${validVerbs.join(', ')}`,
101
+ fix(fixer) {
102
+ return null; // Complex fix
103
+ }
104
+ }]
105
+ });
106
+ }
107
+ } else {
108
+ // Check if prefix matches verb type
109
+ const hasDataPrefix = rpcName.startsWith('data_');
110
+ const hasAppPrefix = rpcName.startsWith('app_');
111
+ const parts = rpcName.split('_');
112
+ const verb = parts[parts.length - 1];
113
+
114
+ const isReadOperation = readVerbs.includes(verb);
115
+ const isWriteOperation = writeVerbs.includes(verb) || verb.startsWith('bulk_');
116
+
117
+ if (hasDataPrefix && isWriteOperation) {
118
+ context.report({
119
+ node: firstArg,
120
+ messageId: 'invalidRpcNaming',
121
+ data: { rpcName },
122
+ suggest: [{
123
+ desc: `Use 'app_' prefix for write operations (${verb})`,
124
+ fix(fixer) {
125
+ return null; // Complex fix
126
+ }
127
+ }]
128
+ });
129
+ } else if (hasAppPrefix && isReadOperation) {
130
+ context.report({
131
+ node: firstArg,
132
+ messageId: 'invalidRpcNaming',
133
+ data: { rpcName },
134
+ suggest: [{
135
+ desc: `Use 'data_' prefix for read operations (${verb})`,
136
+ fix(fixer) {
137
+ return null; // Complex fix
138
+ }
139
+ }]
140
+ });
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+ };
147
+ }
148
+ },
149
+
150
+ /**
151
+ * Enforce React 19+ patterns: no class components
152
+ */
153
+ 'no-class-components': {
154
+ meta: {
155
+ type: 'problem',
156
+ docs: {
157
+ description: 'Disallow React class components. Use functional components with hooks (React 19+).',
158
+ category: 'Best Practices',
159
+ recommended: true,
160
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/7-api-tech-stack-standards.md'
161
+ },
162
+ messages: {
163
+ classComponent: "Class components are not allowed. Use functional components with hooks instead (React 19+)."
164
+ },
165
+ hasSuggestions: true
166
+ },
167
+ create(context) {
168
+ const filename = context.getFilename();
169
+
170
+ // Exclude pace-core source files - these rules are for consuming apps
171
+ if (isPaceCoreSourceFile(filename)) {
172
+ return {};
173
+ }
174
+
175
+ return {
176
+ ClassDeclaration(node) {
177
+ // Check if class extends React.Component or Component
178
+ const hasReactExtends = node.superClass && (
179
+ (node.superClass.type === 'MemberExpression' &&
180
+ node.superClass.object?.name === 'React' &&
181
+ node.superClass.property?.name === 'Component') ||
182
+ (node.superClass.type === 'Identifier' &&
183
+ node.superClass.name === 'Component')
184
+ );
185
+
186
+ if (hasReactExtends) {
187
+ context.report({
188
+ node,
189
+ messageId: 'classComponent',
190
+ suggest: [{
191
+ desc: 'Convert to functional component with hooks',
192
+ fix(fixer) {
193
+ return null; // Complex conversion
194
+ }
195
+ }]
196
+ });
197
+ }
198
+ }
199
+ };
200
+ }
201
+ },
202
+
203
+ /**
204
+ * Enforce import.meta.env usage instead of process.env in client code
205
+ */
206
+ 'prefer-import-meta-env': {
207
+ meta: {
208
+ type: 'problem',
209
+ docs: {
210
+ description: 'Enforce import.meta.env (Vite) instead of process.env in client code',
211
+ category: 'Best Practices',
212
+ recommended: true,
213
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/7-api-tech-stack-standards.md'
214
+ },
215
+ messages: {
216
+ processEnvUsage: "Use 'import.meta.env' (Vite) instead of 'process.env' in client code. process.env is Node.js and won't work in browser."
217
+ },
218
+ hasSuggestions: true
219
+ },
220
+ create(context) {
221
+ const filename = context.getFilename();
222
+
223
+ // Exclude pace-core source files - these rules are for consuming apps
224
+ if (isPaceCoreSourceFile(filename)) {
225
+ return {};
226
+ }
227
+
228
+ // Only check client code (not server/Node.js files)
229
+ const isClientCode = filename.match(/\.(tsx|jsx|ts|js)$/) &&
230
+ !filename.includes('server') &&
231
+ !filename.includes('node') &&
232
+ !filename.includes('config') &&
233
+ !filename.match(/\.(config|server)\./);
234
+
235
+ if (!isClientCode) {
236
+ return {};
237
+ }
238
+
239
+ return {
240
+ MemberExpression(node) {
241
+ // Check for process.env usage
242
+ if (node.object?.type === 'Identifier' &&
243
+ node.object.name === 'process' &&
244
+ node.property?.type === 'Identifier' &&
245
+ node.property.name === 'env') {
246
+ context.report({
247
+ node,
248
+ messageId: 'processEnvUsage',
249
+ suggest: [{
250
+ desc: 'Replace with import.meta.env',
251
+ fix(fixer) {
252
+ // Replace process.env with import.meta.env
253
+ return fixer.replaceText(node, 'import.meta.env');
254
+ }
255
+ }]
256
+ });
257
+ }
258
+ }
259
+ };
260
+ }
261
+ }
262
+ }
263
+ };
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Testing Rules (Standard 8)
3
+ * @package @jmruthers/pace-core
4
+ * @module ESLintRules/rules/testing
5
+ *
6
+ * Enforces testing patterns from Standard 8:
7
+ * - Test file naming conventions (*.test.ts, *.test.tsx)
8
+ *
9
+ * Reference: packages/core/docs/standards/8-testing-documentation-standards.md
10
+ */
11
+
12
+ const path = require('path');
13
+ const fs = require('fs');
14
+ const { isPaceCoreSourceFile } = require('../utils/helpers.cjs');
15
+
16
+ module.exports = {
17
+ rules: {
18
+ /**
19
+ * Enforce test file naming: *.test.ts or *.test.tsx
20
+ */
21
+ 'test-file-naming': {
22
+ meta: {
23
+ type: 'suggestion',
24
+ docs: {
25
+ description: 'Enforce test file naming: *.test.ts or *.test.tsx (not *.spec.ts)',
26
+ category: 'Best Practices',
27
+ recommended: false,
28
+ url: 'https://github.com/jmruthers/pace-core/blob/main/packages/core/docs/standards/8-testing-documentation-standards.md'
29
+ },
30
+ messages: {
31
+ invalidTestFileName: "Test file '{{filename}}' should be named '{{expectedName}}.test.{{ext}}' instead of '{{currentName}}'"
32
+ },
33
+ hasSuggestions: true
34
+ },
35
+ create(context) {
36
+ const filename = context.getFilename();
37
+
38
+ // Exclude pace-core source files - these rules are for consuming apps
39
+ if (isPaceCoreSourceFile(filename)) {
40
+ return {};
41
+ }
42
+
43
+ // Only check test files
44
+ const isTestFile = filename.match(/\.(test|spec)\.(ts|tsx|js|jsx)$/);
45
+ if (!isTestFile) {
46
+ return {};
47
+ }
48
+
49
+ const basename = path.basename(filename);
50
+ const ext = path.extname(filename);
51
+ const nameWithoutExt = basename.replace(ext, '');
52
+
53
+ // Check if it uses .spec instead of .test
54
+ if (nameWithoutExt.endsWith('.spec')) {
55
+ const sourceName = nameWithoutExt.replace('.spec', '');
56
+ const expectedName = `${sourceName}.test${ext}`;
57
+
58
+ return {
59
+ Program(node) {
60
+ context.report({
61
+ node,
62
+ messageId: 'invalidTestFileName',
63
+ data: {
64
+ filename: basename,
65
+ expectedName,
66
+ currentName: basename
67
+ },
68
+ suggest: [{
69
+ desc: `Rename to ${expectedName}`,
70
+ fix(fixer) {
71
+ return null; // File rename requires filesystem operation
72
+ }
73
+ }]
74
+ });
75
+ }
76
+ };
77
+ }
78
+
79
+ // Check if test file is colocated with source file
80
+ // This is a suggestion, not an error
81
+ const sourceFile = filename.replace(/\.(test|spec)\.(ts|tsx|js|jsx)$/, '.$2');
82
+ const sourceExists = fs.existsSync(sourceFile);
83
+ const isInTestDir = filename.includes('/__tests__/') || filename.includes('/tests/');
84
+
85
+ if (!sourceExists && !isInTestDir) {
86
+ // Test file exists but source file doesn't - might be misnamed or in wrong location
87
+ // This is just informational, not an error
88
+ }
89
+
90
+ return {};
91
+ }
92
+ }
93
+ }
94
+ };
package/dist/hooks.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export { u as useToast } from './useToast-AyaT-x7p.js';
2
- import { S as StorageUploadOptions, a as StorageUploadResult, b as StorageListOptions, c as StorageListResult, d as StorageFileInfo } from './usePublicRouteParams-COZ28Mvq.js';
3
- export { O as OrganisationSecurityHook, l as UseAppConfigReturn, i as UseFormDialogOptions, j as UseFormDialogReturn, U as UseOrganisationPermissionsReturn, F as UsePublicEventLogoOptions, E as UsePublicEventLogoReturn, B as UsePublicEventOptions, A as UsePublicEventReturn, D as UsePublicFileDisplayOptions, C as UsePublicFileDisplayReturn, G as UsePublicRouteParamsReturn, n as clearPublicEventCache, q as clearPublicFileDisplayCache, t as clearPublicLogoCache, z as extractEventCodeFromPath, y as generatePublicRoutePath, o as getPublicEventCacheStats, r as getPublicFileDisplayCacheStats, v as getPublicLogoCacheStats, k as useAppConfig, u as useEventTheme, h as useFormDialog, e as useOrganisationPermissions, f as useOrganisationSecurity, m as usePublicEvent, x as usePublicEventCode, s as usePublicEventLogo, p as usePublicFileDisplay, w as usePublicRouteParams, g as useZodForm } from './usePublicRouteParams-COZ28Mvq.js';
2
+ import { S as StorageUploadOptions, a as StorageUploadResult, b as StorageListOptions, c as StorageListResult, d as StorageFileInfo } from './usePublicRouteParams-MamNgwqe.js';
3
+ export { O as OrganisationSecurityHook, l as UseAppConfigReturn, i as UseFormDialogOptions, j as UseFormDialogReturn, U as UseOrganisationPermissionsReturn, F as UsePublicEventLogoOptions, E as UsePublicEventLogoReturn, B as UsePublicEventOptions, A as UsePublicEventReturn, D as UsePublicFileDisplayOptions, C as UsePublicFileDisplayReturn, G as UsePublicRouteParamsReturn, n as clearPublicEventCache, q as clearPublicFileDisplayCache, t as clearPublicLogoCache, z as extractEventCodeFromPath, y as generatePublicRoutePath, o as getPublicEventCacheStats, r as getPublicFileDisplayCacheStats, v as getPublicLogoCacheStats, k as useAppConfig, u as useEventTheme, h as useFormDialog, e as useOrganisationPermissions, f as useOrganisationSecurity, m as usePublicEvent, x as usePublicEventCode, s as usePublicEventLogo, p as usePublicFileDisplay, w as usePublicRouteParams, g as useZodForm } from './usePublicRouteParams-MamNgwqe.js';
4
4
  import * as React$1 from 'react';
5
5
  import { SortingState, ColumnFiltersState, ExpandedState } from '@tanstack/react-table';
6
- import { d as DataRecord, g as PerformanceConfig, S as ServerSideConfig, C as ChunkingConfig, i as SearchIndexConfig, h as PaginationMode, k as ServerSideParams, l as ServerSideResponse, A as AutocompleteOptions, m as GooglePlaceAutocompletePrediction, P as ParsedAddress } from './types-B-K_5VnO.js';
6
+ import { d as DataRecord, g as PerformanceConfig, S as ServerSideConfig, C as ChunkingConfig, i as SearchIndexConfig, h as PaginationMode, k as ServerSideParams, l as ServerSideResponse, A as AutocompleteOptions, m as GooglePlaceAutocompletePrediction, P as ParsedAddress } from './types-DXstZpNI.js';
7
7
  export { u as useComponentPerformance } from './useComponentPerformance-DE9l5RkL.js';
8
8
  import { SupabaseClient } from '@supabase/supabase-js';
9
9
  import { D as Database } from './database.generated-CcnC_DRc.js';
@@ -455,8 +455,8 @@ declare const queryCacheHelpers: {
455
455
  * FileCategory.EVENT_LOGOS
456
456
  * );
457
457
  *
458
- * if (isLoading) return <div>Loading...</div>;
459
- * if (error) return <div>Error: {error.message}</div>;
458
+ * if (isLoading) return <p>Loading...</p>;
459
+ * if (error) return <p>Error: {error.message}</p>;
460
460
  *
461
461
  * return fileUrl ? <img src={fileUrl} alt="File" /> : null;
462
462
  * }
package/dist/hooks.js CHANGED
@@ -1,9 +1,9 @@
1
- export { clearPublicEventCache, clearPublicLogoCache, extractEventCodeFromPath, generatePublicRoutePath, getPublicEventCacheStats, getPublicLogoCacheStats, useFormDialog, useOrganisationPermissions, usePublicEvent, usePublicEventCode, usePublicEventLogo, usePublicRouteParams, useZodForm } from './chunk-MAGBIDNS.js';
2
- import { getPublicUrl, getSignedUrl, uploadFile, deleteFile, archiveFile, listFiles } from './chunk-FENMYN2U.js';
3
- export { cleanupQueryCache, clearFileDisplayCache, clearPublicFileDisplayCache, getFileDisplayCacheStats, getPublicFileDisplayCacheStats, invalidateFileDisplayCache, queryCacheHelpers, useAddressAutocomplete, useDebounce, useEventTheme, useFileDisplay, usePreventTabReload, usePublicFileDisplay, useQueryCache } from './chunk-FENMYN2U.js';
4
- import './chunk-BVP2BCJF.js';
1
+ export { clearPublicEventCache, clearPublicLogoCache, extractEventCodeFromPath, generatePublicRoutePath, getPublicEventCacheStats, getPublicLogoCacheStats, useFormDialog, useOrganisationPermissions, usePublicEvent, usePublicEventCode, usePublicEventLogo, usePublicRouteParams, useZodForm } from './chunk-L4XMVJKY.js';
2
+ import { getPublicUrl, getSignedUrl, uploadFile, deleteFile, archiveFile, listFiles } from './chunk-5X4QLXRG.js';
3
+ export { cleanupQueryCache, clearFileDisplayCache, clearPublicFileDisplayCache, getFileDisplayCacheStats, getPublicFileDisplayCacheStats, invalidateFileDisplayCache, queryCacheHelpers, useAddressAutocomplete, useDebounce, useEventTheme, useFileDisplay, usePreventTabReload, usePublicFileDisplay, useQueryCache } from './chunk-5X4QLXRG.js';
4
+ import './chunk-ZKAWKYT4.js';
5
5
  export { useDataTablePerformance, useFocusTrap, useToast } from './chunk-S7DKJPLT.js';
6
- export { useAppConfig, useOrganisationSecurity } from './chunk-3O3WHILE.js';
6
+ export { useAppConfig, useOrganisationSecurity } from './chunk-VBCS3DUA.js';
7
7
  import './chunk-C7NSAPTL.js';
8
8
  import './chunk-FTCRZOG2.js';
9
9
  import './chunk-ZFYPMX46.js';
@@ -12,7 +12,7 @@ import './chunk-6QYDGKQY.js';
12
12
  import './chunk-4SXLQIZO.js';
13
13
  export { useComponentPerformance } from './chunk-6GLLNA6U.js';
14
14
  import './chunk-FYHN4DD5.js';
15
- import { performanceBudgetMonitor, PERFORMANCE_BUDGETS } from './chunk-SD6WQY43.js';
15
+ import { performanceBudgetMonitor, PERFORMANCE_BUDGETS } from './chunk-7ILTDCL2.js';
16
16
  import './chunk-HF6O3O37.js';
17
17
  import { createLogger } from './chunk-TTRFSOKR.js';
18
18
  import './chunk-3RG5ZIWI.js';
package/dist/index.d.ts CHANGED
@@ -10,14 +10,14 @@ import { S as SessionRestorationState } from './auth-BZOJqrdd.js';
10
10
  export { A as AccessLevel, E as EventAppRole, G as GlobalRole, I as InvalidScopeError, M as MissingUserContextError, O as Operation, e as OrganisationContextRequiredError, c as OrganisationRole, P as Permission, a as PermissionCheck, d as PermissionDeniedError, b as PermissionMap, R as RBACError, f as RBACNotInitializedError, S as Scope, U as UUID } from './types-BeoeWV5I.js';
11
11
  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, x as RPCFunction, S as SessionType } from './functions-DHebl8-F.js';
12
12
  export { ALL_PERMISSIONS, AccessDenied, AccessDeniedProps, AllPermissions, CACHE_PATTERNS, ComplianceResult, DatabaseComplianceResult, DatabaseIssue, EVENT_APP_PERMISSIONS, EventAppRoleData, GLOBAL_PERMISSIONS, GrantEventAppRoleParams, NavigationGuard, NavigationGuardProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, PagePermissionGuard, PagePermissionGuardProps, QuickFix, RBACAuditManager, RBACCache, RBACConfig, RBACEngine, RBACLogger, RBACPerformanceMetrics, ResourcePermissions, RevokeEventAppRoleParams, RoleManagementResult, RuntimeComplianceResult, SECURE_CLIENT_SYMBOL, SecureSupabaseClient, SetupIssue, UseResolvedScopeOptions, UseResolvedScopeReturn, UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isSecureClient, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCan, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, warnIfInsecureClient, withAccessLevelGuard, withPermissionGuard, withRoleGuard } from './rbac/index.js';
13
- export { A as AddressField, k as AddressFieldProps, l as AddressFieldRef, o as Alert, q as AlertDescription, p as AlertTitle, r as Avatar, s as AvatarProps, t as Badge, u as BadgeProps, v as BadgeVariant, B as Button, a as ButtonProps, am as Calendar, an as CalendarProps, C as Card, g as CardActions, f as CardContent, e as CardDescription, c as CardFooter, b as CardHeader, h as CardProps, d as CardTitle, w as Checkbox, aP as ContextSelector, aQ as ContextSelectorProps, M as Dialog, V as DialogBody, a4 as DialogBodyProps, Q as DialogClose, a1 as DialogCloseProps, R as DialogContent, $ as DialogContentProps, Y as DialogDescription, W as DialogFooter, a3 as DialogFooterProps, U as DialogHeader, a2 as DialogHeaderProps, N as DialogPortal, a0 as DialogPortalProps, Z as DialogProps, a5 as DialogSize, X as DialogTitle, O as DialogTrigger, _ as DialogTriggerProps, aS as ErrorBoundary, aU as ErrorBoundaryProps, aT as ErrorBoundaryProvider, aW as ErrorBoundaryProviderProps, aV as ErrorBoundaryState, b1 as FileDisplay, b2 as FileDisplayProps, a$ as FileUpload, b0 as FileUploadProps, aK as Footer, aL as FooterProps, aD as Form, aE as FormField, aG as FormFieldProps, aF as FormProps, aX as GlobalErrorHandler, aJ as Header, I as Input, j as InputProps, L as Label, m as LabelProps, aY as LoadingSpinner, aH as LoginForm, aI as LoginFormProps, aO as NavigationMenu, bk as PaceAppLayout, bj as PaceAppLayoutProps, bm as PaceLoginPage, bl as PaceLoginPageProps, bo as PasswordChangeForm, P as Progress, y as ProgressProps, aM as ProtectedRoute, aN as ProtectedRouteProps, bc as PublicPageFooter, bi as PublicPageFooterProps, bb as PublicPageHeader, bh as PublicPageHeaderProps, ba as PublicPageLayout, bg as PublicPageLayoutProps, bd as PublicPageProvider, a6 as Select, aa as SelectContent, a7 as SelectGroup, ac as SelectItem, ab as SelectLabel, ad as SelectSeparator, a9 as SelectTrigger, a8 as SelectValue, aZ as SessionRestorationLoader, a_ as SessionRestorationLoaderProps, S as Switch, x as SwitchProps, z as Table, E as TableBody, F as TableCaption, G as TableCell, H as TableFooter, J as TableHead, D as TableHeader, K as TableRow, ae as Tabs, ah as TabsContent, al as TabsContentProps, af as TabsList, aj as TabsListProps, ai as TabsProps, ag as TabsTrigger, ak as TabsTriggerProps, T as Textarea, n as TextareaProps, ao as Toast, aq as ToastAction, aw as ToastActionElement, av as ToastClose, au as ToastDescription, ax as ToastProps, ar as ToastProvider, at as ToastTitle, as as ToastViewport, ap as Toaster, ay as Tooltip, aA as TooltipContent, aB as TooltipProvider, aC as TooltipRoot, az as TooltipTrigger, b9 as UseFileReferenceForRecordReturn, b7 as UseFileReferenceOptions, b8 as UseFileReferenceReturn, aR as UserMenu, bn as UserMenuProps, b3 as useFileReference, b5 as useFileReferenceById, b4 as useFileReferenceForRecord, b6 as useFilesByCategory, bf as useIsPublicPage, be as usePublicPageContext } from './PublicPageProvider-BBH6Vqg7.js';
13
+ export { A as AddressField, k as AddressFieldProps, l as AddressFieldRef, o as Alert, q as AlertDescription, p as AlertTitle, r as Avatar, s as AvatarProps, t as Badge, u as BadgeProps, v as BadgeVariant, B as Button, a as ButtonProps, am as Calendar, an as CalendarProps, C as Card, g as CardActions, f as CardContent, e as CardDescription, c as CardFooter, b as CardHeader, h as CardProps, d as CardTitle, w as Checkbox, aP as ContextSelector, aQ as ContextSelectorProps, M as Dialog, V as DialogBody, a4 as DialogBodyProps, Q as DialogClose, a1 as DialogCloseProps, R as DialogContent, $ as DialogContentProps, Y as DialogDescription, W as DialogFooter, a3 as DialogFooterProps, U as DialogHeader, a2 as DialogHeaderProps, N as DialogPortal, a0 as DialogPortalProps, Z as DialogProps, a5 as DialogSize, X as DialogTitle, O as DialogTrigger, _ as DialogTriggerProps, aS as ErrorBoundary, aU as ErrorBoundaryProps, aT as ErrorBoundaryProvider, aW as ErrorBoundaryProviderProps, aV as ErrorBoundaryState, b1 as FileDisplay, b2 as FileDisplayProps, a$ as FileUpload, b0 as FileUploadProps, aK as Footer, aL as FooterProps, aD as Form, aE as FormField, aG as FormFieldProps, aF as FormProps, aX as GlobalErrorHandler, aJ as Header, I as Input, j as InputProps, L as Label, m as LabelProps, aY as LoadingSpinner, aH as LoginForm, aI as LoginFormProps, aO as NavigationMenu, bk as PaceAppLayout, bj as PaceAppLayoutProps, bm as PaceLoginPage, bl as PaceLoginPageProps, bo as PasswordChangeForm, P as Progress, y as ProgressProps, aM as ProtectedRoute, aN as ProtectedRouteProps, bc as PublicPageFooter, bi as PublicPageFooterProps, bb as PublicPageHeader, bh as PublicPageHeaderProps, ba as PublicPageLayout, bg as PublicPageLayoutProps, bd as PublicPageProvider, a6 as Select, aa as SelectContent, a7 as SelectGroup, ac as SelectItem, ab as SelectLabel, ad as SelectSeparator, a9 as SelectTrigger, a8 as SelectValue, aZ as SessionRestorationLoader, a_ as SessionRestorationLoaderProps, S as Switch, x as SwitchProps, z as Table, E as TableBody, F as TableCaption, G as TableCell, H as TableFooter, J as TableHead, D as TableHeader, K as TableRow, ae as Tabs, ah as TabsContent, al as TabsContentProps, af as TabsList, aj as TabsListProps, ai as TabsProps, ag as TabsTrigger, ak as TabsTriggerProps, T as Textarea, n as TextareaProps, ao as Toast, aq as ToastAction, aw as ToastActionElement, av as ToastClose, au as ToastDescription, ax as ToastProps, ar as ToastProvider, at as ToastTitle, as as ToastViewport, ap as Toaster, ay as Tooltip, aA as TooltipContent, aB as TooltipProvider, aC as TooltipRoot, az as TooltipTrigger, b9 as UseFileReferenceForRecordReturn, b7 as UseFileReferenceOptions, b8 as UseFileReferenceReturn, aR as UserMenu, bn as UserMenuProps, b3 as useFileReference, b5 as useFileReferenceById, b4 as useFileReferenceForRecord, b6 as useFilesByCategory, bf as useIsPublicPage, be as usePublicPageContext } from './PublicPageProvider-DlsCaR5v.js';
14
14
  export { u as useToast } from './useToast-AyaT-x7p.js';
15
- export { D as DataTable, a as DataTableProps } from './DataTable-2N_tqbfq.js';
16
- import { d as DataRecord, a as DataTableAction, D as DataTableColumn } from './types-B-K_5VnO.js';
17
- export { c as AggregateConfig, A as AutocompleteOptions, f as DataTableFeatureConfig, b as DataTableToolbarButton, E as EmptyStateConfig, j as ExportOptions, G as GetRowId, P as ParsedAddress } from './types-B-K_5VnO.js';
15
+ export { D as DataTable, a as DataTableProps } from './DataTable-DRUIgtUH.js';
16
+ import { d as DataRecord, a as DataTableAction, D as DataTableColumn } from './types-DXstZpNI.js';
17
+ export { c as AggregateConfig, A as AutocompleteOptions, f as DataTableFeatureConfig, b as DataTableToolbarButton, E as EmptyStateConfig, j as ExportOptions, G as GetRowId, P as ParsedAddress } from './types-DXstZpNI.js';
18
18
  import { ColumnDef } from '@tanstack/react-table';
19
- import { H as FileSizeLimits, I as StorageConfig, S as StorageUploadOptions, J as StorageFileMetadata, a as StorageUploadResult, K as StorageUrlOptions, b as StorageListOptions, c as StorageListResult } from './usePublicRouteParams-COZ28Mvq.js';
20
- export { d as StorageFileInfo, i as UseFormDialogOptions, j as UseFormDialogReturn, F as UsePublicEventLogoOptions, E as UsePublicEventLogoReturn, B as UsePublicEventOptions, A as UsePublicEventReturn, D as UsePublicFileDisplayOptions, C as UsePublicFileDisplayReturn, G as UsePublicRouteParamsReturn, n as clearPublicEventCache, q as clearPublicFileDisplayCache, t as clearPublicLogoCache, z as extractEventCodeFromPath, y as generatePublicRoutePath, o as getPublicEventCacheStats, r as getPublicFileDisplayCacheStats, v as getPublicLogoCacheStats, k as useAppConfig, u as useEventTheme, h as useFormDialog, e as useOrganisationPermissions, f as useOrganisationSecurity, m as usePublicEvent, x as usePublicEventCode, s as usePublicEventLogo, p as usePublicFileDisplay, w as usePublicRouteParams, g as useZodForm } from './usePublicRouteParams-COZ28Mvq.js';
19
+ import { H as FileSizeLimits, I as StorageConfig, S as StorageUploadOptions, J as StorageFileMetadata, a as StorageUploadResult, K as StorageUrlOptions, b as StorageListOptions, c as StorageListResult } from './usePublicRouteParams-MamNgwqe.js';
20
+ export { d as StorageFileInfo, i as UseFormDialogOptions, j as UseFormDialogReturn, F as UsePublicEventLogoOptions, E as UsePublicEventLogoReturn, B as UsePublicEventOptions, A as UsePublicEventReturn, D as UsePublicFileDisplayOptions, C as UsePublicFileDisplayReturn, G as UsePublicRouteParamsReturn, n as clearPublicEventCache, q as clearPublicFileDisplayCache, t as clearPublicLogoCache, z as extractEventCodeFromPath, y as generatePublicRoutePath, o as getPublicEventCacheStats, r as getPublicFileDisplayCacheStats, v as getPublicLogoCacheStats, k as useAppConfig, u as useEventTheme, h as useFormDialog, e as useOrganisationPermissions, f as useOrganisationSecurity, m as usePublicEvent, x as usePublicEventCode, s as usePublicEventLogo, p as usePublicFileDisplay, w as usePublicRouteParams, g as useZodForm } from './usePublicRouteParams-MamNgwqe.js';
21
21
  export { z } from 'zod';
22
22
  export { F as FileCategory, b as FileMetadata, a as FileReference, c as FileUploadOptions } from './file-reference-BavO2eQj.js';
23
23
  import { SupabaseClient } from '@supabase/supabase-js';
package/dist/index.js CHANGED
@@ -1,15 +1,16 @@
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 { AddressField, Avatar, Badge, Calendar, ContextSelector, FileDisplay, FileUpload, Footer, Form, FormField, Header, Label, LoginForm, NavigationMenu, PaceAppLayout, PaceLoginPage, PasswordChangeForm, ProtectedRoute, PublicPageFooter, PublicPageHeader, PublicPageLayout, SessionRestorationLoader, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, UserMenu, useFileReference, useFileReferenceById, useFileReferenceForRecord, useFilesByCategory } from './chunk-LAZMKTTF.js';
3
- export { AccessDenied } from './chunk-4T7OBVTU.js';
4
- import { Dialog, DialogContent, DialogHeader, Card } from './chunk-ZS5VO5JB.js';
5
- export { Alert, AlertDescription, AlertTitle, Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ColumnFactory, DataTable, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogPortal, DialogTitle, DialogTrigger, Input, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, average, count, exportToCSV, exportToCSVWithTableRows, generateCSVContent, max, min, sum } from './chunk-ZS5VO5JB.js';
6
- import { Button } from './chunk-7TYHROIV.js';
7
- export { Button, SECURE_CLIENT_SYMBOL, SecureSupabaseClient, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger, createSecureClient, fromSupabaseClient, isSecureClient, useAccessLevel, useCan, useEvents, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, warnIfInsecureClient } from './chunk-7TYHROIV.js';
8
- export { StorageUtils, clearPublicEventCache, clearPublicLogoCache, extractEventCodeFromPath, generatePublicRoutePath, getPublicEventCacheStats, getPublicLogoCacheStats, useFormDialog, useOrganisationPermissions, usePublicEvent, usePublicEventCode, usePublicEventLogo, usePublicRouteParams, useZodForm } from './chunk-MAGBIDNS.js';
9
- export { APP_PATH_MAPPING, DEFAULT_FILE_SIZE_LIMIT, FILE_SIZE_LIMITS, STORAGE_CONFIG, archiveFile, clearPublicFileDisplayCache, deleteFile, downloadFile, extractFileMetadata, generateFilePath, generateFileUrlsBatch, generateUniqueFileName, getBucketName, getFileSizeLimit, getPublicFileDisplayCacheStats, getPublicUrl, getSignedUrl, listFiles, uploadFile, useEventTheme, usePublicFileDisplay, validateFileSize } from './chunk-FENMYN2U.js';
10
- export { applyPalette, clearPalette, parseAndNormalizeEventColours } from './chunk-BVP2BCJF.js';
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-GHYHJTYV.js';
2
+ export { AddressField, Avatar, Badge, Calendar, ContextSelector, FileDisplay, FileUpload, Footer, Form, FormField, Header, LoginForm, NavigationMenu, PaceAppLayout, PaceLoginPage, PasswordChangeForm, ProtectedRoute, PublicPageFooter, PublicPageHeader, PublicPageLayout, SessionRestorationLoader, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, UserMenu, useFileReference, useFileReferenceById, useFileReferenceForRecord, useFilesByCategory } from './chunk-JGWDVX64.js';
3
+ export { AccessDenied } from './chunk-6F3IILHI.js';
4
+ import { Dialog, DialogContent, DialogHeader } from './chunk-Q7Q7V5NV.js';
5
+ export { Alert, AlertDescription, AlertTitle, Checkbox, ColumnFactory, DataTable, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogPortal, DialogTitle, DialogTrigger, Input, Label, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, average, count, exportToCSV, exportToCSVWithTableRows, generateCSVContent, max, min, sum } from './chunk-Q7Q7V5NV.js';
6
+ import { Button } from './chunk-BM4CQ5P3.js';
7
+ export { Button, SECURE_CLIENT_SYMBOL, SecureSupabaseClient, Tooltip, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger, createSecureClient, fromSupabaseClient, isSecureClient, useAccessLevel, useCan, useEvents, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, warnIfInsecureClient } from './chunk-BM4CQ5P3.js';
8
+ export { StorageUtils, clearPublicEventCache, clearPublicLogoCache, extractEventCodeFromPath, generatePublicRoutePath, getPublicEventCacheStats, getPublicLogoCacheStats, useFormDialog, useOrganisationPermissions, usePublicEvent, usePublicEventCode, usePublicEventLogo, usePublicRouteParams, useZodForm } from './chunk-L4XMVJKY.js';
9
+ export { APP_PATH_MAPPING, DEFAULT_FILE_SIZE_LIMIT, FILE_SIZE_LIMITS, STORAGE_CONFIG, archiveFile, clearPublicFileDisplayCache, deleteFile, downloadFile, extractFileMetadata, generateFilePath, generateFileUrlsBatch, generateUniqueFileName, getBucketName, getFileSizeLimit, getPublicFileDisplayCacheStats, getPublicUrl, getSignedUrl, listFiles, uploadFile, useEventTheme, usePublicFileDisplay, validateFileSize } from './chunk-5X4QLXRG.js';
10
+ export { applyPalette, clearPalette, parseAndNormalizeEventColours } from './chunk-ZKAWKYT4.js';
11
11
  export { useToast } from './chunk-S7DKJPLT.js';
12
- export { ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useAppConfig, useIsPublicPage, useOrganisationSecurity, usePublicPageContext } from './chunk-3O3WHILE.js';
12
+ import { Card } from './chunk-VBCS3DUA.js';
13
+ export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useAppConfig, useIsPublicPage, useOrganisationSecurity, usePublicPageContext } from './chunk-VBCS3DUA.js';
13
14
  import './chunk-C7NSAPTL.js';
14
15
  import { OrganisationServiceContext, UnifiedAuthContext, OrganisationServiceProvider } from './chunk-FTCRZOG2.js';
15
16
  export { EventServiceProvider, InactivityServiceProvider, OrganisationServiceProvider, UnifiedAuthProvider, useAuthService, useEventService, useInactivityService, useOrganisationService, useOrganisations, useSessionRestoration, useUnifiedAuth } from './chunk-FTCRZOG2.js';
@@ -17,13 +18,13 @@ export { CACHE_PATTERNS, RBACCache, RBACEngine, clearInFlightRequests, createRBA
17
18
  export { RBACAuditManager, createAuditManager, emitAuditEvent, getGlobalAuditManager, setGlobalAuditManager } from './chunk-AHU7G2R5.js';
18
19
  export { FileCategory } from './chunk-6QYDGKQY.js';
19
20
  import './chunk-4SXLQIZO.js';
20
- export { createBaseClient, emailSchema, formatCompactNumber, formatCurrency, formatDate, formatDateTime, formatFileSize, formatNumber, formatPercent, formatTime, getAppConfig, getCurrentAppId, getCurrentAppName, nameSchema, passwordSchema, phoneSchema, sanitizeFormData, sanitizeUserInput, setAppConfig, urlSchema, useSessionTracking } from './chunk-UIYSCEV7.js';
21
- export { LoadingSpinner, formatInTimeZone, formatTimeInTimeZone, fromZonedTime, getTimeZoneDifference, getTimezoneAbbreviation, getUserTimeZone, roundToNearestMinutes, toZonedTime } from './chunk-2HGJFNAH.js';
22
- export { sanitizeHtml } from './chunk-3QC3KRHK.js';
23
- import { cn } from './chunk-A55DK444.js';
24
- export { cn } from './chunk-A55DK444.js';
21
+ export { createBaseClient, emailSchema, formatCompactNumber, formatCurrency, formatDate, formatDateTime, formatFileSize, formatNumber, formatPercent, formatTime, getAppConfig, getCurrentAppId, getCurrentAppName, nameSchema, passwordSchema, phoneSchema, sanitizeFormData, sanitizeUserInput, setAppConfig, urlSchema, useSessionTracking } from './chunk-IUBRCBSY.js';
22
+ export { formatInTimeZone, formatTimeInTimeZone, fromZonedTime, getTimeZoneDifference, getTimezoneAbbreviation, getUserTimeZone, roundToNearestMinutes, toZonedTime } from './chunk-FEJLJNWA.js';
23
+ export { LoadingSpinner, sanitizeHtml } from './chunk-A3W6LW53.js';
24
+ import './chunk-OJ4SKRSV.js';
25
25
  import './chunk-FYHN4DD5.js';
26
- import './chunk-SD6WQY43.js';
26
+ import { cn } from './chunk-7ILTDCL2.js';
27
+ export { cn } from './chunk-7ILTDCL2.js';
27
28
  import './chunk-HF6O3O37.js';
28
29
  import { logger } from './chunk-TTRFSOKR.js';
29
30
  export { LogLevel, Logger, createLogger, logger } from './chunk-TTRFSOKR.js';
@@ -1,14 +1,14 @@
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';
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-GHYHJTYV.js';
2
+ export { AccessDenied } from '../chunk-6F3IILHI.js';
3
+ export { SECURE_CLIENT_SYMBOL, SecureSupabaseClient, createSecureClient, fromSupabaseClient, isSecureClient, useAccessLevel, useCan, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, warnIfInsecureClient } from '../chunk-BM4CQ5P3.js';
4
+ import '../chunk-VBCS3DUA.js';
5
5
  import '../chunk-C7NSAPTL.js';
6
6
  import '../chunk-FTCRZOG2.js';
7
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
8
  export { RBACAuditManager, createAuditManager, emitAuditEvent, getGlobalAuditManager, setGlobalAuditManager } from '../chunk-AHU7G2R5.js';
9
9
  import '../chunk-4SXLQIZO.js';
10
- import '../chunk-A55DK444.js';
11
- import '../chunk-SD6WQY43.js';
10
+ import '../chunk-OJ4SKRSV.js';
11
+ import '../chunk-7ILTDCL2.js';
12
12
  import '../chunk-HF6O3O37.js';
13
13
  import '../chunk-TTRFSOKR.js';
14
14
  import '../chunk-3RG5ZIWI.js';