@jmruthers/pace-core 0.6.7 → 0.6.9

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 (117) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/audit-tool/00-dependencies.cjs +215 -9
  3. package/audit-tool/audits/02-project-structure.cjs +41 -53
  4. package/audit-tool/audits/03-architecture.cjs +34 -6
  5. package/audit-tool/audits/06-security-rbac.cjs +10 -0
  6. package/audit-tool/audits/07-api-tech-stack.cjs +55 -1
  7. package/audit-tool/index.cjs +23 -19
  8. package/audit-tool/utils/report-utils.cjs +141 -2
  9. package/dist/{DataTable-7PMH7XN7.js → DataTable-SOAFXIWY.js} +5 -5
  10. package/dist/{PublicPageProvider-DlsCaR5v.d.ts → PublicPageProvider-CIGSujI2.d.ts} +14 -8
  11. package/dist/{UnifiedAuthProvider-ZT6TIGM7.js → UnifiedAuthProvider-7SNDOWYD.js} +2 -2
  12. package/dist/{api-Y4MQWOFW.js → api-7P7DI652.js} +1 -1
  13. package/dist/{chunk-L4XMVJKY.js → chunk-4DDCYDQ3.js} +8 -7
  14. package/dist/{chunk-JGWDVX64.js → chunk-5HNSDQWH.js} +125 -55
  15. package/dist/{chunk-ZKAWKYT4.js → chunk-5W2A3DRC.js} +2 -1
  16. package/dist/{chunk-IUBRCBSY.js → chunk-C7ZQ5O4C.js} +11 -5
  17. package/dist/{chunk-VBCS3DUA.js → chunk-EF2UGZWY.js} +3 -3
  18. package/dist/{chunk-BM4CQ5P3.js → chunk-GS5672WG.js} +6 -6
  19. package/dist/{chunk-Q7Q7V5NV.js → chunk-J2U36LHD.js} +72 -9
  20. package/dist/{chunk-ZFYPMX46.js → chunk-LX6U42O3.js} +1 -1
  21. package/dist/{chunk-5X4QLXRG.js → chunk-MPBLMWVR.js} +5 -3
  22. package/dist/{chunk-6F3IILHI.js → chunk-S6ZQKDY6.js} +1 -1
  23. package/dist/{chunk-FTCRZOG2.js → chunk-T5CVK4R3.js} +5 -5
  24. package/dist/{chunk-GHYHJTYV.js → chunk-Z2FNRKF3.js} +13 -13
  25. package/dist/components.d.ts +1 -1
  26. package/dist/components.js +12 -12
  27. package/dist/{database.generated-CcnC_DRc.d.ts → database.generated-DT8JTZiP.d.ts} +12 -12
  28. package/dist/eslint-rules/rules/04-code-quality.cjs +66 -10
  29. package/dist/eslint-rules/rules/06-security-rbac.cjs +8 -3
  30. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +190 -68
  31. package/dist/{functions-DHebl8-F.d.ts → functions-lBy5L2ry.d.ts} +1 -1
  32. package/dist/hooks.d.ts +3 -3
  33. package/dist/hooks.js +7 -7
  34. package/dist/index.d.ts +6 -6
  35. package/dist/index.js +16 -16
  36. package/dist/providers.js +2 -2
  37. package/dist/rbac/index.d.ts +2 -2
  38. package/dist/rbac/index.js +6 -6
  39. package/dist/theming/runtime.d.ts +48 -1
  40. package/dist/theming/runtime.js +1 -1
  41. package/dist/{timezone-BZe_eUxx.d.ts → timezone-0AyangqX.d.ts} +1 -1
  42. package/dist/types.d.ts +3 -3
  43. package/dist/{usePublicRouteParams-MamNgwqe.d.ts → usePublicRouteParams-DQLrDqDb.d.ts} +1 -1
  44. package/dist/utils.d.ts +3 -3
  45. package/dist/utils.js +3 -3
  46. package/docs/api/modules.md +64 -15
  47. package/docs/api-reference/rpc-functions.md +3 -3
  48. package/docs/getting-started/dependencies.md +23 -0
  49. package/docs/implementation-guides/app-layout.md +1 -1
  50. package/docs/implementation-guides/data-tables.md +67 -1
  51. package/docs/standards/1-pace-core-compliance-standards.md +38 -1
  52. package/eslint-config-pace-core.cjs +30 -11
  53. package/package.json +45 -15
  54. package/scripts/eslint-audit.cjs +123 -0
  55. package/scripts/install-eslint-config.cjs +67 -2
  56. package/scripts/validate-dependencies.cjs +248 -0
  57. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +20 -8
  58. package/src/__tests__/templates/accessibility.test.template.tsx +1 -0
  59. package/src/components/AddressField/AddressField.tsx +26 -1
  60. package/src/components/Alert/Alert.test.tsx +86 -22
  61. package/src/components/Alert/Alert.tsx +19 -11
  62. package/src/components/Badge/Badge.tsx +1 -1
  63. package/src/components/Checkbox/Checkbox.test.tsx +2 -1
  64. package/src/components/ContextSelector/ContextSelector.tsx +39 -41
  65. package/src/components/DataTable/DataTable.tsx +1 -19
  66. package/src/components/DataTable/__tests__/DataTable.select-label-display.test.tsx +483 -0
  67. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +6 -10
  68. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +18 -9
  69. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +3 -2
  70. package/src/components/DataTable/components/EmptyState.tsx +1 -1
  71. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +1 -1
  72. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +3 -3
  73. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +33 -29
  74. package/src/components/DataTable/hooks/__tests__/useTableColumns.test.ts +224 -0
  75. package/src/components/DataTable/hooks/useTableColumns.ts +23 -1
  76. package/src/components/DataTable/utils/__tests__/selectFieldUtils.test.ts +207 -0
  77. package/src/components/DataTable/utils/index.ts +1 -0
  78. package/src/components/DataTable/utils/selectFieldUtils.ts +134 -0
  79. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -2
  80. package/src/components/FileUpload/FileUpload.test.tsx +22 -31
  81. package/src/components/FileUpload/FileUpload.tsx +29 -0
  82. package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -12
  83. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +9 -9
  84. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +30 -30
  85. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -4
  86. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +7 -1
  87. package/src/components/UserMenu/UserMenu.tsx +3 -5
  88. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +8 -5
  89. package/src/hooks/__tests__/useFileUrl.unit.test.ts +4 -0
  90. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +3 -3
  91. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +45 -8
  92. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +22 -2
  93. package/src/hooks/public/usePublicRouteParams.ts +8 -4
  94. package/src/hooks/useAddressAutocomplete.test.ts +18 -18
  95. package/src/hooks/useEventTheme.ts +5 -1
  96. package/src/hooks/useFileUrl.ts +52 -8
  97. package/src/hooks/useOrganisationSecurity.test.ts +2 -1
  98. package/src/providers/__tests__/ProviderLifecycle.test.tsx +1 -1
  99. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +15 -6
  100. package/src/rbac/__tests__/rbac-functions.test.ts +3 -3
  101. package/src/rbac/api.test.ts +104 -0
  102. package/src/rbac/engine.ts +1 -1
  103. package/src/rbac/hooks/useCan.test.ts +2 -2
  104. package/src/rbac/secureClient.ts +1 -1
  105. package/src/rbac/types/functions.ts +1 -1
  106. package/src/theming/__tests__/parseEventColours.test.ts +117 -8
  107. package/src/theming/parseEventColours.ts +56 -2
  108. package/src/types/database.generated.ts +9 -9
  109. package/src/types/supabase.ts +2 -3
  110. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +9 -9
  111. package/src/utils/file-reference/__tests__/file-reference.test.ts +4 -0
  112. package/src/utils/formatting/formatDate.test.ts +3 -2
  113. package/src/utils/formatting/formatDateTime.test.ts +2 -2
  114. package/src/utils/google-places/googlePlacesUtils.test.ts +36 -24
  115. package/src/utils/storage/__tests__/helpers.unit.test.ts +19 -12
  116. package/src/utils/storage/helpers.test.ts +69 -3
  117. package/src/utils/supabase/createBaseClient.ts +25 -7
@@ -42,6 +42,11 @@ module.exports = {
42
42
  return {};
43
43
  }
44
44
 
45
+ // Exclude Edge Functions - they run in Deno and cannot use React hooks
46
+ // Edge Functions must use createClient() directly with service role keys
47
+ const isEdgeFunction = filename.includes('supabase/functions/') ||
48
+ filename.includes('supabase\\functions\\');
49
+
45
50
  // Allow createClient in specific config files (supabaseClient.ts/js, etc.)
46
51
  const isConfigFile = /(supabase|client)\.(ts|js|tsx|jsx)$/i.test(filename) &&
47
52
  (filename.includes('supabase') || filename.includes('client'));
@@ -63,7 +68,7 @@ module.exports = {
63
68
  return false;
64
69
  });
65
70
 
66
- if (hasCreateClient && !isConfigFile) {
71
+ if (hasCreateClient && !isConfigFile && !isEdgeFunction) {
67
72
  context.report({
68
73
  node: node.source,
69
74
  messageId: 'directClientImport',
@@ -81,7 +86,7 @@ module.exports = {
81
86
  CallExpression(node) {
82
87
  // Check for createClient() calls
83
88
  if (node.callee.type === 'Identifier' && node.callee.name === 'createClient') {
84
- if (!isConfigFile) {
89
+ if (!isConfigFile && !isEdgeFunction) {
85
90
  context.report({
86
91
  node,
87
92
  messageId: 'directClientCreation',
@@ -98,7 +103,7 @@ module.exports = {
98
103
  // Check for supabase.createClient() or similar patterns
99
104
  if (node.callee.type === 'MemberExpression' &&
100
105
  node.callee.property?.name === 'createClient') {
101
- if (!isConfigFile) {
106
+ if (!isConfigFile && !isEdgeFunction) {
102
107
  context.report({
103
108
  node,
104
109
  messageId: 'directClientCreation',
@@ -29,7 +29,8 @@ module.exports = {
29
29
  },
30
30
  messages: {
31
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"
32
+ invalidRpcVerb: "RPC '{{rpcName}}' uses invalid verb '{{verb}}'. Use only: list, get, create, update, delete, read, check, upsert, ensure, grant, insert, remove, revoke, resolve, bulk_create, bulk_update, bulk_import",
33
+ missingPrefix: "RPC '{{rpcName}}' must start with 'data_' (for read operations) or 'app_' (for write operations). Current name: '{{rpcName}}'. Suggested: '{{suggestedName}}'"
33
34
  },
34
35
  hasSuggestions: true
35
36
  },
@@ -41,10 +42,66 @@ module.exports = {
41
42
  return {};
42
43
  }
43
44
 
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)$/;
45
+ const validVerbs = ['list', 'get', 'create', 'update', 'delete', 'read', 'check', 'upsert', 'ensure', 'grant', 'insert', 'remove', 'revoke', 'resolve'];
46
+ const readVerbs = ['list', 'get', 'read', 'check', 'resolve'];
47
+ const writeVerbs = ['create', 'update', 'delete', 'upsert', 'bulk_create', 'bulk_update', 'bulk_import', 'ensure', 'grant', 'insert', 'remove', 'revoke'];
48
+ // Common qualifier patterns that can appear after the verb (e.g., _by_code, _by_id, _by_slug)
49
+ const qualifierPatterns = ['by_code', 'by_id', 'by_slug', 'by_name', 'by_email', 'by_uuid'];
50
+
51
+ /**
52
+ * Extract the verb from an RPC name, handling qualifiers like _by_code
53
+ * @param {string} rpcName - The RPC name (e.g., 'data_event_get_by_code')
54
+ * @returns {string|null} - The verb (e.g., 'get') or null if not found
55
+ */
56
+ function extractVerb(rpcName) {
57
+ const parts = rpcName.split('_');
58
+
59
+ // Remove prefix (data_ or app_)
60
+ if (parts[0] === 'data' || parts[0] === 'app') {
61
+ parts.shift();
62
+ }
63
+
64
+ // Look for valid verbs from the end, skipping qualifiers
65
+ for (let i = parts.length - 1; i >= 0; i--) {
66
+ // Check for bulk operations first (bulk_create, bulk_update, bulk_import)
67
+ // These span 2 parts, so check if parts[i-1]_parts[i] forms a bulk verb
68
+ if (i > 0) {
69
+ const bulkCandidate = `${parts[i - 1]}_${parts[i]}`;
70
+ if (writeVerbs.includes(bulkCandidate)) {
71
+ return bulkCandidate;
72
+ }
73
+ }
74
+
75
+ // Check for regular single-part verbs
76
+ const candidate = parts[i];
77
+ if (validVerbs.includes(candidate)) {
78
+ return candidate;
79
+ }
80
+
81
+ // Check if we're in a qualifier pattern
82
+ // Qualifiers like 'by_code' span multiple parts (e.g., 'by' + 'code')
83
+ // Check if the suffix from this position (or including previous part) matches any qualifier
84
+ const suffix = parts.slice(i).join('_');
85
+ const suffixWithPrev = i > 0 ? parts.slice(i - 1).join('_') : suffix;
86
+
87
+ if (qualifierPatterns.some(qp =>
88
+ suffix === qp ||
89
+ suffix.startsWith(qp + '_') ||
90
+ suffixWithPrev === qp ||
91
+ suffixWithPrev.startsWith(qp + '_')
92
+ )) {
93
+ // We're in a qualifier, continue searching backwards
94
+ continue;
95
+ }
96
+ }
97
+
98
+ return null;
99
+ }
100
+
101
+ // Updated pattern to allow verbs anywhere in the name (not just at the end)
102
+ // Pattern: (data_|app_) + domain/verb parts + optional qualifiers
103
+ // This allows patterns like: app_insert_event_app_access, app_ensure_page_permissions
104
+ const rpcPattern = /^(data_|app_)[a-z0-9_]+$/;
48
105
 
49
106
  return {
50
107
  CallExpression(node) {
@@ -63,35 +120,131 @@ module.exports = {
63
120
  return;
64
121
  }
65
122
 
66
- // Check if it matches the pattern
67
- if (!rpcPattern.test(rpcName)) {
68
- // Extract verb if possible
123
+ // Check if RPC starts with required prefix
124
+ const hasDataPrefix = rpcName.startsWith('data_');
125
+ const hasAppPrefix = rpcName.startsWith('app_');
126
+
127
+ if (!hasDataPrefix && !hasAppPrefix) {
128
+ // RPC doesn't start with data_ or app_ prefix
129
+ // Try to determine the verb from the RPC name to suggest correct prefix
69
130
  const parts = rpcName.split('_');
70
- const verb = parts[parts.length - 1];
131
+ let verb = null;
132
+ let suggestedPrefix = 'data_'; // Default to data_ for read operations
71
133
 
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_');
134
+ // Look for verbs in the RPC name (check from the end)
135
+ for (let i = parts.length - 1; i >= 0; i--) {
136
+ const candidate = parts[i];
137
+ const candidateWithBulk = i > 0 ? `${parts[i - 1]}_${candidate}` : null;
76
138
 
77
- let suggestedPrefix = 'data_';
78
- if (isWriteOperation) {
139
+ // Check for bulk operations first
140
+ if (candidateWithBulk && writeVerbs.includes(candidateWithBulk)) {
141
+ verb = candidateWithBulk;
79
142
  suggestedPrefix = 'app_';
143
+ break;
80
144
  }
81
145
 
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
- });
146
+ // Check for regular verbs
147
+ if (validVerbs.includes(candidate)) {
148
+ verb = candidate;
149
+ if (readVerbs.includes(candidate)) {
150
+ suggestedPrefix = 'data_';
151
+ } else if (writeVerbs.includes(candidate)) {
152
+ suggestedPrefix = 'app_';
153
+ }
154
+ break;
155
+ }
156
+ }
157
+
158
+ // Construct suggested name
159
+ // If we found a verb, suggest adding the prefix
160
+ // Otherwise, suggest data_ prefix (most common for read operations)
161
+ let suggestedName;
162
+ if (verb) {
163
+ // RPC already has a verb, just add the prefix
164
+ suggestedName = `${suggestedPrefix}${rpcName}`;
93
165
  } else {
94
- // Invalid verb
166
+ // Can't determine verb, suggest data_ as default
167
+ // User should review and adjust if it's a write operation
168
+ suggestedName = `data_${rpcName}`;
169
+ }
170
+
171
+ context.report({
172
+ node: firstArg,
173
+ messageId: 'missingPrefix',
174
+ data: {
175
+ rpcName,
176
+ suggestedName
177
+ },
178
+ suggest: [{
179
+ desc: `Rename to '${suggestedName}' (or 'app_${rpcName}' if it's a write operation)`,
180
+ fix(fixer) {
181
+ return null; // Complex fix - requires database migration
182
+ }
183
+ }]
184
+ });
185
+ return; // Don't check further if missing prefix
186
+ }
187
+
188
+ // Basic pattern check - just verify it starts with data_ or app_ and has valid characters
189
+ if (!rpcPattern.test(rpcName)) {
190
+ context.report({
191
+ node: firstArg,
192
+ messageId: 'invalidRpcNaming',
193
+ data: { rpcName },
194
+ suggest: [{
195
+ desc: `RPC name must follow pattern: data_<domain>_<verb> or app_<domain>_<verb>`,
196
+ fix(fixer) {
197
+ return null; // Complex fix
198
+ }
199
+ }]
200
+ });
201
+ return;
202
+ }
203
+
204
+ // Extract verb and validate prefix matches operation type
205
+ const verb = extractVerb(rpcName);
206
+
207
+ if (!verb) {
208
+ // Couldn't extract verb - this is okay for some RPCs that don't follow standard verb patterns
209
+ // But we still require the prefix, which we've already validated
210
+ return;
211
+ }
212
+
213
+ const isReadOperation = readVerbs.includes(verb);
214
+ const isWriteOperation = writeVerbs.includes(verb) || verb.startsWith('bulk_');
215
+
216
+ // Check if prefix matches verb type
217
+ const hasDataPrefixForVerb = rpcName.startsWith('data_');
218
+ const hasAppPrefixForVerb = rpcName.startsWith('app_');
219
+
220
+ if (hasDataPrefixForVerb && isWriteOperation) {
221
+ context.report({
222
+ node: firstArg,
223
+ messageId: 'invalidRpcNaming',
224
+ data: { rpcName },
225
+ suggest: [{
226
+ desc: `Use 'app_' prefix for write operations (${verb})`,
227
+ fix(fixer) {
228
+ return null; // Complex fix
229
+ }
230
+ }]
231
+ });
232
+ } else if (hasAppPrefixForVerb && isReadOperation) {
233
+ context.report({
234
+ node: firstArg,
235
+ messageId: 'invalidRpcNaming',
236
+ data: { rpcName },
237
+ suggest: [{
238
+ desc: `Use 'data_' prefix for read operations (${verb})`,
239
+ fix(fixer) {
240
+ return null; // Complex fix
241
+ }
242
+ }]
243
+ });
244
+ } else if (!isReadOperation && !isWriteOperation) {
245
+ // Verb not recognized - this might be a valid verb we haven't added yet
246
+ // Only report if it's clearly invalid
247
+ if (!validVerbs.includes(verb)) {
95
248
  context.report({
96
249
  node: firstArg,
97
250
  messageId: 'invalidRpcVerb',
@@ -104,41 +257,6 @@ module.exports = {
104
257
  }]
105
258
  });
106
259
  }
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
260
  }
143
261
  }
144
262
  }
@@ -226,13 +344,17 @@ module.exports = {
226
344
  }
227
345
 
228
346
  // 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)\./);
347
+ // Exclude: scripts/, server/, node/, config files, and .config. files
348
+ const isNodeScript = filename.includes('/scripts/') ||
349
+ filename.includes('\\scripts\\') ||
350
+ filename.includes('/server/') ||
351
+ filename.includes('\\server\\') ||
352
+ filename.includes('/node/') ||
353
+ filename.includes('\\node\\') ||
354
+ filename.includes('config') ||
355
+ filename.match(/\.(config|server)\./);
234
356
 
235
- if (!isClientCode) {
357
+ if (isNodeScript) {
236
358
  return {};
237
359
  }
238
360
 
@@ -147,7 +147,7 @@ declare enum RPCFunction {
147
147
  RBAC_PAGE_ACCESS_CHECK = "rbac_page_access_check",
148
148
  RBAC_ROLE_GRANT = "rbac_role_grant",
149
149
  RBAC_ROLE_REVOKE = "rbac_role_revoke",
150
- RBAC_ROLES_LIST = "rbac_roles_list",
150
+ RBAC_ROLES_LIST = "data_rbac_roles_list",
151
151
  RBAC_ROLE_VALIDATE = "rbac_role_validate",
152
152
  RBAC_SESSION_TRACK = "rbac_session_track",
153
153
  RBAC_AUDIT_LOG = "rbac_audit_log"
package/dist/hooks.d.ts CHANGED
@@ -1,12 +1,12 @@
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-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';
2
+ import { S as StorageUploadOptions, a as StorageUploadResult, b as StorageListOptions, c as StorageListResult, d as StorageFileInfo } from './usePublicRouteParams-DQLrDqDb.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-DQLrDqDb.js';
4
4
  import * as React$1 from 'react';
5
5
  import { SortingState, ColumnFiltersState, ExpandedState } from '@tanstack/react-table';
6
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
- import { D as Database } from './database.generated-CcnC_DRc.js';
9
+ import { D as Database } from './database.generated-DT8JTZiP.js';
10
10
  import { F as FileCategory, a as FileReference } from './file-reference-BavO2eQj.js';
11
11
  import 'react-hook-form';
12
12
  import 'zod';
package/dist/hooks.js CHANGED
@@ -1,12 +1,12 @@
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';
1
+ export { clearPublicEventCache, clearPublicLogoCache, extractEventCodeFromPath, generatePublicRoutePath, getPublicEventCacheStats, getPublicLogoCacheStats, useFormDialog, useOrganisationPermissions, usePublicEvent, usePublicEventCode, usePublicEventLogo, usePublicRouteParams, useZodForm } from './chunk-4DDCYDQ3.js';
2
+ import { getPublicUrl, getSignedUrl, uploadFile, deleteFile, archiveFile, listFiles } from './chunk-MPBLMWVR.js';
3
+ export { cleanupQueryCache, clearFileDisplayCache, clearPublicFileDisplayCache, getFileDisplayCacheStats, getPublicFileDisplayCacheStats, invalidateFileDisplayCache, queryCacheHelpers, useAddressAutocomplete, useDebounce, useEventTheme, useFileDisplay, usePreventTabReload, usePublicFileDisplay, useQueryCache } from './chunk-MPBLMWVR.js';
4
+ import './chunk-5W2A3DRC.js';
5
5
  export { useDataTablePerformance, useFocusTrap, useToast } from './chunk-S7DKJPLT.js';
6
- export { useAppConfig, useOrganisationSecurity } from './chunk-VBCS3DUA.js';
6
+ export { useAppConfig, useOrganisationSecurity } from './chunk-EF2UGZWY.js';
7
7
  import './chunk-C7NSAPTL.js';
8
- import './chunk-FTCRZOG2.js';
9
- import './chunk-ZFYPMX46.js';
8
+ import './chunk-T5CVK4R3.js';
9
+ import './chunk-LX6U42O3.js';
10
10
  import './chunk-AHU7G2R5.js';
11
11
  import './chunk-6QYDGKQY.js';
12
12
  import './chunk-4SXLQIZO.js';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { a as UnifiedAuthContextType, d as UnifiedAuthProvider, c as UnifiedAuthProviderProps, U as UserEventAccess, u as useUnifiedAuth } from './UnifiedAuthProvider-CKvHP1MK.js';
2
- export { q as LogLevel, L as Logger, r as LoggerConfig, g as cn, l as createBaseClient, o as createLogger, f as createSecureDataAccess, e as emailSchema, A as formatCompactNumber, x as formatCurrency, t as formatDate, w as formatDateTime, B as formatFileSize, C as formatInTimeZone, y as formatNumber, z as formatPercent, v as formatTime, E as formatTimeInTimeZone, H as fromZonedTime, i as getAppConfig, k as getCurrentAppId, j as getCurrentAppName, J as getTimeZoneDifference, D as getTimezoneAbbreviation, F as getUserTimeZone, m as logger, n as nameSchema, b as passwordSchema, p as phoneSchema, I as roundToNearestMinutes, c as sanitizeFormData, d as sanitizeHtml, s as sanitizeUserInput, h as setAppConfig, G as toZonedTime, a as urlSchema, u as useSessionTracking } from './timezone-BZe_eUxx.js';
2
+ export { q as LogLevel, L as Logger, r as LoggerConfig, g as cn, l as createBaseClient, o as createLogger, f as createSecureDataAccess, e as emailSchema, A as formatCompactNumber, x as formatCurrency, t as formatDate, w as formatDateTime, B as formatFileSize, C as formatInTimeZone, y as formatNumber, z as formatPercent, v as formatTime, E as formatTimeInTimeZone, H as fromZonedTime, i as getAppConfig, k as getCurrentAppId, j as getCurrentAppName, J as getTimeZoneDifference, D as getTimezoneAbbreviation, F as getUserTimeZone, m as logger, n as nameSchema, b as passwordSchema, p as phoneSchema, I as roundToNearestMinutes, c as sanitizeFormData, d as sanitizeHtml, s as sanitizeUserInput, h as setAppConfig, G as toZonedTime, a as urlSchema, u as useSessionTracking } from './timezone-0AyangqX.js';
3
3
  import { j as EventService, k as OrganisationService, A as AuthService, l as InactivityService } from './AuthService-DmfO5rGS.js';
4
4
  export { c as EventServiceProvider, i as InactivityServiceProvider, f as OrganisationServiceProvider } from './AuthService-DmfO5rGS.js';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
@@ -8,16 +8,16 @@ import { i as OrganisationProviderProps$1, E as Event, h as OrganisationContextT
8
8
  export { O as Organisation, a as OrganisationMembership, g as OrganisationSecurityError, U as UserProfile } from './event-CW5YB_2p.js';
9
9
  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
- 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';
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-lBy5L2ry.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-DlsCaR5v.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-CIGSujI2.js';
14
14
  export { u as useToast } from './useToast-AyaT-x7p.js';
15
15
  export { D as DataTable, a as DataTableProps } from './DataTable-DRUIgtUH.js';
16
16
  import { d as DataRecord, a as DataTableAction, D as DataTableColumn } from './types-DXstZpNI.js';
17
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-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';
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-DQLrDqDb.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-DQLrDqDb.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';
@@ -25,7 +25,7 @@ export { StyleImport, getAllStylePaths, getStylePath, styleConfig } from './styl
25
25
  export { ColorPalette, ColorShade, PaletteData, applyPalette, clearPalette, parseAndNormalizeEventColours } from './theming/runtime.js';
26
26
  export { a as NavigationItem, N as NavigationMenuProps, b as NavigationMode } from './types-t9H8qKRw.js';
27
27
  import 'clsx';
28
- import './database.generated-CcnC_DRc.js';
28
+ import './database.generated-DT8JTZiP.js';
29
29
  import './core-CUElvH_C.js';
30
30
  import '@radix-ui/react-label';
31
31
  import '@radix-ui/react-checkbox';
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
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';
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-Z2FNRKF3.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-5HNSDQWH.js';
3
+ export { AccessDenied } from './chunk-S6ZQKDY6.js';
4
+ import { Dialog, DialogContent, DialogHeader } from './chunk-J2U36LHD.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-J2U36LHD.js';
6
+ import { Button } from './chunk-GS5672WG.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-GS5672WG.js';
8
+ export { StorageUtils, clearPublicEventCache, clearPublicLogoCache, extractEventCodeFromPath, generatePublicRoutePath, getPublicEventCacheStats, getPublicLogoCacheStats, useFormDialog, useOrganisationPermissions, usePublicEvent, usePublicEventCode, usePublicEventLogo, usePublicRouteParams, useZodForm } from './chunk-4DDCYDQ3.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-MPBLMWVR.js';
10
+ export { applyPalette, clearPalette, parseAndNormalizeEventColours } from './chunk-5W2A3DRC.js';
11
11
  export { useToast } from './chunk-S7DKJPLT.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';
12
+ import { Card } from './chunk-EF2UGZWY.js';
13
+ export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ErrorBoundary, ErrorBoundaryProvider, PublicPageProvider, useAppConfig, useIsPublicPage, useOrganisationSecurity, usePublicPageContext } from './chunk-EF2UGZWY.js';
14
14
  import './chunk-C7NSAPTL.js';
15
- import { OrganisationServiceContext, UnifiedAuthContext, OrganisationServiceProvider } from './chunk-FTCRZOG2.js';
16
- export { EventServiceProvider, InactivityServiceProvider, OrganisationServiceProvider, UnifiedAuthProvider, useAuthService, useEventService, useInactivityService, useOrganisationService, useOrganisations, useSessionRestoration, useUnifiedAuth } from './chunk-FTCRZOG2.js';
17
- 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';
15
+ import { OrganisationServiceContext, UnifiedAuthContext, OrganisationServiceProvider } from './chunk-T5CVK4R3.js';
16
+ export { EventServiceProvider, InactivityServiceProvider, OrganisationServiceProvider, UnifiedAuthProvider, useAuthService, useEventService, useInactivityService, useOrganisationService, useOrganisations, useSessionRestoration, useUnifiedAuth } from './chunk-T5CVK4R3.js';
17
+ 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-LX6U42O3.js';
18
18
  export { RBACAuditManager, createAuditManager, emitAuditEvent, getGlobalAuditManager, setGlobalAuditManager } from './chunk-AHU7G2R5.js';
19
19
  export { FileCategory } from './chunk-6QYDGKQY.js';
20
20
  import './chunk-4SXLQIZO.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';
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-C7ZQ5O4C.js';
22
22
  export { formatInTimeZone, formatTimeInTimeZone, fromZonedTime, getTimeZoneDifference, getTimezoneAbbreviation, getUserTimeZone, roundToNearestMinutes, toZonedTime } from './chunk-FEJLJNWA.js';
23
23
  export { LoadingSpinner, sanitizeHtml } from './chunk-A3W6LW53.js';
24
24
  import './chunk-OJ4SKRSV.js';
package/dist/providers.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import './chunk-C7NSAPTL.js';
2
- export { AuthServiceContext, AuthServiceProvider, EventServiceContext, EventServiceProvider, InactivityServiceContext, InactivityServiceProvider, OrganisationServiceContext, OrganisationServiceProvider, UnifiedAuthContext, UnifiedAuthProvider, useUnifiedAuth } from './chunk-FTCRZOG2.js';
3
- import './chunk-ZFYPMX46.js';
2
+ export { AuthServiceContext, AuthServiceProvider, EventServiceContext, EventServiceProvider, InactivityServiceContext, InactivityServiceProvider, OrganisationServiceContext, OrganisationServiceProvider, UnifiedAuthContext, UnifiedAuthProvider, useUnifiedAuth } from './chunk-T5CVK4R3.js';
3
+ import './chunk-LX6U42O3.js';
4
4
  import './chunk-AHU7G2R5.js';
5
5
  import './chunk-4SXLQIZO.js';
6
6
  import './chunk-HF6O3O37.js';
@@ -1,8 +1,8 @@
1
1
  import { U as UUID, g as PermissionCacheKey, h as AuditEventSource, i as RBACAuditEvent, a as PermissionCheck, S as Scope, A as AccessLevel, b as PermissionMap, j as RBACAppContext, k as RBACRoleContext, l as UserRBACContext, P as Permission } from '../types-BeoeWV5I.js';
2
2
  export { E as EventAppRole, G as GlobalRole, I as InvalidScopeError, M as MissingUserContextError, O as Operation, e as OrganisationContextRequiredError, c as OrganisationRole, d as PermissionDeniedError, R as RBACError, f as RBACNotInitializedError } from '../types-BeoeWV5I.js';
3
- 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';
3
+ 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-lBy5L2ry.js';
4
4
  import { SupabaseClient } from '@supabase/supabase-js';
5
- import { D as Database } from '../database.generated-CcnC_DRc.js';
5
+ import { D as Database } from '../database.generated-DT8JTZiP.js';
6
6
  import * as react_jsx_runtime from 'react/jsx-runtime';
7
7
  import React__default from 'react';
8
8
  import { a as NavigationItem } from '../types-t9H8qKRw.js';
@@ -1,10 +1,10 @@
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';
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-Z2FNRKF3.js';
2
+ export { AccessDenied } from '../chunk-S6ZQKDY6.js';
3
+ export { SECURE_CLIENT_SYMBOL, SecureSupabaseClient, createSecureClient, fromSupabaseClient, isSecureClient, useAccessLevel, useCan, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, warnIfInsecureClient } from '../chunk-GS5672WG.js';
4
+ import '../chunk-EF2UGZWY.js';
5
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';
6
+ import '../chunk-T5CVK4R3.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-LX6U42O3.js';
8
8
  export { RBACAuditManager, createAuditManager, emitAuditEvent, getGlobalAuditManager, setGlobalAuditManager } from '../chunk-AHU7G2R5.js';
9
9
  import '../chunk-4SXLQIZO.js';
10
10
  import '../chunk-OJ4SKRSV.js';